Stellt euch vor ihr habt im Spiel einen Automaten der immer ein großes Medipak erstellt wenn Lara keins mehr Inventar hat.
Wie das geht, zeig ich euch hier.
Als erstes platziert ihr ein großes Medipak im Spiel, dies ist aber nur zur Hilfe (für die Position) wo das Medipak erscheinen soll und kann im Anschluss wieder entfernt werden.
Danach klickt ihr mit der rechten Maustaste und wählt "Copy position to clipboard".
Die Position ist nun im Zwischenspeicher, ihr könnt dann also einen beliebigen Text Editor öffnen und STRG + V drücken um die Werte anzuzeigen die ihr kopiert habt.
Sollte sowas wie hier sein (ich habe andere Werte als ihr, das ist nur ein Beispiel!): 57856, 4352, 61952
Dann baut ihr eine Box Volume ins Spiel so wie hier:
Merkt euch außerdem die Room Nummer in meinem Fall ist das die 44.
Dann kopiert euch die beiden Funktionen LevelFuncs.SpawnMedi& RandomString ins Lua Level Script und kopiert noch die "IF-Abfrage" für die OnLoop function sodass euer Script quasi so wie das untenstehende aussieht.
Wichtig: Ihr müsst nun Werte anpassen, die bei euch anders sind und zwar in der Zeile
LevelFuncs.Engine.Node.EnableVolume("volume_1783")
Ändert das auf euer Box Volume ab, ihr könnt den Namen der Box mit Rechtsklick auf "Copy Lua name to Clipboard" kopieren:
Außerdem muss unten in der LevelFuncs.SpawnMedi Funktion die Zeile:
TEN.Vec3(57856, 4352, 61952), mit eurer kopierten Position des Medipaks angepasst werden.
Und euer Wert von eurem "Box Volume" muss angepasst werden:
LevelFuncs.Engine.Node.DisableVolume("volume_1783")
Sowie die Room ID:
(vor V.1.5 welche noch nicht veröffentlicht ist, geht es über die ID (zb. 44), danach ab Version 1.5 mit dem Room Namen, zb. "Room44".)
44 --room ID
So sollte euer Script (mit anderen Werten!) nun aussehen:
-- FILE: Levels\Tremendous_Tower.lua
LevelFuncs.OnLoad = function() end
LevelFuncs.OnSave = function() end
LevelFuncs.OnStart = function() end
LevelFuncs.OnLoop = function()
if GetItemCount(TEN.Objects.ObjID.BIGMEDI_ITEM) > 0 then
LevelFuncs.Engine.Node.EnableVolume("volume_1783")
end
end
LevelFuncs.OnEnd = function() end
LevelFuncs.SpawnMedi = function(activator)
if GetItemCount(TEN.Objects.ObjID.BIGMEDI_ITEM) < 1 then
local MyMediName = RandomString(25)
LevelFuncs.Engine.Node.CreateMoveable(
TEN.Objects.ObjID.BIGMEDI_ITEM,
MyMediName, --name
TEN.Vec3(57856, 4352, 61952),
0, --rotation
44 --room ID in dem Room wo das Medipak auftauchen soll
)
LevelFuncs.Engine.Node.DisableVolume("volume_1783")
end
end
function RandomString(v)
local length = math.random(10,v)
local array = {}
for i = 1, length do
array[i] = string.char(math.random(55, 123))
end
return table.concat(array)
end
Display More
Zum Schluss verknüpft ihr noch euer Box Volume mit der Lua "LevelFuncs Funktion" "SpawnMedi":
Wichtig sind Werte "Activators: Lara" und "Event: On Volume Enter" (oben links)
Dann entfernt ihr noch das Medipak im Level Editor.
Das wars. Wenn ihr nun mit Lara die Box betritt wird das Medipak gespawnt - aber NUR wenn sie keins im Inventar hat.
Danach wird die Box deaktiviert. Sobald Lara wieder ein Medi im Inventar hat, wird die Box wieder aktiviert.
Sobald Lara wieder die Box betritt wird wieder abgefragt ob Lara KEIN Medipak im Inventar hat, sie muss ihr zuvor aufgehobenes somit erst verbraucht haben.
Ihr könnt das Script natürlich nun auch erweitern, wie zb, für Ammo, wenn Lara weniger als X Ammo hat, usw.
Kurze Erklärung noch zum Script:
Wenn Lara kein Medipak im Inventar hat,
if GetItemCount(TEN.Objects.ObjID.BIGMEDI_ITEM) < 1 then
erzeugen wir einen zufälligen internen Variablen Namen für das gespawnte Medipak (denn wenn wir immer den gleichen Namen benutzen würden, würde kein neues Medipak gespawnt werden da der Name schon belegt ist!)
local MyMediName = RandomString(25) (25 ist dabei die Anzahl der Zeichen die der Name erhalten soll)
Dann erstellen wir das Medi:
LevelFuncs.Engine.Node.CreateMoveable(
TEN.Objects.ObjID.BIGMEDI_ITEM,
MyMediName, --name
TEN.Vec3(57856, 4352, 61952),
0, --rotation
44 --room ID in dem Room wo das Medipak auftauchen soll
)
Und disablen die Box (damit nicht ständig neue gespawnt werden wenn Lara es noch nicht aufgehoben hat)
LevelFuncs.Engine.Node.DisableVolume("volume_1783")
Es wird in jedem Frame des Spiels geprüft ob Lara mind. 1 Medipak im Inventar hat um die Box wieder zu aktivieren:
LevelFuncs.OnLoop = function()
if GetItemCount(TEN.Objects.ObjID.BIGMEDI_ITEM) > 0 then
LevelFuncs.Engine.Node.EnableVolume("volume_1783")
end
end
Danach beginnt ein neuer Kreislauf, es wird jedes Mal wenn Lara die Box betritt abgefragt ob sie KEIN Medipak mehr im Inventar hat.. usw.
Viel Spaß und Erfolg mit euerem Spawn Automaten!