ZhengPeiRu21 / mod-playerbots

AzerothCore Playerbots Module
MIT License
194 stars 95 forks source link

请尽快引入指挥机制 #206

Open shuheq578 opened 10 months ago

shuheq578 commented 10 months ago

PlayerBot 需要一个指挥官。 即使聪明如人脑,下团本也要人指挥,踢足球还要教练呢。 有了指挥统领全局,机器人只需要无脑技能循环。 指挥观察场上的一切,做出判断,必要时对机器人发出指令。 何时需要打断,何时需要躲避技能,就像某些插件一样,提醒队员。 世事如棋局局新,每次战斗,情况都不尽相同,而指挥会根据情况,做出合理判断,规范队员行为。 而现在是玩家在充当临时指挥的角色,但玩家又要参与战斗, 况且给玩家的权限也不多。 机器人是个团体,需要队友间的互相配合。 而怎样配合,应该交给指挥官,而不是一个个聪明的个体。 通常来说,傻瓜比聪明人更听话,机器人不需要那么聪明,笨一点更好。 就说到这吧,剩下的留给各位讨论。

garfieldz90 commented 10 months ago

PlayerBot 需要一个指挥官。 即使聪明如人脑,下团本也要人指挥,踢足球还要教练呢。 有了指挥统领全局,机器人只需要无脑技能循环。 指挥观察场上的一切,做出判断,必要时对机器人发出指令。 何时需要打断,何时需要躲避技能,就像某些插件一样,提醒队员。 世事如棋局局新,每次战斗,情况都不尽相同,而指挥会根据情况,做出合理判断,规范队员行为。 而现在是玩家在充当临时指挥的角色,但玩家又要参与战斗, 况且给玩家的权限也不多。 机器人是个团体,需要队友间的互相配合。 而怎样配合,应该交给指挥官,而不是一个个聪明的个体。 通常来说,傻瓜比聪明人更听话,机器人不需要那么聪明,笨一点更好。 就说到这吧,剩下的留给各位讨论。

不是有指令插件了吗?

shuheq578 commented 10 months ago

PlayerBot 需要一个指挥官。 即使聪明如人脑,下团本也要人指挥,踢足球还要教练呢。 有了指挥统领全局,机器人只需要无脑技能循环。 指挥观察场上的一切,做出判断,必要时对机器人发出指令。 何时需要打断,何时需要躲避技能,就像某些插件一样,提醒队员。 世事如棋局局新,每次战斗,情况都不尽相同,而指挥会根据情况,做出合理判断,规范队员行为。 而现在是玩家在充当临时指挥的角色,但玩家又要参与战斗, 况且给玩家的权限也不多。 机器人是个团体,需要队友间的互相配合。 而怎样配合,应该交给指挥官,而不是一个个聪明的个体。 通常来说,傻瓜比聪明人更听话,机器人不需要那么聪明,笨一点更好。 就说到这吧,剩下的留给各位讨论。

不是有指令插件了吗?

人脑无法判断哪个技能能够打断,躲避技能时需要队友左移几步。 这是机器人指挥官做的事,看来你还是没明白我的意思。 机器人需要一个大脑,指挥他们协同作战。 这是一个配合问题,单一机器人无法做到。 比如队伍里有两个盗贼,指挥命令其中之一使用打断即可,另一个继续输出。 单纯强化单个机器人AI,A盗贼动,B盗贼也会动。 况且也有其他职业会打断的也会动。 而事先指令某个职业负责打断,该职业阵亡怎么办,这会让事情变得更加复杂。

shuheq578 commented 10 months ago

另外多说一句,国内有个天蓝端机器人,能打团本,但也是事先指定了各种站位策略,以及机器人技能输出优先级等。 和临场指挥还是不一样。 下面贴出天蓝端的策略表仅供参考。

shuheq578 commented 10 months ago

AI策略表的说明: mapId 地图id 必填 groupId 策略组。大家可以设计几套不同的策略,那么随机抽取一组执行,战斗的多样化。目前先填写0 boss的生物id

indexId 优先级,从小到大排列。依次触发一条条的记录。

actionType 行为。 actionParam1 参数1 actionParam2 参数2 actionParam3 参数3 actionParam4 参数4 actionParam5 参数5 actionParam6 参数6

当actionType=1时,躲避aoe,自由跑位 BotRandomSmartMovement 这个写在aoe的东西,写到groupBot.cpp里面 actionParam1的值表示物体aoe的id,或者生物aoe的id。暴风雪之类的aoe则不用填写。写上0就好。 actionParam2 aoe的半径大小,参考范围5-20码

当actionType=2时,中了debuff,跑开人群 BotFarAwayGroup actionParam1的值表示debuff技能的id actionParam2 跑出去的距离

当actionType=3时 BotAllotCreatureTarget actionParam1的值表示集火的怪物id,注意配合roleNum使用。比如roleType=7,roleNum=3,表示派3个近战去集火这个怪 actionParam2 数量,表示派几个dps去集火这个怪 actionParam3 角色,0:全部人 1:全部,除了MT坦克,2:远程dps 3:近战dps,4:物理dps 5魔法dps 6:MT坦克,7:全部,除了ft

当actionType=4时,让机器人跑位到这个位置 SettingBotPositionSimple, 边跑边打,有延迟. 跟19功能类似 actionParam1 1:远程 2:近战 3:物理dps 4:魔法dps 5:奶妈 6:副坦1 7:副坦2 8:副坦3 9:MT actionParam2 x坐标 actionParam3 y坐标 actionParam4 z坐标 actionParam5 时间,毫秒。表示在该坐标,会一直停留n秒。该项必须要有值,默认填写1000 actionParam6 职业,可以为0. 职业1zs 2qs 3lr 4dz 5ms 6dk 7sm 8fs 9ss 11xd

当actionType=5时,远离某个生物或者物体 BotFarAwayCreatureByRole actionParam1 生物id或者物体的id actionParam2 远离的范围 actionParam3 角色0:全部, 1:远程 2:近战 3:坦克。

当actionType=6,让机器人执行驱散行为。BotAllFullDispel actionParam几个参数不用设置。

当actionType=7,BotSwitchPullTarget 给坦克使用,换嘲讽。 意思就是抗怪坦克debuff大于等于actionParam2的层数,那么其他坦克就会释放嘲讽。 actionParam1 当前坦克身上的debuff技能ID actionParam2 debuff的层数

当actionType=8,给坦克使用。尝试把怪拉到指定的位置 PickTankBotPullTargetToPosition actionParam1的值表示怪物的id actionParam2 x坐标 actionParam3 y坐标 actionParam4 z坐标 actionParam5 角色,1:mt 2:ft1 3:ft2 4:ft3 5:fst。 如果值为5,fst会不断的释放灼烧,拉boss的仇恨。

当actionType=9 给坦克使用,给坦克添加目标. AddTankTargetByRole actionParam1的值表示怪物的id actionParam2 角色 1.mt 2:第一个ft 3:第二个ft,4:第三个ft

当actionType=10 全体机器人,停止攻击n秒时间。 BotDpsStopCombat actionParam1的值表示时间,单位是毫秒 actionParam2 角色role 1:远程 2:近战dps 3:物理dps 4:魔法dps

当actionType=11 给治疗机器人使用的 HealBotFollowTank actionParam1的值 角色 1:mt 2:ft1 3:ft2 4:ft3 5:fst actionParam2的值 数量 如果actionParam1=1,actionParam2=2,表示有2个治疗,会跟着主坦并专心治疗他。

当actionType=12 表示让机器人在n秒内,不要释放AOE的技能。 BotForceSingleDps actionParam1的值 毫秒。

当actionType=13 表示dps机器人会检测仇恨,如果dps和副坦仇恨快要超过坦克,那么dps和副坦会默认停手1秒 BotStopCombatWithThreat actionParam的几个参数不用设置值

当actionType=14 让身上带有debuff的机器人,跑到指定的位置 BotMoveToPosition actionParam1 debuff技能的Id actionParam2 x坐标 actionParam3 y坐标 actionParam4 z坐标 actionParam5 角色,0 全部,1近战(不包含坦克) 2远程 3坦克

当actionType=15,远程散开。围绕着boss半个圈,或者一个圈。 BotRangeFirstDisperse actionParam1 1:四分之一圈 2:半圈 3:四分之三圈 4:一个圈 actionParam2 最小距离 actionParam3 最大距离 远程会分散在这两个距离内

当actionType=16,远程,或者近战,跑位到boss的背后位置。 actionParam1 role=1 除了mt,其他近战dps和ft . role=2,近战dps,ft不跑。3:远程进行跑位

当actionType=18,全团分散 actionParam1 队伍分散的距离。不要超过20码,超了效果不好。 actionParam2 怪物id,为该怪物为中心,分散。 actionParam3 毫秒,该位置上停留的时间.

当actionType=19时,让机器人跑位到这个位置 SettingBotPositionSimple. 立刻跑过去,跟4功能类似 actionParam1 1:远程 2:近战 3:物理dps 4:魔法dps 5:奶妈 6:副坦1 7:副坦2 8:副坦3 9:MT actionParam2 x坐标 actionParam3 y坐标 actionParam4 z坐标 actionParam5 时间,毫秒。表示在该坐标,会一直停留n秒。该项必须要有值,默认填写1000 actionParam6 职业,可以为0. 职业1zs 2qs 3lr 4dz 5ms 6dk 7sm 8fs 9ss 11xd

当actionType=20时,让坦克背对人群

当actionType=21时,让机器人跑向玩家的坐标.用于集合 actionParam1 1:远程 2:近战 3:物理dps 4:魔法dps 5:奶妈 6:副坦1 7:副坦2 8:副坦3 9:MT actionParam2 时间,毫秒。表示在该坐标,会一直停留n秒。该项必须要有值,默认填写1000 actionParam3 职业,可以为0. 职业1zs 2qs 3lr 4dz 5ms 6dk 7sm 8fs 9ss 11xd

当actionType=24时,指定的角色,向某个生物/物体,或者中了debuff的队友移动. (注意,actionParam2,actionParam3,actionParam4. 只会有一项生效) actionParam1 0:全部 1:远程 2:近战 3:物理dps 4:魔法dps 5:奶妈 6:副坦1 7:副坦2 8:副坦3 9:MT actionParam2 生物的id actionParam3 debuff技能的id actionParam4 debuff技能的层数,默认为1层,达到层数才进行跑位 actionParam5 无 actionParam6 需要排除的buff的ID, 比如队友中了这个buff,那么就不要跑位

当actionType=25时,指定的角色,向某个生物/物体,或者跟中了debuff的队友,保持距离. actionParam1 0:全部 1:远程 2:近战 3:物理dps 4:魔法dps 5:奶妈 6:副坦1 7:副坦2 8:副坦3 9:MT actionParam2 生物的id actionParam3 debuff技能的id actionParam4 debuff技能的层数,默认为1层,达到层数才进行跑位 actionParam5 需要远离的距离. actionParam6 需要排除的buff的ID, 比如队友中了这个buff,那么就不要跑位

eventType, 事件类型。 eventParam1 eventParam2 eventParam3 eventParam4 eventParam5

当eventType=0,表示进入战斗状态,默认值。

当eventType=1 由于阶段的触发是在代码中,那么这里就用boss血量判断的方式,在表示对应的阶段。 eventParam1 就是怪物hp的百分比最大值。 eventParam2 就是怪物hp的百分比最小值。当怪物的hp>=eventParam2同时hp<=eventParam1,则进行对应的行为操作。

当eventType=2,由于阶段的触发是在代码中,那么这里就用时间轴的方式,在表示对应的阶段。 eventParam1 就是进入战斗的时间最大值。毫秒为单位。1000表示1秒 eventParam2 就是进入战斗的时间最小值。当进入战斗的时间>=eventParam2同时进入战斗的时间<=eventParam1,则进行对应的行为操作。这两者值最好差距3秒以上

当eventType=3,检测boss在释放的技能. 注意:瞬发的技能无法识别 eventParam1 正在释放的技能ID,如果匹配到了,那么就进行actionType的行为。

取消该项

当定义eventType=4, 自定义喊话控制action。 注意,要选中boss为目标才行。 eventParam1 数字. 比如填写了2,那么队伍说话"执行战术 2",那么就执行配置的action行为

当定义eventType=5,获取boss的阶段,具体需要脚本中对应起来. 看最后面的备注. eventParam1 数字. 对应了第几阶段.

reLoadBotSmartScript 注意,用reLoadBotSmartScript,重新加载这个表的数据,不用重启

shuheq578 commented 10 months ago

机器人输出配置表: bot_custom_spell表名, 删除对应的技能,则使用代码中默认的技能。 表里不需要配置刷buff的技能行为,萨满的图腾,萨满闪电盾水盾,骑士的祝福和圣印,猎人的射击守护等某些行为,已经代码写好,不需要在表里配置。

字段解释: //id // myclass:职业1zs 2qs 3lr 4dz 5ms 6dk 7sm 8fs 9ss 11xd, 数字匹配正确的职业 // talentType 天赋 // pose 姿态 预留,暂时无效 // spell 技能id // auraSpell 光环技能id,有的话就使用spell的技能 // indexNum 优先级 //conditionType 条件类型, 0:普通, 无条件就释放 1 : 敌人的hp > xx 2:敌人的hp<xx 3 : 我的hp>xx 4 : 我的hp < xx 5 : 我的能量>xx 6 : 我的能量 < xx // 7 : 敌人在施法 8 : 随机百分比(概率) // 9 : 检测到了n码以内, 有多少敌人目标看着我.(dps OT了,或者坦克拉怪) 10 : 附近多少(range)码内的,有多少敌人。如果人数>=conditionValue,就释放某技能 // 11:附近多少码(range)内,没有aura的值是conditionValue的敌人。>=2数量,就开始使用spell的技能 // 12: 目标敌人/自己,是否有值为auraSpell的aura,如果目标没有aura,那么就对目标使用spell。如果我没有aura,就对自己使用spell // 13: 目标敌人/自己,是否有值为auraSpell的aura,如果目标有aura,那么就使用spell。如果我有aura,就会自己使用spell // 14: 自己是否有值为auraSpell的aura,如果自己有aura,那么就对目标使用spell。跟27同一组。另外,如果设置conditionType2为28,则一直会重复该技能,不会跳到下一个技能。 // 15:给坦克释放群嘲的。附近10码内,如果有2个以上的怪没有看向坦克,那么坦克就释放群体嘲讽 // 16: 如果怪物的debuff层数,debuff的技能id是auraSpell,小于等于conditionValue,那么就对怪物使用spell技能。 // 17: 如果怪物的debuff层数,debuff的技能id是auraSpell,大于等于conditionValue,那么就对怪物使用spell技能。 // 18: 如果我的buff层数,buff的技能id是auraSpell,小于等于conditionValue,那么就对怪物使用spell技能。 // 19: 如果我的buff层数,buff的技能id是auraSpell,大于等于conditionValue,那么就对怪物使用spell技能。(类似增强萨满的5层漩涡,瞬发闪电箭) // 20: 如果我选择的目标,他也选中了我。这时候就释放spell技能 // 21: 监控目标的debuff的持续时间,如果小于等于conditionValue,那么就使用spell技能 // 22: 盗贼使用,我的连击点数>=xx,则使用spell技能 // 23: 盗贼使用,我的连击点数<=xx,则使用spell技能 // 24: dk使用,判断目标是否受到了感染,如果是的话,就使用spell技能 // 25: dk使用,判断目标是否受到了感染,如果没有的话,就使用spell技能 // 26: dk使用,判断目标没有受到感染的数量,如果数量大于等于2个,就使用spell技能(用于传染疾病) // 27: 自己是否有值为auraSpell的aura,如果自己没有aura,那么就对目标使用spell。跟14同一组 // 28:本次技能如果释放不成功,那么就重复尝试该技能,直到成功为止。 // 29:敌人目标附近多少(range)码内,有>=conditionValue数量的怪,就释放spell技能。 // 30:敌人目标是否<=(range)码, 在这个射程内就释放spell技能。 // 31: conditionValue为技能ID,如果玩家有这个技能,就释放spell // 32: conditionValue为技能ID,如果玩家没有这个技能,就释放spell // 33: 检测敌人数量是否<=2,是的话, 就取消auraSpell光环. 比如取消猎人的乱射 // 34: 检测范围内(rangeVal码)的敌人,如果带有auraSpell的debuff的数量, 是小于等于conditionValue,那么就对敌人释放spell技能. 比如术士,战斗时候保持3个敌人身上的腐蚀术.注意,该项在conditionValue,rangeVal有效,不要写到conditionValue2,conditionValue3的字段里. // 35: 对非当前目标的一个敌人,释放spell技能(dot技能). 比如术士在攻击目标A,同时会给目标B一个浩劫buff.注意,该项在auraSpell,conditionValue,rangeVal有效,不要写到conditionValue2,conditionValue3的字段里. // 36: 如果有buff的队友数量大于等于conditionValue,那么释放spell攻击目标.
// 37: 如果有buff的队友数量小于等于conditionValue,那么释放spell治疗队友.
// 38: 如果技能ID是conditionValue的技能处于CD中,那么就释放spell. 比如A技能CD了,就用B技能过渡.

// conditionValue 条件的值 // range 检测的范围,conditionType = 9,10,11时候使用 // 如果minLevel=0,maxLevel=40,那么player的level如果在这个范围内,那么就匹配了,加载这些信息 // rangeVal 检测的范围,conditionType = 8时候使用 // isMe spell的释法是对自己还是对敌人的. 0 : 敌人 1 : 自己 // isAoe 是否是aoe技能, RangeEnemyListByTargetRange(pTarget, NEEDFLEE_CHECKRANGE).size() >= 3 // check aoe // talk 说话的文本 // auraSpellFixed 0:使用自身等级的aura spell,1:使用固定值的aura spell(比如战士的破甲) // checkCaster 检测施法者是否为我,跟auraSpell有关.0:不检测 1:检测. 比如破甲效果一个人打就行,那么checkCaster为0. 比如2个战士都想打撕裂,那么checkCaster为1. // 给conditionType=12,13使用 // unitFlag 0:通用,1:针对小怪,2:针对boss // healthFlag: 0:默认值 1:直接治疗 1:预读打断的治疗,比如目标hp>=95%,会取消治疗,小于则会继续读完治疗 // isAllHeal 0:单体治疗 1:群疗

shuheq578 commented 10 months ago

总而言之,事先预定,和临场指挥还是有很大区别,所谓将之外君命有所不受。 不可能事事料敌机先。 这已经是人脑事先把各个副本摸熟,能做到的极致。 但还有很多情况无法考虑周全,比如何时该放风筝,变羊等。 比如天蓝端治疗职业是全程不参与输出的,虽说很多情况可以输出,这直接影响了效率。 我认为可以让机器人反复下副本,摸索出一套效率最高,灭团次数最少的策略。 具体指挥如果交给玩家,这会影响游戏的参与感。 目前多数机器人,都会有些作弊行为,包括双重附魔,穿毕业装等。

shuheq578 commented 10 months ago

天蓝端的下载地址 如需要,可以参考 制作机器人很累的,辛苦了 https://pan.baidu.com/share/init?surl=-x0OO4AE-FSN9u05lwY0Cg#list/path=%2F 提取码 rn7e

nj @.***> 于2023年9月9日周六 09:38写道:

PlayerBot 需要一个指挥官。 即使聪明如人脑,下团本也要人指挥,踢足球还要教练呢。 有了指挥统领全局,机器人只需要无脑技能循环。 指挥观察场上的一切,做出判断,必要时对机器人发出指令。 何时需要打断,何时需要躲避技能,就像某些插件一样,提醒队员。 世事如棋局局新,每次战斗,情况都不尽相同,而指挥会根据情况,做出合理判断,规范队员行为。 而现在是玩家在充当临时指挥的角色,但玩家又要参与战斗, 况且给玩家的权限也不多。 机器人是个团体,需要队友间的互相配合。 而怎样配合,应该交给指挥官,而不是一个个聪明的个体。 通常来说,傻瓜比聪明人更听话,机器人不需要那么聪明,笨一点更好。 就说到这吧,剩下的留给各位讨论。

不是有指令插件了吗?

— Reply to this email directly, view it on GitHub https://github.com/ZhengPeiRu21/mod-playerbots/issues/206#issuecomment-1712377821, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYL7NEF5JCZHTGW5QSQJMYDXZPCARANCNFSM6AAAAAA4QYTZAI . You are receiving this because you authored the thread.Message ID: @.***>

garfieldz90 commented 10 months ago

哇塞,大哥你应该一起来加入制作呀,这也是有经验的人才能想出来这么详细的内容了

shuheq578 commented 10 months ago

我又不是作者,作者有个QQ群,有一群人帮他测试,提供战术 打法 。 而作者也是参考某个收费端,泄露的源码,在加以改进的。 目前已经很成熟了,不过最近停更了,还有很多问题没有解决。 和github一样,都是沿着前人的路继续走下去。 我充其量只能提供些想法建议。 我只是认为机器人打怪,应该像战场上指挥士兵一样。 充分让每个职业各展所长,每个机器人都是一枚棋子,出现在他应该出现的地方。 以后即使引入AI学习,也是指挥的事,就像阿法狗一样。

nj @.***> 于2023年9月9日周六 23:40写道:

哇塞,大哥你应该一起来加入制作呀,这也是有经验的人才能想出来这么详细的内容了

— Reply to this email directly, view it on GitHub https://github.com/ZhengPeiRu21/mod-playerbots/issues/206#issuecomment-1712539686, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYL7NEGWB2WYZTSGLJA5Z7TXZSEYPANCNFSM6AAAAAA4QYTZAI . You are receiving this because you authored the thread.Message ID: @.***>

git4ai commented 10 months ago

我又不是作者,作者有个QQ群,有一群人帮他测试,提供战术 打法 。 而作者也是参考某个收费端,泄露的源码,在加以改进的。 目前已经很成熟了,不过最近停更了,还有很多问题没有解决。 和github一样,都是沿着前人的路继续走下去。 我充其量只能提供些想法建议。 我只是认为机器人打怪,应该像战场上指挥士兵一样。 充分让每个职业各展所长,每个机器人都是一枚棋子,出现在他应该出现的地方。 以后即使引入AI学习,也是指挥的事,就像阿法狗一样。

great vision! come and CODE!

christan-duplicate commented 9 months ago

很有创意的想法,来个大神实现吧

zzzdtz commented 9 months ago

机器人输出配置表: bot_custom_spell表名, 删除对应的技能,则使用代码中默认的技能。 表里不需要配置刷buff的技能行为,萨满的图腾,萨满闪电盾水盾,骑士的祝福和圣印,猎人的射击守护等某些行为,已经代码写好,不需要在表里配置。

字段解释: //id // myclass:职业1zs 2qs 3lr 4dz 5ms 6dk 7sm 8fs 9ss 11xd, 数字匹配正确的职业 // talentType 天赋 // pose 姿态 预留,暂时无效 // spell 技能id // auraSpell 光环技能id,有的话就使用spell的技能 // indexNum 优先级 //conditionType 条件类型, 0:普通, 无条件就释放 1 : 敌人的hp > xx 2:敌人的hp<xx 3 : 我的hp>xx 4 : 我的hp < xx 5 : 我的能量>xx 6 : 我的能量 < xx // 7 : 敌人在施法 8 : 随机百分比(概率) // 9 : 检测到了n码以内, 有多少敌人目标看着我.(dps OT了,或者坦克拉怪) 10 : 附近多少(range)码内的,有多少敌人。如果人数>=conditionValue,就释放某技能 // 11:附近多少码(range)内,没有aura的值是conditionValue的敌人。>=2数量,就开始使用spell的技能 // 12: 目标敌人/自己,是否有值为auraSpell的aura,如果目标没有aura,那么就对目标使用spell。如果我没有aura,就对自己使用spell // 13: 目标敌人/自己,是否有值为auraSpell的aura,如果目标有aura,那么就使用spell。如果我有aura,就会自己使用spell // 14: 自己是否有值为auraSpell的aura,如果自己有aura,那么就对目标使用spell。跟27同一组。另外,如果设置conditionType2为28,则一直会重复该技能,不会跳到下一个技能。 // 15:给坦克释放群嘲的。附近10码内,如果有2个以上的怪没有看向坦克,那么坦克就释放群体嘲讽 // 16: 如果怪物的debuff层数,debuff的技能id是auraSpell,小于等于conditionValue,那么就对怪物使用spell技能。 // 17: 如果怪物的debuff层数,debuff的技能id是auraSpell,大于等于conditionValue,那么就对怪物使用spell技能。 // 18: 如果我的buff层数,buff的技能id是auraSpell,小于等于conditionValue,那么就对怪物使用spell技能。 // 19: 如果我的buff层数,buff的技能id是auraSpell,大于等于conditionValue,那么就对怪物使用spell技能。(类似增强萨满的5层漩涡,瞬发闪电箭) // 20: 如果我选择的目标,他也选中了我。这时候就释放spell技能 // 21: 监控目标的debuff的持续时间,如果小于等于conditionValue,那么就使用spell技能 // 22: 盗贼使用,我的连击点数>=xx,则使用spell技能 // 23: 盗贼使用,我的连击点数<=xx,则使用spell技能 // 24: dk使用,判断目标是否受到了感染,如果是的话,就使用spell技能 // 25: dk使用,判断目标是否受到了感染,如果没有的话,就使用spell技能 // 26: dk使用,判断目标没有受到感染的数量,如果数量大于等于2个,就使用spell技能(用于传染疾病) // 27: 自己是否有值为auraSpell的aura,如果自己没有aura,那么就对目标使用spell。跟14同一组 // 28:本次技能如果释放不成功,那么就重复尝试该技能,直到成功为止。 // 29:敌人目标附近多少(range)码内,有>=conditionValue数量的怪,就释放spell技能。 // 30:敌人目标是否<=(range)码, 在这个射程内就释放spell技能。 // 31: conditionValue为技能ID,如果玩家有这个技能,就释放spell // 32: conditionValue为技能ID,如果玩家没有这个技能,就释放spell // 33: 检测敌人数量是否<=2,是的话, 就取消auraSpell光环. 比如取消猎人的乱射 // 34: 检测范围内(rangeVal码)的敌人,如果带有auraSpell的debuff的数量, 是小于等于conditionValue,那么就对敌人释放spell技能. 比如术士,战斗时候保持3个敌人身上的腐蚀术.注意,该项在conditionValue,rangeVal有效,不要写到conditionValue2,conditionValue3的字段里. // 35: 对非当前目标的一个敌人,释放spell技能(dot技能). 比如术士在攻击目标A,同时会给目标B一个浩劫buff.注意,该项在auraSpell,conditionValue,rangeVal有效,不要写到conditionValue2,conditionValue3的字段里. // 36: 如果有buff的队友数量大于等于conditionValue,那么释放spell攻击目标. // 37: 如果有buff的队友数量小于等于conditionValue,那么释放spell治疗队友. // 38: 如果技能ID是conditionValue的技能处于CD中,那么就释放spell. 比如A技能CD了,就用B技能过渡.

// conditionValue 条件的值 // range 检测的范围,conditionType = 9,10,11时候使用 // 如果minLevel=0,maxLevel=40,那么player的level如果在这个范围内,那么就匹配了,加载这些信息 // rangeVal 检测的范围,conditionType = 8时候使用 // isMe spell的释法是对自己还是对敌人的. 0 : 敌人 1 : 自己 // isAoe 是否是aoe技能, RangeEnemyListByTargetRange(pTarget, NEEDFLEE_CHECKRANGE).size() >= 3 // check aoe // talk 说话的文本 // auraSpellFixed 0:使用自身等级的aura spell,1:使用固定值的aura spell(比如战士的破甲) // checkCaster 检测施法者是否为我,跟auraSpell有关.0:不检测 1:检测. 比如破甲效果一个人打就行,那么checkCaster为0. 比如2个战士都想打撕裂,那么checkCaster为1. // 给conditionType=12,13使用 // unitFlag 0:通用,1:针对小怪,2:针对boss // healthFlag: 0:默认值 1:直接治疗 1:预读打断的治疗,比如目标hp>=95%,会取消治疗,小于则会继续读完治疗 // isAllHeal 0:单体治疗 1:群疗

我又不是作者,作者有个QQ群,有一群人帮他测试,提供战术 打法 。 而作者也是参考某个收费端,泄露的源码,在加以改进的。 目前已经很成熟了,不过最近停更了,还有很多问题没有解决。 和github一样,都是沿着前人的路继续走下去。 我充其量只能提供些想法建议。 我只是认为机器人打怪,应该像战场上指挥士兵一样。 充分让每个职业各展所长,每个机器人都是一枚棋子,出现在他应该出现的地方。 以后即使引入AI学习,也是指挥的事,就像阿法狗一样。

great vision! come and CODE! 如果知道是参考的哪个收费端泄露的代码,相对来说,在这个模块实现起来会容易很多