mud 板


LINE

看板 mud  RSS
tmi2_fluffos_v3_改,20140610 版本 http://sanclaechan.myweb.hinet.net/tmi2_fluffos_v3_modify.rar 建议下载并解压缩後目录位置为 D:\tmi2_fluffos_v3_改\ (底下以 tmi2_v3_改 简称) 这个版本做了更有效率的压缩,档案大小约 3MB 多。 WinXP 使用者,可直接双击 D:\tmi2_fluffos_v3_改\bin\启动 mud 捷径, 即可执行 mud。Win7 或 Win8 使用者,则务必先参考底下这篇: http://webptt.com/cn.aspx?n=bbs/mud/M.1399357070.A.366.html mud 启动成功後,目前确定以 pietty 连线 localhost 5000 (Telnet),可 连线成功: http://imgur.com/IQwusvX.jpg
在 tmi2_fluffos_v3_改\ 目录下会放一些图片及说明文件。 目前连线 telnet://210.61.157.53:5000 可连到以最新版本所架的测试站 ,有公频聊天指令可使用。 ================================================================== 本次修改范围: 2014/06/06~2014/06/09 一、实装 wear/remove 指令 移除 tmi2_v3 原先使用的 equip、unequip、wield、unwield 四个指 令,改成穿脱装备一律使用 wear 及 remove 指令。 (但是透过修改 /adm/etc/global_aliases,玩家还是能使用这四个指 令,只是它们会被导向 wear 及 remove) 装备是否被 wear 的参数也统一使用 "wear" 资料栏位。 还有一些细部的地方要修改,集中在 /std/armor.c 与 weapon.c。 二、实装 /adm/daemons/channeld.c 公频管理系统 这是仿 sanc 对公频的规划,而 sanc 是仿 tmi2 对 channels 的规 划(所以系出同源)。 这东西简单的说就是 user.c 的 cmd_hook 函数是管理玩家下了指令   後应呼叫什麽,在它里面加上这一段: if(verb=="chat" || verb=="rumor" || verb=="chatlog") return CHANNEL_D->find_channel(this_object(),verb,cmd); 那麽遇到玩家下 chat、rumor、chatlog 的场合就会让 channeld.c 呼叫 find_channel 函数去执行相对映的动作。 这样日後不管增加几个频道指令,都不会占用 /cmds/std 的指令数 量,而且方便管理各个公频。 三、确立 tmi2_v3_改 的 "stat" 属性栏位 这是可以日後修改的。 /include/stats.h 定义了 tmi2_v3_改 使用的六个属性。 /adm/daemons/newuserd.c 也设定新玩家会预载这六个属性。 /std/body/attack.c 也建立 query_stats、set_stats、add_stats 等函数,用来统一做为属性资料的存取函数。 /std/user.c 则尚未动到相关设定。 (玩家与 mob 皆共用相同的函数) 这样日後使用者想要修改 tmi2_v3_改 的属性时,只要更动上述四   个档案的对映内容即可,这是建立在「你的 mud 尚未正式开放给 玩家游戏」的前提。(已开放的 mud 要做更多修改是必然的) 例如说你希望你的 mud 没有 "mag" 栏位,然後以动 attack.c 为   例,它的做法就类似底下 int query_stats(string str) { if(str=="mag") str="int"; return data["stat"][str]; } 这样 tmi2_v3_改 原本读取 "mag" 的地方就通通会被导向为读取 "int",也就是说日後你只需要动相关的函数就行了。 四、实装新的战斗系统&普攻的部份 新增 /adm/simul_efun/attack.c 全域函数物件 它有几个与战斗系统有关的函数(而且视情况会再增加) cant_attack(object me,object tar) me 与 tar 能否进入战斗状态的总控管函数 damage_str(int hp,int damage) hp 指的是 tar 的剩余 hp,damage 指的是对 tar 的伤害。比    方 hp 剩 1000,而 damage 是 500,意思就是说这一击就造成    对方剩余血量「又少掉 50%」,然後它就会传回一个对这一击    的描述,如下的 running code: > running To end message type ".". To abort, type ~q. To view help, type ~h. __________________________________________________________________ write(damage_str(1000,500)+"\n"); . ========== 程式执行区 ========== 对$O造成身体机能严重的伤害! ========== 程式执行区 ========== 我应该会变更这个函数,把 damage 放前面 hp 放後面,并改用 varargs 宣告,这是方便使用者日後做修改。 defence_attack(object me,object tar,int dam,int hit) 这个函数就是 me 与 tar 在进行战斗时会呼叫的函数,用来处 理闪格挡的相关判断,并得到最终的伤害计算结果及相对映的讯    息等等。 目前我还没有写 sample 进去,之後我会写一个简易的 sample。 即便如此,使用者目前还是可以找 newbie 区域里面的小兔兔进    行战斗测试(只是讯息几乎都会是没有造成伤害这类的)。底下会    有 demo。 总之,闪格挡通通都是呼叫这个函数做统一处理。 notmal_attack(object me,mixed attackers,int n) 这个就是「普攻」的专门处理函数,也就是 continue_atttack 一般会持续呼叫的函数。 这个函数的运作过程很简单,它当然会先判断自己与该战斗的目    标们是否存在,存在的话: tar=attackers[0]; // tar=attackers[random(sizeof(attackers))]; 就选出一个 tar 来做为本次攻击的目标。选择的方法不外乎两    种:固定及乱数。tmi2_v3_改 预设为取 attackers[0]。 接着,就是呼叫 defence_attack(me,tar) 来做闪格挡方面的相    关判断并取得结果: // 先读取 defence_attack 的计算结果 // ({伤害, "闪格挡讯息"}) result=defence_attack(me,tar); 然後取得 me 本次攻击应击出的攻击叙述(空手, 拿武器, en..) // 每连击一次,就取得一次 me 的攻击讯息 msg=sprintf("%s,%s",me->query_attack_msg(),result[1]); 第一个 %s 就类似 "$N用砂锅大的拳头打向$O" (me->query_attack_msg()) 第二个 %s 就类似 "造成了巨大的伤害!" (result[1]) 最後将 msg 传给 show 做处理: show(me,tar,msg,result[0]); show 也是本次新增的全域函数,写在 tell_room.c 里头。 细部的说明可参看修改日志.txt。 ================================================================= 底下为 demo 的部份。 > chat *test 【闲聊】你笑道:『测试一下东东。』 > rumor *test 【谣言】你笑道:『测试一下东东。』 > rumor test 【谣言】你说道: test > chatlog (09:40) 某人 : test (09:40) 某人 : *test (09:40) Laechan : *test > i You are carrying 6 objects. (Total bulk: 0 Total weight 68) 新手地图(newbie map). 小短剑(short sword). 格斗匕首(fight dagger). 小布靴(boots). 小披风(cloak). 小布靴(boots). > data armor : ([ ]) armor_class : 0 damage : 0 hit_chance : 0 > wear all 你装备上小短剑(short sword). 已装备上 sword 就不会再去装备 dagger 你装备上小布靴(boots). 你装备上小披风(cloak). 你装备上小布靴(boots). <= 这有一点 bug 下次修正(实际上无装备) 你装备上所有的东西! > i You are carrying 6 objects. (Total bulk: 0 Total weight 68) 新手地图(newbie map). 小短剑(short sword) (已装备). 格斗匕首(fight dagger). 小布靴(boots) (已装备). 小披风(cloak) (已装备). 小布靴(boots). <= 实际上是没有装备的 > data armor : ([ "cape" : 30, "foot" : 15 ]) armor_class : 45 damage : 175 <= 装备武防後相关数值的更动情况 hit_chance : 350 > remove all 你卸下了小短剑(short sword). 你脱下了小布靴(boots). 你脱下了小披风(cloak). 你脱卸了所有的武防! > i You are carrying 6 objects. (Total bulk: 0 Total weight 68) 新手地图(newbie map). 小短剑(short sword). 格斗匕首(fight dagger). 小布靴(boots). 小披风(cloak). 小布靴(boots). > data armor : ([ ]) armor_class : 0 资料顺利归零 damage : 0 hit_chance : 0 > data stat : ([ "dex" : 11, "agi" : 11, "con" : 11, "int" : 11, "str" : 13, "mag" : 11 ]) > k rabbit 你对着小兔兔喝道: 「小王八蛋! 今日不是你死就是我活! 」 ☆☆☆ 战 斗 开 始 ☆☆☆ 你用砂锅大的拳头打向小兔兔,但是无关痛痒.. 小兔兔用砂锅大的拳头打向你,但是无关痛痒... 上面就代表 me 与 tar 在呼叫 continue_attack 的过程中是顺利的。 然後我 demo 两种攻击对象消失时的情况 > call rabbit;set;"hp";0 <= 1.将 rabbit 的血量变成 0 OBJ(小兔兔 /d/area/newbie/mob/rabbit1#14)-> set( "hp", 0 ) = 1 > You have died. <= 这一句是错的应显示为 rabbit has died. 以後会修正并中文化. ○○○ 这场战斗结束了! ○○○ 第二种 > k rabbit 你对着小兔兔喝道: 「小王八蛋! 今日不是你死就是我活! 」 ☆☆☆ 战 斗 开 始 ☆☆☆ 你用砂锅大的拳头打向小兔兔,但是无关痛痒... 小兔兔用砂锅大的拳头打向你,但是无关痛痒... > update here <= 2.将房间更新 /d/area/newbie/room/012: Updated and loaded. > ○○○ 这场战斗结束了! ○○○ continue_attack 会判断何时开始进入战斗,以及何时战斗消失。 今次最主要的修改就是将原本只需 me->kill_ob(tar) 的单方面呼 叫,修改为若 me 与 tar 要进入战斗,一定要 me->kill_ob(tar); tar->kill_ob(me); 它的好处就是有时候我们视情况会需要「打不还手的 mob」,这时 只需要 call me;kill_ob;目标 即可。(想要它还手就下 kill) 我规划 tmi2_v3_改 在战斗上至少有四种类技能: 1.基础技能(有些游戏称为被动技能) 2.enable 类技能 3.cast/spell 类技能=法术技能 4.force 类技能=特攻技能 未来它们都会有相对映的指令、物件以及函数,而且会参考 sanc 的发展经验,为相关的存取及运算做一下最佳化的配置,而且这些 技能也都会有 sample 档供设定参考。 技能会使用 "skill" 这个栏位,并有 query/add/set/del_skills 等栏位相关存取函数,但是特殊情况下会直接读栏位值。 (所以才说函数化不是万能的) 技能熟练度则会使用 "skill_exp" 栏位名称,技能熟练度的相关 存取函数则会使用 query/set/add/del_skill_exps 等名称。 下一次的改版会优先以虚拟物品系统的实装为主,并且应该会重写 monster.c 的 die 函数,让怪物可掉落虚拟物品。 laechan --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.61.157.53
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/mud/M.1402366361.A.1FB.html
1F:→ laechan :对了目前怪物的killer参数无效化状态 210.61.157.53 06/10 10:23
2F:→ laechan :虚拟物品系统已写好再来是掉落物系统 210.61.157.53 06/10 17:16
2014/06/10 20:40 updated Liao 你的讯息我有看到,装备武器 quit 会保留 damage 的问题, 只要修改 complete_setup 即会解决(我还没动这个函数)。 战斗离开原本区域,不会停止战斗的问题,是因为我没有把双方的 env 於现阶段加进判断的缘故,加进去就可以解决。 (现阶段你可使用巫师指令 halt 终止战斗) 虚拟物品系统及怪物掉落物系统皆已完工。 ※ 编辑: laechan (61.224.75.253), 06/10/2014 20:41:48
3F:→ laechan :今天嚐试intermud,不意外地..失败了 210.61.157.53 06/11 17:57
4F:→ laechan :嚐试了intermud的替代方案, 理论可行 61.224.75.253 06/11 21:46
5F:→ laechan :下一个版本要解决autoload不work问题 61.224.75.253 06/12 23:16
6F:→ laechan :autoload 会 work 了 210.61.157.53 06/13 15:47







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

请输入看板名称,例如:Boy-Girl站内搜寻

TOP