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