Inventar Gegenstände (Anzahl und Menge) LUA
Bei der TEN Engine haben wir ebenfalls die Möglichkeit, Anzahl und Menge von Gegenständen im Inventar festzulegen.
1 Anzahl und Menge beim Start des Levels festlegen
Um z.b. die Anzahl von Medipacks, Fackeln usw. festzulegen, die ein Spieler beim Start des Levels im Inventar haben soll, verwenden wir folgenden LUA Befehl.
ObjID
In die Klammer schreiben wir den Slot des Gegenstandes mit dem vorherigen Prefix "ObjID".
Eine Auflistung, der Slot Namen finden wir in der Dokumentation von squidshire unter dem Punkt Objects.ObjID.
1
Hier legen wir die Anzahl fest. 0 bedeutet, dass der Gegenstand nicht im Inventar ist. -1 gibt eine unendliche Menge.
Wir haben nun zwei Möglichkeiten, diesen Script Befehl in unsere LUA Level Datei zu setzen:
1. Wir setzen die Befehle direkt in die .OnStart LevelFuncs.
LevelFuncs.OnStart = function()
SetItemCount(ObjID.FLARE_INV_ITEM, 10)
SetItemCount(ObjID.BIGMEDI_ITEM, 3)
SetItemCount(ObjID.SMALLMEDI_ITEM, 5)
SetItemCount(ObjID.BINOCULARS_ITEM, 1)
end
Diese Möglichkeit kann aber schnell unübersichtlich werden, vor allem wenn wir noch weitere LUA Scripts in .OnStart setzen wollen.
2. Wir setzen den Script Befehl in eine normale Funktion. In der .OnStart LevelFuncs. Funktion verweisen wir dann auf diese mit "ItemsInventory ()":
LevelFuncs.OnStart = function()
ItemsInventory ()
end
function ItemsInventory ()
SetItemCount(ObjID.FLARE_INV_ITEM, 10)
SetItemCount(ObjID.BIGMEDI_ITEM, 3)
SetItemCount(ObjID.SMALLMEDI_ITEM, 5)
SetItemCount(ObjID.BINOCULARS_ITEM, 1)
end
Display More
So können wir leicht in die Funktion weitere Gegenstände setzen, ohne dass die .OnStart Funktion unübersichtlich wird.
2 Menge im Spiel ändern
Um im Spiel die Menge eines Gegenstandes anzupassen, gibt es folgenden LUA Befehl:
ObjID
In die Klammer schreiben wir den Slot des Gegenstandes mit dem vorherigen Prefix "ObjID".
1
Hier geben wir die Menge an, die wir hinzufügen wollen.
Setzen wir hier "0", wird hier die Standardmenge gegegeben, die bei TR IV üblich ist, z.B. bei der Armbrust Ammo 10.
Anmerkung:
Unterschied zum "SetItemCount" ist hier, dass die Menge zur bestenden Menge hinzugefügt wird.
Wir setzen den Befehl in eine LevelFuncs. Funktion, die wir im Spiel durch einen Volume Trigger auslösen.
3 Einen Gegenstand entfernen
Um einen Gegenstand zu entfernen gibt es seit Version 1.0.2 folgende Möglichkeit:
ObjID
In die Klammer schreiben wir den Slot des Gegenstandes mit dem vorherigen Prefix "ObjID".
1
Hier geben wir die Menge an, die wir entfernen wollen. Keine Angabe entfernt die Standardmenge. Hat keinen Effekt, wenn der Spieler eine unendliche Menge hat.
Den Befehl können wir sowohl in eine LevelFuncs. Funktion setzen und in in einem Volume Trigger auslösen, oder in eine normale Funktion, die wir dann in .OnStart auslösen.
Anmerkung:
Wie oben schon beschrieben, können wir den Befehl auch direkt in OnStart setzen. Aber aufgrund der Übersichtlichkeit empfehle ich, es in eine normale Funktion zu setzen, auf die wir dann in .OnStart verweisen.
LevelFuncs.OnStart = function()
RemovePistols ()
end
function RemovePistols ()
TakeItem(ObjID.PISTOLS_ITEM,1)
end
4 Eine Bedingung festlegen, wenn eine bestimmte Anzahl im Inventar ist
Möchten wir dass etwas passiert, wenn eine bestimmte Menge von einem Gegenstand im Inventar ist, verwenden wir eine IF....WHEN Bedingung und diesen Script Befehl.
Wir setzen den Code nun in eine normale Funktion:
LevelFuncs.OnControlPhase = function()
medipack ()
end
function medipack ()
local bigmedipack = GetItemCount(ObjID.BIGMEDI_ITEM)
if bigmedipack == 1 then
local door = GetMoveableByName("gatedoor")
door:Enable()
end
end
Display More
In die lokale Variable bigmedipack setzen wir die aktuelle Menge eines Gegenstandes, hier im Beispiel "BIGMEDI_Item".
Bei der IF....WHEN Bedignung sagen wir, wenn im Inventar die Menge von 4 BigMedipacks ist, dann soll sich eine Tür mit dem Lua Namen "gatedoor" öffnen.
In der .OnControlPhase LevelFuncs. Funtkion setzen wir noch einen Verweis auf die Funktion. Somit wird ständig geprüft, ob die Bedingung wahr ist.
medipack ()
Anmerkung:
Seit Version 1.0.2 wurde "InvID" in "ObjID" geändert.