Dies würde eine entsprechende Funktion voraussetzen, standardmäßig ist lediglich eine Funktion zum Setzen von Boni (item.set_value()) enthalten.Quote:
Hallo,
ich suche eine Quest mit der ich die Bonis eines Items auslesen kann.
Sprich, Item wird per Trigger eingelesen und die Bonis werden ausgegeben.
Danke :)
Inwiefern automatisch? Du müsstest die Option dann in der jeweiligen Quest, an beliebiger Stelle aktivieren, ließe sich bspw. leicht durch Quest Flags lösen.Quote:
Hallo.
ich suche/brauche eine etwas kompliziertere Quest... Wäre schön wenn mir da einer helfen kann :)
Also ich habe einen Warpring:
der von Anfang an eine Warpfunktion hat / Reich1 oder Reich2 jenachdem in welchem Reich ich spawne (Gelb oder Blau).
Sobald ich eine Quest erledige beispielsweiße Map2 soll dieser Warpring Automatisch die Warpfunktion bekommen damit man sich direkt auf Map2 porten kann das ganze brauche ich. 8 mal in diesem Warpring..
Funktioniert sowas?
Hoffe konnte es halbwegs verständlich rüberbringen..
Quote:
Inwiefern automatisch? Du müsstest die Option dann in der jeweiligen Quest, an beliebiger Stelle aktivieren, ließe sich bspw. leicht durch Quest Flags lösen.
Quote:
Hallo.
ich suche/brauche eine etwas kompliziertere Quest... Wäre schön wenn mir da einer helfen kann :)
Also ich habe einen Warpring:
der von Anfang an eine Warpfunktion hat / Reich1 oder Reich2 jenachdem in welchem Reich ich spawne (Gelb oder Blau).
Sobald ich eine Quest erledige beispielsweiße Map2 soll dieser Warpring Automatisch die Warpfunktion bekommen damit man sich direkt auf Map2 porten kann das ganze brauche ich. 8 mal in diesem Warpring..
Funktioniert sowas?
Hoffe konnte es halbwegs verständlich rüberbringen..
define WARPRING_VNUM 12345
quest warpring begin
state start begin
when WARPRING_VNUM.use begin
warpTable = warpTable or {
{
name = "Map 1",
children = {
{
name = "Rotes Reich",
warp = {1, 100, 200},
},
{
name = "Blaues Reich",
warp = {2, 100, 200},
},
{
name = "Gelbes Reich",
warp = {3, 100, 200},
},
},
},
{
name = "Maps mit Bedingungen",
condition = warpring.minLevel(30),
children = {
{
name = "Map mit besonderer Bedingung 1",
conditions = {
warpring.hasFlag("anyquest", "boss_killed"),
warpring.maxLevel(90),
},
warp = {4, 100, 200},
},
},
},
}
warpring.showWarps({name = "Warpring", children = warpTable}, 0)
end
function showWarps(entry, stackCount)
if stackCount >= 100 then
say("Die Auswahl wurde aus Sicherheitsgründen beendet.")
return
end
local selectNames = {}
local selectTargets = {}
for _, warp in ipairs(entry.children) do
if warpring.checkConditions(warp) then
table.insert(selectNames, warp.name)
table.insert(selectTargets, warp)
end
end
local BACK = "Zurück"
local CANCEL = "Schließen"
if entry.parent then
table.insert(selectNames, BACK)
end
table.insert(selectNames, CANCEL)
say_title(entry.name)
if table.getn(selectTargets) < 1 then
say("Keine Zielorte zum Auswählen")
end
local selectedNum = select_table(selectNames)
local selectedTarget = selectTargets[selectedNum]
if selectedTarget then
if selectedTarget.children then
selectedTarget.parent = entry
warpring.showWarps(selectedTarget, stackCount + 1)
elseif selectedTarget.warp then
pc.warp(unpack(selectedTarget.warp))
else
say("Keine Informationen zu diesem Punkt.")
end
else
local selectedStr = selectNames[selectedNum]
if selectedStr == BACK and entry.parent then
warpring.showWarps(entry.parent, stackCount + 1)
end
end
end
function checkConditions(entry)
if entry.condition and not entry.condition() then
return false
end
if entry.conditions then
for _, condition in ipairs(entry.conditions) do
if not condition() then
return false
end
end
end
return true
end
function minLevel(value)
return function()
return pc.get_level() >= value
end
end
function maxLevel(value)
return function()
return pc.get_level() <= value
end
end
function hasFlag(questName, flagName)
return function()
return pc.getf(questName, flagName) == 1
end
end
end
end
2 Posts über dir steht eine Warpquest von Sensi..Quote:
Kann mir jemand helfen quest zu schreiben für warpring
{"Map1 Rot", 474100, 955000},
{"Map1 Gelb", 63525, 166543},
{"Map1 Blau", 960100, 268800},
{“PvP Map", 960100, 268800},
{"Land der Elemente", 828300", 763500},
{"Boss Map(50)", 1059000", 726200},
{"Metin Map 1(25)", 0,0},(leerer Drachenraum)
{"Metin Map 2(50)", 0, 0},(OrkTal)
{"Metin Map 3(75)", 960100, 268800},
{"Wüste",297300", 547900},
{"Tal von Seungryong"333074", 747167},
{"Berg Sohan ", 436900", 216100},
{"Roter Wald",1119323", 7952},
{"Spinnendungeon 1",60000", 497000},
{"Spinnendungeon 2",97649", 571124},
{"Spinnendungeon(Boss)",97649", 571124},
{"Grotte 1",10000", 1207800},
{"Grotte 2",241800", 1275000},
{"Grotte 3(Boss)",181473", 1220674},
{"Dämonenturm(Boss)",590406", 110717},
{"Dunkler Wald (75-125)", 960100, 268800},
{"Tempel des Schwert( 110)", 960100, 268800},
{"Land der Todes (115)", 960100, 268800},
{"Glutberge (125)", 960100", 268800},
23.1 Reihenfolge
Reiche
PvP-Map
Land der Elemente (50)
Boss-Map (50)
Wüste
Tal von Seungryong
Berg Sohan
Roter Wald
Metin-Map 1
Metin-Map 2
Metin-Map 3
Spinnendungeon 1
Spinnendungeon 2
Spinnendungeon (Boss)
Quote:
Sollte so klappenCode:define WARPRING_VNUM 12345 quest warpring begin state start begin when WARPRING_VNUM.use begin warpTable = warpTable or { { name = "Map 1", children = { { name = "Rotes Reich", warp = {1, 100, 200}, }, { name = "Blaues Reich", warp = {2, 100, 200}, }, { name = "Gelbes Reich", warp = {3, 100, 200}, }, }, }, { name = "Maps mit Bedingungen", condition = warpring.minLevel(30), children = { { name = "Map mit besonderer Bedingung 1", conditions = { warpring.hasFlag("anyquest", "boss_killed"), warpring.maxLevel(90), }, warp = {4, 100, 200}, }, }, }, } warpring.showWarps({name = "Warpring", children = warpTable}, 0) end function showWarps(entry, stackCount) if stackCount >= 100 then say("Die Auswahl wurde aus Sicherheitsgründen beendet.") return end local selectNames = {} local selectTargets = {} for _, warp in ipairs(entry.children) do if warpring.checkConditions(warp) then table.insert(selectNames, warp.name) table.insert(selectTargets, warp) end end local BACK = "Zurück" local CANCEL = "Schließen" if entry.parent then table.insert(selectNames, BACK) end table.insert(selectNames, CANCEL) say_title(entry.name) if table.getn(selectTargets) < 1 then say("Keine Zielorte zum Auswählen") end local selectedNum = select_table(selectNames) local selectedTarget = selectTargets[selectedNum] if selectedTarget then if selectedTarget.children then selectedTarget.parent = entry warpring.showWarps(selectedTarget, stackCount + 1) elseif selectedTarget.warp then pc.warp(unpack(selectedTarget.warp)) else say("Keine Informationen zu diesem Punkt.") end else local selectedStr = selectNames[selectedNum] if selectedStr == BACK and entry.parent then warpring.showWarps(entry.parent, stackCount + 1) end end end function checkConditions(entry) if entry.condition and not entry.condition() then return false end if entry.conditions then for _, condition in ipairs(entry.conditions) do if not condition() then return false end end end return true end function minLevel(value) return function() return pc.get_level() >= value end end function maxLevel(value) return function() return pc.get_level() <= value end end function hasFlag(questName, flagName) return function() return pc.getf(questName, flagName) == 1 end end end end
quest horse_getting begin
state start begin
when login begin
send_letter("Der Stallbursche braucht Hilfe!") (brief von lv. 1- lv. 10)
end
when button or info begin
say_title("Ich brauche dringend Hilfe "..pc.get_name())
say("Ich war letztens auf einer Fortbildung.")
say("Auf dem Rueckweg ist mir meine Tasche gerissen")
say("und habe ein paar meiner Medailen verloren.")
say_item_vnum(50050)
say("Geh und bringe mir bitte 10 dieser Medailen wieder")
say("wenn du hier dein 10. Lebensjahr erreicht hast.")
set_state(weiter)
end
end
state weiter begin
when login or levelup with pc.get_level()>=10 begin (der Brief kommt erst ab lvl 10
send_letter("Geh zum Stallburschen") und 10 gesammelten pms mit
end pfeil über stallbursche)
when button or info begin
say_title("Der Stallbursche erwartet dich")
say("Geh und guck was er von dir will")
end (als nächstes beim Stallbursche wo man
end die pms abgibt, ne kleine summe yang
end
Quote:
Moin elitepvpers
Bin gerade dabei mir ne pferdequest zu schreiben und brauche mal eure hilfe
und dann bekommt man sein pferd)PHP Code:quest horse_getting begin
state start begin
when login begin
send_letter("Der Stallbursche braucht Hilfe!") (brief von lv. 1- lv. 10)
end
when button or info begin
say_title("Ich brauche dringend Hilfe "..pc.get_name())
say("Ich war letztens auf einer Fortbildung.")
say("Auf dem Rueckweg ist mir meine Tasche gerissen")
say("und habe ein paar meiner Medailen verloren.")
say_item_vnum(50050)
say("Geh und bringe mir bitte 10 dieser Medailen wieder")
say("wenn du hier dein 10. Lebensjahr erreicht hast.")
set_state(weiter)
end
end
state weiter begin
when login or levelup with pc.get_level()>=10 begin (der Brief kommt erst ab lvl 10
send_letter("Geh zum Stallburschen") und 10 gesammelten pms mit
end pfeil über stallbursche)
when button or info begin
say_title("Der Stallbursche erwartet dich")
say("Geh und guck was er von dir will")
end (als nächstes beim Stallbursche wo man
end die pms abgibt, ne kleine summe yang
end
Wenn man sich einloggt kommt ein Quest-Brief der auffordert lvl 10 zu erreichen und 10 Pferdemedailen zu sammeln > Wenn man dies erreicht hat soll ein 2. Brief aufploppen mit dem Pfeil über dem Stallburschen (Wie bei der quest lvl 5 "Die Ausbildung") Dann geht man dahin und holt sein Pferd ab..
Habe mir das Quest-Schreiben gerade selber beigebracht.
Meine Frage: > sind die states richtig gesetzt? Ich möchte den State setzen wenn er lvl 10 und die 10 pms hat und nicht wenn ich die quest angeklickt habe, nach einem login ist die quest weg und kommt nicht wieder....Und wie bringe ich die restlichen sachen die ich beschrieben habe unter? Kann mir einer helfen die Quest zu überarbeiten?
define NPC_VNUM 12345
define ITEM_VNUM 50050
define ITEM_COUNT 10
define MIN_LEVEL 10
quest horse_getting begin
state start begin
when login begin
if pc.get_level() >= MIN_LEVEL and pc.count_item(ITEM_VNUM) >= ITEM_COUNT and pc.getqf("letterRead") == 1 then
set_state("training1")
return
end
send_letter("Der Stallbursche braucht Hilfe!")
end
when button or info begin
say_title("Ich brauche dringend Hilfe " .. pc.get_name())
say("Ich war letztens auf einer Fortbildung.")
say("Auf dem Rueckweg ist mir meine Tasche gerissen")
say("und habe ein paar meiner Medailen verloren.")
say_item_vnum(ITEM_VNUM)
say(string.format("Geh und bringe mir bitte %d dieser Medailen wieder", ITEM_COUNT))
say(string.format("wenn du hier dein %d. Lebensjahr erreicht hast.", MIN_LEVEL))
pc.setqf("letterRead", 1)
end
when leave begin
clear_letter()
end
end
state training1 begin
when login or enter begin
send_letter("Geh zum Stallburschen")
local vid = find_npc_by_vnum(NPC_VNUM)
if vid ~= 0 then
target.vid("TARGET_HORSE_GETTING", vid, "Gehe zum Stallburschen")
end
end
when button or info begin
say_title("Der Stallbursche erwartet dich")
say("Geh und guck was er von dir will")
end
when TARGET_HORSE_GETTING.target.click begin
if pc.count_item(ITEM_VNUM) < ITEM_COUNT then
say("Du hast nicht die benötigte Anzahl an Items.")
return
end
pc.remove_item(ITEM_VNUM, ITEM_COUNT)
horset.set_level(10)
set_state("training2")
say("Dein Pferd ist nun Level 10")
end
when leave begin
clear_letter()
end
end
state training2 begin
end
end
quest horse_getting begin
state start begin
when login begin
if pc.get_level()>=10 and pc.count_item(50050)>=10 and pc.getqf("letterRead")==1 then
set_state(anfang)
return
end
send_letter("Der Stallbursche braucht Hilfe!")
end
when button or info begin
say_title("Ich brauche dringend Hilfe "..pc.get_name())
say("Ich war letztens auf einer Fortbildung.")
say("Auf dem Rueckweg ist mir meine Tasche gerissen")
say("und habe ein paar meiner Medailen verloren.")
say_item_vnum(50050)
say(string.format("Geh und bringe mir bitte %d dieser Medailen wieder", 10))
say(string.format("wenn du hier dein %d. Lebensjahr erreicht hast.", 10))
pc.setqf("letterRead", 1)
end
end
state anfang begin
when login or enter begin
send_letter("Geh zum Stallburschen")
local vid = find_npc_by_vnum(20349)
if vid ~= 0 then
target.vid("TARGET_HORSE_GETTING", vid, "gehe zum Stallburschen")
end
end
when button or info begin
say_title("Der Stallbursche erwartet dich")
say("Geh und guck was er von dir will")
end
when TARGET_HORSE_GETTING.target.click begin
if pc.count_item(50050)<=9 then
say("Komme wieder wenn du 10 meiner Medailen hast")
return
end
pc.remove_item(50050, 10)
pc.give_item2(50051, 1)
pc.set_skill_level(131, 10)
horse.set_level(1)
horse.summon()
horse.ride()
say("Heey nicht so schnell das Ding hat")
say("mich viel Arbeit gekostet.")
set_state(ende)
end
end
state ende begin
end
end
[TABLE]quest warpring begin
state start begin
when 70007.use or 9012.chat.gameforge.map_warp._10_npcChat or 20009.chat.gameforge.neutral_warp._10_npcChat begin
local warp = {--koord Pflicht, rest optional!
{--Reiche
name = "Map 1",
{--Rotes Reich
name = "Rotes Reich Map 1",
koord = {474100, 955000},
},
{--Gelbes Reich
name = "Gelbes Reich Map 1",
koord = {63525, 166543},
},
{--Blaues Reich
name = "Blaues Reich Map 1",
koord = {960100, 268800},
},
{--Rotes Reich Map 2
name = "Rotes Reich Map 2",
koord = {352200, 882200},
},
{--Gelbes Reich Map 2
name = "Gelbes Reich Map 2",
koord = {145900, 239800},
},
{--Blaues Reich Map 2
name = "Blaues Reich Map 2",
koord = {863700, 246300},
},
{--PvP_Map
name = "PvP_Map 1",
koord = {0, 0},
},
{--Land der Riesen
name = "Land der Elemente (50)",
koord = {828300, 763500},
},
{--Boss Map
name = "Boss-Map (50)",
koord = {1059000, 726200},
},
{--Metin Map 1
name = "Metin Map 1",
koord = {0, 0},
},
{--Metin Map 2
name = "Metin Map 2",
koord = {0, 0},
},
{--Metin Map 3
name = "Metin Map 3",
koord = {960100, 268800},
},
{--Wüste
name = "Wüste (Mitte)",
koord = {297300, 547900},
},
{--Tal_von_Seungryong
name = "Tal_von_Seungryong",
koord = {333074, 747167},
},
{--Eisland Mitte
name = "Eisland",
koord = {436900, 216100},
},
{--Roter Wald
name = "Roter Wald",
koord = {1119323, 7952},
},
{--Spinnendungeons 1
name = "SD1",
koord = {60000, 497000},
},
{--Spinnendungeons 2
name = "SD2",
koord = {703800, 462500},
},
{--Spinnendungeons (Boss)
name = "SD3 (Boss)",
koord = {69018, 609960},
},
{--Grotte 1
name = "Grotte 1",
koord = {10000, 1207800},
},
{--Grotte 2
name = "Grotte 2",
koord = {241800, 1275000},
},
{--Grotte (Boss)
name = "Drachenkammer (Boss)",
koord = {181473, 1220674},
},
{--EisFestung (Boss)
name = "Eisfestung (Boss)",
koord = {0, 0},
},
{--Dämonenturm (Boss)
name = "Dämonenturm (Boss)",
koord = {590406, 110717},
},
{--Dunkler Wald (75-125)
name = "Dunkler Wald (75-125)",
koord = {960100, 268800},
},
{--Tempel des Schwert (110)
name = "Tempel des Schwert (110)",
koord = {960100, 268800},
},
{--Land der Todes (115)
name = "Land der Todes (115)",
koord = {960100, 268800},
}",
{--Glutberge (125)
name = "Glutberge (125)",
koord = {960100, 268800},
},
warpring.sho
warpring.showwarps(warp)
end
function warp(tbl)
local level = pc.get_level()
if tbl.minlevel and level < tbl.minlevel then
say("Dein Level ist zu niedrig, um diese Map zu betreten.")
say("Minimal Level: "..tbl.minlevel)
select("Abbrechen")
return
elseif tbl.maxlevel and level > tbl.maxlevel then
say("Dein Level ist zu hoch, um diese Map zu betreten.")
say("Maximal Level: "..tbl.maxlevel)
select("Abbrechen")
return
end
while not pc.can_warp() do
say("Du kannst dich noch nicht teleportieren, da du in")
say("den letzten 10 Sekunden gehandelt hast.")
if select("Erneut versuchen", "Abbrechen") == 2 then return end
end
local warpneedstrings = warpring.get_warpneedstrings(tbl)
if table.getn(warpneedstrings) > 0 then
say("Um diese Map zu betreten benötigst du folgende")
say("Dinge:")
for _,v in ipairs(warpneedstrings) do
say(v)
end
say("")
say("Möchtest du trotzdem fortfahren?")
if select("Teleportieren", "Abbrechen") == 2 then return end
end
if not warpring.check_and_remove_warpneeds(tbl) then
say("Dir fehlt mindestens eins der benötigten Dinge.")
select("Abbrechen")
return
end
pc.warp(tbl.koord[1], tbl.koord[2])
end
function get_warpneedstrings(tbl)
local warpneeds = {}
if tbl.itemneed and table.getn(tbl.itemneed) > 0 then
for _,v in ipairs(tbl.itemneed) do
table.insert(warpneeds, "- "..v[2].."x "..item_name(v[1]))
end
end
if tbl.goldneed and tbl.goldneed > 0 then
table.insert(warpneeds, "- "..tbl.goldneed.." Yang")
end
return warpneeds
end
function check_warpneeds(tbl)
if tbl.itemneed and table.getn(tbl.itemneed) > 0 then
for _,v in ipairs(tbl.itemneed) do
if pc.count_item(v[1]) < v[2] then
return false
end
end
end
if tbl.goldneed and tbl.goldneed > 0 then
if pc.get_gold() < tbl.goldneed then
return false
end
end
return true
end
function remove_warpneeds(tbl)
if tbl.itemneed and table.getn(tbl.itemneed) > 0 then
for _,v in ipairs(tbl.itemneed) do
pc.remove_item(v[1], v[2])
end
end
if tbl.goldneed and tbl.goldneed > 0 then
pc.change_gold(-tbl.goldneed)
end
end
function check_and_remove_warpneeds(tbl)
if not warpring.check_warpneeds(tbl) then
return false
end
warpring.remove_warpneeds(tbl)
return true
end
function get_warpnames(tbl)
local level = pc.get_level()
local names = {}
for _,v in ipairs(tbl) do
if v.minlevel and level < v.minlevel then
v.name = v.name.." (ab Lv. "..v.minlevel..")"
elseif v.maxlevel and level > v.maxlevel then
v.name = v.name.." (bis Lv. "..v.maxlevel..")"
end
table.insert(names, v.name)
end
return names
end
function showwarps(tbl)
local warpnames = warpring.get_warpnames(tbl)
local s = tbl[select3(warpnames)] or false
if not s then return end
if s.koord then
warpring.warp(s)
return
end
warpring.showwarps(s)
end
end
end[/TABLE]