Logic script: Difference between revisions
Jump to navigation
Jump to search
Line 11: | Line 11: | ||
== KeyValues == | == KeyValues == | ||
{{KV Targetname}} | {{KV Targetname}} | ||
{{KV|EntityGroup[0]|intn=Group00|to=EntityGroup[15]|intn2=Group15|target_destination|All specified entity names will be searched for upon this entity spawning and their [[VScript_Fundamentals#Script_Handles|script handles]] are added to an array named <code>EntityGroup</code> in <code>logic_script</code>'s script scope. <code>EntityGroup[0]</code> contains handle of entity with name specified in '''EntityGroup[0]''' property etc. If multiple entities with the given named exists, handle of first found will be used.}} | {{KV|EntityGroup[0]|intn=Group00|to=EntityGroup[15]|intn2=Group15|target_destination|All specified entity names will be searched for upon this entity spawning and their [[VScript_Fundamentals#Script_Handles|script handles]] are added to an array named <code>EntityGroup</code> in <code>logic_script</code>'s script scope. <code>EntityGroup[0]</code> contains handle of entity with name specified in '''EntityGroup[0]''' property etc. If multiple entities with the given named exists, handle of first found will be used. | ||
{{KV|Entity Scripts|intn=vscripts|scriptlist|since=L4D2|Space delimited list of [[VScript]] files (without file extension) that are executed after all entities have spawned. The scripts are all executed in the same script scope, later ones overwriting any identical variables and functions.}} | :Table <code>MyEntityGroup</code> is also created which contains the handles with keys being the names. (for some reason there is also <code>MyEntityGroupArray</code> which is same as <code>EntityGroup</code>) | ||
{{expand|margin_left=2em|title=Vscript run internally to achieve this| | |||
The following vscript is run in logic_script scope when it spawns. <code>__AppendToScriptGroup</code> is then called with each name specified by <code>Group00</code>-<code>Group15</code> keyvalues. | |||
<syntaxhighlight lang=js>EntityGroup <- []; | |||
MyEntityGroup <- {}; | |||
MyEntityGroupArray <- EntityGroup; | |||
function __AppendToScriptGroup( name ) | |||
{ | |||
if ( name.len() == 0 ) | |||
{ | |||
EntityGroup.append( null ); | |||
} | |||
else | |||
{ | |||
local ent = Entities.FindByName( null, name ); | |||
EntityGroup.append( ent ); | |||
if ( ent != null ) | |||
{ | |||
ent.ValidateScriptScope(); | |||
MyEntityGroup[name] <- ent; | |||
ent.GetScriptScope().EntityGroup <- EntityGroup; | |||
} | |||
} | |||
}</syntaxhighlight> | |||
}}}} | |||
{{KV|Entity Scripts|intn=vscripts|scriptlist|since=L4D2|Space delimited list of [[VScript]] files (without file extension) that are executed after all entities have spawned. The scripts are all executed in the same script scope, later ones overwriting any identical variables and functions. }} | |||
{{KV|[[Entity_Scripts#Thinker_Functions|Think function]]|intn=thinkfunction|string|since=L4D2|Name of the function within this entity's script that'll be called automatically every 100 milliseconds, or a user-defined interval if the function returns a number. Avoid [[expensive]] operations in this function, as it may cause performance problems.}} | {{KV|[[Entity_Scripts#Thinker_Functions|Think function]]|intn=thinkfunction|string|since=L4D2|Name of the function within this entity's script that'll be called automatically every 100 milliseconds, or a user-defined interval if the function returns a number. Avoid [[expensive]] operations in this function, as it may cause performance problems.}} | ||
Revision as of 22:52, 11 October 2024
![]() |
---|
CLogicScript |
logic_script
is a point entity available in all Source games since
Left 4 Dead 2. It is also available in
Team Fortress 2 and
Mapbase and it is the container for VScripts. In Left 4 Dead 2, for example, this entity is used extensively for the logic in "carnival games" found in the Dark Carnival campaign, such as Peanut Gallery, Strongman Contest, Whack-a-Stach, etc.
KeyValues
- Name (targetname) <string>[ Edit ]
- The name that other entities refer to this entity by, via Inputs/Outputs or other keyvalues (e.g.
parentname
ortarget
).
Also displayed in Hammer's 2D views and Entity Report.See also: Generic Keyvalues, Inputs and Outputs available to all entities
- EntityGroup[0] (Group00) to EntityGroup[15] (Group15) <targetname>
- All specified entity names will be searched for upon this entity spawning and their script handles are added to an array named
EntityGroup
inlogic_script
's script scope.EntityGroup[0]
contains handle of entity with name specified in EntityGroup[0] property etc. If multiple entities with the given named exists, handle of first found will be used. - Table
MyEntityGroup
is also created which contains the handles with keys being the names. (for some reason there is alsoMyEntityGroupArray
which is same asEntityGroup
)
The following vscript is run in logic_script scope when it spawns. EntityGroup <- [];
MyEntityGroup <- {};
MyEntityGroupArray <- EntityGroup;
function __AppendToScriptGroup( name )
{
if ( name.len() == 0 )
{
EntityGroup.append( null );
}
else
{
local ent = Entities.FindByName( null, name );
EntityGroup.append( ent );
if ( ent != null )
{
ent.ValidateScriptScope();
MyEntityGroup[name] <- ent;
ent.GetScriptScope().EntityGroup <- EntityGroup;
}
}
}
|
- Entity Scripts (vscripts) <scriptlist> (in all games since
)
- Space delimited list of VScript files (without file extension) that are executed after all entities have spawned. The scripts are all executed in the same script scope, later ones overwriting any identical variables and functions.
- Think function (thinkfunction) <string> (in all games since
)
- Name of the function within this entity's script that'll be called automatically every 100 milliseconds, or a user-defined interval if the function returns a number. Avoid expensive operations in this function, as it may cause performance problems.
Inputs
- RunScriptFile <script > (in all games since
) (also in
)
- Execute a VScript file from disk, without file extension. The script contents are merged with the script scope of the receiving entity.
- RunScriptCode <string > (in all games since
) (also in
)
- Execute a string of VScript source code in the scope of the entity receiving the input. String quotation may be needed when fired via console.
- CallScriptFunction <string > (in all games since
) (also in
) !FGD
- Calls a VScript function defined in the scope of the receiving entity.
- TerminateScriptScope (only in
) !FGD
- Destroys the script scope of the receving entity.
See also
External links
- It's the vscripting documentation FAQ! (Steam Forums)
- Scripting for Left 4 Dead 2 (Leeland.net) - Example uses of logic_script