北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 2778|回复: 8

该死的毫毛,把酒袋全都捡了去

[复制链接]
发表于 2012-4-13 08:21:31 | 显示全部楼层 |阅读模式
巫师大人,能不能弄个fillall指令呢?装水似乎有点麻烦

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2012-4-13 08:44:21 | 显示全部楼层
可以买个包袱,把drop jiudai改为put in bag
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2012-4-13 09:01:21 | 显示全部楼层
其实我更希望巫师改的指令支持 fill jiudai 1,fill jiudai 2,....
这样很难吗?还有sell armor 1,sell armor 2,类似的。遗憾的是,这里sell armor 2表示卖掉2个armor。
为什么不是sell 2 armors呢?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2012-4-13 10:36:01 | 显示全部楼层
是啊,支持!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2012-4-17 16:18:07 | 显示全部楼层
我们来看看fill.c  (以下代码取自海洋2,其它MUD应该类似)

  1. // fill.c
  2. // by snowman@SJ 02/04/1999.
  3. #include
  4. inherit F_CLEAN_UP;
  5. int main(object me, string arg)
  6. {
  7.     object obj;
  8.    
  9.     if (me->is_busy() || me->is_fighting()) return notify_fail("你正忙着呢。\n");
  10.     if( !arg )
  11.         return notify_fail("你想往哪里放水?\n");
  12.     if(!objectp(obj = present(arg, me)) )
  13.           return notify_fail("你身上没有这样东西。\n");
  14.     if (!environment(me)) return notify_fail("目前有问题。\n");
  15.     if (!me) return notify_fail("你断线了。\n");
  16.    
  17.     if(!obj->query("max_liquid"))
  18.              return notify_fail(obj->name()+"这东西可装不了水。\n");
  19.                   
  20.     if(!environment(me)->query("resource/water"))
  21.              return notify_fail("这里没有地方可以装水。\n");
  22.             
  23.     if( obj->query("liquid/remaining") )
  24.   message_vision("$N将$n里剩下的" + obj->query("liquid/name") + "倒掉。\n", me, obj);

  25.     if((string)environment(me)->query("resource/fill_msg"))
  26.              message_vision(environment(me)->query("resource/fill_msg"), me, obj);
  27.     else message_vision("$N将$n装满。\n", me, obj);
  28.     obj->set("liquid/type", (string)environment(me)->query("resource/water_type")?environment(me)->query("resource/water_type"):"water");
  29.     obj->set("liquid/name", (string)environment(me)->query("resource/water_name")?environment(me)->query("resource/water_name"):"清水");
  30.     obj->set("liquid/remaining", obj->query("max_liquid"));
  31.     obj->set("liquid/drink_func", 0);
  32.     obj->set("liquid/drunk_apply", (int)environment(me)->query("resource/water_apply")?environment(me)->query("resource/water_apply"):20);
  33.    
  34.     me->start_busy(1);
  35.     return 1;
  36. }

  37. int help(object me)
  38. {
  39.     write(@HELP
  40. 指令格式 : fill <物品名称>

  41. 这个指令可以让你将空的容器装满水。

  42. HELP
  43.     );
  44.     return 1;
  45. }

复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2012-4-17 16:36:25 | 显示全部楼层
再看看当铺老板继承的dealer.c

  1. // dealer.c 商人
  2. // This is a inheritable object.
  3. // Each dealer should support buy, sell, list, value 4 commands
  4. // Modify by Yu Jue 98-8-5
  5. #include
  6. static mapping armor = ([]);
  7. static mapping book = ([]);
  8. static mapping misc = ([]);
  9. static mapping weapon = ([]);
  10. int query_goods_value(object goods, string method)
  11. {
  12.         object me = this_player();
  13.         int value, trade_level;
  14.         value = goods->query("value");
  15.         trade_level = me->query_skill("trade", 1) / 5;
  16.         if (trade_level > 40) trade_level = 40;
  17.         if (method == "buy")
  18.                 value = value * (140 - trade_level) / 100;
  19.         else if (method == "sell" || method == "value")
  20.                 value = value * (50 + trade_level) / 100;
  21.         return value;
  22. }
  23. string is_vendor_good(string arg)
  24. {
  25.         string *goods;
  26.         int i;
  27.         if (arrayp(goods = query("vendor_goods")))
  28.                 for (i = 0; i < sizeof(goods); i++)
  29.                         if (goods[i]->id(arg)) return goods[i];
  30.         return "";
  31. }
  32. int do_value(string arg)
  33. {
  34.         object ob;
  35.         int value;
  36.         if (!arg || !(ob = present(arg, this_player())))
  37.                 return notify_fail("你要估什么价?\n");
  38.         if (ob->query("money_id"))
  39.                 return notify_fail("你没用过钱啊?\n");
  40.         value = query_goods_value(ob, "value");
  41.         if (value < 30)
  42.                 write(ob->name() + "一文不值!\n");
  43.         else
  44.                 write(ob->name() + "值" + MONEY_D->price_str(value) + "。\n");
  45.         return 1;
  46. }
  47. int do_sell(string arg)
  48. {
  49.         object ob;
  50.          object me = this_player();
  51.         int value, value1, improve;
  52.         object nob;
  53.         string my_id;
  54.         int amount;
  55.         int res;
  56.         int max_count;
  57.         if (me->is_busy() || me->is_fighting())
  58.                 return notify_fail("你正忙着呢。\n");
  59.         if (!arg || !(ob = present(arg, me)))
  60.                 return notify_fail("你要卖什么?\n");

  61.         if (ob->query("money_id"))
  62.                 return notify_fail("你想卖「钱」?\n");
  63. if (stringp(ob->query("no_drop")))
  64.   return notify_fail("这样东西不能卖。\n");
  65. //        if (ob->query("no_drop") || ob->query("no_get"))
  66. //                return notify_fail("这样东西我买了怕卖不掉。\n");
  67.         if (ob->query("ownmake"))
  68.                 return notify_fail("这样的宝物我可买不起。\n");
  69.         if (query_temp("busy"))
  70.                 return notify_fail("哟,抱歉啊,我这儿正忙着呢……您请稍候。\n");
  71.         if (is_vendor_good(arg) != "")
  72.                 return notify_fail("我卖给你好不好?\n");

  73.         value = ob->query("value");
  74.         value1 = query_goods_value(ob, "sell");
  75.         if (value < 30)
  76.                 write(ob->name() + "一文不值!\n");
  77.         else if (value >= 1000000)
  78.                 write(ob->name() + "我们可买不起。\n");
  79.         else {
  80.          if (value < 200 || ob->query_amount()
  81.          || ob->query("yaocao")
  82.          || ob->query("food_supply")) {
  83.                         message_vision("$N卖掉了一" + ob->query("unit") +
  84.                                 ob->name() + "给$n。\n", me, this_object());
  85.                         message_vision("$N把$n随手一扔,说道:这么个不值钱的玩意也拿来当。\n",
  86.                                 this_object(), ob);
  87.                         destruct(ob);
  88.                 } else {
  89.                         if (ob->move(this_object())) {
  90.                                 message_vision("$N卖掉了一" + ob->query("unit") +
  91.                                         ob->name() + "给$n。\n", me, this_object());
  92.                                 ob->set("no_get", 1);
  93.                                 if (ob->query("armor_type")) armor[base_name(ob)]++;
  94.                                 else if (ob->query("skill")) book[base_name(ob)]++;
  95.                                 else if (ob->query("weapon_prop")) weapon[base_name(ob)]++;
  96.                                 else misc[base_name(ob)]++;
  97.                         }
  98.                         else return notify_fail("我这货物已经太多了,暂时停止收购。\n");
  99.                 }
  100.                 MONEY_D->pay_player(me, value1);
  101.                 improve = 40 - me->query("pur");
  102.                 me->improve_skill("trade", improve / 2 + random(improve));
  103.         }
  104.         return 1;
  105. }
  106. int do_list(string arg)
  107. {
  108.         string *goods;
  109.         mapping ptr;
  110.         object *inv;
  111.         int i, j, flag = 0;
  112.         if (arrayp(goods = query("vendor_goods"))) {
  113.                 write("目前出售以下货物:\n");
  114.                 for (i = 0; i < sizeof(goods); i++)
  115.                         printf("%30-s:%s\n", goods[i]->short(),
  116.                                 MONEY_D->price_str(query_goods_value((object)goods[i], "buy")));
  117.                 return 1;
  118.         }
  119.         switch (arg) {
  120.                 case "armor": arg = "护具"; ptr = armor; break;
  121.                 case "book": arg = "书籍"; ptr = book; break;
  122.                 case "misc": arg = "杂物"; ptr = misc; break;
  123.                 case "weapon": arg = "武器"; ptr = weapon; break;
  124.                 default: return notify_fail("您想看哪一种货物(armor, book, misc, weapon)?\n");
  125.         }
  126.         
  127.         i = sizeof(ptr);
  128.         if (!i)
  129.                 return notify_fail("目前没有可以卖的"+arg+"。\n");
  130.         
  131.         goods = keys(ptr);
  132.         inv = all_inventory();
  133.         while (i--) {
  134.                 j = sizeof(inv);
  135.                 while (j--) {
  136.                         reset_eval_cost();
  137.                         if (inv[j]->query("no_get") && goods[i] == base_name(inv[j])) {
  138.                                 if (!flag) write("目前出售以下"+arg+":\n");
  139.                                 printf("%-30s 单价:%s\n", inv[j]->short(),
  140.                                         MONEY_D->price_str(query_goods_value(inv[j], "buy") * 6 / 5));
  141.                                 flag = 1;
  142.                                 break;
  143.                         }
  144.                         if (j<0) map_delete(ptr, goods[i]);
  145.                 }
  146.         }
  147.         if (!flag) write("目前没有可以卖的"+arg+"。\n");
  148.         return 1;
  149. }
  150. int do_buy(string arg)
  151. {
  152.         int i, val_factor = 5, improve;
  153.         string ob_file;
  154.         object *inv;
  155.         object ob;
  156.         mapping goods;
  157.         int     amount;
  158.         int     value;
  159. object *obs;
  160. string  my_id;
  161.         string  start_room;
  162.         object  room;
  163.         mapping room_obmap;
  164.         object me = this_player();
  165.         if (me->is_busy() || me->is_fighting())
  166.                 return notify_fail("你正忙着呢。\n");
  167.         if (query_temp("busy"))
  168.                 return notify_fail("哟,抱歉啊,我这儿正忙着呢……您请稍候。\n");
  169.         if (!arg) return notify_fail("你想买什么?\n");
  170.         if (! query("carried_goods"))
  171.         {
  172.                 if (stringp(start_room = query("startroom")) &&
  173.                     (room = find_object(start_room)) != environment())
  174.                 {
  175.                         // I am not in start room.
  176.                         message_vision("$N大叫一声:“不好,我怎么跑到这儿来了?”\n"
  177.                                        "说罢头也不回的急急忙忙的溜走了。\n", this_object());
  178.                         if (! objectp(room) ||
  179.                             ! mapp(room_obmap = room->query_temp("objects")) ||
  180.                             member_array(this_object(), values(room_obmap)) == -1)
  181.                         {
  182.                                 destruct(this_object());
  183.                         } else
  184.                                 this_object()->move(room);
  185.                         return 1;
  186.                 }
  187.         }
  188.         if (sizeof(filter_array(all_inventory(me), (: ! $1->query("equipped") :))) >= 40)
  189.         {
  190.                 write("你身上的东西太多了,先处理一下再买东西吧。\n");
  191.                 return 1;
  192.         }
  193.         inv = all_inventory();
  194.         i = sizeof(inv);
  195.         if (i)
  196.                 while (i--) if (inv[i]->id(arg) && inv[i]->query("no_get")) { ob = inv[i]; val_factor = 6; break; }
  197.         if (!ob) {
  198.                 if ((ob_file = is_vendor_good(arg)) == "")
  199.                         return notify_fail("你想买的东西我这里没有。\n");
  200.                 else ob = new(ob_file);
  201.         }
  202.         if( (int)me->query_encumbrance() + ob->weight()
  203.                 > (int)me->query_max_encumbrance() )
  204.         return notify_fail( me->name() + ":你已经拿不动了啊!\n");
  205.         switch (MONEY_D->player_pay(me, query_goods_value(ob, "buy") *  val_factor / 5)) {
  206.                 case 0:
  207.                         if (val_factor == 5) destruct(ob);
  208.                         return notify_fail("穷光蛋,一边呆着去!\n");
  209.                 case 2:
  210.                         if (val_factor == 5) destruct(ob);
  211.                         return notify_fail("您的零钱不够了,银票又没人找得开。\n");
  212.                 default:
  213.                         if (!ob->move(me)) {
  214.                                 if (val_factor == 5) destruct(ob);
  215.                                 return 0;
  216.                         }
  217.                         ob->delete("no_get");
  218.                         message_vision("$N从$n那里买下了一" + ob->query("unit") +
  219.                                 ob->name() + "。\n", me, this_object());
  220.                         improve = 40 - me->query("pur");
  221.                         me->improve_skill("trade", improve / 2 + random(improve));
  222.         }
  223.         set_temp("busy", 1);
  224.         call_out("delete_temp", 1, "busy");
  225.         return 1;
  226. }
  227. /*void reset()
  228. {
  229. int i;
  230. object *obs;
  231. obs = all_inventory();
  232.         for (i = 0; i < sizeof(obs); i++)
  233.                 if (i >= 100 || obs[i]->query_weight() >= 1000000)
  234.                         destruct(obs[i]);
  235. }
  236. */
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2012-4-17 16:37:41 | 显示全部楼层
特别的看看do_sell函数

  1. int do_sell(string arg)
  2. {
  3.         object ob;
  4.          object me = this_player();
  5.         int value, value1, improve;
  6.         object nob;
  7.         string my_id;
  8.         int amount;
  9.         int res;
  10.         int max_count;
  11.         if (me->is_busy() || me->is_fighting())
  12.                 return notify_fail("你正忙着呢。\n");
  13.         if (!arg || !(ob = present(arg, me)))
  14.                 return notify_fail("你要卖什么?\n");

  15.         if (ob->query("money_id"))
  16.                 return notify_fail("你想卖「钱」?\n");
  17. if (stringp(ob->query("no_drop")))
  18.   return notify_fail("这样东西不能卖。\n");
  19. //        if (ob->query("no_drop") || ob->query("no_get"))
  20. //                return notify_fail("这样东西我买了怕卖不掉。\n");
  21.         if (ob->query("ownmake"))
  22.                 return notify_fail("这样的宝物我可买不起。\n");
  23.         if (query_temp("busy"))
  24.                 return notify_fail("哟,抱歉啊,我这儿正忙着呢……您请稍候。\n");
  25.         if (is_vendor_good(arg) != "")
  26.                 return notify_fail("我卖给你好不好?\n");

  27.         value = ob->query("value");
  28.         value1 = query_goods_value(ob, "sell");
  29.         if (value < 30)
  30.                 write(ob->name() + "一文不值!\n");
  31.         else if (value >= 1000000)
  32.                 write(ob->name() + "我们可买不起。\n");
  33.         else {
  34.          if (value < 200 || ob->query_amount()
  35.          || ob->query("yaocao")
  36.          || ob->query("food_supply")) {
  37.                         message_vision("$N卖掉了一" + ob->query("unit") +
  38.                                 ob->name() + "给$n。\n", me, this_object());
  39.                         message_vision("$N把$n随手一扔,说道:这么个不值钱的玩意也拿来当。\n",
  40.                                 this_object(), ob);
  41.                         destruct(ob);
  42.                 } else {
  43.                         if (ob->move(this_object())) {
  44.                                 message_vision("$N卖掉了一" + ob->query("unit") +
  45.                                         ob->name() + "给$n。\n", me, this_object());
  46.                                 ob->set("no_get", 1);
  47.                                 if (ob->query("armor_type")) armor[base_name(ob)]++;
  48.                                 else if (ob->query("skill")) book[base_name(ob)]++;
  49.                                 else if (ob->query("weapon_prop")) weapon[base_name(ob)]++;
  50.                                 else misc[base_name(ob)]++;
  51.                         }
  52.                         else return notify_fail("我这货物已经太多了,暂时停止收购。\n");
  53.                 }
  54.                 MONEY_D->pay_player(me, value1);
  55.                 improve = 40 - me->query("pur");
  56.                 me->improve_skill("trade", improve / 2 + random(improve));
  57.         }
  58.         return 1;
  59. }
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2012-4-20 08:19:30 | 显示全部楼层
都研究代码了啊,看看有没有能致富的bug捏?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2012-4-20 09:19:03 | 显示全部楼层
酥油茶
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-26 05:43 AM , Processed in 0.010422 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表