ghost.c

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

C
169
字号
#include <ansi.h>inherit NPC;//inherit F_CLEAN_UP;string *first_name = ({ "大头", "青面", "独角", "红发"});string *name_words = ({ "鬼"});int random_go(object me, string* dirs);void create(){	string name;        name = first_name[random(sizeof(first_name))];        name += name_words[random(sizeof(name_words))];        set_name(name, ({"ghost"}));        set("gender", "男性" );	set("age", 30+random(20));	set("class", "youling");	set("env/invisibility", 1);	set("title", RED "(鬼气)" NOR);        set("combat_exp", 3000);	set("daoxing", 5000);	set("attitude", "heroism");        set_skill("force", 250);        set_skill("parry", 250);        set_skill("unarmed", 250);        set_skill("staff", 250);        set_skill("lunhui-zhang",250);        set_skill("jienan-zhi",250);        set_skill("lotusmove",250);        set_skill("spells",250);        set_skill("buddhism", 250);        map_skill("staff","lunhui-zhang");        map_skill("unarmed","jienan-zhi");        map_skill("spells","buddhism");        map_skill("dodge","lotusmove");        setup();        carry_object(__DIR__"obj/tc_staff")->wear();}void copy_status(object me,object ob, string* dirs){        mapping skill_status,map_status;        string *sname,*mname;        int i;        skill_status=me->query_skills();        sname=keys(skill_status);        for(i=0;i<sizeof(skill_status);i++) {                me->delete_skill(sname[i]);        }        skill_status=ob->query_skills();        sname=keys(skill_status);        for(i=0;i<sizeof(skill_status);i++) {                me->set_skill(sname[i],skill_status[sname[i]]);        }        if ( mapp(map_status = me->query_skill_map()) ) {                mname  = keys(map_status);                for(i=0; i<sizeof(map_status); i++) {                        me->map_skill(mname[i]);                }        }        map_status = ob->query_skill_map();        mname  = keys(map_status);        for(i=0; i<sizeof(map_status); i++) {                me->map_skill(mname[i], map_status[mname[i]]);        }        me->set("str",ob->query("str"));        me->set("int",ob->query("int"));        me->set("con",ob->query("con"));        me->set("per",ob->query("per"));        me->set("cor",ob->query("cor"));        me->set("spi",ob->query("spi"));        me->set("cps",ob->query("cps"));        me->set("kar",ob->query("kar"));        me->set("max_kee",ob->query("max_kee"));        me->set("eff_kee",ob->query("eff_kee"));        me->set("kee",ob->query("kee"));        me->set("max_gin",ob->query("max_gin"));        me->set("eff_gin",ob->query("eff_gin"));        me->set("gin",ob->query("gin"));        me->set("max_sen",ob->query("max_sen"));        me->set("eff_sen",ob->query("eff_sen"));        me->set("sen",ob->query("sen"));        me->set("max_force",ob->query("max_force"));        me->set("force",ob->query("force"));        me->set("force_factor",ob->query("max_force")/20);        me->set("max_mana",ob->query("max_mana"));        me->set("mana",ob->query("mana"));        me->set("mana_factor",ob->query("max_mana")/20);        me->set("combat_exp",ob->query("combat_exp")*15/10);	me->set("daoxing",ob->query("daoxing")*15/10);	me->set("stay_time", time());	random_go(me, dirs);}int random_go(object me, string* dirs){        int             i, j, k;        object  newob;        mixed*  file;        if( !sizeof(dirs) )  return 1;    i = random(sizeof(dirs));    // pick up one directory        file = get_dir( dirs[i]+"*.c", -1 );        if( !sizeof(file) )             return 1;        k = sizeof(file);        while(1)  {           j = random(k);           if( file[j][1] > 0 )         break;          // pick up a file with size > 0        }    if( (newob=find_object(dirs[i]+file[j][0])) )   {                me->move( newob );         }        else  {                seteuid(getuid(me));                newob = new(dirs[i]+file[j][0]);                if (newob)   // now this is not necessary, only for debug use                        me->move(newob);        else  {                        tell_object(me, "Error.\n");                }        }        return 1;}int heal_up(){	if( environment() && !is_fighting() ) {		call_out("leave", 1);		return 1;	}	return ::heal_up() + 1;}void leave(){	object owner;	message("vision",		HIY + name() + "说道:现在我已经完成护卫任务,就此告辞!\n\n"		+ name() + "化为一道金光,消失不见了。\n" NOR, environment(),		this_object() );	destruct(this_object());}void invocation(object who, string* dirs){       object me=this_object();        copy_status(me,who, dirs);        set("owner", who->query("id"));        set("owner_ob", who);}

⌨️ 快捷键说明

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