quest questscroll5 begin
    state start begin
        when 50317.use begin
            local s=0
            local t=select("Aa", "Ab", "Ba", "Bb", "Bc", "Ca", "Cb", "Cc", "Cd", "Da", "Db")
            if 1==t then
                s=select(
                questscroll5.get_menu(1),
                questscroll5.get_menu(2),
                questscroll5.get_menu(3),
                questscroll5.get_menu(4),
                questscroll5.get_menu(5),
                questscroll5.get_menu(6)
                )+1-1
            elseif 2==t then
                s=select(
                questscroll5.get_menu(7),
                questscroll5.get_menu(8),
                questscroll5.get_menu(9),
                questscroll5.get_menu(10),
                questscroll5.get_menu(11)
                )+7-1
            elseif 3==t then
                s=select(
                questscroll5.get_menu(12),
                questscroll5.get_menu(13),
                questscroll5.get_menu(14),
                questscroll5.get_menu(15)
                )+12-1
            elseif 4==t then
                s=select(
                questscroll5.get_menu(16),
                questscroll5.get_menu(17),
                questscroll5.get_menu(18),
                questscroll5.get_menu(19),
                questscroll5.get_menu(20),
                questscroll5.get_menu(21)
                )+16-1
            elseif 5==t then
                s=select(
                questscroll5.get_menu(22),
                questscroll5.get_menu(23),
                questscroll5.get_menu(24),
                questscroll5.get_menu(25)
                )+22-1
            elseif 6==t then
                s=select(
                questscroll5.get_menu(26),
                questscroll5.get_menu(27),
                questscroll5.get_menu(28),
                questscroll5.get_menu(29),
                questscroll5.get_menu(30),
                questscroll5.get_menu(31)
                )+26-1
            elseif 7==t then
                s=select(
                questscroll5.get_menu(32),
                questscroll5.get_menu(33),
                questscroll5.get_menu(34),
                questscroll5.get_menu(35)
                )+32-1
            elseif 8==t then
                s=select(
                questscroll5.get_menu(36),
                questscroll5.get_menu(37),
                questscroll5.get_menu(38),
                questscroll5.get_menu(39),
                questscroll5.get_menu(40),
                questscroll5.get_menu(41)
                )+36-1
            elseif 9==t then
                s=select(
                questscroll5.get_menu(42),
                questscroll5.get_menu(43),
                questscroll5.get_menu(44),
                questscroll5.get_menu(45),
                questscroll5.get_menu(46),
                questscroll5.get_menu(47),
                questscroll5.get_menu(48),
                questscroll5.get_menu(49)
                )+42-1
            elseif 10==t then
                s=select(
                questscroll5.get_menu(50),
                questscroll5.get_menu(51),
                questscroll5.get_menu(52),
                questscroll5.get_menu(53)
                )+50-1
            elseif 11==t then
                s=select(
                questscroll5.get_menu(54),
                questscroll5.get_menu(55),
                questscroll5.get_menu(56)
                )+54-1
            end	
            questscroll5.set_mission(s)
            item.remove()
        end
        when 50318.use begin
            local s=0
            if is_test_server() then
                test_chat(gameforge.questscroll5._30_chat)
                s=select(
                questscroll5.get_menu(1),
                questscroll5.get_menu(2),
                questscroll5.get_menu(3),
                questscroll5.get_menu(4),
                questscroll5.get_menu(5),
                questscroll5.get_menu(6),
                questscroll5.get_menu(7),
                questscroll5.get_menu(8),
                questscroll5.get_menu(9),
                questscroll5.get_menu(10),
                questscroll5.get_menu(11)
                )+1-1
            else
                s=number(1, 11)
            end
            questscroll5.set_mission(s)
            item.remove()
        end
        when 50319.use begin
            local s=0
            if is_test_server() then
                test_chat(gameforge.questscroll5._40_chat)
                s=select(
                questscroll5.get_menu(12),
                questscroll5.get_menu(13),
                questscroll5.get_menu(14),
                questscroll5.get_menu(15),
                questscroll5.get_menu(16),
                questscroll5.get_menu(17),
                questscroll5.get_menu(18),
                questscroll5.get_menu(19),
                questscroll5.get_menu(20),
                questscroll5.get_menu(21),
                questscroll5.get_menu(22),
                questscroll5.get_menu(23),
                questscroll5.get_menu(24),
                questscroll5.get_menu(25)
                )+12-1
            else
                s=number(12, 25)
            end
            questscroll5.set_mission(s)
            item.remove()
        end
        when 50320.use begin
            local s=0
            if is_test_server() then
                test_chat(gameforge.questscroll5._50_chat)
                s=select(
                questscroll5.get_menu(26),
                questscroll5.get_menu(27),
                questscroll5.get_menu(28),
                questscroll5.get_menu(29),
                questscroll5.get_menu(30),
                questscroll5.get_menu(31),
                questscroll5.get_menu(32),
                questscroll5.get_menu(33),
                questscroll5.get_menu(34),
                questscroll5.get_menu(35),
                questscroll5.get_menu(36),
                questscroll5.get_menu(37),
                questscroll5.get_menu(38),
                questscroll5.get_menu(39),
                questscroll5.get_menu(40),
                questscroll5.get_menu(41),
                questscroll5.get_menu(42),
                questscroll5.get_menu(43),
                questscroll5.get_menu(44),
                questscroll5.get_menu(45),
                questscroll5.get_menu(46),
                questscroll5.get_menu(47),
                questscroll5.get_menu(48),
                questscroll5.get_menu(49)
                )+26-1
            else
                s=number(26, 49)
            end
            questscroll5.set_mission(s)
            item.remove()
        end
        when 50321.use begin
            local s=0
            if is_test_server() then
                test_chat(gameforge.questscroll5._60_chat)
                s=select(
                questscroll5.get_menu(50),
                questscroll5.get_menu(51),
                questscroll5.get_menu(52),
                questscroll5.get_menu(53),
                questscroll5.get_menu(54),
                questscroll5.get_menu(55),
                questscroll5.get_menu(56)
                )+50-1
            else
                s=number(50, 56)
            end
            questscroll5.set_mission(s)
            item.remove()
        end
        function get_menu(mission_index)
            return locale.questscroll5.mission[mission_index][3]
        end
        function set_mission(mission_index)
            pc.setqf("mission_index", mission_index)

            local mission_type=questscroll5.get_mission_type()
            if mission_type==QUEST_SCROLL_TYPE_KILL_MOB then
                test_chat(gameforge.questscroll5._70_chat)
                set_state("kill1")
            elseif mission_type==QUEST_SCROLL_TYPE_KILL_MOB2 then
                test_chat(gameforge.questscroll5._80_chat)
                set_state("kill2")
            end
        end
        function get_mission_type()
            return questscroll5.get_mission()[1]
        end
        function notify_already_running()
            say_title(gameforge.questscroll5._90_sayTitle)
            say(gameforge.questscroll5._100_say)
        end
        function show_mission_menu()
            local s= select(gameforge.locale.levelup.prev_quest_go, gameforge.locale.cancel)
            if s==2 then
                say_title(string.format(gameforge.questscroll5._110_sayTitle, questscroll5.get_title()))
                say(gameforge.questscroll5._120_say)
                local a= select(gameforge.questscroll5._130_select, gameforge.locale.guild.no)
                if a==1 then
                    say(string.format(gameforge.questscroll5._140_say, questscroll5.get_title()))
                    restart_quest()
                end
            end
        end
    end
    state kill1 begin
        when questscroll1.use or 
            50317.use or 
            50318.use or 
            50319.use or 
            50320.use or 
            50321.use or 
            50322.use or 
            50323.use or 
            50324.use or 
            50325.use begin
            questscroll5.notify_already_running()
        end
        when letter begin
            send_letter(questscroll5.get_title())
        end
        when button or info begin
            say_title(questscroll5.get_title())
            say(questscroll5.get_desc())
            say_reward(questscroll5.get_summ())
            say_reward(string.format(gameforge.questscroll5._150_sayReward, questscroll5.get_mob1_name(), questscroll5.get_mob1_rest_kill_count() ))
            questscroll5.show_mission_menu()
        end
        when enter begin
            pc.setqf("mob1_kill_count", 0)
        end
        when leave begin
            pc.setqf("mob1_kill_count", 0)
        end
        when letter begin
            q.set_counter(questscroll5.get_mob1_name(), questscroll5.get_mob1_rest_kill_count())
        end
        when kill begin
            test_chat(string.format(gameforge.questscroll5._160_chat, npc.get_race().." [ENTER]questscroll5.dest_race:"..questscroll5.get_mob1_vnum()))
            if npc.get_race()==questscroll5.get_mob1_vnum() then
                local mob1_kill_count=questscroll5.get_mob1_cur_kill_count()+1
                questscroll5.set_mob1_cur_kill_count(mob1_kill_count)
                q.set_counter(questscroll5.get_mob1_name(), questscroll5.get_mob1_rest_kill_count())
                if mob1_kill_count>=questscroll5.get_mob1_max_kill_count() then
                    set_state(reward)
                end
            end
        end
    end
    state kill2 begin
        when questscroll1.use or 
            50317.use or 
            50318.use or 
            50319.use or 
            50320.use or 
            50321.use or 
            50322.use or 
            50323.use or 
            50324.use or 
            50325.use begin

            questscroll5.notify_already_running()
        end
        when letter begin
            send_letter(questscroll5.get_title())
        end
        when button or info begin
            say_title(questscroll5.get_title())
            say(questscroll5.get_desc())
            say_reward(questscroll5.get_summ()) 
            say_reward(string.format(gameforge.questscroll5._170_sayReward, questscroll5.get_mob1_name(), questscroll5.get_mob1_rest_kill_count(), questscroll5.get_mob2_name(), questscroll5.get_mob2_rest_kill_count() ))
            questscroll5.show_mission_menu()
        end
        when enter begin
            pc.setqf("mob1_kill_count", 0)
            pc.setqf("mob2_kill_count", 0)
        end
        when leave begin
            pc.setqf("mob1_kill_count", 0)
            pc.setqf("mob2_kill_count", 0)
        end
        when letter begin
            q.set_counter(questscroll5.get_mob1_name(), questscroll5.get_mob1_rest_kill_count())
        end
        when kill begin
            local npc_race=npc.get_race()
            local mob1_kill_count=questscroll5.get_mob1_cur_kill_count()
            local mob2_kill_count=questscroll5.get_mob2_cur_kill_count()

            test_chat(string.format(gameforge.questscroll5._180_chat, npc_race.." [ENTER]questscroll5.dest_race1: ["..questscroll5.get_mob1_vnum().."] [ENTER]questscroll5.dest_race2: ["..questscroll5.get_mob2_vnum()))
            if npc_race==questscroll5.get_mob1_vnum() then
                mob1_kill_count=mob1_kill_count+1
                questscroll5.set_mob1_cur_kill_count(mob1_kill_count)
                q.set_counter(questscroll5.get_mob1_name(), questscroll5.get_mob1_rest_kill_count())
            elseif npc_race==questscroll5.get_mob2_vnum() then
                mob2_kill_count=mob2_kill_count+1
                questscroll5.set_mob2_cur_kill_count(mob2_kill_count)
                q.set_counter(questscroll5.get_mob2_name(), questscroll5.get_mob2_rest_kill_count())
            end

            if	mob1_kill_count>=questscroll5.get_mob1_max_kill_count() and
                mob2_kill_count>=questscroll5.get_mob2_max_kill_count() then
                set_state(reward)
            end
        end
    end
    state reward begin
        when letter begin
            send_letter(questscroll5.get_complete_title())
        end
        when button or info begin
            restart_quest()

            say_title(questscroll5.get_complete_title())

            say(gameforge.questscroll5._190_say)
            local reward_type=questscroll5.get_reward_type()
            if number(0, 100)<=90 then
                local s=number(1, 3)
                if 1==s then
                    questscroll5.reward_exp(reward_type)
                    questscroll5.reward_money(reward_type)
                elseif 2==s then
                    questscroll5.reward_money(reward_type)
                    questscroll5.reward_item(reward_type)
                elseif 3==s then
                    questscroll5.reward_exp(reward_type)
                    questscroll5.reward_item(reward_type)
                end
            else
                questscroll5.reward_exp(reward_type)
                questscroll5.reward_money(reward_type)
                questscroll5.reward_item(reward_type)
            end

                    end
        -- pimped according mantis #118754 to prevent mantis #0042898
        function get_mission()
            -- add addtional check routine for player that have a invalid mission index
            local mission_index = pc.getqf("mission_index")
            
            if mission_index > 56 then
               mission_index = number(50, 56)
							 questscroll5.set_mission(mission_index)
            end
            
            return locale.questscroll5.mission[mission_index] 
        end
        
        function get_title()
            return questscroll5.get_mission()[3]
        end
        function get_complete_title()
            return string.format(gameforge.questscroll5._200_stringFormat, questscroll5.get_title())
        end
        function get_desc()
            return "[WINDOW_SIZE width;360|height;280]"..questscroll5.get_mission()[4]
        end
        function get_summ()
            return questscroll5.get_mission()[5]
        end
        function get_mob1_name()
            return mob_name(questscroll5.get_mob1_vnum())
        end
        function get_mob1_max_kill_count()
            return questscroll5.get_mission()[7]
        end
        function get_mob1_vnum()
            return tonumber(questscroll5.get_mission()[6])
        end
        function get_mob1_rest_kill_count()
            local ret=questscroll5.get_mob1_max_kill_count()-questscroll5.get_mob1_cur_kill_count()
            if ret<0 then return 0 end
            return ret
        end
        function set_mob1_cur_kill_count(value)
            pc.setqf("mob1_kill_count", value)
        end
        function get_mob1_cur_kill_count()
            return pc.getqf("mob1_kill_count")
        end

        function get_mob2_name()
            return mob_name(questscroll5.get_mob2_vnum())
        end
        function get_mob2_max_kill_count()
            return questscroll5.get_mission()[9]
        end
        function get_mob2_vnum()
            return tonumber(questscroll5.get_mission()[8])
        end
        function get_mob2_rest_kill_count()
            local ret=questscroll5.get_mob2_max_kill_count()-questscroll5.get_mob2_cur_kill_count()
            if ret<0 then return 0 end
            return ret
        end
        function set_mob2_cur_kill_count(value)
            pc.setqf("mob2_kill_count", value)
        end
        function get_mob2_cur_kill_count()
            return pc.getqf("mob2_kill_count")
        end

        function reward_table_get_prob_sum(item_array)
            local sum=0
            for i=1, table.getn(item_array) do
                sum=sum+item_array[i][2]
            end
            return sum
        end
        function reward_table_get_value(item_array)
            local prob_sum=questscroll5.reward_table_get_prob_sum(item_array)
            local prob_pos=number(0, prob_sum)

            test_chat(string.format(gameforge.questscroll5._210_chat, prob_pos))
            for i=1, table.getn(item_array) do
                prob_cur=item_array[i][2]
                if prob_pos<=prob_cur then
                    return item_array[i][1]
                end
                prob_pos=prob_pos-prob_cur
            end

            chat(gameforge.questscroll5._220_chat)
            return 0
        end
        function get_reward_type()
            return questscroll5.get_mission()[2]
        end
        function get_reward_money(reward_type)
            return questscroll5.reward_table_get_value(locale.questscroll5.reward_money[reward_type])
        end
        function get_reward_exp(reward_type)
            return questscroll5.reward_table_get_value(locale.questscroll5.reward_exp[reward_type])
        end
        function get_reward_item(reward_type)
            return questscroll5.reward_table_get_value(locale.questscroll5.reward_item[reward_type])
        end
        function reward_money(reward_type)
            local reward_money=questscroll5.get_reward_money(reward_type)
            if reward_money>1000 and reward_money<=200000 then
                pc.change_money(reward_money)
                say_reward(string.format(gameforge.questscroll5._230_sayReward, reward_money))
            else
                chat(string.format(gameforge.questscroll5._240_chat, reward_type))
            end
        end
        function reward_exp(reward_type)
            local reward_exp=questscroll5.get_reward_exp(reward_type)
            if reward_exp>1000 and reward_exp<=300000 then
                pc.give_exp2(reward_exp)
                set_quest_state("levelup", "run")
                say_reward(string.format(gameforge.questscroll5._250_sayReward, reward_exp))
            else
                chat(string.format(gameforge.questscroll5._260_chat, reward_type))
            end
        end
        function reward_item(reward_type)
            local reward_item=questscroll5.get_reward_item(reward_type)
            pc.give_item2(reward_item)
            say_reward(string.format(gameforge.questscroll5._270_sayReward, item_name(reward_item)))
        end
    end
end