Settlers United Wiki
Settlers UnitedImprint
Settler IV Lua API DE
Settler IV Lua API DE
  • Tutorials
    • Einführung
    • SU Library
    • Erste Schritte
      • Einrichtung & HelloWorld
      • Einstieg: new_game
      • Events: register_functions
      • Siegbedingungen anpassen
    • Erweiterte Tipps
      • Die Vars.Save Variablen
      • Moderner Lua Compiler
      • S4Editor Export Path Changer
      • Anticheat
      • Löschen aller Gebäude
      • Platzieren von Gebäuden
    • Code Schnipsel
      • Soldatenanzahl ermitteln
      • Random innerhalb Bereich
      • Verbesserte Zufallszahlen
      • Neue Minute angebrochen
      • Round & Modulo
      • All Points in a circle (hexagon)
      • foreach_ext
      • Textnachricht nur für einen Spieler
      • Mehr als 8 Waren spawnen
    • Community Bibliotheken
      • MinuteEvents-Library
      • VarsSave-Extender
      • Ground-Library
    • Vollständige Mapscripts
      • Siedler IV WM 2021 "The Woods"
      • Turnier Map Script 2vs2 2022
  • Library Functions
    • Global Functions
      • new_game
      • reg_func
      • register_functions
      • request_event
      • unrequest_event
    • AI
      • AI.AttackNow
      • AI.DarkTribeUseDarkGardeners
      • AI.DarkTribeUseShamans
      • AI.NewSquad
      • AI.SetPlayerVar
    • Buildings
      • Buildings.AddBuilding
      • Buildings.Amount
      • Buildings.CrushBuilding
      • Buildings.Delete
      • Buildings.ExistsBuildingInArea
      • Buildings.GetFirstBuilding
      • Buildings.GetInhabitantAmount
      • Buildings.GetTarget
      • Buildings.IsSelected
    • DarkTribe
      • DarkTribe.AddManakopter
      • DarkTribe.FlyTo
    • Debug
      • Debug.AccessViolation
      • Debug.ActivateAI
      • Debug.DeactivateAI
      • Debug.FatalError
      • Debug.Freeze
      • Debug.MakeDark
      • Debug.MakeGreen
    • Effects
      • Effects.AddEffect
    • Game
      • Game.ArePlayerAreasConnected
      • Game.DefaultGameEndCheck
      • Game.DefaultPlayerLostCheck
      • Game.DefaultPlayersLostCheck
      • Game.DisableLastNPlayersInStatistic
      • Game.EnableLandExploredCheck
      • Game.EnemyPlayersLost
      • Game.FindAnyUnit
      • Game.GetAmountOfTreesInArea
      • Game.GetDifficulty
      • Game.GetNumberOfSquaresWithDarkLand
      • Game.GetOffenceFightingStrength
      • Game.HasPlayerLost
      • Game.IsAlmostAllLandExplored
      • Game.IsAreaDarkLand
      • Game.IsAreaGreen
      • Game.IsAreaOwned
      • Game.LocalPlayer
      • Game.NumberOfPlayers
      • Game.PlayerLost
      • Game.PlayerRace
      • Game.Random
      • Game.Random100
      • Game.ResetFogging
      • Game.SetAlliesDontRevealFog
      • Game.SetFightingStrength
      • Game.ShowClock
      • Game.ShowText
      • Game.Time
    • Goods
      • Goods.AddPileEx
      • Goods.Amount
      • Goods.Delete
      • Goods.GetAmountInArea
    • Magic
      • Magic.CastSpell
      • Magic.CurrentManaAmount
      • Magic.DecreaseMana
      • Magic.IncreaseMana
    • Map
      • Map.AddDecoObject
      • Map.DeleteDecoObject
      • Map.Height
      • Map.PointIsOnScreen
      • Map.SetScreenPos
      • Map.Width
    • Settlers
      • Settlers.AddSettlers
      • Settlers.AddSettlersToFerry
      • Settlers.Amount
      • Settlers.AmountInArea
      • Settlers.AmountInSector
      • Settlers.IsSelected
      • Settlers.KillSelectableSettlers
      • Settlers.ProductionAmount
      • Settlers.SetHealthInArea
    • Statistic
      • Statistic.BuildingsCaptured
      • Statistic.GoodsProduced
      • Statistic.LandOwnedByPlayer
      • Statistic.ManaCollected
      • Statistic.MushroomFarmsDestroyed
      • Statistic.ServantsFreed
      • Statistic.SpellsCast
      • Statistic.UnitsDestroyed
    • Tutorial
      • Tutorial.ClearMarker
      • Tutorial.DeleteWorldCursor
      • Tutorial.DisableControls
      • Tutorial.DisableExcept
      • Tutorial.EnableAllControls
      • Tutorial.EnableControls
      • Tutorial.Exit
      • Tutorial.GetCurrentZoomFactor
      • Tutorial.PressButton
      • Tutorial.RWM
      • Tutorial.SelectNextBuilding
      • Tutorial.SetMarker
      • Tutorial.SetWorldCursor
      • Tutorial.SetZoom
      • Tutorial.ShowText
      • Tutorial.Won
    • Vehicles
      • Vehicles.AddVehicle
      • Vehicles.AddWheelerToFerry
      • Vehicles.Amount
      • Vehicles.AmountInArea
      • Vehicles.AmountInSector
      • Vehicles.GetFerryCargoInArea
      • Vehicles.GetHealth
      • Vehicles.IsSelected
      • Vehicles.KillVehicles
    • dbg
      • dbg.aioff
      • dbg.aion
      • dbg.db
      • dbg.pi
      • dbg.sg
      • dbg.stm
      • dbg.tp
  • SU Library Functions
    • SU.VersionOK
    • SU.Buildings
      • SU.Buildings.AddBuilding
      • SU.Buildings.AddBuildingEx
      • SU.Buildings.AddConstructionSite
      • SU.Buildings.AddConstructionSiteEx
      • SU.Buildings.GarrisonWarriors
      • SU.Buildings.GetConstructionState
      • SU.Buildings.GetHaltedState
      • SU.Buildings.GetPriorityState
      • SU.Buildings.RecruitVehicle
      • SU.Buildings.RecruitWarriors
      • SU.Buildings.SetHaltedState
      • SU.Buildings.SetPriorityState
      • SU.Buildings.SetProduction
      • SU.Buildings.SetProductionPercentMode
      • SU.Buildings.SetProductionPercentage
      • SU.Buildings.SetTradingRoute
      • SU.Buildings.SetWorkarea
      • SU.Buildings.StartPlacement
      • SU.Buildings.StoreGood
      • SU.Buildings.ToggleHalt
      • SU.Buildings.TogglePriority
      • SU.Buildings.TradeGood
      • SU.Buildings.UnGarrisonWarriors
    • SU.Entity
      • SU.Entity.GetBaseType
      • SU.Entity.GetClass
      • SU.Entity.GetEntityType
      • SU.Entity.GetHealth
      • SU.Entity.GetMaxHealth
      • SU.Entity.GetNextEntityID
      • SU.Entity.GetOwner
      • SU.Entity.GetPosition
      • SU.Entity.GetPreviousEntityID
      • SU.Entity.GetRoleClass
      • SU.Entity.GetTribe
      • SU.Entity.GetType
      • SU.Entity.GetUniqueID
      • SU.Entity.PileGetAmount
    • SU.Game
      • SU.Game.AddBeds
      • SU.Game.ClearSelection
      • SU.Game.GetLanguage
      • SU.Game.GetMapName
      • SU.Game.GetMapNameRelativePath
      • SU.Game.GetMaxSelection
      • SU.Game.IsCurrentlyOnScreen
      • SU.Game.Ping
      • SU.Game.PingPlayer
      • SU.Game.PingTeam
      • SU.Game.PingTeamOfPlayer
      • SU.Game.SetBeds
      • SU.Game.SetMaxSelection
      • SU.Game.ShowTextMessage
      • SU.Game.stm
    • SU.Map
      • SU.Map.GetEcoSector
      • SU.Map.GetFogOfWar
      • SU.Map.GetHeight
      • SU.Map.GetObject
      • SU.Map.GetOwner
      • SU.Map.GetResource
      • SU.Map.GetType
      • SU.Map.IsDarkLand
      • SU.Map.IsDarkLandBorder
      • SU.Map.IsFoundingStone
      • SU.Map.IsOccupied
      • SU.Map.SetResource
    • SU.Settlers
      • SU.Settlers.AddSettlersWithBeds
  • API Enums
    • AI
    • Buildings
    • Control
    • Dialog
    • Effects
    • Events
    • Game
    • Goods
    • Magic
    • Menu
    • Settlers
    • Sounds
    • Vehicles
  • SU API Enums
    • SU.Animals
    • SU.BaseTypes
    • SU.Classes
    • SU.EntityTypes
    • SU.Grounds
    • SU.GUIElements
    • SU.Languages
    • SU.Objects
    • SU.Resources
    • SU.RoleClasses
    • SU.Trees
    • SU.Tribes
Powered by GitBook
On this page
Edit on GitHub
  1. Tutorials
  2. Vollständige Mapscripts

Turnier Map Script 2vs2 2022

by Phottor

-----------------------------------------------
-----------------------------------------------
--Script for Settlers IV 2v2 tournament 2022---
-----------------HAVE FUN ---------------------
-----------------------------------------------
-----------------------------------------------

-- diagonals [1 = wall, 0 = no wall] 
longdiagonal = 0
shortdiagonal = 1
towerradius = 33

effectradius = 8
mapsize = 1024

pt60units = {
	Settlers.PIONEER, Settlers.SABOTEUR, Settlers.PIONEER,
	Settlers.GARDENER, Settlers.SWORDSMAN_01, Settlers.SWORDSMAN_02,
	Settlers.SWORDSMAN_03, Settlers.BOWMAN_01, Settlers.BOWMAN_02,
	Settlers.BOWMAN_03, Settlers.AXEWARRIOR_01, Settlers.AXEWARRIOR_02,
	Settlers.AXEWARRIOR_03, Settlers.BLOWGUNWARRIOR_01,
	Settlers.BLOWGUNWARRIOR_02, Settlers.BLOWGUNWARRIOR_03,
	Settlers.BACKPACKCATAPULTIST_01, Settlers.BACKPACKCATAPULTIST_02,
	Settlers.BACKPACKCATAPULTIST_03, Settlers.MEDIC_01, Settlers.MEDIC_02,
	Settlers.MEDIC_03, Settlers.SQUADLEADER, Settlers.PRIEST
}

pt90units = {
	Settlers.SABOTEUR, Settlers.PIONEER
}

towers = {0,0,0,0}

function new_game()
    request_event(initGame, Events.FIRST_TICK_OF_NEW_OR_LOADED_GAME)
	request_event(winCondition, Events.VICTORY_CONDITION_CHECK)
    request_event(ticking, Events.FIVE_TICKS)
    MinuteEvents.new_game()
end

function register_functions()
    reg_func(initGame)
    reg_func(winCondition)
    reg_func(ticking)
    MinuteEvents.register_functions()
end

function winCondition()
    ---killSpecators
    Game.DefaultPlayerLostCheck(1)
	Game.DefaultPlayerLostCheck(2)
	Game.DefaultPlayerLostCheck(3)
	Game.DefaultPlayerLostCheck(4)
	local p = 1
	while p < 5 do
		if Game.HasPlayerLost(p) == 1 and Game.HasPlayerLost(getPartner(p)) == 1 then
			Game.PlayerLost(5)
			Game.PlayerLost(6)
			Game.PlayerLost(7)
			Game.PlayerLost(8)
		end
		p = p+1
	end
    Game.DefaultGameEndCheck()
end

--- Ein Debug schalter.
function isDebug()
	return 0;
end

function initGame()
	dbg.stm("Welcome to the Settlers IV 2v2 tournament 2022! Have fun!")
    if Game.LocalPlayer() >= 5 then Tutorial.RWM(1) end
	dbg.aioff(1)
	dbg.aioff(2)
	dbg.aioff(3)
	dbg.aioff(4)
	dbg.aioff(5)
	dbg.aioff(6)
	dbg.aioff(7)
	dbg.aioff(8)
end

ticksInit = 0
ticksPtWall = 0
ticksStati = 0
function ticking()
	ticksPtWall = ticksPtWall + 5
	ticksStati = ticksStati + 5
    if ticksPtWall >= 35 then
		ticksPtWall = 0
		ptWall()
	end
	if ticksStati >= 210 then
		ticksStati = 0
		if Game.LocalPlayer() >= 5 then
			dbg.stm("--------")
		end
		printMsgForPlayer(1)
        printMsgForPlayer(2)
		printMsgForPlayer(3)
		printMsgForPlayer(4)
	end
	if ticksInit < 30 then
		ticksInit = ticksInit + 5
	end
	if ticksInit == 30 then
		ticksInit = ticksInit + 5
		destroySpectators()
	end
end

function printMsgForPlayer(player)
	local AmountOfMilitary1 = Settlers.Amount(player, Settlers.SWORDSMAN_01)+
		Settlers.Amount(player, Settlers.BOWMAN_01)+
		Settlers.Amount(player,Settlers.AXEWARRIOR_01)+
        Settlers.Amount(player,Settlers.BLOWGUNWARRIOR_01)+
        Settlers.Amount(player,Settlers.BACKPACKCATAPULTIST_01)+
        Settlers.Amount(player, Settlers.MEDIC_01)

	local AmountOfMilitary2 = Settlers.Amount(player, Settlers.SWORDSMAN_02)+
		Settlers.Amount(player, Settlers.BOWMAN_02)+
		Settlers.Amount(player,Settlers.AXEWARRIOR_02)+
        Settlers.Amount(player,Settlers.BLOWGUNWARRIOR_02)+
        Settlers.Amount(player,Settlers.BACKPACKCATAPULTIST_02)+
        Settlers.Amount(player, Settlers.MEDIC_02)

    local AmountOfMilitary3 = Settlers.Amount(player, Settlers.SWORDSMAN_03)+
		Settlers.Amount(player, Settlers.BOWMAN_03)+
		Settlers.Amount(player,Settlers.AXEWARRIOR_03)+
        Settlers.Amount(player,Settlers.BLOWGUNWARRIOR_03)+
        Settlers.Amount(player,Settlers.BACKPACKCATAPULTIST_03)+
        Settlers.Amount(player, Settlers.MEDIC_03)+
        Settlers.Amount(player, Settlers.SQUADLEADER)

    local playerKills = Statistic.UnitsDestroyed(player)
    local playerSettlers = Settlers.Amount(player, Settlers.CARRIER)
    local playerOffenceFightingStrength = Game.GetOffenceFightingStrength(player)
    local playerMagic = Magic.CurrentManaAmount(player)
    local playerSABOTEUR = Settlers.Amount(player, Settlers.SABOTEUR)
    local playerTHIEF = Settlers.Amount(player, Settlers.THIEF)
    local playerResBuilt = ressourcesBuilt(player)
	
    if Game.LocalPlayer() >= 5 then
		dbg.stm("Min" .. Game.Time() .. " P" .. player .. " [" .. 
			getTextForPlayerRace2(player) .. "]: " .. (AmountOfMilitary1+AmountOfMilitary2+AmountOfMilitary3) .. " - " ..
            AmountOfMilitary1 .. "/ " .. AmountOfMilitary2 .. "/ " .. AmountOfMilitary3 .. " Soldiers | " .. playerKills .. " Kills | " ..
            playerSettlers .. " Settlers | " .. playerOffenceFightingStrength .. " KK | " ..
            playerMagic .. " Mana | " .. playerSABOTEUR .. " Sabos | " .. playerTHIEF .. " Thieves | " ..
            playerResBuilt .. " Res")
    end
end

warns = {0,0,0,0}
function ptWall()
	-- pt (1: 60, 2: 90, 3: >90)
	local pt
	if Game.Time() < 60 then
		pt = 1
	elseif Game.Time() < 90 then
		pt = 2
	else
		pt = 3
	end
	
	if pt < 3 then
		towers = {0, 0, 0, 0}
		if longdiagonal == 1 then
			WallCalcLong(pt)
		end
		if shortdiagonal == 1 then
			WallCalcShort(pt)
		end
		
		local index = 0
		while index < 4 do
			index = index + 1
			if towers[index] == 1 and warns[index] <= 15 then
				warns[index] = warns[index] + 1
				if (Game.LocalPlayer() == index or Game.LocalPlayer() == getPartner(index) or Game.LocalPlayer() >= 5) then 
					dbg.stm("Player " .. index .. " is building an illegal tower and will lose the match in " .. (30-2*warns[index]) .. " seconds!")
				end
				ticksStati = 0
			end
			if towers[index] == 0 and warns[index] > 0 then
				warns[index] = 0
				if (Game.LocalPlayer() == index or Game.LocalPlayer() == getPartner(index) or Game.LocalPlayer() >= 5) then 
					dbg.stm("Player " .. index .. " destroyed the illegal tower, situation defused (min " .. Game.Time() .. ").")
				end
				ticksStati = 0
			end
		end
		
		if warns[1] > 15 or warns[2] > 15 then
			Game.PlayerLost(1)
			Game.PlayerLost(2)
		end
		if warns[3] > 15 or warns[4] > 15 then
			Game.PlayerLost(3)
			Game.PlayerLost(4)
		end
	end
end

function WallCalcLong(pt)
	local x = effectradius
	local y = mapsize - effectradius
	while (x <= (mapsize - effectradius)) do
		WallCalcHelper(pt,x,y)
        x = x + effectradius
        y = y - effectradius
    end
end

function WallCalcShort(pt)
	local x = effectradius
	local y = effectradius
	while (x <= (mapsize - effectradius)) do
		WallCalcHelper(pt,x,y)
        x = x + effectradius
        y = y + effectradius
    end
end

function WallCalcHelper(pt,x,y)
	blocktowers(x,y)
	if (towers[1] == 1 or towers[2] == 1 or towers[3] == 1 or towers[4] == 1) then
		DrawEffects(x,y,Effects.MAGIC_PILE02,towerradius)
	end
	if pt == 2 then 
		removeUnitsNearPoint(x,y,effectradius,pt90units)
	elseif pt == 1 then 
		removeBoatsNearPoint(x,y,effectradius)
		removeUnitsNearPoint(x,y,effectradius,pt60units)
		DrawEffects(x,y,Effects.RMAGIC_JUPITERSLIGHTNING,effectradius)
	end
end

function DrawEffects(x,y,effect,radius)
    Effects.AddEffect(effect,Sounds.NO_SOUND,x,y-radius,7)
    Effects.AddEffect(effect,Sounds.NO_SOUND,x,y,7)
    Effects.AddEffect(effect,Sounds.NO_SOUND,x,y+radius,7)
    Effects.AddEffect(effect,Sounds.NO_SOUND,x-radius,y-radius,7)
    Effects.AddEffect(effect,Sounds.NO_SOUND,x-radius,y,7)
    --Effects.AddEffect(effect,Sounds.NO_SOUND,x-radius,y+radius,7)
    --Effects.AddEffect(effect,Sounds.NO_SOUND,x+radius,y-radius,7)
    Effects.AddEffect(effect,Sounds.NO_SOUND,x+radius,y,7)
    Effects.AddEffect(effect,Sounds.NO_SOUND,x+radius,y+radius,7)
end

function blocktowers(x,y)
	local index = 0
	while index < 4 do 
		index = index + 1
		if Buildings.ExistsBuildingInArea(index,Buildings.GUARDTOWERSMALL,x,y,towerradius, Buildings.UNDERCONSTRUCTION) > 0	or
				Buildings.ExistsBuildingInArea(index,Buildings.GUARDTOWERBIG,x,y,towerradius, Buildings.UNDERCONSTRUCTION) > 0 or
				Buildings.ExistsBuildingInArea(index,Buildings.CASTLE,x,y,towerradius, Buildings.UNDERCONSTRUCTION) > 0 then
			towers[index] = 1
		end
	end
end
function removeBoatsNearPoint(x,y,radius)
    local ships = {Vehicles.WARSHIP, Vehicles.FERRY, Vehicles.WARMACHINE, Vehicles.CART}
    local index = 1
    while index <= getn(ships) do
        removeShipNearPoint(x,y,ships[index],radius,1)
		removeShipNearPoint(x,y,ships[index],radius,2)
        removeShipNearPoint(x,y,ships[index],radius,3)
        removeShipNearPoint(x,y,ships[index],radius,4)
        index = index + 1
    end
end

function removeShipNearPoint(x,y,ship,radius,player)
	if Vehicles.AmountInArea(player, ship, x, y, radius) > 0 then
		Vehicles.KillVehicles(player, ship, x, y, radius)
		if (Game.LocalPlayer() == player or Game.LocalPlayer() == getPartner(player) or Game.LocalPlayer() >= 5) then
			dbg.stm("Player " .. player .. " lost a vehicle to the PT wall (min " .. Game.Time() .. ")")
		end
		ticksStati = 0
    end
end

function removeUnitsNearPoint(x,y,radius,units)
    local index = 1
    while index <= getn(units) do
        removeUnitNearPoint(x,y,units[index],radius,1)
		removeUnitNearPoint(x,y,units[index],radius,2)
		removeUnitNearPoint(x,y,units[index],radius,3)
		removeUnitNearPoint(x,y,units[index],radius,4)
        index = index + 1
    end
end

function removeUnitNearPoint(x,y,unit,radius,player)
	local amount = Settlers.AmountInArea(player,unit,x,y,radius)
	if amount > 0 then
		Settlers.KillSelectableSettlers(player,unit,x,y,radius, 0)
		if (Game.LocalPlayer() == player or Game.LocalPlayer() == getPartner(player) or Game.LocalPlayer() >= 5) then
			dbg.stm("Player " .. player .. " lost " .. amount .. " unit(s) to the PT wall (min " .. Game.Time() .. ").")
		end
		ticksStati = 0
	end
end

-------------------------------------------------------------
-------------------------------------------------------------
------ generalUtility  --------------------------------------
-------Diese könnt ihr für eure Scripts nutzen---------------
-------------------------------------------------------------
function getTextForPlayerRace2(player)
    local raceId = Game.PlayerRace(player)

    if raceId == 0 then
        return "R"
    elseif raceId == 1 then
        return "W"
    elseif raceId == 2 then
        return "M"
    elseif raceId == 3 then
        return "D"
    elseif raceId == 4 then
        return "T"
    end
end

function getPartner(player)
	if longdiagonal == 1 and shortdiagonal == 1 then
		return player
	elseif longdiagonal == 1 and shortdiagonal == 0 then
		if (player == 2 or player == 4) then
			return player-1
		else
			return player+1
		end
	elseif longdiagonal == 0 and shortdiagonal == 1 then
		if (player == 1 or player == 2) then
			return player+2
		else
			return player-2
		end
	else
	
	end
end

function destroySpectators()
	destroyPlayer(5)
	destroyPlayer(6)
	destroyPlayer(7)
	destroyPlayer(8)
end

function destroyPlayer(player)
	local x = 0
	while x < mapsize do
		local y = 0
		while y < mapsize do
			if Buildings.ExistsBuildingInArea(player,Buildings.GUARDTOWERSMALL,x,y,2*effectradius, Buildings.READY) > 0 then
				removePlayerBelongingsFromArea(player,x,y)
				return
			end
			y = y + effectradius
		end
		x = x + effectradius
	end
end

function removePlayerBelongingsFromArea(player, x, y)
	local counter = 1
	--IDs der Gebaeude gehen von 1 - 83
	while counter <= 83 do
		while Buildings.Amount(player, counter, Buildings.READY) > 0 do
			Buildings.Delete(Buildings.GetFirstBuilding(player, counter),2)
		end
		counter = counter +  1
	end
	counter = 1
	-- IDs der Sieder gehen von 1 - 80
	-- Swordsman, Bowman, Medics, Axewarriors, Blowgunwarriors, Backpackcatapulists: 29-43
	while counter <= 80 do
		Settlers.KillSelectableSettlers(player, counter, x, y, 64, 0)
		counter = counter +  1
	end
	counter = 1
	--IDs der Goods gehen von 1 - 43
	while counter <= 43 do
		Goods.Delete(x,y,64,counter)
		counter = counter +  1
	end
end

-- Berechnet die aktuellen verbrauchten Ressourcen des Spielers player und gibt sie zurück
function ressourcesBuilt(player)
    local res = 0
    local race = Game.PlayerRace(player)
    if race == 4 then race = 3 end
    race = race + 1

    local buildings = {
        1, 4, 3, 2, 40, 41, 42, 14, 17, 15, 16, 18, 20, 19, 21, 22, 11, 12, 9,
        10, 8, 6, 7, 5, 34, 33, 13, 32, 31, 44, 43, 64, 65, 66, 67, 68, 69, 70,
        71, 72, 73, 74, 75, 24, 46, 47, 45, 48, 23, 27
    }
    local buildingCost = {}
    buildingCost[1] = {
        4, 5, 7, 4, 6, 11, 22, 5, 5, 5, 6, 5, 10, 10, 8, 12, 12, 12, 6, 9, 8, 5,
        6, 6, 4, 4, 12, 6, 8, 17, 12, 6, 9, 6, 10, 8, 8, 6, 10, 7, 3, 9, 4, 9,
        5, 14, 4, 20, 11, 6
    }
    buildingCost[2] = {
        3, 4, 5, 2, 5, 12, 24, 5, 5, 5, 6, 5, 10, 10, 8, 12, 12, 12, 6, 8, 8, 5,
        6, 6, 4, 4, 12, 6, 8, 14, 10, 6, 4, 5, 5, 9, 4, 4, 7, 6, 7, 10, 8, 9, 5,
        13, 4, 20, 11, 6
    }
    buildingCost[3] = {
        4, 4, 7, 4, 5, 12, 24, 5, 5, 5, 6, 5, 10, 10, 8, 11, 12, 11, 6, 9, 8, 5,
        6, 6, 4, 4, 12, 5, 7, 14, 9, 3, 8, 10, 10, 7, 7, 9, 7, 9, 6, 7, 11, 9,
        5, 13, 4, 20, 10, 6
    }
    buildingCost[4] = {
        4, 4, 8, 4, 5, 9, 26, 6, 6, 6, 7, 6, 10, 4, 9, 14, 13, 13, 7, 10, 9, 5,
        6, 7, 4, 5, 13, 5, 7, 13, 8, 5, 8, 7, 8, 5, 5, 9, 8, 10, 9, 9, 11, 10,
        6, 16, 4, 23, 10, 4
    }

    local counter = 1
    while counter < 51 do
        res = res + buildingCost[race][counter] *
                  Buildings.Amount(player, buildings[counter], Buildings.READY)
        counter = counter + 1
    end

    if race == 1 then -- Roemer
        res = res + 10 *Buildings.Amount(player, Buildings.VINYARD, Buildings.READY)
        res = res + 6 *Buildings.Amount(player, Buildings.AMMOMAKERHUT,Buildings.READY)
    elseif race == 2 then -- Wiki
        res = res + 6 *Buildings.Amount(player, Buildings.CHARCOALMAKER,Buildings.READY)
        res = res + 6 *Buildings.Amount(player, Buildings.BEEKEEPERHUT,Buildings.READY)
        res = res + 7 *Buildings.Amount(player, Buildings.MEADMAKERHUT,Buildings.READY)
    elseif race == 3 then -- Maya
        res = res + 6 *Buildings.Amount(player, Buildings.AGAVEFARMERHUT,Buildings.READY)
        res = res + 7 *Buildings.Amount(player, Buildings.TEQUILAMAKERHUT,Buildings.READY)
        res = res + 6*Buildings.Amount(player, Buildings.AMMOMAKERHUT,Buildings.READY)
    elseif race == 4 then -- Trojaner
        res = res + 6*Buildings.Amount(player, Buildings.SUNFLOWERFARMERHUT,Buildings.READY)
        res = res + 6*Buildings.Amount(player, Buildings.SUNFLOWEROILMAKERHUT,Buildings.READY)
        res = res + 7*Buildings.Amount(player, Buildings.AMMOMAKERHUT,Buildings.READY)
    end

    return res
end
PreviousSiedler IV WM 2021 "The Woods"NextGlobal Functions

Last updated 3 years ago