|
You last visited: Today at 17:33
Advertisement
Warp Quest item abfrage
Discussion on Warp Quest item abfrage within the Metin2 Private Server forum part of the Metin2 category.
04/07/2013, 11:09
|
#1
|
elite*gold: 0
Join Date: Sep 2010
Posts: 1,219
Received Thanks: 278
|
Warp Quest item abfrage
Hey,
such eine Warp quest :
map XY
ab level XY
ITEM :XY
|
|
|
04/07/2013, 11:49
|
#2
|
elite*gold: 39
Join Date: Jun 2009
Posts: 500
Received Thanks: 212
|
Hier:
Code:
quest warp_quest_for_Sh4Xx begin
state start begin
function teleport_select(...)
arg.n = nil
local tp,max = arg,5
if type(tp[1]) == 'number' then
max = tp[1]
if type(tp[2]) == 'table' then
tp = tp[2]
else
table.remove(tp,1)
end
elseif type(tp[1]) == 'table' then
if type(tp[1][1]) == 'number' then
max = tp[1][1]
table.remove(tp[1],1)
tp = tp[1]
end
tp = tp[1]
end
local str = '{'
local tablen,act,incit = table.getn(tp),0,0
table.foreach(tp,function(i,l)
act = act + 1
if act == 1 then
str = str .. '{'..string.format('%q',l)
elseif act == max+1 and tablen > act+incit then
if tablen ~= act+incit+1 then
str = str..'},{'..string.format('%q',l)
else
str=str..','..string.format('%q',l)
end
incit = incit + max
act = 1
else
str=str..','..string.format('%q',l)
end
end)
local px = loadstring('return '..str ..'}}')()
local function copy_tab(t) local p= {} for i = 1,table.getn(t) do p[i] = t[i] end return p end
local pe = {}
for i = 1,table.getn(px) do pe [i] = copy_tab(px[i]) end
local function init(i,ip)
pe[i] = copy_tab(px[i])
local next,back,exit = 0,0,0
if table.getn(pe[i]) >= 5 then
if (i > 1 and i < table.getn(pe)) or table.getn(pe[i]) == 6 then
say_size(350, 350)
elseif table.getn(pe[i]) >= 7 then
say_size(350, 380)
else
say_size(350, 320)
end
end
say_title(mob_name(npc.get_race())..":")
say("Wohin willst du dich teleportieren?")
say("")
if i < table.getn(pe) and table.getn(pe) ~=1 then table.insert(pe[i],table.getn(pe[i])+1,'Weiter'); next = table.getn(pe[i]) end
if i > 1 then table.insert(pe[i],table.getn(pe[i])+1,'Zurück'); back = table.getn(pe[i]) end
table.insert(pe[i],table.getn(pe[i])+1,'Abbruch'); exit = table.getn(pe[i])
local e = select_table(pe[i])
if e == next then return init(i+1,ip+max)
elseif e == back then return init(i-1,ip-max)
elseif e == exit then return -1
else return e+ip,pe[i][e] end
end
return init(1,0) or -1
end
when 9012.chat."Teleportieren" begin
local warps = {
{"Mapname", 0, 0, 1, 50053, 1}, -- Mapname, X, Y, LevelNeed, ItemNeed, ItemCount ~ kann erweitert werden bis unendlich
}
local enabled_warps = {}
local enabled_warp_names = {}
for i = 1, table.getn(warps) do
local warp = warps[i]
if pc.get_level() >= tonumber(warp[4]) and pc.count_item(warp[5]) >= tonumber(warp[6]) then
enabled_warps.insert(warp)
enabled_warp_names.insert(warp[1])
end
end
if table.getn(enabled_warps) < 1 then
say_title(mob_name(npc.get_race())..":")
say("Ich kann dich leider im Moment nicht")
say("teleportieren. Komm später wieder.")
say("")
return
end
local warp = warp_quest_for_Sh4Xx.teleport_select(enabled_warp_names)
if warp == -1 then
return
end
say_title(mob_name(npc.get_race())..":")
say("Möchtest du dich wirklich zu dem Ort")
say(enabled_warps[warp][1].." teleportieren?")
say("Du musst mir dafür "..enabled_warps[warp][6].."x "..item_name(enabled_warps[warp][5]))
say("geben.")
say("")
if select("Teleportieren", "Abbrechen") == 2 then
return
end
if pc.count_item(enabled_warps[warp][5]) < tonumber(enabled_warps[warp][6]) then
say_title(mob_name(npc.get_race())..":")
say("Du hast nicht genügend Gegenstände.")
say("Komm wieder, wenn du genug hast.")
say("")
return
end
pc.remove_item(enabled_warps[warp][5], enabled_warps[warp][6])
pc.warp(enabled_warps[warp][2], enabled_warps[warp][3])
end
end
end
Die "teleport_select"-Funktion ist eine abgeänderte Version der "select2"-Funktion von Mijago.
Deine Maps kannst du bei "local warps = {" einstellen (Erklärung steht dort als Kommentar).
Mfg
|
|
|
04/07/2013, 11:54
|
#3
|
elite*gold: 0
Join Date: Sep 2010
Posts: 1,219
Received Thanks: 278
|
mh...
Die ist ein bissi. Durscheinander...(Aufbau)
Trz. danke
|
|
|
04/07/2013, 11:59
|
#4
|
elite*gold: 39
Join Date: Jun 2009
Posts: 500
Received Thanks: 212
|
Eigtl. nicht durcheinander, wenn du sie dir mal im Npp anschaust 
Das Problem ist, ich brauchte die teleport_select-Funktion, daher oben bisschen.. naja.
Aber sonst ziemlich normal O:
Mfg
|
|
|
04/07/2013, 12:01
|
#5
|
elite*gold: 0
Join Date: Sep 2010
Posts: 1,219
Received Thanks: 278
|
kann mich halt nicht mit quest´s anfreunden^^
|
|
|
04/07/2013, 12:01
|
#6
|
elite*gold: 39
Join Date: Jun 2009
Posts: 500
Received Thanks: 212
|
O_O großer Fehler, warte eine Sekunde und sie wird viel übersichtlicher sein!
Dann kannste dich vllt bissl mehr damit anfreunden, mom !
Mfg
|
|
|
04/07/2013, 12:03
|
#7
|
elite*gold: 0
Join Date: Sep 2010
Posts: 1,219
Received Thanks: 278
|
Okay
Danke
|
|
|
04/07/2013, 12:08
|
#8
|
elite*gold: 39
Join Date: Jun 2009
Posts: 500
Received Thanks: 212
|
map_warp.quest:
Code:
quest map_warp begin
state start begin
when 9012.chat."Teleportieren" begin
-- VARIABLEN - START
local warps = {
{"Mapname", 0, 0, 1, 50053, 1}, -- Mapname, X, Y, LevelNeed, ItemNeed, ItemCount ~ kann erweitert werden bis unendlich
{"Mapname", 0, 0, 1, 50053, 1}, -- Mapname, X, Y, LevelNeed, ItemNeed, ItemCount ~ kann erweitert werden bis unendlich
{"Mapname", 0, 0, 1, 50053, 1}, -- Mapname, X, Y, LevelNeed, ItemNeed, ItemCount ~ kann erweitert werden bis unendlich
{"Mapname", 0, 0, 1, 50053, 1}, -- Mapname, X, Y, LevelNeed, ItemNeed, ItemCount ~ kann erweitert werden bis unendlich
{"Mapname", 0, 0, 1, 50053, 1}, -- Mapname, X, Y, LevelNeed, ItemNeed, ItemCount ~ kann erweitert werden bis unendlich
{"Mapname", 0, 0, 1, 50053, 1}, -- Mapname, X, Y, LevelNeed, ItemNeed, ItemCount ~ kann erweitert werden bis unendlich
}
-- VARIABLEN - ENDE
-- CODE - START
-- Suche Warps raus, die erlaubt sind (Level- & Item-Prüfung)
local enabled_warps = {}
local enabled_warp_names = {}
for i = 1, table.getn(warps) do
local warp = warps[i]
if pc.get_level() >= tonumber(warp[4]) and pc.count_item(warp[5]) >= tonumber(warp[6]) then
enabled_warps.insert(warp)
enabled_warp_names.insert(warp[1])
end
end
-- Falls keine erlaubten Warps vorhanden sind, gebe Fehlermeldung aus & breche ab (return)
if table.getn(enabled_warps) < 1 then
say_title(mob_name(npc.get_race())..":")
say("Ich kann dich leider im Moment nicht")
say("teleportieren. Komm später wieder.")
say("")
return
end
-- Öffne Auswahlfenster mit Warps
local warp = teleport_select(enabled_warp_names)
if warp == -1 then
return
end
-- Abfrage, ob man WIRKLICH an diese Ort reisen möchte & was man dafür braucht (anzeige)
say_title(mob_name(npc.get_race())..":")
say("Möchtest du dich wirklich zu dem Ort")
say(enabled_warps[warp][1].." teleportieren?")
say("Du musst mir dafür "..enabled_warps[warp][6].."x "..item_name(enabled_warps[warp][5]))
say("geben.")
say("")
if select("Teleportieren", "Abbrechen") == 2 then
return
end
-- Nocheinmal Prüfung, falls man irgendwie buggt, dass man genug Items hat die man braucht
if pc.count_item(enabled_warps[warp][5]) < tonumber(enabled_warps[warp][6]) then
say_title(mob_name(npc.get_race())..":")
say("Du hast nicht genügend Gegenstände.")
say("Komm wieder, wenn du genug hast.")
say("")
return
end
-- Lösche Items & teleportiere PC
pc.remove_item(enabled_warps[warp][5], enabled_warps[warp][6])
pc.warp(enabled_warps[warp][2], enabled_warps[warp][3])
-- CODE - ENDE
end
end
end
map_warp.lua:
Code:
function teleport_select(...)
arg.n = nil
local tp,max = arg,5
if type(tp[1]) == 'number' then
max = tp[1]
if type(tp[2]) == 'table' then
tp = tp[2]
else
table.remove(tp,1)
end
elseif type(tp[1]) == 'table' then
if type(tp[1][1]) == 'number' then
max = tp[1][1]
table.remove(tp[1],1)
tp = tp[1]
end
tp = tp[1]
end
local str = '{'
local tablen,act,incit = table.getn(tp),0,0
table.foreach(tp,function(i,l)
act = act + 1
if act == 1 then
str = str .. '{'..string.format('%q',l)
elseif act == max+1 and tablen > act+incit then
if tablen ~= act+incit+1 then
str = str..'},{'..string.format('%q',l)
else
str=str..','..string.format('%q',l)
end
incit = incit + max
act = 1
else
str=str..','..string.format('%q',l)
end
end)
local px = loadstring('return '..str ..'}}')()
local function copy_tab(t) local p= {} for i = 1,table.getn(t) do p[i] = t[i] end return p end
local pe = {}
for i = 1,table.getn(px) do pe [i] = copy_tab(px[i]) end
local function init(i,ip)
pe[i] = copy_tab(px[i])
local next,back,exit = 0,0,0
if table.getn(pe[i]) >= 5 then
if (i > 1 and i < table.getn(pe)) or table.getn(pe[i]) == 6 then
say_size(350, 350)
elseif table.getn(pe[i]) >= 7 then
say_size(350, 380)
else
say_size(350, 320)
end
end
say_title(mob_name(npc.get_race())..":")
say("Wohin willst du dich teleportieren?")
say("")
if i < table.getn(pe) and table.getn(pe) ~=1 then table.insert(pe[i],table.getn(pe[i])+1,'Weiter'); next = table.getn(pe[i]) end
if i > 1 then table.insert(pe[i],table.getn(pe[i])+1,'Zurück'); back = table.getn(pe[i]) end
table.insert(pe[i],table.getn(pe[i])+1,'Abbruch'); exit = table.getn(pe[i])
local e = select_table(pe[i])
if e == next then return init(i+1,ip+max)
elseif e == back then return init(i-1,ip-max)
elseif e == exit then return -1
else return e+ip,pe[i][e] end
end
return init(1,0) or -1
end
Füg nun in der locale_list (oder halt quest_list) die map_warp.quest ein und schreib oben in deine questlib.lua rein:
Code:
dofile("locale/germany/quest/map_warp.lua")
€dit: Noch in der quest_functions eintragen "teleport_select".
So, das ist nun ordentlich!
Mfg,
Destroyer446
|
|
|
 |
Similar Threads
|
Quest mit MySQL-Abfrage
01/14/2013 - Metin2 Private Server - 2 Replies
Wie man aus der Überschrift schon entnehmen kann, hab ich eine Frage zu Quests und zwar: Wenn ich mit os.execute arbeite, lässt sich damit etwas aus der Datenbank abfragen, weil updaten kann man ja die db, aber eben das abfragen.
Ich würde mich über konstruktive Antworten freuen.
|
Quest q.set_clock abfrage
11/25/2012 - Metin2 Private Server - 5 Replies
Hallo
wollte mal fragen wenn ich in einer Quest es so schreibe bzw setze:
q.set_clock(get_time() + 60*30)
wollte ich gerne wissen wie ich abfragen kann ob die Zeit abgelaufen ist oda ob der Spieler noch Zeit hat.
|
[RLS]Spieler Online Abfrage-Quest
10/27/2012 - Metin2 PServer Guides & Strategies - 28 Replies
Kurz und knapp will nichts großartiges ausspucken, ist ne simple quest und fertig.
Mit der Quest könnt ihr vereinzelnt spieler abrufen ob diese Online sind,
allerdings funktioniert das nur in ein und demselben Channel mit dieser
Quest ^^ gäbe auch noch eine andere möglichkeit wo es in allen Channeln
funktioniert ^^ aber keine lust euch was in den popo zu schieben :)
schlaue wissen ja vllt wie ^^ *hust* flags *hust*
quest find_online_player begin
state start begin
|
Zeit abfrage in Quest
09/25/2012 - Metin2 Private Server - 8 Replies
hallo
ich habe ein problem mit meiner DC quest undzwar wenn ich denn run 1 mal absolviert habe und er die Zeit bis ich das nächstemal den Run machen kann mit dem Befehl:
local nextTime=get_time()+time_min_to_sec(30)
d.setqf("__NEXT_TIME__", nextTime)
auf 30 Minuten setzt und ich danach den Typen da bequatsche sagt er mir immer das normal aber die abfrage wie lange ich warte muss ist nicht da:
die sieht so aus:
say("Du musst noch "..next_time_minutes().." warten ...")
unten ist noch ein...
|
Quest abfrage
05/02/2012 - Flyff Private Server - 2 Replies
'Heyho EPvpers,
Ich denke diese Frage könnte für mehrere interessant sein.
Ich brauche für einen neuen Npc den ich erstellt habe einen Questverlauf, dass heißt, er soll erst 'Quest1' dann 'Quest2' und so weiter machen.
Nun meine Frage, kann man in der Quest.txt das so einprogrammieren, dass er abfragt, wurde der Quest1 beendet? Ja, dann kann er Quest2 anbieten, Nein, dann wird der Quest2 gar nicht erst angezeigt, quasi wie den Quests, die mit Levelunterschreitung auch nicht angezeigt...
|
All times are GMT +1. The time now is 17:35.
|
|