chard.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 189 行

C
189
字号
// chard.c// From ES2// Modified by Xiang@XKX  #define HUMAN_RACE "/adm/daemons/race/human"#define BEAST_RACE "/adm/daemons/race/beast"#define MONSTER_RACE "/adm/daemons/race/monster" void create() { seteuid(getuid()); }   void setup_char(object ob){        string race;        mapping my;         if( !stringp(race = ob->query("race")) ) {                race = "人类";                        ob->set("race", "人类");        }         switch(race) {                case "人类":                        HUMAN_RACE->setup_human(ob);                        break;                        case "妖魔":                        MONSTER_RACE->setup_monster(ob);                        break;                        case "野兽":                        BEAST_RACE->setup_beast(ob);                        break;                        default:                         error("Chard: undefined race " + race + ".\n");        }         my = ob->query_entire_dbase();        if( undefinedp(my["pighead"]) ) my["pighead"] = 0;         if( undefinedp(my["jing"]) ) my["jing"] = my["max_jing"];        if( undefinedp(my["qi"]) ) my["qi"] = my["max_qi"]; //        if( undefinedp(my["eff_jing"]) ) my["eff_jing"] = my["max_jing"];         if( undefinedp(my["eff_jing"]) || my["eff_jing"] > my["max_jing"]) my["eff_jing"] = my["max_jing"];        if( undefinedp(my["eff_qi"]) || my["eff_qi"] > my["max_qi"]) my["eff_qi"] = my["max_qi"];         // avoid excess neili                 if (userp(ob))//        if (userp(ob) && (int)ob->query_skill("force") > (int)ob->query_skill("force", 1))         {                if( ob->query_skill("force",1) < 1 )                {                        my["max_neili"] = 0;                        my["neili"] = 0;                } else                if( !stringp(ob->query_skill_mapped("force")) )                {                        if (my["max_neili"] > (int)ob->query_skill("force",1) * 15)                                my["max_neili"] = ob->query_skill("force") * 15;			if (ob->query("szj/passed"))				my["max_neili"] += (int)ob->query_skill("shenzhao-jing", 1) * 4;                        if (my["neili"] > my["max_neili"])                                my["neili"] = my["max_neili"];                 } else                {                        if (my["max_neili"] > (int)ob->query_skill("force") * 12)                                 my["max_neili"] = ob->query_skill("force") * 12;			if (ob->query("szj/passed"))				my["max_neili"] += (int)ob->query_skill("shenzhao-jing", 1) * 4;                        if (my["neili"] > my["max_neili"])                                my["neili"] = my["max_neili"];                 }        } 	// avoid excess jingli	if (userp(ob)) 	{		if (my["max_jingli"] > (int)ob->query_skill("taoism") * 10		&& my["max_jingli"] > (int)ob->query_skill("force") /5)		my["max_jingli"] = ob->query_skill("taoism") * 10;                if(my["age"] > 20 && (int)ob->query_skill("biguan", 1) >= 100)                {                my["max_jingli"] = ob->query_skill("taoism") * 10 + 100;                }		if (!(int)ob->query_skill("taoism")){		my["max_jingli"] = ob->query_skill("force") / 5;                if(my["age"] > 20 && (int)ob->query_skill("biguan", 1) >= 100)                {                my["max_jingli"] = ob->query_skill("force") / 5 + 100;                }		}		}			if (my["jingli"] > my["max_jingli"])			my["jingli"] = my["max_jingli"];        if( undefinedp(my["shen_type"]) ) my["shen_type"] = 0;         if( undefinedp(my["shen"]) ) {                if (userp(ob))                                my["shen"] = 0;                else                        my["shen"] = my["shen_type"] * my["combat_exp"] / 10;        }         if( !ob->query_max_encumbrance() ) //                ob->set_max_encumbrance( my["str"] * 5000 );                ob->set_max_encumbrance( ob->query_str() * 5000 ); if (userp(ob) && ob->query("potential") - ob->query("learned_points") > (ceil(pow(ob->query("combat_exp")*10.0, 0.333333)) + 100) * 500)my["potential"] = to_int(ob->query("learned_points") + (ceil(pow(ob->query("combat_exp")*10.0, 0.333333)) + 100) * 500);        ob->reset_action();} varargs object make_corpse(object victim, object killer){        int i;        object corpse, *inv;        if( victim->is_ghost() ) {                inv = all_inventory(victim);                inv->owner_is_killed(killer);                inv -= ({ 0 });                i = sizeof(inv);                while(i--) inv[i]->move(environment(victim));                return 0;        }        corpse = new(CORPSE_OB);        corpse->set_name( victim->name(1) + "的尸体", ({ "corpse" }) );        corpse->set("age", victim->query("age"));        corpse->set("gender", victim->query("gender"));        corpse->set("victim_name", victim->name(1));        corpse->set("victim_id", victim->query("id"));        corpse->set("victim_user", userp(victim));        corpse->set("victim_exp", victim->query("combat_exp"));        corpse->set("victim_shen", victim->query("shen"));        corpse->set("kill_by", victim->query_temp("last_damage_from"));        if (victim->query_temp("faint_by")) corpse->set("kill_by", victim->query_temp("faint_by"));        else corpse->set("kill_by", killer);                victim->set_temp("die_by_from",corpse->query("kill_by"));        corpse->set_weight( victim->query_weight() );        corpse->set_max_encumbrance( victim->query_max_encumbrance() );        corpse->move(environment(victim));        // Don't let wizard left illegal items in their corpses.        if( !wizardp(victim) ) {                inv = all_inventory(victim);                inv->owner_is_killed(killer);                inv -= ({ 0 });                i = sizeof(inv);                while(i--) {                        if( (string)inv[i]->query("equipped")=="worn" ) {if (!inv[i]->query("ownmake")){                                inv[i]->move(corpse);}                       if (inv[i]->is_character())                     "/cmds/std/drop"->do_drop(victim, inv[i]);                                if( !inv[i]->wear() ) inv[i]->move(environment(victim));                        }                        if( inv[i]->query("embedded") ){                        	inv[i]->delete("embedded");if (!inv[i]->query("ownmake")){                        	inv[i]->move(corpse);}                      if (inv[i]->is_character())                     "/cmds/std/drop"->do_drop(victim, inv[i]);                        	}                        else                         if (!inv[i]->query("ownmake")){inv[i]->move(corpse);                       if (inv[i]->is_character())                     "/cmds/std/drop"->do_drop(victim, inv[i]);}                }        }        corpse->set("long", victim->long(1)                + "然而," + gender_pronoun(victim->query("gender"))                 + "已经死了,只剩下一具尸体静静地躺在这里。\n");        return corpse;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?