Add Zookeeper's nifty side-limit macros to the library.
This commit is contained in:
parent
1d7e8c37ea
commit
9f0ac0824a
1 changed files with 162 additions and 0 deletions
162
data/core/macros/sidelimit-utils.cfg
Normal file
162
data/core/macros/sidelimit-utils.cfg
Normal file
|
@ -0,0 +1,162 @@
|
|||
# Side-limit macros for balancing AI behaviour. You can, for example
|
||||
# give an AI side the possibility to recruit high level units but not to have
|
||||
# too many of them at the same time. Note: These generate events, so they need
|
||||
# to be placed directly under your [scenario] tag, and not within an event
|
||||
# such as start or prestart.
|
||||
|
||||
#define LIMIT_CONTEMPORANEOUS_RECRUITS SIDE TYPE LIMIT
|
||||
# Limit the number of units of a certain type a side can have
|
||||
# simultaneously. When the number of units of type TYPE the side
|
||||
# has reaches or exceeds LIMIT, that side is prevented from
|
||||
# recruiting more until the number of units of that type drops
|
||||
# below LIMIT again.
|
||||
#
|
||||
# Allow side 2 no more than 2 Troll Rocklobbers at a time
|
||||
#! {LIMIT_CONTEMPORANEOUS_RECRUITS 2 (Troll Rocklobber) 2}
|
||||
[event]
|
||||
name=side turn
|
||||
first_time_only=no
|
||||
|
||||
[if]
|
||||
[variable]
|
||||
name=side_number
|
||||
equals={SIDE}
|
||||
[/variable]
|
||||
|
||||
[then]
|
||||
[store_unit]
|
||||
[filter]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/filter]
|
||||
|
||||
kill=no
|
||||
variable=LIMIT_CONTEMPORANEOUS_RECRUITS_temp
|
||||
[/store_unit]
|
||||
|
||||
[if]
|
||||
[variable]
|
||||
name=LIMIT_CONTEMPORANEOUS_RECRUITS_temp.length
|
||||
greater_than_equal_to={LIMIT}
|
||||
[/variable]
|
||||
|
||||
[then]
|
||||
[disallow_recruit]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/disallow_recruit]
|
||||
[/then]
|
||||
|
||||
[else]
|
||||
[allow_recruit]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/allow_recruit]
|
||||
[/else]
|
||||
[/if]
|
||||
|
||||
{CLEAR_VARIABLE LIMIT_CONTEMPORANEOUS_RECRUITS_temp}
|
||||
[/then]
|
||||
[/if]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=recruit
|
||||
first_time_only=no
|
||||
|
||||
[filter]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/filter]
|
||||
|
||||
[store_unit]
|
||||
[filter]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/filter]
|
||||
|
||||
kill=no
|
||||
variable=LIMIT_CONTEMPORANEOUS_RECRUITS_temp
|
||||
[/store_unit]
|
||||
|
||||
[if]
|
||||
[variable]
|
||||
name=LIMIT_CONTEMPORANEOUS_RECRUITS_temp.length
|
||||
greater_than_equal_to={LIMIT}
|
||||
[/variable]
|
||||
|
||||
[then]
|
||||
[disallow_recruit]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/disallow_recruit]
|
||||
[/then]
|
||||
[/if]
|
||||
|
||||
{CLEAR_VARIABLE LIMIT_CONTEMPORANEOUS_RECRUITS_temp}
|
||||
[/event]
|
||||
#enddef
|
||||
|
||||
#define LIMIT_RECRUITS SIDE TYPE LIMIT
|
||||
# Limit the total number of units of a given type a given side
|
||||
# can recruit in the scenario.
|
||||
#
|
||||
# Allow side 2 no more than 1 Draug in the entire scenario
|
||||
#! {LIMIT_RECRUITS 2 (Draug) 1}
|
||||
[event]
|
||||
name=prestart
|
||||
|
||||
{VARIABLE side_{SIDE}_limited_recruits_length -1}
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=recruit
|
||||
first_time_only=yes
|
||||
|
||||
[filter]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/filter]
|
||||
|
||||
{VARIABLE_OP side_{SIDE}_limited_recruits_length add 1}
|
||||
|
||||
{VARIABLE_OP LIMIT_RECRUITS_temp1 format "side_{SIDE}_limited_recruits[$side_{SIDE}_limited_recruits_length|].type"}
|
||||
{VARIABLE $LIMIT_RECRUITS_temp1 {TYPE}}
|
||||
{CLEAR_VARIABLE LIMIT_RECRUITS_temp1}
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=recruit
|
||||
first_time_only=no
|
||||
|
||||
[filter]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/filter]
|
||||
|
||||
{VARIABLE_OP LIMIT_RECRUITS_temp2 format "side_{SIDE}_limited_recruits[$side_{SIDE}_limited_recruits_length|].recruited"}
|
||||
{VARIABLE_OP $LIMIT_RECRUITS_temp2 add 1}
|
||||
{CLEAR_VARIABLE LIMIT_RECRUITS_temp2}
|
||||
|
||||
{FOREACH side_{SIDE}_limited_recruits i}
|
||||
[if]
|
||||
[variable]
|
||||
name=side_{SIDE}_limited_recruits[$i].type
|
||||
equals={TYPE}
|
||||
[/variable]
|
||||
|
||||
[variable]
|
||||
name=side_{SIDE}_limited_recruits[$i].recruited
|
||||
equals={LIMIT}
|
||||
[/variable]
|
||||
|
||||
[then]
|
||||
[disallow_recruit]
|
||||
side={SIDE}
|
||||
type={TYPE}
|
||||
[/disallow_recruit]
|
||||
[/then]
|
||||
[/if]
|
||||
{NEXT i}
|
||||
[/event]
|
||||
#enddef
|
Loading…
Add table
Reference in a new issue