huozhu.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 235 行
C
235 行
#include <ansi.h>#include <dbase.h>#include <armor.h>inherit F_UNIQUE;inherit NECK;int do_wear(string arg);int do_remove(string arg);int do_amalgamation();object offensive_target(object me);void create(){ set_name(HIR "火灵珠" NOR, ({"huo lingzhu", "huozhu"}) ); set_weight(200); if( clonep() ) set_default_object(__FILE__); else { set("unit", "颗"); set("material", "crystal");set("no_steal",1); set("value",10000); set("no_give", "这种稀世之宝怎么能轻易送人呢?\n"); set("no_sell", "卖?这种稀世之宝谁买得起啊!\n"); set("long","传说中的五行宝珠之一,佩之可避火烧,并可发出火系法术。\n为祈雨所必需之物。"); set("replace_file", __DIR__"rose"); set("bb",1); set("armor_prop/armor", 100); set("spells/fire", 1); } setup();}int init(){ add_action("do_wear","wear"); add_action("do_remove", "remove"); //风火雷土水四珠合壁 add_action("do_amalgamation", "wuzhuhebi"); return 1;}// This function selects a random target for offensive spells/functions.object offensive_target(object me){ int sz; object *enemy; enemy = me->query_enemy(); if( !enemy || !arrayp(enemy) ) return 0; sz = sizeof(enemy); if( sz > 4 ) sz = 4; if( sz > 0 ) return enemy[random(sz)]; else return 0;}int do_wear (string arg){ object me = this_player(); object zhu = this_object(); string name = zhu->query("name"); string msg;if (arg == "all") arg ="huozhu";if (arg != "huozhu" && arg != "huo lingzhu" ) return notify_fail("你要佩带什么?\n"); if (me->is_busy()) return notify_fail("你正忙着呢。\n"); msg = "$N戴上一颗"+name+",红光照亮了天际。\n"; if (me->is_fighting()){ me->start_busy(2);} zhu->set("wear_msg",msg);remove_call_out("conditionhuozhu");call_out("conditionhuozhu",1,me,zhu); return 0;}int do_remove (string arg){ object me = this_player(); object zhu = this_object(); string name = zhu->query("name"); string msg; if (arg!= "all" && arg != "huozhu" && arg != "huo lingzhu") return notify_fail("你要摘掉什么?\n"); if (me->is_busy()) return notify_fail("你正忙着呢。\n"); msg = "$N将"+name+"轻轻地摘下来……\n"; if (me->is_fighting()){ me->start_busy(2);} zhu->set("unequip_msg",msg); remove_call_out("conditionhuozhu"); return 0;}void conditionhuozhu(object who,object ob){ object target; int ap,dp,damage; string msg; string type;type = ob->query("armor_type");if (!who) return;if( who->query_temp("armor/" + type) && ob->query("equipped")!="worn")return; if( who->is_fighting()) { target = offensive_target(who); if( ! target ) return ; if( ! present( target,environment(who)) ) return ; msg = HIR"火灵珠猛然红光四射,半空中浮现出一个赤红的火神祝融,只见祝融双手一圈,\n一个硕大的火球冲着$n飞去!\n"NOR;//divid by 10; ap = 2000000; dp = target->query("combat_exp"); if( random(ap + dp) > dp ) { damage = 500+random(700); damage -= (int)target->query("max_neili") / 20 + random((int)target->query("eff_jing") / 5); if( damage > 0 ) { msg += HIC "结果$n躲避不及,被火球撞个正着!须发尽焦。\n" NOR;if (damage> 800) damage=800; target->receive_damage("jing", damage*4/5); target->receive_wound("jing", damage/3); target->receive_damage("qi", damage*4/5); target->receive_wound("qi", damage/4); } else//here, cast failed and the target's mana_factor will be added to the previous//damage to hurt yourself:(...note damage<0. msg += HIC "\n谁知$n毫无反应。\n" NOR; } else msg += "但是被$n躲开了。\n"; message_vision(msg, who, target); }call_out("conditionhuozhu",7,who,ob);}int do_amalgamation(){ //五颗宝珠 object wind,water,thunder,earth; object who = this_player(); object shengzhu; if(who->is_fighting()) return notify_fail("你正打仗呢!想死啊!\n"); if(who->is_busy()) return notify_fail("你正忙着呢!\n"); if(!wind = present("fengzhu",who)) return notify_fail("你还缺少"+HIG "风灵珠" NOR +"呢!怎么五珠合壁呢?\n"); if(!thunder = present("leizhu",who)) return notify_fail("你还缺少"+HIB "雷灵珠" NOR +"呢!怎么五珠合壁呢?\n"); if(!earth = present("tuzhu",who)) return notify_fail("你还缺少"+HIY "土灵珠" NOR +"呢!怎么五珠合壁呢?\n"); if(!water = present("shuizhu",who)) return notify_fail("你还缺少"+HIW "水灵珠" NOR +"呢!怎么五珠合壁呢?\n"); if( wind->query("ownmake")) return notify_fail("这里面有假货吧。\n"); if(userp(wind)) return notify_fail("这里面有假货吧。\n"); if( wind->is_character() || wind->is_corpse() ) return notify_fail("这里面有假货吧。\n"); if( thunder->query("ownmake")) return notify_fail("这里面有假货吧。\n"); if(userp(thunder)) return notify_fail("这里面有假货吧。\n"); if( thunder->is_character() || thunder->is_corpse() ) return notify_fail("这里面有假货吧。\n"); if( earth->query("ownmake")) return notify_fail("这里面有假货吧。\n"); if(userp(earth)) return notify_fail("这里面有假货吧。\n"); if( earth->is_character() || earth->is_corpse() ) return notify_fail("这里面有假货吧。\n"); if( water->query("ownmake")) return notify_fail("这里面有假货吧。\n"); if(userp(water)) return notify_fail("这里面有假货吧。\n"); if( water->is_character() || water->is_corpse() ) return notify_fail("这里面有假货吧。\n");if ((water->query("equipped")!="worn") && (wind->query("equipped")!="worn") && (thunder->query("equipped")!="worn") && (earth->query("equipped")!="worn") && (this_object()->query("equipped")!="worn")){ message_vision("$N把五颗宝珠放在一起。只见五颗宝珠冉冉升起,一时宝光大盛,直冲云霄!\n俄顷,"+HIG "风灵珠" NOR+"飞至东方放出柔和绿光;"+HIR "火灵珠" NOR +"飞至南方发出灼目红光;"+HIB "雷灵珠" NOR +"飞至西方忽明忽暗,\n闪出幽幽蓝光;"+HIW "水灵珠" NOR +"却通体莹白,飞至北方;"+HIY "土灵珠" NOR +"直冲天穹,泻下万里黄光。\n又待片刻,五珠呼的一暗,$N手中却多了一颗硕大的透明宝珠,不时发出五彩毫光。\n",who); message("channel:rumor",RED+"【谣言】某人:"+who->query("name")+"拿到圣灵珠了!\n"+NOR,users() ); shengzhu = new("clone/box/baowu/shengzhu"); shengzhu->move(who); destruct(wind); destruct(water); destruct(earth); destruct(thunder); destruct(this_object()); return 1;}return notify_fail("宝珠必须摘下才能合璧!\n");}void owner_is_killed(){ destruct(this_object());}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?