NPC (TeaScript)
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(即透明度) 通道的数值。 |
行为
| 参数名 | 数据类型 | 介绍 |
|---|---|---|
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 的翅膀行为数值:
|
target
|
double | NPC 的目标。(值为玩家的ID,如果玩家1死亡,玩家2会被视为玩家1。) |
ivalaivalbivalc
|
double | NPC 的自定义变量,通常用作自定义NPC,部分NPC会有自己的数据。
更多信息请访问 NPC 的额外值。 |
stand
|
double | NPC 是否处于站立状态。(即是否站在地面上或站在可以站立的其它 NPC 上) |
inwater
|
double | NPC 是否处于水中。 |
|
事件
注:此值可以是事件和脚本,也可以是自定义变量的一部分,但这就需要避免事件名称和脚本名称为该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启动了 |
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 |
- ↑ 值得一提的是,
.grabedevent这个参数虽然在英语语法中存在错误(grab 的过去式是 grabbed。) ,但确实是一个参数名。
| 请注意,这里以下所有的条目均以 SMBX 1.4.5 Patch 31.1 为基底。 | |
|---|---|
| 基础 | 语法 | 函数 | 回调型函数 |
| 组件 | BGP (大背景) | 背景物件 | 位图 | 方块 | 角色 | 特效 | 流体 | 计时器 | NPC | 文本 | 传送点 | 系统变量 |
| 技术性 | 额外值 | BSet 函数 | Playnote 函数 | 特殊图层 | 未知函数 | 自动运行事件 | 编辑器函数 |