TopicBot简介
TopicBot是用于在irc跑团过程中,控制频道标题,记录战斗状态的程序。制作它的目的是希望能够简化dm/pc维护战斗状态和团务的操作
TopicBot目前仅支持DnD 3R
TopicBot目前支持的功能有:地图编辑、维护先攻顺序表,维护受伤、临时生命值状况,维护buff/debuff状况,记录xp、物品和法术,以及日志记录和规则查询功能。DM可以自行决定要使用哪些功能。
使用"/invite <TopicBot名> <#频道名>"邀请TopicBot
TopicBot的命令均以"."或".t "(".t"加一个空格)开头,如".end",或".t init 18 Jim"。其中以".t "开头的命令会在命令执行后更新频道标题。有些命令无论用"."还是".t "都会更新标题。另,有些命令可以接受Oicebot投骰结果。例如".r d+3 init jim"会把投骰结果当作Jim的先攻值加入战斗。
TopicBot可以在小窗和非跑团频道接收命令。若命令有返回消息则将显示在输入命令的频道/小窗中,若命令导致标题更新则将更新至跑团频道的标题。
TopicBot目前工作在两个层面上,团级和遭遇级。除了规则查询外所有的功能都必须在一个团的环境下执行,战斗级别的命令必须在进入战斗环境后执行。
TopicBot只能同时载入一个团。也就是说不管TopicBot在几个频道中,你的所有命令都是针对同一个团的存档执行的。
通用命令
以下是TopicBot目前支持的命令列表。命令格式描述中尖括号(<>)包围的部分是必须提供的,方括号([])包围的部分是可选的。
.rule <规则元素名>:查询规则。如".rule blinded"。目前仅支持traps,会根据跑团需要慢慢增加内容。注意:这条命令通常会导致多于一行的返回信息,所以不建议在跑团频道中使用。
.4df [技能等级] [检定描述]:依照Fudge/Fate/D6s规则投骰。
.startgame <团名>:读取名为<团名>团的存档,如果该团不存在则将创建一个新团并以<团名>命名。之后TopicBot将运行在这个团的环境下。注意:不要在团名中加入特殊字符,尽量避免使用空格,否则可能导致无法保存到文件。
团级命令
以下命令都必须在团环境下(也就是执行.startgame命令之后)执行:
添加/删除PC
.addpc <PC名>:增加一个名为<PC名>的PC。
.removepc <PC名>:从团中去除名为<PC名>的PC。
管理人物名
.rename <人名1> <人名2>:将人名1修改为人名2,用法举例:
.rename Jim JimRaynor:将标题中的Jim改为JimRaynor
.actas <PC名>:将当前昵称与PC绑定。之后如果拥有此昵称的人输入命令则相当于该命令是从<PC名>输入的。
.removealias <昵称>:解除<昵称>与PC的绑定。
注意现在要将一个已经绑定的昵称绑定到另一个PC名上必须首先解除绑定……很糟糕……
.listalias:列出当前所有的昵称绑定关系
PC基本属性
.set [PC名] <属性> <数值>:将PC的<属性>属性修改为<数值>。可用此命令修改的属性包括xp, hp, maxhp, thp, initmod。若命令中提供[PC名]参数则将对该pc进行修改,否则将以输入命令者(以下简称为调用者)的昵称为PC名进行修改。例如:
.set Bairmot maxhp 33:将把Bairmot的最大生命值设置为33.
.charstat [PC名列表]:显示人物的状态明细。可以指定显示一个或多个人物的状态。如果不指定人物名则显示调用者的状态。如果使用ALL(全大写)为参数则显示所有PC的状态。用法举例:
.charstat:显示自身的状态
.charstat ALL:显示所有人物状态
.charstat Jim 昆:显示Jim和昆的人物状态
XP
.xp <xp> [PC名列表]:为所有处于[PC名列表]内的PC增加[xp]点xp。若未指定PC名列表则默认指定所有PC。这一命令也可以用于减少xp,只要将xp变为负数。这个命令同时会产生一条日志。
团队与个人物品
.loot <物品1*数量>[|<物品2*数量>|<物品3*数量>...]:将物品1、物品2、物品3等加入团队loot列表。这个命令同时会产生一条日志。用法举例:
.loot 精致品巨剑:将精致品巨剑加入团队loot
.loot clw棍子*50|ep水*4:将50发clw棍子和4瓶ep水加入团队loot
注意:由于.use命令目前还有bug,请不要在物品名中加入空格
.droploot <物品1*数量>[|<物品2*数量>|<物品3*数量>...]:将物品1、物品2、物品3等从团队loot中移除。这个命令同时会产生一条日志。物品格式如上.loot命令
.takeloot <PC名> <物品1*数量>[|物品2*数量|物品3*数量...]:将物品1、物品2、物品3等从团队loot中转移到PC身上。这个命令同时会产生一条日志。注意这里的PC名不能省略。用法举例:
.takeloot Bairmot clw棍子*50|ep水*2:PC Bairmot从团队loot拿走50发clw棍子和2瓶ep水
.use [PC名] <物品> [数量]:使用[数量]发[PC名]身上的<物品>。若[数量]省略则默认使用一发;若[PC名]省略则默认使用自己身上的物品。用法举例:
.use Jim clw棍子 10:使用10发Jim身上的clw棍子
.use ep水:使用输入命令的PC身上的ep水一瓶
.listloot:显示当前的团队loot
.listitem [PC名列表]:显示某个或某些PC身上的物品。用法举例:
.listitem:显示自身的物品
.listitem ALL:显示团队中所有人物的物品
.listitem Jim 昆:显示Jim和昆身上的物品
法术
.prepare [PC名] <法术等级> <法术1*数量>[|法术2*数量|法术3*数量...]:将法术1、法术2、法术3等记入[PC名]的当日法术中。若[PC名]省略则默认记入命令输入者的当日法术。用法举例:
.prepare Jim lv1 mm*2|grease|sleep:将sleep、grease和两发mm记入Jim的当日法术。
.cast [PC名] <法术>:施展[PC名]已准备的<法术>。施法后<法术>会从当日法术中移除.若[PC名]省略则默认记入命令输入者的当日法术。用法举例:
.cast Jim mm:施展Jim准备的mm。
.listspell [PC名列表]:显示某个或某些PC准备的当日法术。[PC名列表]的格式参见.listitem命令。
日志
.log <日志标题>|<日志内容>:将<日志内容>以<日志标题>为标题记录下来以便查询。例如:
.log 寻找大叔|废柴大叔又把自己搞丢了,我们要到白val镇去把他揪回来。
.log query [字段|][关键字]:按字段和关键字查询日志。目前支持的字段包括"title", "time", "text"和"logger",分别指记录日志时录入的标题、时间、日志内容和记录者的ID。若未指定字段则代表在所有字段中查找。若字段和关键字均未指定则返回所有日志条目。例如:
.log query time|2011-12-29:输出所有记录于2011年12月29日的日志
.log query text|大叔:输出所有在内容中出现“大叔”字样的日志条目
.log query title&text|白val镇:输出所有在内容或标题中出现“大叔”字样的日志条目
.log query:输出所有日志
.log del <标题或时间>:删除一条指定日期或指定标题的日志。注意:不像其他大多数的命令,参数提供的标题或日期必须与日志打印的标题或日期的格式、内容完全相同。这样是为了避免误删。
其他
.undo:取消上一次的操作。
.startbattle:创建一个遭遇,之后Titlebot将运行于该遭遇的环境下。如果团内已经通过addpc命令加入了pc,则这条命令会同时为所有pc投先攻。
遭遇级命令
以下命令都必须在遭遇环境下执行:
增加/删除参战人员
.init <先攻数值> [人物]:将一个人物(这里的“人物”可代表PC或者NPC,下同)加入战斗,并将其按先攻值排进行动顺序表里。如果不提供人物名则使用输入命令的人名代替。用法举例:
.init 10 Jim:新建一个名为Jim的人物,并将其先攻设置为10。假如现在标题中已有两个怪物g1,g2,先攻分别是5和20,则输入这条命令之后标题会变成"g2, Jim, g1"
.init 10:假如Hanbak输入了这个命令,则将会新建人物为Hanbak,且将其先攻设置为10
注意:也可以通过投骰输入这个命令,格式为".r <投骰> init [人物]"例如:
.r d+3 init:假如Hanbak输入了这个命令,则将会新建人物为Hanbak,且将其先攻设置为投骰的结果
.r d+3 init Hanbak:将会新建人物为Hanbak,且将其先攻设置为投骰的结果
注意:为了减少操作,在没有开始遭遇之前输入.init命令也会开始一个遭遇。因此严格来说.init命令也应该属于团级命令。但是由于.init跟遭遇绑定极为紧密,因此列入遭遇级命令。
.addchar <人物列表>:新建一个或多个人物,并将其添加到行动顺序表的末尾。用法举例:
.addchar g1 g2 g3 g4:添加g1到g4至行动顺序表末尾。
.kill <人物列表>:从行动顺序表中去除一个或多个人物(通常代表脱离战斗)。用法举例:
.kill g1 g2 g3 g4:从行动顺序表中去除g1到g4
行动顺序
.end:结束当前行动者的轮,将当前行动者置为其下一顺位的战斗员。
.pre:将当前行动者置为其上一顺位的战斗员。
.before [人物1] <人物2>:在行动顺序表中将人物1移动到人物2之前。其中人物1可以省略,省略时将用输入命令的人名作为人物1。用法举例:
假如当前的标题为"g1, Jim, g2",则.before g2, Jim将使标题成为g1, g2, Jim
假如当前的标题为"g1, Jim, Han, g2",则Han输入.before Jim将使标题成为g1, Han, Jim, g2
.after [人物1] <人物2>:在行动顺序表中将人物1移动到人物2之后。其中人物1可以省略,省略时将用输入命令的人名作为人物1。用法举例:
假如当前的标题为"g1, Jim, g2",则.after g1, Jim将使标题成为Jim, g1, g2
假如当前的标题为"g1, Jim, Han, g2",则Han输入.after g2将使标题成为g1, Jim, g2, Han
.start [轮数]:从第[轮数]轮开始战斗。若省略[轮数]则默认从第一轮开始。若[轮数]输入为0则从突袭轮开始。此命令会把当前行动者置为行动顺序表上的第一个人物。
.goto <人物> [轮数]:将当前行动者置为指定人物。轮数可省略,若指定轮数则会同时将当前轮数置为指定轮数。0代表突袭轮。用法举例:
.goto Jim:设置轮到Jim行动。
.goto Jim 1:设置轮数为第一轮且轮到Jim行动
注意:使用goto命令不会检查人物buff/debuff状态,即可能需要手动去除需去除的状态,手动扣除dot伤害等。因此不建议使用。使用start令战斗轮数前进也有同样的问题。
伤害与治疗
.-<数值> [人物列表]:对一个或多个人物造成指定数量的伤害。若未指定人物则伤害自身。用法举例:
.-5 Jim:Jim受到5点伤害
.-5:自身受到5点伤害
注意:也可以通过投骰输入这个命令,格式为".r <投骰> - [人物列表]"。例如:
.r 2d6+7 - g1 g2 g3:对g1、g2、g3造成伤害,伤害的数量等于投骰结果
.r 3d12+11 -:对自己造成伤害,伤害的数量等于投骰结果
.+<数值> [人物列表]:为指定一个或多个人物治疗指定数量的hp。若未指定人物则治疗自身。用法举例:
.+5 Jim:Jim治疗5点hp
.+5:自身治疗5点hp
注意:也可以通过投骰输入这个命令,格式为".r <投骰> + [人物]"。例如:
.r d6+11 + Jim:治疗Jim,治疗的数量等于投骰结果
.r d6+11 +:治疗自己,治疗的数量等于投骰结果
.thp<数值> [人物列表]:为每个指定人物增加临时生命值。若不指定人物则为自身增加临时生命值。用法举例:
.thp5 Jim 昆 han:为Jim、昆、han每人增加5点临时生命值
.thp10:为自己增加10点临时生命值
注意:也可以通过投骰输入这个命令,格式为".r <投骰> thp [人物列表]",例如:
.r 1d6+2 thp Jim han 昆:将为Jim、han、昆每人增加临时生命值,其数量为投1d6+2的结果。注意,由于一次投骰只会有一个结果,所以三个人会得到同样数量的临时生命值。如果要每个人获得不同数量的临时生命值则必须为每个人分别投骰。
.r 1d6+2 thp:将为自己增加临时生命值,其数量为投1d6+2的结果。
状态
+<状态> [人物列表]:为一个或多个人物附加指定的状态。若未指定人物则附加到自身。用法举例:
+slow Jim:为Jim附加slow
+daze|4:为自身附加daze并标明4轮后结束
注意:附加状态时会记录附加状态所在的轮和回合。所以一定要在当轮要附加的状态全部加完之后再.end,否则自动结算时就会按下一个行动的人物的轮来结算状态了。
注意:状态的格式为<状态名>[|持续轮数]。分为状态名和持续轮数两部分,以"|"分隔。如果省略结束条件则TopicBot会按永久存在处理。
在回合开始时TopicBot会自动减少状态持续轮数和取消过期的状态。另外一些特殊的状态也会自动触发某些事件。目前TitleBot支持的特殊状态有dot、regen(regeneration)和fh(fast healing)。用法如下:
+dot5 Jim:为Jim附加5点dot。在之后每个回合进行到施加该状态的轮的时候Jim都会受到5点伤害。
+fh5|4 Jim:为Jim附加5点fast healing,持续4轮。在之后每个回合进行到施加该状态的轮的时候Jim都会获得5点治疗。
+regen5 Jim:为Jim附加5点regeneration。在之后每个回合进行到施加该状态的轮的时候Jim都会恢复5点瘀伤。
.nl<数值> [人物列表]:对每个指定人物造成瘀伤。若不指定人物则对自身造成瘀伤。瘀伤在标题中用括号里的负数表示。用法举例:
.nl5 Jim 昆 han:对Jim、昆、han每人造成5点瘀伤
.nl10:对自己造成10点瘀伤
注意:也可以通过投骰输入这个命令,格式为".r <投骰> nl [人物列表]",例如:
.r 1d6+2 nl Jim han 昆:将对Jim、han、昆每人造成瘀伤,其数量为投1d6+2的结果。注意,由于一次投骰只会有一个结果,所以三个人会受到同样数量的瘀伤。如果要每个人受到不同数量的瘀伤则必须为每个人分别投骰。
.r 1d6+2 nl:将对自己造成瘀伤,其数量为投1d6+2的结果。
-<状态> [人物列表]:从一个或多个人物身上解除指定的状态。若未指定人物则解除自身。用法举例:
-slow Jim:为Jim解除slow
-daze|4:为自身解除daze|4
其他
.endbattle:结束当前遭遇,退出当前遭遇环境。