======table.getn======
''table.getn (_Table)'' \\
Gibt die Anzahl der sequentiellen numerischen Einträge im Table ''_Table'' zurück (also wie viele Einträge von Index ''1'' aufwärts ununterbrochen im Table sind).
===Parameter===
^Name^Typ^Beschreibung^
| **_Table** | Numerisches Table | Table, dessen Größe ermittelt werden soll |
===Rückgabewerte===
^Name^Typ^Beschreibung^
| **Size** | Integer | Anzahl der ununterbrochenen numerischen Einträge im ''_Table'' |
----
===Beispiele===
Die Funktion wird am häufigsten in Schleifen genutzt, die über komplette numerische Tables iterieren sollen. In einem einfachen Beispiel definieren wir eine Liste an Technologien, die dem Spieler zum Spielbeginn verboten werden sollen:
function InitTechnologies()
local TechnologiesToForbid = {
Technologies.UP2_Tower, -- Ausbau zum Kanonenturm
Technologies.T_UpgradeHeavyCavalry1, -- Ausbildung zum Streitaxtkämpfer
Technologies.UP2_Monastery, -- Ausbau zur Kathedrale
Technologies.B_Beautification01 -- Dario-Statue
}
-- Egal wie viele Technologien in der Liste stehen, wir wollen sie alle verbieten
for i = 1, table.getn(TechnologiesToForbid) do
ForbidTechnology(TechnologiesToForbid[i], 1)
end
end
Auch wäre denkbar, einige Spieler-Einheiten in der Nähe eines Brunnens (''Entities.PB_Beautification02'') mit dem Skriptnamen ''"HealingWell"'' zu heilen. Damit das der Spieler auch sehen kann, erschaffen wir zusätzlich den passenden Effekt.
function UseHealingWell()
local PositionHealingWell = GetPosition("HealingWell")
-- AccessCategory 2 bedeutet, dass nur Einheiten von Spieler 1 gesucht werden. Siehe auch der verlinkte Wiki-Artikel
local PlayerUnits = { Logic.GetPlayerEntitiesInArea(1, 0, PositionHealingWell.X, PositionHealingWell.Y, 3000, 16, 2) }
-- Wir starten bei Index 2, weil in Index 1 die Anzahl der gefundenen Entities steht
for i = 2, table.getn(PlayerUnits) do
-- Heile die Einheit um 50 Lebenspunkte
Logic.HealEntity(PlayerUnits[i], 50)
-- Erschaffe einen Salim-Heileffekt an der Position der Entity
local PositionEntity = GetPosition(PlayerUnits[i])
Logic.CreateEffect(GGL_Effects.FXSalimHeal, PositionEntity.X, PositionEntity.Y, 1)
end
end
**Hinweis:** Derartige Schleifen können auch mit [[scripting:reference:standard_library:base:ipairs|ipairs]] realisiert werden!\\
''table.getn'' muss aber nicht zwingend für Schleifen benutzt werden. Die Größe eines Tables kann auch anderweitig nützlich sein, beispielsweise wenn man ein //zufälliges// Element einer Liste auswählen möchte. Hier erschaffen wir zufällig entweder einen Trupp Schwertkämpfer oder Bogenschützen an der Position ''"RandomTroopSpawn"'':
function CreateRandomTroop()
local LeaderTypes = {
Entities.PU_LeaderSword2,
Entities.PU_LeaderBow2
}
local RandomLeaderTypeIndex = math.random( table.getn(LeaderTypes) )
local RandomLeaderType = LeaderTypes[RandomLeaderTypeIndex]
CreateMilitaryGroup(1, RandomLeaderType, 4, GetPosition("RandomTroopSpawn"))
end
----
Verwendete Funktionen:
* [[scripting:reference:comfort:forbidtechnology|ForbidTechnology (_Technology, _PlayerId)]]
* [[scripting:reference:comfort:getposition|GetPosition (_Entity)]]
* [[scripting:tutorials:level2:find_entities#logicgetplayerentitiesinarea|Logic.GetPlayerEntitiesInArea(_PlayerId, _EntityType, _PositionX, _PositionY, _Radius, _Amount, _AccessCategory)]]
* [[https://github.com/mcb5637/s5LuaReference/blob/master/Cpp/Logic.lua|Logic.HealEntity]]
* [[https://github.com/mcb5637/s5LuaReference/blob/master/Cpp/Logic.lua|Logic.CreateEffect]]
* [[scripting:reference:comfort:createmilitarygroup|CreateMilitaryGroup(_PlayerId, _LeaderType, _Soldiers, _Position, _Name, _LookAt)]]