无名杀吧 关注:64,780贴子:289,312

回复:【水】来开一个如何写AI的“教程”贴

只看楼主收藏回复

终于有系统的AI教学贴了吗?


IP属地:广东20楼2022-10-13 13:36
收起回复
    那么,我们来看看无名杀AI编写的难点——主动技能的AI该如何写:
    无名杀主动技能的AI格式是ai:{xxx:xxxx,yyy:yyyy},这种key:value的格式,也就是说,主动技能的ai本身就是一个对象,这个对象包含了很多key,通过key的value来控制各种效果,学主动技的AI,也就是学各种key的用法,这么说是不是好理解一点了呢
    比如某一个主动技的ai这么写:
    ai:{
    expose:0.3,
    threaten:8.8,
    order:7,
    result:{
    player:1,
    },
    }
    来让我们逐个看看这些key里有些什么好东西来控制这个技能
    expose即身份暴露度,使用这个技能会给使用者加上0.3的身份暴露值(当暴露值为1时意味着所有ai完全明确你的身份),什么技能需要加这个key呢?比如晋贾充的“凶竖”就是必须得加的,因为凶竖是一个攻击技能,但他不会通过卡牌造成伤害,所以单独只发动这个技能,AI无法识别到技能使用者其实是你的对立面,达不到实际的效果(实际上别人对你使用凶竖,必定应该是你的对立面)
    threaten即嘲讽值,嘲讽值越高的人越会成为AI优先攻击的对象,比如技能“英姿”就有这么个标签,通常你觉得你的技能很厉害,而被打又不会对对面造成什么负面影响时,可以给自己的技能加这个标签,模拟现实中技能厉害但没什么防御的武将很容易挨揍的情况。当然threaten还有些其他的用途,因为threaten高一定程度代表拥有这个技能的武将“较为厉害”,所以“放权”之类的技能选择目标时也会参考目标的threaten值优先放权。
    上面两个标签虽然有用,但是并不影响技能的实际使用,就算你不写也不会有大问题,但是下面两个标签就直接决定你技能能不能正确释放了。
    order这个技能释放的时机,简单点说,值越高越优先放,order:7的话,基本属于AI装完装备就要开始使用技能了,如果order是10基本上一到可以用的时机就会立即先放技能,而order为1的话就是可以用技能的最后时机去用这个技能了,这个order标签是必填的,否则技能无法正常释放。
    result,这个标签影响AI是否使用技能,里面又有player和target两个子标签。技能不需要选择目标时,只需要写player标签,返回值大于0,AI就会在order规定的时机发动技能,返回值小于等于0就不会发动技能。如果技能需要选择目标就用target标签,target返回正数选择队友发动,返回负数选择敌方发动。


    IP属地:湖北21楼2022-10-13 16:14
    收起回复


      IP属地:福建24楼2022-10-20 21:13
      回复
        大佬问一下在可以弃置一至X(常数)张牌的chooseToDiscard里面,我想让ai按照实际情况弃置相应数量张牌,这个应该怎么弄呢(比如var role=game.countPlayer((current)=>((current.countCards('h')>0)&&(ai.get.attitude(player,current)<0))),让ai最多只弃置role张牌)


        IP属地:浙江25楼2022-10-30 14:06
        收起回复