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 + -
显示快捷键?