Jump to content

[Bug] Demon Tower


Go to solution Solved by Krekon,

Recommended Posts

I've tried 3 different quests allready for Demon Tower but i always get stucked at level 4 after destroying the first stone , the others don't spawn .

Any ideeas ?

 

One of the quests i've used and the one i have now :

Spoiler

quest deviltower_zone begin

    state start begin

    when login begin

        if pc.get_map_index() == 66 then

            if pc.get_x() < 2048+88 or pc.get_y() < 6656+577 or pc.get_x() > 2048+236 or pc.get_y() > 6656+737 then

                pc.warp((5376+532)*100, (512+596+4)*100, 65)

            end

        pc.set_warp_location(65, 5376+532, 512+596+4)

        elseif pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 then

            pc.set_warp_location(65, 5376+532, 512+596+4)

        end

    end

 

    when logout begin

        if pc.count_item(30300) >= 1 then

            pc.remove_item(30300, pc.count_item(30300))

        end

        -- not used in the game

        -- pc.remove_item(30301, pc.count_item(30301))

        if pc.count_item(30302) >= 1 then

            pc.remove_item(30302, pc.count_item(30302))

        end

    end

        

    when deviltower_man.chat.gameforge.deviltower_zone._10_npcChat begin

        if pc.get_level() < 40 then

            say_title(gameforge.deviltower_zone._20_sayTitle)

            say(gameforge.deviltower_zone._30_say)

        else

            say_title(gameforge.deviltower_zone._20_sayTitle)

            say(gameforge.deviltower_zone._40_say)

            local s =  select(gameforge.locale.monkey_dungeon.enter, gameforge.locale.monkey_dungeon.no_enter)

            if s == 1 then

                pc.warp(216500,727000)

            end

        end

    end

    when kill with npc.get_race() == 8015 begin

        timer("devil_stone1_1", 6)

    end

    when devil_stone1_1.timer begin

        d.new_jump_all(66, special.devil_tower[1][1], special.devil_tower[1][2])

        d.regen_file("data/dungeon/deviltower2_regen.txt")

        d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[2][1], special.devil_tower[2][2], "data/dungeon/deviltower3_regen.txt")

    end

    when kill with npc.get_race() == 1091 and pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin

        d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[3][1], special.devil_tower[3][2], "data/dungeon/deviltower4_regen.txt")

        d.check_eliminated()

    end

 

    function get_4floor_stone_pos()

        local positions = 

            {

                {368, 629}, {419, 630}, {428, 653}, {422, 679},

                {395, 689}, {369, 679}, {361, 658},

        }

        for i = 1, 6 do

            local j = number(i, 7)

            if i != j then

                local t = positions;

                positions = positions[j];

                positions[j] = t;

            end

        end

        return positions

    end

 

    when kill with npc.get_race() == 8016 and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin

        d.setf("level", 4)

        local positions = deviltower_zone.get_4floor_stone_pos()

 

        for i = 1, 6 do

            test_chat(positions[1], positions[2])

            d.set_unique("fake" .. i , d.spawn_mob(8017, positions[1], positions[2]))

        end

 

        test_chat(positions[7][1], positions[7][2])

 

        local vid = d.spawn_mob(8017, positions[7][1], positions[7][2])

        test_chat(vid)

        d.set_unique("real", vid)

        server_loop_timer('devil_stone4_update', 10, pc.get_map_index())

        server_timer('devil_stone4_fail1', 5*60, pc.get_map_index())

        

        notice_multiline(gameforge.deviltower_zone._50_dNotice,d.notice)

        

    end

 

    when devil_stone4_fail1.server_timer begin

        if d.select(get_server_timer_arg()) then

            notice_multiline(gameforge.deviltower_zone._60_dNotice,d.notice)

            server_timer('devil_stone4_fail2', 5*60, get_server_timer_arg())

        end

    end

 

    when devil_stone4_fail2.server_timer begin

        if d.select(get_server_timer_arg()) then

            notice_multiline(gameforge.deviltower_zone._70_dNotice,d.notice)

            server_timer('devil_stone4_fail', 5*60, get_server_timer_arg())

        end

    end

 

    when devil_stone4_fail.server_timer begin

        if d.select(get_server_timer_arg()) then

            notice_multiline(gameforge.deviltower_zone._80_dNotice,d.notice)

            d.clear_regen()

            d.exit_all()

            clear_server_timer('devil_stone4_update', get_server_timer_arg())

        end

    end

 

    when devil_stone4_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) < 50 then

                            d.purge_unique("fake" .. i)

                            d.setf("fakedead" .. i, 1)

                            notice_multiline(gameforge.deviltower_zone._90_dNotice,d.notice)

                        end

                    end

                end

            else

                server_timer("devil_stone4_end", 5, get_server_timer_arg())

                --d.kill_all()

                d.purge()

                notice_multiline(gameforge.deviltower_zone._100_dNotice,d.notice)

                clear_server_timer('devil_stone4_fail1', get_server_timer_arg())

                clear_server_timer('devil_stone4_fail2', get_server_timer_arg())

                clear_server_timer('devil_stone4_fail', get_server_timer_arg())

            end

        else

            server_timer('devil_stone4_stop_timer', 1, get_server_timer_arg())

        end

    end

 

    when devil_stone4_stop_timer.server_timer begin

        clear_server_timer('devil_stone4_update', get_server_timer_arg())

    end

 

    when devil_stone4_end.server_timer begin

        if d.select(get_server_timer_arg()) then

            clear_server_timer('devil_stone4_update', get_server_timer_arg())

            clear_server_timer('devil_stone4_fail1', get_server_timer_arg())

            clear_server_timer('devil_stone4_fail2', get_server_timer_arg())

            clear_server_timer('devil_stone4_fail', get_server_timer_arg())

            

            -- clear regen from memory when exit

            d.clear_regen()

            

            d.setf("level", 5)

            d.setf("stone_count", 5)

            notice_multiline(gameforge.deviltower_zone._110_dNotice,d.notice)

            d.jump_all(special.devil_tower[4][1], special.devil_tower[4][2])

            server_timer('devil_stone5_fail1', 5*60, get_server_timer_arg())

            clear_server_timer('devil_stone4_update', get_server_timer_arg())

 

            d.set_regen_file("data/dungeon/deviltower5_regen.txt")

 

            d.spawn_mob(20073, 421, 452)

            d.spawn_mob(20073, 380, 460)

            d.spawn_mob(20073, 428, 414)

            d.spawn_mob(20073, 398, 392)

            d.spawn_mob(20073, 359, 426)

        end

    end

    when devil_stone5_fail1.server_timer begin

        if d.select(get_server_timer_arg()) then

            notice_multiline(gameforge.deviltower_zone._120_dNotice,d.notice)

            server_timer('devil_stone5_fail2', 5*60, get_server_timer_arg())

        end

    end

 

    when devil_stone5_fail2.server_timer begin

        if d.select(get_server_timer_arg()) then

            notice_multiline(gameforge.deviltower_zone._60_dNotice,d.notice)

            server_timer('devil_stone5_fail3', 5*60, get_server_timer_arg())

        end

    end

 

    when devil_stone5_fail3.server_timer begin

        if d.select(get_server_timer_arg()) then

            notice_multiline(gameforge.deviltower_zone._70_dNotice,d.notice)

            server_timer('devil_stone5_fail', 5*60, get_server_timer_arg())

        end

    end

 

    when devil_stone5_fail.server_timer begin

        if d.select(get_server_timer_arg()) then

            notice_multiline(gameforge.deviltower_zone._80_dNotice,d.notice)

            d.exit_all()

        end

    end

 

 

    when kill with npc.get_race() == 1062 and d.getf("level") == 5 begin

        local KILL_COUNT_FOR_DROP_KEY = 50

        local n =d.getf("count") + 1

        d.setf("count", n) 

        if n == KILL_COUNT_FOR_DROP_KEY then

            game.drop_item(50084, 1)

            d.setf("count", 0)

        end

    end

 

    when devil_stone5.take with item.vnum == 50084 begin

        npc.purge()

        item.remove()

        d.setf("stone_count", d.getf("stone_count") - 1)

        if d.getf("stone_count") <= 0 then

            d.setf("level", 6)

            d.clear_regen()

            d.regen_file("data/dungeon/deviltower6_regen.txt")

 

            notice_multiline(gameforge.deviltower_zone._130_dNotice,d.notice)

            d.jump_all(special.devil_tower[5][1], special.devil_tower[5][2])

            local server_arg = d.get_map_index()

            clear_server_timer('devil_stone5_fail1', server_arg)

            clear_server_timer('devil_stone5_fail2', server_arg)

            clear_server_timer('devil_stone5_fail3', server_arg)

            clear_server_timer('devil_stone5_fail', server_arg)

        else

            d.notice(string.format(gameforge.deviltower_zone._140_dNotice, d.getf("stone_count")))

        end

    end

 

    when kill with npc.get_race() == 1092 and pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and d.getf("level") == 6 begin

        d.kill_all()

        notice_multiline(gameforge.deviltower_zone._150_dNotice,d.notice)

        d.check_eliminated()

        notice_multiline(gameforge.deviltower_zone._160_dNotice,d.notice)

        local reward_alchemist = {20074, 20075, 20076}

        d.spawn_mob(reward_alchemist[number(1,3)], 425, 216);

        d.setqf2("deviltower_zone","can_refine", 1)

    end

 

 

    when 20074.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin

        say_title(mob_name(20074))

        say(gameforge.deviltower_zone._190_say)

        wait()

        if pc.level >=75 then

            say_title(mob_name(20074))

 

            say(gameforge.deviltower_zone._200_say)

            local s= select(gameforge.deviltower_zone._210_select, gameforge.locale.cancel, gameforge.deviltower_zone._220_select)

            if s==3 then

                pc.warp(590500, 110900)

                return

            end

            if s==2 then

                return

            end

 

            timer("devil_jump_7", 6)

            npc.unlock()

            d.purge()

            return

        end

        say_title(mob_name(20074))

        say(gameforge.deviltower_zone._230_say)

        wait()

        pc.warp(590500, 110500)

        return

    end

 

    when 20075.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000  and npc.lock() begin

        say_title(mob_name(20075))

        say(gameforge.deviltower_zone._190_say)

        wait()

        if pc.level >=75 then

            say_title(mob_name(20075))

 

            say(gameforge.deviltower_zone._200_say)

            local s= select(gameforge.deviltower_zone._210_select, gameforge.deviltower_zone._220_select)

            if s==3 then

                pc.warp(590500, 110900)

                return

            end

            if s==2 then

                return

            end

 

            timer("devil_jump_7", 6)

            npc.unlock()

            d.purge()

            return

        end

        say_title(mob_name(20075))

        say(gameforge.deviltower_zone._230_say)

        wait()

        pc.warp(590500, 110500)

        return

    end

    when 20076.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000  and npc.lock() begin

        say_title(mob_name(20076))

        say(gameforge.deviltower_zone._190_say)

        wait()

        if pc.level >=75 then

            say_title(mob_name(20076))

 

            say(gameforge.deviltower_zone._200_say)

            local s= select(gameforge.deviltower_zone._210_select, gameforge.deviltower_zone._220_select)

            if s==3 then

                pc.warp(590500, 110900)

                return

            end

            if s==2 then

                return

            end

 

            timer("devil_jump_7", 6)

            npc.unlock()

            d.purge()

            return

        end

        say_title(mob_name(20076))

        say(gameforge.deviltower_zone._230_say)

        wait()

        pc.warp(590500, 110500)

        return

    end

    when devil_jump_7.timer begin

        d.clear_regen()

 

        d.spawn_mob(8018, 639, 658)

        d.spawn_mob(8018, 611, 637)

        d.spawn_mob(8018, 596, 674)

        d.spawn_mob(8018, 629, 670)

 

        d.setf("level", 7)

 

 

        notice_multiline(gameforge.deviltower_zone._240_dNotice,d.notice)

        d.jump_all(2048+590, 6656+638)

    end

 

    when kill with npc.get_race() == 8018 and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin

        local cont = d.getf("7_stone_kill") + 1

        d.setf("7_stone_kill", cont)

 

        if cont >= 4 then

            d.setf("7_stone_kill", 0)

            d.set_regen_file("data/dungeon/deviltower7_regen.txt")

        end

    end

 

    when kill with npc.get_race() == 8019 and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin

        game.drop_item(30300, 1)

    end

 

    when 30300.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin

        pc.remove_item("30300", 1)

 

        local pct = number(1,10)

 

        if pct == 1 then

            game.drop_item(30302, 1)

            d.clear_regen()

        else

            -- nothing happens cause the items isnt used in the game

            -- game.drop_item(30301, 1)

        end

    end

 

    when 30302.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin

        if d.getf( "level" ) != 7 then

            pc.remove_item( "30302", 1)

            return

        end

            

        say_title(gameforge.blacksmith._40_sayTitle)

        say(gameforge.deviltower_zone._250_say)

        pc.remove_item("30302", 1)

        timer("devil_jump_8", 6)

        d.clear_regen()

    end

 

    when devil_jump_8.timer begin

        d.setf("level", 😎

 

        notice_multiline(gameforge.deviltower_zone._260_dNotice,d.notice)

        d.jump_all(2048+590, 6656+403)

        d.set_regen_file("data/dungeon/deviltower8_regen.txt")

        d.spawn_mob(20366, 640, 460)

        local _count = pc.count_item(30302)

        pc.remove_item(30302,_count)

        

    end

 

    when kill with npc.get_race() == 1040 and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin

        local pct1 = number(1, 5)

        if pct1 == 1 then

            local pct2 = number(1, 10)

            if pct2 == 1 then

                game.drop_item(30304, 1)

            else

                game.drop_item(30303, 1)

            end

        else

            return

        end

    end

 

    when 20366.take with item.vnum == 30304 begin

        npc.purge()

        item.remove()

        timer("devil_jump_9", 6)

    end

 

    when devil_jump_9.timer begin

        d.setf("level", 9)

 

 

        notice_multiline(gameforge.deviltower_zone._270_dNotice,d.notice)

        d.jump_all(2048+590, 6656+155)

        d.regen_file("data/dungeon/deviltower9_regen.txt")

    end

 

    when kill with npc.get_race() == 1093 and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin

        d.kill_all()

        d.setqf2("deviltower_zone","9_done", 1)

        notice_multiline(gameforge.deviltower_zone._280_dNotice,d.notice)

        notice_multiline(gameforge.deviltower_zone._290_dNotice,d.notice)

        server_timer("devil_end_jump", 60, d.get_map_index())

    end

 

        when devil_end_jump.server_timer begin

            if d.select (get_server_timer_arg()) then

                d.clear_regen()

                d.exit_all()

            end

        end

    end

end

Syslog :

Spoiler

Feb  7 18:00:17 :: GLOBAL_TIME: Feb  7 18:00:17 time_gap 0
Feb  7 18:01:17 :: GLOBAL_TIME: Feb  7 18:01:17 time_gap 0
Feb  7 18:02:17 :: GLOBAL_TIME: Feb  7 18:02:17 time_gap 0
Feb  7 18:03:17 :: GLOBAL_TIME: Feb  7 18:03:17 time_gap 0
Feb  7 18:04:17 :: GLOBAL_TIME: Feb  7 18:04:17 time_gap 0
Feb  7 18:05:17 :: GLOBAL_TIME: Feb  7 18:05:17 time_gap 0
Feb  7 18:06:17 :: GLOBAL_TIME: Feb  7 18:06:17 time_gap 0
Feb  7 18:07:17 :: GLOBAL_TIME: Feb  7 18:07:17 time_gap 0
Feb  7 18:08:17 :: GLOBAL_TIME: Feb  7 18:08:17 time_gap 0
Feb  7 18:09:17 :: GLOBAL_TIME: Feb  7 18:09:17 time_gap 0
Feb  7 18:10:17 :: GLOBAL_TIME: Feb  7 18:10:17 time_gap 0
Feb  7 18:11:17 :: GLOBAL_TIME: Feb  7 18:11:17 time_gap 0
 

 

Edited by Krekon
Link to comment
Share on other sites

  • Replies 1
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.