本文与游戏《传送门2》有关。点击这里查看更多信息。
This article relates to "Squirrel". Click here for more information.

List of ​Portal 2​ Script Functions

From Valve Developer Community
< Zh‎ | Portal 2
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)


Squirrel

本列表包含传送门2 传送门2中可用在VScript(en)的所有与引擎相关的 Squirrel 类、函数和变量。

通过在控制台将 developer(en) 设置为非零值、加载地图并执行 script_help,可以打印出官方文档。然而,该文档并未列出所有内容,因此需要通过其他方式查找。

除此之外,VScript 还包含许多 Squirrel 预定义的标准库函数。滑到下面 ↓以获取其列表。

Tip.png提示:关于如何设置 Visual Studio Code (VSCode)(包括 VScript 函数的自动完成)的教程可以 在此找到(en)
Tip.png提示:面向《Portal 2》初学者的 VScript 手册可以 在此找到

全局变量

实例 类型 描述
Entities CEntities ↓ 提供对服务器中已生成实体的访问。
Documentation table 一个包含 3 个文档(classesfunctionsinstances)的表格,存储与函数文档相关的信息。只有developer(en)级别大于 0 时存在。

全局钩子

这些钩子仅在根表中定义时才有效。

函数 函数声明 描述
ConnectOutputs void ConnectOutputs(table table) 在分配了脚本的实体生成后调用(即 vscripts 键值不为空),并将实体的作用域作为参数传递。与 OnPostSpawn 不同,此函数会立即调用,因此在重新加载地图时,此时可能某些实体尚不存在。
最初,此函数用于在实体生成时自动连接其输出,但用于此目的的 Squirrel 代码因一个崩溃问题而被禁用,该崩溃发生在正则表达式在保存/加载后未能正确保存/加载时。
证实:这个推测的崩溃是否仍会发生?

要重新启用此行为,请在根表中定义以下内容:

::__OutputsPattern <- regexp("^On.*Output$");

::ConnectOutputs <- function( table )
{
	const nCharsToStrip = 6;
	foreach( key, val in table )
	{
		if ( typeof( val ) == "function" && __OutputsPattern.match( key ) )
		{
			//printl(key.slice( 0, nCharsToStrip ) );
			table.self.ConnectOutput( key.slice( 0, key.len() - nCharsToStrip ), key );
		}
	}
}

要使用此系统,请在实体脚本中定义一个函数,其名称格式为 On<输出名称>Output,其中 <输出名称> 是您希望连接的实体输出的名称(省略 "On" 前缀,因为它已提供)。

Classes

CBaseEntity

这是一个用于实体的脚本句柄类。所有已生成的实体都拥有一个使用此类或其子类的脚本句柄。

所有游戏内的脚本句柄都可以通过 Entities ↓ 访问。实体脚本可以使用 self 来访问它们自己的脚本句柄。函数调用时可以访问 activatorcaller 变量。

方法

函数 函数声明 描述
__KeyValueFromInt
__KeyValueFromFloat
__KeyValueFromString
__KeyValueFromVector
bool __KeyValueFromInt(string 键名, int )
bool __KeyValueFromFloat(string 键名, int )
bool __KeyValueFromString(string 键名, string )
bool __KeyValueFromVector(string 键名, Vector )
根据特定数据类型设置实体的键值(en)。如果成功设置则返回 true,如果键不存在则返回 false。

此操作仅改变值,不会执行实体完全处理该键值可能需要的任何其他代码,例如更新实体内部网络状态的代码。这可能会对已生成的实体产生意外的副作用,例如向客户端显示视觉变化会有延迟。

ConnectOutput void CBaseEntity::ConnectOutput(string 输出名称, string 函数名) 添加一个输入/输出连接,当指定的输出触发时将调用命名函数。
DisconnectOutput void CBaseEntity::DisconnectOutput(string 输出名称, string 函数名) 从输入/输出事件中移除已连接的脚本函数。
Destroy void CBaseEntity::Destroy() 删除此实体。
entindex int CBaseEntity::entindex() 返回实体索引(en)
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(en)的速度值,因此仅对玩家、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() 获取当前生命值(en)
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(en)的速度值,因此仅对玩家、NPC和可移动的刷子实体有效,对 VPhysics 对象无效。
SetForwardVector void CBaseEntity::SetForwardVector(Vector) 设置实体前向(+X轴)向量。
SetHealth void CBaseEntity::SetHealth(int) 设置实体当前的生命值(en)
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(),则此函数优先执行,另一个函数不会运行。
Note.png注意:此钩子在内部由 CSimpleCallChainer ↓ 预定义,但在被重写前不会产生任何效果。
DispatchPrecache void DispatchPrecache() 在实体生成期间以及恢复之后调用,允许脚本预缓存它们所需的任何资源。
如果同时定义了此函数和 Precache(),则此函数优先执行,另一个函数不会运行。
Note.png注意:此钩子在内部由 CSimpleCallChainer ↓ 预定义,但在被重写前不会产生任何效果。
Input<输入名称> bool Input<输入名称>() 当实体收到与函数名称匹配的输入/输出(I/O)输入时调用。Input 之后的名称必须大小写匹配,例如 InputFireUser1 将捕获来自 ent_fire(en) 命令的任何 "FireUser1" 输入,但不会捕获 "fireuser1" 输入。

函数被调用时,变量 activatorcaller 会被添加到作用域中。该函数还必须返回一个布尔值,该值控制是否允许处理该输入,即返回 false 将取消该输入。

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 ↑

用于玩家(en)实体的脚本句柄类。

方法

函数 函数声明 描述
IsNoclipping bool CBasePlayer::IsNoclipping() 如果玩家处于穿墙模式则返回 true。

CEntities

脚本实例:Entities

一个用于查找和遍历游戏中实体脚本句柄的接口。要遍历一组实体,请在相应方法中向 *previous* 参数传递 null 以开始一次遍历。也可以传递一个先前找到的实体引用来继续搜索。遍历顺序由实体索引(en)决定;任何实体索引小于 *previous* 参数中实体索引的实体都将被跳过。[证实]

以下是两个遍历所有名为 "entityname" 的实体的等效示例:

local ent = null;  // 定义临时变量以方便之后遍历,null=从第一个实体开始遍历
while ( ent = Entities.FindByName(ent, "entityname") )  // while循环遍历
{
  // 这里放入你要执行的代码
}
for (local ent; ent = Entities.FindByName(ent, "entityname"); )  //for循环遍历
{
  // 这里放入你的代码
}
Note.png注意:
  • 变量名 ent 是任意的。
  • 请注意,在循环条件中我们使用的是"**=**"(赋值操作符),而不是"**==**"(相等比较符)!当没有匹配实体的实体索引(en)高于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(en) 的脚本句柄类。

方法

函数 函数声明 描述
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(en) 的脚本句柄类。

方法

函数 函数声明 描述
GetPartnerInstance handle CLinkedPortalDoor::GetPartnerInstance() 获取此门所链接伙伴的实例句柄。
GetPartnername string CLinkedPortalDoor::GetPartnername() 返回此门的伙伴名称。

CPropLinkedPortalDoor

继承自 CLinkedPortalDoor ↑

用于 prop_linked_portal_door(en) 的脚本句柄类。其方法与 CLinkedPortalDoor 相同。

CLogicScript

继承自 CBaseEntity ↑

用于 logic_script(en) 的脚本句柄类。

函数

函数 函数声明 描述
__AppendToScriptGroup void __AppendToScriptGroup(string 名称) 用于收集由实体组键值定义的实体的内部函数。仅在实体生成过程中短暂定义,之后会被移除。

变量

实例 类型 描述
EntityGroup array 包含此 logic_scriptGroup 键值所设置的每个实体的数组。仅当定义了一个或多个此类键值时,此变量才会被定义。

CPlayerVoiceListener

继承自 CAutoGameSystem(en)

维护来自不同玩家的语音通讯数据,以便服务器能对其做出反应。

方法

函数 函数声明 描述
GetPlayerSpeechDuration float CPlayerVoiceListener::GetPlayerSpeechDuration(int 玩家索引) 返回指定玩家持续说话的秒数。
IsPlayerSpeaking bool CPlayerVoiceListener::IsPlayerSpeaking(int 玩家索引) 返回指定玩家是否正在说话。

CPlayerVoiceListener

继承自 CAutoGameSystem(en)

维护来自不同玩家的语音通讯数据,以便服务器能对其做出反应。

方法

函数 函数声明 描述
GetPlayerSpeechDuration float CPlayerVoiceListener::GetPlayerSpeechDuration(int 玩家索引) 返回指定玩家持续说话的秒数。
IsPlayerSpeaking bool CPlayerVoiceListener::IsPlayerSpeaking(int 玩家索引) 返回指定玩家是否正在说话。

CPointTemplate

继承自 CBaseEntity ↑

用于 point_template(en) 的脚本句柄类。

函数

函数 函数声明 描述
__ExecutePreSpawn table|null __ExecutePreSpawn(handle 实体) 当服务器上的生成器准备预生成一个实体时执行的内部函数。它调用此函数,并传入正在准备生成的实体。

如果定义了 PreSpawnInstance 钩子,此函数将运行该钩子,并传入提供的实体参数。

__FinishSpawn void __FinishSpawn() 在实体完成生成后执行的内部函数。将 __EntityMakerResult 设置为 null

变量

实例 类型 描述
__EntityMakerResult table 包含应生成的实体的实体句柄。此变量仅存在于实体正在生成的过程中(之后会被删除),意味着只能在 PreSpawnInstancePostSpawn 钩子中访问。

钩子函数

函数 函数声明 描述
PreSpawnInstance table PreSpawnInstance(string 实体类名, string 实体名称) 如果定义了此函数,它将在实体被创建之前立即调用,任何返回的键值将被赋值给该实体。
Example
function PreSpawnInstance( entityClass, entityName )
{
	local keyvalues =
	{ 
   		rendercolor = "0 255 0"
   		targetname = "mySpawnedEntity"
	}
	return keyvalues
}

|- | PostSpawn || void PostSpawn(table 实体) | 在实体生成后被调用。一个包含已生成实体句柄的表格会作为参数传递给此函数,该表格以实体名称为索引。可利用此函数来连接输出,或在实体创建后执行所需操作。

Example
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》系列中 玩家(en) 实体的脚本句柄类。

方法

函数 函数声明 描述
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

模型 $键值(en) 块的脚本句柄表示。 子键是同一类的实例。

方法

函数 函数声明 描述
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(en) 的脚本句柄类。

方法

函数 函数声明 描述
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** 对象时,也会创建一个以 `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 example
// 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++ 向量(en) 类等效的类。一个三维向量,重载了针对向量和标量值的算术运算。

方法

函数 函数声明 描述
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 * 数值。将向量中的每个分量乘以这个缩放因子。
Note.png注意:数值**必须**放在向量后面。
_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 上显示一条消息。
Note.png注意:使用在 /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 关卡名) 向指定分支的关卡列表中添加一个关卡。
Note.png注意:在合作模式地图中,此函数必须至少调用一次,否则玩家将无法移动。
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(en) 级别设置为大于 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(en) 事件。
EntFire function EntFire(目标, 动作, 值, 延迟, 激活者) 生成一个实体 I/O(en) 事件。值、延迟和激活者是可选的。
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 来自 Squirrel 内置的标准库的函数、类和变量列表。并非链接文档中的所有函数都存在于 VScript 中,例如 blob 库。

通用

常量

实例 类型 描述
_charsize_ 整数 1 虚拟机内部表示字符的字节大小。
_intsize_ 整数 4 虚拟机内部表示整数的字节大小。
_floatsize_ 整数 4 虚拟机内部表示浮点数的字节大小。
_version_ 字符串 "Squirrel 2.2.3 stable" 描述虚拟机与编译器版本的字符串值。
Note.png注意:这些只是全局变量,即根表中的表项。它们可以随意更改,例如 ::_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。
Example
{
	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 数学库

        1. 常量
实例 类型 描述
PI 浮点数 3.141592 数学常数 π,圆周与直径的比率。
RAND_MAX 整数 32767 rand() 函数能返回的最大值。
Note.png注意:这些只是全局变量,即根表中的表项。它们可以随意更改,例如 ::PI = 3
        1. 函数
函数 函数声明 描述
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)。请注意参数 xy 的顺序!

另请参阅 atan2

floor float floor(float x) 返回一个浮点值,表示小于或等于 x 的最大整数 (⌊x⌋)。
ceil float ceil(float x) 返回一个浮点值,表示大于或等于 x 的最小整数 (⌈x⌉)。
pow float pow(float x, float y) 返回 xy 次幂 (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 种子) 设置生成一系列伪随机整数的起始点。
      1. 字符串

内置的 Squirrel 字符串库

        1. 函数
函数 函数声明 描述
format string format(string 格式, 参数...) 返回一个格式化字符串。规则与标准 C 函数相同(除了不支持 *)。
split array split(string 字符串, string 分隔符) 返回一个字符串数组,该数组在 *分隔符* 字符串在 *字符串* 中出现的每个点处分割。分隔符不作为任何数组元素的一部分返回。
strip string strip(string 字符串) 移除给定字符串开头和结尾的空白字符。
lstrip string lstrip(string 字符串) 移除给定字符串开头的空白字符。
rstrip string rstrip(string 字符串) 移除给定字符串结尾的空白字符。
        1. 正则表达式 (Regexp)

内置的用于正则表达式的 Squirrel 类

函数 函数声明 描述
constructor regexp(string 模式) 创建并编译由 *模式* 表示的正则表达式。
Note.png注意:如果要在正则表达式中插入一个反斜杠而不是转义字符,请确保使用双反斜杠 (\\ 而不是 \)。
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() 计算正则表达式中存在的分组数量。
Note.png注意:整个正则表达式被视为一个分组,因此结果将始终 ≥ 1。
_typeof string regexp::_typeof() typeof 重载。返回 "regexp"。
      1. 类型
        1. 整数 (Integer)
函数 函数声明 描述
tointeger int tointeger() 返回整数的值(空函数)。
tofloat float tofloat() 将整数转换为浮点数并返回。
tostring string tostring() 将整数转换为字符串并返回。
tochar string tochar() 返回一个包含由该整数表示的单个字符的字符串。
weakref int weakref() 空函数,返回整数本身。
        1. 浮点数 (Float)
函数 函数声明 描述
tointeger int tointeger() 将浮点数转换为整数并返回。
tofloat float tofloat() 返回浮点数的值(空函数)。
tostring string tostring() 将浮点数转换为字符串并返回。
tochar string tochar() 返回一个包含由浮点数整数部分表示的单个字符的字符串。
weakref float weakref() 空函数,返回浮点数本身。
        1. 布尔值 (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() 空函数,返回布尔值本身。
        1. 字符串 (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() 返回对象的弱引用。
        1. 表 (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() 返回对象的弱引用。
        1. 数组 (Array)
          1. 方法

以下属于数组对象的成员方法,换句话说,它们必须在数组上使用点操作符调用,例如 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() 返回对象的弱引用。
          1. 函数

以下属于全局数组函数,例如 arr = array(3, 0)

函数 函数声明 描述
array array(int 长度, any 填充值 = null) 返回一个给定长度的新数组,其中每个元素都设置为 填充值
        1. 函数 (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 参数将始终设置为 *环境对象*。
Note.png注意:创建的函数对其环境对象持有弱引用,因此不能用于控制其生命周期。
getinfos table getinfos() 返回一个包含函数信息的表,例如参数、名称和源名称。
Example
//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() | 返回对象的弱引用。 |}

        1. 类 (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() 返回对象的弱引用。
        1. 类实例 (Class instance)
函数 函数声明 描述
getclass class getclass() 返回创建此实例的类。
rawin bool rawin(any ) 检查实例中是否存在指定的键,不使用委托。
tostring string tostring() 尝试调用 _tostring 元方法。如果失败,则返回格式为 "(instance: <指针>)" 的字符串。
weakref weakref weakref() 返回对象的弱引用。
        1. 生成器 (Generator)
函数 函数声明 描述
getstatus string getstatus() 以字符串形式返回生成器的状态:"running"(运行中)、"dead"(死亡)或 "suspended"(已挂起)。
tostring string tostring() 返回格式为 "(generator: <指针>)" 的字符串。
weakref weakref weakref() 返回对象的弱引用。
        1. 线程 (Thread)
          1. 方法

以下属于线程对象的成员方法,换句话说,它们必须在线程上使用点操作符调用,例如 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() 返回对象的弱引用。
          1. 函数

以下属于全局线程函数,例如 thread = newthread(func)

函数 函数声明 描述
newthread thread newthread(function 线程函数) 创建一个新的协作式线程对象(协程)并返回。
Warning.png警告:协程会引入额外的开销,并且需要非常特定的配置以避免服务器崩溃。
PlacementTip.png解决方案:使用 生成器函数 代替。生成器可以将开销大的函数分散到多个帧中执行,以避免卡顿/超时。 TF2 实际应用示例
suspend any suspend(any 返回值 = this) 挂起调用此函数的协程。需要在线程的函数体内调用。接受一个可选参数,该参数将用作唤醒线程的函数(wakeup 方法)的返回值。如果未传递任何参数,则默认为 this(调用此函数的作用域)。返回的值将在下一次线程唤醒时接收,具体取决于 wakeup 方法中传递的内容。
        1. 弱引用 (Weak reference)

弱引用允许您引用一个对象,而不阻止其被垃圾回收。当您想引用一个对象,但又不想增加其引用计数并无必要地保持其存活时,弱引用非常有用。当弱引用所指向的对象被销毁时,弱引用会自动设置为 null。返回对象弱引用的 weakref 方法存在于 Squirrel 中的每个对象上,但原始类型(如数字)会返回自身,因为它们的存储方式不同,因此使此方法变得多余。其他一切均按预期工作。

函数 函数声明 描述
ref instance ref() 返回弱引用所指向的对象,如果所指向的对象已被销毁,则返回 null。
tostring string tostring() 返回格式为 "(weakref: <指针>)" 的字符串。
weakref weakref weakref() 返回对象的弱引用。

另请参阅