mud 板


LINE

看板 mud  RSS
网页好读版: http://webptt.com/cn.aspx?n=bbs/mud/M.1403512062.A.D9C.html tmi2_fluffos_v3_改,20140623 版本 http://sanclaechan.myweb.hinet.net/tmi2_fluffos_v3_modify.rar 建议下载并解压缩後目录位置为 D:\tmi2_fluffos_v3_改\ (底下以 tmi2_v3_改 简称) 新旧目录之间资料的替换主要以底下目录为主 1./data 2./u <= 比方你已经有建立自己的使用者目录了 3./doc <= 比方你已经有新增一些说明文件了 比方你已经有在前一版本的 tmi2_v3_改 用 vobj 指令设定了一些虚拟物 品了,那只要把前一版本的 /data 目录的 vobj.o 拿来盖掉新的 vobj.o ,这样旧版本的 tmi2_v3_改 的虚拟物品资料就能移植到新的版本。 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_改\ 目录下会放一些图片及说明文件。 管理者帐号预设为 mudadm,密码 mudadm,只允许本机端登入,无法远端登 入。欲新增管理者帐号,请依序做底下动作 1.修改 /adm/etc/groups 档,将欲新增的管理者帐号加到 (admin) 群组 2.修改 /include/config.h 档,确定 #define AUTO_WIZHOOD 没有 // 掉 3.启动 mud,然後创建一个步骤 1 所指定的管理者帐号角色 4.角色创完後 save quit,然後关闭 mud 5.再修改 /include/config.h 档,将 #define AUTO_WIZHOOD 给 // 掉 6.再重新启动 mud 7.此时再登入你的管理者角色帐号,此帐号就具有管理者权限 目前连线 telnet://210.61.157.53:5000 可连到以最新版本所架的测试站 ,有公频聊天指令可使用,也有远端频道指令 tmi2 可使用,使用前 mail 给 [email protected] 提出申请,信件内容需有: 1.你所架的站台 ip 及 port 2.你所架的站台之名称(若没有这个名称会内定为 XXX's PC ================================================================== 本次修改范围:20140619~20140623 一、新增群式怪物继承档 GMONSTER = /std/gmonster.c 对群式怪物的描述采用 sanc 的描述,但是程式架构不采用 sanc 的 架构(因为作者不是我),gmonster.c 基本上 inherit monster.c, 但是自订底下函数 void init(); 怪物被触发时的函数 string query_short(); 读取怪物 short 名称的函数 int query_points(string str); 读取怪物 hp/sp/.. 的函数 int receive_damage(int damage); 怪物损血时呼叫的函数 群式怪物不需 set("short"),但需 set("member") 即只数。 群式怪物档案可参考 /d/area/newbie/mob/bear1.c 群式怪物的 script_mob 档可参考 /d/area/redant/script_mob 底下会有群式怪物的相关 demo。 二、修改 /adm/simul_efun/base_name.c,新增 explode_base_name 全 域函数 base_name(ob) = "/d/area/newbie/room/001" ↓ 则 └────────┐                          ↓ explode_base_name(base_name(ob)) = "/d/area/newbie/room*001" 也就是最後一个 / 会被替换为 *,这样就容易对这样的字串做目录   与档名的拆解。 三、/cmds/std/_help.c 指令档再补强 增加「虚拟目录」以及相关指令功能: 数字 : 进入一个目录或观看一个说明档案 0 或 < : 回上一层 q : 离开 底下指令只有 wiz 可以使用 add 数字 : 将某一项目还原 name 数字 = 名称 : 将某一项目取新的名称 virtual *目录 = 名称 : 新增一虚拟目录 link 数字a to 数字b : 将 a link 到 b 这个虚拟目录 unlink 数字a : 取消 a 的 link data : 显示所在目录有哪些设定资料 del 数字 : 将某一项目遮蔽不显示或删除一虚拟目录 底下会有 demo。 四、修改 /cmds/object/_update.c 增加两种指令语法 update -n 数字a-数字b 比方对 001.c~400.c 这个范围做 update,就是 update -n 1-400 (这个语法还存在改版的空间,下一次再改版,它会更方便) update -p 它可以对整个目录的 .c 档做 update。 五、新增 /cmds/std/_betla.c,线上赌盘指令 直接下载 sanc 由我写的指令,连同 /open/betla 也一起下载。 底下会有 demo。 六、新增 tmi2_v3_改 专用的地图系统 这个系统最重要的功能是做地图的共享,这个往後的改版会有更进 一步的说明。   修改日志则有提到要新增这个系统需要新增及更动哪些东西,使用   者可参考修改日志档,这里不做赘述(因为很长)。 底下会有 demo。 七、修改 /adm/simul_efun/attack.c 的 defence_attack 函数 增加如何写盾挡及武器招架的程式段范例。 底下会有 demo。 八、其它修改 修正 !指令 、 数字 !指令 等上一次版本有 bug 的部份。 修改 /std/user.c 的 complete_setup 函数,对每一个登入的玩家 做部份数值初始化的工作。 修改 /adm/simul_efun/adminp.c,新增 wiz_lv 函数,可简易判断 一个使用者 id 是不是 wiz,是的话就会传回 >0 的数值。 (使用者可用 running code: write(wiz_lv("随便一个id")) 去看 新增 /cmds/std/_who2.c、_guild2.c,供使用者写指令时参考。 新增 /d/area/redant 区域目录,即 sanc 的「炙蚁地狱」区域 修改 /include/mudlib.h 全域定义档,於最底下新增更多的定义 ================================================================= demo 区 > l [/d/area/redant/180 ] 炙蚁地穴-第二层 这座洞穴长年栖息着巨大的蚁类,嘎吱嘎吱的走动声音不时从洞 穴的深处传来,生活在这里的炙蚁,其酸液据说是珍贵的药材! 明显出口有: east 和 west. 工炙蚁群(worker redants) [10群工炙蚁] > data redants id : ({ "worker redants", "redants", "monster" }) member : 10 <- 只数 short : "@@query_short" <- 此时会读取 query_short 函数去产生 unit : "群工炙蚁" <- unit 跟一般怪物的设定不太一样 一般怪物顶多设 "只", "位", .. 现在所有新式区域产生的怪物会自动带的怪物 id 是 "monster" ,这个 id 定义在 /include/mudlib.h 的最底下。 上面各颜色则对映其作用的位置。 > wear all 你装备上小盾牌(shield). 你装备上格斗匕首(fight dagger). 你装备上所有的东西! > k redants 你对着工炙蚁群喝道: 「小王八蛋! 今日不是你死就是我活! 」 ☆☆☆ 战 斗 开 始 ☆☆☆ 你手握格斗匕首刺向工炙蚁群,造成结实的伤害!(170) 工炙蚁群用酸液喷向你,但是被你以小盾牌挡开了! <= 盾挡成功判断到的讯息 你手握格斗匕首戳向工炙蚁群,造成结实的伤害!(170) 工炙蚁群猛烈地攻击你,但是无关痛痒... <= 闪格挡没有成功 你手握格斗匕首刺向工炙蚁群,造成结实的伤害!(170) 工炙蚁群用酸液喷向你,但是被你以格斗匕首格开了! <= 武器招架成功判断到的讯息 . . 你手握格斗匕首捅向工炙蚁群,造成结实的伤害!(170) 工炙蚁群 死掉了 1 群工炙蚁! <= 开始死第一只 . . 工炙蚁群猛烈地攻击你,但是被你以小盾牌挡开了 你手握格斗匕首捅向工炙蚁群,造成结实的伤害!(170) 工炙蚁群 死掉了 1 群工炙蚁! <= 死第九只了 工炙蚁群用酸液喷向你,但是无关痛痒... 你手握格斗匕首刺向工炙蚁群,造成结实的伤害!(170) 工炙蚁群 死掉了 1 群工炙蚁! <= 第十只阵亡 工炙蚁群 全体阵亡了。 这时就全体阵亡 工炙蚁群(worker redants)发出一声惨叫!! 工炙蚁群(worker redants)慢慢的倒在地上...死了! ○○○ 这场战斗结束了! ○○○ 如果四个人围殴「这只怪物」,那麽在上面 10 只的死掉过程中, 就可以实现: 玩家A 打死了 3 只 玩家B 打死了 4 只 玩家C 打死了 2 只 玩家D 打死了 1 只 ======================================================================== explode_base_name 的好处可以用底下的 running code 说明 tmp=base_name(environment(me)); write("explode 前: "+tmp+"\n"); tmp=explode_base_name(tmp); write("explode 後: "+tmp+"\n"); // 第一种方式: 用 explode, 以 "*" 为分隔字 obs=explode(tmp,"*"); write("目录: "+obs[0]+", 档名: "+obs[1]+"\n"); // 第二种方式: 用 strsrch, 找出 "*" 在字串里的位置 i=strsrch(tmp,"*"); j=strlen(tmp); write("目录: "+tmp[0..i-1]+", 档名: "+tmp[i+1..j-1]+"\n"); ========== 程式执行区 ========== explode 前: /d/area/redant/313 explode 後: /d/area/redant*313 目录: /d/area/redant, 档名: 313 目录: /d/area/redant, 档名: 313 <= 两种做法都能得到相同结果 ========== 程式执行区 ========== 传统上要取出目录及档名要用 while 去做,现在有 explode_base_name 就方便很多,使用者可依需要看是要用 explode 的方式或 strsrch 的 方式分解出目录及档名皆可。 ================================================================ 再来是 help 的 demo。我已经先建立 /doc/skill 目录,并且从 sanc 下载了一些技能说明档。 > ls /doc/skill Path: [/doc/skill] 1 adventure_heart 1 counter 1 parry 1 backstab 1 dagger 1 return_spell 1 barefist 1 daggermaster 1 shield 1 blade_heart 1 dodge 1 thunder_spell 1 blizzard 1 egingin 1 watershield 1 bousou 1 fighter_heart > help [/doc/] 1.README 2.[concepts] 3.[daemons] 4.[driverdoc] 5.[emote] 6.[etc] 7.[functions] 8.[help] 9.[lpc] 10.[mudlib] 11.[properties] 12.[skill] 13.[wizhelp] 14.备忘 15.回上一层. 请输入: 首先,可以把 12 那一项改名为 技能 请输入: name 12 = 技能 skill 已更名为 技能. [/doc/] 1.README 2.[concepts] 3.[daemons] 4.[driverdoc] 5.[emote] 6.[etc] 7.[functions] 8.[help] 9.[lpc] 10.[mudlib] 11.[properties] 12.[技能] 13.[wizhelp] 14.备忘 15.回上一层. 请输入: 然後进入 12 请输入: 12 [/doc/skill/] 1.adventure_heart 2.backstab 3.barefist 4.blade_heart 5.blizzard 6.bousou 7.counter 8.dagger 9.daggermaster 10.dodge 11.egingin 12.fighter_heart 13.parry 14.return_spell 15.shield 16.thunder_spell 17.watershield 18.回上一层. 请输入: 从上面可以看出技能其实有冒险者的、有盗贼的、有战士的、有骑士的 ......通通都放在同一个目录。这时就可以建虚拟目录,例如说先来建 一个冒险者的: 请输入: virtual *adventure = 冒险者(adventure) 虚拟目录 冒险者(adventure) 已新增. [/doc/skill/] 1.[冒险者(adventure)] 2.adventure_heart 3.backstab 4.barefist 5.blade_heart 6.blizzard 7.bousou 8.counter 9.dagger 10.daggermaster 11.dodge 12.egingin 13.fighter_heart 14.parry 15.return_spell 16.shield 17.thunder_spell 18.watershield 19.回上一层. 请输入: 虚拟目录的 *adventure 的 * 就是虚拟目录的标头,有 * 就是虚拟目 录,没有 * 就不是。 接下来,就可以把 adventure_heart、barefist、dodge、parry、 shield 这五个技能 "link" 到 1.[冒险者(adventure)]: 请输入: link 2 to 1 已将文件 adventure_heart link 到 冒险者(adventure) 中了. 请输入: link 3 to 1 已将文件 barefist link 到 冒险者(adventure) 中了. . . 请输入: link 12 to 1 已将文件 shield link 到 冒险者(adventure) 中了. [/doc/skill/] 1.[冒险者(adventure)] 2.backstab 3.blade_heart 4.blizzard 5.bousou 6.counter 7.dagger 8.daggermaster 9.egingin 10.fighter_heart 11.return_spell 12.thunder_spell 13.watershield 14.回上一层. 请输入: 然後我们进 1.[冒险者(adventure)] 去看 请输入: 1 [/doc/skill/*adventure/] 1.adventure_heart 2.barefist 3.dodge 4.parry 5.shield 6.回上一层. 请输入: 同样的,上面的东西也可以命名,例如把 1 命名成冒险者之心 请输入: name 1 = 冒险者之心 adventure_heart 已更名为 冒险者之心. [/doc/skill/*adventure/] 1.冒险者之心 2.barefist 3.dodge 4.parry 5.shield 6.回上一层. 请输入: 然後看一下 1 这个档案在说些什麽 请输入: 1 冒险者之心(Adventure heart) 这是个冒险者公会的技能,使用後可以让新手冒险者更有勇气及 能力去面对未来将会碰上的事件及怪物,虽然帮助有限,但对初 期的冒险者来说,这是非常有用的。 *使用方式:heart adventure。  指令 a 及 score l 可观看使用後的影响。 请按 enter 键继续... [/doc/skill/*adventure/] 1.冒险者之心 2.barefist 3.dodge 4.parry 5.shield 6.回上一层. 请输入: 也可以解除某一个档案的 link 请输入: unlink 2 你解除了 barefist 的 link 设定. [/doc/skill/*adventure/] 1.冒险者之心 2.dodge 3.parry 4.shield 5.回上一层. 按 < 就能返回上一层: 请输入: < [/doc/skill/] 1.[冒险者(adventure)] 2.backstab 3.barefist 4.blade_heart 5.blizzard 6.bousou 7.counter 8.dagger 9.daggermaster 10.egingin 11.fighter_heart 12.return_spell 13.thunder_spell 14.watershield 15.回上一层. 请输入: 可以看见 barefist 已经是未 link 状态。 然後如果把 1. 那个虚拟目录整个删掉,就会变成如下: 请输入: del 1 *adventure 已删除. [/doc/skill/] 1.adventure_heart 2.backstab 3.barefist 4.blade_heart 5.blizzard 6.bousou 7.counter 8.dagger 9.daggermaster 10.dodge 11.egingin 12.fighter_heart 13.parry 14.return_spell 15.shield 16.thunder_spell 17.watershield 18.回上一层. 请输入: 所有曾被 link 到 虚拟目录 的档名就会回到未 link 状态。 这样就能实现树状型式的输入型 help 功能,而且管理者也能透过 选单功能快速建立树状架构。 这东西比 sanc 现用的 help 及未完全开放的 xhelp 功能更强。 ========================================================== 线上赌盘指令如下: > betla 现有赌盘: ======================================================================== ======================================================================== betla [赌盘编号] 即可参与线上投注,请参阅 betla 指令说明。 到 /open/betla 目录下随便读入一个 betla 档 > cd /open/betla /open/betla > ls Path: [/open/betla] 1 20111114_5 1 20130413_1 1 betla.c 1 r1 1 20130410_1 1 20130415_1 1 betla_ex realtime/ 1 20130410_2 baseball/ 1 laechan tseng/ 1 20130411_1 1 betla polite/ wang/ > betla readfile 20130415_1 欲开赌盘:北韩20130414(日)发射飞弹 金额设定:每注 3000 影特币 封盘时间:600 分钟後 赌盘项目:会打美国      会打韩国      会打日本      会打其它(例如只射向东海)      不会射      其它可能      赞助赌盘 << 你赞助了 9999 注 >> 确定请按 Y or y: Y 跟 more 该档的结果对照 > more 20130415_1 北韩20130414(日)发射飞弹 <= 赌盘标题 3000 <= 每注多少 600 <= 封盘时间设定在「几分钟後」 add:9999 <= 官方赞助多少注 会打美国 <= 赌盘选项1 会打韩国 <= 2 会打日本 <= 3 会打其它(例如只射向东海) <= 4 不会射 <= 5 其它可能 <= 6 赞助赌盘 <= 最後一项预设为赞助赌盘 > betla 现有赌盘: ======================================================================== 1. 北韩20130414(日)发射飞弹 封盘时间:2014/06/24 02:02 ======================================================================== betla [赌盘编号] 即可参与线上投注,请参阅 betla 指令说明。 > betla 1 赌盘:北韩20130414(日)发射飞弹 每注:3000 影特币 ====================================================================== 1.会打美国 0 注(赔率:0.000000) 2.会打韩国 0 注(赔率:0.000000) 3.会打日本 0 注(赔率:0.000000) 4.会打其它(例如只射向东海) 0 注(赔率:0.000000) 5.不会射 0 注(赔率:0.000000) 6.其它可能 0 注(赔率:0.000000) 7.赞助赌盘 9999 注(赔率:1.000000) (你已下 9999 注) ====================================================================== 指令语法:betla [赌盘编号] [赌盘项目] [下注数]. 比方我们下注 1 > betla 1 1 1000 betla: 下注完毕. > betla 1 赌盘:北韩20130414(日)发射飞弹 每注:3000 影特币 ====================================================================== 1.会打美国 1000 注(赔率:10.999000) (你已下 1001 注) 2.会打韩国 0 注(赔率:0.000000) 3.会打日本 0 注(赔率:0.000000) 4.会打其它(例如只射向东海) 0 注(赔率:0.000000) 5.不会射 0 注(赔率:0.000000) 6.其它可能 0 注(赔率:0.000000) 7.赞助赌盘 9999 注(赔率:1.100010) (你已下 9999 注) ====================================================================== 指令语法:betla [赌盘编号] [赌盘项目] [下注数]. 然後假设我们要手动封盘(时间到它也会自动封盘)并开奖: > betla set 1 1.赌盘:北韩20130414(日)发射飞弹(1 to [新标题]) 2.赌项:共 7 个(2 [n] to [新名称]) ({ "会打美国", "会打韩国", "会打日本", "会打其它(例如只射向东海)", "不会射", "其它可能", "赞助赌盘" }) 3.每注:3000 影特币(3 to [n]) 4.开放/暂停/取消该赌盘(4 to start/stop/halt) (附注:4 to halt 可以补发奖金给未领取的人。) 5.设定中奖项目及开奖(5 to [n]) 6.线上公告赌盘(6 to shout) =================================================== 请输入(直接按[ENTER]为离开设定):4 to stop betla: 你暂停了该赌盘的下注. 请输入(直接按[ENTER]为离开设定):5 to 1 赌盘:北韩20130414(日)发射飞弹 项目:会打美国 你决定开这个奖项吗(y/n):y 【赌盘系统】北韩20130414(日)发射飞弹 【赌盘系统】本赌盘开 1. 会打美国 【赌盘系统】赔率 10.999000,每一注可得 32997 影特币. 【赌盘系统】你下注了第 1 个项目,赢得赌金 33029996 影特币! 【赌盘系统】赢得了赌盘使你的赌技有所增长! 【赌盘系统】laechan 买了 1001 注赢得赌金 33029996 影特币! 剩余未领奖人员: 我曾用这指令在 sanc 开过金曲奖、金马奖相关赌盘,而且是边看 转播边开赌盘,它的做法就是先把赌盘脚本档编好,如下 > ls /open/betla/realtime/2013金曲奖 Path: [/open/betla/realtime/2013金曲奖] 1 台语女歌手 1 作词人 1 原住民语歌手 1 单曲制作人 1 台语男歌手 1 客语专辑 1 国语女歌手 1 新人 1 台语专辑 1 客语歌手 1 国语男歌手 1 演唱组合 1 年度歌曲 1 音乐录影带 1 国语专辑 1 乐团 1 作曲人 1 原住民语专辑 1 专辑制作人 1 编曲人 > more /open/betla/realtime/2013金曲奖/国语女歌手 2013金曲奖─最佳国语女歌手奖 5000 300 add:9999 卢凯彤/你安安静静地躲起来 邓紫棋/第四张专辑 Xposed曝光 林忆莲/盖亚 家家 /忘不记 徐佳莹/理想人生 蔡依林/MUSE 从缺 赞助赌盘 这样当电视直播到要开始颁最佳国语女歌手了时,就马上把该赌盘 readfile 进来,然後就可以等颁奖结果揭晓,就再用 betla set 设定要开哪一项目,马上就能开出赌盘。 /open/betla 下有 sanc 开过的所有赌盘,使用者可参考。 =========================================================== 新式地图系统如下 首先在 /d/area/redant 目录下下这三个指令(要分开下) trans map1 to /d/area/redant by script_room trans map2 to /d/area/redant by script_room trans map3 to /d/area/redant by script_room 上面三个指令可依三张数字图各自产生出对映的房间,三个区域的 范围如下: map1: 001.c~177.c map2: 178.c~331.c map3: 332.c~475.c 只要 more map1, map2, map3 就可知道其范围,而 map1x、map2x 、map3x 就是其 x-x 图。 这个区域共三层,map1、map2、map3 就代表第一、二、三层。 接着,就以 map 指令设定这三层地图的资料: 目录 层 起 迄 x-x地图档 > map -set redant 1 = 1,177,map1x map_data[redant][0]=({ 1, 177, ({ }), "map1x" }) 资料设定 ok. > map -set redant 2 = 178,331,map2x map_data[redant][1]=({ 178, 331, ({ }), "map2x" }) 资料设定 ok. > map -set redant 3 = 332,475,map3x map_data[redant][2]=({ 332, 475, ({ }), "map3x" }) 资料设定 ok. 上面应该不难理解。如果只有一层(如 /d/area/01/01) 那当然就 只需要一行,然後给个起迄范围及 x-x 地图是哪一个档即可。 接着设定出口资料,根据 /d/area/redant/area_room.c // 这里则可以针对房间号码变更出口设定 // 依房间号码来设定连接上下层的例子 if(n==152 && !query("exits/down")) set("exits/down",__DIR__+"313"); if(n==313 && !query("exits/up")) set("exits/up",__DIR__+"152"); if(n==210 && !query("exits/down")) set("exits/down",__DIR__+"370"); if(n==370 && !query("exits/up")) set("exits/up",__DIR__+"210"); (这里就是一个透过 area_room.c 做集中管理的例子) 我设定第一层的出口是 001 之外还有 152,第二层 210 及 313 ,第三层为 370,也就是说 第一层 入口001───152 │ 第二层 210───313 │ 第三层 370 大概是这样的关系,这时指令就可以这样下 > map -exits redant 1 = 1,152 map_data[redant][0]=({ 1, 177, ({ 1, 152 }), "map1x" }) 设定完成. > map -exits redant 2 = 210,313 map_data[redant][1]=({ 178, 331, ({ 210, 313 }), "map2x" }) 设定完成. > map -exits redant 3 = 370 map_data[redant][2]=({ 332, 475, ({ 370 }), "map3x" }) 设定完成. 接着还可以再为各层命名,指令这样下 > map -name redant 1 = 炙蚁地狱第一层 map_data[redant][0]=({ 1, 177,({1,152}),"map1x","炙蚁地狱第一层"}) 设定完成. > map -name redant 2 = 炙蚁地狱第二层 map_data[redant][1]=({ 178, 331,({210,313}),"map2x","炙蚁地狱第二层"}) 设定完成. > map -name redant 3 = 炙蚁地狱第三层 map_data[redant][2]=({ 332, 475,({ 370 }),"map3x","炙蚁地狱第三层"}) 设定完成. 这样设定就结束了,流程就是: trans产生房间→map -set 设定基本资料→map -exits 设出口→map -name 设名字 然後就能使用 map 指令了,先 goto 到 /d/area/redant/001 区域入口。 > goto 001 [/d/area/redant/001 ] 炙蚁地穴-第一层 越往洞穴的深处走,你越觉得燥热难当,在这个狭窄的地方遇上 魔物的话,在战斗上极为不利,生活在这里的炙蚁,其酸液据说 是珍贵的药材! 明显出口有: south 和 east. 兵炙蚁群(soldier redants) [10群兵炙蚁] > map                                  │                                        > 由上图可知入口在区域的左上角。接着往东走两格看看 > run 2e 炙蚁地穴-第一层 明显出口有: south, east, 和 west. 黑炙蚁群(black redants) [10群黑炙蚁] 工炙蚁群(worker redants) [10群工炙蚁] 炙蚁地穴-第一层 明显出口有: south, east, 和 west. > map                              │ │ │                               口 口                                                                          > 上面包含了三种东西 1.你走了多少范围,就显示多少范围的地图出来 2.区域的出口会以 标示                        自己则以 标示 房间则以 标示 路线则以 ─ │ 标示 3.它不只显示你走过的房间,连相邻的房间也显示 wiz 如果下 map here 则会看到全图: > map here ─口──口 口─口─口─口─口─口 口 口     口─口─口 口 │ │ │ │   │ │   │ │ │ │     │   │ │ 口 口─口─口─口─口 口─口─口─口─口─口─口─口 口─口 口─口 │ │ │ │   │ │ │       │     │ 口─口 口─口─口─口 口─口─口─口 口─口─口─口─口─口─口─口─口     │ │     │   │ │ │ │ │ │ │   │ 口─口─口─口─口─口─口 口─口─口 口─口─口 口 口─口 口─口 口─口 │ │ │ │ │ │ │ │ │ │     │ │ │   │   │ │ 口─口─口 口─口─口─口─口─口─口     口─口 口 口─口─口─口 口                   │                   │ 口─口─口─口           口     口   口─口─口─口─口 口 │                 │     │           │ │ 口─口 口─口     口─口─口 口─口   口─口─口─口─口 口─口─口   │ │ │       │ │ │     │   │   │ 口─口 口 口─口─口─口 口─口─口─口 口─口─口 口   口─口─口─口 │   │         │ │       │   │         │ 口 口─口─口─口─口 口 口 口 口─口─口  口 口─口─口─口 口─口 │ │ │     │ │   │ │   │   │ │ │ │     │ 口─口 口     口─口─口─口─口─口 口─口─口─口 口 口─口─口─口                        底下模拟接近到下一个区域出口时的情况: > run e 4s 6e 3s w 2s e n 2e s 3e 3n 2w > map ─口─口─口                             │ │ │ │                             口 口─口─口─口                               │ │                           口─口─口                                 │ │                               口─口─口─口─口 口─口─口                           │ │ │ │ │ │ │                           口─口─口─口─口─口─口                                       │                                       口     口                                 │     │                               口 口─口   ─口─口─口                         │ │     │   │                   口─口─口─口   口   口                           │           │                           口 口─口─口   口 口─口                         │ │   │   │ │                         口─口─口─口 口─口─口─口                                          > 然後再往南走一格 > s [/d/area/redant/133 ] 炙蚁地穴-第一层 走在这座洞穴里令你觉得十分的闷热,嘎吱嘎吱的走动声音不时 从洞穴的深处传来,生活在这里的炙蚁,其酸液据说是珍贵的药 材。 明显出口有: south, north, east, 和 west. 兵炙蚁群(soldier redants) [10群兵炙蚁] > map ─口─口─口                             │ │ │ │                             口 口─口─口─口                               │ │                           口─口─口                                 │ │                               口─口─口─口─口 口─口─口                           │ │ │ │ │ │ │                           口─口─口─口─口─口─口                                       │                                       口     口                                 │     │                               口 口─口   口─口─口─口                         │ │     │   │                   口─口─口─口 口──口 口                           │       │   │                           口 口─口─口  口 口─口                         │ │   │   │ │                         口─口─口─口 口─口─口─口  > 上面包含了两种东西 1.它真的只显示你走过的范围以及其邻近房间 2.只有走到接近出口的那一格,才显示出口 在刀剑神域的某一集里,桐人与亚丝娜组队遇到克莱因,打屁闲聊 之後又遇到军队,军队的队长就开口向桐人他们要「地图」。 这个地图系统就能做到「给玩家地图」。 而例如说你希望你的 mud 有小地图,则这个地图系统是办得到的, 例如你要预设玩家能看到全图,只要修改特定段落即可(我会在地图 系统的说明文件里说明要怎麽改)。 我设计了只显示走过的范围 -> 你可以将其改成显示全图 我只设计一律显示全图 -> 你很难新增只显示走过的范围的功能 我的意思就是,我今天设计它具有「只显示走过的范围」的用意, 并不是要所有 tmi2_v3_改 的使用者都要照我设计的去跑,因为程 式是可以修改的。 但是如果我没有为 tmi2_v3_改 设计这个东西,使用者要设计出这 东西却是很困难的。 两相比较当然是「我把它设计出来,然後由你来决定要不要用它」 (那基本上我会想设计这个,当然也是因为我本来就要用的缘故) 有任何问题或建议,都可透过推文或回文的方式让我知道。 我觉得关键是像 caselook 这位使用者,是否能光靠 map 指令所 看到的地图,就知道下一步应该怎麽走,据我的了解有些使用者是 办不到的,sanc 为此才新增了位於地图底下的资讯: > map 炙蚁地穴-第一层(o: 你的位置 @: 区域出入口) @-x-x-x x-x-x-x-x-x x x x-x-x x | | | | | | | | | | | | | x x-x-x-x-x x-x-x-x-x-x-x-x x-x x-x | | | | | | | | | x-x x-x-x-x x-x-x-x x-x-x-x-x-x-x-x-x | | | | | | | | | | | x-x-x-x-x-x-x x-x-x x-x-x x x-x x-x x-x | | | | | | | | | | | | | | | | x-x-x x-x-x-x-x-x-x x-x x x-x-x-x x | | x-x-x-x x x x-x-x-x-x x | | | | | x-x x-x x-x-x x-x x-x-x-x-o x-x-x | | | | | | | | | x-x x x-x-x-x x-x-x-x x-x-x x x-x-x-x | | | | | | | x x-x-x-x-x x x x x-x-x @ x x-x-x-x x-x | | | | | | | | | | | | | x-x x x-x-x-x-x-x x-x-x-x x x-x-x-x 前往方式: recall w look mirror 输入 felid, 然後 11d 4s 32w n enter 地图说明: 本区域为亚雷克莱斯特大陆上的区域,共三层。区域一 开始的进入点为地图的最左上角。前往第二层建议走法 3e 4s 6e 3s w 2s e n 2e s 3e 3n 2w 2s down (上面就是新增的资讯) 预计下次的版本会对 attack.c 做更多的修改、建立更多的说明文件、 并在 show 函数实装「小黑鼠伤口鲜血满身是。」这个受伤状况讯息, 说明文件会占大部份。 Laechan --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.61.157.53
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/mud/M.1403512062.A.D9C.html
1F:→ laechan :明天起没啥空,但有零碎时间编文件档 210.61.157.53 06/23 16:53
※ 编辑: laechan (210.61.157.53), 06/23/2014 17:02:49
2F:推 happyhero :推啊 越来越强大的mudlib 49.158.118.57 06/23 18:45
3F:→ laechan :突然发现应该可以练习看口─口图 61.224.75.82 06/23 19:07
4F:推 tenyfish :好,上次更新我只摸到一次:p 111.70.133.98 06/23 21:19
5F:推 tenyfish :那群式怪物loot判定是如何呢? 114.37.59.169 06/23 21:51
6F:→ laechan :基本设定是杀死最後一只=呼叫die的人 61.224.75.82 06/23 22:15
7F:推 tenyfish :但是要get all不会选不到吗? 114.37.59.169 06/23 22:36
原则上 tmi2_v3_改 会避免把东西「放进」怪物身上,从虚拟物品 及怪物掉落物系统的设计可以看得出来,每一样该掉落的东西都是 有设定机率的,实体物品只有符合机率的情况才会 clone 出来。 因此是由呼叫怪物 die 函数的 killer,由他呼叫 exec_mob_drop ,但是这只是呼叫的人是他,实际上 exec_mob_drop 还是可以实现 各种 loot 设定,端看你怎麽设定。 但即便如此,你还是可以设定你的 mud 有 corpse、以及打死了东 西会掉在屍体或是掉在地上,因为这是 tmi2_v3 本来就有的东西, 只是我目前透过怪物掉落物系统而得以无视它而已。 这是你自己可以决定的。 底下举例 int exec_mob_drop(object killer,object mob) { mixed obs,attackers,tmps; object ob,env; mapping mob_drops; string tmp; // 怪物所在的房间 env=environment(mob); // 该房间所有的物件 obs=all_inventory(env); // 或是说 obs = killer 的所有队友 // obs=PARTY_D->query_members(killer); // 该怪物死前所有的攻击对象 attackers=mob->query_attackers(); // 读出该怪物的掉宝资讯 mob_drops=mob_drop("query",base_name(mob)); tmps=keys(mob_drops); foreach(ob in obs) { // ob 符合掉宝机率的条件就是要在 attackers 内 if(ob && member_array(ob,attackers)!=-1) { // 然後就看你怎麽设定 // 比方以 D3 的做法,每个符合掉宝的 ob // 都会跑一次掉宝 foreach(tmp in tmps) { // 当符合掉宝机率时 if(mob_drops[tmp]>random(10000)) // 或者「主杀的 killer」才享有主掉宝率,其它非主杀的较低 // if(mob_drops[tmp]>random(12000) || // (ob==killer && mob_drops[tmp]>random(10000))) { // 若是实体物品就 clone 出来 move 给 ob if(tmp[0..0]=="/") // 或者只有主杀的 killer 才能拿到实体物品 // if(ob==killer) // 又或者只有主杀的 killer 才能拿到机率在 1% 以下的物品 // if(ob==killer && (int)mob_drops[tmp]<=100) clone_object(tmp)->move(ob); // 非实体物品就是虚拟物品,就让玩家增加 1 个 tmp else ob->add_vobjs(tmp,1); } } } } 上面的东西很直觉,你可以把重点摆在让自己渐渐有能力写出这 些 code,这样不管你如何构思要怎麽执行掉宝,你都能在想到的 同时,就马上能将它们写成相对映的程式段,就如同我上面所写 的程式段一样,tmi2_v3 具有不管你希望它怎麽执行掉宝,它都 几乎可以办到的特质,而且很直觉,就如同你上面看到的。 既然它有这样的特质,则只要常摸就一定能熟。 ※ 编辑: laechan (61.224.75.82), 06/23/2014 23:14:23 ※ 编辑: laechan (61.224.75.82), 06/23/2014 23:16:39 ※ 编辑: laechan (61.224.75.82), 06/23/2014 23:18:56
8F:推 tenyfish :只是函数很多,又没API查,只能慢来 114.37.59.169 06/23 23:35
常用的 efun 及 simul_efun 就那几个,我会写在说明内,然後我 事先有写在备忘内你亦可先看,就知道「其实就那几个而已」,然 後 running 指令就很适合用来练习这些函数。 我新增的系统部份,规则几乎都很共通: /adm/daemons/vobjd.c VOBJ_D->vobj_data("query","物品编号或名字"); VOBJ_D->mob_drop("query","怪物档名"); /adm/daemons/mapd.c MAP_D->map_data("query","目录名"); /adm/daemons/chinesed.c CHINESE_D->chinese_data("query","英文"); (query/set/... 也共通,因为它们都是 cp from /adm/系统物件范例.txt) 以底下的 running code 为例 write(identify("/adm/daemons/vobjd"->vobj_data("query","m001"))+"\n"+ identify("/adm/daemons/vobjd"->mob_drop("query", "/d/area/newbie/mob/rabbit1"))+"\n"+ identify("/adm/daemons/mapd"->map_data("query","redant"))+"\n"+ identify("/adm/daemons/chinesed"->chinese_data("query","knight"))+"\n"); ========== 程式执行区 ========== ([ "name" : "兔毛", "value" : 362 ]) ([ "m001" : 5000 ]) ({ ({ 1, 177, ({ 1, 152 }), "map1x", "炙蚁地狱第一层" }), ({ 178, 331, ({ 210, 313 }), "map2x", "炙蚁地狱第二层" }), ({ 332, 475, ({ 370 }), "map3x", "炙蚁地狱沦胪T层" }) }) "骑士" ========== 程式执行区 ========== 我还有规划一种速查的做法,但是它跟写说明文件一样超耗时间, sanc 一度想实装但後来我放弃了,tmi2_v3_改 确定会实装,因为 有要写说明文件,写完後再写它就会比较简单。 以前 spock@ff 也有翻译一系列的 LPC 函数说明,因为他有做释出 ,所以我也会将那一系列的说明档通通放进 /doc 目录内,有中文 翻译。 大家都是从对它很不熟,然後一路走过来的。 ※ 编辑: laechan (61.224.75.82), 06/24/2014 00:20:38
9F:→ laechan :任务系统接近完工,比sanc现用的还好 210.61.157.53 06/25 17:33
> quest show l001 ┌──────────────────────────────┐ │任务名称:测试任务 │ │任务作者:laechan │ │关 键 字:({ "test", "测试" }) │ ├──────────────────────────────┤ │任务步骤: │ │ │ │ 1.与 道具店老板--玛儿(Maor) 对话。 │ │ 2.与 修理店老板--安琪拉(Angelia) 对话。 │ │ 3.与 道具店老板--玛儿(Maor) 对话。 │ └──────────────────────────────┘ 话说回来,这不是结束,而是漫长 debug 的开始。。。。。。 ※ 编辑: laechan (61.224.75.82), 06/27/2014 00:49:45
10F:→ laechan :任务系统明天就能完成雏形必释出 1.165.161.242 06/30 00:29







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