mud_sanc 板


LINE

※ 引述《caselook (幸福要懂得耕耘)》之铭言: : 全域继承档是不是定义在 /include/globals.h 里面? 不是,是被写在 mudos 所使用的 config 档,如果你曾抓过 tmi2-mudlib+fluffos 包裹压缩档,可打开其 mudos 目录下 bin/config.tmi2 档查看 (如果解压缩在 D 槽就是 D:\tmi2_fluffos_v3\bin\config.tmi2) 最底下那几行就如下 maximum buffer size : 100000 debug log file : debug.log global include file : <mudlib.h> 而 sanc 的 mudlib.h 里面又有一行 #include "ansi.h", 所以这两个 .h 档才会变成 sanc 今天的 global .h 档。 : : void create() : : { : : ::create(); : : seteuid(getuid(this_object())); // 到这里为止都是固定的 : : // seteuid: 设定一个物件的有效识别名称 : : // 有这一行, 房间才被允许做一些 : : // 载入或复制物件的动作 : : // getuid : 传回一个物件的有效识别名称 : : // this_object(): 这个物件本身 : 上面这一段应该就是标准写法了。似乎是与mudos设定物件的权限有关。 : 所以,是不是所有的 void create(){}都要加上这一行? 通常一个最单纯的房间(没有特殊用途等),是不需要 seteuid 的, 反过来说不单纯的房间你就想成最好都 seteuid 过比较没问题。 这跟 valid_xxx 相关函数有关,透过这个房间去做载入物件或是执 行一些特殊函数、动作时,它会要求房间要先有 uid。 所以 uid「有设」比「没设」保险,这是首先可了解的。 其次就是「它不一定要设,看情况」,这也接着要了解的。 (::create(); 那行则几乎都是要的) : : set("light",1); // 房间维持光亮 : : set("short","工作室"); // 设定房间名称 : 我看 wizhelp 的 basic 说明档,提到 set()的标准写法是 : this_object->set() ,这个「->」符号的意思是? 那个不要看了有些东西是旧的。 -> 你可以理解为 物件 呼叫(->) 函数(参数) mud 会有像是物件导向的东西,指的就是这一方面,任何已 被载入到记忆体的东西几乎都能称为是一个物件,而我们将 它载入到记忆体的目的就是希望这个物件能为我们提供什麽 服务,它的最基础语法就是 物件->。 以上面来说 this_object()->set 就是要求「this_object()」 这个函数回传回来的「物件」,去呼叫 set() 这个函数。 那麽为什麽写房间却是用 set 而不用 this_object()->set 呢,因为 this_object() 就是「传回这个房间本身」,则 既然 this_object() 可呼叫 set(),那写在这个房间里面 的函数本来就可以呼叫本地的 set,也就是说以这个 case this_object()->set("light",1); 跟 set("light",1); 是同义的。而在执行速度上自然是後者较快,因为它属於本 地呼叫,而没有透过 this_object() 函数先取得一个物件 ,再令它做 set 的动作。 : 在 create room 的set(),除了设定 exits,hide_exits,objects....之外, : 还有那些资料可以参考 set()函数的功能? 你先知道基础的这几个就可,因为这些几乎是 LPmud 通用的设定。 然後理论上房间的 set 语法是 set("设定项目",设定内容); 只要设定项目符合「字串」就几乎都可以设,重点就在於你设了这 个字串,就需赋予它「意义」。例如说我们今天设定 "short" 这 个资料串,那为什麽玩家下 look 时可看到我们设定的 short 呢 ?这是因为我们在 look 这个动作里有加上相对应的程式段例如 if(room->query("short")) write(room->query("short")+"\n"); 则玩家下 look → 程式执行到上面的段落 → 让玩家看到 short 所以一开始了解最基本的房间大概包含哪些设定即可,这样就足 够写简单的区域了,然後一开始需做的就是试着写几个简单的物 件,而不要把它想得太复杂。 : : reset(); // 有 set("object") 就要有这一行 reset() : : // 被设定的物件才会被 load 到房间 : : } : : 你所参考的房间,有一些写法是错误的,那是非常早期版本的 : : mudos 可相容的写法,现在是不相容的,这只要 update 那个 : : 房间马上就会知道。 : update 还没用过。主要是因为觉得 edit 不习惯。 : 所以我 cp 了 workroom,c workroom.bak 之後,不知道怎麽 edit workroom.c : 有没有办法在 local 端用 npp 编辑好,再上传到 sanc? sanc 目前不开放 ftp 上传,我比较建议先在自己电脑的文书编 辑软体将档案编好,再用 edit 把档案写入,这样有错误时,只 要改自己电脑下的档案,改好再重新 edit 进去就可。 因为你一开始编辑的东西并不会太复杂,所以我才建议这样的方 式。 edit 跟 vi 一样都分为命令模式(即最前面有 : 号)跟编辑模式 ,命令模式可下的指令最常用的有底下几个 a : 往後添加 1 至数行 i : 从所在行开始添加 1 至数行 d : 删除所在行 w : 存档 q : 离开 Q : 不存档离开 数字 : 直接跳往某一行 在编辑模式要跳回命令模式,则是在行首输入 . 符号按 enter 即可。 : : 如果你真的要自己研究,那你应该先问的是一开始要知道哪些 : : 事情,包括有哪些指令(工具)可使用、可先参考哪几个区域、 : : 然後怎麽设定自己的 workroom 去快速连结这些区域等。 : 这个很需要知道,我原以为直接在 caselook 的工作目录下先写区域, : 包含 room 及各种 objcet後,再考虑连结其他的区域的说。 这也是可以的,但是我觉得对你来说,现在更应该做的不是急着写 区域,而是先「多看看别人怎麽写」,然後看一看後你想写,就先 「试着写」而不是「就开始写」,把基础尽量打稳,看久了你就会 发现一个东西叫做「框架」,在你看过足够多的样本後,你就会知 道你想写的东西,它的框架其实跟现存的许多样本都大同小异,你 会在无形中自然理解: 1.要写一个东西,会需要用到哪些框架 2.每一个框架的各种组成要素有哪些是常用的 例如说要写房间,我们需要 void create() { } 这个框架;要在 房间里面设定让玩家可执行一些指令,需要 void init() { } 这 个框架;...... : : 有哪些 wiz 的指令可用 : : update - 更新(编译, compile)一个 .c 档并将其载入到记忆体 : : invis player - 让自己隐形, 在调查主动怪区域时可使自己不被攻击 : : more [目标] - 如 more lodao、more here、more ~/workroom.c、.. : : clone [目标] - 叫出一个物件,如 clone /d/wiz/mob/lodao : : dest [目标] - 消灭一个物件,如 dest lodao、dest cloth、... : : goto [目标] - 如 goto laechan、goto ~/workroom.c、.. : : home - 回自己的工作室,预设为 /u/c/caselook/workroom.c : : 也可以 home 其它 wiz 的工作室如 home laechan : : cp - 拷贝档案 : : rm - 删除档案, 目录 : : mv - 搬移档案, 目录 : : md - 建立目录 : : da [目标] - 观看一个被载入物件的设定资料。如 da me、da laechan、 : : da here、da ~/workroom、... : sanc 好像没有 cat指令,打 cat 呼叫的是妙喵的哀嚎.... : sanc有没有类似於 cat 的指令呢? : 我用的 pietty只有「复制全部」的功能,用 more 分段显示是很方便, : 但比较不容易截录画面文字。 cat 有它的极限(跟字串长度有关),不过我可以写一个给你,顺便跟你说 一下最简单的 cat 指令写法 // /cmds/file/_cat.c inherit DAEMON; int cmd_cat(string str,object me) { string files; if(!str || str=="") return notify_fail("语法: cat [档案名称].\n"); if(ob=present(str,me)) files=base_name(ob)+".c"; else if(ob=present(str,environment(me))) files=base_name(ob)+".c"; else if(str=="me") files=base_name(me)+".c"; else files=resolv_path(me->query("cwd"),str); if(!file_exists(files)) return notify_fail("cat: "+files+" 档案不存在.\n"); str=read_file(files); return notify_fail(str); } cat 指令已实装於 5003。 : : 可先参考哪几个区域 : : 基本上 /d/ppl/ 目录下的区域就是一开始可以参考的。 : /d/ppl/我会好好观摩,有问题再在板上请益^^ 嗯嗯,可以多看,有问题亦可尽量问。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.117.106.224
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1400737413.A.0F7.html ※ 编辑: laechan (122.117.106.224), 05/22/2014 13:49:21
1F:推 caselook :感谢,cat已能使用,edit试了一下,逐渐习惯了.^^ 05/22 22:21







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP