oahz@ts 发表于 2010-2-2 18:33:20

这个ask如何?

#include <ansi.h>
string query_inquiry(object ob);
inherit F_CLEAN_UP;

string *msg_dunno = ({
      "$n摇摇头,说道:没听说过。\n",
      "$n疑惑地看着$N,摇了摇头。\n",
      "$n睁大眼睛望着$N,显然不知道$P在说什么。\n",
      "$n耸了耸肩,很抱歉地说:无可奉告。\n",
      "$n说道:嗯....这我可不清楚,你最好问问别人吧。\n",
      "$n想了一会儿,说道:对不起,你问的事我实在没有印象。\n",
});

int main(object me, string arg)
{
      string dest, topic, msg;
      object ob;
      mapping inquiry;
      string str;


      seteuid(getuid());
                        str=read_file("/log/NEWS");

      if( me->is_busy() )
                return notify_fail("您先歇口气再说话吧。\n");

      if( !arg || sscanf(arg, "%s about %s", dest, topic)!=2 )
                return notify_fail("你要问谁什么事?\n");

      if( !objectp(ob = present(dest, environment(me))) )
                return notify_fail("这里没有这个人。\n");

      if( !ob->is_character() ) {
                message_vision("$N对着$n自言自语....\n", me, ob);
                return 1;
      }

      if( !ob->query("can_speak") ) {
//增加ask内容颜色醒目reikou 20071015
                message_vision("$N向$n打听有关『" + HIG +topic + NOR + "』的消息,但是$p显然听不懂人话。\n", me, ob);
                return 1;
      }

      if( !INQUIRY_D->parse_inquiry(me, ob, topic) )
                message_vision("$N向$n打听有关『" + HIG +topic + NOR + "』的消息。\n", me, ob);

      if( userp(ob) ) return 1;
      if( !living(ob) ) {
                message_vision("但是很显然的,$n现在的状况没有办法给$N任何答覆。\n",
                        me, ob);
                return 1;
      }
      if(msg = ob->accept_ask(me, topic))
         {
                  if (stringp(msg))
                  {
                        message_vision(CYN "$N" CYN "说道:" + msg + "\n" NOR, ob);
                        return 1;
                  }
          }

      if( msg = ob->query("inquiry/" + topic) ) {
                if( stringp(msg) ) {
                        message_vision( CYN "$N说道:" + msg + "\n" NOR, ob);
                        return 1;
                }
      } else {
                if(ob->query("race")=="野兽") {
                        message_vision("但是很可惜,$N不会说话。\n", ob);
                        return 1;
                }
                switch(topic) {
                        case "name":
                        message_vision( CYN "$N说道:我的名字就是$N," + RANK_D->query_respect(me)+ "有什么事?\n" NOR, ob);
                              break;
                        case "here":
                              message_vision(CYN "$n对$N说道:这里是" + environment(ob)->query("short") + ",其它情况" + RANK_D->query_self(ob) + "也不太清楚。\n" NOR, me, ob);
                              break;
                        default:
                if(topic=="news")
                        {
                        if (!str)
                        {
                        message_vision( CYN "$N对你说到,最近没什么新闻可说.." NOR, ob);
                        }
else {
                        message_vision( CYN "$N对你说到,最近听有人说过:"+str+"" NOR, ob);
}
                        return 1;
                }      
                if(topic=="all")
                        {
                        message_vision( CYN "$N对你悄声说道:"+query_inquiry(ob)+"!\n" NOR, ob);
                        return 1;
                }
                              if (topic == ob->query("name") || ob->id(topic))
                              message_vision(CYN "$n说道:那就是" + RANK_D->query_self_rude(ob) + "呀。\n" NOR, me, ob);
                              else if (topic == me->query("name") || me->id(topic))
                              message_vision(CYN "$n说道:那就是" + RANK_D->query_rude(me) + "你呀。\n" NOR, me, ob);
                              else if (topic == ob->query("name") || ob->id(topic))
                              EMOTE_D->do_emote(ob, "name1");
else
                                        message_vision(msg_dunno, me, ob);
                }
      }
      return 1;
}

string query_inquiry(object ob)
{
      int i=0;
      mapping inq;
      string str="", *indexs;
      
      if(mapp(inq=ob->query("inquiry")))
                {
                indexs=keys(inq);
                for(i=0;i<sizeof(indexs);i++)
                        {
                              str=indexs+" "+str;
                              }
                str="有关于 "HIB+str+NOR CYN"的事情,我很高兴告诉你!";
                return str;
                }
      return "实在是对不起,我什么也不知道呀!";
      }

int help(object me)
{
   write( @HELP
指令格式: ask <someone> about <something>

这个指令在解谜时很重要, 通常必须藉由此一指令才能
获得进一步的资讯。
预设的询问主题:
      here
      name
      news
      all
HELP
   );
   return 1;
}

oahz@ts 发表于 2010-2-2 18:36:04

这样是不是能更好的与NPC沟通???
这样是不是能更好的与NPC沟通???

eason@ts 发表于 2010-2-13 08:33:34

还行吧。。。我支持。。。请有关方面尽快落实。。。

momojj@ts 发表于 2010-2-13 13:40:09

还可以加一个,把论坛id的一些公众可见信息,提供出来。
比如:
ask xxx about eason
你向xxx打听eason的情况。
xxx回答:他是管理员的宝宝你不知道么?

oahz@ts 发表于 2010-2-18 16:23:22

半个月过去了,master估计连看都没有看过。非常打击积极性吖。

[ 本帖最后由 oahz@ts 于 2010-2-18 16:28 编辑 ]

intfox@ts 发表于 2010-4-23 07:10:21

强烈建议用这个ask,能给新玩家提供点便利嘛!
页: [1]
查看完整版本: 这个ask如何?