varargs mixed query(string prop, int raw) { mixed data, pdata; if(!mapp(dbase)) { return 0; } if(undefinedp(dbase[prop]) && (strsrch(prop, '/')!=-1)) { data = _query(dbase, explode(prop, "/")); } else { data = dbase[prop]; } if(default_ob) { if(undefinedp(data)) { data = default_ob->query(prop, 1); } else if(mapp(data)) { pdata = default_ob->query(prop, 1); if(mapp(pdata)) { data = pdata + data; } } } if(raw) { return data; } return evaluate( data, this_object() ); }
int CheckOrc(mixed val){ if(!val) return 0; if(!objectp(val)) return 0; if(val->GetRace() == "orc" || val->GetRace() == "rodent") return 0; else eventForce("growl at "+val->GetKeyName()); return 1; }
int CheckOrc(mixed val){ if(!val) return 0; if(!objectp(val)) return 0; if(val->GetRace() == "orc" || val->GetRace() == "rodent") return 0; eventForce("growl at "+val->GetKeyName()); eventForce("say murdering, genocidal humanoids! Leave us alone!"); return 1; }
varargs int receive_wound(string type, int damage, mixed who) { int val; if( damage < 0 ) error("F_DAMAGE: 伤害值为负值。\n"); if( type!="jing" && type!="qi" ) error("F_DAMAGE: 伤害种类错误( 只能是 jing, qi 其中之一 )。\n"); set_temp("last_damage_from", who); if(living(this_object()) && objectp(who) && userp(who)) set_temp("last_eff_damage_from", who->query("id")); val = (int)query("eff_" + type) - damage; if( val >= 0 ) set("eff_" + type, val); else { set( "eff_" + type, -1 ); val = -1; } if( (int)query(type) > val ) set(type, val); set_heart_beat(1); return damage; }
void set_default_object(mixed ob) { // if( geteuid(previous_object()) != ROOT_UID ) // error("dbase: Only this_object() or object with root euid can set default_ob.\n"); if( !geteuid() ) seteuid(getuid()); default_ob = ob; ob->add("no_clean_up", 1); }
int MarriageRequest(mixed arg1, mixed arg2, mixed arg3){ string s1, s2, dudename; object ob1, ob2; if(strsrch(arg2,"divorce") != -1){ this_object()->performDivorce(arg1); return 1; } if(sscanf(arg3,"%s and %s", s1, s2) !=2 && sscanf(arg3,"%s to %s", s1, s2) !=2){ eventForce("say "+arg1->GetName()+", you are confusing me."); return 1; } dudename = arg1->GetKeyName(); if(s1 == "me" || s1 == "i") s1 = dudename; if(s2 == "me" || s2 == "i") s2 = dudename; if(s1 != dudename && s2 != dudename ){ eventForce("say Those people will have to decide "+ "to get married on their own. It isn't "+ "any of your business."); return 1; } if( s1 == s2){ eventForce("say we don't do single-member marriages here."); return 1; } if(! ob1 = present(s1, environment(this_object()))){ eventForce("say "+capitalize(s1)+" isn't here."); return 1; } if(! ob2 = present(s2, environment(this_object()))){ eventForce("say "+capitalize(s2)+" isn't here."); return 1; } if(!living(ob1) || !living(ob2)){ eventForce("say I do not perform marriages with inanimate objects."); return 1; } this_object()->performMarriage(ob1, ob2); return 1; }
string pluralize(mixed single) { int x; string str, tmp; if(!single) return single; if(objectp(single)) { if(str = (string)single->query("plural name")) return str; else str = (string)single->query_name(); } else str = (string)single; if(!str) return str; x = strlen(str); if(ABNORMAL[str]) return ABNORMAL[str]; if(x > 2 && str[x-3..x-1] == "man") return str[0..x-3]+"en"; if(x > 1) { tmp = str[x-2..x-1]; switch(tmp) { case "ts": return str+""; case "ch": case "sh": return str+"es"; case "ff": case "fe": return str[0..x-3]+"ves"; case "us": return str[0..x-3]+"i"; case "um": return str[0..x-3]+"a"; case "ef": return str+"s"; } } tmp = str[x-1..x-1]; // 2 bug fixes by Whit if(str[sizeof(str)-2..sizeof(str)] == "ts") return str; if(str[sizeof(str)-2..sizeof(str)] == "es") return str; switch(tmp) { case "s": return str+"es"; case "o": case "x": return str+"es"; case "wolf": return str[0..x-4]+"wolves"; case "f": return str[0..x-2]+"ves"; case "y" : return str[0..x-2]+"ies"; } return str+"s"; }
void send_beep(object o_user, mixed t_user, string t_mud) { if(objectp(t_user)) t_user = lower_case(t_user->query_name()); else if(stringp(t_user)) t_user = lower_case(t_user); else return; find_object(I3_CHDMOD)->sendToUser("beep", o_user->query_name(), t_mud, t_user, 0); }
void setup( mixed who, int s_o ) { if ( !who ) return ; subj_obj = s_o; if ( stringp( who ) ) { string used_mudname; sscanf( who, "%s@%s", user_name, used_mudname ); if ( used_mudname ) mudname = IMUD_D->canon_mudname( used_mudname ); if ( mudname ) { int gend = IMUD_D->get_gender( mudname, user_name ); // No idea if this is silent or not ... #if 0 if ( this_body() ) move( this_body(), "in" ); #else // This is probably safer -Beek move_object(this_body()); #endif set_id( "wibblewibble"+lower_case(user_name) + " "+ replace_string( lower_case(used_mudname), ".", " " ) ); set_gender( gend == -1 ? 1 : gend ); // Assume male if unknown } else remove(); } else { set_gender( who->query_gender() ); user_name = who->query_userid(); } // we exist temporarily only call_out( (: remove :), 0); }
string _the_short(mixed x) { if(objectp(x)) return x->the_short(); // Check for "the" prefix - if missing, add it if(stringp(x)) if(strsrch(lower_case(x), "the ") != 0) return "the " + x; return x; }
varargs mixed query_with_slash(string prop, int raw) { mixed data; if( !mapp(dbase) ) return 0; if( undefinedp(dbase[prop]) && (strsrch(prop, '.')!=-1) ) data = _query(dbase, explode(prop, ".")); else data = dbase[prop]; if( undefinedp(data) && default_ob ) data = default_ob->query(prop, 1); if( raw ) return data; return evaluate( data, this_object() ); }
nomask int query_mortal(mixed player) { if (objectp(player)) { if (!player <-"/sys/obj/player") { return 0; } player = player->query_name(); } else { argcheck(stringp(player), 1, "player object or string"); } return !query_wizard(player); }
int query_admin(mixed player) { if(objectp(player)) { if( !player<-"/sys/lib/player" ) { return 0; } player = player->query_name(); } else { argcheck( stringp( player ), 1, "player object or string" ); } return SECURE_D->query_admin( player ) ; }
varargs void send_error(mixed o_user, string t_mud, mixed t_user, string err_code, string err_msg, mixed *packet) { if(intp(o_user)) o_user = 0; else if(objectp(o_user)) o_user = o_user->query_name(); else if(stringp(o_user)) o_user = lower_case(o_user); else o_user = 0; if(intp(t_user)) t_user = 0; else if(objectp(t_user)) t_user = t_user->query_name(); else if(stringp(t_user)) t_user = lower_case(t_user); else t_user = 0; find_object(I3_CHDMOD)->sendToUser("error", o_user, t_mud, t_user, ({ err_code, err_msg, packet ? packet : 0 }) );
/* * destruct modified to cope with virtual objects */ void destruct(mixed name) { object obj; if(stringp(name)) { obj = find_object(name); if(obj->query_property("file_name")) HANDLER->destruct_virtual_object(obj); destruct(obj); } else if(objectp(name)) { if(name->query_property("file_name")) HANDLER->destruct_virtual_object(name); destruct(name); } }
void remove_eternal_fate(mixed ob) { string keyword; if (stringp(ob)) keyword = ob; else if (objectp(ob)) { keyword = ob->query("fate_keyword"); if (!keyword) keyword = file_name(ob); } else return; map_delete(eternal_fates, keyword); }
void set_wearing( mixed obj ) { object armor; if( !obj ) return; if( typeof(obj) == T_STRING ) { /* We've got to compile our own copy */ armor = clone_object( obj ); if( armor ) { armor->setup(); armor->move( this_object() ); if( !query_slot( armor->query_slot() ) ) { do_wear( armor ); } } } else { obj->move( this_object() ); if( !query_slot( obj->query_slot() ) ) { do_wear( obj ); } } }
void add_eternal_fate(mixed ob, string fate) { string keyword; if (stringp(ob)) keyword = ob; else if (objectp(ob)) { keyword = ob->query("fate_keyword"); if (!keyword) keyword = file_name(ob); } else return; if (!eternal_fates) eternal_fates = ([]); eternal_fates += ([ keyword : fate ]); }
void add_fate(mixed ob, function f) { string keyword; if (stringp(ob)) keyword = ob; else if (objectp(ob)) { keyword = ob->query("fate_keyword"); if (!keyword) keyword = file_name(ob); } else return; if (!fates) fates = ([]); fates += ([ keyword : f ]); }
string _a_short(mixed x) { if(objectp(x)) return x->a_short(); // Check for "a"/"an" prefix - if missing, add it if(stringp(x)) if(strsrch(lower_case(x), "a ") != 0) if(strsrch(lower_case(x), "an ") != 0) { if(member_array(x[0],vowels) == -1) return "a " + x; else return "an " + x; } return x; }
int valid_leave(mixed me, string dir) { int i; string room; if (dir == "south") { i = (int)me->query_temp("back_road"); i = i + 1; if (i >= (random(5) + 5)) { me->set_temp("back_road", 10); return notify_fail("�������ô��ؼ��� �ðɣ�����������Ը������Ҫ�����ܴ�Ĵ���ร���\n�������֮�� �������Ҫ��ȥ�Ļ����������߰ɣ���\n"); } else { me->set_temp("back_road",i); return notify_fail("�㻹��ؼң����˵ظ���û��·�����ˣ�\n"); } } else if (dir == "north") { me->delete_temp("back_road"); return 1; } else if (dir == "up" || dir == "����") { if ( (int) me->query_temp("back_road") >= 10 ) { end_death(me); me->delete_temp("back_road"); me->reincarnate(); if(!stringp(room = me->query("startroom"))) room = STARTROOM; me->move(room); message_vision( "ͻȻ���н���һ����⣬������������ֱ�ӡ�\n����һ��������ɢȥ��һ����Ӱ���֣�$N���ڴ�����͵�ܻ����ˡ�\n",me); return notify_fail("���������ػ������ˡ�\n"); } else return notify_fail("���ȥ���� û��ô����\n"); } else return 1; }
varargs int eventReceiveDamage(mixed agent, int type, int x, int internal, mixed limbs) { int hp, damage, damdiff; object ob = GetShadowedObject(); string evidence, limb_string; evidence = ""; if(objectp(agent)) evidence += "You receive damage from "+agent->GetKeyName(); else if(stringp(agent)) evidence += "You receive damage from "+agent; if(type) { switch(type){ case BLUNT : evidence += ", damage type is BLUNT";break; case BLADE : evidence += ", damage type is BLADE";break; case KNIFE : evidence += ", damage type is KNIFE";break; case WATER : evidence += ", damage type is WATER";break; case SHOCK : evidence += ", damage type is SHOCK";break; case COLD : evidence += ", damage type is COLD";break; case HEAT : evidence += ", damage type is HEAT";break; case GAS : evidence += ", damage type is GAS";break; case ACID : evidence += ", damage type is ACID";break; case MAGIC : evidence += ", damage type is MAGIC";break; case POISON : evidence += ", damage type is POISON";break; case DISEASE : evidence += ", damage type is DISEASE";break; case TRAUMA : evidence += ", damage type is TRAUMA";break; case PIERCE : evidence += ", damage type is PIERCE";break; case PSIONIC : evidence += ", damage type is PSIONIC";break; case ANOXIA : evidence += ", damage type is ANOXIA";break; case DEATHRAY : evidence += ", damage type is DEATHRAY";break; case EMOTIONAL : evidence += ", damage type is EMOTIONAL";break; case SONIC : evidence += ", damage type is SONIC";break; case BITE : evidence += ", damage type is BITE";break; case OTHER : evidence += ", damage type is OTHER";break; default : evidence += ", damage type is UNKNOWN";break; } } if(x) evidence += ", raw damage is "+x; if(internal) evidence += ", internal variable is "+internal; if(limbs) { if(stringp(limbs)) limb_string = limbs; else if(arrayp(limbs)) { if(stringp(limbs[0])) limb_string = implode(limbs,", "); else if(objectp(limbs[0])){ foreach(object limb in limbs){ limb_string += limb->GetKeyName()+", "; } } } }
void set_wielding( mixed obj ) { object weapon; if( !obj ) return; if( typeof(obj) == T_STRING ) { /* We've got to compile our own copy */ weapon = clone_object( obj ); if( weapon ) { weapon->setup(); weapon->move( this_object() ); do_wield( weapon ); } } else { obj->move( this_object() ); do_wield( obj ); } }
varargs int eventReceiveDamage(mixed agent, int type, int x, int internal, mixed limbs) { int stamina, fatigue, hp, damage, damdiff; object ob = GetShadowedObject(); string evidence, limb_string; if(reporting){ string *damtypes = TYPES_D->eventCalculateTypes("damage", type); evidence = "%^BOLD%^%^RED%^"; if(objectp(agent)) evidence += "You receive damage from "+agent->GetKeyName(); else if(stringp(agent)) evidence += "You receive damage from "+agent; evidence +="."; if(type && sizeof(damtypes)) { string verboid; if(sizeof(damtypes) > 1) verboid = "s are "; else verboid = " is "; evidence += " Damage type"+verboid; evidence += lower_case(implode(damtypes,", ")); } else evidence += " Damage type is UNKNOWN"; if(x) evidence += ", raw damage is "+x; if(internal) evidence += ", internal variable is "+internal; if(limbs) { if(stringp(limbs)) limb_string = limbs; else if(arrayp(limbs)) { if(stringp(limbs[0])) limb_string = implode(limbs,", "); else if(objectp(limbs[0])){ foreach(object limb in limbs){ limb_string += limb->GetKeyName()+", "; } } } } else limb_string = ", and you can't tell where you're hit. ";
varargs mixed do_turn_obj_on(mixed foo, mixed foo2) { return foo->eventTurnOn(); }
varargs int make_workroom(mixed dude, int cre) { string tdir, dir_line, bakdata; int creator; if(!dude) return 0; if(objectp(dude)){ cdir = homedir(dude, cre); creator = (cre || creatorp(dude)); if(sizeof(get_dir(REALMS_DIRS+"/")) ==1) creator = 1; nom = dude->GetKeyName(); } if(stringp(dude)){ dude = lower_case(dude); if(cre || member_array(dude, PLAYERS_D->GetCreatorList()) != -1){ creator = 1; cdir = REALMS_DIRS + "/" + dude; } else { cdir = ESTATES_DIRS + "/" + dude[0..0] + "/" + dude; } nom = dude; } if(unguarded( (: file_size("/realms/template/") :) ) == -1) return 4; if(unguarded( (: file_size(cdir+"/area") :) ) == -1){ tdir = "/realms/template/"; dir_line = "#define MY_DIR \""+cdir+"\""; bakdata = "workroom.orig : "+cdir+"/workroom.c\n"; mkdir(cdir); mkdir(cdir+"/log"); mkdir(cdir+"/log/archive"); mkdir(cdir+"/bak"); mkdir(cdir+"/tmp"); mkdir(cdir+"/area"); mkdir(cdir+"/adm"); mkdir(cdir+"/area/room"); mkdir(cdir+"/area/save"); mkdir(cdir+"/area/weap"); mkdir(cdir+"/area/obj"); mkdir(cdir+"/area/npc"); mkdir(cdir+"/area/armor"); mkdir(cdir+"/area/etc"); mkdir(cdir+"/area/doors"); mkdir(cdir+"/area/meals"); if(creator){ mkdir(cdir+"/cmds"); mkdir(cdir+"/public_html"); cp(tdir+"plan", cdir+"/.plan"); cp(tdir+"evaldefs.h", cdir+"/evaldefs.h"); cp(tdir+"profile", cdir+"/.profile"); cp(tdir+"cmds/custom.c", cdir+"/cmds/custom.c"); cp(tdir+"workroom.c", cdir+"/workroom.c"); cp(tdir+"workroom.c", cdir+"/workroom.bak"); cp(tdir+"workroom.c", cdir+"/bak/workroom.orig"); cp(tdir+"area/obj/chest.c", cdir+"/area/obj/chest.c"); } else { cp(tdir+"workroom_builder.c", cdir+"/workroom.c"); cp(tdir+"workroom_builder.c", cdir+"/workroom.bak"); cp(tdir+"workroom_builder.c", cdir+"/bak/workroom.orig"); cp(tdir+"area/obj/builder_chest.c", cdir+"/area/obj/builder_chest.c"); } cp(tdir+"adm/remote.c",cdir+"/adm/remote.c"); write_file(cdir+"/bak/bk.db",bakdata); cp(tdir+"area/customdefs.part1", cdir+"/area/customdefs.h"); write_file(cdir+"/area/customdefs.h","\n"+dir_line+"\n"); write_file(cdir+"/area/customdefs.h",read_file(tdir+"area/customdefs.part2")); cp(tdir+"area/room/sample_room.c", cdir+"/area/room/sample_room.c"); cp(tdir+"area/room/sample_two.c", cdir+"/area/room/sample_two.c"); cp(tdir+"area/weap/sword.c", cdir+"/area/weap/sword.c"); cp(tdir+"area/obj/table.c", cdir+"/area/obj/table.c"); cp(tdir+"area/obj/key.c", cdir+"/area/obj/key.c"); cp(tdir+"area/obj/case.c", cdir+"/area/obj/case.c"); cp(tdir+"area/obj/cup.c", cdir+"/area/obj/cup.c"); cp(tdir+"area/obj/pitcher.c", cdir+"/area/obj/pitcher.c"); cp(tdir+"area/obj/watch.c", cdir+"/area/obj/watch.c"); cp(tdir+"area/npc/fighter.c", cdir+"/area/npc/fighter.c"); cp(tdir+"area/armor/chainmail.c", cdir+"/area/armor/chainmail.c"); cp(tdir+"area/armor/leather_boot_r.c", cdir+"/area/armor/leather_boot_r.c"); cp(tdir+"area/armor/leather_boot_l.c", cdir+"/area/armor/leather_boot_l.c"); return 1; } else { //write("That person already has a homedir."); return 5;
int CheckOrc(mixed val){ if(!val) return 0; if(!objectp(val)) return 0; if(val->GetRace() == "orc" || val->GetRace() == "rodent") return 0; return 1; }
mixed do_turn_obj_off(mixed foo) { return foo->eventTurnOff(); }
mixed do_turn_on_obj_word_obj(mixed foo, mixed foo2) { return foo2->eventTurnOn(foo); }