|
You last visited: Today at 04:21
Advertisement
[Quest]select wenn items vorhanden sind
Discussion on [Quest]select wenn items vorhanden sind within the Metin2 Private Server forum part of the Metin2 category.
08/05/2019, 13:00
|
#1
|
elite*gold: 0
Join Date: Oct 2012
Posts: 277
Received Thanks: 69
|
[Quest]select wenn items vorhanden sind
Hallo,
ich bin gerade am verzweifeln beim aufbau meiner Quest. Ich möchte eine Tausch Quest erstellen die bevor der select kommt prüft ob man die Items im Inventar hat. Wenn das Item nicht im Inventar ist gibt es die auswahl eben nicht.
zb.
Itemvnum 10 soll zu 100 getauscht werden
Itemvnum 20 soll zu 200 getauscht werden
Itemvnum 30 soll zu 300 getauscht werden
Nun möchte ich das wenn man den NPC anklickt die selects rausgenommen werden wenn das gewisse Item nicht vorhanden ist. zb hab ich kein item mit der vnum 10 dann soll die Auswahl für den Tausch mit der vnum 10 raus genommen werden und nurnoch ein select mit 20 und 30 erscheinen.
Das funktioniert ja auch bei der Seelenstein quest bei den Fertigkeiten, der erkennt welche auf G sind und zeigt dementsprechend nur die Skills mit G an.
Nur irgentwie bekomm ich es nicht gebacken die funktion zu "extrahieren"
Hoffe mir kann da jemand helfen
MfG
|
|
|
08/05/2019, 18:13
|
#2
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
Ich möchte keine fertige Lösung hinschreiben weil du dabei ja auch was lernen sollst und hoffentlich willst. Also hier mal die Bausteine:
Vorerst: Quests in Metin werden in Lua geschrieben (zumindest alles innerhalb der Trigger-Blöcke ("when ... begin" [...] "end").
Wenn du allgemeine Fragen hast (wie funktionieren Schleifen, Datenstrukturen, Funktionen, ...) informiere dich einfach über Lua, das ist erstmal unabhängig von Metin.
Metin benutzt soweit ich mich richtig erinnere Lua 5.1 (in Lua 5.2 gabs es teils größere Änderungen, also immer nach Lua 5.1 suchen).
Gut, mit der Info können wir jetzt weitermachen. Ich habe die Frage, die du dir Stellen solltest, mal voran geschrieben und die Lösung dann jeweils im Spoiler.
1. (Metin-Spezifisch) Wie finde ich heraus, wie oft der Spieler ein Item im Inventar hat?:
Code:
pc.count_item(<vnum>)
2. (Lua) Wie funktioniert ein if in Lua?
Code:
if <bedingung> then <block> end
3. (Lua) Welche Container-Typen (Arrays, Listen, ...) gibt es in Lua?
In Lua gibt es nur einen Container-Typen (Tables). Das Reicht aber auch aus.
Ein Table literal siegt wie folgt aus:
4. (Lua) Wie füge ich einen Wert in diesen Container hinzu?
Code:
table.insert(<table>, <value>)
5. (Metin-Spezifisch) Mit welcher Funktion kann ich alle Werte eines Lua-Table in einer Auswahl anzeigen?
Code:
select_table(<table>)
Mit diesen 5 Fragen (und evtl. noch ein paar einfachen wie z.B. "wie mache ich eine Schleife?") solltest du ans Ziel kommen.
Wenn du wirklich wirklich wirklich nicht weiter kommst, dann hier die komplette Lösung:
Code:
-- alles von hier
quest blabla begin
state start begin
when 12345.chat."Itemtausch" begin-- bis hier ist metin-spezifisch
-- alles von hier ist reines Lua (v5.1)
-- du kannst hier also alle Lua-Funktionen und die volle Lua-Syntax verwenden
-- zuerst haben wir ein table mit allen tauschbaren items
local exchangable_items = {
-- {vnum, count, vnum, count}
{10, 1, 100, 1},
{20, 1, 200, 1},
{30, 1, 300, 1},
}
local select_options = {}-- in diesen table legen wir gleich alle tauschbaren items hinein
local select_option_strings = {}-- und in diesen table die entsprechenden strings, also die texte die der spieler in der auswahl sehen soll
-- eine schleife über alle eintauschbaren items
for _, exchangable_item in ipairs(exchangable_items) do
-- in der variable "exchangable_item" haben wir hier mit jedem schleifendurchgang eins der eintauschbaren items zur verfügung
local required_vnum = exchangable_item[1]
local required_count = exchangable_item[2]
local result_vnum = exchangable_item[3]
local result_count = exchangable_item[4]
-- prüfen ob der spieler das item in der entsprechenden menge im inventar hat
if pc.count_item(required_vnum) >= required_count then
-- und wenn ja fügen wir den entsprechenden auswahl-text und das item in die beiden tables ein
table.insert(select_options, exchangable_item)
table.insert(select_option_strings, string.format("%dx %s", result_count, item_name(result_vnum)))
end
end
-- wir machen nur weiter wenn der spieler min. 1 item eintauschen kann (also wenn die liste nicht leer ist)
if table.getn(select_options) >= 1 then
-- es wird noch die "Abbrechen"-Option zur Auswahl hinzugefügt
table.insert(select_option_strings, "Abbrechen")
-- select_table gibt die nummer der angeklickten option zurück
-- in select_options haben wir vorher (in der schleife) die verfügbaren items hinzugefügt. Für die letzte Option ("Abbrechen") gibt es keinen Eintrag in "select_options" - da würden wir also "nil" (undefiniert, null, nichts) zurückbekommen
local selected_exchange = select_options[select_table(select_option_strings)]
-- wenn irgendwas außer "Abbrechen" ausgewählt wurde (die variable also nicht "nil" ist)
if selected_exchange then
local required_vnum = selected_exchange[1]
local required_count = selected_exchange[2]
local result_vnum = selected_exchange[3]
local result_count = selected_exchange[4]
-- nochmal prüfen ob der Spieler das benötigte Item im Inventar hat -> das muss IMMER geprüft werden wenn eine Funktion ausgeführt wurde die auf Spielerinput wartet (wait(), select(), select_table(), ...)
-- der Spieler könnte das Item sonst in der Zwischenzeit verloren / gehandelt / sonstwas haben
if pc.count_item(required_vnum) >= required_count then
-- und schlussendlich der tausch der items
pc.remove_item(required_vnum, required_count)
pc.give_item2(result_vnum, result_count)
end
end
else
say("Du kannst aktuell nichts eintauschen")
end
-- hier endet der "reine" Lua part
end
end
end
|
|
|
|
Similar Threads
|
Eng. tastatur vorhanden, obwohl nicht vorhanden O_o
06/19/2017 - Technical Support - 0 Replies
http://i.imgur.com/we5Cv82.png
Kann es mir jemand erklären?
Ist heute abend das erste mal in der Info Leiste.
Was macht die Sprachauswahl da und wieso gibt es den Englischen Eintrag im System nicht? Die Sprachanzeige kommt nur, wenn man mehr als 1 Sprache nutzt, was ich ja nicht tuhe, aber es wird dennoch gezeigt :(
Help me.
|
Compile all quest without quest's files list // Kompilieren Sie alle Quest ohne Quest
07/17/2011 - Metin2 PServer Guides & Strategies - 3 Replies
ENGLISH
Hello dear community, this is a very simple guide but at the same time useful.
How to compile ALL quest in the folder "quest" without the files list in the file "locale_list"?
Easy!
Open the file "make" and replace the content of the file with this:
for f in *.quest; do ./qc $f; done
Oki. Now set the 0777 permission to the file.
Finally open a SSH client and sign in. Write the command:
cd /game_file_folder
|
Metin 2 Select Character select error
02/26/2011 - Metin2 Private Server - 1 Replies
Dabei-ist das spiel Charakter-Auswahl Error help
Log Files
0225 23:37:16227 :: CEffectManager::RegisterEffect - LoadScript(d:/ymir work/effect/hit/percent_damage1.mse) Error
0225 23:37:16227 :: CInstanceBase::RegisterEffect(eEftType=264, c_szEftAttachBone=, c_szEftName=d:/ymir work/effect/hit/percent_damage1.mse, isCache=1) - Error
0225 23:37:16227 :: CEffectManager::RegisterEffect - LoadScript(d:/ymir work/effect/hit/percent_damage2.mse) Error
0225 23:37:16227 ::...
|
WTS Acc mit allen Teilen! Hm vorhanden, level 20 vorhanden! topk Rdy!
02/06/2011 - Guild Wars Trading - 4 Replies
Tag Herrschaften!
Ich verkaufe hier einen Guild Wars Account mit allen Teilen.
Auf dem Account befinden sich 4 level 20 Chars.
1. Stufe 20 Ritualist mit Zugang zu allen Teilen. HardMode in Factions freigeschaltet. Einige Elite-Fertigkeiten sind freigeschaltet.
2. Stufe 20 Assa. Zugang zu Factions und Pro! Topk rdy!!!
|
All times are GMT +2. The time now is 04:21.
|
|