List of Portal 2 Script Functions
本列表包含
传送门2中可用在VScript的所有与引擎相关的 Squirrel 类、函数和变量。
通过在控制台将 developer 设置为非零值、加载地图并执行 script_help,可以打印出官方文档。然而,该文档并未列出所有内容,因此需要通过其他方式查找。
除此之外,VScript 还包含许多 Squirrel 预定义的标准库函数。滑到下面 ↓以获取其列表。
全局变量
| 实例 | 类型 | 描述 |
|---|---|---|
| Entities | CEntities ↓ | 提供对服务器中已生成实体的访问。 |
| Documentation | table | 一个包含 3 个文档(classes、functions、instances)的表格,存储与函数文档相关的信息。只有developer级别大于 0 时存在。
|
全局钩子
这些钩子仅在根表中定义时才有效。
| 函数 | 函数声明 | 描述 | |
|---|---|---|---|
| ConnectOutputs | void ConnectOutputs(table table) | 在分配了脚本的实体生成后调用(即 vscripts 键值不为空),并将实体的作用域作为参数传递。与 OnPostSpawn 不同,此函数会立即调用,因此在重新加载地图时,此时可能某些实体尚不存在。最初,此函数用于在实体生成时自动连接其输出,但用于此目的的 Squirrel 代码因一个崩溃问题而被禁用,该崩溃发生在正则表达式在保存/加载后未能正确保存/加载时。 要重新启用此行为,请在根表中定义以下内容:
要使用此系统,请在实体脚本中定义一个函数,其名称格式为 |
Classes
CBaseEntity
这是一个用于实体的脚本句柄类。所有已生成的实体都拥有一个使用此类或其子类的脚本句柄。
所有游戏内的脚本句柄都可以通过 Entities ↓ 访问。实体脚本可以使用 self 来访问它们自己的脚本句柄。函数调用时可以访问 activator 和 caller 变量。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| __KeyValueFromInt __KeyValueFromFloat __KeyValueFromString __KeyValueFromVector |
bool __KeyValueFromInt(string 键名, int 值) bool __KeyValueFromFloat(string 键名, int 值) bool __KeyValueFromString(string 键名, string 值) bool __KeyValueFromVector(string 键名, Vector 值) |
根据特定数据类型设置实体的键值。如果成功设置则返回 true,如果键不存在则返回 false。 此操作仅改变值,不会执行实体完全处理该键值可能需要的任何其他代码,例如更新实体内部网络状态的代码。这可能会对已生成的实体产生意外的副作用,例如向客户端显示视觉变化会有延迟。 |
| ConnectOutput | void CBaseEntity::ConnectOutput(string 输出名称, string 函数名) | 添加一个输入/输出连接,当指定的输出触发时将调用命名函数。 |
| DisconnectOutput | void CBaseEntity::DisconnectOutput(string 输出名称, string 函数名) | 从输入/输出事件中移除已连接的脚本函数。 |
| Destroy | void CBaseEntity::Destroy() | 删除此实体。 |
| entindex | int CBaseEntity::entindex() | 返回实体索引。 |
| EmitSound | void CBaseEntity::EmitSound(string 音效名) | 从此实体播放一个音效。 |
| EyePosition | Vector CBaseEntity::EyePosition() | 获取实体眼睛位置的世界坐标向量。 |
| FirstMoveChild | handle CBaseEntity::FirstMoveChild() | 如果处于继承结构中,获取第一个移动层级的子实体。(译者注:就是父级下第一层绑定的子实体) |
| GetAngles | Vector CBaseEntity::GetAngles() | 获取实体的上下角度(pitch)、水平角度(yaw)、侧倾角度(roll)作为向量。 |
| GetAngularVelocity | Vector CBaseEntity::GetAngularVelocity() | 获取局部角速度 - 返回一个包含俯仰角、偏航角、翻滚角速度的向量。 |
| GetVelocity | Vector CBaseEntity::GetVelocity() | 获取实体的速度。注意:此函数读取的是QPhysics的速度值,因此仅对玩家、NPC和可移动的刷子实体有效。VPhysics物体的速度始终为零。一个变通方法是记录多帧的位置,然后手动计算速度。 |
| GetBoundingMaxs | Vector CBaseEntity::GetBoundingMaxs() | 获取一个包含最大边界(以对象为中心)的向量。 |
| GetBoundingMins | Vector CBaseEntity::GetBoundingMins() | 获取一个包含最小边界(以对象为中心)的向量。 |
| GetCenter | Vector CBaseEntity::GetCenter() | 获取对象中心的世界坐标向量。 |
| GetClassname | string CBaseEntity::GetClassname() | 获取此实体的类名。 |
| GetForwardVector | Vector CBaseEntity::GetForwardVector() | 获取实体的前向量(+X轴)。 |
| GetLeftVector | Vector CBaseEntity::GetLeftVector() | 获取实体的左向量(+Y轴)。 |
| GetUpVector | Vector CBaseEntity::GetUpVector() | 获取实体的上向量(+Z轴)。 |
| GetHealth | int CBaseEntity::GetHealth() | 获取当前生命值。 |
| GetMaxHealth | int CBaseEntity::GetMaxHealth() | 获取最大生命值。 |
| GetModelKeyValues | handle CBaseEntity::GetModelKeyValues() | 获取此实体模型上的一个键值类的实例。 |
| GetModelName | string CBaseEntity::GetModelName() | 获取模型名称。 |
| GetMoveParent | handle CBaseEntity::GetMoveParent() | 如果处于继承结构中,检索实体的父实体。 |
| GetName | string CBaseEntity::GetName() | 获取此实体的目标名称(targetname)。 |
| GetOrigin | Vector CBaseEntity::GetOrigin() | 返回此实体的局部原点(世界坐标)。 |
| GetOwner | handle CBaseEntity::GetOwner() | 获取此实体的所有者。 |
| GetPreTemplateName | string CBaseEntity::GetPreTemplateName() | 获取移除了模板唯一装饰(如 &001 后缀)的实体名称。 |
| GetRootMoveParent | handle CBaseEntity::GetRootMoveParent() | 如果处于层次结构中,向上遍历层次结构以找到根父实体。 |
| GetScriptId | string CBaseEntity::GetScriptId() | 获取实体的思考函数的名称。 |
| GetScriptScope | handle CBaseEntity::GetScriptScope() | 检索与实体关联的脚本端数据。 |
| GetSoundDuration | float CBaseEntity::GetSoundDuration(string, string) | 获取音效的持续时间(浮点数),参数为音效名称和可选的演员模型名称。 |
| GetTeam | int CBaseEntity::GetTeam() | 获取此实体所在的队伍。 |
| IsValid | bool CBaseEntity::IsValid() | 如果此实体有效则返回 true。 |
| NextMovePeer | handle CBaseEntity::NextMovePeer() | 返回同一移动(绑定)层次结构中的下一个实体。 |
| PrecacheSoundScript | void CBaseEntity::PrecacheSoundScript(string) | 预缓存一个音效以供之后播放,应在 'Precache()' 钩子函数中调用。 |
| SetAbsOrigin | void CBaseEntity::SetAbsOrigin(Vector) | 将实体传送至指定的世界坐标位置。 |
| SetAngles | void CBaseEntity::SetAngles(float, float, float) | 设置实体的上下角度(pitch)、水平角度(yaw)、侧倾角度(roll)。 |
| SetAngularVelocity | void CBaseEntity::SetAngularVelocity(float, float, float) | 设置局部角速度 - 参数为浮点型的上下角(pitch)、水平角(yaw)、侧倾角(roll)角速度。 |
| SetVelocity | void CBaseEntity::SetVelocity(Vector) | 设置局部速度。注意:此函数设置的是QPhysics的速度值,因此仅对玩家、NPC和可移动的刷子实体有效,对 VPhysics 对象无效。 |
| SetForwardVector | void CBaseEntity::SetForwardVector(Vector) | 设置实体前向(+X轴)向量。 |
| SetHealth | void CBaseEntity::SetHealth(int) | 设置实体当前的生命值。 |
| SetMaxHealth | void CBaseEntity::SetMaxHealth(int) | 设置最大生命值。 |
| SetModel | void CBaseEntity::SetModel(string) | 更改实体使用的模型。这可用于更改 prop_weighted_cube 或其他类似实体的模型。模型必须被预缓存,通常通过将其放置在地图中的其他位置来实现。 |
| SetOrigin | void CBaseEntity::SetOrigin(Vector) | 将此实体传送到指定位置。 |
| SetOwner | void CBaseEntity::SetOwner(handle) | 设置此实体的所有者。 |
| SetSize | void CBaseEntity::SetSize(Vector, Vector) | 设置边界框大小。 |
| SetTeam | void CBaseEntity::SetTeam(int) | 设置此实体所在的队伍。 |
| ValidateScriptScope | bool CBaseEntity::ValidateScriptScope() | 确保实体的脚本作用域已被创建。应在向实体作用域赋值之前调用此函数。 |
元方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| _tostring | string CBaseEntity::_tostring() | 用于字符串转换的重载。返回格式为 "([<实体索引>] <实体类名>: <目标名称>)" 的字符串。如果实体没有目标名称(targetname),则省略该部分。 |
钩子函数
如果在实体脚本中声明了以下任意一个函数,实体将在相应情况下自动运行此函数。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| DispatchOnPostSpawn | void DispatchOnPostSpawn() | 在实体生成后调用。 如果同时定义了此函数和 OnPostSpawn(),则此函数优先执行,另一个函数不会运行。 |
| DispatchPrecache | void DispatchPrecache() | 在实体生成期间以及恢复之后调用,允许脚本预缓存它们所需的任何资源。 如果同时定义了此函数和 Precache(),则此函数优先执行,另一个函数不会运行。 |
| Input<输入名称> | bool Input<输入名称>() | 当实体收到与函数名称匹配的输入/输出(I/O)输入时调用。Input 之后的名称必须大小写匹配,例如 InputFireUser1 将捕获来自 ent_fire 命令的任何 "FireUser1" 输入,但不会捕获 "fireuser1" 输入。
函数被调用时,变量 |
| OnPostSpawn | void OnPostSpawn() | 在实体生成后调用,此时脚本和玩家均已加载完成。此函数可用于让实体在主脚本中注册自身,或以编程方式调整实体参数。 如果同时定义了此函数和 DispatchOnPostSpawn(),则后者优先执行,此函数不会运行。
|
| Precache | void Precache() | 在脚本执行后调用。可用于在地图加载时调用模型和音效的预缓存函数。 如果同时定义了此函数和 DispatchPrecache(),则后者优先执行,此函数不会运行。
|
变量
| 实例 | 类型 | 描述 |
|---|---|---|
| __vname | string | 当前作用域的内部名称。 |
| __vrefs | int | 当前作用域的引用计数。此变量由 VSquirrel_OnCreateScope() 和 VSquirrel_OnReleaseScope() 管理。 Elaborate?: 请详细说明
|
| OnPostSpawnCallChain | CSimpleCallChainer | 用于 OnPostSpawn 钩子的调用链实例。 |
| PrecacheCallChain | CSimpleCallChainer | 用于 Precache 钩子的调用链实例。 |
CBaseAnimating
继承自 CBaseEntity ↑
用于带有动画的实体(例如道具)的脚本句柄类。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| GetAttachmentAngles | Vector CBaseAnimating::GetAttachmentAngles(int 附件ID) | 获取指定附件ID的朝向角(俯仰、偏航、翻滚),以向量形式返回。 |
| GetAttachmentOrigin | Vector CBaseAnimating::GetAttachmentOrigin(int 附件ID) | 获取指定附件ID的原点向量。 |
| GetObjectScaleLevel | int CBaseAnimating::GetObjectScaleLevel() | 获取实体的缩放等级。 |
| IsSequenceFinished | bool CBaseAnimating::IsSequenceFinished() | 查询主序列动画是否播放完毕。 |
| LookupAttachment | int CBaseAnimating::LookupAttachment(string 附件名称) | 获取指定附件名称对应的ID。 |
| SetBodygroup | void CBaseAnimating::SetBodygroup(int 组索引, int 部件索引) | 设置身体组。组索引是目标组的编号,部件索引是要使用的具体部件编号。 |
CBaseFlex
继承自 CBaseAnimating ↑
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| GetCurrentScene | handle CBaseFlex::GetCurrentScene() | 返回最早活动的场景实体实例(如果存在)。 |
| GetSceneByIndex | handle CBaseFlex::GetSceneByIndex(int 索引) | 返回指定索引处的场景实体实例。 |
CBasePlayer
继承自 CBaseAnimating ↑
用于玩家实体的脚本句柄类。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| IsNoclipping | bool CBasePlayer::IsNoclipping() | 如果玩家处于穿墙模式则返回 true。 |
CEntities
脚本实例:Entities
一个用于查找和遍历游戏中实体脚本句柄的接口。要遍历一组实体,请在相应方法中向 *previous* 参数传递 null 以开始一次遍历。也可以传递一个先前找到的实体引用来继续搜索。遍历顺序由实体索引决定;任何实体索引小于 *previous* 参数中实体索引的实体都将被跳过。[证实]
以下是两个遍历所有名为 "entityname" 的实体的等效示例:
local ent = null; // 定义临时变量以方便之后遍历,null=从第一个实体开始遍历
while ( ent = Entities.FindByName(ent, "entityname") ) // while循环遍历
{
// 这里放入你要执行的代码
}
|
for (local ent; ent = Entities.FindByName(ent, "entityname"); ) //for循环遍历
{
// 这里放入你的代码
}
|
- 变量名 ent 是任意的。
- 请注意,在循环条件中我们使用的是"**=**"(赋值操作符),而不是"**==**"(相等比较符)!当没有匹配实体的实体索引高于previous 参数中的索引时,ent 会变为 null,循环便会结束。
- 在每次迭代中,"ent" 都不为 null。
- 分号是可选的,但在 for 语句的头部除外。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| CreateByClassname | handle CEntities::CreateByClassname(string 类名) | 通过类名创建一个实体。 |
| FindByClassname | handle CEntities::FindByClassname(handle 起始实体, string 类名) | 按类名查找实体。传递 'null' 以开始第一次遍历,或传递一个先前找到的实体引用来继续搜索。 |
| FindByClassnameNearest | handle CEntities::FindByClassnameNearest(string 类名, Vector 位置, float 半径) | 按类名查找距离某个点最近的实体。 |
| FindByClassnameWithin | handle CEntities::FindByClassnameWithin(handle 起始实体, string 类名, Vector 位置, float 半径) | 在指定半径内按类名查找实体。传递 'null' 以开始一次遍历,或传递一个先前找到的实体引用来继续搜索。 |
| FindByModel | handle CEntities::FindByModel(handle 起始实体, string 模型名) | 按模型名查找实体。传递 'null' 以开始一次遍历,或传递一个先前找到的实体引用来继续搜索。 |
| FindByName | handle CEntities::FindByName( handle 起始实体, string targetname(目标名称) ) | 按名称(支持通配符)查找实体。传递 'null' 以开始一次遍历,或传递一个先前找到的实体引用来继续搜索。 |
| FindByNameNearest | handle CEntities::FindByNameNearest(string 目标名称, Vector 位置, float 半径) | 按名称查找距离某个点最近的实体。 |
| FindByNameWithin | handle CEntities::FindByNameWithin(handle 起始实体, string 目标名称, Vector 位置, float 半径) | 在指定半径内按名称查找实体。传递 'null' 以开始一次遍历,或传递一个先前找到的实体引用来继续搜索。 |
| FindByTarget | handle CEntities::FindByTarget(handle 起始实体, string 目标名称) | 查找具有特定 target 键值的实体。传递 'null' 以开始一次遍历,或传递一个先前找到的实体引用来继续搜索。
|
| FindInSphere | handle CEntities::FindInSphere(handle 起始实体, Vector 位置, float 半径) | 在指定半径内查找所有实体。传递 'null' 以开始一次遍历,或传递一个先前找到的实体引用来继续搜索。 |
| First | handle CEntities::First() | 开始对实体列表进行遍历。等同于 Next(null)。 |
| Next | handle CEntities::Next(handle 先前实体) | 继续对实体列表进行遍历,需提供一个先前找到的实体引用。 |
CEnvEntityMaker
继承自 CBaseEntity ↑
用于 env_entity_maker 的脚本句柄类。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| SpawnEntity | void CEnvEntityMaker::SpawnEntity() | 在此制造器的位置创建一个实体。 |
| SpawnEntityAtEntityOrigin | void CEnvEntityMaker::SpawnEntityAtEntityOrigin(handle 实体) | 在指定实体实例的位置创建一个实体。 |
| SpawnEntityAtLocation | void CEnvEntityMaker::SpawnEntityAtLocation(Vector 位置, Vector 朝向) | 在指定的位置和朝向上创建一个实体。朝向是欧拉角(单位:度),顺序为(俯仰角,偏航角,翻滚角)。 |
| SpawnEntityAtNamedEntityOrigin | void CEnvEntityMaker::SpawnEntityAtNamedEntityOrigin(string 实体名称) | 在一个命名实体的位置创建一个实体。 |
CLinkedPortalDoor
继承自 CBaseAnimating ↑
用于 linked_portal_door 的脚本句柄类。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| GetPartnerInstance | handle CLinkedPortalDoor::GetPartnerInstance() | 获取此门所链接伙伴的实例句柄。 |
| GetPartnername | string CLinkedPortalDoor::GetPartnername() | 返回此门的伙伴名称。 |
CPropLinkedPortalDoor
用于 prop_linked_portal_door 的脚本句柄类。其方法与 CLinkedPortalDoor 相同。
CLogicScript
继承自 CBaseEntity ↑
用于 logic_script 的脚本句柄类。
函数
| 函数 | 函数声明 | 描述 |
|---|---|---|
| __AppendToScriptGroup | void __AppendToScriptGroup(string 名称) | 用于收集由实体组键值定义的实体的内部函数。仅在实体生成过程中短暂定义,之后会被移除。 |
变量
| 实例 | 类型 | 描述 |
|---|---|---|
| EntityGroup | array | 包含此 logic_script 的 Group 键值所设置的每个实体的数组。仅当定义了一个或多个此类键值时,此变量才会被定义。
|
CPlayerVoiceListener
继承自 CAutoGameSystem
维护来自不同玩家的语音通讯数据,以便服务器能对其做出反应。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| GetPlayerSpeechDuration | float CPlayerVoiceListener::GetPlayerSpeechDuration(int 玩家索引) | 返回指定玩家持续说话的秒数。 |
| IsPlayerSpeaking | bool CPlayerVoiceListener::IsPlayerSpeaking(int 玩家索引) | 返回指定玩家是否正在说话。 |
CPlayerVoiceListener
继承自 CAutoGameSystem
维护来自不同玩家的语音通讯数据,以便服务器能对其做出反应。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| GetPlayerSpeechDuration | float CPlayerVoiceListener::GetPlayerSpeechDuration(int 玩家索引) | 返回指定玩家持续说话的秒数。 |
| IsPlayerSpeaking | bool CPlayerVoiceListener::IsPlayerSpeaking(int 玩家索引) | 返回指定玩家是否正在说话。 |
CPointTemplate
继承自 CBaseEntity ↑
用于 point_template 的脚本句柄类。
函数
| 函数 | 函数声明 | 描述 |
|---|---|---|
| __ExecutePreSpawn | table|null __ExecutePreSpawn(handle 实体) | 当服务器上的生成器准备预生成一个实体时执行的内部函数。它调用此函数,并传入正在准备生成的实体。
如果定义了 |
| __FinishSpawn | void __FinishSpawn() | 在实体完成生成后执行的内部函数。将 __EntityMakerResult 设置为 null。
|
变量
| 实例 | 类型 | 描述 |
|---|---|---|
| __EntityMakerResult | table | 包含应生成的实体的实体句柄。此变量仅存在于实体正在生成的过程中(之后会被删除),意味着只能在 PreSpawnInstance 或 PostSpawn 钩子中访问。
|
钩子函数
| 函数 | 函数声明 | 描述 |
|---|---|---|
| PreSpawnInstance | table PreSpawnInstance(string 实体类名, string 实体名称) | 如果定义了此函数,它将在实体被创建之前立即调用,任何返回的键值将被赋值给该实体。 |
function PreSpawnInstance( entityClass, entityName )
{
local keyvalues =
{
rendercolor = "0 255 0"
targetname = "mySpawnedEntity"
}
return keyvalues
}
|
|- | PostSpawn || void PostSpawn(table 实体) | 在实体生成后被调用。一个包含已生成实体句柄的表格会作为参数传递给此函数,该表格以实体名称为索引。可利用此函数来连接输出,或在实体创建后执行所需操作。
function PostSpawn( entities )
{
foreach( name, handle in entities )
{
printl( name + ": " + handle )
}
}
|
|}
示例
通过使用实体制造器(entity maker),可以在脚本中同步访问已生成的实体。以下通用示例创建了一个全局函数 SpawnMyEntity(),用于生成并返回模板化的实体。可以修改此示例以支持多个模板化实体。
m_hSpawnedEntity <- null;
m_KeyValues <- null;
m_hSpawner <- Entities.CreateByClassname( "env_entity_maker" );
m_hSpawner.__KeyValueFromString( "EntityTemplate", self.GetName() );
function PreSpawnInstance( classname, targetname )
{
return m_KeyValues;
}
function PostSpawn( entities )
{
foreach ( targetname, entity in entities )
{
m_hSpawnedEntity = entity;
break;
}
}
::SpawnMyEntity <- function( keyvalues = null )
{
m_KeyValues = keyvalues;
m_hSpawner.SpawnEntity();
return m_hSpawnedEntity;
}.bindenv(this)
在任何脚本中生成模板化实体。 local ent = SpawnMyEntity( {
rendercolor = Vector( RandomInt(0, 255), RandomInt(0, 255), RandomInt(0, 255) )
} )
printl( ent )
|
CPortal_Player
继承自 CBasePlayer ↑
用于《Portal》系列中 玩家 实体的脚本句柄类。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| GetWheatleyMonitorDestructionCount | int CPortal_Player::GetWheatleyMonitorDestructionCount() | 获取玩家摧毁的 Wheatley 监视器数量。 |
| IncWheatleyMonitorDestructionCount | void CPortal_Player::IncWheatleyMonitorDestructionCount() | 设置玩家摧毁的 Wheatley 监视器数量。 |
| TurnOffPotatos | void CPortal_Player::TurnOffPotatos() | 关闭土豆(Potatos)传送枪的光照效果。 |
| TurnOnPotatos | void CPortal_Player::TurnOnPotatos() | 开启土豆(Potatos)传送枪的光照效果。 |
CSceneEntity
继承自 CBaseEntity ↑
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| AddBroadcastTeamTarget | void CSceneEntity::AddBroadcastTeamTarget(int 队伍索引) | 将一个队伍(通过索引)添加到广播列表中。 |
| EstimateLength | float CSceneEntity::EstimateLength() | 返回此场景的估计长度(单位:秒)。 |
| FindNamedEntity | handle CSceneEntity::FindNamedEntity(string 实体引用名) | 给定一个实体引用(例如 !target),从场景对象中获取实际的实体。 |
| IsPaused | bool CSceneEntity::IsPaused() | 返回此场景当前是否已暂停。 |
| IsPlayingBack | bool CSceneEntity::IsPlayingBack() | 返回此场景当前是否正在播放。 |
| LoadSceneFromString | bool CSceneEntity::LoadSceneFromString(string 虚拟场景名, string VCD字符串) | 给定一个虚拟场景名称和一个 VCD 字符串,加载该场景。 |
| RemoveBroadcastTeamTarget | void CSceneEntity::RemoveBroadcastTeamTarget(int 队伍索引) | 从广播列表中移除一个队伍(通过索引)。 |
CScriptKeyValues
模型 $键值 块的脚本句柄表示。 子键是同一类的实例。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| FindKey | handle CScriptKeyValues::FindKey(string 键名) | 给定一个键值对象和一个键名,查找与该键名关联的键值对象。 |
| GetFirstSubKey | handle CScriptKeyValues::GetFirstSubKey() | 给定一个键值对象,返回其第一个子键对象。 |
| GetKeyBool | bool CScriptKeyValues::GetKeyBool(string 键名) | 给定一个键值对象和一个键名,返回关联的布尔值。 |
| GetKeyFloat | float CScriptKeyValues::GetKeyFloat(string 键名) | 给定一个键值对象和一个键名,返回关联的浮点数值。 |
| GetKeyInt | int CScriptKeyValues::GetKeyInt(string 键名) | 给定一个键值对象和一个键名,返回关联的整数值。 |
| GetKeyString | string CScriptKeyValues::GetKeyString(string 键名) | 给定一个键值对象和一个键名,返回关联的字符串值。 |
| GetNextKey | handle CScriptKeyValues::GetNextKey() | 给定一个键值对象,返回其所在子键组中的下一个键对象。 |
| IsKeyEmpty | bool CScriptKeyValues::IsKeyEmpty(string 键名) | 给定一个键值对象和一个键名,如果该键没有值则返回 true。 |
| ReleaseKeyValues | void CScriptKeyValues::ReleaseKeyValues() | 给定一个根键值对象,释放其内容。 |
CTriggerCamera
继承自 CBaseEntity ↑
用于 point_viewcontrol 的脚本句柄类。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| GetFov | int CTriggerCamera::GetFov() | 以整数形式获取摄像机的当前视野(FOV)设置。 |
| SetFov | void CTriggerCamera::SetFov(int 视野值, float 变化速率) | 设置摄像机的当前视野(整数角度)和视野变化速率(浮点数)。 |
钩子函数
| 函数 | 函数声明 | 描述 |
|---|---|---|
| ScriptStartCameraShot | void ScriptStartCameraShot(string 镜头类型, handle 场景实体, handle 演员1, handle 演员2, float 持续时间) | 由场景实体(SceneEntity)调用,以响应从 VCD 发送的 CChoreoEvent::CAMERA 事件。 [待完善] |
CCallChainer
- CCallChainer** 对象在给定作用域内收集所有具有匹配前缀的函数,然后将它们(去除前缀后)全部插入到
chains表中。随后,可以使用该类的Call()方法链式调用所有收集到的无前缀函数,前提是方法的 *event* 参数与函数名匹配。
- CCallChainer** 对象在给定作用域内收集所有具有匹配前缀的函数,然后将它们(去除前缀后)全部插入到
每当创建一个 **CCallChainer** 对象时,也会创建一个以 `Dispatch` 加上其给定前缀命名的函数,该类会将其 Call() 方法的执行环境绑定到该函数。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| constructor | CCallChainer(string 函数前缀, table 作用域 = null) | 创建一个 CCallChainer 对象,该对象将收集给定作用域中具有匹配前缀的函数。 |
| PostScriptExecute | void CCallChainer::PostScriptExecute() | 搜索所有具有匹配前缀的非原生函数,然后将它们推入 chains 表。
|
| Call | bool CCallChainer::Call(string 事件名, any ...) | 在 chains 表中查找无前缀的函数名,并使用给定的参数调用它。
|
成员
| 实例 | 类型 | 描述 |
|---|---|---|
| chains | table | 包含无前缀函数名的表,每个函数名对应一个要调用的函数数组。 |
| prefix | string | 函数需要具备此前缀才能被添加到 chains 表中。由构造函数设置。
|
| scope | table | 如果设置,则在此作用域中查找函数。由构造函数设置。 |
CSimpleCallChainer
此类旨在比 CCallChainer ↑ 更易于使用,**CSimpleCallChainer** 类仅在数组内保存一个函数链,而不是在表内保存多个函数链。因此,其 Call() 方法不需要函数名。
此类也由以下 CBaseEntity 钩子 ↑ 在内部使用:Precache() 和 OnPostSpawn()。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| constructor | CSimpleCallChainer(string 函数前缀, table 作用域 = null, 精确匹配 = false) | 创建一个 CSimpleCallChainer 对象,该对象将收集给定作用域中具有匹配前缀的函数(除非它要求精确名称匹配)。同时会自动暴露两个全局绑定函数来分发到此对象:DispatchPrecache() 和 DispatchOnPostSpawn()。
|
| PostScriptExecute | void CSimpleCallChainer::PostScriptExecute() | 开始搜索所有具有匹配前缀的非原生函数,然后将它们推入 chain 数组。
|
| Call | bool CSimpleCallChainer::Call(any ...) | 使用给定的参数调用 chain 数组中的所有函数。
|
成员
| 实例 | 类型 | 描述 |
|---|---|---|
| chain | array | 所有将由 Call() 方法调用的函数。
|
| exactMatch | bool | 如果设置,则非原生函数的名称必须与 prefix 精确匹配。由构造函数设置。
|
| prefix | string | 函数需要具备此前缀才能被添加到 chain 数组中。由构造函数设置。
|
| scope | table | 如果设置,则在此作用域中查找函数。由构造函数设置。 |
LateBinder
延迟绑定:允许一个表引用其自身、其子项或其所有者,并在表被完全解析后修复这些引用。
// Usage:
lateBinder <- LateBinder();
lateBinder.Begin( this );
Test1 <-
{
Foo=1
}
Test2 <-
{
FooFoo = "I'm foo foo"
BarBar="@Test1.Foo"
SubTable = { boo=[bah, "@Test2.FooFoo", "@Test1.Foo"], booboo2={one=bah, two="@Test2.FooFoo", three="@Test1.Foo"} }
booboo=[bah, "@Test2.FooFoo", "@Test1.Foo"]
booboo2={one=bah, two="@Test2.FooFoo", three="@Test1.Foo"}
bah=wha
}
lateBinder.End();
delete lateBinder;
|
当调用 End() 时,表和数组中所有未解析的符号将被解析,任何仍未被解析的符号将变成以 '~' 为前缀的字符串,后续代码可以处理这些字符串。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| Begin | void LateBinder::Begin(table 目标表, bool 记录日志 = false) | 待完善: 待办事项
|
| End | void LateBinder::End() | 待完善: 待办事项
|
| EstablishDelegation | void LateBinder::EstablishDelegation(table 父表, table 子表) | 待完善: 待办事项
|
| RemoveDelegation | void LateBinder::RemoveDelegation(table 父表, table 子表) | 待完善: 待办事项
|
| HookRootMetamethod | void LateBinder::HookRootMetamethod(string 名称, unknown 值) | "私有"方法。 待完善: 待办事项
|
| UnhookRootMetamethod | void LateBinder::UnhookRootMetamethod(string 名称) | 待完善: 待办事项
|
| Log | void LateBinder::Log(string 字符串) | 待完善: 待办事项
|
| Resolve | bool LateBinder::Resolve(table 查找表, table|array 子表或数组, bool 抛出异常 = false ) | 待完善: 待办事项
|
成员
| 实例 | 类型 | 描述 |
|---|---|---|
| m_bindNamesStack | array | 待完善: 待办事项
|
| m_fixupSet | array | 待完善: 待办事项
|
| m_log | bool | 待完善: 待办事项
|
| m_logIndent | int | 待完善: 待办事项
|
| m_targetTable | table | 待完善: 待办事项
|
Vector
Squirrel 中与 C++ 向量 类等效的类。一个三维向量,重载了针对向量和标量值的算术运算。
方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| constructor | Vector(float x = 0, float y = 0, float z = 0) | 使用指定的笛卡尔坐标创建一个新向量。 |
| Cross | Vector Vector::Cross(Vector 另一向量) | 返回向量叉积 - this × other。
|
| Dot | float Vector::Dot(Vector 另一向量) | 返回向量点积 - this · other。
|
| Length | float Vector::Length() | 返回距离原点的长度。 |
| Length2D | float Vector::Length2D() | 返回距离原点的长度(忽略 Z 轴)。 |
| LengthSqr | float Vector::LengthSqr() | 返回距离原点长度的平方。由于不需要开平方根,计算速度更快。 |
| Length2DSqr | float Vector::Length2DSqr() | 返回距离原点长度的平方(忽略 Z 轴)。由于不需要开平方根,计算速度更快。 |
| Norm | float Vector::Norm() | 将向量长度归一化为 1,并返回其原始长度。 |
| ToKVString | string Vector::ToKVString() | 返回一个格式为 "X Y Z" 的字符串。 |
元方法
| 函数 | 函数声明 | 描述 |
|---|---|---|
| _add | Vector Vector::_add(Vector 加数向量) | + 运算符的重载 - Vector + Vector。将提供的向量的每个分量加到当前向量上。
|
| _sub | Vector Vector::_sub(Vector 减数向量) | - 运算符的重载 - Vector - Vector。从当前向量中减去提供的向量的每个分量。
|
| _mul | Vector Vector::_mul(float 缩放因子) | * 运算符的重载 - Vector * 数值。将向量中的每个分量乘以这个缩放因子。
|
| _typeof | string Vector::_typeof() | typeof 运算符的重载。返回 "Vector"。
|
| _tostring | string Vector::_tostring() | 字符串转换的重载。返回一个格式为 "(vector : (X, Y, Z))" 的字符串。 |
| _nexti | string Vector::_nexti() | 迭代的重载。[待完善] |
| _get | string Vector::_get() | 访问操作的重载。[待完善] |
| _set | string Vector::_set() | 赋值操作的重载。[待完善] |
成员
| 实例 | 类型 | 描述 |
|---|---|---|
| x | float | 笛卡尔坐标系 X 轴。 |
| y | float | 笛卡尔坐标系 Y 轴。 |
| z | float | 笛卡尔坐标系 Z 轴。 |
全局函数
打印与绘制
| 函数 | 函数声明 | 描述 |
|---|---|---|
| DebugDrawBox | void DebugDrawBox(Vector 原点, Vector 最小边界, Vector 最大边界, int 红, int 绿, int 蓝, int 透明度, float 持续时间) | 绘制一个调试方框,用于代码可视化。它位于 原点,尺寸由 最小边界/最大边界 定义。开发者模式必须开启才能显示,并且会持续 持续时间 秒(如果为 -1.0 则显示一帧)。颜色值范围为 0-255。
|
| DebugDrawLine | void DebugDrawLine(Vector 起点, Vector 终点, int 红, int 绿, int 蓝, bool 点击检测, float 持续时间) | 绘制一条调试线,用于代码可视化。开发者模式必须开启才能显示,并且会持续 持续时间 秒(如果为 -1.0 则显示一帧)。颜色值范围为 0-255。
|
| Msg | void Msg(string 文本) | 等同于 print 函数。
|
| printl | void printl(string 文本) | 将给定消息打印到开发者控制台,并自动换行。等同于 print(消息 + "\n")。
|
| ShowMessage | void ShowMessage(string) | 在所有客户端的 HUD 上显示一条消息。/scripts/titles.txt 中找到的本地化字符串。 |
| __DumpScope | void __DumpScope(int 缩进量, table 作用域) | 转储指定作用域的内容。 |
仅限单人模式
这些函数只能在单人游戏中使用,如果在多人游戏中使用可能会导致错误。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| GetPlayer | handle GetPlayer() | 返回玩家实体句柄。 |
| GivePlayerPortalgun | void GivePlayerPortalgun() | 为玩家装备仅能发射蓝色传送门的传送枪。 |
| PrecacheMovie | void PrecacheMovie(string) | 预缓存指定的影片。仅在实体于地图加载时调用的 'Precache' 函数中调用有效。 |
| ScriptShowHudMessageAll | void ScriptShowHudMessageAll(string, float) | 为所有玩家显示屏幕中央的文本消息,持续指定秒数。 |
| ScriptSteamShowURL | bool ScriptSteamShowURL(string) | 调出 Steam 覆盖层并显示指定的 URL。(需要包含协议类型的完整地址,例如 http://www.steamgames.com/) |
| TryDLC1InstalledOrCatch | void TryDLC1InstalledOrCatch() | 如果未安装“同伴评测”DLC 则抛出异常。在当前游戏的 PC 版本中无用,因为“同伴评测”DLC 始终存在。 |
| UpgradePlayerPortalgun | void UpgradePlayerPortalgun() | 将玩家的传送枪升级为可发射橙色传送门。 |
| UpgradePlayerPotatogun | void UpgradePlayerPotatogun() | 将玩家的传送枪升级为可发射橙色传送门并插有 PotatOS。 |
仅限多人模式
这些函数只能在多人游戏中使用,如果在单人游戏中使用可能会导致错误。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| AddBranchLevelName | void AddBranchLevelName(int 分支号, string 关卡名) | 向指定分支的关卡列表中添加一个关卡。 |
| AddCoopCreditsName | void AddCoopCreditsName(string 名称) | 向合作模式制作人员名单列表中添加一个名字。 |
| AddGladosSpokenFlags | void AddGladosSpokenFlags(int 索引, int 位标志) | 为每个会话跟踪的特定台词添加位标志。 |
| CoopGladosBlowUpBots | void CoopGladosBlowUpBots() | 炸毁两个机器人并阻止其重生。 |
| CoopGetNumPortalsPlaced | int CoopGetNumPortalsPlaced() | 返回玩家到目前为止放置的传送门数量。 |
| CoopGetLevelsCompletedThisBranch | int CoopGetLevelsCompletedThisBranch() | 返回玩家在当前分支的流程中已完成的关卡数量。 |
| CoopGetBranchTotalLevelCount | int CoopGetBranchTotalLevelCount() | 返回当前分支中的关卡总数。 |
| CoopSetCameFromLastDLCMap | void CoopSetCameFromLastDLCMap(bool 是否来自) | 设置玩家是否来自上一个合作模式 DLC 地图。 |
| CoopSetMapRunTime | void CoopSetMapRunTime(float 运行时长) | 设置完成一张合作地图所需的时间(从出生到完成解谜)。(可能与“三重冠”成就有关。) |
| GetBluePlayerIndex | int GetBluePlayerIndex() | 蓝色玩家的玩家索引。 |
| GetCameFromLastDLCMap | bool GetCameFromLastDLCMap() | 如果来自上一个 DLC 合作地图(由 CoopSetCameFromLastDLCMap 设置)则返回 true。
|
| GetCoopBranchLevelIndex | int GetCoopBranchLevelIndex(int 分支号) | 给定“分支号”参数,返回当前选择的关卡索引。 |
| GetCoopSectionIndex | int GetCoopSectionIndex() | 合作模式玩家选择加载的章节索引。 |
| GetGladosSpokenFlags | int GetGladosSpokenFlags(int 索引) | 返回每个会话跟踪的特定台词的位标志。 |
| GetHaveSeenDLCTubesReveal | bool GetHaveSeenDLCTubesReveal() | 获取玩家是否在当前会话中已看过 DLC 管道揭示动画(由 SetHaveSeenDLCTubesReveal 设置)。
|
| GetHighestActiveBranch | int GetHighestActiveBranch() | 返回在大厅中应可用的最高分支号。 |
| GetNumPlayersConnected | int GetNumPlayersConnected() | 返回已连接的玩家数量。在普通合作模式中,这几乎总是 2。 |
| GetOrangePlayerIndex | int GetOrangePlayerIndex() | 橙色玩家的玩家索引。 |
| GetPlayerDeathCount | int GetPlayerDeathCount(int 玩家索引) | 返回指定玩家在会话中死亡的次数。 |
| IsBranchComplete | bool IsBranchComplete(int 系列号) | 如果指定系列中的所有关卡已被任一玩家完成,则返回 true。 |
| IsLevelComplete | bool IsLevelComplete(int 系列号, int 关卡号) | 如果指定系列的关卡已被任一玩家完成,则返回 true。 |
| IsLocalSplitScreen | bool IsLocalSplitScreen() | 如果玩家处于分屏模式,则返回 true。 |
| IsPlayerBranchComplete | bool IsPlayerBranchComplete(int 玩家索引, int 系列号) | 如果指定系列中的所有关卡已被指定玩家完成,则返回 true。 |
| IsPlayerLevelComplete | bool IsPlayerLevelComplete(int 玩家索引, int 系列号, int 关卡号) | 如果指定系列的关卡已被指定玩家完成,则返回 true。 |
| MarkMapComplete | void MarkMapComplete(string 地图名) | 将地图标记为已被两名玩家完成。 |
| NotifySpeedRunSuccess | void NotifySpeedRunSuccess(int 运行时长, string 地图名) | 通知客户端已成功完成一次速通。(用于“三重冠”成就。) |
| SaveMPStatsData | void SaveMPStatsData() | 保存计分板使用的多人游戏统计数据。 |
| SetHaveSeenDLCTubesReveal | void SetHaveSeenDLCTubesReveal() | 设置玩家在当前会话中已看过 DLC 管道揭示动画。 |
仅限开发者模式
这些函数要求 developer 级别设置为大于 0 的值。否则这些函数要么未定义,要么定义为不执行任何操作。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| Document | void Document(table|string 符号或表, unknown 符号项 = null, string 符号描述 = null) | 如果 developer < 0,则不执行任何操作。 待完善: 待办事项
|
| PrintHelp | void PrintHelp(string 字符串 = "*", bool 精确匹配 = false) | 如果 字符串 匹配已注册函数文档的某部分,则打印该文档。精确匹配 指定搜索字符串是否应完全匹配。如果 developer < 0,则不执行任何操作。 |
| RegisterFunctionDocumentation | void RegisterFunctionDocumentation(unknown 函数, string 名称, string 声明, string 描述) | 如果 developer < 0,此函数未定义。 待完善: 待办事项
|
| RetrieveNativeSignature | string RetrieveNativeSignature(string 原生函数名) | 尝试检索所提供字符串对应的原生函数声明,但该函数引用了一个不存在的索引 NativeFunctionSignatures,会导致错误。如果 developer < 0,则返回 "<未命名>"。 |
其他
| 函数 | 函数声明 | 描述 |
|---|---|---|
| Assert | void Assert(表达式, string 消息 = null) | 如果表达式结果为 false,则抛出异常(可选择附带消息)。 |
| CreateProp | handle CreateProp(string 类名, Vector 原点, string 模型名, int 活动) | 创建一个道具。类名应为 prop_physics 风格的实体。 |
| CreateSceneEntity | handle CreateSceneEntity(string) | 创建一个场景实体来播放指定场景。 |
| dummy | void dummy() | 空函数。不执行任何操作。 |
| DoIncludeScript | bool DoIncludeScript(string 文件名, table 作用域) | 在 作用域 的作用域内执行脚本文件 "scripts/vscripts/" + 文件名。可以省略扩展名 .nut。
|
| IncludeScript | bool IncludeScript(string 文件名, table 作用域 = null) | 在 作用域(默认为 this)的作用域内执行脚本文件 "scripts/vscripts/" + 文件名。可以省略扩展名 .nut。
|
| DoEntFire | void DoEntFire(string 目标, string 动作, string 值, float 延迟, handle 激活者, handle 调用者) | 生成一个实体 I/O 事件。 |
| EntFire | function EntFire(目标, 动作, 值, 延迟, 激活者) | 生成一个实体 I/O 事件。值、延迟和激活者是可选的。 |
| EntFireByHandle | void EntFireByHandle(handle 目标, string 动作, string 值, float 延迟, handle 激活者, handle 调用者) | 生成一个实体 I/O 事件。第一个参数是实体实例。 |
| FrameTime | float FrameTime() | 获取服务器在上一帧中花费的时间。 |
| GetDeveloperLevel | int GetDeveloperLevel() | 获取“developer”变量的级别。 |
| GetFunctionSignature | string GetFunctionSignature(function 函数, string 名称) | 待完善: 待办事项
|
| GetMapIndexInPlayOrder | int GetMapIndexInPlayOrder() | 对于创意工坊地图,确定此地图在游玩顺序中的索引。如果未找到条目则返回 -1,如果不是创意工坊地图则返回 -2。 |
| GetMapName | string GetMapName() | 获取当前地图的名称。 |
| GetNumMapsPlayed | int GetNumMapsPlayed() | 返回玩家已玩过的创意工坊地图数量。 |
| GetPlayerSilenceDuration | float GetPlayerSilenceDuration(int 玩家索引) | 指定玩家麦克风静默的时长。 |
| IsMultiplayer | bool IsMultiplayer() | 如果是多人游戏则返回 true,单人游戏则返回 false。 |
| LoopSinglePlayerMaps | bool LoopSinglePlayerMaps() | 如果控制台变量 loopsingleplayermaps 启用则返回 true。在多人游戏中仍然有效。
|
| RandomFloat | float RandomFloat(float 最小值, float 最大值) | 在给定范围内(包含边界)生成一个随机浮点数。 |
| RandomInt | int RandomInt(int 最小值, int 最大值) | 在给定范围内(包含边界)生成一个随机整数。 |
| RecordAchievementEvent | void RecordAchievementEvent(string 名称, int 玩家索引) | 获得指定成就或增加其进度。 |
| RequestMapRating | void RequestMapRating() | 在创意工坊地图中,弹出地图评分对话框供用户输入。 |
| SendToConsole | void SendToConsole(string 命令) | 将字符串作为命令发送到控制台。在多人游戏中,该命令被视为来自主机的命令。 |
| SetDucking | void SetDucking(string, string, float) | 设置音频闪避通道的级别。 |
| SetMapAsPlayed | int SetMapAsPlayed() | 对于创意工坊地图,将当前地图添加到游玩顺序中并返回其中的新索引。如果不是创意工坊地图则返回 -2。 |
| Time | float Time() | 获取当前服务器时间。 |
| TraceLine | float TraceLine(Vector 起点, Vector 终点, handle 忽略的实体) | 给定起点、终点和一个要忽略的实体,返回击中世界时沿射线的比例。不击中实体,这使得忽略的实体参数似乎无用。 |
| UniqueString | string UniqueString(string 后缀 = "") | 生成一个在脚本虚拟机生命周期内保证唯一的字符串,可选择根字符串。在向表添加数据但不确定表中已使用哪些键时非常有用。等同于 DoUniqueString(后缀)。
|
| DoUniqueString | string DoUniqueString(string 后缀) | 生成一个在脚本虚拟机生命周期内保证唯一的字符串,可选择根字符串。在向表添加数据但不确定表中已使用哪些键时非常有用。 |
| VSquirrel_OnCreateScope | table(?) VSquirrel_OnCreateScope(string 名称, table(?) 外部作用域) | 内部函数,在创建新作用域时运行。 待完善: 待办事项
|
| VSquirrel_OnReleaseScope | void VSquirrel_OnReleaseScope(table(?) 作用域) | 内部函数,在释放作用域时运行。 待完善: 待办事项
|
| __ReplaceClosures | void __ReplaceClosures(function 脚本, table 作用域) | 在 script_reload_ 服务器命令中调用的内部函数。待完善: 待办事项
|
Squirrel 标准库
来自 Squirrel 内置的标准库的函数、类和变量列表。并非链接文档中的所有函数都存在于 VScript 中,例如 blob 库。
通用
常量
| 实例 | 类型 | 值 | 描述 |
|---|---|---|---|
| _charsize_ | 整数 | 1 | 虚拟机内部表示字符的字节大小。 |
| _intsize_ | 整数 | 4 | 虚拟机内部表示整数的字节大小。 |
| _floatsize_ | 整数 | 4 | 虚拟机内部表示浮点数的字节大小。 |
| _version_ | 字符串 | "Squirrel 2.2.3 stable" | 描述虚拟机与编译器版本的字符串值。 |
::_charsize_ = 2。函数
| 函数 | 函数声明 | 描述 |
|---|---|---|
| assert | assert(bool 表达式) | 如果表达式求值为 false 则抛出异常。 |
| collectgarbage | int collectgarbage() | 运行垃圾回收器并返回找到(并删除)的引用循环数量。此函数仅在启用垃圾回收器的构建版本中有效。 |
| compilestring | function compilestring(string 字符串, string 缓冲区名称 = null) | 将包含 Squirrel 脚本的字符串编译成一个函数并返回。 |
| enabledebuginfo | void enabledebuginfo(any 启用标志) | 启用/禁用编译时的调试行信息生成。如果 启用标志 != null 则启用,如果 启用标志 == null 则禁用。 |
| getconsttable | table getconsttable() | 返回虚拟机的常量表。 |
| getroottable | table getroottable() | 返回虚拟机的根表。 |
| getstackinfos | table getstackinfos(int 堆栈层级) | 返回指定堆栈层级(0 为当前函数,1 为调用者,依此类推)的堆栈帧信息。如果该堆栈层级不存在,则函数返回 null。 |
{
func="DoStuff", //function name
src="test.nut", //source file
line=10, //line number
locals = { //a table containing the local variables
a=10,
testy="I'm a string"
}
}
|
|-
| print || void print(string 消息)
| 将消息打印到控制台,末尾不添加换行符。
|-
| setconsttable || table setconsttable(table 常量表)
| 设置虚拟机的常量表,同时返回之前的常量表。
|-
| seterrorhandler || void seterrorhandler(function 处理函数)
| 设置运行时错误处理函数。
|-
| setroottable || table setroottable(table 根表)
| 设置虚拟机的根表,同时返回之前的根表。
|-
| type || string type(any 对象)
| 返回对象的“原始”类型,不调用元方法 _typeof。
|}
数学
内置的 Squirrel 数学库。
- 常量
| 实例 | 类型 | 值 | 描述 |
|---|---|---|---|
| PI | 浮点数 | 3.141592 | 数学常数 π,圆周与直径的比率。 |
| RAND_MAX | 整数 | 32767 | rand() 函数能返回的最大值。 |
::PI = 3。- 函数
| 函数 | 函数声明 | 描述 |
|---|---|---|
| abs | int abs(float x) | 以整数形式返回 x 的绝对值 (|x|)。 |
| fabs | float fabs(float x) | 以浮点数形式返回 x 的绝对值 (|x|)。 |
| sin | float sin(float x) | 返回 x 的正弦值 (sin(x))。 |
| cos | float cos(float x) | 返回 x 的余弦值 (cos(x))。 |
| tan | float tan(float x) | 返回 x 的正切值 (tan(x))。 |
| asin | float asin(float x) | 返回 x 的反正弦值 (sin-1(x), -1 ≤ x ≤ 1.)。 |
| acos | float acos(float x) | 返回 x 的反余弦值 (cos-1(x), -1 ≤ x ≤ 1.)。 |
| atan | float atan(float x) | 返回 x 的反正切值 (tan-1(x).)。 |
| atan2 | float atan2(float y, float x) | 返回从点 (0, 0) 到点 (x, y) 的射线与正 X 轴之间的角度,范围限制在 (−PI, PI] 内 (arctan(y/x), x > 0 ; arctan(y/x)±π, x < 0)。请注意参数 x 和 y 的顺序!
另请参阅 atan2。 |
| floor | float floor(float x) | 返回一个浮点值,表示小于或等于 x 的最大整数 (⌊x⌋)。 |
| ceil | float ceil(float x) | 返回一个浮点值,表示大于或等于 x 的最小整数 (⌈x⌉)。 |
| pow | float pow(float x, float y) | 返回 x 的 y 次幂 (xy)。 |
| exp | float exp(float x) | 返回 x 的指数值 (ex)。 |
| log | float log(float x) | 返回 x 的自然对数 (loge(x) = ln(x))。 |
| log10 | float log10(float x) | 返回 x 的以 10 为底的对数 (log10(x))。 |
| sqrt | float sqrt(float x) | 返回 x 的平方根 (√x)。 |
| rand | int rand() | 返回一个范围在 0 到 RAND_MAX 之间的伪随机整数 (0 ≤ rand() ≤ RAND_MAX)。 |
| srand | void srand(float 种子) | 设置生成一系列伪随机整数的起始点。 |
- 字符串
内置的 Squirrel 字符串库。
- 函数
| 函数 | 函数声明 | 描述 |
|---|---|---|
| format | string format(string 格式, 参数...) | 返回一个格式化字符串。规则与标准 C 函数相同(除了不支持 *)。 |
| split | array split(string 字符串, string 分隔符) | 返回一个字符串数组,该数组在 *分隔符* 字符串在 *字符串* 中出现的每个点处分割。分隔符不作为任何数组元素的一部分返回。 |
| strip | string strip(string 字符串) | 移除给定字符串开头和结尾的空白字符。 |
| lstrip | string lstrip(string 字符串) | 移除给定字符串开头的空白字符。 |
| rstrip | string rstrip(string 字符串) | 移除给定字符串结尾的空白字符。 |
- 正则表达式 (Regexp)
内置的用于正则表达式的 Squirrel 类。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| constructor | regexp(string 模式) | 创建并编译由 *模式* 表示的正则表达式。
\\ 而不是 \)。 |
| capture | table regexp::capture(string 字符串, int 起始位置 = 0) | 返回一个表的数组,其中包含正则表达式在 *字符串* 中首次匹配的两个索引("begin" 和 "end")。每个捕获的子表达式都会创建一个数组条目。如果没有匹配,则返回 null。搜索从字符串的 *起始位置* 索引开始,如果省略 *起始位置*,则从字符串的开头开始搜索。 |
| match | bool regexp::match(string 字符串) | 如果正则表达式匹配字符串 *字符串* 则返回 true,否则返回 false。 |
| search | table regexp::search(string 字符串, int 起始位置 = 0) | 返回一个包含两个索引("begin" 和 "end")的表,对应正则表达式在 *字符串* 中的首次匹配,否则如果没有匹配,则返回 null。搜索从字符串的 *起始位置* 索引开始,如果省略 *起始位置*,则从字符串的开头开始搜索。 |
| subexpcount | int regexp::subexpcount() | 计算正则表达式中存在的分组数量。
|
| _typeof | string regexp::_typeof() | typeof 重载。返回 "regexp"。
|
- 类型
- 整数 (Integer)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| tointeger | int tointeger() | 返回整数的值(空函数)。 |
| tofloat | float tofloat() | 将整数转换为浮点数并返回。 |
| tostring | string tostring() | 将整数转换为字符串并返回。 |
| tochar | string tochar() | 返回一个包含由该整数表示的单个字符的字符串。 |
| weakref | int weakref() | 空函数,返回整数本身。 |
- 浮点数 (Float)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| tointeger | int tointeger() | 将浮点数转换为整数并返回。 |
| tofloat | float tofloat() | 返回浮点数的值(空函数)。 |
| tostring | string tostring() | 将浮点数转换为字符串并返回。 |
| tochar | string tochar() | 返回一个包含由浮点数整数部分表示的单个字符的字符串。 |
| weakref | float weakref() | 空函数,返回浮点数本身。 |
- 布尔值 (Bool)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| tofloat | float tofloat() | true 返回 1.0,false 返回 0.0。 |
| tointeger | int tointeger() | true 返回 1,false 返回 0。 |
| tostring | string tostring() | true 返回 "true",false 返回 "false"。 |
| weakref | bool weakref() | 空函数,返回布尔值本身。 |
- 字符串 (String)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| find | int find(string 搜索字符串, int 起始索引 = 0) | 查找作为第一个参数传递的子字符串,从字符串的开头开始,或者如果提供了第二个参数,则从特定的字符索引开始。如果找到子字符串,则返回其首次出现的索引,否则返回 null。 |
| len | int len() | 返回字符串的长度,即其包含的字符数。 |
| slice | string slice(int 起始索引, int 结束索引 = null) | 从字符串创建一个子字符串。复制从 *起始索引* 到 *结束索引* 的字符。子字符串包括 *起始索引* 处的字符,但不包括 *结束索引* 处的字符。如果未指定 *结束索引*,则复制到最后一个字符。如果提供的结束索引超出字符串范围,则抛出异常。如果数字为负数,则计数从字符串末尾开始(例如,-2 表示倒数第二个字符)。 |
| tolower | string tolower() | 返回一个新字符串,其中所有大写字符都转换为小写字符。 |
| toupper | string toupper() | 返回一个新字符串,其中所有小写字符都转换为大写字符。 |
| tointeger | int tointeger(int 基数 = 10) | 返回字符串表示的整数值。必须只包含数字字符,否则抛出异常。支持十六进制表示法(例如 0xFF)。如果十六进制字符串包含超过 10 个字符(包括 0x),则返回 -1。
|
| tofloat | float tofloat() | 返回字符串表示的浮点值。必须只包含数字字符和/或加号、减号符号,否则抛出异常。 |
| tostring | string tostring() | 返回字符串(空函数)。 |
| weakref | weakref weakref() | 返回对象的弱引用。 |
- 表 (Table)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| clear | void clear() | 移除表中的所有项目。 |
| len | int len() | 返回表的长度,即其拥有的条目数。 |
| rawdelete | any rawdelete(any 键) | 此方法删除目标槽而不使用委托。如果表缺少目标槽,则方法返回 null,否则返回与该槽关联的值。 |
| rawget | any rawget(any 键) | 在不使用委托的情况下检索指定键的值。 |
| rawin | bool rawin(any 键) | 检查指定键是否存在于表/类/句柄中,不使用委托。 |
| rawset | table rawset(any 键, any 值) | 在不使用委托的情况下设置指定键的值。返回表本身。 |
| tostring | string tostring() | 尝试调用 _tostring 元方法。如果失败,则返回格式为 "(table: <指针>)" 的字符串。
|
| weakref | weakref weakref() | 返回对象的弱引用。 |
- 数组 (Array)
- 方法
以下属于数组对象的成员方法,换句话说,它们必须在数组上使用点操作符调用,例如 arr.append(0)。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| append | void append(any 值) | 将一个项目添加到数组的末尾。 |
| clear | void clear() | 移除数组中的所有项目。 |
| extend | array extend(array 其他数组) | 将两个数组合并为一个。 |
| find | int find(any 元素) | 从数组的开头开始查找作为参数传递的元素。如果找到该元素,则返回其首次出现的索引,否则返回 null。 |
| insert | void insert(int 索引, any 项目) | 将项目插入到数组的指定索引处。 |
| len | int len() | 返回数组的长度,即其拥有的元素数量。 |
| push | void push(any 值) | 将一个项目添加到数组的末尾。 |
| pop | any pop() | 返回并移除数组末尾的值。 |
| remove | any remove(int 索引) | 返回并移除数组指定索引处的项目。 |
| resize | void resize(int 大小, any 填充值 = null) | 增加或减少数组的大小。增加时用 *填充值* 参数填充新位置。 |
| reverse | void reverse() | 反转数组中元素的顺序。 |
| slice | array slice(int 起始索引, int 结束索引 = null) | 从数组创建一个新数组。复制从 *起始索引* 到 *结束索引* 的元素。新数组包括 *起始索引* 处的元素,但不包括 *结束索引* 处的元素。如果未指定 *结束索引*,则复制到最后一个元素。如果提供的结束索引超出数组范围,则抛出异常。如果数字为负数,则计数从数组末尾开始(例如,-2 表示倒数第二个元素)。 |
| sort | void sort(function<a, b> 比较函数 = null) | 此方法将目标数组中的项目排序为从低到高的顺序,或者根据可选的比较函数的结果排序,该函数可以作为参数传递给方法。如果项目是数组、blob、函数、对象和/或表,它们将按引用而不是值排序。可选的比较函数应接受两个参数:两个将以某种方式比较的值。如果第一个值应放在第二个值之前,则应返回值 -1;如果它应跟在第二个值之后,则返回值 1。如果两个值等价,则返回 0。飞船操作符 <=> 在尝试按某个字段值排序时可能派上用场。例如:arr.sort(@(a, b) a.distance <=> b.distance)
|
| top | any top() | 返回数组末尾的值。 |
| tostring | string tostring() | 返回格式为 "(array: <指针>)" 的字符串。 |
| weakref | weakref weakref() | 返回对象的弱引用。 |
- 函数
以下属于全局数组函数,例如 arr = array(3, 0)。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| array | array(int 长度, any 填充值 = null) | 返回一个给定长度的新数组,其中每个元素都设置为 填充值。 |
- 函数 (Function)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| call | any call(table 环境对象, any 参数...) | 使用非默认的上下文对象调用函数。 |
| acall | any acall(array 数组参数) | 调用目标函数并将数组值传递给其参数。数组的第一个元素应是非默认的上下文对象。 |
| pcall | any pcall(table 环境对象, any 参数...) | 使用非默认的上下文对象调用函数,绕过 Squirrel 错误回调。 |
| pacall | any pacall(array 数组参数) | 使用参数数组调用函数,绕过 Squirrel 错误回调。数组的第一个元素应是非默认的上下文对象。 |
| bindenv | function bindenv(table 环境对象) | 克隆目标函数并将其绑定到指定的上下文对象。新创建函数的 this 参数将始终设置为 *环境对象*。
|
| getinfos | table getinfos() | 返回一个包含函数信息的表,例如参数、名称和源名称。 |
//pure squirrel function
{
native = false
name = "zefuncname"
src = "/somthing/something.nut"
parameters = ["a","b","c"]
defparams = [1,"def"]
varargs = 2
}
//native C function
{
native = true
name = "zefuncname"
paramscheck = 2
typecheck = [83886082,83886384] //this is the typemask (see C defines OT_INTEGER,OT_FLOAT etc...)
}
|
|- | tostring || string tostring() | 返回格式为 "(closure: <指针>)" 的字符串。 |- | weakref || weakref weakref() | 返回对象的弱引用。 |}
- 类 (Class)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| instance | instance instance() | 返回该类的一个新实例。此函数不调用实例的构造函数。必须显式调用构造函数(例如,类实例.constructor(类实例))。
|
| getattributes | any getattributes(string 成员名) | 返回指定成员的属性。如果成员参数为 null,则返回类级别的属性。 |
| setattributes | any setattributes(string 成员名, any 值) | 设置指定成员的属性并返回之前的属性值。如果成员参数为 null,则设置类级别的属性。 |
| rawin | bool rawin(any 键) | 检查类中是否存在指定的键,不使用委托。 |
| tostring | string tostring() | 返回格式为 "(class: <指针>)" 的字符串。 |
| weakref | weakref weakref() | 返回对象的弱引用。 |
- 类实例 (Class instance)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| getclass | class getclass() | 返回创建此实例的类。 |
| rawin | bool rawin(any 键) | 检查实例中是否存在指定的键,不使用委托。 |
| tostring | string tostring() | 尝试调用 _tostring 元方法。如果失败,则返回格式为 "(instance: <指针>)" 的字符串。
|
| weakref | weakref weakref() | 返回对象的弱引用。 |
- 生成器 (Generator)
| 函数 | 函数声明 | 描述 |
|---|---|---|
| getstatus | string getstatus() | 以字符串形式返回生成器的状态:"running"(运行中)、"dead"(死亡)或 "suspended"(已挂起)。 |
| tostring | string tostring() | 返回格式为 "(generator: <指针>)" 的字符串。 |
| weakref | weakref weakref() | 返回对象的弱引用。 |
- 线程 (Thread)
- 方法
以下属于线程对象的成员方法,换句话说,它们必须在线程上使用点操作符调用,例如 thread.call()。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| call | any call(any 参数...) | 使用指定参数启动线程。返回第一个 suspend 值,如果没有触发挂起,则返回函数的返回值。
|
| getstatus | string getstatus() | 返回线程的状态("idle"(空闲)、"running"(运行中)、"suspended"(已挂起))。 |
| tostring | string tostring() | 返回格式为 "(thread: <指针>)" 的字符串。 |
| wakeup | any wakeup(any 返回值 = null) | 唤醒一个已挂起的线程,接受一个可选参数,该参数将用作挂起线程的函数(suspend 方法)的返回值。返回的值将在下一次线程唤醒时接收,具体取决于 suspend 方法中传递的内容。
|
| weakref | weakref weakref() | 返回对象的弱引用。 |
- 函数
以下属于全局线程函数,例如 thread = newthread(func)。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| newthread | thread newthread(function 线程函数) | 创建一个新的协作式线程对象(协程)并返回。
|
| suspend | any suspend(any 返回值 = this) | 挂起调用此函数的协程。需要在线程的函数体内调用。接受一个可选参数,该参数将用作唤醒线程的函数(wakeup 方法)的返回值。如果未传递任何参数,则默认为 this(调用此函数的作用域)。返回的值将在下一次线程唤醒时接收,具体取决于 wakeup 方法中传递的内容。
|
- 弱引用 (Weak reference)
弱引用允许您引用一个对象,而不阻止其被垃圾回收。当您想引用一个对象,但又不想增加其引用计数并无必要地保持其存活时,弱引用非常有用。当弱引用所指向的对象被销毁时,弱引用会自动设置为 null。返回对象弱引用的 weakref 方法存在于 Squirrel 中的每个对象上,但原始类型(如数字)会返回自身,因为它们的存储方式不同,因此使此方法变得多余。其他一切均按预期工作。
| 函数 | 函数声明 | 描述 |
|---|---|---|
| ref | instance ref() | 返回弱引用所指向的对象,如果所指向的对象已被销毁,则返回 null。 |
| tostring | string tostring() | 返回格式为 "(weakref: <指针>)" 的字符串。 |
| weakref | weakref weakref() | 返回对象的弱引用。 |