예제 #1
0
파일: dbase.c 프로젝트: mudchina/fy4
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() );
} 
예제 #2
0
파일: chieftain.c 프로젝트: Elohim/FGmud
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;
}
예제 #3
0
파일: kurogane.c 프로젝트: Lundex/deadsouls
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;
}
예제 #4
0
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;
}
예제 #5
0
파일: dbase.c 프로젝트: mudchina/fy3
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);
}
예제 #6
0
파일: clerk.c 프로젝트: Elohim/FGmud
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;
}
예제 #7
0
파일: pluralize.c 프로젝트: ehershey/pd
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";
}
예제 #8
0
파일: mod_beep.c 프로젝트: abzde/dock9
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);
}
예제 #9
0
파일: ichannelt.c 프로젝트: Shea690901/lima
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);
}
예제 #10
0
파일: m_messages.c 프로젝트: Lundex/lima
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;
}
예제 #11
0
파일: dbase.c 프로젝트: mudchina/fy4
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() );
} 
예제 #12
0
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);
}
예제 #13
0
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 ) ;
}
예제 #14
0
파일: mod_error.c 프로젝트: abzde/dock9
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
    }) );
예제 #15
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);
  }
}
예제 #16
0
파일: fate.c 프로젝트: wingkit/xyj-ali
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);
}
예제 #17
0
파일: monster.c 프로젝트: dworkin/gurbalib
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 );
        }
    }
}
예제 #18
0
파일: fate.c 프로젝트: wingkit/xyj-ali
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 ]);
}
예제 #19
0
파일: fate.c 프로젝트: wingkit/xyj-ali
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 ]);
}
예제 #20
0
파일: m_messages.c 프로젝트: Lundex/lima
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;
}
예제 #21
0
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;
}
예제 #22
0
파일: diag.c 프로젝트: Elohim/FGmud
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()+", ";
                }
            }
        }
    }
예제 #23
0
파일: monster.c 프로젝트: dworkin/gurbalib
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 );
    }
}
예제 #24
0
파일: ring.c 프로젝트: Elohim/FGmud
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. ";
예제 #25
0
파일: turn.c 프로젝트: Elohim/FGmud
varargs mixed do_turn_obj_on(mixed foo, mixed foo2) {
    return foo->eventTurnOn();
}
예제 #26
0
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;
예제 #27
0
파일: orc_female1.c 프로젝트: Elohim/FGmud
int CheckOrc(mixed val){
    if(!val) return 0;
    if(!objectp(val)) return 0;
    if(val->GetRace() == "orc" || val->GetRace() == "rodent") return 0;
    return 1;
}
예제 #28
0
파일: turn.c 프로젝트: Elohim/FGmud
mixed do_turn_obj_off(mixed foo) {
    return foo->eventTurnOff();
}
예제 #29
0
파일: turn.c 프로젝트: Elohim/FGmud
mixed do_turn_on_obj_word_obj(mixed foo, mixed foo2) {
    return foo2->eventTurnOn(foo);
}