mud 板


LINE

看板 mud  RSS
首先,定义一个 mapping 资料 mapping attrib_data=([ "cri_rate" : "爆击机率提高 NUM%", "cri_dam" : "爆击伤害提高 NUM%", "hold_rate" : "击中有 NUM% 机率造成定身", "time_cure" : "每秒回复 NUM 点生命值", . . ]); 那麽令 keys_attrib = keys(attrib_data),就取得 cri_rate、cri_dam、.... 等等的属性。 则当我们用像是「监定」这类的指令,去监定一件武 防时,一般来说有几点要决定.. 一、这件武防,「哪些 attrib 不能给」。   例如说当我们判断到它是腰带类时,可能我们设   计是腰带没有爆率,那就做底下动作.. switch(type) { case "belt": keys_attrib-=({"cri_rate"}); 二、这件武防监定後要给几属 例如假设四属,然後机率性可以到六属、七属这   样,这个就依自己设定的风格来决定,假设得到   的值叫做 attrib_kind。 三、每一个属性的大小值配置 这个一般交给 switch 去做是最直觉的,例如 switch(attrib_name) ←──────────────────┐ { │ // 爆率: 1.0%~10.0%, 实际值用 10~100 代表       │ // 而且是 10,15,20,25,.... 这样的值而已 │ case "cri_rate":                     │ r = 2 + random(19); // 产生出 2,3,4,..,20 的随机值    │ r = r * 5; // 产生出 10,15,20,...,100 的随机值 │                                 │ attrib[attrib_name]=r; │                                 │ 那可以想像,其外包的回圈如下..               │                                 │ // 看几属                         │ for(i=0;i<attrib_kind;i++) │ { │ n=sizeof(keys_attrib);                  │ // 随机取得其中一属                   │ attrib_name = keys_attrib[random(n)]; │ // 马上将 attrib_name 自 keys_attrib 扣掉         │ keys_attrib-= ({attrib_name});              │                                 │ switch(attrib_name) 接上面─→──────────────┘ { . . 四、最後将属性设进防具中 假设该防具为 object ob,而上面我们每跑一个 switch,   就会做 attrib[attrib_name] = r 的动作,因此最後就是 ob->set("attrib",attrib); 就行了。 最後,我们要观看设定结果,例如... > view boots 慾望导航者 ─────────────────── 等级:63 护甲:334 型态:boots 售价:2257 属性:+76 力量 +40 智力 +51 毒素抗性 +55 全元素抗性 每秒回复 116 点生命值 爆击机率提高 3.5% +12% 移动速度 ─────────────────── 在属性部份的程式码就可以这样写.. msgs=({}); keys_attrib = keys((mapping)ob->query("attrib")); foreach(attrib_name in keys_attrib) { switch(attrib_name) { // 秒回 case "time_cure": attrib_desc=attrib_data["time_cure"]; r=(int)ob->query("attrib/time_cure"); attrib_desc=substr(attrib_desc,"NUM",""+r); msgs+=({attrib_desc}); break; // 爆率, 10 = 1.0%, 35 = 3.5%, 以此类推 case "cri_rate": attrib_desc=attrib_data["cri_rate"]; r = (int)ob->query("attrib/cri_rate"); attrib_desc=substr(attrib_desc,"NUM",""+(r/10)+"."+(r%10)+"%"); msgs+=({attrib_desc}); break; . . } } // 到这里就会得到 msgs msg+="属性:"+implode(msgs,"\n   ")+"\n"; 简单使用 implode 就可以显示出上面那一长串。 暗黑的设计则比上面多了几个特性 一、其属性的显示「有顺序性」   例如一定是 +力量、+智力 这些叙述先出现。这个只需 自己定义一个 sort_attrib 阵列就可以搞定。 二、多了镶洞的设定 但是这个一样可以使用 attrib_data 来实现,这里简单 讲解其中一种做法,例如 attrib_name 增加 "hole_1" 、"hole_2"、"hole_3" 这几种词。 则最先要做的,就是 hole_2 跑出的条件,一定是先有 hole_1、hole3 跑出的条件,一定是先有 hole_2。 再来,其「数值」一开始都是 0。0 就代表有洞,但是 没有插宝石。 然後 D3 有四种宝石,每种宝石假设有 10 种等级,也 就是说,我们就可以这样做 红宝石:代表数值 0~9 紫宝石:代表数值 10~19 黄宝石:代表数值 20~29 绿宝石:代表数值 30~39 这样就可以这样干 case "hole_1": // 先取得数值 r = (int)ob->query("attrib/hole_1"); if(r==0) msgs+=({"[○] 空的镶孔"}); else { switch(r/10) { case 0: msgs+=({"[镶着"HIR"红宝石"NOR"] +"+(((r%10)+1)*4)+" 力量"}); break; case 1: msgs+=({"[镶着"HIM"紫宝石"NOR"] +"+(((r%10)+1)*4)+" 体质"}); break; case 2: msgs+=({"[镶着"YEL"黄宝石"NOR"] +"+(((r%10)+1)*4)+" 智力"}); break; case 3: msgs+=({"[镶着"HIG"绿宝石"NOR"] +"+(((r%10)+1)*4)+" 敏捷"}); break; } } 这样在检视防具时就会看到如下的东西 属性:+76 力量 +40 智力 [镶着紫宝石] +40 体质 [○] 空的镶孔 而依防具或武器的不同部位,决定插宝石的效果的部份 则跟上面的做法大同小异,就是多个 switch 而已。 当然也可以在 attrib_data 里面这样定 "hole_1":"[镶着STONE] +NUM STAT", 这就代表要替换的目标就是 STONE、NUM 及 STAT,例如 以 35 这个数字来说,就各自代表「绿宝石」、「+24」 、「敏捷」这三个意义。 到这里,就可以完美模拟 D3 的「稀有」等级以下的装备。 传奇及套装则是另外的系统支援的,那个就蛮复杂的就不在 这边讲哩。 (但是概念是类似的) 总之,先定义好适合自己 mud 的 attrib_data,然後就可以 透过简单的 for、random 及 switch 的搭配,去实现高随机 配置武防的属性种类、数量及数值。 而一般来说通常是透过「监定」这道程序来实现,它的好处就 是可以在「玩家取得未监定防具」到「监定完毕」之间的时间 设置防机设定,例如.. > identify unidentified-armor * * * ****** * ***** * * * * * * * ***** * * ****** * * * * * * * ***** * * * ****** * 请回答上面的数字:6151 "当─!"物品监定完成。 设计玩家在取得未监定装备後「一段时间内」必须将装备监定 完毕,否则装备将失效;然後再透过上述的防机设计,来避免 机器人监定的情况出现,就可以达到防机效果。 Laechan@Sanc --



※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 42.66.251.237 (10/27 22:47)
1F:推 pssjim:有看有推 10/28 08:26
2F:推 PiGFAcE:我们也是这样做, 哈哈, 大推原po 10/31 00:18
3F:→ PiGFAcE:只是下面6151的那个方法 , 有巫师提议过本想用来防挂机, 10/31 00:18
4F:→ PiGFAcE:可是我觉得凭空冒出Ansi文字实在有点破坏游戏的包装了 10/31 00:18
5F:→ PiGFAcE:所以还在想更好的方法 10/31 00:18
6F:→ PiGFAcE:推!! 10/31 00:19
7F:→ laechan:可以用「监定码」的方式,比方请输入该防具上的监定码 10/31 07:16
8F:→ laechan:我目前的设计是玩家到手防具後一定时间内要监定完毕,所以 10/31 07:17
9F:→ laechan:还有另一种做法就是玩家必须拿去给 npc 监定,然後在路途上 10/31 07:17
10F:→ laechan:可以设定某关卡需输入数字码, 或者找该npc监定时需先回答 10/31 07:18
11F:→ laechan:数字码,这种型式是以「不给玩家监定指令」为前提. 10/31 07:18
12F:推 bonix:要怎麽把L大的文章下载到电脑啊? 01/08 21:10
13F:→ bonix:我的LPC语言能力实在跟不上L大的课程,但这些将来又很有学习 01/08 21:11
14F:→ bonix:意义。现在想自己写MUD,好多创意都不得其门而入 ~"~ 01/08 21:12







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

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

TOP