hua_girl.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 449 行
C
449 行
//Cracked by Roath//wzfeng@xkx 2000 3-2#include <ansi.h>#include <dbase.h>inherit NPC;//inherit F_VENDOR;//int ask_me();int ask_songhua();int do_song(string arg);void create(){ set_name("英莲", ({ "ying lian", "ying" ,"lian" })); set("shen_type", 1); set("gender", "女性"); set("age", 15); set("long","她是这里的卖花女,只见其含笑如春桃,玉唇含香,纤纤细腰,婀娜多姿,虽粗布花衣,但不掩其清秀,实乃人间绝色。\n"); set("attitude", "friendly"); set("inquiry", ([ "送花" : (: ask_songhua :),// "song" : (: ask_me :), "songhua" : (:ask_songhua :), ]));/* set("vendor_goods", ({ __DIR__"obj/flower/999_rose":1, __DIR__"obj/flower/red_rose", __DIR__"obj/flower/white_rose", __DIR__"obj/flower/qingren_cao", __DIR__"obj/flower/ding_xiang", __DIR__"obj/flower/mu_dan", __DIR__"obj/flower/yu_jinxiang", __DIR__"obj/flower/bai_he", __DIR__"obj/flower/kang_naixin", __DIR__"obj/flower/ma_tilian", __DIR__"obj/flower/jin_yucao", __DIR__"obj/flower/huo_he", __DIR__"obj/flower/hu_dielan", __DIR__"obj/flower/qiu_haitang", __DIR__"obj/flower/shi_hulan", }));*/ set("vendor_goods", ([ __DIR__"obj/flower/999_rose":99, __DIR__"obj/flower/red_rose":99, __DIR__"obj/flower/white_rose":99, __DIR__"obj/flower/qingren_cao":99, __DIR__"obj/flower/ding_xiang":99, __DIR__"obj/flower/mu_dan":99, __DIR__"obj/flower/yu_jinxiang":99, __DIR__"obj/flower/bai_he":99, __DIR__"obj/flower/kang_naixin":99, __DIR__"obj/flower/ma_tilian":99, __DIR__"obj/flower/jin_yucao":99, __DIR__"obj/flower/huo_he":99, __DIR__"obj/flower/hu_dielan":99, __DIR__"obj/flower/qiu_haitang":99, __DIR__"obj/flower/shi_hulan":99, ])); setup(); carry_object("d/city/obj/pink_cloth")->wear(); carry_object("d/city/obj/flower_shoe")->wear(); remove_call_out("do_check_flower"); call_out("do_check_flower", 10+random(10) ); remove_call_out("do_full_flower"); call_out("do_full_flower", 1800 );}int do_full_flower(){ tell_room(environment(), "\n几个花匠走了进来。\n"); tell_room(environment(), "“嗨!英莲,给你送鲜花来了。”带头的那个花匠对英莲打招呼。\n"); tell_room(environment(), "“英莲喜声道:“谢谢花匠叔叔,放在后面的花室里吧。”\n"); tell_room(environment(), "花匠们走过去将花放置好。\n"); tell_room(environment(), "花匠们走了出来对英莲说道:“花放好了,我们下次再来。”\n"); tell_room(environment(), "花匠们走了出去。\n"); set("vendor_goods", ([ __DIR__"obj/flower/999_rose":1, __DIR__"obj/flower/red_rose":99, __DIR__"obj/flower/white_rose":99, __DIR__"obj/flower/qingren_cao":99, __DIR__"obj/flower/ding_xiang":99, __DIR__"obj/flower/mu_dan":99, __DIR__"obj/flower/yu_jinxiang":99, __DIR__"obj/flower/bai_he":99, __DIR__"obj/flower/kang_naixin":99, __DIR__"obj/flower/ma_tilian":99, __DIR__"obj/flower/jin_yucao":99, __DIR__"obj/flower/huo_he":99, __DIR__"obj/flower/hu_dielan":99, __DIR__"obj/flower/qiu_haitang":99, __DIR__"obj/flower/shi_hulan":99, ])); remove_call_out("do_full_flower"); call_out("do_full_flower",1800); return 1; }private void go_home(){ if( !living(this_object()) ) return; message_vision("$N神色慌张地离开了。\n", this_object()); this_object()->move("/d/city/huadian"); message_vision("$N快步走了过来。\n", this_object());} void init(){ if( environment() != load_object("/d/city/huadian") ) { remove_call_out("go_home"); call_out("go_home", 1); } add_action("do_check", "list"); //add_action("do_list", "list"); add_action("do_buy", "buy"); add_action("do_song", "song");// add_action("do_check_flower", "check_test");}string inventory_desc(object ob){ return sprintf("%s%s", ob->query("equipped")? HIC "□" NOR:" ", ob->short() );}string price_string(int v){ if( v%10000 == 0 ) return chinese_number(v/10000) + "两黄金"; if( v%100 == 0 ) return chinese_number(v/100) + "两白银"; return chinese_number(v) + "文铜板";}int do_buy(string what){ int i, amount, value, val_factor; string ob_file; object ob, me = this_player(); mapping goods; string *name, last = ""; amount=1; val_factor=10; if( !what ) return notify_fail("你想买什么?\n"); if( sscanf(what, "%d %s", amount, what)!=2 ) { amount = 1; } if( amount < 1 ) return notify_fail("您想买多少?\n"); if( amount > 10 ) return notify_fail("我这里一次最多买十朵。\n"); if( !mapp(goods = query("vendor_goods")) ) return notify_fail("这儿的东西全卖光了。\n"); if(this_player()->is_busy()) return notify_fail("你现在正忙着呢。\n"); name = keys(goods); for(i=0; i<sizeof(name); i++) { if(what == name[i]->name() || name[i]->id(what)) { if( stringp(ob_file = name[i]) ) { if(goods[name[i]]<amount) return notify_fail("我这里没有这么多你要买的这种花了。\n"); ob = new(ob_file); if(goods[name[i]]<10) { val_factor=30; tell_object(this_player(),"现在这"+ob->query("name")+"只剩下很少了,价格上涨两倍,合" +MONEY_D->price_str(ob->query("value")*val_factor/10)+ "一"+name[i]->query("unit")+"\n"); } else if(goods[name[i]]<20) { val_factor=20; tell_object(this_player(),"现在这"+ob->query("name")+"太走俏了,价格上涨一倍,合" +MONEY_D->price_str(ob->query("value")*val_factor/10)+ "一"+name[i]->query("unit")+"\n"); } else if(goods[name[i]]<50) { val_factor=15; tell_object(this_player(),"现在这"+ob->query("name")+"喜欢的人很多,价格上涨一半,合" +MONEY_D->price_str(ob->query("value")*val_factor/10)+ "一"+name[i]->query("unit")+"\n"); } //////////////////////////////////////////////////////////// switch (MONEY_D->player_pay(me, ob->query("value")*amount*val_factor/10)) { case 0: destruct(ob); return notify_fail("穷光蛋,一边呆着去!\n"); case 2: destruct(ob); return notify_fail("您的零钱不够了,银票又没人找得开。\n"); } ob->set_amount(amount); if (ob->move(me)) { goods[name[i]]=goods[name[i]]-amount; if(goods[name[i]] <= 0) { map_delete(goods,name[i]); last = "最后"; } message_vision(sprintf("$N向$n买下%s"+ chinese_number(amount) +"%s%s。\n", last, ob->query("unit"), ob->name()), me, this_object()); } else destruct(ob); this_player()->start_busy(1); return 1; } } } return notify_fail("您想买什么?\n");}int do_check(string arg){ mapping goods; string list, *name; int i; if( arg && !this_object()->id(arg) ) return 0; if( !mapp(goods = query("vendor_goods")) ) return 0; name = keys(goods); if(!sizeof(name)) return 0; list = "你可以购买下列这些东西:\n"; for(i=0; i<sizeof(name); i++) list += sprintf("%-20s(%-5s):\t%s\t还剩%s%s\n", name[i]->query("name"),name[i]->query("id"), MONEY_D->price_str(name[i]->query("value")), CHINESE_D->chinese_number(goods[name[i]]), name[i]->query("unit")); write(list); return 1; }string query_flower_file( string arg){ return sprintf( DATA_DIR "flower/%c/%s", arg[0], arg );}int do_check_flower(){ object *ob,ob_letter; string file ; int i; ob=objects(); i = sizeof(ob); while (i--) { if (userp(ob[i])) { file = query_flower_file( ob[i]->query("id")+".o" ); assure_file( file ); if(file_size(file)!=-1) { if(interactive(ob[i])) if(living(ob[i])) if(!ob[i]-> is_busy()) if(!ob[i]-> is_fighting() ) { ob_letter=new("/clone/misc/flower"); ob_letter->set_owner(ob[i]->query("id")); ob_letter->check(ob[i],this_object()); destruct(ob_letter); } } } } remove_call_out("do_check_flower"); call_out("do_check_flower", 10+random(10) ); return 1;}int ask_songhua(){ write("英莲欠身说到:“感谢客官光临小店,您先在这里将花买好,\n" "然后告诉小女要送给谁,小女一定为您送到。\n" "(song flower_name to playername)”\n" "我们花店收费规则是:送花费用最低十两纹银。\n" "每一朵花收取一两纹银的送花费。\n"); return 1;}int do_song(string arg){ object ob_flower,me,send_flower; object tar; int i,k,money_amount; mapping flower,*flowers; string flower_name,who; me=this_player(); if( !arg || sscanf(arg, "%s to %s", flower_name, who)!=2 ) return notify_fail("你要送什么花给谁?\n"); // if(wizardp(arg))// return notify_fail("这里有这个人吗?\n");if (who=="hxsd" || who=="guaf" || who=="tod" || who=="keinxin" || who=="yaodm" || who=="meier" || who=="xlssi" ) return notify_fail("这里有这个人吗?\n");if (!find_player(who)) return notify_fail("这里有这个人吗?\n"); if(!FINGER_D->acquire_login_ob(who)) return notify_fail("这里有这个人吗?\n");// if(wizardp(acquire_login_ob(who)))// return notify_fail("这里有这个人吗?\n"); ob_flower=present(flower_name,me); if(!ob_flower) return notify_fail("你身上好像并没有这种物品?\n"); if(!ob_flower->query("flower_w")) return notify_fail("对不起!我们这里不负责送这个。\n"); if(me->is_busy()) return notify_fail("你现在正忙着呢。\n"); if(!send_flower=new("/clone/misc/flower")) return notify_fail("/clone/misc/flower初始化错误。\n"); send_flower->set_owner(who); if(send_flower->query("flowername")==flower_name) { command("hmm "); return notify_fail("对不起,我还没将您上次的花送到呢,请您稍后再来吧。\n"); } if(send_flower->query("from")==(me->name(1) + "(" + me->query("id") + ")")) { command("hmm "); return notify_fail("对不起,我还没将您上次的花送到呢,请您稍后再来吧。\n"); } ///////////////////////////////////////////////////////////////////////////////// //******************************收费*******************************************// if(ob_flower->query_amount()<10) money_amount=10; else money_amount=ob_flower->query_amount(); if(ob_flower->query_amount()>1000) money_amount=1000; else money_amount=ob_flower->query_amount(); switch (MONEY_D->player_pay(me, money_amount*100) ) { case 0: destruct(send_flower); return notify_fail("您好像没有足够的银两来支付送花费用。\n"); case 2: destruct(send_flower); return notify_fail("您的零钱不够了,银票又没人找得开。\n"); } message_vision("$N对$n说道:“送花共收您"+price_string(money_amount*100)+"”。\n",this_object(),this_player()); //////////////////////////////////////////////////////////////////////////////// send_flower->set("flowername",ob_flower->query("name")); send_flower->set("flower_id",ob_flower->query("id")); send_flower->set("to",who); send_flower->set("from",me->name(1) + "(" + me->query("id") + ")"); send_flower->set("amount",ob_flower->query_amount()); flower = ([ "flowername":ob_flower->query("name"), "flower_id": ob_flower->query("id"), "to": who, "from": me->name(1) + "(" + me->query("id") + ")", "amount": ob_flower->query_amount(), ]); send_flower->send_flower(flower); send_flower->save(); destruct(send_flower); destruct(ob_flower); me->start_busy(1); message_vision("$n将身上的"+flower["flowername"]+"拿出交给$N。\n",this_object(),this_player()); message_vision("$N对$n说道:“好吧,小女子定会将花送到。\n",this_object(),this_player()); remove_call_out("do_check_flower"); call_out("do_check_flower", 10+random(10) ); return 1;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?