[SERVICE] Die Questkontrolle

07/31/2012 20:51 •kяyteя•#6436
Quote:
Originally Posted by [SA]Horny View Post
Wenn ich den Schlüssel abgegeben habe werde ich in die 2 Etage gewarpt sehe sie 1 sek und lande wieder vorm DC.
Was nach dem 1 wait() kommen soll also das

say("Hier beginnt das wahre Abenteuer! Du hast")
say("jedoch nur eine Stunde Zeit, um die Devil's")
say("Catacomb zu erforschen.")
item.remove()

Kommt bei mir gar nicht.

Die Quest

PHP Code:
quest devilscatacomb begin
    state start begin
    
        when logout begin
            pc
.remove_item(30311pc.count_item(30311))
            
pc.remove_item(30312pc.count_item(30312))
            
pc.remove_item(30313pc.count_item(30313))
        
end
        
        
        when login begin
            
if pc.get_map_index() == special.dc_map_index then
                
if devilscatacomb.getLevelByCord() > or not next_time_is_now() then
                
                    pc
.warp((5913)*100, (993)*10065) -- 5913x993  591374x
                    
                end
                
                pc
.set_warp_location(655913993)
                
                
say("Finde den Schlüssel um in die")
                
say("zweite Ebene zu gelangen.")    
                
            elseif 
pc.get_map_index() >= (special.dc_map_index 10000) and pc.get_map_index() <= (special.dc_map_index_2 10000then            
                pc
.set_warp_location(655913993)
            
end
        end
        
        
        when 20367.chat
."In die Teufelshöhle" begin  --Enter the Devil Catacomb
            
if pc.get_level() < 75 then
                say
("Der Zugang wird dir verweigert. Deine Erfahrung")
                
say("reicht noch nicht aus, um in der")
                
say("Devil's Catacomb zu überleben. Komm zurrück,")
                
say("wenn du mindestens Level 75 erreicht hast.")
                    else
                        
say_title(mob_name(npc.get_race()) ..":")
                        
say("")
                        
say("Willst du die Teufelshöhle betreten?")
                        
local s select("Betreten","Nicht betreten.")
                        if 
== 2 then
                            
return
                        elseif 
== 1 then
                            pc
.warp(3153001209200)
                        
end
                    end    
                end    
        
        
        when kill with pc
.get_map_index() == special.dc_map_index and pc.countitem(30311) < 1 begin
            local rnd 
number(1,100)
            if 
rnd == 6 then
                game
.drop_item_with_ownership(303111)
            
end
        end
        
        
        when 30101.take with item
.vnum == 30311 begin --Teleport to 2nd Stage with the passenger ticket
        
            
if party.is_party() then
            
                
if party.is_leader() then
                    say
("Das Eingangsportal wurde geöffnet.")
                    
say("Geh schnell hindurch!")
                    
wait()
                    
say("Hier beginnt das wahre Abenteuer! Du hast")
                    
say("jedoch nur eine Stunde Zeit, um die Devil's")
                    
say("Catacomb zu erforschen.")
                    
item.remove()
                    
sys_log(0"DC create try by "..pc.get_name())
                    
d.join(special.dc_map_index)
                else
                    
say("Nur der Leiter der Gruppe darf bestimmen.")
                
end
                
            
else
                
say("Ohne Gruppe kommst du nicht weiter.")
            
end
            
        end
        
        
        when login with devilscatacomb
.isInCatacomb() begin
            say
("Zerstöre das Siegel dieses Tores, um die 3. Ebene")
            
say("zu erreichen!")
            
say("Du hast noch 60 Minute(n) Zeit.")
            
d.spawn_mob(30103740227)
            
loop_timer("item_check"10)
            if 
party.is_leader() then
                d
.set_regen_file("data/dungeon/dc/dc_regen1.txt")
                
d.regen_file("data/dungeon/dc/dc_doors.txt")
                
d.setf("level"2
                
server_timer("runtime"6pc.get_map_index())
            elseif 
pc.is_gm() and not party.is_party() then
                d
.set_regen_file("data/dungeon/dc/dc_regen1.txt")
                
d.regen_file("data/dungeon/dc/dc_doors.txt")
                
d.setf("level"2)
                
server_timer("runtime"6pc.get_map_index())
            
end
        end
        
        
        when item_check
.timer with d.getf("level") == 3 begin
            
if pc.countitem(30319) >= 1 then
                say
("Du hast den Schrumpfkopf und wirst nun auf die")
                
say("3. Ebene teleportiert.")
                
pc.remove_item(303191)
                
timer("item_check_end"2)
            else
                
d.exit_all()
            
end
        end
        
        
        when item_check_end
.timer begin
            cleartimer
("item_check")
        
end
        
        
        when runtime
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                d
.setf("time"get_time()+60*60*1)
                
devilscatacomb.getTimeLeft()
                
server_timer("runtime_end"60*60get_server_timer_arg())
            
end
        end
        
        
        when runtime_end
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                d
.notice("Die Zeit ist um.")
                
d.exit_all()
            
end
        end

        
        when 30103.click with devilscatacomb
.isInCatacomb() and devilscatacomb.getLevelByCord() == and npc.lock() begin
            say
("Während du den Stein genauer untersuchst, kannst")
            
say("du eine Gravur erkennen.")
            
wait()
            
say("Lediglich der Besitzer des Schrumpfkopfes")
            
say("darf eintreten, nachdem die Siegel dreier Türen")
            
say("aufgebrochen wurden.")
            
say("Wenn du dieses Relikt nicht bei dir trägst,")
            
say("wirst du aus der Devil's Catacomb teleportiert.")
            
say("")
            
wait()
            
local s select("Ja, lass mich eintreten!""Nein, ich möchte nicht eintreten.")
            if 
== 2 then
                
return
            elseif 
== 1 then
                
if pc.count_item(30319) >= 1 then
                    npc
.purge()
                    
d.setf("level"3)
                    
d.purge()
                    
d.clear_regen()
                    
timer("dc_jump_3"6)
                else
                    
say("Du hast keinen Schrumpfkopf und wirst nun")
                    
say("aus der Höhle teleportiert ...")
                    
pc.warp(5913749932565)
                
end
            end
        end
        
        
        when dc_jump_3
.timer begin
            d
.set_regen_file("data/dungeon/dc/dc_regen2.txt")
            
d.notice("Suche den richtigen Metinstein und zerstöre ihn!")
            
devilscatacomb.getTimeLeft()
            
d.jump_all(445112282)
            
local positions devilscatacomb.get3FloorStonePositions()
            for 
1do
                
d.set_unique("fake" .. d.spawn_mob(8037positions[i][1], positions[i][2]))
            
end
            d
.set_unique("real"d.spawn_mob(8037positions[7][1], positions[7][2]))
            
server_loop_timer('dc_stone3_update'10pc.get_map_index())

        
end
        
        
        when dc_stone3_update
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                
if not d.is_unique_dead("real"then
                    
for 1do
                        if 
d.getf("fakedead" .. i) == 0 then
                            
if d.unique_get_hp_perc("fake" .. i) < 30 then
                                
if not d.is_unique_dead("fake" .. ithen
                                    d
.purge_unique("fake" .. i)
                                
end
                                d
.setf("fakedead" .. i1)
                                
d.notice("Du hast den falschen Metinstein zerstört. Finde den richtigen!");
                            
end
                        end
                    end
                
else
                    
server_timer("dc_stone_end3"5get_server_timer_arg())
                    
d.notice("Der richtige Metinstein wurde zerstört. Du darfst nun die 4. Ebene betreten.")
                
end
            
else
                
server_timer('dc_stone3_stop_timer'1get_server_timer_arg())
            
end
        end

        
        when dc_stone3_stop_timer
.server_timer begin
            clear_server_timer
('dc_stone3_update'get_server_timer_arg())
        
end
        
        
        when dc_stone_end3
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                clear_server_timer
('dc_stone3_update'get_server_timer_arg())
                
d.setf("level"4)
                
d.jump_all(334712810)        
                
d.clear_regen()
                
d.set_regen_file("data/dungeon/dc/dc_regen3.txt")
                
d.regen_file("data/dungeon/dc/dc_warps.txt")
                
d.spawn_mob(30104500716)
            
end
        end
        
        
        when 30104.click with devilscatacomb
.isInCatacomb() and devilscatacomb.getLevelByCord() == 4  and npc.lock() begin
            npc
.purge()
            
say_in_map(pc.get_map_index(),"Du hast es geschafft! Hier ist der Ausgang des[ENTER]Labyrinths. Steige nun in die 5. Ebene hinab.")
            
server_timer("dc4_enter"6pc.get_map_index())
        
end
        
        
        when dc4_enter
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                d
.jump_all(391812939)
                
                
d.set_regen_file("data/dungeon/dc/dc_regen4.txt")
                
d.spawn_mob(30102848739)
                
                
local mob_pos = { {1006649}, {979829}, {691822}, {714653}, {848593} }
                
local rnd number(15)
                
d.spawn_mob(2591mob_pos[rnd][1], mob_pos[rnd][2])
                
                
server_timer("dc4_message"3get_server_timer_arg())
            
end
        end
        
        
        when dc4_message
.server_timer begin
            
if d.select(get_server_timer_arg()) then
                d
.notice("Besiege die Dämonenwachen, um das Fratzen-Totem zu erhalten. Es dient dir als Schlüssel zur 6. Ebene.")
                
devilscatacomb.getTimeLeft()
            
end
        end
        
        
        when 30102.take with item
.vnum == 30312 begin
            say
("Du hast das Fratze-Totem.")
            
say("Nun kannst du in die nächste Ebene!")
            
say("")
            
wait()
            
say("Viel Glück!")
            
item.remove()
            
npc.purge()
            
d.clear_regen()
            
timer("dc_level_5"6)
        
end
        
        
        when dc_level_5
.timer begin
            d
.jump_all(431212799)
            
timer("dc_level_5_start"5)
        
end
        
        
        when dc_level_5_start
.timer begin
            d
.setf("level"5)
            
d.notice("Besiege Charon und seine Schergen!")
            
devilscatacomb.getTimeLeft()
            
d.regen_file("data/dungeon/dc/dc_regen5.txt")
            
d.spawn_mob(25971301699)
        
end
        
        
        when kill begin
            
if devilscatacomb.isInCatacomb() then
                
if npc.race == 2597 then
                    
if d.count_monster() < 1000 then
                        d
.setf("level"6)
                        
d.clear_regen()
                        
timer("dc_level_5_end"12)
                    else
                        if 
d.getf("charon_spawns") < 4 then
                            d
.spawn_mob(25971301699)
                            
d.setf("charon_spawns"d.getf("charon_spawns") + 1)
                        else
                            
d.notice("Du hast versagt Charon hat dich mit seinen Schergen")
                            
d.notice("überlistet. Du verlässt nun die Höhle")
                            
local nextTime=get_time()+time_min_to_sec(1)
                            
d.setqf("__NEXT_TIME__"nextTime)
                            
d.exit_all()
                        
end
                    end
                end
                
                
if npc.race == 2598 and  d.getf("level") == 6 then
                    clear_server_timer
("runtime"pc.get_map_index())
                    
clear_server_timer("runtime_end"pc.get_map_index())
                    
notice_all(pc.get_name().." und "..tonumber(party.get_near_count()-1).." weitere Gruppenmitglieder haben Azrael besiegt!")
                    
timer("glory_message"6)
                
end
                
                
if npc.race == 2591 then
                    game
.drop_item_with_ownership(303121)
                
end
            end
        end
        
        
        when dc_level_5_end
.timer begin
            say_in_map
(pc.get_map_index(),"Du hast Charon besiegt! Nun wirst du[ENTER]zur letzten Ebene der Devil's Catacomb[ENTER]teleportiert.")
            
timer("dc_level_6"3)
        
end
        
        
        when dc_level_6
.timer begin
            d
.jump_all(314513187)
            
timer("dc_level_6_into"3)
        
end
        
        when dc_level_6_into
.timer begin
            d
.regen_file("data/dungeon/dc/dc_regen6.txt")
            
d.spawn_mob(2598741103)
            
d.notice("Besiege Azrael!")
        
end
        
        when glory_message
.timer begin
            local text 
"Azrael wurde besiegt. Endlich herrscht[ENTER]Frieden in der Devil's Catacomb. Du wirst nun[ENTER]an die Oberfläche teleportiert."
            
say_in_map(pc.get_map_index(), text)
            
timer("dc_end"20)    
        
end
        
        
        when dc_end
.timer begin
            local nextTime
=get_time()+time_min_to_sec(1)
            
d.setqf("__NEXT_TIME__"nextTime)
            
d.exit_all()
        
end
        
    end
    
    state _FUNC_ begin
    
        
function getLevelByCord()
        
            if 
pc.get_local_x() > 30 and pc.get_local_y() > 45 and pc.get_local_x() < 450 and pc.get_local_y() < 450 then
                
return 1
                
            
elseif pc.get_local_x() > 540 and pc.get_local_y() > 39 and pc.get_local_x() < 1000 and pc.get_local_y() < 462 then
                
return 2
                
            
elseif pc.get_local_x() > 1048 and pc.get_local_y() > 35 and pc.get_local_x() < 1455 and pc.get_local_y() < 458 then
                
return 3
                
            
elseif pc.get_local_x() > 31 and pc.get_local_y() > 541 and pc.get_local_x() < 564 and pc.get_local_y() < 1058 then
                
return 4
                
            
elseif pc.get_local_x() > 650 and pc.get_local_y() > 540 and pc.get_local_x() < 1050 and pc.get_local_y() < 955 then
                
return 5
                
            
elseif pc.get_local_x() > 1175 and pc.get_local_y() > 576 and pc.get_local_x() < 1420 and pc.get_local_y() < 810 then
                
return 6
                
            
else
                return 
0
            end
            
        end
        
        
function isInCatacomb()
        
            if 
pc.get_map_index() >= (special.dc_map_index 10000) and pc.get_map_index() < (special.dc_map_index_2 10000) and pc.in_dungeon() then
                
return true
            
else
                return 
false
            end
            
        end
        
        
function get3FloorStonePositions()
        
            
local positions 
            {
                {
1365352}, {1349150}, {1133167}, {1151364},
                {
1234136}, {1255371}, {1132245},
            }
            
            for 
1do
            
                
local j number(i7)
                
                if 
!= j then
                
                    local t 
positions[i];
                    
positions[i] = positions[j];
                    
positions[j] = t;
                    
                
end
                
            end 
            
            
return positions
            
        end
        
        
function getTimeLeft()
        
            
local secondsLeft = (d.getf("time") - get_time())
            
local minutesLeft math.ceil(secondsLeft 60)
            
            
d.notice("Du hast noch "..minutesLeft.." Minute(n) Zeit.")
        
        
end
        
    end
end 
Die Quest ging 1 mal und danach nicht mehr.
same problem.
Ich vermute, kenne mich aber selbst noch nicht so gut mit questwriting aus, es liegt an den questflags, das i-wo nen questflag gesetzt, aber nicht mehr entfernt wird.
Hab aber selbst noch nichts in der Richtung gefunden.
07/31/2012 21:00 losser123456789#6437
Kann mir vllt jemand Helfen wäre cool^^
Quote:
quest run begin
state start begin
when 8001.kill with pc.get_map_index() == 214 begin
if 8001.kill then
d.spawn_mob(8002, 999, 652)
notice_all("".. pc.get_name() .." hat den Metin des Kummers vernichtet!")
pc . give_item2 ( "50080")
pc.warp(5544400,4455500)
end
end
end
end
07/31/2012 21:30 AtzeDamon#6438
So habe ein Problem und zwar geht der effekt nicht mehr rückgängig :O

PHP Code:
quest Keiler begin 
    state start begin 
        when 7002134.
use begin 
            
if  pc.level>=50 and not pc.is_mount() then
                chat
("Du hast dein Tiger gerufen!"
                
affect.remove_collect()  
                
pc.mount(201189999
                
affect.add_collect(apply.ATT_GRADE_BONUS,400,9999)
                
affect.add_collect(apply.DEF_GRADE_BONUS,100,9999)
                
            else 
                
chat("Du bist noch nicht Level 65!"
            
end  
        end 
    end 
end 
07/31/2012 22:34 losser123456789#6439
quest run begin
state start begin
when 8001.kill with pc.get_map_index() == 214 begin
if 8001.kill then
d.spawn_mob(8002, 999, 652)
notice_all("".. pc.get_name() .." hat den Metin des Kummers vernichtet!")
pc . give_item2 ( "50080")
end
end
end
end
08/01/2012 09:39 .Delta#6440
Quote:
Originally Posted by losser123456789 View Post
quest run begin
state start begin
when 8001.kill with pc.get_map_index() == 214 begin
if 8001.kill then
d.spawn_mob(8002, 999, 652)
notice_all("".. pc.get_name() .." hat den Metin des Kummers vernichtet!")
pc . give_item2 ( "50080")
end
end
end
end
d.xxx befehle kannst du nur benutzen, wenn du vorher einen dungeon "erstellt" hast per d.new_jump_all oder d.join.
08/01/2012 10:18 marazruno123#6441
iyi görünüyor :d
08/01/2012 10:53 .CHHorny#6442
Quote:
Originally Posted by •kяyteя• View Post
same problem.
Ich vermute, kenne mich aber selbst noch nicht so gut mit questwriting aus, es liegt an den questflags, das i-wo nen questflag gesetzt, aber nicht mehr entfernt wird.
Hab aber selbst noch nichts in der Richtung gefunden.
Hmm danke , aber leider kenne ich mich mit questen nicht so gut aus.
08/03/2012 02:01 Mijago#6443
@AtzeDamon:
Nutze pc.mount_bonus :D
08/03/2012 07:59 .Crystal#6444
So vielleicht kann hier mal einer drüber schauen :)

Code:
quest traumtausch begin
    state start begin
        when 20095.chat."Traumfänger herstellen" begin
	    say(""..mob_name(20095)..":")
            say("So du möchtest dir also einen Traumfänger")
	    say("herstellen lassen?")
	    say("Dafür benötige ich Dämonenkraut und")
	    say("Elfenbein und natürlich verlang ich ein wenig")
            say("Gold, aber nur 100.000 Gold.")
            say("Soll ich dir einen Traumfänger herstellen?")
            local main = select ("Ja","Nein")
            if main == 1 then
                if pc.count_item(5389) > 1 then
		if pc.count_item(5388) > 1 then
                    if pc.get_gold() >= 100000 then
                        pc.remove_item(5389,1)
			pc.remove_item(5388,1)
                        pc.changegold(-100000)
                        pc.give_item2(6037,1)
                    else
                        say("Du hast nicht genug Gold dabei,")
			say("komm wieder wenn du es hast.")
                    end 
                else 
                    say("Du hast die Sachen nicht dabei.")
                end
            end
        end
    end
end
08/03/2012 09:45 Mijago#6445
Du hast da ein end vergessen :D
Jags hier mal durch, dann siehst du das sofort
[Only registered and activated users can see links. Click Here To Register...]
08/03/2012 16:36 .Crystal#6446
immernoch core dumped fehler :/
08/03/2012 17:46 Poppitz#6447
PHP Code:
quest traumtausch begin
    state start begin
        when 20095.chat
."Traumfänger herstellen" begin
            say
(""..mob_name(20095)..":")
            
say("So du möchtest dir also einen Traumfänger")
            
say("herstellen lassen?")
            
say("Dafür benötige ich Dämonenkraut und")
            
say("Elfenbein und natürlich verlang ich ein wenig")
            
say("Gold, aber nur 100.000 Gold.")
            
say("Soll ich dir einen Traumfänger herstellen?")
            
local main select ("Ja","Nein")
            if 
main == 1 then
                
if pc.count_item(5389) > and pc.count_item(5388) > and pc.get_gold() >= 100000 then
                    pc
.remove_item(5389,1)
                    
pc.remove_item(5388,1)
                    
pc.changegold(-100000)
                    
pc.give_item2(6037,1)
                else
                    
say("Du hast nicht genug Gold dabei,")
                    
say("komm wieder wenn du es hast.")
                
end 
            
else 
                
say("Du hast die Sachen nicht dabei.")
            
end
        end
    end
end 
08/04/2012 11:28 vıo#6448
Bräuchte hilfe bei dieser Quest...
Mijago hat sie für mich geschrieben aber irgendwie geht sie ned o.O

PHP Code:
quest warp lvl25 begin
    state start begin
        when levelup with pc
.get_level() == 25 begin
            say
('Hier text')
            
pc.warp(12345,45643)
        
end
    end
end 
Die Quest sollte so funktionieren, dass nach dem LvL Up ein Text erscheint
danach bestätigt man es und wird z. B. vor der Alten Frau teleportiert.

Edit : Reichsbezogene Warp's
08/04/2012 13:00 xXKimariXx#6449
PHP Code:
quest warp begin
    state start begin
        when levelup with pc
.get_level() == 25 begin
            say
('Hier text')
            if 
pc.get_empire() == 1 then -- Rotes reich
            pc
.warp(12345,45643)
            elseif 
pc.get_empire() == 2 then -- Gelbes reich
            pc
.warp(00000,00000)
            else
            
pc.warp(00000,00000)
            
end
        end
    end
end 
Musst halt nur noch die Koordinaten anpassen...
08/04/2012 15:31 vıo#6450
nääää irgendetwas fehlt da ^^