mud 板


LINE

看板 mud  RSS
我写了一个说明文的范例,写这个花了我至少一个小时以上,嘛.. 因为实际上需要写的东西其实也不可能太多,所以如果使用者可接 受这样的说明文件格式,我是可以花时间一一建立的,甚至将其网 页化(线上观看)或是 word 化(开放下载、列印)亦无不可。 (不过...13 页呢,我对写这个真的不太行,更不用说去啃了) 然後我发现一个问题就是,如果对 LPC 完全无基础,那基本上要 自由使用 tmi2_v3_改 是不可能的,以後我会增加一个建议就是要 使用 tmi2_v3_改 的人最好有 LPC 程式语言基础。 ========================================================== 系统名称: 虚拟物品系统 此系统与怪物掉落物系统共存 主要档案: /include/vobj.h /adm/daemons/vobjd.c 相关档案: /data/vobj.o /cmds/wiz/_vobj.c /cmds/std/_ob.c /std/vobj.c /include/vobj.h 虚拟物品的相关定义档,所有的定义都是以 VOBJ 开头 VOBJ_DEFAULT_??? 定义一些虚拟物品的预设项目,例如 #define VOBJ_DEFAULT_UNIT "个" 代表在设定一个虚拟物品时如果没有给单位(unit),其单位预设就是「个」 ,其它以此类推。 #define VOBJ_DEFAULT_NO_TRADE 0 #define VOBJ_DEFAULT_NO_SELL 0 NO_TRADE 预设为 0 的意思就是「可以 trade」。 NO_SELL 预设为 0 的意思就是「可以 sell」。 VOBJ_???_INDEX 定义虚拟物品资料串阵列各元素的位置 所谓虚拟物品的资料串阵列,类似底下 > call /adm/daemons/vobjd;vobj_data;"query_array";"兔牙" OBJ(/adm/daemons/vobjd)-> vobj_data( "query_array", "兔牙" ) = ({ "m002","兔牙", "个", "怪掉落", 501, 99, " 可 ", " 可 ", "一个兔牙,可向收集品商人购买。" }) 上面的 ({ }) 内的内容就是虚拟物品的资料串阵列。 #define VOBJ_MARK_INDEX 0 #define VOBJ_NAME_INDEX 1 MARK 的 INDEX 定义为 0,就代表阵列的第 0 个资料 "m002" 就是所谓的 MARK (编号)。 NAME 的 INDEX 定义为 1,就代表阵列的第 1 个资料 "兔牙" 就是所谓的 NAME (名称)。 其它以此类推。比方我们令 arrays = 该阵列,arrays[VOBJ_NAME_INDEX] 就是 arrays[1],也就是 "兔牙" 那个栏位,而这个栏位就是 NAME。 其它定义详见「怪物掉落物系统」。 /adm/daemons/vobjd.c 此系统档案是以 /adm/系统物件范例.txt 为原型所撰写,了解系统物件范 例档的内容,就能初步了解 vobjd.c 的架构。 mapping vobj_data=([]); 储存所有虚拟物品的资料变数,当这个变数有资料时,其资料分三层 vobj_data = ([ "标头" : ([ "编号" : ([ "name" : "物品名称", "unit" : "物品单位", "kind" : "物品种类", "long" : "物品描述", "value" : 物品价格, "carry" : 物品可携带量, "no_trade" : 能否交易, "no_sell" : 能否贩售, ]), ]), ]); 「标头」使用的是「编号」的第一个字母,假设 "兔牙" 这项虚拟物品的 编号是 "m002",标头就是 "m"。假设其价格为 501,其资料如下 vobj_data["m"]["m002"]["name"] = "兔牙" vobj_data["m"]["m002"]["value"] = 501 其它没有设定的资料就会套用「预设资料」,例如单位就是「个」,种类 就是「怪掉落」,可携带量就是「99」,其它以此类推,详见 vobj.h。 static mixed vobj_names; 在 vobjd.c 被系统载入时,create 函数首先会被呼叫,vobj_data 变数 资料会被载入,再之後就会对 vobj_names 变数资料做处理。 假设目前有两笔虚拟资料 vobj_data = ([ "m" : ([ "m001" : ([ "name" : "兔毛", "value" : 362 ]), "m002" : ([ "name" : "兔牙", "value" : 501 ]), ]), ]); 则 vobj_names 经过 create 函数处理後其资料内容就如下: 编号 名称 编号 名称 vobj_names = ({ "m001", "兔毛", "m002", "兔牙" }) 这个变数之所以存在、是因为大部份情况我们只需要读取一个虚拟物品编 号所对映的「名称」,因此对名称做特别的处理。 当呼叫 vobj_data 函数进行虚拟物品的增减或更名时,也会连带变更到这 个变数资料。 void create() 这个函数就是 vobjd.c 被载入时会呼叫的函数,它会做几件事 if(file_exists("/data/vobj.o")) restore_object("/data/vobj"); 当 /data/vobj.o 资料档存在时,就载入 /data/vobj.o 的内容。 if(!vobj_names) { mixed tmps=keys(vobj_data),tmps2=({}); string tmp,tmp2; vobj_names=({}); foreach(tmp in tmps) { tmps2=keys(vobj_data[tmp]); foreach(tmp2 in tmps2) vobj_names+=({tmp2,vobj_data[tmp][tmp2]["name"]}); 编号 名称 } } 它会去读每一笔虚拟物品的资料,然後把名字取出来,跟编号放在一起後 放进 vobj_names 里面,所以 vobj_names 的资料才会是编号, 名称, 编 号, 名称, ... int save_room() 当我们要储存 vobjd.c 的变数资料时,呼叫这个函数即可进行储存。 mixed query_vobj_names() 回传 vobj_names 的内容。 void set_ob_data(string keyname,string tmp) 这主要是 wiz 指令 vobj -set 时会呼叫的函数 > vobj -set 兔毛;m001;个;怪掉落;一个兔毛。;362;99;0;0 当 wiz 下这个指令时 keyname = "兔毛" tmp = "兔毛;m001;个;怪掉落;一个兔毛。;362;99;0;0" 然後 set_ob_data 就会对 tmp 做底下动作 tmps = explode(tmp, ";"); // 对 ";" 号进行拆解 接着就将拆解的资料一一设进 vobj_data["m"]["m001"] 里头,比方 vobj_data["m"]["m001"]["name"] = "兔毛" vobj_data["m"]["m001"]["value"] = 362 . . varargs mixed vobj_data(string key1,string key2,mixed vars) 函数名 vobj_data 与变数名 vobj_data 是可以并存的。 只要是参考 /adm/系统物件范例.txt 档写成的系统物件,其参数格式都 类似上面,有 key1、key2,以及 vars。 key1 一般指「功能项」,比方 vobj_data("query", ..) 一般就是用来读取 vobj_data 的资料 vobj_data("set", ..) 一般就是用来设定 vobj_data 的资料 vobj_data("del", ..) 一般就是用来删除 vobj_data 的资料 所以一开始一定会看到针对 key1 所做的 switch: switch(key1) { case "query": . . key2 一般就是指当你使用 query/set/del 等功能时要存取的目标。 vars 则用来放「其它你想带过来给 vobj_data 函数的参数」。 void vobj_list() 当 wiz 下指令 vobj -list 时会呼叫这个函数,其内容就是做虚拟物品 资料的相关列表。 void vobj_export() 当 wiz 下指令 vobj -export 时会呼叫这个函数,其内容就是汇出所有 虚拟物品的设定资料。 其它可参考怪物掉落物系统说明。 /data/vobj.o /adm/daemons/vobjd.c 的资料储存档。 /cmds/wiz/_vobj.c 请参考「指令」目录的关於 vobj 指令的说明。下指令 vobj 亦可看到 基本的指令说明。 操作这个指令可对 /adm/daemons/vobjd.c 档案进行资料的存取。 /cmds/std/_ob.c 请参考「指令」目录的关於 ob 指令的说明。下指令 ob ? 亦可看到基 本的指令说明。 /std/vobj.c 这个物件用於 ob view 时,ob view 会将欲观看的虚拟物品之资料,暂 时 set 到一个 clone 出来的 /std/vobj.c 物件里头,再送至 _view.c 指令的 view_object 函数,藉由该函数处理虚拟物品资料的观看。 详见「指令」目录的关於 view 指令的说明。 laechan@sanc 2014/06/14 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.253.166.191
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/mud/M.1402747550.A.E98.html ※ 编辑: laechan (111.253.166.191), 06/14/2014 20:15:31 ※ 编辑: laechan (111.253.166.191), 06/14/2014 20:17:15
1F:推 tenyfish :好强大 推 1.162.184.31 06/14 21:06
2F:推 tenyfish :优先对於比较特别的系统吧,不然太多 1.162.184.31 06/14 21:23
3F:→ laechan :ok应该下次释出的版本会包含这些说明111.253.166.191 06/14 21:44
其实重点是你看了这些说明後对 vobjd.c 是不是就了解了。 如果你能藉说明了解了 vobjd.c,那理论上我後续写的说明 你也能藉着阅读它们去了解其它的系统,重要的系统及修改 我会优先撰写。 然後我是希望能透过 tmi2 频道的互通,有些问题就可直接 问、心得也可直接交流。 ※ 编辑: laechan (111.253.166.191), 06/14/2014 21:46:51







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灯, 水草

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

TOP