-
Notifications
You must be signed in to change notification settings - Fork 4
Skills Misc
<skill>.getRangedTooltip( _tooltip = null )
_tooltip is an array
MSU provides a very convenient function for automatically generating range and accuracy information for ranged skills in their tooltips. This way, all you have to do is define the following two fields in the skill's m
table:
AdditionalAccuracy
AdditionalHitChance
If _tooltip
is passed, the function will return _tooltip
with the ranged information added to the array.
Otherwise it will create a new array
and return a new tooltip array with just the ranged info below.
The tooltip generated then, automatically, has information such as:
- "has a range of X tiles on even ground, Y if shooting down hill"
- "has XX% chance to hit and YY% per tile of distance"
X is this.m.MaxRange
Y can be one of the strings "more", "or", "less" depending on if this.m.MaxRangeBonus
is >0, ==0, <0 respectively.
XX is this.m.AdditionalAccuracy
YY is this.m.AdditionalHitChance
MSU also causes Ranged Skills to show up in the Hit Factors tooltip if they have a non-zero AdditionalAccuracy
, as long as the MSU Expanded Skill Tooltips setting is enabled.
In your ranged skill, you can generate all the proper info about hit chance and range by doing the following:
function getTooltip()
{
return this.getRangedTooltip(this.getDefaultTooltip());
}
// or
function getTooltip()
{
local tooltip = this.getDefaultTooltip();
// add some more info to tooltip
// then:
tooltip.extend(this.getRangedTooltip());
// then add some more info to tooltip as necessary
return tooltip;
}
<skill>.m.AIBehaviorID = ""
// The value must be the ID specified in the ai behavior script file
This allows specifiying an AI behavior within the skill file via its ID, which will then be automatically added to the character when this skill is added to that character.
To be able to correspond the ID to the script, ::MSU.AI.BehaviorIDToScriptMap
is created on game launch.
The vanilla IDs are found under scripts/config/ai.nut
// Inside a skill file
function create()
{
// ...
this.m.AIBehaviorID = this.Const.AI.Behavior.ID.Rally; // ID of ai_rally
// ...
}
<skill_container>.getSkillsByFunction( _function )
// _function is a function that accepts a single argument and must return a boolean
Returns an array containing all the skills in the skill container for which _function
returns true when the skill is passed as a parameter to _function
.
local ids = [ "some_id", "some_id_2", "some_id_3"];
local skills = this.getContainer().getSkillsByFunction(@(skill) ids.find(skill.getID()) != null);
// `skills` contains all the skills from the container whose id is present in the `ids` array
MSU adds a system to exclude certain sets of injuries from certain entities easily. MSU comes with the following sets of injuries built-in (only include vanilla injuries):
- Hand
- Arm
- Foot
- Leg
- Face
- Head
::Const.Injury.ExcludedInjuries.add( _name, _injuries, _include = null )
// _name is a string
// _injuries and _include are arrays
_name
will become a key in ::Const.Injury.ExcludedInjuries
.
_injuries
contains skillIDs of injuries to add.
_include
contains keys in ::Const.Injury.ExcludedInjuries
.
If _include
is null then it defaults to an empty array.
Creates an entry in the ::Const.Injury.ExcludedInjuries
table
with _name
as key and { Injuries = _injuries, Include = _include }
as value.
The slots passed in the _include
array must already exist.
If the key _name
already exists in ::Const.Injury.ExcludedInjuries
then its associated Injuries
and Include
are expanded
to include _injuries
and _include
.
::Const.Injury.ExcludedInjuries.add(
“Hand”,
[
“injury.fractured_hand”,
“injury.crushed_finger”
]
);
::Const.Injury.ExcludedInjuries.add(
“Arm”,
[
“injury.fractured_elbow”
],
[
::Const.Injury.ExcludedInjuries.Hand
]
);
::Const.Injury.ExcludedInjuries.get( _injuries )
// _injuries is a key in ::Const.Injury.ExcludedInjuries
Returns an array containing the skill IDs of all the injuries associated with that slot.
The array is expanded using the all the sets of injuries
defined in the associated Include
of that set.
::Const.Injury.ExcludedInjuries.add(
“Hand”,
[
“injury.fractured_hand”,
“injury.crushed_finger”
]
);
::Const.Injury.ExcludedInjuries.add(
“Arm”,
[
“injury.fractured_elbow”
],
[
::Const.Injury.ExcludedInjuries.Hand
]
);
local result = ::Const.Injury.ExcludedInjuries.get(::Const.Injury.ExcludedInjuries.Arm);
In this example result
will be equal to ["injury.fractured_elbow", “injury.fractured_hand”, “injury.crushed_finger”]
.
<actor>.addExcludedInjuries( _injuries )
// _injuries is a key in ::Const.Injury.ExcludedInjuries
Adds all the injuries returned from ::Const.Injury.ExcludedInjuries.get(injuries)
to the this.m.ExcludedInjuries
array of <actor>
.
Entries already present in this.m.ExcludedInjuries
are not duplicated.
In order to prevent Serpents from gaining Arm related injuries, hook the onInit
function of serpent and add the following line of code:
this.addExcludedInjuries(::Const.Injury.ExcludedInjuries.Arm);
- NOTE: MSU guarantees backwards compatibility for documented features and code only. Undocumented features/code of MSU may be changed at any time without notice, so we advise against using/referencing such code in your projects.
- For bug reports or feature requests, please create issues.
- If you would like to join the team, write to us at msu.team@protonmail.com.