Lua setting modifier property!

newtociv6

Chieftain
Joined
Jan 13, 2023
Messages
68
Hey guys, I just found this does work - to read or change properties set up by modifiers in XML:

Here is the relevant property in XML I wanted to change by script:
XML:
<GameModifiers>
    <Row ModifierId="SECRET_SOCIETIES_ENABLE_VAMPIRE_COMBAT_STRENGTH_FROM_PROPERTY"/>
</GameModifiers>
<Modifiers>
    <!-- (a): Declare a property to adjust combat strength -->
    <Row>
        <ModifierId>SANGUINE_PACT_VAMPIRE_COMBAT_STRENGTH_FROM_PROPERTY</ModifierId>
        <ModifierType>MODIFIER_UNIT_ADJUST_COMBAT_STRENGTH</ModifierType>
    </Row>
    <!-- (b): To link the property (a) to vampire units -->
    <Row>
        <ModifierId>SECRET_SOCIETIES_ENABLE_VAMPIRE_COMBAT_STRENGTH_FROM_PROPERTY</ModifierId>
        <ModifierType>MODIFIER_ALL_UNITS_ATTACH_MODIFIER</ModifierType>
        <SubjectRequirementSetId>THIS_UNIT_IS_A_VAMPIRE</SubjectRequirementSetId>
    </Row>
    <!-- (c): To change the property value (a), to be triggered by other modifiers  -->
    <Row>
        <ModifierId>SANGUINE_PACT_VAMPIRE_COMBAT_STRENGTH_ATTACHMENT</ModifierId>
        <ModifierType>MODIFIER_UNIT_ADJUST_PROPERTY</ModifierType>
        <RunOnce>true</RunOnce>
        <Permanent>true</Permanent>
        <SubjectRequirementSetId>THIS_UNIT_IS_A_VAMPIRE</SubjectRequirementSetId>
    </Row>
</Modifiers>
<ModifierArguments>
    <!-- (a): Define property name -->
    <Row>
        <ModifierId>SANGUINE_PACT_VAMPIRE_COMBAT_STRENGTH_FROM_PROPERTY</ModifierId>
        <Name>Key</Name>
        <Value>COMBAT_STRENGTH_FOR_VAMPIRISM</Value>
    </Row>
    <!-- (b): Link the property modifier (a) -->
    <Row>
        <ModifierId>SECRET_SOCIETIES_ENABLE_VAMPIRE_COMBAT_STRENGTH_FROM_PROPERTY</ModifierId>
        <Name>ModifierId</Name>
        <Value>SANGUINE_PACT_VAMPIRE_COMBAT_STRENGTH_FROM_PROPERTY</Value>
    </Row>
    <!-- (c): Increase property value (a) by 1 -->
    <Row>
        <ModifierId>SANGUINE_PACT_VAMPIRE_COMBAT_STRENGTH_ATTACHMENT</ModifierId>
        <Name>Key</Name>
        <Value>COMBAT_STRENGTH_FOR_VAMPIRISM</Value>
    </Row>
    <Row>
        <ModifierId>SANGUINE_PACT_VAMPIRE_COMBAT_STRENGTH_ATTACHMENT</ModifierId>
        <Name>Amount</Name>
        <Value>1</Value>
    </Row>
</ModifierArguments>


You can see it attaches a new property COMBAT_STRENGTH_FOR_VAMPIRISM for all vampire units.

The in Lua I have:
Code:
function OnUnitMoved(playerId:number, unitId:number, tileX, tileY)
    local player = Players[playerId];
    local pUnit = player:GetUnits():FindID(unitId);
    local pUnitDef = GameInfo.Units[pUnit:GetType()];

    if pUnitDef.UnitType == 'UNIT_VAMPIRE' then
        local vVampirism :number = pUnit:GetProperty('COMBAT_STRENGTH_FOR_VAMPIRISM');
        print("Vampire moved: " .. tostring(vVampirism));
        pUnit:SetProperty('COMBAT_STRENGTH_FOR_VAMPIRISM', 200);
    end
end

Events.UnitMoved.Add(OnUnitMoved);

And it worked!
Untitled.jpg
 
Top Bottom