pet.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 540 行 · 第 1/2 页
C
540 行
#include <ansi.h>#include <combat.h>inherit NPC;void create(){ set_name("宠物", ({ "pet" }) ); set("race", "野兽"); set("age", 1); set("str",35); set("int",15); set("per",15); set("tol",15); set("con",15); set("dex",15); set("long", "一只小小小小宠物。\n"); set("owner","R"); set("limbs", ({ "头部", "身体", "前心", "後背", "尾巴" }) ); set("verbs", ({ "bite", "claw" }) ); set("obedience",2); set("petdie",1); set("combat_exp", 100000); set_temp("apply/attack", 50); set_temp("apply/damage", 50); set_temp("apply/armor", 50); set_temp("apply/defence",100); set("deathstamp",1); set_skill("parry", 50 + random(50)); set_skill("dodge", 50 + random(50)); set_skill("unarmed", 50 + random(50)); set_skill("puyaogedou", 50 + random(50)); map_skill("unarmed", "puyaogedou"); map_skill("parry", "puyaogedou"); set("chat_chance_combat", 90); set("chat_msg_combat", ({ (: perform_action, "unarmed.pfm1" :), (: perform_action, "unarmed.pfm2" :), (: perform_action, "unarmed.pfm3" :), (: perform_action, "unarmed.pfm4" :), (: perform_action, "unarmed.pfm5" :), (: perform_action, "unarmed.pfm6" :), }) ); setup();}string query_save_file(){ string id; id = query("owner"); if( !stringp(id) ) return 0; return sprintf("/data/user/%c/%s", id[0],id+".pet");}int save(){ string file; if( stringp(file = this_object()->query_save_file()) ) { assure_file(file+ __SAVE_EXTENSION__); return save_object(file); } return 0;}int restore(){ string file; if( stringp(file = this_object()->query_save_file()) ) return restore_object(file); return 0;}void die(){ int i; object owner, *enemy; int jing,qi,exp; //set("deathstamp",time()); exp = (int) query("combat_exp"); jing = (int) query("max_jing"); qi = (int) query("max_qi"); if(!environment()->query("no_death_penalty")) set("combat_exp",exp/10 * 9); set("eff_qi",qi); set("eff_jing",jing); set("qi",qi); set("jing",jing); if(objectp(owner=query("possessed"))) { enemy = query_enemy(); i = sizeof(enemy); while(i--) { if( enemy[i] && living(enemy[i]) ) { owner->kill_ob(enemy[i]); enemy[i]->kill_ob(owner); } } } save(); ::die();}int heal_up(){ if( environment() && !is_fighting() ) { call_out("leave", 1); return 1; } return ::heal_up() + 1;}void leave(){ if(!objectp(this_object()->query("possessed"))) { set_heart_beat(1); save(); command("emote 一闪就不见了。");// message_vision("$N一闪就不见了。\n",this_object()); destruct(this_object());// return; }// set_heart_beat(1);}/*int heal_up(){ if(!objectp(this_object()->query("possessed"))) { set_heart_beat(1); save(); command("emote 一闪就不见了。");// message_vision("$N一闪就不见了。\n",this_object()); destruct(this_object()); return 1; } set_heart_beat(1); return ::heal_up() ;}*/void init(){ if(this_player() == query("possessed")) { add_action("do_order","order"); add_action("do_modify","modify"); add_action("do_gongji","gongji"); add_action("do_teach","xunlian"); add_action("do_shape","shape"); add_action("do_eat","giveeat"); add_action("do_move","fastmove"); add_action("do_pfm","petpfm"); }}int do_order(string arg){ int obedience; object me = this_player(); me->add("jing",-5); obedience = query("obedience"); if(random(50) < obedience ) command( "emote " + arg); else command("emote 很不情愿地哼了一声。"); return 1;}int do_modify(string arg){ string item, msg; object me = this_player(); if(!arg || sscanf(arg,"%s %s",item,msg) != 2) return notify_fail("SYNTAX: modify 款项 内容\n"); if(item == "flee") { set("env/wimpy", atoi(msg)); write("OK\n"); save(); return 1; } if(CHINESE_D->check_control(msg)) return notify_fail("描述不可有控制符!\n");// if( i%2==0 && !is_chinese(name[i..<0]) ) { if(!is_chinese(msg)) return notify_fail("描述必需是中文!\n"); if(CHINESE_D->check_space(msg)) return notify_fail("描述必需不含空格!\n"); if(CHINESE_D->check_return(msg)) return notify_fail("描述必需不含回车键!\n"); me->add("jing",-10); switch(item) { case "desc": if(CHINESE_D->check_length(msg) > 100) return notify_fail("描述太长!\n"); set("long",msg+"\n"); write("OK\n"); save(); return 1; case "nickname" : if(CHINESE_D->check_length(msg) > 20) return notify_fail("描述太长!\n"); set("nickname",msg); write("OK\n"); save(); return 1; case "title" : if(CHINESE_D->check_length(msg) > 10) return notify_fail("描述太长!\n"); set("title",msg); write("OK\n"); save(); return 1; case "arrive_msg" : if(CHINESE_D->check_length(msg) > 30) return notify_fail("描述太长!\n"); set("arrive_msg",msg); write("OK\n"); save(); return 1; case "leave_msg" : if(CHINESE_D->check_length(msg) > 30) return notify_fail("描述太长!\n"); set("leave_msg",msg); write("OK\n"); save(); return 1; } return notify_fail("你要修改什么?\n");}int do_eat(){ object me, ob; object gold; int cost = 5; me = this_player(); ob = this_object(); gold = present("gold_money", this_player()); if( !gold) return notify_fail("你身上没有金子。\n"); if(me->is_busy()) return notify_fail("你上一个动作还没有完成。\n"); if((int) gold->query_amount() < cost) return notify_fail("你身上没带够" + sprintf("%d",cost)+ "两金子。\n"); gold->add_amount(-cost); if( ob->query("food") >= ob->max_food_capacity() ) return notify_fail("它已经吃太饱了,再也塞不下任何东西了。\n"); ob->set("food", ob->max_food_capacity()); ob->set("water",ob->max_water_capacity()); me->start_busy(2); command("emote 高兴的叫了一声。"); command("emote 接着一口把黄金给吃了。"); return 1;}int do_gongji(string arg){ object me,obj; me = this_player(); if( environment(me)->query("no_fight") )
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?