FreeKill/lua/server/ai/ai说明.txt

46 lines
4.3 KiB
Plaintext
Raw Normal View History

2023-09-21 15:21:28 +00:00
拓展包ai文件写法
按照包文件夹名+_ai例如standard_cards是standard_cards_ai.lua直接放在init.lua同位置下。
分辨敌我:
设置反值内值同时设置技能和牌的身份值例如杀的值为100主公或跳身份的忠被杀时来源反值+100当一名角色反值大于50时将识别为反贼当跳反者杀反贼或跳忠者杀主忠他内值就+100内值大于50的将被识别为内奸当然标记身份是以最高值开始标记身份例如场上两名角色为400和300的最高反值但是反贼只剩下一个那么就只将400的标记为反贼其余身份也是如此。优先针对虚弱相同虚弱再优先仇恨。
要让身份值加给角色就需要在使用技能或牌时接入ai接口所以我在触发时机函数的最后加了接口用于获取此时触发时机的数据例如1号位杀2号位此时触发了指定目标时机就可以通过接口接入ai然后让来源反值+100。但是N神不想这样增加接口但我还不了解怎么通过其他方式同步获取使用技能或牌的数据......
空闲点ai出牌
先定义阶段技或卡牌的优先度然后获取角色所有可用的阶段技和卡牌按照优先度进行排序再进行for列表逐一检测是否可使用可使用则检测是否有使用函数有则执行使用函数在使用函数里进行定义self.use_id和给self.use_tos添加角色id然后系统检测有self.use_id则输出使用如果是使用卡则self.use_id=卡id阶段技是self.use_id=子卡表{})同时可以给self.use_tos添加角色id做为牌或技能的目标会同步输出。
请求ai使用牌
包含请求无懈,请求桃,借刀请求杀等
请求无懈有正无懈和反无懈系统根据生效锦囊牌名定位请求代码之后可以增加来源和目标技能名来修正是否使用例如要通过伤害锦囊卖血时可以通过技能名阻止友方使用无懈同时请求代码会带有正反无懈的参数根据这个参数进行分类讨论请求代码需定义self.use_id为将要使用的无懈id当然也可以定义self.use_id=true这样就会根据卡牌优先度选择第一个无懈使用。因为要区分正反无懈我在room里的请求无懈时增加了fk.askNullification和fk.askNullificationData前者用来区分正反无懈后者记录要无懈的锦囊数据因为直接获取使用数据可能会是上个无懈的数据而不是最初锦囊的数据当然我并不知道其他的识别正反无懈和获取源锦囊生效数据的方法只能是手动增加记录的这个样子来实现.....
请求桃默认给友军使用,但是可以通过来源和目标的技能来修正来源是否要使用桃
剩下的请求牌根据提示信息名进行决策,兜底决策是套用空闲点出牌代码,所以说请求使用牌和空闲点使用牌的的函数是相通的,如果请求使用牌没有定义函数,就会调用空闲点使用牌的函数来兜底。
技能转化牌:
急救桃、倾国闪等
也是通过技能名定位转化代码也需要定义self.use_id为技能子卡表{}就行,如果没有子卡就定义空表{},如果不定义就表示不使用转化技。
请求ai打出牌
杀响应决斗南蛮等
根据牌名或技能名来分别决策同时优先以技能名决策用于卖血技兜底决策是默认不响应因为有部分是技能请求响应例如鬼才改判打出。响应牌依旧是将要响应的卡的id定义为self.use_id懒得再定义个新参数
请求ai弃置牌
给每个牌名定义保留值,然后排序并优先弃置低保留值的牌。
请求ai发动技能
直接按照技能名分别决策。
技能请求选择角色是给self.use_tos添加目标id例如突袭
既请求选择角色又请求选择牌就再增加定义self.use_id为技能子卡表{}
请求ai选择角色区域牌
按照提示信息名分别决策,同时设置兜底决策,对敌军优先选择其重要的牌。
依旧是定义self.use_id为技能子卡表{}不论选择一张牌还是多张牌都是将牌id添加到表然后定义给self.use_id。
请求ai选择选项
按照提示信息名分别决策,同时兜底决策是随机选择。
这个就直接返回需要选择的选项就行。