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 2024
    2. Kalender 2023
    3. Kalender 2022
    4. Kalender 2021
    5. Kalender 2020
    6. Kalender 2019
    7. Kalender 2018
    8. Kalender 2017
  8. Osterkalender
    1. Osterkalender 2025
    2. Osterkalender 2024
    3. Osterkalender 2023
    4. Osterkalender 2022
    5. Osterkalender 2021
    6. Osterkalender 2020
    7. Osterkalender 2019
    8. Osterkalender 2018
    9. Osterkalender 2017
    10. 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 Kaufe Dinge für "Geld" bei einem Händler

  • l.m.
  • September 30, 2024 at 7:53 PM
  • October 10, 2024 at 11:49 AM
  • 530 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.

  • 1 Kaufe Dinge für "Geld" bei einem Händler

    Möchtest du Lara Dinge "kaufen" lassen? Einen Markt mit Händlern erstellen? Hier ist der ultimative Händler Generator für dich. Erstelle eine Handelsposition, passe viele Dinge an, wie Texte, Handelswährung Items, Kauf Items, Mengen und vieles mehr.


    Alles was du benötigst ist lediglich EINE Volume Box sowie EIN Volume Event mit zwei Events. Der Rest wird für dich generiert.

    Kopiere zunächst das untenstehende Script in eine Lua Datei (Merchant.lua).

    Diese Datei musst du in deiner Level.lua einbinden.

    Du kannst dann folgende Zeile in die erste Zeile deines level.lua Datei reinpacken:

    require("Merchant")

    Außerdem musst du dann zwei kleine Funktionen bei dir ins level.lua Script setzen damit die Volume Events im "Edit Volume event sets" Fenster sichtbar werden.

    Code
    LevelFuncs.InteractWithMerchant = function(activator)
        InteractWithMerchant(activator)
    end
    LevelFuncs.StopInteractWithMerchant = function(activator)
        StopInteractWithMerchant(activator)
    end


    Anschließend erstellt du eine Volume Box im Editor.

    Anschließend klicke doppelt auf die Box damit du auf das Edit Volume Fenster kommst.
    Dort Erstellst du das Event "InteractWithMerchant" (oder benenne es so wie du möchtest).

    Wichtig im TE (Edit/Edit Volume event sets) ist:
    Oben rechts gibt es die Event Types:
    Dort wählst du zunächst "On Volume Inside" aus und klickst auf "Level script functions".
    Dort wählst du die "InteractWithMerchant" Funktion aus.


    Anschließend wählst du oben rechts "On Volume Leave" aus und klickst auf "Level script functions".
    Dort wählst du die "StopInteractWithMerchant" Funktion aus.

    Die Auswahl der Funktionen "InteractWithMerchant" und "StopInteractWithMerchant" gibt es erst nachdem du das Script (untenstehend) in deine Lua Datei hinzugefügt hast und das Fenster Edit/Edit Volume event sets erneut geöffnet hast!!!

    Dann klicke Rechts auf die Volume Box und klicke auf "Copy position to clipboard".
    Diese 3 Werte werden in das Script kopiert und zwar an die Stelle:
    local coordinates = TEN.Vec3(54784, -0, 67072) - Diese drei Werte sind indivuduell und sind bei euch anders.

    Das wars im Grunde schon.
    Die Einstellungen sind eigentlich selbst erklärend.

    Wichtige Einstellungen im Lua Script ist:
    - paymentItem (Objekt welches als Bezahlung benötigt wird)
    - buyItem (Objekt welches Lara nach Bezahlung erhält)
    - coordinates (Koordinaten wo Lara "hingezogen werden soll")


    Eine Referenz zu möglichen Items findest du hier:
    TombEngine 1.4 Lua API

    Falls du Fragen haben solltest, zögere nicht mich anzuschreiben.
    Auch wenn du Erweiterungsideen oder Wünsche hast, melde dich gerne oder hinterlasse einen Kommentar.

    Hier ist das Script. Denk dran, dass du einige Sachen anpassen kannst.

    Viel Spaß beim Ausprobieren!


    2 Lua Code

    Code
    -- FILE: \Merchant.lua
    
    -- Koordinaten des Händlers, bei dem Lara zum Kauf hingezogen werden soll (gebe die Position der Volume Box ein oder wenn du eine andere Position möchtest, füge diese hier ein.)
    local coordinates = TEN.Vec3(54784, -0, 67072)
    
    -- Richtung von Lara, nachdem sie zur Händlerposition gezogen wurde (0 = NORDEN, 90 = OST, 180 = Süden, 270 = Westen)
    local direction = 0
    
    -- Größe der CineBars in px
    local cineBarsWeight = 120
    
    -- Geschwindigkeit, mit der die Cinebar erstellt wird (Sekunden x 30)
    local cineBarsCreationSpeed = 90
    
    -- Positionierung von Lara in X Sekunden
    local positioningSpeed = 2
    
    -- Welches Objekt soll zur Zahlung verwendet werden?
    local paymentItem = TEN.Objects.ObjID.PUZZLE_ITEM9
    
    -- Wieviele Objekte werden für den Kauf benötigt?
    local cost = 1
    
    -- Welches Item kann gekauft werden?
    local buyItem = TEN.Objects.ObjID.BIGMEDI_ITEM
    
    -- Wieviele Items werden je Kauf erhalten?
    local buyValue = 1
    
    -- Tastatur Befehl zum Bestätigen der Zahlung
    local confirmKey = ActionID.ACTION
    
    -- Tastatur Befehl zum Ablehnen des Kaufes (INVENTORY = ESC, aber es funktioniert nicht richtig, weil das Inventar geöffnet wird...)
    local cancelKey = ActionID.WALK
    
    -- Text für die Händleranfrage
    local askForBuyingText = "Hey, do you want to buy? YES - (ACTION) NO - (WALK)"
    
    -- Text, nachdem Lara die Artikel gekauft hat
    local thanksText = "Thx for buying!"
    
    -- Dauer der Anzeige des Textes „Lara hatte gekauft“ (in Sekunden)
    local thanksTextDuration = 2
    
    -- Text wenn Lara nicht genug Geld hat
    local notEnoughMoneyText = "Oh dear, you dont have enough money!"
    
    -- Dauer der Anzeige des "Nicht genug Geld" (in Sekunden)
    local notEnoughMoneyTextDuration = 2
    
    -- Text, wenn der Spieler sich dafür entscheidet, es nicht zu kaufen
    local nextTimeText = "Ok, then another time!"
    
    -- Dauer der Anzeige des "Nicht kaufen Text" (in Sekunden)
    local nextTimeTextDuration = 2
    
    -- Initialise local Variables
    local endDialog = false
    local buy = false
    local nextTime = DisplayString(nextTimeText, 100, 200, Color.new(255,255,255))
    local notEnoughMoney = DisplayString(notEnoughMoneyText, 100, 200, Color.new(255,255,255))
    local thanks = DisplayString(thanksText, 100, 200, Color.new(255,255,255))
    local asksForBuying = DisplayString(askForBuyingText, 100, 200, Color.new(255,255,255))
    
    -- Kaufen Funktion
    function InteractWithMerchant(activator)
        -- if ACTION is hit and Lara has not Start the dialog
        if KeyIsHit(ActionID.ACTION) and not LaraStartMerchantDialog then
            -- Initial abort buying and hide strings
            buy = false
            endDialog = false
            HideString(thanks)
            HideString(nextTime)
            HideString(notEnoughMoney)
            
            -- Start dialog
            LaraStartMerchantDialog = true
            -- Set Cine Bars
            SetCineBars(cineBarsWeight, cineBarsCreationSpeed)
            
            -- Move Lara to Merchant
            LevelFuncs.Engine.Node.ChangeMoveablePositionOverTimespan(
                activator:GetName(), --who
                coordinates, --where
                false, --relative coordinates
                positioningSpeed, --how long
                true --smooth
            )
            
            -- Rotate Lara to Merchant
            LevelFuncs.Engine.Node.ChangeMoveableRotationOverTimespan(
                activator:GetName(), --who
                direction, --direction (degrees)
                false, --relative coordinates
                positioningSpeed, --how long
                true --smooth
            )
            
            ShowString(asksForBuying)
        -- otherwise
        else
            -- if confirmKey is hit and Lara has started the dialog and not buy and not end the dialog
            if KeyIsHit(confirmKey) and LaraStartMerchantDialog and not buy and not endDialog then
                HideString(asksForBuying)
                if (GetItemCount(paymentItem) >= cost) then        
                    buy = true
                    ShowString(thanks, thanksTextDuration)
                    -- buy x items and remove y items for payment
                    Buy(buyItem, buyValue, paymentItem, cost)
                else
                    -- not enough money
                    buy = false
                    ShowString(notEnoughMoney, notEnoughMoneyTextDuration)
                end
                -- remove cinebars (set 0 with speed of 90)
                SetCineBars(0, cineBarsCreationSpeed)
                endDialog = true
                LaraStartMerchantDialog = false
            end
            
            -- if cancelKey is hit and Lara has started the dialog and not end the dialog
            if KeyIsHit(cancelKey) and LaraStartMerchantDialog and not endDialog then
                buy = false
                endDialog = true
                HideString(asksForBuying)
                ShowString(nextTime, nextTimeTextDuration)
                -- remove cinebars (set 0 with speed of 90)
                SetCineBars(0, cineBarsCreationSpeed)
                LaraStartMerchantDialog = false
            end
        end
    end
    
    -- function when Lara leave the volume box
    function StopInteractWithMerchant(activator)
        LaraStartMerchantDialog = false
        -- remove cinebars (set 0 with speed of 90)
        SetCineBars(0, cineBarsCreationSpeed)
        -- hide all strings
        HideString(asksForBuying)
        HideString(thanks)
        HideString(nextTime)
    end
    
    -- internal function for buying items
    function Buy(buyItem, buyValue, payItem, payValue)
        TakeItem(payItem, payValue)
        GiveItem(buyItem, buyValue, true)
    end
    Display More
    • TEN
    • Lua Scripting
    • LUA
    • TEN Engine

Share

  • Previous entry Items auf eine bestimmte Packungsgröße setzen
  • Next entry Klick Einstellungen bei Erhöhen eines Squares und einer Wandunterteilung
  • Changelog
  • PDF

Table of Contents

  • 1 Kaufe Dinge für "Geld" bei einem Händler
  • 2 Lua Code

Categories

  1. Archiv 8
    1. Tomb Editor_Alt 2
    2. TRNG_Alt 4
  2. Bauen 238
    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) 11
    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.12, developed by www.viecode.com
Powered by WoltLab Suite™ 6.1.8
TRLevel.de in the WSC-Connect App on Google Play
TRLevel.de in the WSC-Connect App on the App Store
Download