NPC (TeaScript)

来自SMBX 中文百科
TeaScript/NPC
跳转到导航 跳转到搜索

npc(index).name,是 NPC 的一个属性,一般多用于自定义NPC的制作,或者控制NPC相关的内容。

用法

生成NPC

在TeaScript脚本里,使用call NCreate(id, x, y, xsp, ysp, advset, cdata)dim NPID as integer = NCreate(id, x, y, xsp, ysp, advset, cdata)函数创建一个NPC,后者会传递该NPC的.permid

call NCreate(id, x, y, xsp, ysp, advset, cdata)
'id - 创建的 NPC 的对象ID。
'x - NPC 的 x 坐标。
'y - NPC 的 y 坐标。
'xsp - NPC 创建时初始水平速度
'ysp - NPC 创建时初始垂直速度
'advset - NPC 的高级值
'cdata - NPC 的额外数据

更多信息请访问 NCreate (函数) 查看。

使用

读取某个值:npc(index).name

修改某个值:npc(index).name = value

如果使用自定义NPC,一般会在脚本片段加入以下代码:

with npc(sysval(param1))
    'executes, sysval(param1)返回NPC的PermID?
end with

一般情况下,sysval(param1) 参数代表该 NPC 的 PermID,更多信息请访问 Sysval(Param)

参数

基础

参数名 数据类型 介绍
id double NPC的对象ID(1-357)
permid double NPC的唯一ID值,此值为只读。
x double NPC的X坐标
y double NPC的Y坐标
width double NPC 的判定宽度,此值还影响图形GFX的宽度。
height double NPC 的判定高度,此值还影响图形GFX的高度。
xsp double NPC 的横向速度。
ysp double NPC 的纵向速度。
prx double NPC 的初始位置的横向坐标。
pry double NPC 的初始位置的纵向坐标。
addvx double NPC 的所在图层的横向速度。
addvy double NPC 的所在图层的纵向速度。
bkupx double NPC 的备用横坐标。表示 NPC 生成时所处的横坐标。
bkupy double NPC 的备用纵坐标。表示 NPC 生成时所处的纵坐标。

图形

参数名 数据类型 介绍
curframe double NPC 当前播放的动画帧的序列。
curtimer double NPC 的自定义计时器。用于表示 NPC 播放动画帧的计时。在游戏中每过一帧数值会加 1,当到达 NPC 自身的帧速时将会重置为 1 且开始播放下一个动画帧。设置为 0 来使 NPC 停止播放动画。(不适用于具有复杂动画帧系统的 NPC)
zpos double NPC 的 z-index 坐标(为0~1区间)(0为最靠前景,1为最靠背景。)
extx double NPC 所使用的拓展素材的横向位置。(需要勾选GFXSplitHeight才会生效。如果此值为-1,则NPC会隐形。)
exty double NPC 所使用的拓展素材的纵向位置。(需要勾选GFXSplitHeight才会生效。如果此值为-1,则NPC会隐形。)
height double NPC 的判定高度,此值还影响图形GFX的高度。
forecolor double NPC 的颜色,使用rgba(red, green, blue, alpha)或整数值控制。
forecolor_r double NPC 的 rgba 前景色中的红色通道的数值。
forecolor_g double NPC 的 rgba 前景色中的绿色通道的数值。
forecolor_b double NPC 的 rgba 前景色中的蓝色通道的数值。
forecolor_a double NPC 的 rgba 前景色中的 alpha(即透明度) 通道的数值。

行为

npc(id).index
参数名 数据类型 介绍
facing double NPC 的朝向,0是左,1是右。
friendly double NPC 是否为友好状态。(该状态下 NPC 和玩家无法进行除对话外的交互)
nomove double NPC 是否为不移动状态。(该状态下 NPC 的横向速度为0,朝向始终面向玩家的方向)
health double NPC 当前的血量。
alive double NPC 是否处于存活状态(0 为死亡状态,1 为存活状态)
extset double NPC 的外部设置。对于泡泡和 SMW 朱盖木,该值将决定它们所包含/投掷的 NPC。
advset double NPC 的高级值,更多信息请访问 NPC 的额外值
haswing double NPC 的翅膀行为数值:
0:无翅膀
1:跳跃
2 :左右悬浮
3 :上下悬浮
4 :追踪玩家
5 :前进悬浮
6 :朱盖木行为
7 :NPC-308 控制(方向与速度)
8 :SMW 轨道线
target double NPC 的目标。(值为玩家的ID,如果玩家1死亡,玩家2会被视为玩家1。)
ivala
ivalb
ivalc
double NPC 的自定义变量,通常用作自定义NPC,部分NPC会有自己的数据。

更多信息请访问 NPC 的额外值

stand double NPC 是否处于站立状态。(即是否站在地面上或站在可以站立的其它 NPC 上)
inwater double NPC 是否处于水中。
scount double 表示在同一位置有多少个 NPC。1.4.5 此值不可用!

事件

注:此值可以是事件和脚本,也可以是自定义变量的一部分,但这就需要避免事件名称和脚本名称为该NPC使用的数值。

参数名 数据类型 介绍
deathevent string NPC 死亡时所触发的事件的名称。
activeevent string NPC 在进入玩家屏幕视窗时所触发的事件的名称。
talkevent string NPC 谈话时所触发的事件的名称。
grabedevent[1] string NPC 被玩家抓取时所触发的事件的名称。
layerclearedevent string NPC 所在的图层内的对象全部被清除时所触发的事件的名称。
nextframeevent string NPC 每帧所触发的事件的名称。
touchevent string 表示玩家和 NPC 接触时所触发的事件的名称。

其他

参数名 数据类型 介绍
name string NPC 的对象名称,通常多用于自定义NPC。
hide string 1为隐藏,0为显示。(隐藏时NPC不执行脚本。)
dtcself double NPC 是否可以和其它 NPC 产生碰撞。(0 为是,1 为否)
dtcplayer double NPC 是否可以和玩家互动。(0 为是,1 为否)

只有当NPC启动了PlayerBlockPlayerBlockTop属性才有效,尽管如此,仍会伤害到玩家。

dtcliquid double NPC 是否可以和流体互动。(0 为是,1 为否)
stimer double 暂不了解其实际用途,若设置为正数则该参数的数值每帧会减少 1,直到降低到 0。设置为负数则不会有变化。可以用于作为 NPC 内置的计时器,也可以设置为负数,作为 NPC 的另一个自定义变量使用。
langle double 未知用途。

自定义NPC玩法

由于 NPC 很高的自由度,甚至可以以此开发其他玩法,这使得自定义变量尤其重要。

目前可用的自定义变量列表如下:

index 参数名 描述 数据 原因
advset 附加数据 double 不必多说,NPC的高级值用得好板栗仔都能成神(doge)
ivala 自定义变量A double 内置变量,一般用于操控一些逻辑程序的运行。
ivalb 自定义变量B double 同上
ivalc 自定义变量C double 同上
langle 暂不了解其实际用途。 double 目前这个值对NPC的是没有任何影响,可以作为另一个自定义变量使用。
stimer 可以用于作为 NPC 内置的计时器 double 由于是每帧-1,所以可以用作倒计时装置。
name NPC 的附加名称。 string Object Name,按字面意思是标记该物件的名称,但这个变量也可以当做判断某些程序的字符串。或者拿来当做数字使用。
talkevent 表示和 NPC 谈话时所触发的事件的名称。 string 事件触发名,如果没有事件也可以不用浪费这些参数,这些参数也可以充当自定义变量使用,另外由于是事件名,所以尽量避免特定事件名。(例如尽量不用纯数字名称创建事件等等。)
Deathevent 表示 NPC 死亡时所触发的事件的名称。 string
Touchevent 表示玩家和 NPC 接触时所触发的事件的名称。 string
Activeevent 表示 NPC 进入屏幕时所触发的事件的名称。 string
Nextframeevent 表示 NPC 的动画帧播放到下一帧时所触发的事件的名称。 string
Grabedevent 表示 NPC 被玩家抓取时所触发的事件的名称。 string
Layerclearedevent 表示 NPC 所在的图层内的对象全部被清除时所触发的事件的名称。 string
  1. 值得一提的是,.grabedevent这个参数虽然在英语语法中存在错误(grab 的过去式是 grabbed。) ,但确实是一个参数名。