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.
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
-- 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