questd.c

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

C
935
字号
//Heart of fy3 -- Tie//#pragma optimize allmapping *quests;mapping *read_table(string file);string *roomlines;varargs void init_dynamic_quest(int hard);varargs int spread_quest(mapping one_quest, int hard);object find_env(object ob);object find_book(object ob);varargs int already_spreaded(string str, int hard);int quest_reward( object me, object who,object quest_item);string dyn_quest_list();#define MAX_DIS 7#define MAX_ALT  2#define MAX_DIR  8#include <ansi.h>string locate_obj(string str);void create(){	string file;	quests = read_table("/quest/dynamic_quest");	file = read_file("/quest/dynamic_location");	roomlines = explode(file,"\n");		//CRON_D->set_last_hard_dis();	init_dynamic_quest(1);}int quest_reward(object me, object who,object quest_item){	mapping quest;	int exp,pot,score;	int color;	quest = quest_item->query("dynamic_quest");	if(base_name(who) != quest["owner_name"]) return 0;        exp =250+random(300);        pot = exp/4;        score = random(10)+1;        me->add("combat_exp",exp);        me->add("potential",pot);        me->add("score",score);	color=random(5);	if (color>3)	{tell_object(me,HIR"你被奖励了:\n" +        chinese_number(exp) + "点实战经验\n"+        chinese_number(pot) + "点潜能\n" +        chinese_number(score)+"点江湖阅历\n"NOR);}	else if (color>2)	{tell_object(me,HIB"你被奖励了:\n" +        chinese_number(exp) + "点实战经验\n"+        chinese_number(pot) + "点潜能\n" +        chinese_number(score)+"点江湖阅历\n"NOR);}	else if (color>1)	{tell_object(me,HIM"你被奖励了:\n" +        chinese_number(exp) + "点实战经验\n"+        chinese_number(pot) + "点潜能\n" +        chinese_number(score)+"点江湖阅历\n"NOR);}	else if (color>0)	{tell_object(me,HIY"你被奖励了:\n" +        chinese_number(exp) + "点实战经验\n"+        chinese_number(pot) + "点潜能\n" +        chinese_number(score)+"点江湖阅历\n"NOR);}	else 	{tell_object(me,HIC"你被奖励了:\n" +        chinese_number(exp) + "点实战经验\n"+        chinese_number(pot) + "点潜能\n" +        chinese_number(score)+"点江湖阅历\n"NOR);}	me->add("TASK",1);	if( !undefinedp(quest["fin_func"]))	call_other(this_object(),quest["fin_func"],me,who,quest_item);	if(quest_item)	destruct(quest_item);//	destruct(present("xdshi",me));//	tell_object(me,HIW"你身上的"+HIR+"七"+HIC+"彩"+HIY+"向"+HIM+"导"+HIG+"石"HIW"跟着神书一起消失了。\n"NOR);	return 1;}varargs void init_dynamic_quest(int hard){	int i;	for( i=0; i < sizeof(quests); i++)		spread_quest(quests[i],hard);}varargs int spread_quest(mapping quest, int hard){	object obj0,obj1,obj2,obj3,jobnpc;	object cur_obj;	object next_obj;	object tar;	object *inv;	object *target=({});	int i;	string location;	if(already_spreaded(quest["file_name"],hard)) return 0;	reset_eval_cost();	location = roomlines[random(sizeof(roomlines))];	obj0=find_object(location);	if(obj0)	obj0->reset();	else	obj0=load_object(location);	cur_obj =obj0;	if(cur_obj)	{	inv = all_inventory(cur_obj);	for(i=0; i<sizeof(inv); i++) {	if(inv[i]->is_character() && !userp(inv[i]))	target += ({ inv[i] });	if(inv[i]->is_container()) target += ({ inv[i] });		}	}	if(!sizeof(target)) {		jobnpc = new("/quest/shenshu/npc/man");		jobnpc->move(cur_obj);		jobnpc = new("/quest/shenshu/npc/man");		jobnpc->move(cur_obj);		jobnpc = new("/quest/shenshu/npc/man");		jobnpc->move(cur_obj);}	if(cur_obj)	{	inv = all_inventory(cur_obj);	for(i=0; i<sizeof(inv); i++) {	if(inv[i]->is_character() && !userp(inv[i]))	target += ({ inv[i] });	if(inv[i]->is_container()) target += ({ inv[i] });		}	}	if(sizeof(target)) cur_obj = target[random(sizeof(target))];	if(cur_obj)	{	tar = new(quest["file_name"]);	tar->set("value",0);	tar->set("dynamic_quest",quest);	tar->move(cur_obj);			}return 1;}string dyn_quest_list(){	string output="";	object owner,item;        int i;        for( i=0; i < sizeof(quests); i++)	{	reset_eval_cost();	if(!objectp(owner= find_object(quests[i]["owner_name"])))	owner = load_object(quests[i]["owner_name"]);        if(!objectp(item= find_object(quests[i]["file_name"])))        item = load_object(quests[i]["file_name"]);	if(already_spreaded(quests[i]["file_name"]))	{	if(random(2))	output += sprintf(HIG"%10s"NOR"的"HIW"%10s"NOR"(%s)\n",owner->query("name"),item->query("name"),item->query("id"));	else	output = sprintf(HIG"%10s"NOR"的"HIW"%10s"NOR"(%s)\n",owner->query("name"),item->query("name"),item->query("id")) + output;	}	else	{	if(random(2))	output += sprintf(HIG"%10s"NOR"的"HIY"%10s"NOR"(%s) 〖 已完成 〗\n",owner->query("name"),item->query("name"),item->query("id"));	else	output = sprintf(HIG"%10s"NOR"的"HIY"%10s"NOR"(%s) 〖  已完成 〗\n",owner->query("name"),item->query("name"),item->query("id")) + output;	}	}//            if(random(2))output += sprintf(HIG"%10s"NOR"的"HIW"%10s"NOR"(%s)\n",item->query("owner_name"),item->query("name"),item->query("id"));//            else output=sprintf(HIG"%10s"NOR"的"HIW"%10s"NOR"(%s)\n",item->query("owner_name"),item->query("name"),item->query("id"))+output;//        else//            if(random(2))output += sprintf(HIG"%10s"NOR"的"HIY"%10s"NOR"(%s) 〖 已完成 〗\n",item->query("owner_name"),item->query("name"),item->query("id"));//            else output=sprintf(HIG"%10s"NOR"的"HIY"%10s"NOR"(%s) 〖  已完成 〗\n",item->query("owner_name"),item->query("name"),item->query("id"))+output;	return output;}string locate_obj(string strr){        string *distance = ({"极近", "很近", "比较近", "不远","不近", "比较远", "很远", "极远"        });        string *altitude =({"高处", "地方", "低处"        });        string *directions=({"周围","北方", "南方", "东方","西方","东北方","西北方","东南方","西南方"        });        object ob, tmpobj,where, *ob_list,me,obtwo,obthree;        object item,room;        string output,dis,alt,dir,local,ck;                int i;        int x,y,z,x0,y0,z0;        int realdis;	 mixed map,mapt;        int tmp;        string *dir1;        string *dir2;	string str="";	reset_eval_cost();        for( i=0; i < sizeof(quests); i++)	{        if(!objectp(item= find_object(quests[i]["file_name"])))        item = load_object(quests[i]["file_name"]);	if(item->query("id") == strr || item->query("name") == strr) str = quests[i]["file_name"];	}	if(str != "") {                //room = environment(me);                ob_list = children(str);                for(i=0; i<sizeof(ob_list); i++) {                                ob=find_book(ob_list[i]);                this_player()->add("jing",-5);if(ob) {ck=HIC"无"NOR;local=ob->query("short");                if(sizeof(ob->query("exits")))                 {ck=chinese_number(sizeof(ob->query("exits")));                map=values(ob->query("exits"));if (map && sizeof(ob->query("exits"))>=1){//add by hxsd//if (find_object(map[random(sizeof(map))]))//{                 obtwo=load_object(map[random(sizeof(map))]);//}if (obtwo){                 local=obtwo->query("short");              if(obtwo->query("exits"))                { //obtwoexits                 mapt=values(obtwo->query("exits"));if (mapt && sizeof(obtwo->query("exits"))>=1 ){//if (find_object(mapt[random(sizeof(mapt))]))//{obthree=load_object(mapt[random(sizeof(mapt))]);//}if (obthree){if (obthree!= ob){                 local=obthree->query("short");} //obthree} //obthree} //mapt} //map}//obtwoexits}//add by hxsd}else local=ob->query("short");//dir1=explode(base_name(environment(me)),"/");dir2=explode(base_name(ob),"/");//    if(sizeof(dir1)==3 && sizeof(dir2)==3 && dir1[0]=="d" && dir2[0]=="d" && dir1[1]!=dir2[1])//{      	if (dir2[1]=="baituo")  	output="『"+ob_list[i]->query("name")+"』似乎在"+HIR"白驼山的"NOR+local+"附近。\n";else if (dir2[1]=="binghuodao")  	output="『"+ob_list[i]->query("name")+"』似乎在"+HIB"冰火岛的"NOR+local+"附近。\n";else if (dir2[1]=="city")  	output="『"+ob_list[i]->query("name")+"』似乎在"+HIC"扬州的"NOR+local+"附近。\n";else if (dir2[1]=="city2")  	output="『"+ob_list[i]->query("name")+"』似乎在"+HIG"京城的"NOR+local+"附近。\n";else if (dir2[1]=="city3") 	output="『"+ob_list[i]->query("name")+"』似乎在"+HIY"成都的"NOR+local+"附近。\n";else if (dir2[1]=="city4")  	output="『"+ob_list[i]->query("name")+"』似乎在"+HIM"长安城的"NOR+local+"附近。\n";else if (dir2[1]=="dali")  

⌨️ 快捷键说明

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