Dies ist eine alte Version des Dokuments!
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
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: