or
Entity:Kill(instigator,type,excessDamageRatio)?
I am not clear about the exact effects of these two commands.
The below is my case to use "Damage" command in a mapscript. Of course, it's not work yet. I mean no damage happens.
Can anybody fix it? I will be thankful
- Code: Select all
local ScenarioUtils = import('/lua/sim/ScenarioUtilities.lua')
local ScenarioFramework = import('/lua/ScenarioFramework.lua')
function OnPopulate()
ScenarioUtils.InitializeArmies()
ScenarioFramework.SetPlayableArea('AREA_1', false)
local oldDamageArea = DamageArea
local self = import('/lua/sim/Entity.lua').Entity()
for k = 1, 1 do
local DAMAGEAREAName = 'DAMAGEAREA_' .. k
local location = ScenarioUtils.MarkerToPosition(DAMAGEAREAName)
ForkThread(Damage, self)
end
end
Damage = function(instigator, target, amount, damageType)
local px, py, pz = unpack(location)
local army = ListArmies()
local rect = Rect(px-radius, pz-radius, px+radius, pz+radius)
local units = GetUnitsInRect(rect) or {}
local amount = 30
local damageAllies = true
local damageSelf = true
local radius = 25
local damageType = 'Reclaimed'
local target = units
for _, u in units do
if VDist3(u:GetPosition(), location) <= radius then
continue
end
if instigator == u then
if damageSelf then
local vector = import('/lua/utilities.lua').GetDirectionVector(location, u:GetPosition())
-- need this ugliness due to Damage() refuse to damage when instigator == u
instigator:Damage(instigator, u, 30, vector, 'Reclaimed')
end
elseif damageAllies or not IsAlly(army, u:GetArmy()) then
instigator:Damage(instigator, u, 30, 'Reclaimed')
end
end
local reclaim = GetReclaimablesInRect(rect) or {}
for _, r in reclaim do
if IsProp(r) and VDist3(r:GetPosition(), location) <= radius then
Damage(instigator, location, r, 30, 'Reclaimed')
end
end
-- Get rid of trees
oldDamageArea(instigator, location, radius, 1, 'Reclaimed', false, false)
end
function OnStart(self)
end
And the error reported in the Moho log
- WARNING: Error running lua script: ...reme commander forged alliance\maps\11\11_script.lua(24): access to nonexistent global variable "location"
stack traceback:
[C]: in function `error'
...alliance\gamedata\mohodata.scd\lua\system\config.lua(53): in function <...alliance\gamedata\mohodata.scd\lua\system\config.lua:52>
...reme commander forged alliance\maps\11\11_script.lua(24): in function <...reme commander forged alliance\maps\11\11_script.lua:23>