Run kérdés!

Indította Deadly2000, 2017-02-20, 10:27:11

Eddig nem nagyon foglalkoztam a runokkal , viszont most belekezdtem egy questbe ami működik is minden egy ideig viszont

when login with pc.in_dungeon() and pc.get_map_index() >= 1140000 and pc.get_map_index() < 1150000 begin

Ezt hogy tudom meghatározni mettől meddig ?
Beállok az egyik sarkába a mapnak és a state adatot beleírom ?

2017-02-20, 12:21:01 #1 Utolsó szerkesztés: 2017-02-20, 12:23:06 Szerző: Step
Az a mapindex.
Idézand pc.get_map_index() >= 1140000 and pc.get_map_index() < 1150000
Ezek a nullákok meg azért vannak mivel a run kioszt egy mapid-t 1140000-1149999 között (lásd nagyobb vagy egyenlő és kisebb mint) mivel a run mappon lehetnek benn 500-an de nem látják egymást (csak ha Te ezt meg nem csinálod) mivel minden játékosnak||csoportnak kioszt egy mapid-t a másik csoportnak meg megint egy másikat így lehet ezzel egyéni farmmapot gyártani.
Ennél egyszerűbben tán' le sem lehet írni.

Szóval meghatározni úgy tudod, hogy mapindex*10000 - mapindex +1
Példa:
mapindex legyen 69! (mert én azt mondtam azé')
Akkor 690000 és 699999 -között lesz valahol a mapindex amin a játékos tartózkodik.
Tehát ahhoz hogy megtudd, hogy a player jó helyen jár-e kell ellenőrizned hogy dándzsönbe van-e:
pc.in_dungeon()

kell a mapindex lekérdezése 2x (legkisebb, legnagyobb érték):
pc.get_map_index()

ÉS akkor kellenek a relációk:
>= nagyobb vagy egyenlő
< kisebb mint
és akkor egészbe
if pc.in_dungeon() and pc.get_map_index() >= 690000 and pc.get_map_index() < 700000 begin

2017-02-20, 12:41:41 #2 Utolsó szerkesztés: 2017-02-20, 13:05:35 Szerző: Deadly2000
A lehető legtökéletesebben megértettem , és köszönöm ;)

Üzenet összefésülés: 2017-02-20, 13:03:05

Nagy lendülettel nekiálltam , és kudarc ...

Ahogy bedob a when login már nem fut le ..
A map index 200


when login with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
if pc.getqf("farmmap1")==0 then
timer("kill2",60*60)
pc.setqf("indulasi_ido", get_time())
pc_setqf("timer",2)
say_title(""..mob_name(33001).."")
pc.setqf("farmmap1", 1)
say_reward("Jólvan, 60 perced van összesen")
say_reward("Jó farmolást")
say("")
say_reward("Szerezz minél több yangot és tárgyat")
say_reward("Mert az ido hamar lejár!")
say("")
say("Sok szerencsét!")
say("")
say("")
say("")
say("")
else
local maradek_ido = 60*60 - pc.getqf("elhasznalt_ido")
chat("Még "..string.format("%.2f", maradek_ido * pc.getqf("timer")/60).." perced maradt.")
if pc.getqf("timer") == 1 then
timer("kill2",maradek_ido)
else
timer("kill",maradek_ido)
end
end
end


Üzenet összefésülés: 2017-02-20, 13:05:35

BTW
Az egész quest így néz ki

quest farmbelepo begin
state start begin
when 20094.chat."Farm map(GM)" with pc.is_gm() begin
say_title("npc: ")
say("")
local s = select("Megnyitom", "Lezárom", "Csak belépek", "Mégse")
if s == 4 then
return
elseif s == 3 then
d.new_jump(200, 1019681, 1009704)
elseif s == 1 then
if game.get_event_flag("farm") == 0 then
game.set_event_flag("farm", 1)
notice_all("<RENDSZER>Farm map megnyitotta kapuit!")
else
say_title("Npc: ")
say("")
say("Jelenleg megvan már nyitva.")
return
end
else
if game.get_event_flag("farm") == 1 then
game.set_event_flag("farm", 0)
notice_all("<RENDSZER>Farm map jelenleg lezárva")
else
say_title("Npc: ")
say("")
say("Jelenleg le van már zárva.")
return
end
end
end
when 20094.chat."Farm map" begin
if game.get_event_flag("farm") == 1 then
say("Be tudlak ám vinni oda,")
say("De csak egy Farm belépoért cserébe!")
say("")
say_item_vnum(70101)
say("")
say_reward("Biztos be szeretnél menni?")
say("")
local join=select("Igen","Nem","Hogy juthatok be oda")
if join==3 then
say("Egy Farm belépoért cserébe beviszlek.")
say("Ott bent 60 perced van összesen!")
say("Jól használd ki az idôd, mivel minden")
say("perc számít!")
say("")
say("Majd nem elfelejtettem közölni, hogy az")
say("egész mapon nem fog téged senki se")
say("zavarni a farmolásban, hiszen egyedül leszel")
say("az egész mapon.")
say_item_vnum(70101)
return
end
if join==2 then
return
end
if join==1 then
if pc.countitem(70101)<1 then
say_reward("Nincs Farm belépod!")
say_item_vnum(70101)
return
end
if pc.countitem(70101)>0 then
pc.removeitem(70101, 1)
d.new_jump(200, 1019681, 1009704)
d.regen_file( "data/dungeon/farmmap50.txt" )
end
end
end
if game.get_event_flag("farm") == 0 then
say_reward("A Farm map, jelenleg zárva van!")
return
end
end
when login with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
if pc.getqf("farmmap1")==0 then
timer("kill2",60*60)
pc.setqf("indulasi_ido", get_time())
pc_setqf("timer",2)
say_title(""..mob_name(33001).."")
pc.setqf("farmmap1", 1)
say_reward("Jólvan, 60 perced van összesen")
say_reward("Jó farmolást")
say("")
say_reward("Szerezz minél több yangot és tárgyat")
say_reward("Mert az ido hamar lejár!")
say("")
say("Sok szerencsét!")
say("")
say("")
say("")
say("")
else
local maradek_ido = 60*60 - pc.getqf("elhasznalt_ido")
chat("Még "..string.format("%.2f", maradek_ido * pc.getqf("timer")/60).." perced maradt.")
if pc.getqf("timer") == 1 then
timer("kill2",maradek_ido)
else
timer("kill",maradek_ido)
end
end
end
when logout with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
local elhasznalt_masodperc = (get_time()-pc.getqf("indulasi_ido"))
pc.setqf("elhasznalt_ido",elhasznalt_masodperc)
end
when kill.timer with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
d.notice("30 perced maradt!")
         timer("kill2",60*30)
         pc.setqf("timer",1)
end
when kill2.timer with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
d.notice("Lejárt az idod!")
pc.setqf("farmmap1", 0)
warp_to_village();
end
when 20094.use begin
if pc.get_map_index() != 200 then
say_reward("A Farm mapra való belépéshez kell ez a tárgy.")
say("")
say_reward("Keresd fel Ali babát, o talán segít!")
return
end
end
end
end

2017-02-20, 20:19:13 #3 Utolsó szerkesztés: 2017-02-20, 20:44:31 Szerző: Step
when login with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
alapból 2010000 kellett volna mivel < ez azt jelenti hogy kisebb mint tehát a 2009999 már nem játszik, csak 2009998-ig nézi.
de ha 2010000-et írsz akkor éppen 2009999-ig "számolja" nem tudom ezt rendesen megfogalmazni most. az hogy hol bukik el a quest azt nem fogom megnézni nem rég értem haza és szivacs az agyam.
De először valami eccerű'-vel probálkozz és amikor az működik kezd el hozzáírni a dolgokat, aztán utána tudni fogod mi nem működik.

2017-02-20, 20:42:46 #4 Utolsó szerkesztés: 2017-02-20, 20:44:45 Szerző: Red
Van egy ilyen rész:
end
end
end
if game.get_event_flag("farm") == 0 then
say_reward("A Farm map, jelenleg zárva van!")
return
end
end



Cseréld erre:
end
end
else
say_reward("A Farm map, jelenleg zárva van!")
return
end
end


Az indexeknél én így írnám:

with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2010000 begin

én teszteltem müködik.

Véglegesen így néz ki .
quest farmbelepo begin
state start begin
when 20094.chat."Farm map(GM)" with pc.is_gm() begin
say_title("npc: ")
say("")
local s = select("Megnyitom", "Lezárom", "Csak belépek", "Mégse")
if s == 4 then
return
elseif s == 3 then
d.new_jump(200, 1019681, 1009704)
elseif s == 1 then
if game.get_event_flag("farm") == 0 then
game.set_event_flag("farm", 1)
notice_all("<RENDSZER>Farm map megnyitotta kapuit!")
else
say_title("Npc: ")
say("")
say("Jelenleg megvan már nyitva.")
return
end
else
if game.get_event_flag("farm") == 1 then
game.set_event_flag("farm", 0)
notice_all("<RENDSZER>Farm map jelenleg lezárva")
else
say_title("Npc: ")
say("")
say("Jelenleg le van már zárva.")
return
end
end
end
when 20094.chat."Farm map" begin
if game.get_event_flag("farm") == 1 then
say("Be tudlak ám vinni oda,")
say("De csak egy Farm belépoért cserébe!")
say("")
say_item_vnum(70101)
say("")
say_reward("Biztos be szeretnél menni?")
say("")
local join=select("Igen","Nem","Hogy juthatok be oda")
if join==3 then
say("Egy Farm belépoért cserébe beviszlek.")
say("Ott bent 60 perced van összesen!")
say("Jól használd ki az idôd, mivel minden")
say("perc számít!")
say("")
say("Majd nem elfelejtettem közölni, hogy az")
say("egész mapon nem fog téged senki se")
say("zavarni a farmolásban, hiszen egyedül leszel")
say("az egész mapon.")
say_item_vnum(70101)
return
end
if join==2 then
return
end
if join==1 then
if pc.countitem(70101)<1 then
say_reward("Nincs Farm belépod!")
say_item_vnum(70101)
return
end
if pc.countitem(70101)>0 then
pc.removeitem(70101, 1)
d.new_jump(200, 1019681, 1009704)
d.regen_file( "data/dungeon/farmmap50.txt" )
end
end
else
say_reward("A Farm map, jelenleg zárva van!")
return
end
end
when login with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2010000 begin
if pc.getqf("farmmap1")==0 then
timer("kill2",60*60)
pc.setqf("indulasi_ido", get_time())
pc_setqf("timer",2)
say_title(""..mob_name(33001).."")
pc.setqf("farmmap1", 1)
say_reward("Jólvan, 60 perced van összesen")
say_reward("Jó farmolást")
say("")
say_reward("Szerezz minél több yangot és tárgyat")
say_reward("Mert az ido hamar lejár!")
say("")
say("Sok szerencsét!")
say("")
say("")
say("")
say("")
else
local maradek_ido = 60*60 - pc.getqf("elhasznalt_ido")
chat("Még "..string.format("%.2f", maradek_ido * pc.getqf("timer")/60).." perced maradt.")
if pc.getqf("timer") == 1 then
timer("kill2",maradek_ido)
else
timer("kill",maradek_ido)
end
end
end
when logout with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2010000 begin
local elhasznalt_masodperc = (get_time()-pc.getqf("indulasi_ido"))
pc.setqf("elhasznalt_ido",elhasznalt_masodperc)
end
when kill.timer with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2010000 begin
d.notice("30 perced maradt!")
         timer("kill2",60*30)
         pc.setqf("timer",1)
end
when kill2.timer with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2010000 begin
d.notice("Lejárt az idod!")
pc.setqf("farmmap1", 0)
warp_to_village();
end
when 20094.use begin
if pc.get_map_index() != 200 then
say_reward("A Farm mapra való belépéshez kell ez a tárgy.")
say("")
say_reward("Keresd fel Ali babát, o talán segít!")
return
end
end
end
end


Viszont kapok egy szép üzenetet a pc.setqf végett.

attempt to call global `pc_setqf' (a nil value)

én quest_functions beirtam és tökéletesen fut

Idézetet írta: bakos1992 Dátum 2017-02-22, 14:50:22
én quest_functions beirtam és tökéletesen fut

Ha nem írtam volna bele akkor alapból le sem futott volna a quest,  a szerverfájlomba ( forrás ) -ban nincs meghatározva m iaz  tudtommal.

Ezt beleírtad a quest_functions fájlba?

pc_setqf

pc_setqf("timer",2)
Az nem pc.setqf?

Kipróbáltam nálam lefut a quest csak hiányzik neki egy funkció ennyi.

[spoiler]quest farmbelepo begin
state start begin
when 20094.chat."Farm map(GM)" with pc.is_gm() begin
say_title("npc: ")
say("")
local s = select("Megnyitom", "Lezárom", "Csak belépek", "Mégse")
if s == 4 then
return
elseif s == 3 then
d.new_jump(200, 1019681, 1009704)
elseif s == 1 then
if game.get_event_flag("farm") == 0 then
game.set_event_flag("farm", 1)
notice_all("<RENDSZER>Farm map megnyitotta kapuit!")
else
say_title("Npc: ")
say("")
say("Jelenleg megvan már nyitva.")
return
end
else
if game.get_event_flag("farm") == 1 then
game.set_event_flag("farm", 0)
notice_all("<RENDSZER>Farm map jelenleg lezárva")
else
say_title("Npc: ")
say("")
say("Jelenleg le van már zárva.")
return
end
end
end
when 20094.chat."Farm map" begin
if game.get_event_flag("farm") == 1 then
say("Be tudlak ám vinni oda,")
say("De csak egy Farm belépoért cserébe!")
say("")
say_item_vnum(70101)
say("")
say_reward("Biztos be szeretnél menni?")
say("")
local join=select("Igen","Nem","Hogy juthatok be oda")
if join==3 then
say("Egy Farm belépoért cserébe beviszlek.")
say("Ott bent 60 perced van összesen!")
say("Jól használd ki az idôd, mivel minden")
say("perc számít!")
say("")
say("Majd nem elfelejtettem közölni, hogy az")
say("egész mapon nem fog téged senki se")
say("zavarni a farmolásban, hiszen egyedül leszel")
say("az egész mapon.")
say_item_vnum(70101)
return
end
if join==2 then
return
end
if join==1 then
if pc.countitem(70101)<1 then
say_reward("Nincs Farm belépod!")
say_item_vnum(70101)
return
end
if pc.countitem(70101)>0 then
pc.removeitem(70101, 1)
d.new_jump(200, 1019681, 1009704)
d.regen_file( "data/dungeon/farmmap50.txt" )
end
end
else
say_reward("A Farm map, jelenleg zárva van!")
return
end
end
when login with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
if pc.getqf("farmmap1")==0 then
timer("kill2",60*60)
pc.setqf("indulasi_ido", get_time())
pc_setqf("timer",2)
say_title(""..mob_name(33001).."")
pc.setqf("farmmap1", 1)
say_reward("Jólvan, 60 perced van összesen")
say_reward("Jó farmolást")
say("")
say_reward("Szerezz minél több yangot és tárgyat")
say_reward("Mert az ido hamar lejár!")
say("")
say("Sok szerencsét!")
say("")
say("")
say("")
say("")
else
local maradek_ido = 60*60 - pc.getqf("elhasznalt_ido")
chat("Még "..string.format("%.2f", maradek_ido * pc.getqf("timer")/60).." perced maradt.")
if pc.getqf("timer") == 1 then
timer("kill2",maradek_ido)
else
timer("kill",maradek_ido)
end
end
end
when logout with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
local elhasznalt_masodperc = (get_time()-pc.getqf("indulasi_ido"))
pc.setqf("elhasznalt_ido",elhasznalt_masodperc)
end
when kill.timer with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
d.notice("30 perced maradt!")
         timer("kill2",60*30)
         pc.setqf("timer",1)
end
when kill2.timer with pc.in_dungeon() and pc.get_map_index() >= 2000000 and pc.get_map_index() < 2009999 begin
d.notice("Lejárt az idod!")
pc.setqf("farmmap1", 0)
warp_to_village();
end
when 20094.use begin
if pc.get_map_index() != 200 then
say_reward("A Farm mapra való belépéshez kell ez a tárgy.")
say("")
say_reward("Keresd fel Ali babát, o talán segít!")
return
end
end
end
end
[/spoiler]

Észre se vettem , valóban.. ! Köszönöm !!