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:
You can see it attaches a new property COMBAT_STRENGTH_FOR_VAMPIRISM for all vampire units.
The in Lua I have:
And it worked!
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!