Latest revision |
Your text |
Line 1: |
Line 1: |
− | {{TOCRIGHT}}
| + | = Introduction = |
− | ==Introduction==
| + | Pattern scripts is special kind of expressions that returns 1 or 0. |
− | Pattern scripts is special kind of expressions that returns 1 or 0. Script can check and combine wide range of conditions (gametime, special parms of entities, [[Infoportions | infoportions]] etc.). Pattern script are used for enemy appearance, gamemodel damage masks, trigger touchability and other events which only need to control availability of some action. | + | |
| | | |
− | ===Script input===
| + | Pattern scripts are used to determine availability of some functionality or event, checks for special conditions. |
− | * Pattern - script string
| + | |
− | * Script owner - entity that owns script
| + | |
− | * Script activator - entity that launched comparison event
| + | |
| | | |
− | ===Script rules===
| + | Pattern scripts can check for very wide range of conditions (gametime, special parms of entities, [[Infoportions | infoportions]] etc.). |
− | * Instructions are case sensative
| + | |
− | * Operators (excluding ''('' and '')'') should be separated with space or tab.
| + | |
− | * Null script always returns 1
| + | |
| | | |
− | Basic syntax:
| + | Example of things controlled by pattern scripts: |
| | | |
− | // this script check if its a night or if there is an enemy within 300 units
| + | * Enemy appearance (some enemies are only active at night, some only at day etc.) |
− | night | enemy<300>.found
| + | * Gamemodels damage masks (checks if could be damaged by certain weapon) |
| + | * Checking if trigger could be touched |
| | | |
− | // this scripts check if gametime is between 12 and 14 hours
| |
− | hour =><= 12 14
| |
| | | |
− | // this script check if it's fullmoon night or raining
| + | = Operators = |
− | (night & fullmoon) | raining
| + | |
| | | |
− | ==Operators==
| + | {| border=1 cellspacing=0 cellpadding=3 style="border-collapse: collapse" width=100% |
− | {| width=800 border=1 cellspacing=0 cellpadding=5 style="border-collapse: collapse" | + | ! width=1% | # |
− | ! width=10% | Operator | + | ! width=3% | Operator |
− | ! width=20% | Example | + | ! width=7% | Description |
− | ! width=70% | Description | + | ! width=1% | # |
| + | ! width=3% | Operator |
| + | ! width=7% | Description |
| + | ! width=1% | # |
| + | ! width=3% | Operator |
| + | ! width=7% | Description |
| |- | | |- |
− | | colspan=3 class=shadow | Logical operators (only applicable between expressions)
| + | | align=center | 1 |
− | |-
| + | | align=center | '''(''' ''expression'' ''')''' |
− | | align=center | '''( )''' | + | |
− | | align=center | '''('''''expression''''')''' | + | |
| | Expression | | | Expression |
− | |-
| + | | align=center | 6 |
− | | align=center | '''&''' | + | | align=center | '''x > y ''' |
− | | align=center | x '''&''' y | + | |
− | | Logical 'And'.
| + | |
− | |-
| + | |
− | | align=center | '''|'''
| + | |
− | | align=center | x '''|''' y
| + | |
− | | Logical 'Or'.
| + | |
− | |-
| + | |
− | | align=center | '''not'''
| + | |
− | | align=center | x & '''not''' y
| + | |
− | | Logical Not.
| + | |
− | |-
| + | |
− | | colspan=3 class=shadow | Comparison operators
| + | |
− | |-
| + | |
− | | align=center | '''='''
| + | |
− | | align=center | x '''=''' y
| + | |
− | | Equal
| + | |
− | |-
| + | |
− | | align=center | '''!='''
| + | |
− | | align=center | x '''!=''' y
| + | |
− | | Not equal
| + | |
− | |-
| + | |
− | | align=center | '''>'''
| + | |
− | | align=center | x '''>''' y
| + | |
| | Greater | | | Greater |
| + | | align=center | 11 |
| + | | align=center | '''x >< start end ''' |
| + | | x > start And x < end |
| |- | | |- |
− | | align=center | '''>=''' | + | | align=center | 2 |
− | | align=center | x '''>=''' y | + | | align=center | '''x & y''' |
| + | | Logical 'And' |
| + | | align=center | 7 |
| + | | align=center | '''x >= y''' |
| | Greater or equal | | | Greater or equal |
| + | | align=center | 12 |
| + | | align=center | '''x =>< start end ''' |
| + | | x >= start And x < end |
| |- | | |- |
− | | align=center | '''<''' | + | | align=center | 3 |
− | | align=center | x '''<''' y | + | | align=center | '''x | y''' |
| + | | Logical 'Or' |
| + | | align=center | 8 |
| + | | align=center | '''x < y''' |
| | Lesser | | | Lesser |
| + | | align=center | 13 |
| + | | align=center | '''x ><= start end ''' |
| + | | x > start And x <= end |
| |- | | |- |
− | | align=center | '''<=''' | + | | align=center | 4 |
− | | align=center | x '''<=''' y | + | | align=center | '''x = y''' |
| + | | Equal |
| + | | align=center | 9 |
| + | | align=center | '''x <= y''' |
| | Lesser or equal | | | Lesser or equal |
| + | | align=center | 14 |
| + | | align=center | '''x =><= start end ''' |
| + | | x >= start And x <= end |
| |- | | |- |
− | | align=center | '''><''' | + | | align=center | 5 |
− | | align=center | x '''><''' start end | + | | align=center | '''x != y''' |
− | | x > start And x < end
| + | | Not equal |
− | |-
| + | | align=center | 10 |
− | | align=center | '''=><'''
| + | | align=center | '''x & not y''' |
− | | align=center | x '''=><''' start end
| + | | Logical Not |
− | | x >= start And x < end
| + | |
− | |- | + | |
− | | align=center | '''><=''' | + | |
− | | align=center | x '''><=''' start end | + | |
− | | x > start And x <= end
| + | |
− | |-
| + | |
− | | align=center | '''=><='''
| + | |
− | | align=center | x '''=><=''' start end | + | |
− | | x >= start And x <= end
| + | |
| |} | | |} |
| | | |
− | ==Functions==
| |
− |
| |
− | Set of functions is determined by pattern implementation. There is two pattern implementations as of yet.
| |
− |
| |
− | ===GenericPattern===
| |
− |
| |
− | This is generic appearance pattern. It used on enemies appearance, [[Zones | zone appearance]].
| |
− |
| |
− | '''true'''
| |
− | :Always yes
| |
− |
| |
− | '''false'''
| |
− | :Always no
| |
− |
| |
− | '''self'''.''field''
| |
− | :Checks one of the field of script owner. Fields could be:
| |
− | :* '''found''' - entity exists
| |
− | :* '''touchable''' - entity is touchable trigger or zone
| |
− | :* '''fired''' - trigger is deactivated. This is only applicable to: trigger_once, trigger_redirect, trigger_multi
| |
− | :* '''solved''' - puzzle trigger is solved. This is only applicable to: trigger_puzzle
| |
− | :* '''killed''' - entity was killed (deadflag is set)
| |
− | :* '''dist''' ''x'' ''operator'' - check distance to activator
| |
− | :* '''deadtime''' ''x'' ''operator'' - check time enemy being dead
| |
− |
| |
− | '''enemy'''.''field''
| |
− | :Check field of script owner enemy. See fields list above.
| |
− |
| |
− | '''target<'''''name'''''>'''.''field''
| |
− | :Find entity by targetname (return first match). See fields list above.
| |
− |
| |
− | '''enemy<'''''radius'''''>'''.''field''
| |
− | :Find enemy of script owner within given radius. See fields list above.
| |
− |
| |
− | '''sid<'''''name'''''>'''.''field''
| |
− | :Find entity by [[SaveId]]. See fields list above.
| |
− |
| |
− | '''player'''
| |
− | :Script activator is player.
| |
− |
| |
− | '''monster'''
| |
− | :Script activator is [[Radiant/Glossary | NPC]].
| |
− |
| |
− | '''posessed'''
| |
− | :Script activator is [[Radiant/Glossary | NPC]] posessed by player.
| |
− |
| |
− | '''info''' ''infoportion''
| |
− | :Activator has this [[Infoportions | infoportion]]
| |
− |
| |
− | '''infovalue''' ''infoportion'' ''operator''
| |
− | :Infoportion value comparison (false is always returned is there is no such infoportion).
| |
− |
| |
− | '''morning'''
| |
− | :[[Gametime]] hour is within 5.00 - 9.59.
| |
− |
| |
− | '''day'''
| |
− | :Gametime hour is within 10.00 - 18.59.
| |
− |
| |
− | '''evening'''
| |
− | :Gametime hour is within 19.00 - 22.59.
| |
− |
| |
− | '''night'''
| |
− | :Gametime hour is within 23.00 - 4.59.
| |
− |
| |
− | '''hour''' x ''operator''
| |
− | :Gametime hour is within some bounds.
| |
− |
| |
− | '''time''' x ''operator''
| |
− | :Gametime check using string gametime representation. All operators are supported.
| |
− |
| |
− | '''daytime''' x ''operator''
| |
− | :Gametime check using float gametime representation (daytime).
| |
− |
| |
− | '''moontime''' x ''operator''
| |
− | :Gametime check using float gametime representation (moontime).
| |
− |
| |
− | '''fullmoon'''
| |
− | :Moon is on full state (note that moon can be on full state at day).
| |
− |
| |
− | '''newmoon'''
| |
− | :Moon is on null state.
| |
− |
| |
− | '''raining'''
| |
− | :Check if it is raining or snow.
| |
− |
| |
− | ===GamemodelHitPattern===
| |
− |
| |
− | '''true'''
| |
− | :Always yes
| |
| | | |
− | '''false'''
| + | = Functions = |
− | :Always no
| + | |
| | | |
− | '''pushonly'''
| + | Set of functinos is determined by pattern realisations. There is two pattern realizations as of yet. |
− | :System word. Allows to push object but not destroy. This should be the first operator in expression if used.
| + | |
| | | |
− | '''tag_''tagname'''''
| + | === GenericPattern === |
− | :Returns true if model tag closest to hit position matches this tag. Otherwise 0.
| + | |
| | | |
− | '''''number''%''' | + | This is generic appearance pattern. It used on monster's appecrance, [[Zones | zone appearance]] (check if zone is active). |
− | :Randomly returns true with this chance percentage. Typical values are 25%, 50%, 90% etc.
| + | |
| | | |
− | '''''damagetype'''''
| + | === GamemodelHitPattern === |
− | :Weapon that was used to hit model have this damage type. Damagetype should be one of following constants:
| + | |
− | :* '''slash''' - sword
| + | |
− | :* '''crush''' - mace
| + | |
− | :* '''crushblow''' - mace special hit
| + | |
− | :* '''hack''' - axe
| + | |
− | :* '''impale''' - throwing knifes, arrows
| + | |
− | :* '''teeth''' - animals
| + | |
− | :* '''claw''' - animals, wolf form
| + | |
− | :* '''water''' - water damage
| + | |
− | :* '''energy''' - energy bolts, magic missiles
| + | |
− | :* '''spikes''' - spike zones
| + | |
− | :* '''flame''' - fire, flame sword
| + | |
− | :* '''flaying''' - flay artefact
| + | |
− | :* '''imploding''' - implode artefact
| + | |
− | :* '''soulreaver''' - soul reaver magic attack
| + | |
| | | |
− | ==See also==
| + | Pattern functions used by [[misc_gamemodel | Gamemodels]] to determine, if break animation is available for a certain type of weapon. |
− | * [[Trigger event]]
| + | |