1. TRLevel
  2. Forum
    1. Unresolved Threads
    2. Articles
  3. Members
    1. Recent Activities
    2. Users Online
    3. Team
    4. Trophy
    5. Search Members
  4. Tutorials
  5. Levels
  6. Downloads
  7. Adventskalender
    1. Kalender 2025
    2. Kalender 2024
    3. Kalender 2023
    4. Kalender 2022
    5. Kalender 2021
    6. Kalender 2020
    7. Kalender 2019
    8. Kalender 2018
    9. Kalender 2017
  8. Osterkalender
    1. Osterkalender 2026
    2. Osterkalender 2025
    3. Osterkalender 2024
    4. Osterkalender 2023
    5. Osterkalender 2022
    6. Osterkalender 2021
    7. Osterkalender 2020
    8. Osterkalender 2019
    9. Osterkalender 2018
    10. Osterkalender 2017
    11. Osterkalender 2016
  9. Mediathek
    1. Albums
    2. Video channels
  • Login
  • Register
  • Search
Tutorials
  • Everywhere
  • Articles
  • Pages
  • Forum
  • Tutorials
  • Files
  • Images
  • Videos
  • More Options
  1. TRLevel.de
  2. Lexicon

Lua Scripting 1.4 Item Spawner

  • l.m.
  • September 27, 2024 at 10:34 AM
  • October 18, 2024 at 2:07 PM
  • 1,043 times viewed

WICHTIG

Diese Tutorials sind beim schreiben immer mit der aktuellsten TEN/TE Version erstellt worden.
Leider kann sich von Version zu Version des Tomb Editor oder der Tomb Engine immer etwas am Code ändern. Daher können manche Teile der Tutorials veraltet sein, bzw. nicht mehr funtkionieren.
Wenn euch hier etwas auffällt, teilt uns dies BITTE mit. Damit man sich das Tutorial ansehen und überarbeiten kann. Dazu bitte einfach ein Thema im "TRLevel Forum" eröffnen.

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

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

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

    Code
    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!

    • TEN
    • Lua Scripting
    • LUA
    • TEN Engine

Share

  • Previous entry Inventar Gegenstände (Anzahl und Menge) LUA
  • Next entry Items auf eine bestimmte Packungsgröße setzen
  • Changelog
  • PDF

Categories

  1. Archiv 8
    1. Tomb Editor_Alt 2
    2. TRNG_Alt 4
  2. Bauen 239
    1. Tomb Editor (TE) 107
      1. Tipps und Tricks 19
      2. SoundTool 5
      3. TombIDE 6
      4. WadTool 11
      5. NodeEditor 2
    2. Tomb Engine (TEN) 72
      1. Tipps und Tricks 17
      2. Lua Scripting 35
    3. TRNG Engine 194
      1. Scripting 4
      2. NG Center 20
      3. Allgemein 7
      4. Neue TRNG Script Befehle 66
      5. Neue TRNG Trigger 66
      6. Neue TRNG OCB Werte 9
      7. TRNG Plugins 6
      8. Tipps und Tricks 5
      9. TRNG Engine Praktische Beispiele 8
    4. NGLE (Next Generation Level Editor) 12
    5. Tomb Raider Level Editor 86
      1. Licht 4
      2. Geometrie 8
      3. Levelbau 110
      4. Tipps und Tricks 12
      5. Script 3
      6. Sounds 2
      7. Texturen 2
      8. OCB 4
      9. Sonstiges 3
      10. Dxtre3D 1
  3. Tools 21
    1. Metasequoia 5
      1. Metasequoia 3.x 2
      2. Metasequoia 4.x 3
    2. StrPix und WADMerger 4
      1. StrPix 2
      2. WADMerger 2
    3. FLEP 9
    4. Tools 2
    5. TREP 7
      1. Flipeffect Editor 1
      2. Custom Patches 2
    6. TRViewer 1
    7. Blender 0
  4. Allgemeine Tipps und Tricks 3
  5. Level Editor Lexikon 107
    1. Tomb Editor 1
    2. Tools 3
      1. TREP/FLEP 3
      2. WADMerger 0
      3. Strpix 0
    3. NGLE/LE 97
    4. Allgemein 6
      1. WAD Slots 5
    5. NGEngine 0
  1. Privacy Policy
  2. Contact
  3. Legal Notice
Lexicon 7.1.17, developed by www.viecode.com
Powered by WoltLab Suite™ 6.1.18
TRLevel.de in the WSC-Connect App on Google Play
TRLevel.de in the WSC-Connect App on the App Store
Download