• Mods are now organized as resources. Use the Mods link above to browse for or submit a mod, tool, or prefab.

    The TFP Official Modding Forum Policy establishes the rules and guidelines for mod creators and mod users.

Creating a custom buff?

I am working on a mod and I want a custom electrical/shocking buff to apply under certain situations. I copied the shock buff from the games Buffs.xml file to the mods Buffs.xml file. Below is the stock shocking buff.

Code:
    <buff name="buffShocked" description_key="buffShockedDesc" tooltip_key="buffShockedTooltip" icon="ui_game_symbol_electric_power" name_key="buffShockedName" icon_color="255,0,0">
        <damage_type value="electrical"/>
        <stack_type value="duration"/>
        <duration value="4"/>
        <update_rate value="1"/>
        <display_value value="$buffShockedDisplay"/>
        <display_value_format value="time"/>

        <effect_group>
            <!-- Blinks the display -->
            <passive_effect name="BuffBlink" operation="base_set" value="2" duration="0,3" tags="buffShocked"/>
        
            <triggered_effect trigger="onSelfBuffStart" action="GetBuffDuration" reference="$shockDurationMax"/>
            <triggered_effect trigger="onSelfBuffStart" action="GetBuffDuration" reference="$buffShockedDisplay"/>
            <triggered_effect trigger="onSelfBuffStart" action="ModifyCVar" cvar="$buffShockedDisplay" operation="set" value="4">
                <requirement name="CVarCompare" cvar="$buffShockedDisplay" operation="LTE" value="0"/>
            </triggered_effect>

            <triggered_effect trigger="onSelfBuffStack" action="GetBuffDuration" reference="$buffShockedDisplay"/>

            <passive_effect name="HealthChangeOT" operation="base_add" value="-6"/>

            <triggered_effect trigger="onSelfBuffUpdate" action="ModifyCVar" cvar="$buffShockedDisplay" operation="add" value="-1"/>
            <triggered_effect trigger="onSelfBuffRemove" action="ModifyCVar" cvar="$buffShockedDisplay" operation="set" value="0"/>

            <triggered_effect trigger="onSelfBuffStart" action="AttachParticleEffectToEntity" particle="p_electric_shock" parent_transform="Spine1" local_offset="0,-.2,0"/>
            <triggered_effect trigger="onSelfEnteredGame" action="AttachParticleEffectToEntity" particle="p_electric_shock" parent_transform="Spine1" local_offset="0,-.2,0"/>

            <triggered_effect trigger="onSelfDied" action="RemoveParticleEffectFromEntity" particle="p_electric_shock"/>
            <triggered_effect trigger="onSelfBuffRemove" action="RemoveParticleEffectFromEntity" particle="p_electric_shock"/>

            <triggered_effect trigger="onSelfBuffFinish" action="RemoveParticleEffectFromEntity" particle="p_electric_shock"/>
            <triggered_effect trigger="onSelfBuffRemove" action="RemoveParticleEffectFromEntity" particle="p_electric_shock"/>
            <triggered_effect trigger="onSelfBuffRemove" action="ModifyCVar" cvar="ETrapHit" operation="set" value="0"/>
            <triggered_effect trigger="onSelfLeaveGame" action="RemoveParticleEffectFromEntity" particle="p_electric_shock"/>

            <triggered_effect trigger="onSelfBuffStart" action="PlaySound" sound="electric_fence_impact"/>
            <triggered_effect trigger="onSelfBuffRemove" action="FadeOutSound" sound="electric_fence_impact"/>
            <triggered_effect trigger="onSelfLeaveGame" action="StopSound" sound="electric_fence_impact"/>
        </effect_group>

        <effect_group>
            <requirement name="CVarCompare" cvar="$shockDurationMax" operation="GTE" value="4"/>
                <passive_effect name="RunSpeed" operation="perc_subtract" value=".9,.05" duration="0,4"/>
                <passive_effect name="WalkSpeed" operation="perc_subtract" value=".9,.05" duration="0,4"/>
                <passive_effect name="CrouchSpeed" operation="perc_subtract" value=".9,.05" duration="0,4"/>
                <passive_effect name="JumpStrength" operation="perc_subtract" value=".9,.05" duration="0,4"/>
        </effect_group>

        <effect_group>
            <requirement name="CVarCompare" cvar="$shockDurationMax" operation="GTE" value="5"/>
                <passive_effect name="RunSpeed" operation="perc_subtract" value=".9,.05" duration="0,5"/>
                <passive_effect name="WalkSpeed" operation="perc_subtract" value=".9,.05" duration="0,5"/>
                <passive_effect name="CrouchSpeed" operation="perc_subtract" value=".9,.05" duration="0,5"/>
                <passive_effect name="JumpStrength" operation="perc_subtract" value=".9,.05" duration="0,5"/>
        </effect_group>

        <effect_group>
            <requirement name="CVarCompare" cvar="$shockDurationMax" operation="GTE" value="6"/>
                <passive_effect name="RunSpeed" operation="perc_subtract" value=".9,.05" duration="0,6"/>
                <passive_effect name="WalkSpeed" operation="perc_subtract" value=".9,.05" duration="0,6"/>
                <passive_effect name="CrouchSpeed" operation="perc_subtract" value=".9,.05" duration="0,6"/>
                <passive_effect name="JumpStrength" operation="perc_subtract" value=".9,.05" duration="0,6"/>
        </effect_group>

        <effect_group>
            <requirement name="CVarCompare" cvar="$shockDurationMax" operation="GTE" value="7"/>
                <passive_effect name="RunSpeed" operation="perc_subtract" value=".9,.05" duration="0,7"/>
                <passive_effect name="WalkSpeed" operation="perc_subtract" value=".9,.05" duration="0,7"/>
                <passive_effect name="CrouchSpeed" operation="perc_subtract" value=".9,.05" duration="0,7"/>
                <passive_effect name="JumpStrength" operation="perc_subtract" value=".9,.05" duration="0,7"/>
        </effect_group>

        <effect_group>
            <requirement name="CVarCompare" cvar="$shockDurationMax" operation="GTE" value="8"/>
                <passive_effect name="RunSpeed" operation="perc_subtract" value=".9,.05" duration="0,8"/>
                <passive_effect name="WalkSpeed" operation="perc_subtract" value=".9,.05" duration="0,8"/>
                <passive_effect name="CrouchSpeed" operation="perc_subtract" value=".9,.05" duration="0,8"/>
                <passive_effect name="JumpStrength" operation="perc_subtract" value=".9,.05" duration="0,8"/>
        </effect_group>

        <effect_group>
            <requirement name="CVarCompare" cvar="$shockDurationMax" operation="GTE" value="9"/>
                <passive_effect name="RunSpeed" operation="perc_subtract" value=".9,.05" duration="0,9"/>
                <passive_effect name="WalkSpeed" operation="perc_subtract" value=".9,.05" duration="0,9"/>
                <passive_effect name="CrouchSpeed" operation="perc_subtract" value=".9,.05" duration="0,9"/>
                <passive_effect name="JumpStrength" operation="perc_subtract" value=".9,.05" duration="0,9"/>
        </effect_group>
    </buff>

I believe I can figure most of it out, but why so many effect groups? Is this for a situation where a player or zed sits on an electric fence and the damage becomes stronger the longer he/it sits there? What about these cvars? Are these variables in the game code itself that we are accessing or are these defined here in the XML and used in the XML? I can't seem to find any documentation on this and I would like to understand it better.

 
Back
Top