steal.c

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

C
295
字号
// steal.c#include <ansi.h>inherit F_CLEAN_UP;int main(object me, string arg){   string what, who;   object ob, victim,obj;   mapping myfam, vtfam;   int sp, dp;   if( environment(me)->query("no_fight")) return notify_fail("这里禁止行窃。\n");   if( environment(me)->query("no_steal")) return notify_fail("这里禁止行窃。\n");        if (userp(me) && !query_heart_beat(me))        {         "/cmds/usr/quithy"->main(me);//         write("由于你没有心跳,请重新登陆!!\n");        return notify_fail("由于你没有心跳,请重新登陆!!\n");        }   if( me->query_temp("stealing") )      return notify_fail("你已经在找机会下手了!\n");   if( !arg || sscanf(arg, "%s from %s", what, who)!=2 )      return notify_fail("指令格式:steal <物品> from <人物>\n");   victim = present(who, environment(me));   if( !victim || victim==me) return notify_fail("你想行窃的对象不在这里。\n");   if( !wizardp(me) && wizardp(victim) )      return notify_fail("玩家不能偷巫师身上的东西。\n");    if((int)victim->query("age") <= 17 && userp(victim))        return notify_fail("为了世界更美好,放过小孩子吧.\n");    if( userp(victim) && me->query_condition("killer"))        return notify_fail("你已经被通辑了,不要再乱杀玩家了!\n");    if( userp(victim) && victim->query("combat_exp") < me->query("combat_exp") && me->query_condition("killer"))        return notify_fail("你已经被通辑了,不要再乱杀玩家了!\n");//   if( !ob->is_character()  )//	return notify_fail("看清楚一点,你只能从人身上偷东西。\n");   if( !victim->is_character() || victim->is_corpse() )	return notify_fail("看清楚一点,那并不是活物。用get比较好。\n");if(userp(victim) && victim->query("combat_exp")/2 > me->query("combat_exp") )	return notify_fail("他比你强太多,你不敢动手。\n");   if( victim->query("race") != "人类" )        return notify_fail(victim->name() + "根本不是人,用kill比较好!\n");//免战系统obj=victim;        if (userp(me) && userp(obj)         && obj->query_temp("nokill") )        return notify_fail("那人启用了免战牌!\n");        if (userp(me) && userp(obj)         && me->query_temp("nokill") )        return notify_fail("你启用了免战牌!\n");    if( userp(me) && userp(obj) && obj->query_condition("nokill")    && !obj->query_condition("killer"))        return notify_fail("那个人刚被杀过,放过他吧!\n");if( !living(obj) && userp(obj) && obj->query("combat_exp")/2 > me->query("combat_exp") )	return notify_fail("你想要杀此人,但他比你强太多,你不敢动手。\n");   if( victim->query_temp("no_kill") )        return notify_fail("此人不能steal!\n");   if( victim->query("hunmi",1))        return notify_fail("他正昏着呢!用get吧\n");    if(me->is_busy())        return notify_fail("你现在正忙。\n");   if( victim->query("disable_inputs",1))        return notify_fail("他正被禁指令呢!\n");        if (userp(victim) && !query_heart_beat(victim))        {         write("你想做什么!\n");        return notify_fail("此人不能steal!\n");//         write("此人不能steal!\n");        }   if( userp(victim) && me->query("age")<18 && me->query("combat_exp")<50000)           return notify_fail(victim->name() + "是玩家,你的能力不足!\n");    if( !ob = present(what, victim) )   {      object *inv;      inv = all_inventory(victim);      if( !sizeof(inv) )         return notify_fail( victim->name() + "身上看起来没有什麽值钱的东西好偷。\n");      ob = inv[random(sizeof(inv))];   }    if(ob->query("dynamic_quest")){        return notify_fail( victim->name() + "身上看起来没有什麽值钱的东西好偷。\n");}   sp = (int)me->query_skill("stealing") * 5 + (int)me->query("kar") * 2        - (int)me->query("thief") * 20;   if ( (myfam = me->query("family")) && myfam["family_name"] == "丐帮" )      sp = (int)me->query_skill("stealing") * 10 + (int)me->query("kar") * 5           - (int)me->query("thief") * 20;   if( sp < 1 ) sp = 1;   if( me->is_fighting() )   {       sp /= 2;       me->start_busy(3);   }   dp = (int)victim->query("jing") * 2 + (int)ob->weight()/25;   if( victim->is_fighting() ) dp *= 10;   if( ob->query("equipped") ) dp *= 10;   write("你不动声色地慢慢靠近" + victim->name() + ",等待机会下手 ...\n\n");   if( ob->query("no_get",1))   return notify_fail("这个东西,你偷不到的!\n");   if( ob->is_character() || ob->is_corpse() )   return notify_fail("那种东西不能偷的。\n");   me->set_temp("stealing", 1);   ob->set("no_get",1);   call_out( "compelete_steal", 3, me, victim, ob, sp, dp);   return 1;}private void compelete_steal(object me, object victim, object ob, int sp, int dp){   mapping myfam, vtfam;   int steal_level;       int exp,pot;        if (!me)  return notify_fail("你已经断线了!\n");        if (!victim)  return notify_fail("那个人已经不在了!\n");   me->delete_temp("stealing");   if( environment(victim) != environment(me) )   {      tell_object(me, "太可惜了,你下手的目标已经走了。\n");      return;   }        if (!ob)  return notify_fail("那样东西已经不在了!\n");        ob->set("no_get",0);   if( !living(victim) || (random(sp+dp) > dp) )   {        if (!ob)  return notify_fail("那样东西已经不在了!\n");      if( ob->query("no_steal") )      {         tell_object(me, "你摸到一" + ob->query("unit") + ob->name()                       + ",可是你突然作贼心虚,居然不敢下手,真是可惜了。\n");   ob->set("no_get",0);         return;      }      if( ob->query("equipped") )      {         tell_object(me, "你摸到一" + ob->query("unit") + ob->name()                       + ",可是那件东西,人家正用着呢。\n");   ob->set("no_get",0);            return;      }//	set_max_encumbrance(10000);	if (ob->is_container() )	{	tell_object(me, "这是个容器,你偷不了的!\n");   ob->set("no_get",0);		return;	}        if (!ob)  return notify_fail("那样东西已经不在了!\n");               if (sizeof(all_inventory(me)) >= 40)                {                        tell_object(me, "眼看你就要得手,可惜身上的东"                                    "西太多,实在拿不了了。\n");//                        ob->move(environment(me));                        return;                }      if( !ob->move(me) )      {         tell_object(me, "你摸到一" + ob->query("unit") + ob->name()                       + ",可是对你而言太重了,不得不放弃。\n");   ob->set("no_get",0);         return;      }      tell_object(me, HIW "得手了!\n\n" NOR);   ob->set("no_get",0);      tell_object(me, "你成功地偷到一" + ob->query("unit") + ob->name() + "!\n");	if( userp(victim) && query_ip_name(victim)==query_ip_name(me) ){			message_vision(victim->name() + "看$N一眼,你我关系这么好,还来偷我的东西。\n", me);} else{exp=8+random(30);pot=5+random(12);  if( me->query("family/family_name") == "丐帮"){if (!userp(victim)){	   tell_object(me,HIW"你获得了:\n" +                        chinese_number(exp) + "点实战经验\n" +                       chinese_number(pot) + "点潜能\n"+                       NOR);		me->add("potential",pot);		me->add("combat_exp",exp);}}}      steal_level = (int)me->query_skill("stealing",1);      if( living(victim) )      {         if ((int)me->query("combat_exp") > (steal_level*steal_level*steal_level/10) )         {            me->improve_skill("stealing", random(me->query("int")));         }         else         {            tell_object(me," 就这点经验也要去偷? \n");         }         if ( (myfam = me->query("family")) && myfam["family_name"] == "丐帮" )         {            if (( (int)me->query("potential") - (int)me->query("learned_points") < 100))            {               me->add("potential",1);            }//add by Java. Nov 16.1997   if (!me) return notify_fail("你已经断线了!\n");            me->start_busy(2);            me->add("thief", 1);            me->add("jing",-10);            me->add("eff_jing",-4);            me->add("combat_exp",1);         }      }      if( random(sp) < dp/2 )         message("vision", "你看到" + me->name() + "鬼鬼祟祟地从"               + victim->name() + "身上偷走了一" + ob->query("unit")               + ob->name() + "!\n", environment(me), ({ me, victim }) );   }   else   {      if( random(sp) > dp/2 )      {         tell_object(me, victim->name() + "不经意地一转头,你急忙将手缩了回去!\n"            "还好,没有被发现。\n");   ob->set("no_get",0);         return;      }      tell_object(me, HIR "糟糕!你失手了!\n\n" NOR);      message_vision("$N一回头,正好发现$n的手正抓着$P身上的" + ob->name() + "!\n\n"            + "$N喝道:「干什么!」\n\n", victim, me);   if (!me) return notify_fail("你已经断线了!\n");   ob->set("no_get",0);if (me->query_skill("stealing")){      me->improve_skill("stealing", 1, 1);}      if( userp(victim) ) me->fight_ob(victim);      else me->kill_ob(victim);      me->start_busy(3);      me->add("thief", 1);      me->add("jing",-10);      me->add("eff_jing",-4);   }}int help(object me){write(@HELP指令格式 : steal <某物> from <某人>这个指令让你有机会偷到他人身上的东西。成功了, 当然你就能获得该样物品。可是, 马有失蹄, 人总有失风的时候, 当你失败时当然就得付出代价, 至於是什么代价......靠你自己去发掘罗。HELP    );    return 1;}

⌨️ 快捷键说明

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