/* /lib/creator.c
* from the Dead Souls LPC Library
* a very simple creator object
* created by Descartes of Borg 950321
* Version: @(#) creator.c 1.14@(#)
* Last Modified: 96/12/21
*/
#include <lib.h>
#include <daemons.h>
#include <vision.h>
#include <position.h>
#include <message_class.h>
#include "include/creator.h"
inherit LIB_PLAYER;
#ifdef __PACKAGE_DATABASE_DB__
inherit LIB_ISQL;
#endif /* __PACKAGE_DATABASE_DB__ */
private int CreatorAge, CreatorBirth;
private static int LastCreatorAge;
/* ***************** /lib/creator.c driver applies ***************** */
static void create() {
player::create();
CreatorAge = 0;
LastCreatorAge = time();
CreatorBirth = time();
}
int is_living() { return 1; }
int inventory_accessible() { return 1; }
int inventory_visible() { return 1; }
mixed direct_verb_rule(string verb) {
return SOUL_D->CanTarget(this_player(), verb, this_object());
}
mixed direct_give_liv_obj() {
if( this_player() == this_object() ) return "Are you confused?";
return 1;
}
mixed direct_give_liv_obs() {
return direct_give_liv_obj();
}
mixed indirect_give_obj_to_liv(object item) {
if( !item ) return 0;
if( this_player() == this_object() ) return "Are you confused?";
if( environment(item) != this_player() ) return "You don't have that!";
return CanCarry((int)item->GetMass());
}
mixed indirect_give_obs_to_liv(object *item) {
return 1;
}
mixed direct_look_obj() { return 1; }
mixed direct_look_at_obj() { return 1; }
mixed direct_marry_liv_to_liv() {
return 1;
}
mixed indirect_marry_liv_to_liv() {
return 1;
}
static void net_dead() {
player::net_dead();
CreatorAge += time() - LastCreatorAge;
LastCreatorAge = time();}
void eventReconnect() {
string tmp;
player::eventReconnect();
LastCreatorAge = time();
if( file_exists(tmp = user_path(GetKeyName()) + "dead.edit") )
message("system", "\nYour edit file was saved as: "+tmp, this_object());
}
varargs int eventShow(object who, string str, string on_id) {
player::eventShow(who, str);
return 1;
}
/* ***************** /lib/creator.c events ***************** */
void eventDescribeEnvironment(int verbose) {
object env;
if( !(env = environment()) ) {
message("room_description", "No environment.", this_object());
return;
}
message("system", file_name(env), this_object());
player::eventDescribeEnvironment(verbose);
}
static int Destruct() {
int x;
if( !(x = player::Destruct()) ) return 0;
#ifdef __PACKAGE_DATABASE_DB__
isql::Destruct();
#endif /* __PACKAGE_DATABASE_DB__ */
return x;
}
/* ***************** /lib/creator.c local functions ***************** */
int Setup() {
string tmp;
int bugs, laston;
laston = GetLoginTime();
if( !player::Setup() ) return 0;
if( archp() ) AddChannel( ({ "admin", "error" }) );
AddSearchPath( ({ DIR_CREATOR_CMDS, DIR_SECURE_CREATOR_CMDS }) );
if( file_size(tmp = user_path(GetKeyName()) + "cmds") == -2 )
AddSearchPath( ({ tmp }) );
if( archp() ) AddSearchPath( ({ DIR_ADMIN_CMDS, DIR_SECURE_ADMIN_CMDS }) );
if( bugs = (int)BUGS_D->GetAssignedBugs(GetKeyName()) )
message("system", "\n >>> You have " +
consolidate(bugs, "an incomplete bug") +
" assigned to you!!!! <<<\n", this_object());
NOTIFY_D->eventPrintNotices(this_object(), laston);
return 1;
}
int eventForce(string cmd) {
if( !((int)master()->valid_apply( ({ GetKeyName() }) )) ) return 0;
else return player::eventForce(cmd);
}
/* *************** /lib/creator.c modal functions *************** */
int CanCarry(int amount) { return 1; }
/* ************ /lib/creator.c data manipulation functions ************ */
int GetCreatorAge() {
int x;
if( !interactive(this_object()) ) return CreatorAge;
x = time() - LastCreatorAge;
CreatorAge += x;
LastCreatorAge = time();
return CreatorAge;
}
varargs string GetLong(string str) {
str = player::GetLong() + "\n";
return str;
}
int GetCreatorBirth() { return CreatorBirth; }
string GetName() {
if( !GetInvis() ) return ::GetName();
else return "A shadow";
}