pao.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 304 行
C
304 行
//Cracked by Kafei//// sdong, 3/18/2000#include <ansi.h>#include <armor.h>#include <room.h>//inherit F_SSERVER;inherit ITEM;#define ORIGINAL "/d/bwdh/sjsz/room_28.c"int explode(object me, object ob);int do_fire(string arg);int do_aim(string arg);string look_room(object me, object env);int do_load(string arg);mapping default_dirs = ([ "north": "北", "south": "南", "east": "东", "west": "西", "northup": "北边", "southup": "南边", "eastup": "东边", "westup": "西边", "northdown": "北边", "southdown": "南边", "eastdown": "东边", "westdown": "西边", "northeast": "东北", "northwest": "西北", "southeast": "东南", "southwest": "西南", "up": "上", "down": "下", "out": "外", "enter": "里", "in": "里", "left": "左", "right": "右",]);string day_event(){return NATURE_D->outdoor_room_event();}void create(){ set_name(HIY"青铜炮"NOR, ({"pao","qingtong pao","bombgun"})); set_weight(1500000); set("value",150000); if( clonep() ) set_default_object(__FILE__); else { set("long", "一座青铜铸造的大炮,巨大的炮管昂然挺空,端的是威风八面。久闻试剑山庄主人收集天下奇门兵器,没想到连大炮都有,只是不知好用不好用。\n\n"); set("unit", "座"); set("material", "bronze"); } set("bwdhpk",1);setup();}void init(){ add_action( "do_load", "load" ); add_action( "do_aim", "aim" ); add_action( "do_fire", "shoot" );}int do_load(string arg){ object ob = this_object(), huoyao, dantou; object me = this_player(); int exp_time; if ( !arg || (arg!="powder" && arg!="huo yao" && arg!="dan tou" ) ) return notify_fail( "你想要加载什么?\n"); if( me->is_busy() ) return notify_fail("你还在忙着呢!\n") ; if( arg=="powder" || arg =="huo yao" ) { huoyao = present("huo yao"); if( !huoyao || !objectp(huoyao) )return notify_fail( "你想要加载什么?\n"); if( query_temp("yao_loaded") > 2 )return notify_fail("大炮已经装满火药了。\n"); if( huoyao && objectp(huoyao) && huoyao->query("load") > 0 ) { message_vision("$N往炮筒里加入一些火药。\n",me); huoyao->set("load",huoyao->query("load")-1 ); if( huoyao->query("load") <=0 ) destruct(huoyao); add_temp("yao_loaded",1); me->start_busy(1); } } else if( arg =="dan tou" ) { dantou = present("dan tou"); if( !dantou || !objectp(dantou) )return notify_fail( "你想要加载什么?\n"); if( query_temp("dan_loaded") > 0 )return notify_fail("大炮已经装有弹头了。\n"); message_vision("$N往炮筒里加入一枚弹头。\n",me); destruct(dantou); add_temp("dan_loaded",1); me->start_busy(1); } return 1;}string look_room(object me, object env){ int i; object *inv; mapping exits; string str, *dirs; if( !env ) { return "你的四周灰蒙蒙地一片,什么也没有。\n"; } str = sprintf( "%s - %s\n %s%s", env->query("short"), wizardp(me)? file_name(env): "", env->query("long"), env->query("outdoors")? NATURE_D->outdoor_room_description() : "" ); if( mapp(exits = env->query("exits")) ) { dirs = keys(exits); for(i=0; i<sizeof(dirs); i++) if( (int)env->query_door(dirs[i], "status") & DOOR_CLOSED ) dirs[i] = 0; dirs -= ({ 0 }); if( sizeof(dirs)==0 ) str += " 这里没有任何明显的出路。\n"; else if( sizeof(dirs)==1 ) str += " 这里唯一的出口是 " + BOLD + dirs[0] + NOR + "。\n"; else str += sprintf(" 这里明显的出口是 " + BOLD + "%s" + NOR + " 和 " + BOLD + "%s" + NOR + "。\n", implode(dirs[0..sizeof(dirs)-2], "、"), dirs[sizeof(dirs)-1]); }// str += env->door_description(); inv = all_inventory(env); for(i=0; i<sizeof(inv); i++) { if( inv[i]==me ) continue; if( !me->visible(inv[i]) ) continue; if( objectp(inv[i]->query("rider")) ) continue; else inv[i]->delete("rider"); if( objectp(inv[i]->query("rided")) ) { str += " " + inv[i]->short() + "骑在" + (inv[i]->query("rided"))->name() + "上"; if( stringp(inv[i]->query_temp("exit_blocked"))) str += "挡着往"+inv[i]->query_temp("exit_blocked")+ "去的路"; str += "\n"; } else { if (stringp(inv[i]->query_temp("exit_blocked"))) str += " " + inv[i]->short() + "挡着往" + inv[i]->query_temp("exit_blocked") +"去的路\n"; else str += " " + inv[i]->short() + "\n"; inv[i]->delete("rided"); } } return(str);}int do_aim(string arg){ object me = this_player(); object cur_target, target; string str, dest; mapping exit; if( me->is_busy() ) return notify_fail("你还在忙着呢!\n") ; cur_target = query_temp("target"); if( !cur_target ){ cur_target = find_object(ORIGINAL); if( !cur_target )cur_target=load_object(ORIGINAL); if (!objectp(cur_target))return notify_fail("找不到目标。\n"); } if( arg=="down" || arg=="up" || arg=="out" || arg=="enter" )return notify_fail("这个方向没法打到。\n"); if( arg ) { if( !mapp( exit = cur_target->query("exits") ) || undefinedp(exit[arg]) ) { return notify_fail("这个方向没有出路。\n"); } if( !cur_target->valid_leave(me, arg) ) notify_fail("这个方向太远了。\n"); dest = exit[arg]; if( !(target = load_object(dest)) ) return notify_fail("无法移动。\n"); } else target = cur_target; set_temp("target",target); str = look_room(me, target); tell_object(me, str+"\n"); if(arg) message_vision(HIW"$N将炮口缓缓向"+ default_dirs[arg] + "转,瞄准了"+target->query("short")+"。\n"NOR,me); me->start_busy(1); return 1;}int do_fire(string arg){ object ob = this_object(); object me = this_player(); int exp_time; if( ob->query_temp("fired") ) return notify_fail("你一拉才发现此炮已被引燃了,就快发射了!\n"); if( ob->query_temp( "dan_loaded" ) <=0 )return notify_fail("炮还没有上弹头呢!\n"); if( ob->query_temp( "yao_loaded" ) < 3 )return notify_fail("炮还没装满弹药呢!\n"); message_vision("$N伸手用力一拉,拉开了$n导火索。\n", me,ob); ob->set_temp("fired", 1); ob->set_temp("owner",me); call_out("explode", 1 + random(5), me, ob); return 1;}int explode(object me, object ob){ object *victims, env, owner; int i,damage; string str; ob->delete_temp("fired"); ob->delete_temp("owner"); ob->delete_temp("dan_loaded"); ob->delete_temp("yao_loaded"); env = query_temp("target"); if( !env ){ env = find_object(ORIGINAL); if( !env )env=load_object(ORIGINAL); if (!objectp(env))return notify_fail("找不到目标。\n"); } message_vision(HIY"只听的一声惊天动地的爆响,$N"+HIY"发射了,弹头带着一道火线飞向"+env->query("short")+HIY",四周一片硝烟祢漫。\n"NOR, ob); owner = query_temp("owner"); if( !owner || !objectp(owner) ) { if(me && objectp(me) ) owner=me; else owner=ob; } tell_room(env,HIR"只听的一声惊天动地的爆响,一发炮弹落地,四周一切立刻被炸得灰飞烟灭!\n"NOR, me); if( env->query("no_fight") ){ return 0; } victims = all_inventory(env); for (i=0; i<sizeof(victims); i++) { if (!living(victims[i]) || victims[i]==me ) continue; damage= 4000+random(8000); victims[i]->receive_damage("qi", damage, owner); victims[i]->receive_wound("qi", random(damage), owner); str = COMBAT_D->status_msg((int)victims[i]->query("qi") * 100 /(int)victims[i]->query("max_qi")); message_vision(HIR"$N被炸得人仰马翻!\n"NOR,victims[i]); message_vision(HIR"你远远看到"+victims[i]->query("name")+"被炸得人仰马翻!\n"NOR,ob); message_vision("($N"+str+")\n", victims[i]); message_vision(HIR"你远远看到("+victims[i]->query("name")+str+")\n",ob); } if (!env->query("th_buzhen")) return 1; env->set("long", env->query("org_desc")); env->set("exits", env->query("org_exits")); env->set("cost", env->query("org_cost")); env->delete("org_desc"); env->delete("org_cost"); env->delete("org_exits"); env->delete("th_buzhen"); env->delete("th_pozhen"); env->delete("th_zhen_owner"); return 1;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?