台服dnf吧 关注:112,869贴子:1,697,117

翻译How to edit ai,如何编辑*.ai文件

只看楼主收藏回复

1. *.ai是什么?
这是一种脚本,用于编程,以决定AI角色将要做什么行动。
就像在C语言中进行编程一样,可以进行编程(当然,比C语言不方便得多 -_-)。
来自官方人员的吐槽


IP属地:河南来自手机贴吧1楼2023-03-25 12:03回复
    2. *.ai的种类
    .ai文件根据用途进行划分。以下是简单介绍:
    2.1. Action.ai
    用于指定攻击、上BUFF等行为。
    其返回值与 [key stream]中指定的键输入文件一一对应,并用于执行它们。
    2.2. DestinationSelect.ai
    用于确定移动的目的地选择模式。
    其返回值是代表预编码的 [目的地选择模式] 的数字。
    (请参考下方目的地选择方法的数字表)
    - 更多详细信息请参阅`destination select.rtf`文件。
    2.3. Event.ai
    用于确定发生特定事件时要执行的操作。
    其返回值与 [key stream] 中指定的键输入文件一一对应,并用于执行它们。
    2.4. MoveMethod.ai
    用于确定移动到目的地的方式。
    其返回值决定是跳跃、冲刺、走路等方式移动。
    (请参考下方移动方法的数字表)


    IP属地:河南来自手机贴吧2楼2023-03-25 12:04
    回复
      3. 条件变量介绍
      在输入条件变量时,可以省略 `。
      3.1. `[void]` = 没有输入
      3.2. `[mind]` = 未实现
      3.3. `[hp]` = 当前的生命值
      3.4. `[mp]` = 当前的法力值
      3.5. `[warlike]` = 好战性
      3.6. `[target distance]` = 当前目标距离(以像素为单位)
      3.7. `[random]` = 0 到 99 的随机值(不断变化!!)
      3.8. `[last result]` = 上一次运算的结果(某些特定函数将值放到此处)
      3.9. `[weapon type]` = 表示武器类型。
      melee近战 = 鬼剑士、格斗家、圣职者、战斗法师 = 0
      range远程 = 神枪手、魔法师等 = 1
      3.10. `[target state]` = 当前目标状态(站立、坐下、倒下、受伤、跳跃等)
      每种状态都有指定的编号(请参考下方状态编号表)


      IP属地:河南来自手机贴吧3楼2023-03-25 12:05
      回复
        3.11. `[state]` = 当前状态(站立、坐下、倒下、受伤、跳跃等)
        每种状态都有指定的编号(请参考下方状态编号表)
        3.12. `[event]` = 事件类型(受伤、攻击等)
        每种状态都有指定的编号(请参考下方事件编号表)
        3.13. `[attack success]` = 攻击是否成功(当攻击时 - Event.ai)
        使用方法)[think] [attack success] 1
        3.14. `[hit]` = 是否被命中(当受到伤害时 - Event.ai)
        使用方法)[think] [hit] 1
        3.15. `[element]` = 命中或打击所使用的元素属性(当进行攻击或受到伤害时 - Event.ai)
        使用方法)[think] [element] `元素属性`
        3.16. `[casting]` = 是否使用技能(使用技能时-Event.ai)
        使用方法)[think] [casting] 1
        3.17. `[distance]` = 检查与对手的距离(攻击或受到伤害时-Event.ai)
        使用方法)[think] [distance] `距离`
        3.18. `[my active status]` = 检查我的状态变化(持续-Action.ai)
        使用方法)[think] [my active status] `状态变化`
        3.19. `[my state]` = 检查我的状态(持续-Action.ai)
        使用方法)[think] [my state] `状态`
        3.20. `[target state]` = 检查对手的状态(攻击或受到伤害时-Event.ai,持续-Action.ai)
        使用方法)[think] [target state] `状态`


        IP属地:河南来自手机贴吧4楼2023-03-25 12:07
        回复
          3.21. `[my active status on]` = 检查我的状态变化(只在状态变化时-Event.ai)
          使用方法)[think] [my active status on] `状态变化`
          3.22. `[target active status]` = 检查对手的状态变化(攻击或受到伤害时-Event.ai)
          使用方法)[think] [target active status] `状态变化`
          3.23. `[attack type]` = 检查我的攻击类型(攻击或受到伤害时-Event.ai)
          使用方法)[think] [attack type] `类型`
          3.24. `[target type]` = 检查对手的攻击类型(当进行攻击或受到伤害时 - Event.ai)
          使用方法)[think] [target type] `类型`
          3.25. `[attack condition]` = 检查我的攻击条件(当进行攻击或受到伤害时 - Event.ai)
          使用方法)[think] [attack condition] `攻击条件`


          IP属地:河南来自手机贴吧5楼2023-03-25 12:13
          回复
            3.26. `[use skill]` = 检查是否使用了特定技能(当使用技能时 - Event.ai)
            使用方法)[think] [use skill] 技能索引
            3.27. `[stat change]` = 检查hp或mp的变化情况(持续进行 - Action.ai)
            使用方法)[think] [stat change] [hp/mp] `比较方式` 数值
            3.28. `[cooltime]` = 指定冷却时间(一旦指定,就会被应用 - Action.ai,Event.ai)
            使用方法)[think] [cooltime] 数值
            [true] [return] 1
            - 当[true]中出现[return]时,[cooltime]就会被应用
            - [cooltime]必须在[return]之前的[think]中定义才能生效
            3.29. `[my death]` = 检查自己是否已经死亡(当我死亡时 - Event.ai)
            使用方法)[think] [my death] 1
            3.30. `[target death]` = 检查对手是否已经死亡(当对手死亡时 - Event.ai)
            使用方法)[think] [target death] 1


            IP属地:河南来自手机贴吧6楼2023-03-25 12:14
            回复
              3.31. `[revive]` = 检查我是否已经复活(当我复活时 - Event.ai)
              使用方法)[think] [revive] 1
              3.32. `[combo]` = 检查连击数的变化情况(当发起攻击时 - Event.ai)
              使用方法)[think] [combo] `比较方式` 数值
              3.33. `[aerial]` = 检查空中连击数的变化情况(当发起攻击时 - Event.ai)
              使用方法)[think] [aerial] `比较方式` 数值
              3.34. `[overkill]` = 检查对手是否被杀死(当对手死亡时 - Event.ai)
              使用方法)[think] [overkill] 1
              3.35. [set friend character] = 设定友方角色(DestinationSelect.ai)
              使用方法)[set friend character] {AI角色编号}
              3.36. [set target monster] = 设定目标怪物(DestinationSelect.ai)
              使用方法)[set target monster] {怪物编号} {队伍(`enemy`或`neutral`或`friend`)}
              3.37. [set friend object] = 设定友方对象(DestinationSelect.ai)
              使用方法)[set friend object] {对象编号}
              3.38. [set bound] = 设定APC的移动范围(DestinationSelect.ai)
              使用方法)[set bound] {前方视野距离} {后方视野距离} {上方视野距离} {下方视野距离}
              3.39. [auto attack direction] = 设定当按下攻击键时,APC是否自动朝向敌人
              默认值为1,未启用此功能
              使用方法)[auto attack direction] {1或0}
              3.40. [my attack] = 检查APC是否发起了攻击
              使用方法)[my attack] {技能编号}


              IP属地:河南来自手机贴吧7楼2023-03-25 12:19
              回复
                3.41. [my hp down] = 检查APC的HP是否在下降
                使用方法)[my hp down] {`+`或`%`} {数值}
                使用示例)[my hp down] `%` 90
                3.41 [my mp down] = 检查APC的MP是否在下降
                使用方法)[my mp down] {`+`或`%`} {数值}
                3.42 [check use skill] = 检查特定技能是否可用
                使用方法)[check use skill] {技能编号}


                IP属地:河南来自手机贴吧8楼2023-03-25 12:26
                回复
                  不明觉厉


                  IP属地:浙江来自Android客户端9楼2023-03-25 12:28
                  回复


                    IP属地:河南来自手机贴吧10楼2023-03-25 12:30
                    回复
                      请教一下。key的里面的state check 代表啥意思


                      IP属地:上海来自Android客户端11楼2023-03-25 12:37
                      收起回复


                        IP属地:河南来自手机贴吧12楼2023-03-25 12:38
                        回复
                          `check random()`
                          说明)进行随机概率检查。
                          示例) `[void]` `check random()` 30.0 100.0
                          以30%的概率为true
                          `check bonus random()`
                          说明)在成功率中加上指定的奖励后进行随机概率检查。
                          示例) `[warlike]` `check bonus random()` 30.0 100.0
                          以「好战性」值 + 30%的概率为true
                          `is in range()`
                          示例) `[hp]` `is in range()` 100.0 500.0
                          如果当前血量大于或等于100并且小于或等于500,则为true
                          `get random()`
                          示例) `[void]` `get random()` 0.0 100.0
                          将0到99之间的一个随机值放入[last result]。


                          IP属地:河南来自手机贴吧13楼2023-03-25 12:40
                          回复
                            `is target in attack area()`
                            示例) `[void]` `is target in attack area()` 100.0(前) 15.0(后) 50.0(上) 50.0(下)
                            如果当前目标位于指定的前、后、上、下等区域,则为true
                            `enemy number of in attack area()`
                            例) `[void]` `enemy number of in attack area()` 100.0(前) 15.0(后) 50.0(上) 50.0(下)
                            在指定的前、后、上、下等区域内的敌人数量将放入[last result]。
                            `is the skill in cooltime()`
                            例) `[void]` `is the skill in cooltime()` 46.0
                            如果技能46当前在冷却中,则为true。


                            IP属地:河南来自手机贴吧14楼2023-03-25 12:41
                            回复
                              `number of in attack area()`
                              使用方法)[void] `number of in attack area()` {前} {后} {上} {下} {`enemy`/`neutral`/`friend`/`all`} {`monster`/`character`/`apc`/`passive object`/`summon`/`all`} {索引(如果为-1则不检查)或名称}
                              如果是“character”,则可以写职业名称(请参考OperatingValue.lst)


                              IP属地:河南来自手机贴吧15楼2023-03-25 12:43
                              回复