Fix Tiles errors in Atr2s and add AI production/repair for them.
This commit is contained in:
committed by
abcdefg30
parent
5999a028ad
commit
000ae29cb6
122
mods/d2k/maps/atreides-02a/atreides02a-AI.lua
Normal file
122
mods/d2k/maps/atreides-02a/atreides02a-AI.lua
Normal file
@@ -0,0 +1,122 @@
|
||||
IdlingUnits = { }
|
||||
|
||||
AttackGroupSize =
|
||||
{
|
||||
easy = 6,
|
||||
normal = 8,
|
||||
hard = 10
|
||||
}
|
||||
AttackDelays =
|
||||
{
|
||||
easy = { DateTime.Seconds(4), DateTime.Seconds(9) },
|
||||
normal = { DateTime.Seconds(2), DateTime.Seconds(7) },
|
||||
hard = { DateTime.Seconds(1), DateTime.Seconds(5) }
|
||||
}
|
||||
|
||||
HarkonnenInfantryTypes = { "light_inf" }
|
||||
|
||||
AttackOnGoing = false
|
||||
HoldProduction = false
|
||||
HarvesterKilled = true
|
||||
|
||||
IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end
|
||||
|
||||
SetupAttackGroup = function()
|
||||
local units = { }
|
||||
|
||||
for i = 0, AttackGroupSize[Map.LobbyOption("difficulty")], 1 do
|
||||
if #IdlingUnits == 0 then
|
||||
return units
|
||||
end
|
||||
|
||||
local number = Utils.RandomInteger(1, #IdlingUnits + 1)
|
||||
|
||||
if IdlingUnits[number] and not IdlingUnits[number].IsDead then
|
||||
units[i] = IdlingUnits[number]
|
||||
table.remove(IdlingUnits, number)
|
||||
end
|
||||
end
|
||||
|
||||
return units
|
||||
end
|
||||
|
||||
SendAttack = function()
|
||||
if Attacking then
|
||||
return
|
||||
end
|
||||
Attacking = true
|
||||
HoldProduction = true
|
||||
|
||||
local units = SetupAttackGroup()
|
||||
Utils.Do(units, function(unit)
|
||||
IdleHunt(unit)
|
||||
end)
|
||||
|
||||
Trigger.OnAllRemovedFromWorld(units, function()
|
||||
Attacking = false
|
||||
HoldProduction = false
|
||||
end)
|
||||
end
|
||||
|
||||
DefendActor = function(unit)
|
||||
Trigger.OnDamaged(unit, function(self, attacker)
|
||||
if AttackOnGoing then
|
||||
return
|
||||
end
|
||||
AttackOnGoing = true
|
||||
|
||||
local Guards = SetupAttackGroup()
|
||||
|
||||
if #Guards <= 0 then
|
||||
AttackOnGoing = false
|
||||
return
|
||||
end
|
||||
|
||||
Utils.Do(Guards, function(unit)
|
||||
if not self.IsDead then
|
||||
unit.AttackMove(self.Location)
|
||||
end
|
||||
IdleHunt(unit)
|
||||
end)
|
||||
|
||||
Trigger.OnAllRemovedFromWorld(Guards, function() AttackOnGoing = false end)
|
||||
end)
|
||||
end
|
||||
|
||||
InitAIUnits = function()
|
||||
Utils.Do(HarkonnenBase, function(actor)
|
||||
DefendActor(actor)
|
||||
Trigger.OnDamaged(actor, function(building)
|
||||
if building.Health < building.MaxHealth * 3/4 then
|
||||
building.StartBuildingRepairs()
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
ProduceInfantry = function()
|
||||
if HBarracks.IsDead then
|
||||
return
|
||||
end
|
||||
|
||||
if HoldProduction then
|
||||
Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry)
|
||||
return
|
||||
end
|
||||
|
||||
local delay = Utils.RandomInteger(AttackDelays[Map.LobbyOption("difficulty")][1], AttackDelays[Map.LobbyOption("difficulty")][2] + 1)
|
||||
local toBuild = { Utils.Random(HarkonnenInfantryTypes) }
|
||||
harkonnen.Build(toBuild, function(unit)
|
||||
IdlingUnits[#IdlingUnits + 1] = unit[1]
|
||||
Trigger.AfterDelay(delay, ProduceInfantry)
|
||||
|
||||
if #IdlingUnits >= (AttackGroupSize[Map.LobbyOption("difficulty")] * 2.5) then
|
||||
SendAttack()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
ActivateAI = function()
|
||||
InitAIUnits()
|
||||
ProduceInfantry()
|
||||
end
|
||||
@@ -94,6 +94,7 @@ WorldLoaded = function()
|
||||
end)
|
||||
|
||||
SendHarkonnen()
|
||||
Trigger.AfterDelay(0, ActivateAI)
|
||||
end
|
||||
|
||||
InitObjectives = function()
|
||||
|
||||
Binary file not shown.
@@ -4,7 +4,7 @@ Player:
|
||||
|
||||
World:
|
||||
LuaScript:
|
||||
Scripts: atreides02a.lua
|
||||
Scripts: atreides02a.lua, atreides02a-AI.lua
|
||||
MissionData:
|
||||
Briefing: Infiltrate the Imperial Basin and build up our forces until they are strong enough to eradicate the local Harkonnen presence.\n\nThe Harkonnen are reinforcing their troops by air, so be on your guard. Use the Outpost's radar to detect attacks from unexpected quarters.\n\nBe careful when mining the Spice. Spice mounds grow out of the sand. While a vital source of Spice, Spice mounds can damage or destroy any unit that blunders into them.\n\nGood luck.\n
|
||||
BriefingVideo: A_BR02_E.VQA
|
||||
|
||||
122
mods/d2k/maps/atreides-02b/atreides02b-AI.lua
Normal file
122
mods/d2k/maps/atreides-02b/atreides02b-AI.lua
Normal file
@@ -0,0 +1,122 @@
|
||||
IdlingUnits = { }
|
||||
|
||||
AttackGroupSize =
|
||||
{
|
||||
easy = 6,
|
||||
normal = 8,
|
||||
hard = 10
|
||||
}
|
||||
AttackDelays =
|
||||
{
|
||||
easy = { DateTime.Seconds(4), DateTime.Seconds(9) },
|
||||
normal = { DateTime.Seconds(2), DateTime.Seconds(7) },
|
||||
hard = { DateTime.Seconds(1), DateTime.Seconds(5) }
|
||||
}
|
||||
|
||||
HarkonnenInfantryTypes = { "light_inf" }
|
||||
|
||||
AttackOnGoing = false
|
||||
HoldProduction = false
|
||||
HarvesterKilled = true
|
||||
|
||||
IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end
|
||||
|
||||
SetupAttackGroup = function()
|
||||
local units = { }
|
||||
|
||||
for i = 0, AttackGroupSize[Map.LobbyOption("difficulty")], 1 do
|
||||
if #IdlingUnits == 0 then
|
||||
return units
|
||||
end
|
||||
|
||||
local number = Utils.RandomInteger(1, #IdlingUnits + 1)
|
||||
|
||||
if IdlingUnits[number] and not IdlingUnits[number].IsDead then
|
||||
units[i] = IdlingUnits[number]
|
||||
table.remove(IdlingUnits, number)
|
||||
end
|
||||
end
|
||||
|
||||
return units
|
||||
end
|
||||
|
||||
SendAttack = function()
|
||||
if Attacking then
|
||||
return
|
||||
end
|
||||
Attacking = true
|
||||
HoldProduction = true
|
||||
|
||||
local units = SetupAttackGroup()
|
||||
Utils.Do(units, function(unit)
|
||||
IdleHunt(unit)
|
||||
end)
|
||||
|
||||
Trigger.OnAllRemovedFromWorld(units, function()
|
||||
Attacking = false
|
||||
HoldProduction = false
|
||||
end)
|
||||
end
|
||||
|
||||
DefendActor = function(unit)
|
||||
Trigger.OnDamaged(unit, function(self, attacker)
|
||||
if AttackOnGoing then
|
||||
return
|
||||
end
|
||||
AttackOnGoing = true
|
||||
|
||||
local Guards = SetupAttackGroup()
|
||||
|
||||
if #Guards <= 0 then
|
||||
AttackOnGoing = false
|
||||
return
|
||||
end
|
||||
|
||||
Utils.Do(Guards, function(unit)
|
||||
if not self.IsDead then
|
||||
unit.AttackMove(self.Location)
|
||||
end
|
||||
IdleHunt(unit)
|
||||
end)
|
||||
|
||||
Trigger.OnAllRemovedFromWorld(Guards, function() AttackOnGoing = false end)
|
||||
end)
|
||||
end
|
||||
|
||||
InitAIUnits = function()
|
||||
Utils.Do(HarkonnenBase, function(actor)
|
||||
DefendActor(actor)
|
||||
Trigger.OnDamaged(actor, function(building)
|
||||
if building.Health < building.MaxHealth * 3/4 then
|
||||
building.StartBuildingRepairs()
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
ProduceInfantry = function()
|
||||
if HBarracks.IsDead then
|
||||
return
|
||||
end
|
||||
|
||||
if HoldProduction then
|
||||
Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry)
|
||||
return
|
||||
end
|
||||
|
||||
local delay = Utils.RandomInteger(AttackDelays[Map.LobbyOption("difficulty")][1], AttackDelays[Map.LobbyOption("difficulty")][2] + 1)
|
||||
local toBuild = { Utils.Random(HarkonnenInfantryTypes) }
|
||||
harkonnen.Build(toBuild, function(unit)
|
||||
IdlingUnits[#IdlingUnits + 1] = unit[1]
|
||||
Trigger.AfterDelay(delay, ProduceInfantry)
|
||||
|
||||
if #IdlingUnits >= (AttackGroupSize[Map.LobbyOption("difficulty")] * 2.5) then
|
||||
SendAttack()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
ActivateAI = function()
|
||||
InitAIUnits()
|
||||
ProduceInfantry()
|
||||
end
|
||||
@@ -98,6 +98,7 @@ WorldLoaded = function()
|
||||
end)
|
||||
|
||||
SendHarkonnen()
|
||||
Trigger.AfterDelay(0, ActivateAI)
|
||||
end
|
||||
|
||||
InitObjectives = function()
|
||||
|
||||
Binary file not shown.
@@ -4,7 +4,7 @@ Player:
|
||||
|
||||
World:
|
||||
LuaScript:
|
||||
Scripts: atreides02b.lua
|
||||
Scripts: atreides02b.lua, atreides02b-AI.lua
|
||||
MissionData:
|
||||
Briefing: Infiltrate the Imperial Basin and build up our forces until they are strong enough to eradicate the local Harkonnen presence.\n\nThe Harkonnen are reinforcing their troops by air, so be on your guard. Use the Outpost's radar to detect attacks from unexpected quarters.\n\nBe careful when mining the Spice. Spice mounds grow out of the sand. While a vital source of Spice, Spice mounds can damage or destroy any unit that blunders into them.\n\nGood luck.\n
|
||||
BriefingVideo: A_BR02_E.VQA
|
||||
|
||||
Reference in New Issue
Block a user