|
好吧,既然要做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、你能让香菱看到你就对你攻击么? |
|