[Problem] Devils Catacomb

09/17/2013 17:31 ondry147#1
Hi... I have problem with devils catacomb...
All floor etc. is ok... I kill Azrael and notify the chat that Me and my group kill azrael... Then it teleports us (my group)away from map(devilscatacomb) and now crash server..
(in putty: conection refusen)
In syserr and syslog is not anything error.
Can you help me please?

Quest...
Code:
quest devilscatacomb begin
    state start begin
    
        when logout begin
            pc.remove_item(30311, pc.count_item(30311))
            pc.remove_item(30312, pc.count_item(30312))
            pc.remove_item(30313, pc.count_item(30313))
        end
        
        
        when login begin
            if pc.get_map_index() == 90 then
                if devilscatacomb.getLevelByCord() > 1 or not next_time_is_now() then
                
                    pc.warp((5913)*100, (993)*100, 65) -- 5913x993  591374x
                    
                end
                
                pc.set_warp_location(65, 5913, 993)
                
                say("Du musst den Seelenkristall-Schlüssel droppen")
                say("und dann auf die Statue des Kud ziehen, um in")
				say("die 2. Ebene zu gelangen...")
				say("")
				say_item_vnum(30311)
				say("") 
                
            elseif pc.get_map_index() >= (90 * 10000) then            
                pc.set_warp_location(65, 5913, 993)
            end
        end
        
        
        when 20367.chat."The Devil's Catacomb" with pc.is_gm() begin  --Enter the Devil Catacomb
            if pc.get_level() < 75 then
                say_title(mob_name(npc.get_race()) ..":")
				say("Du möchtest in die Katakomben des Teufels?")
                say("")
                say("So einfach geht das nicht, denn du hast")
                say("nicht die nötige Erfahrung dazu.")
				say("Komme am Besten wieder, wenn du Level 75")
                say("erreicht hast... ")
                    else
                        say_title(mob_name(npc.get_race()) ..":")
                        say("Du möchtest in die Katakomben des Teufels?")
                        say("")
						say("Ich kann dich gerne teleportieren, doch")
						say("ich möchte dich warnen: Es sind schon viele")
						say("eingetreten aber nicht mehr zurück gekommen!")
						say("")
						say("Soll ich dich ernsthaft teleportieren?")
						say("")
                        local s = select("Ja","Nein")
                        if s == 2 then
                            return
                        elseif s == 1 then
                            pc.warp(315300, 1209200)
                        end
                    end    
                end    
        
        
        when kill with pc.get_map_index() == 90 and pc.countitem(30311) < 1 begin
            local rnd = number(1,100)
            if rnd == 6 then
                game.drop_item_with_ownership(30311, 1)
            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(90)
                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(30103, 740, 227)
            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", 6, pc.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", 6, pc.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(30319, 1)
                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*60, get_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() == 2 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 s == 2 then
                return
            elseif s == 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(591374, 99325, 65)
                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(4451, 12282)
            local positions = devilscatacomb.get3FloorStonePositions()
            for i = 1, 6 do
                d.set_unique("fake" .. i , d.spawn_mob(8037, positions[i][1], positions[i][2]))
            end
            d.set_unique("real", d.spawn_mob(8037, positions[7][1], positions[7][2]))
            server_loop_timer('dc_stone3_update', 10, pc.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 i = 1, 6 do
                        if d.getf("fakedead" .. i) == 0 then
                            if d.unique_get_hp_perc("fake" .. i) < 30 then
                                if not d.is_unique_dead("fake" .. i) then
                                    d.purge_unique("fake" .. i)
                                end
                                d.setf("fakedead" .. i, 1)
                                d.notice("Du hast den falschen Metinstein zerstört. Finde den richtigen!");
                            end
                        end
                    end
                else
                    server_timer("dc_stone_end3", 5, get_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', 1, get_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(3347, 12810)        
                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(30104, 500, 716)
            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", 6, pc.get_map_index())
        end
        
        
        when dc4_enter.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.jump_all(3918, 12939)
                
                d.set_regen_file("data/dungeon/dc/dc_regen4.txt")
                d.spawn_mob(30102, 848, 739)
                
                local mob_pos = { {1006, 649}, {979, 829}, {691, 822}, {714, 653}, {848, 593} }
                local rnd = number(1, 5)
                d.spawn_mob(2591, mob_pos[rnd][1], mob_pos[rnd][2])
                
                server_timer("dc4_message", 3, get_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(4312, 12799)
            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(2597, 1301, 699)
        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(2597, 1301, 699)
                            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")
                            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().." a "..tonumber(party.get_near_count()-1).." další členové porazili pána pekel - Azrela!")
                    timer("glory_message", 6)
                end
                
                if npc.race == 2591 then
                    game.drop_item_with_ownership(30312, 1)
                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(3145, 13187)
            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(2598, 74, 1103)
            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
            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() >= (90 * 10000) and pc.in_dungeon() then
                return true
            else
                return false
            end
            
        end
        
        function get3FloorStonePositions()
        
            local positions = 
            {
                {1365, 352}, {1349, 150}, {1133, 167}, {1151, 364},
                {1234, 136}, {1255, 371}, {1132, 245},
            }
            
            for i = 1, 6 do
            
                local j = number(i, 7)
                
                if i != 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
Thanks and sorry for by bad english.