4. Global tags - HafisCZ/sf-tools GitHub Wiki
Macros | Filters | Auxiliaries | Elements | Aspect/Design | Utilities
You can use if <condition_expression>
to disable certain parts of the script (set
variables won't work here because its evaluation takes place when parsing the text)
category
if 1 == 0
header Don't show this
expr 'x'
end
if 1 == 1
header Show this
expr '✓'
end
header Checkmarks :)
if 1 == 0
expr 'x'
end
if 1 == 1
expr '✓'
end
header Checkmarks with else :)
if 1 == 0
expr 'x'
else
expr '✓'
end
You can have a variable changing it's value throughout the script by using the keyword var <name> <const_value>
and accessing it via var(<name>)
. It's scoped to category/header. Doesn't work with if
because it is evaluated after parsing the text.
category
header Level
var self Actual Lvl
expa var(self)
header
var self Level plus 5
expa var(self)
expr Level+5
header
var self Level plus 10
expa var(self)
expr Level + 10
In some special cases it's useful to generate multiple categories and headers with related properties at once. This can be achieved via a loop: loop <loop_vars> for <loop_array>
+ end
keyword pair. Category and header definitions enclosed by the loop will be repeated once for each element in the array, where the loop variable placeholders __<loop_var>__
will take the value specified in the array at the index of iteration. The substitution happens at the parsing phase so <loop_vars>
work in if
.
set CategoryNames with all as ['Category A', 'Category B']
set HeaderNames with all as ['Header A', 'Header B']
set Values with all as [ 100, 200, 300, 400 ]
loop category, header for [[0, 0], [0, 1], [1, 0], [1, 1]]
if __header__ == 0
category
expa CategoryNames[__category__]
end
header
expa HeaderNames[__header__]
expr Values[__category__ * 2 + __header__]
end
# FIRST ITERATION: <loop_vars> "category" and "header" both = 0
# The code is interpreted as:
if 0 == 0
category
expa CategoryNames[0]
end
header
expa HeaderNames[0]
expr Values[0*2 + 0]
⚠️ If you extend definitions inside aloop
(ex.perc:header Level
) and they contain__<loop_var_name>__
placeholders, they won't be substituted. You must usevar(<loop_var_name>)
in the definition for that.
Indicates whether options should be used or not depending on the type of the table.
You can use it to create single script that will work in all types of tables.
if Group
# Will be set for group tables
else
# Will be set for me & players tables
end
if not Players
# Will be set for me & group tables
end
if Player
# Will be set for me tables
end
Can also use different headers/colors for light/dark/custom modes
if theme == 'light'
something
else
something
end
[Me,Players] Excludes files that match the provided expression
discard Level<438
Constants | Constant Expressions | Local Variables | Table Variables | Custom Functions
const
keyword allows you to define custom constants or override the default ones.
# Create new constant red_color with value red
const red_color red
# Change default green to white in hex
const green ffffff
constexpr
keyword allows you to define custom constants evaluated from non-capture dependent expressions
# Create new constant that is an array
constexpr colors ['red','green','blue']
# Create new constant that is evaluated from a viable expression
set getTransparency with S as { 0: '00', 10: '66', 15: 'B3', 25: 'FF' }[S]
constexpr greenaline 'green' + getTransparency(15)
Creates a local variable. These are calculated individually for each player object.
# Get intelligence resistance for the current player
set bigBrainReduction as Intelligence/2
#Use Variable within a header
header Int Resist
expr bigBrainReduction
You can also create a embedded local variable directly within a header using $! <variableName> { <expression> }
.
header Int Resist
expr $! bigBrainReduction {Intelligence/2}
header Int Recover
expr bigBrainReduction*2
Creates a table variable. These are calculated only once for the whole table: all players in [Players,Guild] vs all player instances in [Me].
# Get maximum level of all players
set Maximum Level with all as max(map(this, Level))
# Use variable within a header
header Max Level
expr Maximum Level
You can also create a embedded table variable directly within a header by using $ <variableName> { <expression> }
.
# Anonymous table variable
header Max Level
expr ${ max(map(this, Level)) }
# Named table variable
header Max Level
expr $ myVariable { max(map(this, Level)) }
# Reuse table variable
header Max Level 2
expr myVariable
Creates a function. Every function has to have at least one parameter.
# Returns player level + 5
set New Level with P as Level(P) + 5
# Use function within a header
header My Level
expr New Level(player)
Table | Statistics | Details Row | Members | Element Ordering
It refers to the main table defined by the categories and headers in the applied template. It's always shown by default.
Creates a statistic row. If used, it will replace the original Min, Average, Max rows.
statistics Own Minimum as min(this)
Creates a row outside of the table with a specified expression
show Maximum Level as max(map(this, Level)) |
---|
[Guild] Shows list with classes and members that joined or left.
members on
Allows you to change the layout of the table. You can change the order of the elements or duplicate them if necessary.
# Default configuration
layout table statistics members rows
# Example with a line (|) and empty row (_) separating statistics from table
layout statistics | _ table members rows
Lined Rows | Scaling | Font | Alternating Rows | Large Rows | Row height | Theme Dark | Theme Custom | Width Policy
Shows lines between each table row
# Disable lines
lined off
# Show thin lines
lined on
# or
lined thin
# Show thick lines
lined thick
Scales the width of all headers. Default value is 100.
# Scale headers down to 80% of their original width
scale 80
Sets the font of the table. You can use any css font string as an argument.
# Scale font down to 80% of its original size
font 80%
Adds a default background to every other row (i.e. alternating row coloring)
opaque on
Increases the height of all rows
large rows on
Sets the height of all rows (if above the required minimum)
row height 20
Dark theme for your table. Turns the whole table default background blackish and default text color white:
theme dark
Customize color theme for your table. You can set the table default background and default text colorcodes:
theme text:cyan background:99999999 |
---|
You can make the table either use the exact specified widths or adjust itself to content by toggling <strict|relaxed>
respectively.
<relaxed>
is the default behavior.
width policy strict
Index | Outdated | Simulator | Performance |
You can add an index on the start of the row. They can also be static (will not change when sorting).
# Disable indexes
indexed off
# Enable indexes
indexed on
# Enable indexes (ignores sorting)
indexed static
Customizing the index column is possible by hijacking the order, name and style of the first header specified.
The displayed text though is kept the normal row number index be it <static>
or <on>
(dynamic).
# Highlight own chars index in red
indexed static
indexed custom header
left category #necessary otherwise the default left category 1st header is used
header \#2.0
expr Own
expc this? 'red':'green'
[Players] Highlights player names in red if they are not present in the latest file.
outdated on
Simulator target (Guild, Players): Sets simulator to 1vAll mode. The argument is the player id of a player that will be attacked by all players.
simulator target w27_net_p100
Simulator source (Guild, Players): Sets simulator to 1vAll mode. The argument is the player id of a player that will attack all players.
simulator source w27_net_p100
Iteration Count (Guild): Sets simulator iteration count. Use with caution.
# Set simulator to 100 iterations per fight in guild table
simulator 100
Note: for Players table the same thing is achieved with the x: <number_of_fights>
filter
[Players] Limits the number of displayed rows at once for performance reasons.
# Shows only top 5 players
performance 5