跳转至内容

FPI 脚本

0% developed
来自维基教科书,开放世界中的开放书籍

FPI 脚本语言是一种简单的基于触发的人工智能语言,用于在游戏中对对象进行编程。它包含简单的 if/then 语法以及预定义的条件语句和命令列表。

condition,[第二个条件(可选)]:action,[第二个动作(可选)]

语句以冒号开头。紧随其后是条件,用于测试某件事是否为真。如果有多个条件,则用逗号隔开。列出所有条件后,将有另一个冒号。第二个冒号将条件与操作隔开。如果您熟悉其他编程语言,这类似于 IF THEN 条件语句。

if(CONDITION) { ACTION }

翻译成

:CONDITION: ACTION

还有注释来帮助您组织脚本,注释以分号开头,例如

FPI 脚本教程 第一部分

[编辑 | 编辑源代码]

FPI 脚本可用于多种操作,包括对象行为和人工智能脚本。有关每个子句的更详细描述和示例,请参见FPI 使用示例

对象行为

[编辑 | 编辑源代码]

这是 FPI 脚本最常见的用途之一。下面的脚本显示了一个简单的伤害区域脚本,每次玩家进入伤害区域时,它都会从玩家那里扣除 5 生命值。

人工智能脚本
描述

state0,plriswithin=zone,plraddhealth=-5

请注意代码开头处的“state0 命令。状态就像积木 - “state0 始终是代码段中的第一个状态。它是主要基础。其他代码行都是从 “state0” 命令调用的。


人工智能行为

[编辑 | 编辑源代码]

人工智能行为告诉 NPC 或玩家如何表现。除了主要动画之外,所有内容都是建立在 AI 脚本之上的。与对象行为脚本一样,代码始终必须以“;人工智能脚本”命令开头。没有它,您的代码将无法运行。另一个变化是“desc”命令。

"从对象行为脚本中获取"

人工智能脚本
描述


AI 脚本

[编辑 | 编辑源代码]
人工智能脚本
desc () = 跟踪并射击


请注意 desc 后的命令。“跟踪并射击”告诉角色要采取的操作。不言自明。

在第二部分中,我将进一步解释 rotateplr 命令,以及如何将其运用到实际应用中。

条件列表

[编辑 | 编辑源代码]
  • ACTIVATED=X 当实体的激活值等于 X 时为真
  • ALPHAFADEEQUAL=X 当 alpha 值等于 X 时为真
  • ALWAYS 始终为真
  • ANIMATIONOVER=X 当动画 X 完成时为真
  • ANYFURTHER=X 当不在 X 个四分之一瓦片范围内时为真
  • ANYWITHIN=X 当任何其他实体在 X 个四分之一瓦片范围内移动时为真
  • ASSOCIATED=X 当实体与玩家关联(抬起)时为真
  • ENTITYWITHINZONE 当实体在触发区域内时为真
  • FRAMEATEND=X 当动画 X 结束时为真
  • FRAMEATSTART=X 当动画 X 开始时为真
  • FRAMEBEYOND=X Y 当动画 X 超过帧 Y 时为真
  • FRAMEWITHIN=X Y 当动画 X 在帧 Y 内时为真
  • HEADANGLEGREATER=X 当头部角度大于 X 时为真
  • HEADANGLELESS=X 当头部角度小于 X 时为真
  • HEALTH=X 当生命值等于 X 时为真
  • HEALTHLESS=X 当生命值小于 X 时为真
  • IFWEAPON=X 当实体使用的武器处于准备状态且 X 为 1 时为真
  • LOSETARGET=X 当实体在 X 次尝试后卡住时为真
  • NEARACTIVATABLE=X 当实体即将被激活时为真
  • NEVER 从不为真
  • NEWWEAPONCANBESEEN=X 当实体可以看到更好的武器时为真
  • NOISEHEARD=X 当实体从场景中听到广播噪音时为真
  • PLRALIVE=X 当玩家活着且 X 为 1 时为真
  • PLRCANBESEEN 当玩家可见时为真
  • PLRCANNOTBESEEN 当玩家不可见时为真
  • PLRDISTFURTHER=X 当玩家距离超过 X 个单位时为真
  • PLRDISTWITHIN=X 当玩家距离小于 X 个单位时为真
  • PLRELEVFURTHER=X 当玩家在垂直方向上不可见 X 度时为真
  • PLRELEVWITHIN=X 当玩家在垂直方向上可见 X 度时为真
  • PLRHASKEY=X 当玩家按下以值 X 表示的键时为真
  • PLRHIGHER=X 当玩家比实体高 X 个单位时为真
  • PLRINGUNSIGHT=X 当实体的枪口瞄准玩家时为真
  • PLRUSINGACTION=X 当玩家执行使用操作时为真
  • PLRWITHINZONE 当玩家在触发区域内时为真
  • QUANTITY=X 当数量等于 X 时为真
  • RANDOM=X 当 0 到 X 之间的随机值等于 1 时为真
  • RAYCAST=X Y 当射线从 X 到 Y 个单位击中前方的东西时为真
  • RAYCASTBACK=X 当射线从 X 到 Y 个单位击中后方的东西时为真
  • RAYCASTUP=X 当射线从 X 到 Y 个单位击中上方的东西时为真
  • REACHTARGET=X 当实体到达目标时为真
  • SHOTDAMAGE=X 当受到的伤害超过值 X 时为真
  • SPEED=X 当速度等于 X 时为真
  • STATE=X 当存储在 FPI 脚本中的值等于 X 时为真

这些是条件词,如果所有条件都为真,它们将执行操作

  • WAYPOINTSTATE=X 当航点状态值等于 X 时为真
  • 状态 0 表示实体尚未开始跟踪航点
  • 状态 1 表示实体正在寻找最近的航点标记作为起点
  • 状态 2 表示实体正在沿着航点线跟踪其当前航点标记
  • 状态 3 表示实体已到达航点标记,需要决定下一步行动
  • 状态 4 表示实体已到达航点标记,它会分裂成多个其他方向
  • 状态 5 表示实体已到达当前航点结构的末尾,需要做出决策

注意:状态 999 表示实体已置于零航点模式,在这种模式下,实体会简单地忽略航点。

  • ANYFURTHER=X 当任何实体距离它超过 X 个单位时为真
  • ANYWITHIN=X 当任何实体距离它小于 X 个单位时为真
  • ANYWITHINZONE 当任何实体在它的区域内时为真
  • CANTAKE 当玩家可以收集实体时为真
  • ESCAPEKEYPRESSED=X 当按下 Escape 键时为真
  • HUDEDITDONE=X 当使用“可编辑”的 HUD 项目 X 时为真
  • HUDHAVENAME 当未输入玩家名称时为真
  • HUDSELECTIONMADE=X 当用户点击 HUD 按钮 X 时为真
  • IFMARKER=X 当场景中存在实体先前放置的标记时为真
  • IFPLRTRAIL=X 当存在玩家留下的轨迹时为真
  • NORAYCASTUP=X Y 当向上 X 到 Y 没有碰撞时为真
  • PLRHEALTHGREATER=X 当玩家生命值大于 X 时为真
  • PLRHEALTHLESS=X 当玩家生命值低于 X 时为真
  • SCANCODEKEYPRESSED=X 当 X=按下键的键码时为真。例如:SCANCODEKEYPRESSED=5 当按下 Tab 键时为真
  • TIMERGREATER=X 当内部 FPI 计时器超过 X 毫秒时为真

动作列表

[编辑 | 编辑源代码]
  • ANIMATE=X 自动播放动画 X
  • DECFRAME=X 在动画 X 中减少一帧
  • DESTROY 销毁实体
  • FLOATRATE=X 使实体以 X 的悬停速度在空中漂浮
  • FORCEBACK=X 以 X 的倍数对实体施加向后力
  • FORCEBOUNCE=X 对实体施加力,使其以 X 的倍数弹回
  • FORCEFORE=X 以 X 的倍数对实体施加向前力
  • FORCELEFT=X 以 X 的倍数对实体施加向左力
  • FORCERIGHT=X 以 X 的倍数对实体施加向右力
  • FREEZE=X 阻止实体移动
  • INCFRAME=X 在动画 X 中增加一帧
  • MOVEBACK=X 将实体向后移动 X 个单位
  • MOVEFORE=X 将实体向前移动 X 个单位
  • MOVEUP=X 将实体向上移动 X 个单位
  • NONE 无操作
  • RESETHEAD 如果实体有头部,则重置头部角度
  • ROTATEHEAD=X 将实体的头部旋转 X 度
  • ROTATEHEADRANDOM=X 以 X 度的随机角度旋转实体的头部
  • ROTATEIY=X 围绕 Y 轴对实体进行 X 度的增量旋转
  • ROTATETOPLR 将实体旋转以面向玩家
  • ROTATEY=X 将实体绕 Y 轴旋转 X 度
  • RUNFPI=X 按名称 X 运行另一个 FPI 脚本(即,appear1.fpi)
  • RUNFPIDEFAULT=X 运行默认 FPI 脚本,X 值为 (0-初始化、1-主脚本、2-结束)
  • SETFRAME=X 设置动画 X 的起始帧
  • SPINRATE=X 以 X 的速度绕 Y 轴旋转实体
  • STATE=X 将内部变量 State 的值设置为 X
  • SUSPEND 永久禁用实体,并保持可见

关于提供的角色,内置了可以播放的动画。

  • 0 = 生成
  • 1 = 空闲
  • 2 = 缓慢移动
  • 3 = 左侧横移
  • 4 = 右侧横移
  • 5 = 快速移动
  • 6 = 重新装填武器(或投掷)
  • 10 = 攀爬
  • 11 = 正面冲击
  • 12 = 正面反弹
  • 13 = 正面起身
  • 14 = 背面冲击
  • 15 = 背面反弹
  • 16 = 背面起身
  • 17 = 左侧冲击
  • 18 = 左侧反弹
  • 20 = 右侧冲击
  • 21 = 右侧反弹
  • 31 = 蹲姿空闲
  • 32 = 蹲姿缓慢移动(相同)
  • 33 = 蹲姿左侧横移(相同)
  • 34 = 蹲姿右侧横移(相同)
  • 35 = 蹲姿快速移动(相同)
  • 36 = 蹲姿重新装填武器(或投掷)
  • 40 = 自由形式空闲
  • 41 = 自由形式移动
  • 50 = 武器生成
  • 51 = 武器空闲
  • 52 = 武器缓慢移动
  • 53 = 武器左侧横移
  • 54 = 武器右侧横移
  • 55 = 武器快速移动
  • 56 = 武器重新装填武器(或投掷)
  • 57 = 武器全新攀爬
  • 61 = 武器正面冲击
  • 62 = 武器正面反弹
  • 63 = 武器正面起身
  • 64 = 武器背面冲击
  • 65 = 武器背面反弹
  • 66 = 武器背面起身
  • 67 = 武器左侧冲击
  • 68 = 武器左侧反弹
  • 70 = 武器右侧冲击
  • 71 = 武器右侧反弹
  • 81 = 武器蹲姿空闲
  • 82 = 武器蹲姿缓慢移动(相同)
  • 83 = 武器蹲姿左侧横移(相同)
  • 84 = 武器蹲姿右侧横移(相同)
  • 85 = 武器蹲姿快速移动(相同)
  • 86 = 武器蹲姿重新装填武器(或投掷)
  • 90 = 武器自由形式空闲
  • 91 = 武器自由形式移动


  • 3DSOUND=X 播放由 X 文件名指定的 3D 音效。使用 $0 表示 soundest
  • ACTIVATE=X 使用值 X 激活此实体
  • ACTIVATE=X 将实体的激活值设置为 X
  • ACTIVATEALLINZONE=X 激活触发区域内的所有实体,使用 X
  • ACTIVATEIFUSED=X 激活在 IFUSED 属性中描述的实体
  • ACTIVATEIFUSEDNEAR=X 激活在 IFUSED 中描述的实体,并靠近它
  • ACTIVATETARGET=X 激活之前标记为目标的实体,使用 X
  • ACTIVEALLINZONE 激活实体区域内的所有内容
  • ADVFRAME=X 将动画前进 X%
  • ALTTEXTURE=X 根据 X 为零或一设置使用的纹理
  • AMBIENCE=X 将场景中的整体环境光级别设置为 X
  • AMBIENCEBLUE=X 将环境光的蓝色分量设置为 X
  • AMBIENCEGREEN=X 将环境光的绿色分量设置为 X
  • AMBIENCERED=X 将环境光的红色分量设置为 X
  • BACKDROP=X 使用 X 文件名加载并粘贴屏幕背景
  • CHOOSESTRAFE 随机选择一个横移方向(即左/右/前)
  • COLLECTTARGET 如果目标是可收集的,则在靠近时收集目标
  • COLOFF 禁用玩家与此实体的所有碰撞
  • COLON 启用玩家与此实体的所有碰撞
  • CONTINUEGAME=X 继续游戏操作,发出指令进入下一页
  • DECALPHAFADE=X 递减 Alpha 渐变,X 为目标值
  • DROPMARKER 实体以后可以返回的放置标记
  • FLOORLOGIC=X 如果 X 为 1,实体永远不会离开其 Y 位置
  • FOG=X 当 X 为 1 时,设置场景中的雾模式
  • FOGBLUE=X 将雾的蓝色分量设置为 X
  • FOGGREEN=X 将雾的绿色分量设置为 X
  • FOGRED=X 将雾的红色分量设置为 X
  • FOLLOWPLR 如果存在,则跟随玩家的轨迹
  • HOSTGAME 触发多人游戏,被 HOSTED
  • HUDANIM=X 设置动画序列的 X 文件名(不包括 #.TGA)
  • HUDBLUE=X 设置 HUD 项目的蓝色分量
  • HUDFADEOUT 使 HUD 项目从屏幕上淡出
  • HUDFONT=X 设置 HUD 项目的字体名称
  • HUDGREEN=X 设置 HUD 项目的绿色分量
  • HUDHIDE=X 将 X 设置为要隐藏的 HUD 项目的名称
  • HUDIMAGE=X 设置 HUD 项目的图像文件名
  • HUDIMAGEFINE=X 使用高质量加载 HUD 的图像
  • HUDMAKE=X 当所有 HUD 项目设置完毕时,使用此操作来最终创建 HUD
  • HUDNAME=X 设置要创建的 HUD 项目的名称
  • HUDRED=X 设置 HUD 项目的红色分量
  • HUDRESET=X 调用此方法重置 HUD 创建系统
  • HUDSHOW=X 将 X 设置为要显示的 HUD 项目的名称
  • HUDSIZE=X 设置 HUD 项目的字体大小
  • HUDSIZEX=X 设置 HUD 项目的 X 大小 90
  • HUDSIZEY=X 设置 HUD 项目的 Y 大小
  • HUDSIZEZ=X 设置 HUD 项目的 X 大小
  • HUDTEXT=X 设置将用于代替 HUD 项目无图像的文本
  • HUDTYPE=X 设置 HUD 类型 (1-生命值、2-生命值、3-武器)
  • HUDUNSHOW=X 将 X 设置为要取消隐藏的 HUD 项目的名称
  • HUDX=X 设置要放置 HUD 项目的 X 位置百分比
  • HUDY=X 设置要放置 HUD 项目的 Y 位置百分比
  • HUDZ=X 设置要放置 HUD 项目的 Z 位置百分比
  • INCALPHAFADE=X 增加 Alpha 渐变,X 为目标值
  • INCSTATE=X 将状态变量递增 X
  • JOINGAME 触发多人游戏,被 JOINED
  • LIGHTBLUE=X 淡蓝色
  • LIGHTGREEN=X 淡绿色
  • LIGHTOFF=X 灯光关闭
  • LIGHTON=X 灯光开启
  • LIGHTRANGE=X 灯光范围
  • LIGHTRED=X 淡红色
  • LOADGAME=X 触发加载已保存的游戏
  • LOOKATPLR=X 直接看向玩家,即使看不到玩家
  • LOOKATTARGET 旋转实体的头,使其面向目标
  • LOOPSOUND=X 循环播放由 X 文件名指定的 3D 音效。
  • MOVETOTARGET 移动到目标
  • MUSIC=X 加载并播放使用 X 文件名的 WAV
  • MUSICVOLUME=X 将音乐音量设置为 0-100 范围内的值
  • NEWGAME=X 触发运行新游戏(通常从标题页面开始)
  • NEXTMARKER 指示实体转到最后一个放置的标记
  • NOGRAVITY 为物理实体关闭重力
  • PAUSEGAME=X 触发游戏暂停,通常进入游戏菜单
  • PIVOTRANDOM=X 随机绕轴旋转,面向另一个方向,旋转 X 度
  • PLRADDHEALTH=X 将 X 点添加到玩家的生命值
  • PLRASS=X 将此实体与玩家关联(提升)
  • PLRDROP 用于从玩家的库存中删除物品
  • PLRMOVEDOWN=X 将玩家向下移动 X 个单位
  • PLRMOVEEAST=X 将玩家向东移动 X 个单位
  • PLRMOVEIFUSED=X 如果玩家执行 USE 操作,则按上述方式移动玩家
  • PLRMOVENORTH=X 将玩家向北移动 X 个单位
  • PLRMOVESOUTH=X 将玩家向南移动 X 个单位
  • PLRMOVETO=X 将玩家移动到 X 实体名称描述的新位置
  • PLRMOVEUP=X 将玩家向上移动 X 个单位
  • PLRMOVEWEST=X 将玩家向西移动 X 个单位
  • PLRNOASS=X 取消将此实体与玩家关联
  • PLRTAKE 用于将实体添加到玩家的库存中并获取其资产
  • QUITGAME=X 触发当前游戏退出,返回到标题页面
  • RELOADWEAPON 从实体的无限弹药库存中重新装填武器
  • REPEATGAME 触发多人游戏重复播放
  • RESETMARKERS 重置此实体放置的所有标记
  • RESUMEGAME=X 触发游戏恢复,在之前暂停后
  • ROTATETOTARGET 旋转实体,使其面向目标
  • RUNDECAL=X 从实体创建贴花,X 为特定模式 1-6
  • RUNFORE 使实体以跑步速度向前移动
  • SAVEGAME=X 触发当前游戏的保存
  • SETALPHAFADE=X 将 Alpha 值设置为 X,导致实体透明
  • SETTARGET 为实体设置内部目标,遵循“目标”条件
  • SHAPEDECAL=X 将实体的贴花模式更改为 X
  • SHOOTPLR 运行在角色属性中指定的内部 FPI 脚本 SHOOT
  • SKY=X 将天空盒设置为 X 文件名指定的天空模型
  • SKYSCROLL=X 将天空滚动纹理设置为 X 文件名指定的文件
  • SOUND=X 播放由 X 文件名指定的音效。使用 $0 指定 soundest
  • SOUNDSCALE=X 按百分比 X 更改 3D 音效比例
  • SPAWNOFF 关闭实体的生成能力
  • SPAWNON 启用实体的生成能力
  • STRAFE 执行先前选择的横移,以躲避玩家射击
  • TIMERSTART 将 FPI 脚本计时器重置为零,允许计时
  • TRIGGERFORCE=X 以 X 的大小对实体施加力
  • USEWEAPON 实体朝目标方向开火任何武器
  • VIDEO 全屏播放动画文件一次
  • WAYPOINTNEXT 指示实体找到下一个路点
  • WAYPOINTPREV 指示实体找到上一个路点
  • WAYPOINTRANDOM 指示实体选择一个随机路点方向
  • WAYPOINTREVERSE 使实体反向行驶,走另一条路
  • WAYPOINTSTART 指示实体找到最近的路点
  • WAYPOINTSTOP 停止实体跟随路点
华夏公益教科书