北大侠客行MUD论坛

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

wiz 养成日记--1

[复制链接]
发表于 2009-1-24 15:05:05 | 显示全部楼层 |阅读模式
好吧,既然要做wiz,自然是要学习一些东西的。凭一张嘴就想在xkx wiz界混饭吃,显然wiz前辈们是不答应的(其实这是她们赤裸裸的妒嫉,通过代码消磨我的策划天赋。。)
   下面我会把我学习lpc的整个过程慢慢的写出来,我在自学的时候,就是按照这个步骤来的,所以这篇流水账会有很多弯路与不合理,请老wiz指正,新wiz做为前车之鉴,先说好,你们可以侮辱我,但是不能打我。。。打也不要打脸!!!
   在学习过程中,一切我认为有价值的文章,我都会不经作者同意标上zz之后发到这里,有些网上资源很多的东西,我也许就不发了,但请有兴趣的同学自己baidu一下,阿基米德说过“乐趣来源于自己发掘”   
   现在我们需要知道最简单的,mud是怎么玩起来的。。
   找个sj2的程序(没有就找前辈们要。。他们都有),如果你被whuan看中了,他会给你一个sj2的压缩包,解压缩,放到D盘下。然后按照里面的txt文档把东西设好,启动mudos,就可以用了(什么?你问怎么用?我不会告诉你的。。)。
   
   我碰到的问题:无法登陆。
   解决方式:在D:\sj2\sj2\adm\etc下有个wizlist的文件,用记事本打开,里面有wiz的帐号,用此帐号登陆即可。
   我用的是keinxin (admin),进去随便逛了逛,还好,没迷路,一切都正常,熟悉了一下环境,我便想开始想要寻找飞的感觉了。。在顶礼膜拜下,伴随着一阵异味,jason出现了,于是我便知道了goto。。看到这个了么?
              当铺内室 - /d/city/dangpu3
   你可以goto  /d/city/dangpu3试试,好玩么?baidu一下wiz可用的命令,嘿嘿。(思考题:copy一下随便一个npc的武功看看?)去看看/d/city下的文件,所有的房间都在这里,再看看其他的文件夹(思考题:看到现在你能猜出大体的mud世界的组成了么?),知道了吧。很简单,一个文本文档就是一个房间,一个人或者一个物品。她们是相对独立的,就像是一个个零件,我们的mud世界就是一个个文本文档所组成的。
   现在,你可以着手编写你的第一个文本文档了,但是在写之前,你需要一些基础。去看看wiz修改编辑的那三篇文章吧,记得赵敏是怎么学功夫的么?对,模仿。我们先找一些例子,看看人家是怎么做的。先看看最基本的吧,房间!
   // Room: /d/city/dangpu.c
inherit ROOM;
void create()
{
set("short", "当铺";
set("long", @LONG
这是一家素以买卖公平著称的老字号当铺,一个四尺高的柜台摆在你的面
前,柜台上摆着一个牌子(paizi), 柜台后坐着当铺的老板,一双鬼溜溜的眼
睛上上下下打量着你。
LONG
);
set("no_fight",1);
set("no_sleep_room",1);
   set("no_clean_up", 0);
set("item_desc", ([
  "paizi" : "公平交易,老少无欺。\n",
]));
set("objects", ([
  __DIR__"npc/huang" : 1,
]));
set("exits", ([
  "north" : __DIR__"guangchangnan",
  "south" : __DIR__"dangpu2",
                "east" : __DIR__"dangpu3",
]));
setup();
replace_program(ROOM);
}

这里,有一个房间的基本要素,房间的名字、房间的描述、房间的属性、房间的物品、房间的npc以及房间的出口。(思考题:你能将这些基本要素与上面的那段程序对应起来么?为什么要用__DIR__呢?)
ok,现在你已经可以写出一个房间了。
下面我们把这个房间搭起来,放在游戏中,重启mudos,连线,你会发现你的房间出现了(什么?没有?你把你写好的文本文档放哪里了?)。
也许你会觉得麻烦,如果改一下重启一次,我岂不是疯掉了。。于是jason大婶便又出现了。。于是我便知道了update,试试update /d/city/xxxx.c(xxxx.c就是你刚才写的那个文档名),出现“重新编译 /d/city/xxxx.c:成功!”了?恭喜你。。你告别重启modos的时代了。

ok,你的房间已经有了,现在缺少个小娘子。看到npc文件夹了么?随便打开一个看看里面的内容吧,我打开的是当铺老板娘香菱的。内容如下:
//original from 侠客行-海洋2
//optimized by [email=keinxin@sj2]keinxin@sj2[/email] for sj2
//heart of keeping items
//规则可以自己设定,sj2设定保管费是物品价格的1/4。每个人保存6个道具。treasure不得保存。
#include
inherit NPC;
#define MAX_PAWN 5
inherit F_VENDOR;
void create()
{
set_name("香菱", ({ "xiangling" }) );
set("gender", "女性" );
set("age", 29);
set("title", "当铺老板娘";
set("long",
  "香菱从小被卖到千金楼,生活凄苦,但因善长得男人欢心,
终被一富豪看中,娶为第十八房小老婆。\n";
set("combat_exp", 5000);
set("attitude", "friendly";
set("per",30);
set("no_arrest",1);
set_skill("unarmed",200);
set_skill("dodge",200);
setup();
       carry_object("/d/city/obj/flower_shoe"->wear();
       carry_object("/d/city/obj/pink_cloth"->wear();
}

这就是一个人物的基本信息,跟房间差不多吧,有名字、年龄、性别、名头、描述、exp设定、人物状态等等。(思考题:你能找到每个set里面的内容代表什么么?)

ok,现在copy一下这个人物,换个名字,放到你的房间里吧,update一下,你的第一个小娘子就诞生了。好玩么?

现在你已经有了一个房间、里面还有个漂亮的小娘子,我的第一个念头就是调戏她一下。ask xiangling about 亲亲,咦?什么都没发生啊,mm对你不理睬。。怎么办呢?我们就加上吧,你想亲亲的时候,让她也亲亲你。找找其他可以ask的npc,看看他们的文件是怎么来设定的。比如欧阳锋,里面有这样一段代码
        set("inquiry" ,([
    "欧阳克":"欧阳锋嘿嘿一笑:“那是我的乖侄子,你见过他了吗?”\n",
    "蛇杖":ask_zhang,
  ]));
没错就是这个,ask ouyang feng about 欧阳克 试试?没错,你该领悟inquiry的用法了。(思考题:你能让香菱mm在你ask 亲亲的时候,她也回答亲亲吗?)
ok,下面那句 :ask_zhang,又是什么意思呢?如果你没有编程的经验,那就去随便翻翻任意一本编程入门的书,看看关于函数调用的那部分。不需要知道到底怎么编写,你只需要理解函数调用的过程就ok,毕竟我们是从模仿开始的,很多东西你现在不需要弄懂,只需要知道大概。记得郭靖怎么学的九阴么?金大侠不一定是编程高手,但他一定是编程指导大师!!
(这里说点题外话,就是关于外部函数调用的,这是针对没有编程基础的同学而写的,高手请略过。按我的理解,其实计算机语言也是语言的一种,跟我们说的汉语、英语没有区别。不同的是英汉是对人说的,而计算机语言是跟计算机交流的,他们本质上没有区别,所以如果你能学会abcd,那你也一定能学会编程。我们编程的目的是让计算机完成一项我们交给他的工作,比如我们对人交代一件事情。其中一个步骤很复杂,你为了不打断整个交待的连贯性,提前将其写到纸上,现在开始,我说张三,你今天这么干,第一步,做这个,第二步,做这个,第三步,你找到一个人,按纸上写的做,第四步怎么怎么样。ok,交待完了。这张纸的作用是什么?它就是一个外部函数。如果你想让李四同样干第三步的活,可以把纸给他,而不必交待任何事情。到了该执行第三步的时候,张三就会把纸拿出来,找到你指定的人,去干活。现在你想让李四也干一遍张三第三步的活,你就可以把纸直接给李四。现在把张三换成计算机。把整个事情换成你的程序。把纸换成外部函数,把第三步要找的人换成需要传入函数的参数。把第三步的结果换成函数的返回值。把李四换成你需要写的另一个程序。看到函数的好处了?一劳永逸啊!!明白了么?不明白我也没办法。。。我就理解到这些,还不知道对不对,请jason大婶以及其他大神们看看,呵呵。)

好了,你可能会觉得ask _zhang的函数里有很多东西你都不懂,什么object 什么->符号,都看不明白,让我们扔掉他,回到香菱那里,下面是我自己做得一个简单到不能再简单的香菱3号,大家请观摩指正。

//original from 侠客行-海洋2
//optimized by [email=keinxin@sj2]keinxin@sj2[/email] for sj2
//heart of keeping items
//规则可以自己设定,sj2设定保管费是物品价格的1/4。每个人保存6个道具。treasure不得保存。
#include
inherit NPC;
#define MAX_PAWN 5
inherit F_VENDOR;
string ask_me();
void create()
{
set_name("香菱3", ({ "xiangling" }) );
set("gender", "女性" );
set("age", 29);
set("title", "当铺老板娘";
set("long",
  "香菱从小被卖到千金楼,生活凄苦,但因善长得男人欢心,
终被一富豪看中,娶为第十八房小老婆。\n";
set("combat_exp", 5000);
set("attitude", "friendly";
set("per",30);
set("no_arrest",1);
set_skill("unarmed",200);
set_skill("dodge",200);
setup();
       carry_object("/d/city/obj/flower_shoe"->wear();
       carry_object("/d/city/obj/pink_cloth")->wear();
set("inquiry", ([
                "亲亲"   : (:ask_me,
        ]) );
}
string ask_me()
{
  object xunbu;
        object npc;
       if((random(2)==1)){
  set("a", 1);
       }else{
set("a",0);
}     
if(query("a")==1){
          return "hehe,亲亲";
}
      if(query("a")==0){
         
         xunbu=new("/d/city/npc/xiangling");
       xunbu->move(environment(this_object()));
      npc = present("xiangling",environment());     
         if(objectp(npc)){
         remove_call_out("destroy");
         call_out("destroy",1,this_object());
return "我让我姐姐陪你吧";
  }
       }
}
void destroy(object me){
destruct(me);
return;
}

好了,第一篇日记就写这些。留下一些思考题:
1、这里用到了新的东西,new、move、present、objectp、remove_all_out、call_out,去看看wiz发给你的wiz.chm文件,你能找到他们的作用是什么么?
2、为什么这里需要用remove_call_out以及call_out ?
3、你能让香菱看到你就对你攻击么?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-2-8 17:25:00 | 显示全部楼层
香菱不是风云的npc么?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-2-9 09:10:13 | 显示全部楼层
香菱只不过是个代号,你可以是,我也可以是
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-12-15 10:19:31 | 显示全部楼层
看这个系列。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-2-2 00:00:08 | 显示全部楼层
没研究WIZ自身代码。不过文中这段代码有点累赘
建议优化一下,可以同时提高代码的空间效率和时间效率。

if((random(2)==1)){
  set("a", 1);
       }else{
set("a",0);
}     
if(query("a")==1){
          return "hehe,亲亲";
}
if(query("a")==0){ /*...*/}
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2019-5-25 07:33:23 | 显示全部楼层
看不懂
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2022-12-8 11:30 AM , Processed in 0.009618 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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