mud_sanc 板


LINE

我大致思考了一下可行的做法。 首先,假设有 achieve 指令,则必然有 achieve list 这样的东西 来显示现在共有哪些成就。 则比较简易的做法就是宣告一个 mapping mapping achieve=([ "a001":(["title":"徒步走到泰帕依城", . . ]), ]); 但是因为成就系统需要储存的东西其实不多,而且还要兼顾顺序性 ,而且 title 可另外存到 chinesed.c 里头,而且还要做分类, 因此可改成 mixed.. mapping achieve=([ "area":({ // 徒步走到泰帕依城 ({"a001",......}), // 徒步走到试链窟第10层 ({"a002",......}), }), "skill":({ // n个技能达到9900 ({"a003",......}), }), ]); 但是考虑到以後,这东西不能用「宣告」的,而必须写指令让 wiz 操作来增删及修改资料,但大致的资料结构是这样没错。 那麽指令的格式就类似底下 > achieve add area call laechan_area_func var 走到泰帕依城 你设定达成编号 a001 成就时会呼叫 laechan_area_func() 函数 上面的指令将把底下的资料设定加到 achieve["area"] 里头: ({"a001","laechan_area_func","走到泰帕依城","设定时间"}) 其中 a001 是由 achieve 指令依目前 aXXX 的指派状况来指配的, 这样 wiz 就不用担心目前已经用到 a 多少,而它属於 a 多少也不 是重点,只要知道会有一个编号指向它即可。 使用二维阵列的好处也方便做排序,例如 list area 时它会依现有 的顺序列表,类似 note list,而 note 就是采可排序的写法。 那麽 achieve del 的情况呢,只要给编号即可,这时该编号就会空 出来,当 wiz 新增新的成就时,该编号就有可能被指配进去。 那要如何判断这个新编号指的是一个新的成就呢?依靠的就是上面 的「设定时间」,用这个参数来判断该成就有没有被重新 assign 过,若有被重新 assign 过,玩家在获得该成就前会先被删除曾达 成该成就的标记。(也就是利用 quest 里头的 date 参数) 那麽 laechan_area_func 及 "走到泰帕依城" 又是什麽呢,它的 意思就类似底下: int laechan_area_func(object ppl_names,string marks,string titles,string times) { // 先判断玩家有没有旧标记资料 // 每一个 wiz 自订函数都必须先呼叫这一行 check_times(ppl_names,marks,times); // 再来就能依 str 开始写自订成就报酬 switch(titles) { case "走到泰帕依城": . . // 呼叫范例 questing("set",ppl_names,marks,({"times",1})); questing("set",ppl_names,marks,({"date",times})); break; } // 最後一定 return 1 return 1; } 以这样的写法,wiz 就不需要管说该成就是哪一个 aXXX,因为 有自订描述该成就的 titles。 而 title_name 全域函数,则会去 achieve.c 里头找说 aXXX 这个成就的 titles 是什麽。 (这样就不需要 chinese a001=achieve=走到泰帕依城) 所以由上可知,需要一个 _achieve.c 函数以及 achieve.c 物 件来存 achieve.o 资料档,就能弄出成就系统的雏型,剩下的 就由各 wiz 依自己的需要来撰写函数,再让 achieve.c 来做 inherit 即可,比方在 /open/cmds/achieve 目录下可能有 /open/cmds/achieve: achieve.c achieve.o sample.c laechan.c ↓ ↑ ^^^^^^^^^ wiz 自己建的 让它 inherit laechan.c 各自建档需共同 inherit 的 像我就可以在 laechan.c(inherit sample.c) 里面自己写所需 的各函数例如 laechan_area_func、laechan_skill_func 等。 而 sample.c 则提供像是 check_times 这类的共通函数,甚至 可提供其它方便函数例如「叫出未监定防具并直接监定」「给 玩家物品顺便设定认主」...... 也就是说先在 laechan.c 写好 switch 判断,再去对映的地方 写好判断函数(例如徒步走到泰帕依城需要修改区域房间),再用 achieve 指令设定成就....这样该成就就新增完成。 上面只有一个问题:为了新增「徒步走到泰帕依城」这个成就, 就一定得去修改区域房间吗? 只有这个我到现在还没有答案。「不必修改区域房间」的走向 则是确定的,为此就必须有玩家曾经到过某房间的额外判断方 式,而且不能造成系统过大的负担,还必须适用新型态区域的 房间产生方式。 LAechan --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.61.157.53
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1446092674.A.539.html







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

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

TOP