Gibt die "eindeutige ID" der Entität zurück - nicht in S4-Funktionen verwendet!
ACHTUNG: In Siedler 4 wird in allen Funktionen ausschließlich die "normale ID" (entityID) der Entity verwendet - nicht die hier zurückgegebene "eindeutige ID"!
Eine Entität ist alles, was im Spiel als "physisches Objekt" vorkommt: d.h. Objekte, Siedler, Gebäude, Fahrzeuge, Warenstapel, Tiere, etc., für Mapper also quasi alles Auswählbare (und noch mehr).
Hintergrund
Entitäten besitzen in Wirklichkeit zwei verschiedene IDs:
normale ID:
Diese ID wird von allen Spiel-Funktionen verwendet. Sie ist zu einem bestimmten Zeitpunkt eindeutig, wird jedoch nach dem Tod der Entität wiederverwendet!
→ Das bedeutet: Wenn man eine normale ID über längere Zeit (z. B. über mehrere Ticks) speichert, kann man nicht garantieren, dass sie später noch zur gleichen Entität gehört!
eindeutige ID:
Diese ID ist dauerhaft einzigartig und wird niemals erneut vergeben – sie bleibt also über die gesamte Laufzeit hinweg eindeutig.
Zweck dieser Funktion
Diese Funktion richtet sich speziell an Mapper, die normale IDs über längere Zeiträume speichern möchten und dabei sicherstellen wollen, dass eine gespeicherte ID immer noch zur ursprünglichen Entität gehört, um nicht alle paar Ticks wieder alle Entitäten durchiterieren zu müssen.
Durch einen Abgleich zwischen vorheriger und jetziger eindeutigen ID kann diese Zuordnung überprüft werden.
Beispiel Skript
firstTowerID =0lastGameMinute =-1idMap = {}-- register pair {entityID, uniqueID}functionregID(entityID)local uniqueID = SU.Entity.GetUniqueID(entityID)if uniqueID ~=0then-- entity still exists idMap[entityID] = uniqueIDendend-- checks if {entityID} is still valid (and was registered)functioncheckID(entityID)local uniqueID = SU.Entity.GetUniqueID(entityID)if uniqueID ~=0then-- entity still existslocal previousUniqueID = idMap[entityID]if previousUniqueID ~=nilthen-- entityID was registeredif previousUniqueID == uniqueID thenreturn1endendendreturn0endfunctionfive_ticks()local time = Game.Time()if lastGameMinute ~= time then-- new minute lastGameMinute = time-- check if ID still validifcheckID(firstTowerID) ==0then-- NOT valid dbg.stm("ID is not longer valid!")else-- valid dbg.stm("ID still valid!")endendendfunctionnew_game()-- don't add anything in this function above these linesif SU thenlocal requiredVersion ="0.2.0" -- change this to the version your map-script requiresif SU.VersionOK(requiredVersion) ==0then dbg.stm("SU Library Version requirement not met! The Map-Script needs at least Version "..requiredVersion..", you have Version "..SU.VERSION.."!") dbg.stm("Update (and restart The Settlers IV via) Settlers United to get the latest Version installed.")returnendelse dbg.stm("SU Library is missing!") dbg.stm("Update (and restart The Settlers IV via) Settlers United to get the latest Version installed.")returnend-- SU Library loaded and required Version fulfilled-- add your normal code here... firstTowerID = Buildings.GetFirstBuilding(1, Buildings.GUARDTOWERSMALL)regID(firstTowerID)request_event(tick, Events.FIVE_TICKS)endfunctionregister_functions()reg_func(five_ticks)end