I'm trying to add sisters of battle to dark crusade. I copied the spacemarine files, renamed them and changed the function names etc. I can't figure out why it won't work because its almost the same as the spacemarine ai. Corsix didn't find any lua errors.
-- Log file for all error messages related to the AI -- Loading Insane AI... RaceLoader: Init global race info... RaceLoader: Init guard_race... RaceLoader: Create build base strategy of race AI guard_race... player 1001 has chosen strategy: 2 player 1001 has chosen squadlimits: standard gametime: 0 Loading Insane AI... RaceLoader: Init global race info... RaceLoader: Init sisters_race... *ALERT: MilitaryManager:Update() threw exception (lua runtime error) Lua Core/cpu_manager.ai Ln 1223 (?) Lua Core/cpu_manager.ai Ln 362 (Initialize) Lua DATA:AI/default.ai Ln 115 (InitializeAI) main DATA:AI/default.ai Ln 133 ((null)) Error loading script file 'DATA:AI/default.ai' for race 'sisters_race'!
---------------------------------------- -- File: 'sistersloader.ai' -- Edited by Arkhan @ 23.10.2006 -- Renamed by Corsix @ 13.02.2006 -- Edited by Thudmeizer @ 14.10.2006 -- Edited by Moar Artillery @ 21.07.2019 class 'sisters_race' -- Constructor function sisters_race:__init() end -- Returns the name of the race function sisters_race:GetRaceName() return "sisters_race" end -- This function is called if the race is being played function sisters_race:LoadRace( eDifficulty ) -- Import strategies import( 'Races/sisters_race/Strategies/SistersBuildBaseStrategy.ai' ) -- Import strategy info import( "Races/sisters_race/Strategies/SistersStrategyInfo.ai" ) -- Import tactics import( 'Races/sisters_race/Tactics/SistersInfantryTactic.ai' ) return true end -- This function is called even if space marines are not the race being played function sisters_race:LoadGlobalInfo() -- Import info files import( 'Races/sisters_race/Info/sistersunitstats.ai' ) -- Add race unit stats table.insert(UnitStats, SistersUnitStats) return true end -- Creates build base strategy function sisters_race:CreateBuildBaseStrategy() return SistersBuildBaseStrategy(BuildBaseStrategyInfo) end -- Creates a special tactic for a unit function sisters_race:CreateTactic(oSquadAI) -- Get unit name and class local sUnitName = oSquadAI:GetSquadName() local eClass = oSquadAI:GetStats():GetClass() -- Check if there is a special tactic for the unit available --local bVehicle = (eClass == UnitStatsAI.UC_VehicleLow or eClass == UnitStatsAI.UC_VehicleMed or eClass == UnitStatsAI.UC_VehicleHigh) --local bAirPlane = (eClass == UnitStatsAI.UC_AirLow or eClass == UnitStatsAI.UC_AirMed or eClass == UnitStatsAI.UC_AirHigh) if (sUnitName == "sisters_squad_servitor") then return SistersServitorTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_repentia") then -- return SistersRepentiaTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_missionary") then -- return SistersMissionaryTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_seraphim") then -- return SistersSeraphimTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_celestian") then -- return SistersCelestianTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_canoness") then -- return SistersCanonessTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_confessor") then -- return SistersConfessorTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_rhino") then -- return SistersRhinoTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_immolator_tank") then -- return SistersImmolatorTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_exorcist_tank") then -- return SistersExorcistTactic(oSquadAI) --elseif (sUnitName == "sisters_squad_living_saint") then -- return SistersLivingSaintTactic(oSquadAI) --elseif (bVehicle or bAirPlane) then -- return SistersVehicleTactic(oSquadAI) end return SistersInfantryTactic(oSquadAI) end -- Creates a base tactic function sisters_race:CreateBaseTactic(oBuilding) -- Get building name local sBuildingName = oBuilding:GetBaseName() -- Check if their is a special tactic for the building available if (sBuildingName == "sisters_infantry") then return MarineBarracksTactic(oBuilding) end return nil end -- Returns a specific information function sisters_race:GetInfo(sType) -- Check info type if (sType == "TurretPower") then return 500 elseif (sType == "SupportAllyFactor") then return 9 / 4 elseif (sType == "AttackModifier") then return 10 elseif (sType == "CriticalRangeIncreasePerTier") then return 10 elseif (sType == "MinArmyStrengthPerTier") then return 750 elseif (sType == "AttackRatio") then return 4 / 5 elseif (sType == "RetreatRatio") then return 3 / 5 elseif (sType == "InvisibleBuildings") then return false end return nil end -- Returns the building type and threat function sisters_race:GetBuildingType(sBuildingName) -- Return race specific object string if (sBuildingName == "sisters_hq") then return "HQ", 0 end return nil, 0 end
---------------------------------------- -- File: 'sistersbuildbasestrategy.ai' -- Edited by Thudmeizer @ 20.03.2007 -- Edited by Corsix @ 15.01.2005 -- Edited by LarkinVB @ 29.09.2005 -- Edited by Arkhan @ 09.03.2006 -- Edited by Moar Artillery @ 17.07.2019 class 'SistersBuildBaseStrategy' (BuildBaseStrategy) function SistersBuildBaseStrategy:__init( baseinfo ) super( baseinfo ) -- Add detector units (Best first, worst last) end function SistersBuildBaseStrategy:ChooseBuildProgram() -- Check build program count if (table.getn(self.info.BuildPrograms) ~= 4) then return BuildBaseStrategy.ChooseBuildProgram(self) end -- Get map size and closest enemy distance local sMapSize, iClosestEnemyDistance = self:GetMapSize() -- Set probabilities of the strategies according to the map size local iBuildProgram1 -- Basic strategy local iBuildProgram2 -- Infantry strategy local iBuildProgram3 -- Fast Attack strategy local iBuildProgram4 -- Tank strategy -- Now choose a program local oEnemy = cpu_manager:FindClosestEnemyPlayer(false) local sEnemy = oEnemy:GetPlayerRaceName() if (sEnemy == "sisters_race" or sEnemy == "space_marine_race" or sEnemy == "chaos_marine_race" or sEnemy == "necron_race") and (iClosestEnemyDistance <= 300) then return 3 elseif (sEnemy == "guard_race" or sEnemy == "ork_race" or sEnemy == "eldar_race" or sEnemy == "tau_race") and (iClosestEnemyDistance <= 300) then return 2 elseif (iClosestEnemyDistance > 300) then return math.random(3, 4) end end -- < less then function SistersBuildBaseStrategy:SetSquadLimitsBasedOnStrategy(iStrategy) if iStrategy == 1 then -- Basic strategy BuildBaseStrategyInfo.sisters_race.SquadLimits.standard.sisters_squad_servitor = 4 BuildBaseStrategyInfo.sisters_race.SquadLimits.standard.sisters_squad_battle_sister = 4 elseif iStrategy == 2 then -- Infantry strategy BuildBaseStrategyInfo.sisters_race.SquadLimits.standard.sisters_squad_servitor = 4 BuildBaseStrategyInfo.sisters_race.SquadLimits.standard.sisters_squad_battle_sister = 4 elseif iStrategy == 3 then -- Fast Attack strategy BuildBaseStrategyInfo.sisters_race.SquadLimits.standard.sisters_squad_servitor = 4 BuildBaseStrategyInfo.sisters_race.SquadLimits.standard.sisters_squad_battle_sister = 4 elseif iStrategy == 4 then -- Tank strategy BuildBaseStrategyInfo.sisters_race.SquadLimits.standard.sisters_squad_servitor = 4 BuildBaseStrategyInfo.sisters_race.SquadLimits.standard.sisters_squad_battle_sister = 4 end end function SistersBuildBaseStrategy:GetBuildingName( sType ) -- Return race specific object string if (sType == "HQ") then return "sisters_hq" elseif (sType == "Generator") then return "sisters_plasma_generator" elseif (sType == "BiggerGenerator") then return "sisters_thermo_plasma" elseif (sType == "VehicleBuilding") then return "sisters_vehicle_building" elseif (sType == "ListeningPost") then return "sisters_listening_post" elseif (sType == "Turret") then return "sisters_turret_flamer" elseif (sType == "Mine") then return "sisters_mines" end return nil end function SistersBuildBaseStrategy:GetAddonBuilding( sType ) if (sType == "addon_sisters_turret") then return "sisters_turret_flamer" elseif (sType == "addon_sisters_list_post_1") then return "sisters_listening_post" elseif (sType == "addon_sisters_list_post_2") then return "sisters_listening_post" elseif (sType == "addon_sisters_holy_icon") then return "sisters_listening_post" elseif (sType == "addon_sisters_hq_1") then return "sisters_hq" elseif (sType == "addon_sisters_hq_2") then return "sisters_hq" end return nil end -- Inherited method to check if an addon is a tier addon function SistersBuildBaseStrategy:IsTierAddon( sName, iTargetTier ) -- Check addon name and target tier if (sName == "addon_sisters_hq_1" and iTargetTier == 2) then return true elseif (sName == "addon_sisters_hq_2" and iTargetTier == 3) then return true end return false end -- Returns the squad cap and support cap of the given squad function SistersBuildBaseStrategy:GetUnitStats(sSquadName) if (sSquadName == "sisters_squad_missionary") then return 0, 0 elseif (sSquadName == "sisters_squad_battle_sister") then return 0, 0 elseif (sSquadName == "sisters_squad_seraphim") then return 0, 0 elseif (sSquadName == "sisters_squad_celestian") then return 0, 0 elseif (sSquadName == "sisters_squad_assassin") then return 0, 0 elseif (sSquadName == "sisters_squad_repentia") then return 0, 0 elseif (sSquadName == "sisters_squad_rhino") then return 0, 0 elseif (sSquadName == "sisters_squad_immolator_tank") then return 0, 0 elseif (sSquadName == "sisters_squad_lightning") then return 0, 0 elseif (sSquadName == "sisters_squad_exorcist_tank") then return 0, 3 elseif (sSquadName == "sisters_squad_penitent_engine") then return 0, 0 end return 0, 0 end function SistersBuildBaseStrategy:UpdateTierLevel() -- Reset tier level self.tierLevel = 1 -- Prepare local iHQAddon1ID = cpu_manager.stats:GetAddOnID("addon_sisters_hq_1") local iHQAddon2ID = cpu_manager.stats:GetAddOnID("addon_sisters_hq_2") local oStats = cpu_manager.stats:GetPlayerStatsFromID( cpu_manager.player_id ) -- Check HQ's for addons for oBase in oStats:GetBases() do -- Check for valid building if (oBase:IsValid() and not oBase:IsListeningPost()) then -- Check for HQ addon 2 if (oBase:HasAddOn(iHQAddon2ID)) then -- We still have the proper building if (self:GetBuildingCountByName("sisters_shrine") > 0) then self.tierLevel = 4 return else self.tierLevel = 3 return end -- Check for HQ addon 1 elseif (oBase:HasAddOn(iHQAddon1ID)) then self.tierLevel = 2 end end end end function SistersBuildBaseStrategy:BuildFlexible() -- Dynamic research -- Item-Syntax: ResearchName, MinTier, RequisitionCost, PowerCost, MinSquadCap, MinSupportCap, SquadName, SquadMinCount -- Restrict dynamic builds to hard difficulty or higher if (CpuManager.AISettings.bMultiBuildings) then -- Dynamic buildings -- Item-Syntax: BuildingName, BuildingCount, MinTier, MinRequisition, MinPower, MinSquadCap, MinSupportCap self:DynamicBuild("sisters_infantry", 2, 1, 800, 0, 0, 0) end end -- Arkhan 01.2006: Method to check if force tech should be computed function SistersBuildBaseStrategy:ForceTech() -- Check time if (g_iGMT < 60 * DefendChokePointPlan.HarassingTime) then return false end -- Check ressources local iRequisition = resource_manager:GetResourceAmount():Get( ResourceAmount.RT_Requisition ) local iPower = resource_manager:GetResourceAmount():Get( ResourceAmount.RT_Power ) -- Check tier local iTierLevel = self:GetTierLevel() if (iTierLevel == 1) then -- Check resources if (iRequisition > 600 and iPower > 200) then return false end return not self.m_bHQAddon1 elseif (iTierLevel == 2) then -- Check build channel for machine cult iID = cpu_manager.stats:GetBuildingID("sisters_vehicle_building") local bHasVehicleBuilding = false for oBuildChannel in build_manager:GetBuildChannelAIs() do -- Check building ID if (oBuildChannel:GetBlueprintID() == iID) then bHasVehicleBuilding = true break end end if (not bHasVehicleBuilding) then return true end -- Check time if (g_iGMT > 60 * 12 and (iRequisition < 600 or iPower < 600)) then return true end elseif (iTierLevel == 3) then -- Check time if (g_iGMT > 60 * 19 and (iRequisition < 600 or iPower < 600)) then return true end end return false end -- Return placement type for buildings function SistersBuildBaseStrategy:GetPlacementType(iBuildingID) -- Check building if (cpu_manager:IsHQ(iBuildingID)) then return "HQ" elseif (iBuildingID == cpu_manager.stats:GetBuildingID("sisters_infantry") or iBuildingID == cpu_manager.stats:GetBuildingID("sisters_vehicle_building") or iBuildingID == cpu_manager.stats:GetBuildingID("sisters_shrine")) then return "Military" elseif (cpu_manager:IsTurret(iBuildingID)) then return "Front2" elseif (cpu_manager:IsMine(iBuildingID)) then return "Mine" elseif (cpu_manager:IsGenerator(iBuildingID) or iBuildingID == cpu_manager.stats:GetBuildingID("sisters_sanctuary") or iBuildingID == cpu_manager.stats:GetBuildingID("sisters_holy_reliquary")) then return "BaseBack" end return "Basic" end -- Inherited method to modify squad demand function SistersBuildBaseStrategy:ModifySquadDemand(iUnitID) -- No more missionaries then squads if (iUnitID == cpu_manager.stats:GetSquadID("sisters_squad_missionary")) then -- Check number of attachable squads local miss_attach = function ( squad_ai ) return (squad_ai:GetTactic():GetUnitStrength() >= 250 and squad_ai:CanReceiveAttachment()) end local num_attach = self:CountSquads("sisters_squad_battle_sister", miss_attach) + self:CountSquads("sisters_squad_celestian", miss_attach) + self:CountSquads("sisters_squad_repentia", miss_attach) -- Check miss count local num_miss = self:CountSquads("sisters_squad_missionary") if (num_miss >= num_attach) then return 0 end end -- Only build rhinos if we've full support cap if (iUnitID == cpu_manager.stats:GetSquadID("sisters_squad_rhino")) then -- Check army strength if (cpu_manager:GetArmyStrength() < 4000) then return 0 end end return BuildBaseStrategy.ModifySquadDemand(self, iUnitID) end -- Arkhan 11.2006: Virtual method for checking out relic units function SistersBuildBaseStrategy:RelicRequired(sName) -- Check name if (sName == "sisters_squad_living_saint") then return true end return false end
---------------------------------------- -- File: 'sistersstrategyinfo.ai' -- Created by Arkhan @ 12.10.2006 -- Edited by Thudmeizer @ 20.03.2007 -- Edited by Moar Artillery @ 17.07.2019 BuildBaseStrategyInfo = { sisters_race = { post_builder = 1, flag_capture = 2, --reserve this amount for building units/buildings (not for use in upgrading/ reinforcing) req_reserve = 150, --need at least this at all times squad_cap_threshold = 2, --need at least this at all times support_cap_threshold = 3, --used to calculate wants for engineers Engineers = { --number of engineers we're aiming for want = 5, }, -- Is used to modify the army strength in the build programs (Allows faster balancing adjustments) ArmyStrengthModifier = 1.0, -- Item-Syntax: Min. Tier, Min. Requisition, Min. Power, Min. ArmyStrength, Object-Count, Object-Type, Object-Name BuildPrograms = { -- Allround strategy { { 1, 200, 40, 0, 1, "Unit", "sisters_squad_canoness" }, { 1, 75, 0, 0, 1, "Unit", "sisters_squad_missionary" }, -- Force a capturing squad { 1, 140, 0, 0, 2, "Unit", "sisters_squad_battle_sister" }, { 1, 200, 20, 0, 1, "Unit", "sisters_squad_seraphim" }, { 1, 450, 0, 0, 1, "Building", "sisters_hq" }, { 1, 250, 0, 0, 1, "Building", "sisters_infantry" }, { 1, 135, 0, 0, 1, "Building", "sisters_plasma_generator" }, { 1, 175, 50, 500, 1, "Building", "sisters_sanctuary" }, { 1, 100, 75, 750, 60, "TurretAddon", "addon_sisters_list_post_1" }, { 1, 135, 0, 0, 2, "Building", "sisters_plasma_generator" }, { 1, 90, 45, 0, 1, "Building", "sisters_turret_flamer" }, { 1, 135, 0, 1000, 3, "Building", "sisters_plasma_generator" }, { 1, 300, 125, 1000, 1, "Addon", "addon_sisters_hq_1" }, { 1, 100, 75, 250, 100, "TurretAddon", "addon_sisters_list_post_1" }, { 1, 105, 50, 500, 1, "TurretAddon", "addon_sisters_holy_icon" }, { 1, 75, 50, 500, 1, "Research", "sisters_laud_hailer_research" }, { 1, 135, 0, 500, 4, "Building", "sisters_plasma_generator" }, { 2, 200, 125, 250, 1, "Building", "sisters_vehicle_building" }, { 2, 165, 250, 0, 1, "Unit", "sisters_squad_immolator_tank" }, { 2, 180, 40, 0, 2, "Unit", "sisters_squad_celestian" }, { 2, 135, 0, 1000, 6, "Building", "sisters_plasma_generator" }, { 2, 105, 50, 1500, 60, "TurretAddon", "addon_sisters_holy_icon" }, { 2, 50, 0, 1500, 50, "TurretAddon", "addon_sisters_turret" }, { 2, 90, 45, 2000, 2, "Building", "sisters_turret_flamer" }, { 2, 25, 25, 2000, 2, "Building", "sisters_mines" }, { 2, 260, 150, 2000, 1, "TurretAddon", "addon_sisters_list_post_2" }, { 2, 340, 340, 2000, 1, "Addon", "addon_sisters_hq_2" }, { 2, 125, 50, 2000, 1, "Building", "sisters_holy_reliquary" }, { 3, 220, 80, 0, 2, "Unit", "sisters_squad_repentia" }, { 3, 90, 45, 2000, 4, "Building", "sisters_turret_flamer" }, { 3, 25, 25, 2000, 4, "Building", "sisters_mines" }, { 3, 260, 150, 2000, 50,"TurretAddon", "addon_sisters_list_post_2" }, { 3, 450, 450, 2000, 1, "Building", "sisters_shrine" }, { 4, 400, 400, 0, 1, "Unit", "sisters_squad_living_saint" }, { 4, 90, 45, 2000, 6, "Building", "sisters_turret_flamer" }, { 4, 25, 25, 2000, 6, "Building", "sisters_mines" }, { 4, 260, 150, 3000, 100,"TurretAddon", "addon_sisters_list_post_2" }, { 4, 450, 0, 3000, 2, "Building", "sisters_hq" } }, -- Mass Battle Sisters strategy { { 1, 0, 0, 0, 0, "Rush", "Prepare" }, { 1, 200, 40, 0, 1, "Unit", "sisters_squad_canoness" }, { 1, 75, 0, 0, 1, "Unit", "sisters_squad_missionary" }, -- Force a capturing squad { 1, 140, 0, 0, 3, "Unit", "sisters_squad_battle_sister" }, { 1, 450, 0, 0, 1, "Building", "sisters_hq" }, { 1, 250, 0, 0, 1, "Building", "sisters_infantry" }, { 1, 135, 0, 0, 1, "Building", "sisters_plasma_generator" }, { 1, 175, 50, 500, 1, "Building", "sisters_sanctuary" }, { 1, 100, 75, 750, 60, "TurretAddon", "addon_sisters_list_post_1" }, { 1, 135, 0, 0, 2, "Building", "sisters_plasma_generator" }, { 1, 90, 45, 0, 1, "Building", "sisters_turret_flamer" }, { 1, 135, 0, 1000, 3, "Building", "sisters_plasma_generator" }, { 1, 300, 125, 1000, 1, "Addon", "addon_sisters_hq_1" }, { 1, 100, 75, 250, 100, "TurretAddon", "addon_sisters_list_post_1" }, { 1, 105, 50, 500, 1, "TurretAddon", "addon_sisters_holy_icon" }, { 1, 135, 0, 500, 4, "Building", "sisters_plasma_generator" }, { 2, 200, 125, 250, 1, "Building", "sisters_vehicle_building" }, { 2, 165, 250, 0, 1, "Unit", "sisters_squad_immolator_tank" }, { 2, 180, 40, 0, 2, "Unit", "sisters_squad_celestian" }, { 2, 135, 0, 1000, 6, "Building", "sisters_plasma_generator" }, { 2, 105, 50, 1500, 60, "TurretAddon", "addon_sisters_holy_icon" }, { 2, 50, 0, 1500, 50, "TurretAddon", "addon_sisters_turret" }, { 2, 90, 45, 2000, 2, "Building", "sisters_turret_flamer" }, { 2, 25, 25, 2000, 2, "Building", "sisters_mines" }, { 2, 260, 150, 2000, 1, "TurretAddon", "addon_sisters_list_post_2" }, { 2, 340, 340, 2000, 1, "Addon", "addon_sisters_hq_2" }, { 2, 125, 50, 2000, 1, "Building", "sisters_holy_reliquary" }, { 3, 220, 80, 0, 2, "Unit", "sisters_squad_repentia" }, { 3, 90, 45, 2000, 4, "Building", "sisters_turret_flamer" }, { 3, 25, 25, 2000, 4, "Building", "sisters_mines" }, { 3, 260, 150, 2000, 50,"TurretAddon", "addon_sisters_list_post_2" }, { 3, 450, 450, 2000, 1, "Building", "sisters_shrine" }, { 4, 400, 400, 0, 1, "Unit", "sisters_squad_living_saint" }, { 4, 90, 45, 2000, 6, "Building", "sisters_turret_flamer" }, { 4, 25, 25, 2000, 6, "Building", "sisters_mines" }, { 4, 260, 150, 3000, 100,"TurretAddon", "addon_sisters_list_post_2" }, { 4, 450, 0, 3000, 2, "Building", "sisters_hq" } }, -- Immolator strategy { { 1, 0, 0, 0, 1, "Rush", "Prepare" }, { 1, 75, 0, 0, 3, "Unit", "sisters_squad_servitor" }, { 1, 75, 0, 0, 1, "Unit", "sisters_squad_missionary" }, -- Force a capturing squad { 1, 450, 0, 0, 1, "Building", "sisters_hq" }, { 1, 250, 0, 0, 1, "Building", "sisters_infantry" }, { 1, 135, 0, 0, 1, "Building", "sisters_plasma_generator" }, { 1, 100, 75, 0, 100, "TurretAddon", "addon_sisters_list_post_1" }, { 1, 175, 50, 0, 1, "Building", "sisters_sanctuary" }, { 1, 135, 0, 0, 3, "Building", "sisters_plasma_generator" }, { 1, 300, 125, 0, 1, "Addon", "addon_sisters_hq_1" }, { 1, 135, 0, 0, 6, "Building", "sisters_plasma_generator" }, { 2, 0, 0, 0, 1, "Rush", "Prepare" }, { 2, 200, 125, 0, 1, "Building", "sisters_vehicle_building" }, { 2, 200, 40, 0, 1, "Unit", "sisters_squad_canoness" }, { 2, 165, 250, 0, 3, "Unit", "sisters_squad_immolator_tank" }, { 2, 140, 0, 0, 2, "Unit", "sisters_squad_battle_sister" }, { 2, 180, 40, 0, 1, "Unit", "sisters_squad_celestian" }, { 2, 0, 0, 1500, 0, "Rush", "Unleash" }, { 2, 90, 45, 1500, 1, "Building", "sisters_turret_flamer" }, { 2, 105, 50, 1500, 60, "TurretAddon", "addon_sisters_holy_icon" }, { 2, 50, 0, 1500, 50, "TurretAddon", "addon_sisters_turret" }, { 2, 90, 45, 2000, 2, "Building", "sisters_turret_flamer" }, { 2, 25, 25, 2000, 2, "Building", "sisters_mines" }, { 2, 260, 150, 2000, 1, "TurretAddon", "addon_sisters_list_post_2" }, { 2, 340, 340, 2000, 1, "Addon", "addon_sisters_hq_2" }, { 2, 125, 50, 2000, 1, "Building", "sisters_holy_reliquary" }, { 3, 220, 80, 0, 2, "Unit", "sisters_squad_repentia" }, { 3, 90, 45, 2000, 4, "Building", "sisters_turret_flamer" }, { 3, 25, 25, 2000, 4, "Building", "sisters_mines" }, { 3, 260, 150, 2000, 50,"TurretAddon", "addon_sisters_list_post_2" }, { 3, 450, 450, 2000, 1, "Building", "sisters_shrine" }, { 4, 400, 400, 0, 1, "Unit", "sisters_squad_living_saint" }, { 4, 90, 45, 2000, 6, "Building", "sisters_turret_flamer" }, { 4, 25, 25, 2000, 6, "Building", "sisters_mines" }, { 4, 260, 150, 3000, 100,"TurretAddon", "addon_sisters_list_post_2" }, { 4, 450, 0, 3000, 2, "Building", "sisters_hq" } }, -- Tank strategy { { 1, 0, 0, 0, 1, "Rush", "Prepare" }, { 1, 75, 0, 0, 3, "Unit", "sisters_squad_servitor" }, { 1, 75, 0, 0, 1, "Unit", "sisters_squad_missionary" }, -- Force a capturing squad { 1, 450, 0, 0, 1, "Building", "sisters_hq" }, { 1, 250, 0, 0, 1, "Building", "sisters_infantry" }, { 1, 135, 0, 0, 1, "Building", "sisters_plasma_generator" }, { 1, 100, 75, 0, 100, "TurretAddon", "addon_sisters_list_post_1" }, { 1, 175, 50, 0, 1, "Building", "sisters_sanctuary" }, { 1, 135, 0, 0, 3, "Building", "sisters_plasma_generator" }, { 1, 300, 125, 0, 1, "Addon", "addon_sisters_hq_1" }, { 1, 135, 0, 0, 6, "Building", "sisters_plasma_generator" }, { 2, 0, 0, 0, 1, "Rush", "Prepare" }, { 2, 200, 125, 0, 1, "Building", "sisters_vehicle_building" }, { 2, 200, 40, 0, 1, "Unit", "sisters_squad_canoness" }, { 2, 100, 200, 0, 3, "Unit", "sisters_squad_lightning" }, { 2, 200, 20, 0, 2, "Unit", "sisters_squad_seraphim" }, { 2, 180, 40, 0, 1, "Unit", "sisters_squad_celestian" }, { 2, 0, 0, 1500, 0, "Rush", "Unleash" }, { 2, 90, 45, 1500, 1, "Building", "sisters_turret_flamer" }, { 2, 105, 50, 1500, 60, "TurretAddon", "addon_sisters_holy_icon" }, { 2, 50, 0, 1500, 50, "TurretAddon", "addon_sisters_turret" }, { 2, 90, 45, 2000, 2, "Building", "sisters_turret_flamer" }, { 2, 25, 25, 2000, 2, "Building", "sisters_mines" }, { 2, 260, 150, 2000, 1, "TurretAddon", "addon_sisters_list_post_2" }, { 2, 340, 340, 2000, 1, "Addon", "addon_sisters_hq_2" }, { 2, 125, 50, 2000, 1, "Building", "sisters_holy_reliquary" }, { 3, 220, 80, 0, 2, "Unit", "sisters_squad_repentia" }, { 3, 90, 45, 2000, 4, "Building", "sisters_turret_flamer" }, { 3, 25, 25, 2000, 4, "Building", "sisters_mines" }, { 3, 260, 150, 2000, 50,"TurretAddon", "addon_sisters_list_post_2" }, { 3, 450, 450, 2000, 1, "Building", "sisters_shrine" }, { 4, 165, 75, 0, 1, "Research", "sisters_faithful_morale_2" }, { 4, 400, 400, 0, 1, "Unit", "sisters_squad_living_saint" }, { 4, 90, 45, 2000, 6, "Building", "sisters_turret_flamer" }, { 4, 25, 25, 2000, 6, "Building", "sisters_mines" }, { 4, 260, 150, 3000, 100,"TurretAddon", "addon_sisters_list_post_2" }, { 4, 450, 0, 3000, 2, "Building", "sisters_hq" } } }, SquadLimits = { standard = { sisters_squad_living_saint = 1, } } }, } BuildOrderStrategyInfo = { sisters_race = { Basic = { { "squad", "sisters_squad_missionary" }, { "flag_capture" }, { "flag_capture" }, { "flag_capture" }, { "squad", "sisters_squad_missionary" }, { "squad", "sisters_squad_servitor" }, { "squad", "sisters_squad_missionary" }, { "squad", "sisters_squad_missionary" }, { "building", "sisters_infantry", true }, { "flag_capture" }, { "post_builder" }, { "flag_capture" }, { "post_builder" }, { "flag_capture" }, { "post_builder" }, { "flag_capture" }, { "post_builder" }, { "building", "sisters_plasma_generator" } }, QuickStart = { { "flag_capture" }, { "flag_capture" }, { "flag_capture" }, { "squad", "sisters_squad_missionary" }, { "squad", "sisters_squad_servitor" }, { "squad", "sisters_squad_missionary" }, { "squad", "sisters_squad_missionary" }, { "squad", "sisters_squad_servitor" }, { "post_builder" }, { "post_builder" }, { "building", "sisters_infantry", true }, { "building", "sisters_infantry", true }, { "building", "sisters_plasma_generator" } }, LargeMap = { { "flag_capture" }, { "flag_capture" }, { "flag_capture" }, { "flag_capture" }, { "squad", "sisters_squad_missionary" }, { "squad", "sisters_squad_servitor" }, { "squad", "sisters_squad_missionary" }, { "squad", "sisters_squad_missionary" }, { "squad", "sisters_squad_missionary" }, { "post_builder" }, { "post_builder" }, { "building", "sisters_infantry", true }, { "building", "sisters_plasma_generator" } } } } AttackStrategyInfo = { sisters_race = { MinArmyStrength = 750, }, }