Left 4 Dead 2 – How to Create Dynamic Aliases for Existing Commands – Project-Smok

Left 4 Dead 2 – How to Create Dynamic Aliases for Existing Commands – Project-Smok 1 - steamlists.com
Left 4 Dead 2 – How to Create Dynamic Aliases for Existing Commands – Project-Smok 1 - steamlists.com
A detailed guide on creating aliases using project_smok

 

Introduction

This guide explains how to create dynamic aliases for existing commands in detail using the project_smok add-on. Everything about this add-on is documented in it’s github.com – https://github.com/semihM/project_smok. This guide was made for versions of project_smok v2.0.0 and higher.

https://steamcommunity.com/sharedfiles/filedetails/?id=2229460523

Follow each section in order to successfully create a custom command. If you have any questions, suggestions or issue reports, feel free to ask, share and report them in the add-on’s discussions:

This topic is a quite complicated compared to any other feature project_smok provides. If you get lost or get error messages, feel free to ask questions!

This guide will updated in the future to include more complicated examples.

Aliases in project_smok

Aliases in project_smok were meant to be created for making commands more customizable an enable various features that allow commands to be called in ways that isn’t possible otherwise.Some of these features are:

  • Delayed command calls: Wait a certain time before executing the command. A similar thing is actually possible with the wait console command, but this is much easier and dynamic.
  • Repeated commands calls: Repeat the command execution given times with given delays. Allows commands to be called more than once with a single call, allowing custom delays between calls.
  • Expressional arguments: Compile expressional arguments to get dynamic values. Use the returned result of evaluated expressions as arguments. This is basically the same thing using $[expression] format as your command arguments.
  • Alias variables: Access to some variables easily. Let’s you access to command caller player’s information and some other features using $variable format.

 

Locating the configuration files

project_smok lets you customize settings and create commands and much more through the configuration files. These configuration files are created after you start a map at least once.

You can locate the configuration files under the directory

\Steam\steamapps\common\Left 4 Dead 2\left4dead2\ems\admin system

The \aliases folder allows you to alias commands with dynamic settings.

Left 4 Dead 2 - How to Create Dynamic Aliases for Existing Commands - Project-Smok

In this folder, there are at least 4 files:

  • example_alias_file.txt: An example alias file introduced in v1.0.0
  • example_alias_file_v{x}_{y}_{z}.txt: An example alias file introduced in v{x}.{y}.{z}
  • file_list.txt: List of file names to include from this folder

Left 4 Dead 2 - How to Create Dynamic Aliases for Existing Commands - Project-Smok

You can read/edit the example files with any text editor.

Creating a new alias file

Create a new text file and name it however you want with .txt text file extension.

Left 4 Dead 2 - How to Create Dynamic Aliases for Existing Commands - Project-Smok

Left 4 Dead 2 - How to Create Dynamic Aliases for Existing Commands - Project-Smok

Start editing the file you’ve created with a text editor ( notepad, VS Code etc. )

Left 4 Dead 2 - How to Create Dynamic Aliases for Existing Commands - Project-Smok

Alias file format

Alias files follow the table data type syntax of Squirrel language:

// Things after "//" characters are comments, lets you take notes // Key-value pairs enclosed with { and } characters { key = value // value's type may vary }

Collapsed definition of a basic alias table

Left 4 Dead 2 - How to Create Dynamic Aliases for Existing Commands - Project-Smok

The alias tables must contain certain key-value pairs in order for them to be a valid alias. Names of the keys in these pairs are given in the following table. Default value column shows what value is used when key is not present or value type is incorrect.

Key Value Type Default value Explanation
MinimumUserLevel user level PS_USER_NONE Minimum user level required to use the alias. Check github.com – https://github.com/semihM/project_smok#user-levels-system
Help table {} Documentation for the alias
Parameters table {} Parameters of this alias
Commands table {} Commands which will be called when this alias is called

 


Expected key-value pairs for table data typed values are given as below. All of these pairs in these tables are optional.

Help table

 

Key Value Type Default value Explanation
docs string “” Explanation of what this alias does
param_{x} table or string Will not be shown Details for xth parameter in a table or short description string

 

Help.param_{x}tables

 

Key Value Type Default value Explanation
name string “param_{x} Name of this parameter
docs string “Unknown…” Explanation of what this parameter is for
when_null string Default value fromParameterstable or not shown What value is used when this parameters doesn’t get an argument

 


 

Parameters table

 

Key Value Type Default value Explanation
param_{x} string or null null {x}th parameter declaration and it’s default value.

 


 

Commands table

 

Key Value Type Default value Explanation
{command_name} table {} {command_name} call information table. Contains arguments and timing settings. Accepts alias names which were loaded from other files before this one.

 

Commands.{command_name}tables

 

Key Value Type Default value Minimum value Explanation
start_delay integer, float or string(only $variable or $[expressions]) 0 0 Time in seconds to wait after using the alias to call this command
repeat integer or string(only $variable or $[expressions]) 1 1 Times to repeat this command
delay_between integer, float or string(only $variable or $[expressions]) 0.1 0.1 Times to repeat this command
arg_{x} string or null null not checked {x}th argument’s value. Most commands expect string or null as arguments. If $[expression] format is used, result of evaluating the expression will be used directly, make sure the expression evaluates to a string or null

 

Alias variables

There are variables available for each alias call which are accessible using $variable format inside Commands table of the alias table. This format can be used directly as a string.

{ key = "$variable" }

These variables can also be used inside a $[expression] format. In this case all known $variable variables will be replaced using sub-string replace methods, meaning both values will be treated as strings during replacement process.

// These variables don't exist, named to self-document { key = "$[ \"$non_string\" + \"concatenated string\" ]" // - Used \" to use as strings key2 = "$[ $string_variable ]" key3 = "$[ $string_variable.len().tostring() ]" }

All available variables are given in the table below.

Variables (dynamic)

 

 

Variable Name Value Type Explanation Example Use
$repeat_id integer Repeat number of the current command call. Starts 1, increased by 1 at the end of the repeat
"$repeat_id"

$repeats_left

 

integer

 

Repeat number left of the current command call. Starts Commands.{command_name}.repeat, decreased by 1 at the start of the repeat.

 

“$repeats_left”

 

$last_call_timefloatStores last repeat’s Time() at the start of that repeat. Will be same as Time() call for the first command call

"$last_call_time"

 

 


 

Variables (non-dynamic)

 

,”$[ $param_1 == 5 ? \”is 5\” : \”not 5\” ]”

Variable Name Value Type Explanation Example Use
$param_{x} string or null Access to {x}th argument passed in alias call. “$param_{x}” will be replaced with {x}th argument is passed, otherwise Parameters.param_{x} default value is used
"$param_1"

$caller_entVSLib.PlayerCommand’s caller as VSLib.Player, can be used to access to this classes methods.

"$[$caller_ent.GetSteamID()]"

 

$caller_idintegerCommand’s caller’s entity index.

"$caller_id"

 

$caller_charstringCommand’s caller’s character name fist character capitilized.

"$caller_char"

 

$caller_namestringCommand’s caller’s steam name.

"$caller_name"

 

$caller_targetVSLib.Entity or nullCommand’s caller’s target (object they’re aiming at) or null. Uses GetLookingEntity() method.

"$caller_target"

 

Full view of the basic alias table shown in last section:

Left 4 Dead 2 - How to Create Dynamic Aliases for Existing Commands - Project-Smok

NOTE: This alias won’t work since existing_command_1 isn’t really a command(unless you create one yourself!)

Registering the alias

After the alias table file is created, you need to write the file name of the file name without the extension to the file_list.txt file to register the aliases in that file.

Left 4 Dead 2 - How to Create Dynamic Aliases for Existing Commands - Project-Smok

Check your console to see if the aliases were registered.

Some basic examples

Contents of my_alias_file.txt are given below.

// Make sure to: // + Start with a { character // + End with a } character { my_basic_alias = { MinimumUserLevel = PS_USER_ADMIN Help = { docs = "a cool alias" param_1 = "used as 1st argument" param_2 = { name = "second_param" docs = "is passed as 3rd argument" when_null = "nothing is passed to 3rd argument" } } Parameters = { param_1 = "default_value_1" param_2 = null // no default value } Commands = { // Calls below will be equivelant: // !my_basic_alias arg1 arg2 // !existing_command_1 arg1 static_value arg2 existing_command_1 = { start_delay = 0 repeat = 1 delay_between = 0.5 arg_1 = "$param_1" // Use param_1's value arg_2 = "static_value" arg_3 = "$param_2" // Use param_2's value } } } }

Here are some other very basic alias tables:

// Some basic alias table examples { throw_grabbed = { MinimumUserLevel = PS_USER_ADMIN Help = { docs = "alternative command to yeet command" } Commands = { yeet = {} } } random_francis_line = { MinimumUserLevel = PS_USER_SCRIPTER Help = { docs = "speak a random line by Francis" } Commands = { randomline = { arg_1 = "self" arg_2 = "francis" } } } }

 

Written by rhino

This is all about Left 4 Dead 2 – How to Create Dynamic Aliases for Existing Commands – Project-Smok; I hope you enjoy reading the Guide! If you feel like we should add more information or we forget/mistake, please let us know via commenting below, and thanks! See you soon!


Be the first to comment

Leave a Reply

Your email address will not be published.


*