Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:reference:standard_library:table:getn

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

NameTypBeschreibung
_Table Numerisches Table Table, dessen Größe ermittelt werden soll

Rückgabewerte

NameTypBeschreibung
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:

scripting/reference/standard_library/table/getn.1752582179.txt.gz · Zuletzt geändert: 2025/07/15 12:22 von fritz_98