npc2.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 566 行 · 第 1/2 页
C
566 行
set_skill("sword",200);
set_skill("club",200);
set_skill("whip",200);
set_skill("throwing",200);
set_skill("parry",200);
set_skill("dodge",200);
set("no_get",1);
set("szj/passed",1);
set("double_attack",1);
set("breakup", 1);
set("szj/over200", 1);
set("jiuyin/full", 1);
set("jiuyin/shang", 1);
set("jiuyin/xia", 1);
b=4000+random(4000);
a=6000+random(9000);
d=30+random(60);
set("str",d);
set("dex",d);
set("int",d);
set("con",d);
set("per",d);
set("kar",d);
set("jing",b);
set("max_jing",b);
set("eff_jing",b);
set("neili",a);
set("max_neili",a);
this_object()->set("party",ps[k]["party"]);
this_object()->set_skills(ps[k]["skills"]);
this_object()->set_skill_map(ps[k]["skill_map"]);
this_object()->set_skill_prepare(ps[k]["skill_prepare"]);
i=200+random(500);
e=200+random(500);
for (k = 0; k < sizeof(ns); k++)
this_object()->set_skill(ns[k], i);
this_object()->set_skill("literate",i);
this_object()->set_skill("shenzhao-jing",e);
if (mapp(skill_status = this_object()->query_skills()))//判断自己是否有功夫,如有将用这个函数全部删除
{
skill_status = this_object()->query_skills();
sname = keys(skill_status);//传回所有自己的功夫阵列
temp = sizeof(skill_status);
for (i = 0; i < temp; i++)
this_object()->set_skill(sname[i],e);//删除自己所有功夫
}
this_object()->change_combat_mode();
set("chat_chance_combat", 100);
set("chat_msg_combat", get_auto_actions("perform"));
change_combat_mode(ob, 1);
set("chat_chance", 20);
set("chat_msg", ({
(: random_move :)
// (: command, "exert powerup" :),
// (:random_chat:),
}) );
f=1+random(8);
setup();
if (ob->query("gender")=="女性")
{
carry_object("/clone/cloth/female"+f+"-cloth")->wear();
carry_object("/clone/cloth/female-shoe")->wear();
}
else {
carry_object("/clone/cloth/male"+f+"-cloth")->wear();
carry_object("/clone/cloth/male-shoe")->wear();
}
if (stringp(ob->query_skill_mapped("sword")))
carry_object(__DIR__"weapon/sword")->wield();
if (stringp(ob->query_skill_mapped("blade")))
carry_object(__DIR__"weapon/dao")->wield();
if (stringp(ob->query_skill_mapped("whip")))
carry_object(__DIR__"weapon/bian")->wield();
if (stringp(ob->query_skill_mapped("hammer")))
carry_object(__DIR__"weapon/hammer")->wield();
if (stringp(ob->query_skill_mapped("staff")))
carry_object(__DIR__"weapon/ban")->wield();
if (stringp(ob->query_skill_mapped("axe")))
carry_object(__DIR__"weapon/axe")->wield();
add_money("silver",50+random(50));
}
mixed get_auto_actions(string action)
{
int i, flag = 0;
for (i = 0; i < sizeof(pfm); i++)
if (pfm[i]["party"] == query("party")) {
flag = 1;
break;
}
if (!flag)
return ({ });
if (arrayp(pfm[i][action]))
return pfm[i][action];
else
return ({ });
}
void change_combat_mode(object me, int mode)
{
switch (mode) {
case 0:
delete("chat_chance_combat");
delete("chat_msg_combat");
set("jiali", 1);
break;
case 1:
set("chat_chance_combat", 100);
set("chat_msg_combat", get_auto_actions("perform"));
set("jiali", 50);
break;
case 2:
set("chat_chance_combat", 100);
set("chat_msg_combat", get_auto_actions("perform1"));
set("jiali", (int)query_skill("force") / 2);
break;
case 3:
set("chat_chance_combat", 100);
set("chat_msg_combat", get_auto_actions("perform2"));
set("jiali", 1);
break;
default:
set("chat_chance_combat", 80);
set("chat_msg_combat", get_auto_actions("perform"));
set("jiali", 50);
return;
}
set("combat_mode", mode);
// me->set("guard/status/combat_mode", mode);
}
void random_chat()
{
string *e,str="";
int i;
object npc,*inv;
if (!environment(this_object()))
return;
inv=all_inventory(environment(this_object()));
if(!sizeof(inv)) return;
e = sort_array(EMOTE_D->query_all_emote(), 1);
str=e[random(sizeof(e))];
command(str+" "+inv[random(sizeof(inv))]->query("id"));
set("answer",str);
return;
}
int chat()
{
int i, ratio, chance, rnd, flag = 0;
string *msg, *emotes, cmd;
object *inv, *killer;
if (!is_busy()
&& living(this_object())
&& environment(this_object()) )
{
if (arrayp(msg = get_auto_actions("powerup")))
for (i = 0; i < sizeof(msg); i++)
if (functionp(msg[i]))
evaluate(msg[i]);
}
if (query("neili") > 100 && query("max_neili") > 200 && !is_busy()
&& living(this_object())
&& environment(this_object())
) {
if (query("eff_jing") && query("jing") * 100 / query("eff_jing") <= 80)
command("exert regenerate");
if (query("eff_qi") && query("qi") >= 0 && query("qi") * 100 / query("eff_qi") <= 80)
command("exert recover");
if (query("eff_qi") && query("qi") >= 0
&& query("max_qi") && !is_fighting() && !query("mute")
&& query_skill_mapped("force")
&& query("eff_qi") < query("max_qi")
&& query("eff_qi") >= query("max_qi") / 3)
command("exert heal");
if (query("max_neili")
&& query("neili") * 100 / query("max_neili") <= 80
&& !is_fighting()
&& query_skill_mapped("force")) {
i = 1 + (int)query_skill("force") / 15 * (1 + (int)query_skill("force") / 100);
command(sprintf("dazuo %d", i));
}
}
if( !chance = (int)query(is_fighting()? "chat_chance_combat": "chat_chance") )
return 0;
if( arrayp(msg = query(is_fighting()? "chat_msg_combat": "chat_msg"))) {
if( query_temp("is_unconcious") ) return 0;
if(!living(this_object()) ) return 0;
if(!environment(this_object()) ) return 0;
if( random(100) < chance ) {
rnd = random(sizeof(msg));
if( stringp(msg[rnd]) )
say(msg[rnd]);
else if( functionp(msg[rnd]) )
return evaluate(msg[rnd]);
}
return 1;
}
return 1;
}
void init( )
{
object ob;
remove_call_out("hunting");
if( interactive(ob = this_player()) ) {
if (!ob->is_fighting())
ob->start_busy(1);
call_out("hunting",0);
}
if(!environment()->query("no_fight"))
if (!ob->is_fighting())
ob->start_busy(1);
call_out("hunting",0);
}
void hunting()
{
int i;
object *ob;
ob = all_inventory(environment());
for(i=sizeof(ob)-1; i>=0; i--) {
if( !ob[i]->is_character() || ob[i]==this_object() || !living(ob[i])) continue;
if(ob[i]->query("vendetta/authority")) continue;
kill_ob(ob[i]);
ob[i]->fight(this_object());
call_out("check",0);
}
}
void die()
{
object corpse, killer;
int i;
string skill;
object jla , jlb;
if( !living(this_object()) ) revive(1);
if( wizardp(this_object()) && query("env/immortal") ) return;
this_object()->clear_condition();
COMBAT_D->announce(this_object(), "dead");
if( objectp(killer = query_temp("last_damage_from")) ) {
set_temp("my_killer", killer->query("id"));
COMBAT_D->killer_reward(killer, this_object());
}
if (!killer) return;
if( objectp(corpse = CHAR_D->make_corpse(this_object(), killer)) )
corpse->move(environment());
killer->remove_all_killer();
if (userp(killer) )
{
jla=new("/clone/box/gbox");
jla->move(environment(this_object()));
this_object()->remove_all_killer();
message_vision("$N找到了一个宝箱。\n",killer);
all_inventory(environment())->remove_killer(this_object());
destruct(this_object());
}
destruct(this_object());
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?