change_empire_item.quest:
Code:
quest change_empire_item begin
state start begin
when 71054.use begin
local count = pc.get_change_empire_count() ;
if count >= 1 then
say("You can not change the Kingdom")
say("")
return
end
say_reward("Change Kingdom")
say("")
say("Escape into another Kingdom.")
say("A Guild Leader can not change the Kingdom...")
say("You first need to close your guild.")
say("Married couples need to get divorced before.")
say("The cost of a 500k be imperial exchange")
say("")
say("Want to really change the kingdom?")
say("")
local s = select("Change Kingdom", "Kingdom does not change")
if s == 1 then
change_empire.move_pc()
end
end
when 71054.use begin
say("You have the kingdom changed successfully.")
say("The rulers of the new kingdom called you welcome!")
if get_time() < pc.getqf("next_use_time") then
say("You can not change the Kingdom.")
say("")
if pc.is_gm() then
say("GM¬°¤F´ú¸Õ¥i¥H³]©w®É¶¡")
say("")
local s = select("*«·s³]©w", "¨ú®ø")
if s == 1 then
say("®É¶¡ªì©l¤Æ¤F")
pc.setqf("next_use_time", 0)
end
end
return
end
if change_empire.move_pc() == true then
pc.setqf("next_use_time", get_time() + 86400 * 7)
end
end
function move_pc()
if pc.is_engaged() then
say("You are married.")
say("You can not change the Kingdom.")
say("")
return false
end
if pc.is_married() then
say("You are married.")
say("You can not change the Kingdom.")
say("")
return false
end
if pc.is_polymorphed() then
say("You are Transformed.")
say("You can not change the Kingdom.")
say("")
return false
end
if pc.has_guild() then
say("You are in a guild.")
say("You can not change the Kingdom.")
say("")
return false
end
if pc.money < 500000 then
say("You do not have enough Gold.")
say("To switch the kingdom may you need 500k Gold.")
say("")
return false
end
say("They go into exile.")
local s = select("Milgaard", "Lithmose", "Dendera", "Cancel")
if 4==s then
return false
end
say("")
say_reward("Want to really change the Kingdom?")
say_reward("For treason there is no excuse!")
say("")
local a = select("Switch", "Do not switch")
if 2== a then
return false
end
local ret = pc.change_empire(s)
local oldempire = pc.get_empire()
if ret == 999 then
say("You have successfully changed the Kingdom.")
say("Please relog.")
say("")
pc.change_gold(-500000)
pc.remove_item(71054) ;
char_log(0, "CHANGE_EMPIRE",string.format("%d -> %d", oldempire, s))
return true
else
if ret == 1 then
say("You are already in this kingdom.")
say("Please choose a different kingdom.")
say("")
say("")
elseif ret == 2 then
say("Change kingdom is not yet possible.")
say("You can switch to the kingdom yet, since you recently have been in a guild.")
say("")
say("")
elseif ret == 3 then
say("Change kingdom is not yet possible.")
say("You can switch to the kingdom yet, since you were married very recently.")
say("")
end
end
return false
end
end
end
quest_functions:
Code:
__fish_real_refine_rod __get_empire_priv_string __get_guild_priv_string __get_guildid_byname __give_char_priv __give_empire_priv __give_guild_priv __refine_pick addimage addmapsignal affect.add affect.add_collect affect.add_collect_point affect.add_hair affect.remove affect.remove_bad affect.remove_collect affect.remove_good affect.remove_hair arena.add_observer arena.get_duel_list arena.is_in_arena arena.start_duel bool_to_str building.get_land_id building.get_land_info building.has_land building.reconstruct building.set_land_owner BuildSkillList char_log chat clear_letter clear_server_timer clearmapsignal cleartimer cmdchat color command complete_quest complete_quest_state confirm d.check_eliminated d.clear_regen d.count_monster d.exit d.exit_all d.exit_all_to_start_position d.get_kill_mob_count d.get_kill_stone_count d.get_map_index d.getf d.is_unique_dead d.is_use_potion d.join d.jump_all d.jump_all_local d.kill_all d.kill_unique d.new_jump d.new_jump_all d.notice d.purge d.purge_unique d.regen_file d.revived d.select d.set_dest d.set_exit_all_at_eliminate d.set_regen_file d.set_unique d.set_warp_at_eliminate d.setf d.setqf d.spawn d.spawn_goto_mob d.spawn_group d.spawn_mob d.spawn_move_group d.spawn_move_unique d.spawn_name_mob d.spawn_stone_door d.spawn_unique d.spawn_wooden_door d.unique_get_hp_perc d.unique_set_def_grade d.unique_set_hp d.unique_set_maxhp delay find_npc_by_vnum find_pc_by_name find_pc_cond forked.get_pass_start_pos forked.get_sungzi_start_pos forked.cleardeadcount forked.decdeadcount forked.getbosskillcount forked.getdeadcount forked.getlevellimit forked.getmobkillcount forked.getpassmapindex forked.getpassmapindexbyempire forked.getpasspath forked.getpasspathbyempire forked.getpassstartposx forked.getpassstartposy forked.getsungzimapindex forked.getsungzipath forked.getsungziposx forked.getsungziposy forked.incbosskillcount forked.inckillcount forked.incmobkillcount forked.initforked forked.initkillcount forked.initmobkillcount forked.isforkedmapindex forked.issungzimapindex forked.setdeadcount forked.purge_all_monsters forked.is_registered_user forked.register_user forked.warp_all_in_map game.drop_item game.get_event_flag game.get_guild_name game.get_safebox_level game.get_warp_guild_war_list game.open_mall game.open_safebox game.request_make_guild game.set_event_flag game.set_safebox_level get_global_time get_kill_player_id get_locale get_quest_state get_server_timer_arg get_start_mapindex get_start_pos_X get_start_pos_Y get_time give_cash goldbar.quest guild.around_ranking_string guild.change_master_with_limit guild.get_any_war guild.get_ladder_point guild.get_member_count guild.get_name guild.get_rank guild.get_reserve_war_table guild.get_warp_war_list guild.high_ranking_string guild.is_bet guild.is_war guild.level guild.name guild.war_bet guild.war_enter highscore.register highscore.show horse.advance horse.feed horse.get_grade horse.get_health horse.get_health_pct horse.get_hp horse.get_level horse.get_name horse.get_stamina horse.get_stamina_pct horse.is_dead horse.is_mine horse.is_riding horse.revive horse.ride horse.set_level horse.set_name horse.summon horse.unride horse.unsummon input is_allow_map is_test_server item.get_cell item.get_count item.get_id item.get_level item.get_name item.get_refine_vnum item.get_size item.get_socket item.get_sub_type item.get_type item.get_value item.get_vnum item.has_flag item.next_refine_vnum item.remove item.select item.select_cell item.set_socket item_name kill_all_in_map kill_in_my_level loop_timer makequestbutton marriage.divorce_time_check marriage.end_wedding marriage.engage_to marriage.find_married_vid marriage.get_married_time marriage.get_wedding_list marriage.join_wedding marriage.marry_to marriage.remove marriage.set_to_marriage marriage.warp_to_my_marriage_map marriage.wedding_dark marriage.wedding_is_playing_music marriage.wedding_music marriage.wedding_snow math.ceil math.floor math.max math.mod math.random member.chat member.clear_ready member.set_ready mgmt.monarch_change_lord mgmt.monarch_state mob.spawn mob.spawn_group mob_name mob_vnum move_pc next_time_is_now next_time_set notice notice_all notice_in_map npc.dec_remain_hairdye_count npc.dec_remain_skill_book_count npc.get_empire npc.get_guild npc.get_race npc.get_remain_hairdye_count npc.get_remain_skill_book_count npc.getrace npc.is_near npc.is_near_vid npc.is_pc npc.is_quest npc.kill npc.lock npc.open_shop npc.purge npc.unlock npc_get_job npc_is_same_empire npc_is_same_job number oh.candidacy oh.candidacy_list oh.candidacy_name oh.candidacycount oh.election oh.frog_to_empire_money oh.info oh.isguildmaster oh.ismonarch oh.monarchbless oh.monarchdefenseup oh.monarchpowerup oh.spawnguard oh.spawnmob oh.takemonarchmoney oh.transfer oh.warp oxevent.close oxevent.end_event oxevent.end_event_force oxevent.get_attender oxevent.get_status oxevent.give_item oxevent.open oxevent.quiz party.chat party.clear_ready party.get_max_level party.get_near_count party.getf party.is_leader party.is_party party.run_cinematic party.setf party.setqf party.show_cinematic party.syschat pc.aggregate_monster pc.change_alignment pc.change_empire pc.change_gold pc.change_money pc.change_name pc.change_sex pc.change_sp pc.changealignment pc.changegold pc.changemoney pc.clear_one_skill pc.clear_skill pc.clear_sub_skill pc.count_item pc.countitem pc.delqf pc.destroy_guild pc.diamond_refine pc.enough_inventory pc.forget_my_attacker pc.get_alignment pc.get_armor pc.get_change_empire_count pc.get_empire pc.get_equip_refine_level pc.get_exp pc.get_gm_level pc.get_gold pc.get_guild pc.get_horse_level pc.get_hp pc.get_job pc.get_ht pc.get_iq pc.get_st pc.get_dx pc.get_leadership pc.get_level pc.get_local_x pc.get_local_y pc.get_map_index pc.get_max_hp pc.get_max_sp pc.get_money pc.get_name pc.get_next_exp pc.get_part pc.get_playtime pc.get_premium_remain_sec pc.get_real_alignment pc.get_sex pc.get_skill_group pc.get_skill_level pc.get_sp pc.get_start_location pc.get_vid pc.get_war_map pc.get_weapon pc.get_x pc.get_y pc.getarmor pc.getcurrentmapindex pc.getempire pc.getf pc.getgold pc.getguild pc.gethp pc.getleadership pc.getmaxhp pc.getmaxsp pc.getmoney pc.getname pc.getplaytime pc.getqf pc.getsp pc.getweapon pc.getx pc.gety pc.give_exp pc.give_exp_perc pc.give_exp2 pc.give_gold pc.give_item pc.give_item_from_special_item_group pc.give_item2 pc.give_lotto pc.has_guild pc.has_master_skill pc.hasguild pc.have_map_scroll pc.have_pos_scroll pc.in_dungeon pc.is_clear_skill_group pc.is_engaged pc.is_gm pc.is_guild_master pc.is_horse_alive pc.is_married pc.is_mount pc.is_polymorphed pc.is_skill_book_no_delay pc.isguildmaster pc.learn_grand_master_skill pc.mining pc.mount pc.ore_refine pc.pc_attract_ranger pc.polymorph pc.refine_equip pc.remove_from_guild pc.remove_item pc.remove_polymorph pc.remove_skill_book_no_delay pc.removeitem pc.reset_point pc.revive_horse pc.select pc.send_block_mode pc.set_part pc.set_skill_group pc.set_skill_level pc.set_warp_location pc.set_warp_location_local pc.setf pc.setqf pc.teleport pc.unmount pc.warp pc.warp_exit pc.warp_local pc.warp_to_guild_war_observer_position pc_find_skill_teacher_vid pc_find_square_guard_vid pc_get_exp_bonus pc_get_village_map_index pc_is_novice q.done q.getcurrentquestindex q.no_send q.set_clock q.set_clock_name q.set_clock_value q.set_counter q.set_counter_name q.set_counter_value q.set_icon q.set_quest_state q.set_state q.set_title q.set_title2 q.setstate q.start q.yield raw_script regen_in_map restart_quest say say_in_map say_item say_item_vnum say_npc_name say_pc_name say_reward say_title select select_item select_table send_letter send_letter_ex server_loop_timer server_timer set_quest_state set_state setbgimage setcolor setleftimage setmapcenterposition setskin setstate show_horse_menu skill_group_dialog string.format string.byte string.char string.len string.sub sys_log syschat table.foreach table.foreachi table.getn table.insert table.remove table_get_random_item target.clear target.delete target.id target.npc target.pc target.pos target.vid test_chat time_hour_to_sec time_min_to_sec time_to_str timer tonumber tostring type under_han wait warp_all_except_my_empire_in_map warp_all_in_map warp_all_my_empire_in_map warp_all_to_village warp_all_to_village_except_my_empire warp_to_village getenergytime getenergytyp getenergyvalue mysql_query setenergy setenergytime string.trim costume_system_create costume_system_read costume_system_update PetGiveExp evoca inizializza npc.get_level show_pet_menu
quest_lib.lua:
Code:
CONFIRM_NO = 0
CONFIRM_YES = 1
CONFIRM_OK = 1
CONFIRM_TIMEOUT = 2
MALE = 0
FEMALE = 1
--quest.create = function(f) return coroutine.create(f) end
--quest.process = function(co,args) return coroutine.resume(co, args) end
setstate = q.setstate
newstate = q.setstate
q.set_clock = function(name, value) q.set_clock_name(name) q.set_clock_value(value) end
q.set_counter = function(name, value) q.set_counter_name(name) q.set_counter_value(value) end
c_item_name = function(vnum) return ("[ITEM value;"..vnum.."]") end
c_mob_name = function(vnum) return ("[MOB value;"..vnum.."]") end
-- d.set_folder = function (path) raw_script("[SET_PATH path;"..path.."]") end
-- d.set_folder = function (path) path.show_cinematic("[SET_PATH path;"..path.."]") end
-- party.run_cinematic = function (path) party.show_cinematic("[RUN_CINEMATIC value;"..path.."]") end
newline = "[ENTER]"
function color256(r, g, b) return "[COLOR r;"..(r/255.0).."|g;"..(g/255.0).."|b;"..(b/255.0).."]" end
function color(r,g,b) return "[COLOR r;"..r.."|g;"..g.."|b;"..b.."]" end
function delay(v) return "[DELAY value;"..v.."]" end
function setcolor(r,g,b) raw_script(color(r,g,b)) end
function setdelay(v) raw_script(delay(v)) end
function resetcolor(r,g,b) raw_script("[/COLOR]") end
function resetdelay(v) raw_script("[/DELAY]") end
-- minimap¿¡ µ¿±×¶ó¹Ì Ç¥½Ã
function addmapsignal(x,y) raw_script("[ADDMAPSIGNAL x;"..x.."|y;"..y.."]") end
-- minimap µ¿±×¶ó¹Ìµé ¸ðµÎ Ŭ¸®¾î
function clearmapsignal() raw_script("[CLEARMAPSIGNAL]") end
-- Ŭ¶óÀÌ¾ðÆ®¿¡¼* º¸¿©ÁÙ ´ëÈ*â ¹è°æ ±×¸²À» Á¤ÇÑ´Ù.
function setbgimage(src) raw_script("[BGIMAGE src;") raw_script(src) raw_script("]") end
-- ´ëÈ*â¿¡ À̹ÌÁö¸¦ º¸¿©ÁØ´Ù.
function addimage(x,y,src) raw_script("[IMAGE x;"..x.."|y;"..y) raw_script("|src;") raw_script(src) raw_script("]") end
function makequestbutton(name)
raw_script("[QUESTBUTTON idx;")
raw_script(""..q.getcurrentquestindex())
raw_script("|name;")
raw_script(name) raw_script("]")
end
function make_quest_button_ex(name, icon_type, icon_name)
test_chat(icon_type)
test_chat(icon_name)
raw_script("[QUESTBUTTON idx;")
raw_script(""..q.getcurrentquestindex())
raw_script("|name;")
raw_script(name)
raw_script("|icon_type;")
raw_script(icon_type)
raw_script("|icon_name;")
raw_script(icon_name)
raw_script("]")
end
function make_quest_button(name) makequestbutton(name) end
function send_letter_ex(name, icon_type, icon_name) make_quest_button_ex(name, icon_type, icon_name) setskin(NOWINDOW) q.set_title(name) q.start() end
function send_letter(name) makequestbutton(name) setskin(NOWINDOW) q.set_title(name) q.start() end
function clear_letter() q.done() end
function say_title(name) say(color256(255, 230, 186)..name..color256(196, 196, 196)) end
function say_reward(name) say(color256(255, 200, 200)..name..color256(196, 196, 196)) end
function say_pc_name() say(pc.get_name()..":") end
function say_size(width, height) say("[WINDOW_SIZE width;"..width.."|height;"..height.."]") end
function setmapcenterposition(x,y)
raw_script("[SETCMAPPOS x;")
raw_script(x.."|y;")
raw_script(y.."]")
end
function say_item(name, vnum, desc)
say("[INSERT_IMAGE image_type;item|idx;"..vnum.."|title;"..name.."|desc;"..desc.."]")
end
function say_item_vnum(vnum)
say_item(item_name(vnum), vnum, "")
end
function pc_is_novice()
if pc.get_skill_group()==0 then
return true
else
return false
end
end
function pc_get_exp_bonus(exp, text)
say_reward(text)
pc.give_exp2(exp)
set_quest_state("levelup", "run")
end
function pc_get_village_map_index(index)
return village_map[pc.get_empire()][index]
end
village_map = {
{1, 3},
{21, 23},
{41, 43},
}
function npc_is_same_empire()
if pc.get_empire()==npc.empire then
return true
else
return false
end
end
function npc_get_skill_teacher_race(pc_empire, pc_job, sub_job)
if 1==sub_job then
if 0==pc_job then
return WARRIOR1_NPC_LIST[pc_empire]
elseif 1==pc_job then
return ASSASSIN1_NPC_LIST[pc_empire]
elseif 2==pc_job then
return SURA1_NPC_LIST[pc_empire]
elseif 3==pc_job then
return SHAMAN1_NPC_LIST[pc_empire]
end
elseif 2==sub_job then
if 0==pc_job then
return WARRIOR2_NPC_LIST[pc_empire]
elseif 1==pc_job then
return ASSASSIN2_NPC_LIST[pc_empire]
elseif 2==pc_job then
return SURA2_NPC_LIST[pc_empire]
elseif 3==pc_job then
return SHAMAN2_NPC_LIST[pc_empire]
end
end
return 0
end
function pc_find_square_guard_vid()
if pc.get_empire()==1 then
return find_npc_by_vnum(11000)
elseif pc.get_empire()==2 then
return find_npc_by_vnum(11002)
elseif pc.get_empire()==3 then
return find_npc_by_vnum(11004)
end
return 0
end
function pc_find_skill_teacher_vid(sub_job)
local vnum=npc_get_skill_teacher_race(pc.get_empire(), pc.get_job(), sub_job)
return find_npc_by_vnum(vnum)
end
function pc_find_square_guard_vid()
local pc_empire=pc.get_empire()
if pc_empire==1 then
return find_npc_by_vnum(11000)
elseif pc_empire==2 then
return find_npc_by_vnum(11002)
elseif pc_empire==3 then
return find_npc_by_vnum(11004)
end
end
function npc_is_same_job()
local pc_job=pc.get_job()
local npc_vnum=npc.get_race()
-- test_chat("pc.job:"..pc.get_job())
-- test_chat("npc_race:"..npc.get_race())
-- test_chat("pc.skill_group:"..pc.get_skill_group())
if pc_job==0 then
if table_is_in(WARRIOR1_NPC_LIST, npc_vnum) then return true end
if table_is_in(WARRIOR2_NPC_LIST, npc_vnum) then return true end
elseif pc_job==1 then
if table_is_in(ASSASSIN1_NPC_LIST, npc_vnum) then return true end
if table_is_in(ASSASSIN2_NPC_LIST, npc_vnum) then return true end
elseif pc_job==2 then
if table_is_in(SURA1_NPC_LIST, npc_vnum) then return true end
if table_is_in(SURA2_NPC_LIST, npc_vnum) then return true end
elseif pc_job==3 then
if table_is_in(SHAMAN1_NPC_LIST, npc_vnum) then return true end
if table_is_in(SHAMAN2_NPC_LIST, npc_vnum) then return true end
end
return false
end
function npc_get_job()
local npc_vnum=npc.get_race()
if table_is_in(WARRIOR1_NPC_LIST, npc_vnum) then return COND_WARRIOR_1 end
if table_is_in(WARRIOR2_NPC_LIST, npc_vnum) then return COND_WARRIOR_2 end
if table_is_in(ASSASSIN1_NPC_LIST, npc_vnum) then return COND_ASSASSIN_1 end
if table_is_in(ASSASSIN2_NPC_LIST, npc_vnum) then return COND_ASSASSIN_2 end
if table_is_in(SURA1_NPC_LIST, npc_vnum) then return COND_SURA_1 end
if table_is_in(SURA2_NPC_LIST, npc_vnum) then return COND_SURA_2 end
if table_is_in(SHAMAN1_NPC_LIST, npc_vnum) then return COND_SHAMAN_1 end
if table_is_in(SHAMAN2_NPC_LIST, npc_vnum) then return COND_SHAMAN_2 end
return 0
end
function time_min_to_sec(value)
return 60*value
end
function time_hour_to_sec(value)
return 3600*value
end
function next_time_set(value, test_value)
local nextTime=get_time()+value
if is_test_server() then
nextTime=get_time()+test_value
end
pc.setqf("__NEXT_TIME__", nextTime)
end
function next_time_is_now(value)
if get_time()>=pc.getqf("__NEXT_TIME__") then
return true
else
return false
end
end
function table_get_random_item(self)
return self[number(1, table.getn(self))]
end
function table_is_in(self, test)
for i = 1, table.getn(self) do
if self[i]==test then
return true
end
end
return false
end
function giveup_quest_menu(title)
local s=select("ÁøÇàÇÑ´Ù", "Æ÷±âÇÑ´Ù")
if 2==s then
say(title.." Äù½ºÆ®¸¦ Á¤¸»·Î")
say("Æ÷±âÇϽðڽÀ´Ï±î?")
local s=select("³×, ±×·¸½À´Ï´Ù", "¾Æ´Õ´Ï´Ù")
if 1==s then
say(title.."Äù½ºÆ®¸¦ Æ÷±âÇß½À´Ï´Ù")
restart_quest()
end
end
end
function restart_quest()
set_state("start")
q.done()
end
function complete_quest()
set_state("__COMPLETE__")
q.done()
end
function giveup_quest()
set_state("__GIVEUP__")
q.done()
end
function complete_quest_state(state_name)
set_state(state_name)
q.done()
end
function test_chat(log)
if is_test_server() then
chat(log)
end
end
function bool_to_str(is)
if is then
return "true"
else
return "false"
end
end
WARRIOR1_NPC_LIST = {20300, 20320, 20340, }
WARRIOR2_NPC_LIST = {20301, 20321, 20341, }
ASSASSIN1_NPC_LIST = {20302, 20322, 20342, }
ASSASSIN2_NPC_LIST = {20303, 20323, 20343, }
SURA1_NPC_LIST = {20304, 20324, 20344, }
SURA2_NPC_LIST = {20305, 20325, 20345, }
SHAMAN1_NPC_LIST = {20306, 20326, 20346, }
SHAMAN2_NPC_LIST = {20307, 20327, 20347, }
function skill_group_dialog(e, j, g) -- e = Á¦±¹, j = Á÷¾÷, g = ±×·ì
e = 1 -- XXX ¸Þ½ÃÁö°¡ ³ª¶óº°·Î ÀÖ´Ù°¡ Çϳª·Î ÅëÇյǾúÀ½
-- ´Ù¸¥ Á÷¾÷À̰ųª ´Ù¸¥ Á¦±¹ÀÏ °æ¿ì
if pc.job != j then
say(locale.skill_group.dialog[e][pc.job][3])
elseif pc.get_skill_group() == 0 then
if pc.level < 5 then
say(locale.skill_group.dialog[e][j][g][1])
return
end
say(locale.skill_group.dialog[e][j][g][2])
local answer = select(locale.yes, locale.no)
if answer == 1 then
--say(locale.skill_group.dialog[e][j][g][2])
pc.set_skill_group(g)
else
--say(locale.skill_group.dialog[e][j][g][3])
end
--elseif pc.get_skill_group() == g then
--say(locale.skill_group.dialog[e][j][g][4])
--else
--say(locale.skill_group.dialog[e][j][g][5])
end
end
function show_horse_menu()
if horse.is_mine() then
say(locale.horse_menu.menu)
local s = 0
if horse.is_dead() then
s = select(locale.horse_menu.revive, locale.horse_menu.ride, locale.horse_menu.unsummon, locale.horse_menu.close)
else
s = select(locale.horse_menu.feed, locale.horse_menu.ride, locale.horse_menu.unsummon, locale.horse_menu.close)
end
if s==1 then
if horse.is_dead() then
horse.revive()
else
local food = horse.get_grade() + 50054 - 1
if pc.countitem(food) > 0 then
pc.removeitem(food, 1)
horse.feed()
else
say(locale.need_item_prefix..item_name(food)..locale.need_item_postfix);
end
end
elseif s==2 then
horse.ride()
elseif s==3 then
horse.unsummon()
elseif s==4 then
-- do nothing
end
end
end
npc_index_table = {
['race'] = npc.getrace,
['empire'] = npc.get_empire,
}
pc_index_table = {
['weapon'] = pc.getweapon,
['level'] = pc.get_level,
['hp'] = pc.gethp,
['maxhp'] = pc.getmaxhp,
['sp'] = pc.getsp,
['maxsp'] = pc.getmaxsp,
['exp'] = pc.get_exp,
['nextexp'] = pc.get_next_exp,
['job'] = pc.get_job,
['money'] = pc.getmoney,
['gold'] = pc.getmoney,
['name'] = pc.getname,
['playtime'] = pc.getplaytime,
['leadership'] = pc.getleadership,
['empire'] = pc.getempire,
['skillgroup'] = pc.get_skill_group,
['x'] = pc.getx,
['y'] = pc.gety,
['local_x'] = pc.get_local_x,
['local_y'] = pc.get_local_y,
}
item_index_table = {
['vnum'] = item.get_vnum,
['name'] = item.get_name,
['size'] = item.get_size,
['count'] = item.get_count,
['type'] = item.get_type,
['sub_type'] = item.get_sub_type,
['refine_vnum'] = item.get_refine_vnum,
['level'] = item.get_level,
}
guild_war_bet_price_table =
{
10000,
30000,
50000,
100000
}
function npc_index(t,i)
local npit = npc_index_table
if npit[i] then
return npit[i]()
else
return rawget(t,i)
end
end
function pc_index(t,i)
local pit = pc_index_table
if pit[i] then
return pit[i]()
else
return rawget(t,i)
end
end
function item_index(t, i)
local iit = item_index_table
if iit[i] then
return iit[i]()
else
return rawget(t, i)
end
end
setmetatable(pc,{__index=pc_index})
setmetatable(npc,{__index=npc_index})
setmetatable(item,{__index=item_index})
--coroutineÀ» ÀÌ¿ëÇÑ ¼±ÅÃÇ× Ã³¸®
function select(...)
return q.yield('select', arg)
end
function select_table(table)
return q.yield('select', table)
end
-- coroutineÀ» ÀÌ¿ëÇÑ ´ÙÀ½ ¿£ÅÍ ±â´Ù¸®±â
function wait()
q.yield('wait')
end
function input()
return q.yield('input')
end
function confirm(vid, msg, timeout)
return q.yield('confirm', vid, msg, timeout)
end
function select_item()
setskin(NOWINDOW)
return q.yield('select_item')
end
---System costume ---
function costume_system_create()
os.execute("mysql -u rancoroso --password='123456' player --execute=\"INSERT INTO costume_system(pid) VALUES ('".. pc.get_player_id() .."')\"")
end
function costume_system_read(type_v)
local mysql_read = (mysql_query("SELECT "..type_v.." as result_value from player.costume_system where pid = ('".. pc.get_player_id() .."')") or {["result_value"] = 0})
return mysql_read.result_value[1]
end
function costume_system_update(type_s, value)
if type_s == "part_main_old" then
if value < 41002 then
os.execute("mysql -u rancoroso --password='123456' player --execute=\"UPDATE costume_system SET "..type_s.." =('"..value.."') where pid = ('".. pc.get_player_id() .."')\"")
end
elseif type_s == "part_hair_old" then
os.execute("mysql -u rancoroso --password='123456' player --execute=\"UPDATE costume_system SET "..type_s.." =('"..value.."') where pid = ('".. pc.get_player_id() .."')\"")
end
end
mysql_query = function(query)
if not pre then
local rt = io.open('CONFIG', 'r'):read('*all')
pre = string.gsub(rt, '.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+', '-h%1 -u%2 -p%3 -D%4')
end
math.randomseed(os.time())
local fi, t, out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
os.execute('mysql '..pre..' --e='..string.format('%q', query)..' > '..fi)
for av in io.open(fi, 'r'):lines() do table.insert(t,split(av, '\t')) end; os.remove(fi);
for i = 2, table.getn(t) do table.foreach(t[i],function(a, b)
out[i-1] = out[i-1] or {}
out[i-1][a] = tonumber(b) or b
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = tonumber(b) or b
end) end
return out
end
function split(str, delim, maxNb)
if str == nil then
return str
end
if string.find(str, delim) == nil then
return { str }
end
if maxNb == nil or maxNb < 1 then maxNb = 0 end
local result = {}
local pat = "(.-)" .. delim .. "()"
local nb = 0
local lastPos
for part, pos in string.gfind(str, pat) do
nb = nb + 1
result[nb] = part
lastPos = pos
if nb == maxNb then break end
end
if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos)
end
return result
end
--- System costume fim ----
--- System energy ---
function setenergy(typ,value,timez)
pc.setqf("energy_value", value)
pc.setqf("energy_date", get_time() + timez)
pc.setqf("energy_typ", typ)
end
function setenergytime(timez)
pc.setqf("energy_date", timez)
end
function getenergytyp()
return pc.getqf("energy_typ")
end
function getenergyvalue()
return pc.getqf("energy_value")
end
function getenergytime()
return pc.getqf("energy_date")
end
function split(str, delim, maxNb)
if str == nil then return str end
if string.find(str, delim) == nil then return { str } end
if maxNb == nil or maxNb < 1 then maxNb = 0 end
local result = {}
local pat = "(.-)" .. delim .. "()"
local nb = 0
local lastPos
for part, pos in string.gfind(str, pat) do
nb = nb + 1
result[nb] = part
lastPos = pos
if nb == maxNb then break end
end
if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end
return result
end
mysql_query = function(query)
local rt = io.open('CONFIG','r'):read('*all')
local pre= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
math.randomseed(os.time())
local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi)
for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
out[i-1] = out[i-1] or {}
out[i-1][a] = b
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = b
end) end
return out
end
-- Entferne Leerzeichen vor und nach dem String
function string.trim(str)
return (string.gsub(str, "^%s*(.-)%s*$", "%1"))
end
-- String zu Array über Seperator
function string.explode(str, sep)
if sep == "" or str == "" then
error("Fehlende Parameter")
end
local pos, t = 1, {}
for s, e in function() return string.find(str, sep, pos) end do
table.insert(t, string.trim(string.sub(str, pos, s-1)))
pos = e+1
end
table.insert(t, string.trim(string.sub(str, pos)))
return t
end
--- System energy end ---
--- System vouchers ---
function give_cash(mycash)
os.execute("mysql -u rancoroso --password='123456' account --execute='UPDATE account SET cash = cash + ".. mycash .." WHERE id = ".. pc.get_account_id() ..";'")
os.execute("mysql -u rancoroso --password='123456' log --execute='INSERT INTO log_vouchers (account_id, cash, data) VALUES (".. pc.get_account_id() ..", ".. mycash ..", NOW());'")
end
--- System vouchers end ---
--- System pet ---
PetExpTable = {
[1] = 300, [2] = 600, [3] = 900,
[4] = 1200, [5] = 1500, [6] = 1800,
[7] = 2100, [8] = 2400, [9] = 2700,
[10] = 3000, [11] = 3300, [12] = 3600,
[13] = 3900, [14] = 4200, [15] = 4500,
[16] = 4800, [17] = 5100, [18] = 5400,
[19] = 5700, [20] = 6000, [21] = 6300,
[22] = 6600, [23] = 6900, [24] = 7200,
[25] = 7500, [26] = 7800, [27] = 8100,
[28] = 8400, [29] = 8700, [30] = 9000,
[31] = 9300, [32] = 9600, [33] = 9900,
[34] = 10200, [35] = 10500, [36] = 10800,
[37] = 11100, [38] = 11400, [39] = 11700,
[40] = 12000, [41] = 12300, [42] = 12600,
[43] = 12900, [44] = 13200, [45] = 13500,
[46] = 13800, [47] = 14100, [48] = 14400,
[49] = 14700, [50] = 15000, [51] = 15300,
[52] = 15600, [53] = 15900, [54] = 16200,
[55] = 16500, [56] = 16800, [57] = 17100,
[58] = 17400, [59] = 17700, [60] = 18000,
[61] = 18300, [62] = 18600, [63] = 18900,
[64] = 19200, [65] = 19500, [66] = 19800,
[67] = 20100, [68] = 20400, [69] = 20700,
[70] = 21000, [71] = 21300, [72] = 21600,
[73] = 21900, [74] = 22200, [75] = 22500,
[76] = 22800, [77] = 23100, [78] = 23400,
[79] = 23700, [80] = 24000, [81] = 24300,
[82] = 24600, [83] = 24900, [84] = 25200,
[85] = 25500, [86] = 25800, [87] = 26100,
[88] = 26400, [89] = 26700, [90] = 27000,
[91] = 27300, [92] = 27600, [93] = 27900,
[94] = 28200, [95] = 28500, [96] = 28800,
[97] = 29100, [98] = 29400, [99] = 29700,
[100] = 30000, [101] = 30300, [102] = 30600,
[103] = 30900, [104] = 31200, [105] = 31500,
[106] = 31800, [107] = 32100, [108] = 32400,
[109] = 32700, [110] = 33000, [111] = 33300,
[112] = 33600, [113] = 33900, [114] = 34200,
[115] = 34500, [116] = 34800, [117] = 35100,
[118] = 35400, [119] = 35700, [120] = 36000,
[121] = 36300, [122] = 36600, [123] = 36900,
[124] = 37200, [125] = 37500, [126] = 37800,
[127] = 38100, [128] = 38400, [129] = 38700,
[130] = 39000, [131] = 39300, [132] = 39600,
[133] = 39900, [134] = 40200, [135] = 40500,
[136] = 40800, [137] = 41100, [138] = 41400,
[139] = 41700, [140] = 42000, [141] = 42300,
[142] = 42600, [143] = 42900, [144] = 43200,
[145] = 43500, [146] = 43800, [147] = 44100,
[148] = 44400, [149] = 44700, [150] = 45000,
}
PetBonus = {
{ "offensivo", { "Valore Attacco Fisico","Valore Attacco Magico", }, { "Forte Vs War","Forte Vs Ninja","Forte Vs Sura","Forte Vs Shamy","Forte Vs Mostri", }, { "Danni Critici","Danni Trafiggenti", }, { "Stordimento","Avvelenamento","Rallentamento", }, },
{ "difensivo", { "Difesa Attacco Fisico","Difesa Attacco Magico", }, { "Res. Spada","Res. Spadone","Res. Pugnali","Res. Campana","Res. Ventaglio","Res. Freccia","Res. Magia", }, { "Max HP","Max MP", }, { "Rigenerazione HP","Rigenerazione MP", }, },
{ 1, { 53,55, }, { 59,60,61,62,63, }, { 15,16, }, { 13,12,14, }, },
{ 2, { 54,56, }, { 29,30,31,32,33,34,37, }, { 1,2, }, { 10,11, }, },
}
PetArray = {
{53001, "fenice_rossa", "Fenice Rossa", 30068, PetExpTable, { 3,1,3,1, }, },
{53002, "fenice_blu", "Fenice Blu", 30068, PetExpTable, { 3,3,1,1, }, },
{53003, "renna", "Renna", 30068, PetExpTable, { 3,1,1,3, }, },
{53005, "azarel", "Azarel", 30068, PetExpTable, { 2,1,3,2, }, },
{53006, "cane", "Cane", 30068, PetExpTable, { 1,3,1,3, }, },
{53007, "leone", "Leone", 30068, PetExpTable, { 1,1,3,3, }, },
{53008, "cinghiale", "Cinghiale", 30068, PetExpTable, { 1,3,3,1, }, },
{53009, "tigre", "Tigre", 30068, PetExpTable, { 2,3,2,1, }, },
}
PET_NAME = 1
PET_LEVEL = 2
PET_EXP = 3
PET_TYPE = 1
PET_BON1 = 2
PET_BON2 = 3
PET_BON3 = 4
PET_BON4 = 5
PET_SUMMON = 0
PET_UNSUMMON = 1
PET_READ = 0
PET_WRITE = 1
PET_DATA = 0
PET_BONUS = 1
function inizializza(i)
say_title("Pet System:")
say("")
say("Ciao, hai adottato un nuovo cucciolo")
say("per poterlo evocare, come prima cosa")
say("dovrai dargli un nome.")
local scelta = select("Voglio dargli un nome","Non ora")
if scelta == 2 then
return -1
end
say_title("Pet System:")
say("")
say("Assegna un nome al tuo cucciolo")
say("")
say_reward("Nome:")
local PetName = tostring(input())
if PetName == "" then
say_title("Pet System:")
say("")
say_reward("Non puoi lasciare l'input vuoto!")
return -1
end
local DATA_PATH = "locale/germany/quest/pet/"
local LOCAL_PATH = pc.get_name().."/"
local PET_FILE = PetArray[i][2]..".txt"
local PET_BONUS_FILE = PetArray[i][2].."_bonus.txt"
if pc.getqf("local_path") != 1 then
os.execute("cd "..DATA_PATH.." && mkdir "..LOCAL_PATH.." && chmod 777 "..LOCAL_PATH)
pc.setqf("local_path", 1)
end
local file = io.open(DATA_PATH..LOCAL_PATH..PET_FILE , "w")
file:write(PetName.."\n1\n0\n") --nome livello exp
io.close(file)
local bonus = io.open(DATA_PATH..LOCAL_PATH..PET_BONUS_FILE , "w")
bonus:write("0\n0\n0\n0\n0\n")
io.close(bonus)
os.execute("cd "..DATA_PATH..LOCAL_PATH.." && chmod 777 *.txt")
return 0
end
function GetGrade(i)
local PetLevel = tonumber(data_tool(i, PET_LEVEL, PET_DATA, PET_READ))
local x = 0
local y = 0
local Grade = 1
while true do
x = x + 1
y = y + 1
if y == 10 then
Grade = Grade + 1
y = 0
end
if x == PetLevel then
return Grade
end
end
end
function evoca(i, stato)
local bonus = { 3,4,5,6, }
local status = PetArray[i][6]
local PetGrade = tonumber(GetGrade(i))
local PetName = data_tool(i, PET_NAME, PET_DATA, PET_READ)
local PetLevel = tonumber(data_tool(i, PET_LEVEL, PET_DATA, PET_READ))
local horse_level = horse.get_level()
local apply = 0
local level = 21 + i
if stato == PET_SUMMON then
local z = 1
while true do
if bonus[z] == nil then break end
apply = PetGrade*status[z]
affect.add_collect(bonus[z], apply, 60*60*8)
z = z + 1
end
horse.set_level(level)
horse.set_name(PetName)
horse.summon()
chat("Il pet e' stato evocato")
horse.set_level(horse_level)
else
local z = 1
while true do
if bonus[z] == nil then break end
apply = PetGrade*status[z]
affect.remove_collect(bonus[z], apply, 60*60*8)
z = z + 1
end
horse.set_level(level)
horse.unsummon()
chat("Il tuo pet e' andato a riposare")
horse.set_level(horse_level)
end
end
function PetInfo(x)
while true do
say_title("Pet System:")
say("Informazioni abilita':")
say("")
say("Lo stile "..PetBonus[x][1].." si divide in 4")
say("categorie principali.")
say("potrai sviluppare una sola tecnica per categoria")
local y = 0
if x == 1 then
y = select( "Valore Attacco","Attacco Vs. Razza","Aumento del danno","Tecniche Speciali","Indietro")
else
y = select( "Valore Difesa","Difesa Vs. Arma","Aumento dei valori vitali","Tecniche Rigenerative","Indietro")
end
if y == 5 then
break
end
while true do
say_title("Pet System:")
say("Informazioni abilita':")
say("")
say("Con l'apprendimento di questa tecnica potrai")
say("incrementare il valore "..PetBonus[x][1])
say("Tecniche disponibili:")
say("")
local z = 1
while true do
if PetBonus[x][y+1][z] == nil then break end
say_reward(PetBonus[x][y+1][z])
z = z + 1
end
local b = select("Indietro")
if b == 1 then
break
end
end
end
end
function PetSet(i, t)
say_title("Pet System:")
say("Gestione abilita':")
say("")
say("Hai scelto uno stile di combattimento")
say("del tipo "..PetBonus[t][1].." per il tuo pet")
say_reward("confermi?")
local conferma = select("Si","No")
if conferma == 2 then
return
end
say_title("Pet System:")
say("Gestione abilita':")
say("")
say("Una volta scelto lo stile di combattimento")
say("hai la possibilita' di allenare nuove abilita'")
say("scegli con cura le abilita' da sviluppare")
say("")
local k = select("Scelgo ora","Scelgo dopo")
if k == 2 then
return
end
local w = 2
local bonus = {}
local bon = {}
while true do
if PetBonus[t][w] == nil then break end
say_title("Pet System:")
say("Gestione abilita': ")
say("")
say_reward("Puoi allenare solo una delle seguenti abilita'")
say_reward("sceglila con cura...")
say("")
local x = select_table( PetBonus[t][w] )
bonus[w-1] = x
bon[w-1] = PetBonus[t][w][x]
w = w + 1
end
say_title("Pet System:")
say("Gestione abilita':")
say("")
say("Hai scelto:")
say("")
say("Bonus 1: "..bon[1])
say("Bonus 2: "..bon[2])
say("Bonus 3: "..bon[3])
say("Bonus 4: "..bon[4])
say("")
say_reward("Confermi?")
say("")
local c = select("Si","No")
if c == 2 then
return
end
data_tool(i, t.."\n"..bonus[1].."\n"..bonus[2].."\n"..bonus[3].."\n"..bonus[4].."\n", PET_BONUS, PET_WRITE)
end
function PetMenuAbi(i)
local check = tonumber(data_tool(i, PET_TYPE, PET_BONUS, PET_READ))
local status = PetArray[i][6]
local PetGrade = tonumber(GetGrade(i))
local PetType = tonumber(data_tool(i, PET_TYPE, PET_BONUS, PET_READ))
local bon1 = tonumber(data_tool(i, PET_BON1, PET_BONUS, PET_READ))
local bon2 = tonumber(data_tool(i, PET_BON2, PET_BONUS, PET_READ))
local bon3 = tonumber(data_tool(i, PET_BON3, PET_BONUS, PET_READ))
local bon4 = tonumber(data_tool(i, PET_BON4, PET_BONUS, PET_READ))
if check == 0 then
while true do
say_title("Pet System:")
say("Benvenuto nel sistema di gestione abilita'")
say("come prima cosa devi decidere che tipo")
say("di istruzione vuoi dare al tuo pet")
local z = select( "Offensiva","Difensiva","Informazioni","Chiudi")
if z == 1 then
PetSet(i, z)
return
elseif z == 2 then
PetSet(i, z)
return
elseif z == 3 then
while true do
say_title("Pet System:")
say("Informazioni abilita':")
say("")
say("Ogni pet può sviluppare 4 abilita'")
say("a seconda dello stile di combattimento")
say("")
local x = select( "Stile Offensivo","Stile Difensivo","Indietro")
if x == 1 then
PetInfo(x)
elseif x == 2 then
PetInfo(x)
elseif x == 3 then
break
end
end
elseif z == 4 then
break
end
end
else
say_title("Pet System:")
say("Gestione abilita':")
say("")
say_reward("Cosa desideri fare?")
say("")
local y = select("Stato abilita'","Reset Abilita'","Chiudi")
if y == 1 then
local point = {}
local p = 1
while true do
if status[p] == nil then break end
point[p] = status[p]*PetGrade
p = p + 1
end
say_title("Pet System:")
say("Stato abilita':")
say("")
say_reward("Status:")
say("VIT: +"..point[1])
say("INT: +"..point[2])
say("STR: +"..point[3])
say("DEX: +"..point[4])
say_reward("Bonus:")
say(PetBonus[PetType][2][bon1]..": +"..PetGrade)
say(PetBonus[PetType][3][bon2]..": +"..PetGrade)
say(PetBonus[PetType][4][bon3]..": +"..PetGrade)
say(PetBonus[PetType][5][bon4]..": +"..PetGrade)
elseif y == 2 then
say_title("Pet System:")
say("Reset abilita'")
say("che tipo di istruzione vuoi dare al tuo pet?")
say_reward("Ricorda il reset può essere usato ogni 3 giorni")
local j = select("Stile Offensivo","Stile Difensivo","Chiudi")
if j == 1 then
PetSet(i, j)
elseif j == 2 then
PetSet(i, j)
else
return
end
elseif y == 3 then
return
end
end
end
function show_pet_menu(i)
local PetName = data_tool(i, PET_NAME, PET_DATA, PET_READ)
local PetRace = PetArray[i][3]
local PetFood = PetArray[i][4]
local PetGrade = tonumber(GetGrade(i))
local PetLevel = tonumber(data_tool(i, PET_LEVEL, PET_DATA, PET_READ))
local PetExp = tonumber(data_tool(i, PET_EXP, PET_DATA, PET_READ))
local PetNextExp = PetArray[i][5][PetLevel]
while true do
say_title("Pet System:")
say("Benvenuto nel sistema di gestione del pet")
say("")
say_reward("cosa desideri fare?")
local s = select("Stato Pet", "Ciba Pet", "Abilita' Pet", "Altro", "Chiudi" )
if s == 4 then
say_title("Pet System:")
say("Benvenuto nel sistema di gestione del pet")
say("")
say_reward("cosa desideri fare?")
local z = select( "Cambia Nome", "Manda via", "Indietro", "Chiudi" )
if z == 1 then
say_title("Pet System:")
say("")
say("Assegna un nuovo nome al tuo cucciolo")
say("")
say_reward("Nome:")
local PetNewName = tostring(input())
if PetNewName == "" then
say_title("Pet System:")
say("")
say_reward("Non puoi lasciare l'input vuoto!")
return
end
if PetNewName == nome then
say_title("Pet System:")
say("")
say_reward("Non puoi usare lo stesso nome!")
return
end
data_tool(i, PetNewName.."\n"..PetLevel.."\n"..PetExp.."\n", PET_DATA, PET_WRITE)
evoca(i, PET_UNSUMMON)
evoca(i, PET_SUMMON)
return
elseif z == 2 then
evoca(i, PET_UNSUMMON)
return
elseif z == 3 then
elseif z == 4 then
break
end
elseif s == 1 then
say_title("Pet System:")
say("")
say("Nome: "..PetName)
say("Razza: "..PetRace)
say("Livello: "..PetLevel)
say("Grado Istruzione: "..PetGrade)
say("Exp: "..PetExp.." / "..PetNextExp)
say("Salute: "..horse.get_health_pct().."%")
say("Resistenza: "..horse.get_stamina_pct().."%")
say("Cibo: "..item_name(PetFood))
return
elseif s == 2 then
if pc.countitem(PetFood) > 0 then
say_title("Pet System:")
say("")
say("Il tuo cucciolo e' felice")
say("per l'ottimo spuntino che ha fatto")
pc.removeitem(PetFood, 1)
horse.feed()
return
else
say_title("Pet System:")
say("")
say("Per cibare il tuo cucciolo")
say("hai bisogno di: "..item_name(PetFood))
say("")
return
end
elseif s == 3 then
if PetLevel >= 10 then
PetMenuAbi(i)
return
else
say_title("Pet System:")
say("")
say_reward("Il Pet deve essere almeno Lv 10")
return
end
elseif s == 5 then
break
end
end
end
function PetGiveExp(i, Point)
local PetName = data_tool(i, PET_NAME, PET_DATA, PET_READ)
local PetLevel = tonumber(data_tool(i, PET_LEVEL, PET_DATA, PET_READ))
local PetExp = tonumber(data_tool(i, PET_EXP, PET_DATA, PET_READ))
local PetNextExp = PetArray[i][5][PetLevel]
if PetLevel == 150 then
return
end
local PetNewExp = PetExp + Point
while true do
if PetNewExp < PetNextExp then break end
PetNewExp = PetNewExp - PetNextExp
PetLevel = PetLevel + 1
end
data_tool(i, PetName.."\n"..PetLevel.."\n"..PetNewExp.."\n", PET_DATA, PET_WRITE)
end
function data_tool(i, linea, tipo, modo)
local DATA_PATH = "locale/germany/quest/pet/"
local LOCAL_PATH = pc.get_name().."/"
local x = 1
local file = ""
local PET_FILE = ""
local PET_BACKUP = ""
if tipo == PET_DATA then
PET_FILE = PetArray[i][2]..".txt"
PET_BACKUP = PetArray[i][2]..".bak"
elseif tipo == PET_BONUS then
PET_FILE = PetArray[i][2].."_bonus.txt"
PET_BACKUP = PetArray[i][2].."_bonus.bak"
end
if modo == PET_READ then
file = io.open(DATA_PATH..LOCAL_PATH..PET_FILE, "r")
while true do
local line = file:read("*l")
if line == nil then
break
end
text = string.gsub(line, "\n", "")
if x == linea then
io.close(file)
return text
end
x = x + 1
end
io.close(file)
elseif modo == PET_WRITE then
os.execute("cd "..DATA_PATH..LOCAL_PATH.." && mv "..PET_FILE.." "..PET_BACKUP)
file = io.open(DATA_PATH..LOCAL_PATH..PET_FILE, "w")
file:write(linea)
io.close(file)
os.execute("cd "..DATA_PATH..LOCAL_PATH.." && chmod 777 "..PET_FILE)
end
end
--- System pet end ---
--Àü¿ª º¯¼ö Á¢±Ù°ú °ü·ÃµÈ °è¿*
NOWINDOW = 0
NORMAL = 1
CINEMATIC = 2
SCROLL = 3
WARRIOR = 0
ASSASSIN = 1
SURA = 2
SHAMAN = 3
COND_WARRIOR_0 = 8
COND_WARRIOR_1 = 16
COND_WARRIOR_2 = 32
COND_WARRIOR = 56
COND_ASSASSIN_0 = 64
COND_ASSASSIN_1 = 128
COND_ASSASSIN_2 = 256
COND_ASSASSIN = 448
COND_SURA_0 = 512
COND_SURA_1 = 1024
COND_SURA_2 = 2048
COND_SURA = 3584
COND_SHAMAN_0 = 4096
COND_SHAMAN_1 = 8192
COND_SHAMAN_2 = 16384
COND_SHAMAN = 28672
PART_MAIN = 0
PART_HAIR = 3
GUILD_CREATE_ITEM_VNUM = 70101
QUEST_SCROLL_TYPE_KILL_MOB = 1
QUEST_SCROLL_TYPE_KILL_ANOTHER_EMPIRE = 2
apply = {
["MAX_HP"] = 1,
["MAX_SP"] = 2,
["CON"] = 3,
["INT"] = 4,
["STR"] = 5,
["DEX"] = 6,
["ATT_SPEED"] = 7,
["MOV_SPEED"] = 8,
["CAST_SPEED"] = 9,
["HP_REGEN"] = 10,
["SP_REGEN"] = 11,
["POISON_PCT"] = 12,
["STUN_PCT"] = 13,
["SLOW_PCT"] = 14,
["CRITICAL_PCT"] = 15,
["PENETRATE_PCT"] = 16,
["ATTBONUS_HUMAN"] = 17,
["ATTBONUS_ANIMAL"] = 18,
["ATTBONUS_ORC"] = 19,
["ATTBONUS_MILGYO"] = 20,
["ATTBONUS_UNDEAD"] = 21,
["ATTBONUS_DEVIL"] = 22,
["STEAL_HP"] = 23,
["STEAL_SP"] = 24,
["MANA_BURN_PCT"] = 25,
["DAMAGE_SP_RECOVER"] = 26,
["BLOCK"] = 27,
["DODGE"] = 28,
["RESIST_SWORD"] = 29,
["RESIST_TWOHAND"] = 30,
["RESIST_DAGGER"] = 31,
["RESIST_BELL"] = 32,
["RESIST_FAN"] = 33,
["RESIST_BOW"] = 34,
["RESIST_FIRE"] = 35,
["RESIST_ELEC"] = 36,
["RESIST_MAGIC"] = 37,
["RESIST_WIND"] = 38,
["REFLECT_MELEE"] = 39,
["REFLECT_CURSE"] = 40,
["POISON_REDUCE"] = 41,
["KILL_SP_RECOVER"] = 42,
["EXP_DOUBLE_BONUS"] = 43,
["GOLD_DOUBLE_BONUS"] = 44,
["ITEM_DROP_BONUS"] = 45,
["POTION_BONUS"] = 46,
["KILL_HP_RECOVER"] = 47,
["IMMUNE_STUN"] = 48,
["IMMUNE_SLOW"] = 49,
["IMMUNE_FALL"] = 50,
["SKILL"] = 51,
["BOW_DISTANCE"] = 52,
["ATT_GRADE_BONUS"] = 53,
["DEF_GRADE_BONUS"] = 54,
["MAGIC_ATT_GRADE"] = 55,
["MAGIC_DEF_GRADE"] = 56,
["CURSE_PCT"] = 57,
["MAX_STAMINA"] = 58,
["ATTBONUS_WARRIOR"] = 59,
["ATTBONUS_ASSASSIN"] = 60,
["ATTBONUS_SURA"] = 61,
["ATTBONUS_SHAMAN"] = 62,
["ATTBONUS_MONSTER"] = 63,
}
-- ·¹º§¾÷ Äù½ºÆ® -_-
special = {}
special.fortune_telling =
{
-- { prob Å©¸® item money remove money
{ 1, 0, 20, 20, 0 }, -- 10
{ 499, 0, 10, 10, 0 }, -- 5
{ 2500, 0, 5, 5, 0 }, -- 1
{ 5000, 0, 0, 0, 0 },
{ 1500, 0, -5, -5, 20000 },
{ 499, 0, -10, -10, 20000 },
{ 1, 0, -20, -20, 20000 },
}
special.questscroll_reward =
{
{1, 1500, 3000, 30027, 0, 0 },
{2, 1500, 3000, 30028, 0, 0 },
{3, 1000, 2000, 30034, 30018, 0 },
{4, 1000, 2000, 30034, 30011, 0 },
{5, 1000, 2000, 30011, 30034, 0 },
{6, 1000, 2000, 27400, 0, 0 },
{7, 2000, 4000, 30023, 30003, 0 },
{8, 2000, 4000, 30005, 30033, 0 },
{9, 2000, 8000, 30033, 30005, 0 },
{10, 4000, 8000, 30021, 30033, 30045},
{11, 4000, 8000, 30045, 30022, 30046},
{12, 5000, 12000, 30047, 30045, 30055},
{13, 5000, 12000, 30051, 30017, 30058},
{14, 5000, 12000, 30051, 30007, 30041},
{15, 5000, 15000, 30091, 30017, 30018},
{16, 3500, 6500, 30021, 30033, 0 },
{17, 4000, 9000, 30051, 30033, 0 },
{18, 4500, 10000, 30056, 30057, 30058},
{19, 4500, 10000, 30059, 30058, 30041},
{20, 5000, 15000, 0, 0, 0 },
}
special.active_skill_list = {
{
{ 1, 2, 3, 4, 5, 6},
{ 16, 17, 18, 19, 20, 21},
},
{
{31, 32, 33, 34, 35, 36},
{46, 47, 48, 49, 50, 51},
},
{
{61, 62, 63, 64, 65, 66},
{76, 77, 78, 79, 80, 81},
},
{
{91, 92, 93, 94, 95, 96},
{106, 107, 108, 109, 110, 111},
},
}
special.skill_reset_cost = {
2000,
2000,
2000,
2000,
2000,
2000,
4000,
6000,
8000,
10000,
14000,
18000,
22000,
28000,
34000,
41000,
50000,
59000,
70000,
90000,
101000,
109000,
114000,
120000,
131000,
141000,
157000,
176000,
188000,
200000,
225000,
270000,
314000,
348000,
393000,
427000,
470000,
504000,
554000,
600000,
758000,
936000,
1103000,
1276000,
1407000,
1568000,
1704000,
1860000,
2080000,
2300000,
2700000,
3100000,
3500000,
3900000,
4300000,
4800000,
5300000,
5800000,
6400000,
7000000,
8000000,
9000000,
10000000,
11000000,
12000000,
13000000,
14000000,
15000000,
16000000,
17000000,
}
special.levelup_img =
{
[101] = "dog.tga",
[102] = "wolf.tga",
[103] = "wolf.tga",
[104] = "wolf.tga",
[105] = "wolf.tga",
[105] = "wolf.tga",
[106] = "wolf.tga",
[107] = "wolf.tga",
[108] = "wild_boar.tga",
[109] = "wild_boar.tga",
[110] = "bear.tga",
[111] = "bear.tga",
[112] = "bear.tga",
[113] = "bear.tga",
[114] = "tiger.tga",
[115] = "tiger.tga",
[301] = "bak_inf.tga",
[302] = "bak_gung.tga",
[303] = "bak_gen1.tga",
[304] = "bak_gen2.tga",
[401] = "huk_inf.tga",
[402] = "huk_dol.tga",
[403] = "huk_gen1.tga",
[404] = "huk_gen2.tga",
[501] = "o_inf.tga",
[502] = "o_jol.tga",
[503] = "o_gung.tga",
[504] = "o_jang.tga",
[601] = "ung_inf.tga",
[602] = "ung_chuk.tga",
[603] = "ung_tu.tga",
[701] = "mil_chu.tga",
[702] = "mil_na.tga",
[703] = "mil_na.tga",
[704] = "mil_na.tga",
[735] = "mil_jip.tga",
[901] = "sigwi.tga",
[903] = "gwoijil.tga",
[2001] = "spider.tga",
[2002] = "spider.tga",
[2003] = "spider.tga",
[2004] = "spider.tga",
[2005] = "spider.tga",
[2102] = "2102.tga",
[2103] = "2103.tga",
}
special.levelup_quest = {
-- monster kill monster kill
-- vnum qty. vnum qty. exp percent
{ 0 , 0 , 0 , 0 , 0 } , -- lev 1
{ 101 , 10 , 102 , 5 , 10 } , -- lev 2
{ 101 , 20 , 102 , 10 , 10 } , -- lev 3
{ 102 , 15 , 103 , 5 , 10 } , -- lev 4
{ 103 , 10 , 104 , 10 , 10 } , -- lev 5
{ 104 , 20 , 108 , 10 , 10 } , -- lev 6
{ 108 , 10 , 105 , 5 , 10 } , -- lev 7
{ 108 , 20 , 105 , 10 , 10 } , -- lev 8
{ 105 , 15 , 109 , 5 , 10 } , -- lev 9
{ 105 , 20 , 109 , 10 , 10 } , -- lev 10
{ 109 , 10 , 110 , 5 , 10 } , -- lev 11
{ 110 , 15 , 106 , 10 , 10 } , -- lev 12
{ 106 , 20 , 111 , 5 , 10 } , -- lev 13
{ 111 , 15 , 107 , 5 , 10 } , -- lev 14
{ 111 , 20 , 107 , 10 , 10 } , -- lev 15
{ 107 , 15 , 114 , 5 , 10 } , -- lev 16
{ 107 , 20 , 114 , 10 , 10 } , -- lev 17
{ 114 , 10 , 112 , 10 , 10 } , -- lev 18
{ 112 , 20 , 113 , 10 , 10 } , -- lev 19
{ 113 , 20 , 302 , 15 , 10 } , -- lev 20
{ 302 , 20 , 115 , 10 , "2-10" } , -- lev 21
{ 115 , 25 , 304 , 10 , "2-10" } , -- lev 22
{ 304 , 20 , 401 , 40 , "2-10" } , -- lev 23
{ 401 , 60 , 402 , 80 , "2-10" } , -- lev 24
{ 501 , 80 , 404 , 20 , "2-10" } , -- lev 25
{ 502 , 80 , 406 , 20 , "2-10" } , -- lev 26
{ 406 , 30 , 504 , 20 , "2-10" } , -- lev 27
{ 631 , 35 , 504 , 30 , "2-10" } , -- lev 28
{ 631 , 40 , 632 , 30 , "2-10" } , -- lev 29
{ 632 , 40 , 2102 , 30 , "2-10" } , -- lev 30
{ 632 , 50 , 2102 , 45 , "2-5" } , -- lev 31
{ 633 , 45 , 2001 , 40 , "2-5" } , -- lev 32
{ 701 , 35 , 2103 , 30 , "2-5" } , -- lev 33
{ 701 , 40 , 2103 , 40 , "2-5" } , -- lev 34
{ 702 , 40 , 2002 , 30 , "2-5" } , -- lev 35
{ 704 , 20 , 2106 , 20 , "2-5" } , -- lev 36
{ 733 , 30 , 2003 , 20 , "2-5" } , -- lev 37
{ 734 , 40 , 2004 , 20 , "2-5" } , -- lev 38
{ 706 , 40 , 2005 , 30 , "2-5" } , -- lev 39
{ 707 , 40 , 2108 , 20 , "2-5" } , -- lev 40
{ 901 , 40 , 5123 , 25 , "2-5" } , -- lev 41
{ 902 , 30 , 5123 , 30 , "2-5" } , -- lev 42
{ 902 , 40 , 2031 , 35 , "2-5" } , -- lev 43
{ 903 , 40 , 2031 , 40 , "2-5" } , -- lev 44
{ 731 , 50 , 2032 , 45 , "2-5" } , -- lev 45
{ 732 , 30 , 5124 , 30 , "2-5" } , -- lev 46
{ 903 , 35 , 5125 , 30 , "2-5" } , -- lev 47
{ 904 , 40 , 5125 , 35 , "2-5" } , -- lev 48
{ 733 , 40 , 2033 , 45 , "2-5" } , -- lev 49
{ 734 , 40 , 5126 , 20 , "2-5" } , -- lev 50
{ 735 , 50 , 5126 , 30 , "1-4" } , -- lev 51
{ 904 , 45 , 2034 , 45 , "1-4" } , -- lev 52
{ 904 , 50 , 2034 , 50 , "1-4" } , -- lev 53
{ 736 , 40 , 1001 , 30 , "1-4" } , -- lev 54
{ 737 , 40 , 1301 , 35 , "1-4" } , -- lev 55
{ 905 , 50 , 1002 , 30 , "1-4" } , -- lev 56
{ 905 , 60 , 1002 , 40 , "1-4" } , -- lev 57
{ 906 , 45 , 1303 , 40 , "1-4" } , -- lev 58
{ 906 , 50 , 1303 , 45 , "1-4" } , -- lev 59
{ 907 , 45 , 1003 , 40 , "1-4" } , -- lev 60
}
special.levelup_reward1 =
{
-- warrior assassin sura shaman
{ 0, 0, 0, 0 },
{ 11200, 11400, 11600, 11800 }, -- °©¿Ê lev2
{ 12200, 12340, 12480, 12620 }, -- Åõ±¸ lev3
{ 13000, 13000, 13000, 13000 } -- ¹æÆÐ lev4
}
-- levelup_reward1 Å×À̺í Å©±âº¸´Ù ·¹º§ÀÌ ³ô¾ÆÁö¸é ¾Æ·¡
-- Å×À̺íÀ» ÀÌ¿ëÇÏ¿© ¾ÆÀÌÅÛÀ» ÁØ´Ù.
special.levelup_reward3 = {
-- pct item # item count
{ 33, 27002, 10 }, -- 25%
{ 67, 27005, 10 }, -- 25%
--{ 75, 27101, 5 }, -- 25%
{ 100, 27114, 5 }, -- 25%
}
special.levelup_reward_gold21 =
{
{ 10000, 20 },
{ 20000, 50 },
{ 40000, 25 },
{ 80000, 3 },
{ 100000, 2 },
}
special.levelup_reward_gold31 =
{
{ 20000, 20 },
{ 40000, 40 },
{ 60000, 25 },
{ 80000, 10 },
{ 100000, 5 },
}
special.levelup_reward_gold41 =
{
{ 40000, 20 },
{ 60000, 40 },
{ 80000, 25 },
{ 100000, 10 },
{ 150000, 5 },
}
special.levelup_reward_gold51 =
{
{ 60000, 20 },
{ 80000, 40 },
{ 100000, 25 },
{ 150000, 10 },
{ 200000, 5 },
}
special.levelup_reward_exp21 =
{
{ 2, 9 },
{ 3, 14 },
{ 4, 39 },
{ 6, 24 },
{ 8, 9 },
{ 10, 4 },
}
special.levelup_reward_exp31 =
{
{ 2, 10 },
{ 2.5, 15 },
{ 3, 40 },
{ 3.5, 25 },
{ 4, 8 },
{ 4.5, 5 },
{ 5, 2 },
}
special.levelup_reward_exp41 =
{
{ 2, 10 },
{ 2.5, 15 },
{ 3, 40 },
{ 3.5, 25 },
{ 4, 8 },
{ 4.5, 5 },
{ 5, 2 },
}
special.levelup_reward_exp51 =
{
{ 1, 10 },
{ 1.5, 15 },
{ 2, 40 },
{ 2.5, 25 },
{ 3, 8 },
{ 3.5, 5 },
{ 4, 2 },
}
special.levelup_reward_item_21 =
{
-- no couple ring
{ { 27002, 10 }, { 27005, 10 }, { 27114, 10 } }, -- lev 21
{ 15080, 15100, 15120, 15140 }, -- lev 22
{ 16080, 16100, 16120, 16140 }, -- lev 23
{ 17080, 17100, 17120, 17140 }, -- lev 24
{ { 27002, 10 }, { 27005, 10 }, { 27114, 10 } }, -- lev 25
{ { 27003, 20 }, { 27006, 20 }, { 27114, 10 } }, -- over lev 25
-- with couple ring
-- { { 27002, 10 }, { 27005, 10 }, { 27114, 10 }, { 70301, 1 } }, -- lev 21
-- { 15080, 15100, 15120, 15140, 70301 }, -- lev 22
-- { 16080, 16100, 16120, 16140, 70301 }, -- lev 23
-- { 17080, 17100, 17120, 17140, 70301 }, -- lev 24
-- { { 27002, 10 }, { 27005, 10 }, { 27114, 10 }, { 70301, 1 } }, -- lev 25
-- { { 27003, 20 }, { 27006, 20 }, { 27114, 10 } }, -- over lev 25
}
special.warp_to_pos = {
-- ½Â·æ°î
{
{ 402100, 673900 },
{ 270400, 739900 },
{ 321300, 808000 },
},
--µµ¿°È*Áö
{
--A 5994 7563
--B 5978 6222
--C 7307 6898
{ 599400, 756300 },
{ 597800, 622200 },
{ 730700, 689800 },
},
--¿µºñ»ç¸·
{
--A 2178 6272
{ 217800, 627200 },
--B 2219 5027
{ 221900, 502700 },
--C 3440 5025
{ 344000, 502500 },
},
--¼*ÇÑ»ê
{
--A 4342 2906
{ 434200, 290600 },
--B 3752 1749
{ 375200, 174900 },
--C 4918 1736
{ 491800, 173600 },
},
}
special.devil_tower =
{
--{ 123, 608 },
{ 2048+126, 6656+384 },
{ 2048+134, 6656+147 },
{ 2048+369, 6656+629 },
{ 2048+369, 6656+401 },
{ 2048+374, 6656+167 },
{ 2048+579, 6656+616 },
{ 2048+578, 6656+392 },
{ 2048+575, 6656+148 },
}
special.lvq_map = {
{ -- "A1" 1
{},
{ { 440, 565 }, { 460, 771 }, { 668, 800 },},
{ { 440, 565 }, { 460, 771 }, { 668, 800 },},
{ { 440, 565 }, { 460, 771 }, { 668, 800 },},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{853,557}, {845,780}, {910,956},},
{{853,557}, {845,780}, {910,956},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{224,395}, {137,894}, {206,830}, {266,1067},},
{{224,395}, {137,894}, {206,830}, {266,1067},},
{{224,395}, {137,894}, {206,830}, {266,1067},},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}},
{{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}},
},
{ -- "A2" 2
{},
{{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }},
{{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }},
{{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}},
{{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}},
{{640,1437}},
{{640,1437}},
{{640,1437}},
{{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
{{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
{{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
{{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
{{193,772}, {390,402}, {768,600}, {1075,789}, {1338,813},},
{{193,772}, {390,402}, {768,600}, {1075,789}, {1338,813},},
},
{ -- "A3" 3
{},
{{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }},
{{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }},
{{ 948,804 }},
{{ 948,804 }},
{{ 948,804 }},
{{438, 895}, {725, 864}, {632, 671},},
{{438, 895}, {725, 864}, {632, 671},},
{{438, 895}, {725, 864}, {632, 671},},
{{438, 895}, {725, 864}, {632, 671},},
{{438, 895}, {725, 864}, {632, 671},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{200,277}, {130,646}, {211,638}, {291,851},},
{{200,277}, {130,646}, {211,638}, {291,851},},
{{200,277}, {130,646}, {211,638}, {291,851},},
{{100,150}},
{{100,150}},
{{100,150}},
{{100,150}},
{{100,150}},
{{100,150}},
},
{}, -- 4
{}, -- 5
{}, -- 6
{}, -- 7
{}, -- 8
{}, -- 9
{}, -- 10
{}, -- 11
{}, -- 12
{}, -- 13
{}, -- 14
{}, -- 15
{}, -- 16
{}, -- 17
{}, -- 18
{}, -- 19
{}, -- 20
{ -- "B1" 21
{},
{{412,635}, {629,428}, {829,586},},
{{412,635}, {629,428}, {829,586},},
{{412,635}, {629,428}, {829,586},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{866,822}, {706,224}, {247,722},},
{{866,822}, {706,224}, {247,722},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{496,1089}, {890,1043},},
{{496,1089}, {890,1043},},
{{496,1089}, {890,1043},},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}},
{{876,1127}}, {{876,1127}}, {{876,1127}}, {{908,87}}, {{908,87}}, {{908,87}}, {{908,87}}, {{908,87}}, {{908,87}},
},
{ -- "B2" 22
{},
{{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }},
{{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }},
{{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}},
{{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}},
{{746,1438}},
{{746,1438}},
{{746,1438}},
{{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
{{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
{{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
{{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
{{787,235}, {1209,382}, {1350,571}, {1240,852}, {1254,1126}, {1078,1285}, {727,1360},},
{{787,235}, {1209,382}, {1350,571}, {1240,852}, {1254,1126}, {1078,1285}, {727,1360},},
},
{ -- "B3" 23
{},
{{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }},
{{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }},
{{ 106,88 }},
{{ 106,88 }},
{{ 106,88 }},
{{230, 244}, {200, 444}, {594, 408},},
{{230, 244}, {200, 444}, {594, 408},},
{{230, 244}, {200, 444}, {594, 408},},
{{230, 244}, {200, 444}, {594, 408},},
{{230, 244}, {200, 444}, {594, 408},},
{{584,204}, {720,376}, {861,272},},
{{584,204}, {720,376}, {861,272},},
{{584,204}, {720,376}, {861,272},},
{{584,204}, {720,376}, {861,272},},
{{584,204}, {720,376}, {861,272},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{816,721}, {489,823},},
{{816,721}, {489,823},},
{{816,721}, {489,823},},
{{772,140}},
{{772,140}},
{{772,140}},
{{772,140}},
{{772,140}},
{{772,140}},
},
{}, -- 24
{}, -- 25
{}, -- 26
{}, -- 27
{}, -- 28
{}, -- 29
{}, -- 30
{}, -- 31
{}, -- 32
{}, -- 33
{}, -- 34
{}, -- 35
{}, -- 36
{}, -- 37
{}, -- 38
{}, -- 39
{}, -- 40
{ -- "C1" 41
{},
{{385,446}, {169,592}, {211,692}, {632,681},},
{{385,446}, {169,592}, {211,692}, {632,681},},
{{385,446}, {169,592}, {211,692}, {632,681},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{169,362}, {368,304}, {626,409}, {187,882}, {571,858},},
{{169,362}, {368,304}, {626,409}, {187,882}, {571,858},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{452,160}, {536,1034}, {184,1044},},
{{452,160}, {536,1034}, {184,1044},},
{{452,160}, {536,1034}, {184,1044},},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}},
{{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}},
},
{ -- "C2" 42
{},
{{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
{{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
{{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
{{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
{{1409,139}},
{{1409,139}},
{{1409,139}},
{{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
{{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
{{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
{{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
{{192,211}, {247,600}, {249,882}, {987,981}, {1018,1288}, {1303,1174},},
{{192,211}, {247,600}, {249,882}, {987,981}, {1018,1288}, {1303,1174},},
},
{ -- "C3" 43
{},
{{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}},
{{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}},
{{901,151}},
{{901,151}},
{{901,151}},
{{421, 189}, {167, 353},},
{{421, 189}, {167, 353},},
{{421, 189}, {167, 353},},
{{421, 189}, {167, 353},},
{{421, 189}, {167, 353},},
{{679,459}, {505,709},},
{{679,459}, {505,709},},
{{679,459}, {505,709},},
{{679,459}, {505,709},},
{{679,459}, {505,709},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{635,856}, {324,855},},
{{635,856}, {324,855},},
{{635,856}, {324,855},},
{{136,899}},
{{136,899}},
{{136,899}},
{{136,899}},
{{136,899}},
{{136,899}},
},
{}, -- 44
{}, -- 45
{}, -- 46
{}, -- 47
{}, -- 48
{}, -- 49
{}, -- 50
{}, -- 51
{}, -- 52
{}, -- 53
{}, -- 54
{}, -- 55
{}, -- 56
{}, -- 57
{}, -- 58
{}, -- 59
{}, -- 60
}
function BuildSkillList(job, group)
local skill_vnum_list = {}
local skill_name_list = {}
if pc.get_skill_group() != 0 then
local skill_list = special.active_skill_list[job+1][group]
table.foreachi( skill_list,
function(i, t)
local lev = pc.get_skill_level(t)
if lev > 0 then
local name = locale.GM_SKILL_NAME_DICT[t]
if name != nil then
table.insert(skill_vnum_list, t)
table.insert(skill_name_list, name)
end
end
end
)
end
table.insert(skill_vnum_list, 0)
table.insert(skill_name_list, locale.cancel)
return { skill_vnum_list, skill_name_list }
end
PREMIUM_EXP = 0
PREMIUM_ITEM = 1
PREMIUM_SAFEBOX = 2
PREMIUM_AUTOLOOT = 3
PREMIUM_FISH_MIND = 4
PREMIUM_MARRIAGE_FAST = 5
PREMIUM_GOLD = 6
-- point type start
POINT_NONE = 0
POINT_LEVEL = 1
POINT_VOICE = 2
POINT_EXP = 3
POINT_NEXT_EXP = 4
POINT_HP = 5
POINT_MAX_HP = 6
POINT_SP = 7
POINT_MAX_SP = 8
POINT_STAMINA = 9 --½ºÅ׹̳Ê
POINT_MAX_STAMINA = 10 --ÃÖ´ë ½ºÅ׹̳Ê
POINT_GOLD = 11
POINT_ST = 12 --±Ù·Â
POINT_HT = 13 --ü·Â
POINT_DX = 14 --¹Îø¼º
POINT_IQ = 15 --Á¤½Å·Â
POINT_DEF_GRADE = 16
POINT_ATT_SPEED = 17 --°ø°Ý¼Óµµ
POINT_ATT_GRADE = 18 --°ø°Ý·Â MAX
POINT_MOV_SPEED = 19 --À̵¿¼Óµµ
POINT_CLIENT_DEF_GRADE = 20 --¹æ¾îµî±Þ
POINT_CASTING_SPEED = 21 --ÁÖ¹®¼Óµµ (Äð´Ù¿îŸÀÓ*100) / (100 + À̰ª) = ÃÖÁ¾ Äð´Ù¿î ŸÀÓ
POINT_MAGIC_ATT_GRADE = 22 --¸¶¹ý°ø°Ý·Â
POINT_MAGIC_DEF_GRADE = 23 --¸¶¹ý¹æ¾î·Â
POINT_EMPIRE_POINT = 24 --Á¦±¹Á¡¼ö
POINT_LEVEL_STEP = 25 --ÇÑ ·¹º§¿¡¼*ÀÇ ´Ü°è.. (1 2 3 µÉ ¶§ º¸»ó 4 µÇ¸é ·¹º§ ¾÷)
POINT_STAT = 26 --´É·ÂÄ¡ ¿Ã¸± ¼ö ÀÖ´Â °³¼ö
POINT_SUB_SKILL = 27 --º¸Á¶ ½ºÅ³ Æ÷ÀÎÆ®
POINT_SKILL = 28 --¾×Ƽºê ½ºÅ³ Æ÷ÀÎÆ®
POINT_WEAPON_MIN = 29 --¹«±â ÃÖ¼Ò µ¥¹ÌÁö
POINT_WEAPON_MAX = 30 --¹«±â ÃÖ´ë µ¥¹ÌÁö
POINT_PLAYTIME = 31 --Ç÷¹À̽ð£
POINT_HP_REGEN = 32 --HP ȸº¹·ü
POINT_SP_REGEN = 33 --SP ȸº¹·ü
POINT_BOW_DISTANCE = 34 --Ȱ »çÁ¤°Å¸® Áõ°¡Ä¡ (meter)
POINT_HP_RECOVERY = 35 --ü·Â ȸº¹ Áõ°¡·®
POINT_SP_RECOVERY = 36 --Á¤½Å·Â ȸº¹ Áõ°¡·®
POINT_POISON_PCT = 37 --µ¶ È®·ü
POINT_STUN_PCT = 38 --±âÀý È®·ü
POINT_SLOW_PCT = 39 --½½·Î¿ì È®·ü
POINT_CRITICAL_PCT = 40 --Å©¸®Æ¼Äà Ȯ·ü
POINT_PENETRATE_PCT = 41 --°üÅëŸ°Ý È®·ü
POINT_CURSE_PCT = 42 --ÀúÁÖ È®·ü
POINT_ATTBONUS_HUMAN = 43 --Àΰ£¿¡°Ô °*ÇÔ
POINT_ATTBONUS_ANIMAL = 44 --µ¿¹°¿¡°Ô µ¥¹ÌÁö % Áõ°¡
POINT_ATTBONUS_ORC = 45 --¿õ±Í¿¡°Ô µ¥¹ÌÁö % Áõ°¡
POINT_ATTBONUS_MILGYO = 46 --¹Ð±³¿¡°Ô µ¥¹ÌÁö % Áõ°¡
POINT_ATTBONUS_UNDEAD = 47 --½Ãü¿¡°Ô µ¥¹ÌÁö % Áõ°¡
POINT_ATTBONUS_DEVIL = 48 --¸¶±Í(¾Ç¸¶)¿¡°Ô µ¥¹ÌÁö % Áõ°¡
POINT_ATTBONUS_INSECT = 49 --¹ú·¹Á·
POINT_ATTBONUS_FIRE = 50 --È*¿°Á·
POINT_ATTBONUS_ICE = 51 --ºù¼³Á·
POINT_ATTBONUS_DESERT = 52 --»ç¸·Á·
POINT_ATTBONUS_MONSTER = 53 --¸ðµç ¸ó½ºÅÍ¿¡°Ô °*ÇÔ
POINT_ATTBONUS_WARRIOR = 54 --¹«»ç¿¡°Ô °*ÇÔ
POINT_ATTBONUS_ASSASSIN = 55 --ÀÚ°´¿¡°Ô °*ÇÔ
POINT_ATTBONUS_SURA = 56 --¼ö¶ó¿¡°Ô °*ÇÔ
POINT_ATTBONUS_SHAMAN = 57 --¹«´ç¿¡°Ô °*ÇÔ
-- ADD_TRENT_MONSTER
POINT_ATTBONUS_TREE = 58 --³ª¹«¿¡°Ô °*ÇÔ 20050729.myevan UNUSED5
-- END_OF_ADD_TRENT_MONSTER
POINT_RESIST_WARRIOR = 59 --¹«»ç¿¡°Ô ÀúÇ×
POINT_RESIST_ASSASSIN = 60 --ÀÚ°´¿¡°Ô ÀúÇ×
POINT_RESIST_SURA = 61 --¼ö¶ó¿¡°Ô ÀúÇ×
POINT_RESIST_SHAMAN = 62 --¹«´ç¿¡°Ô ÀúÇ×
POINT_STEAL_HP = 63 --»ý¸í·Â Èí¼ö
POINT_STEAL_SP = 64 --Á¤½Å·Â Èí¼ö
POINT_MANA_BURN_PCT = 65 --¸¶³ª ¹ø
--/ ÇÇÇØ½Ã º¸³Ê½º =/
POINT_DAMAGE_SP_RECOVER = 66 --°ø°Ý´çÇÒ ½Ã Á¤½Å·Â ȸº¹ È®·ü
POINT_BLOCK = 67 --ºí·°À²
POINT_DODGE = 68 --ȸÇÇÀ²
POINT_RESIST_SWORD = 69
POINT_RESIST_TWOHAND = 70
POINT_RESIST_DAGGER = 71
POINT_RESIST_BELL = 72
POINT_RESIST_FAN = 73
POINT_RESIST_BOW = 74 --È*»ì ÀúÇ× : ´ë¹ÌÁö °¨¼Ò
POINT_RESIST_FIRE = 75 --È*¿° ÀúÇ× : È*¿°°ø°Ý¿¡ ´ëÇÑ ´ë¹ÌÁö °¨¼Ò
POINT_RESIST_ELEC = 76 --Àü±â ÀúÇ× : Àü±â°ø°Ý¿¡ ´ëÇÑ ´ë¹ÌÁö °¨¼Ò
POINT_RESIST_MAGIC = 77 --¼ú¹ý ÀúÇ× : ¸ðµç¼ú¹ý¿¡ ´ëÇÑ ´ë¹ÌÁö °¨¼Ò
POINT_RESIST_WIND = 78 --¹Ù¶÷ ÀúÇ× : ¹Ù¶÷°ø°Ý¿¡ ´ëÇÑ ´ë¹ÌÁö °¨¼Ò
POINT_REFLECT_MELEE = 79 --°ø°Ý ¹Ý»ç
--/ Ư¼ö ÇÇÇØ½Ã =/
POINT_REFLECT_CURSE = 80 --ÀúÁÖ ¹Ý»ç
POINT_POISON_REDUCE = 81 --µ¶µ¥¹ÌÁö °¨¼Ò
--/ Àû ¼Ò¸ê½Ã =/
POINT_KILL_SP_RECOVER = 82 --Àû ¼Ò¸ê½Ã MP ȸº¹
POINT_EXP_DOUBLE_BONUS = 83
POINT_GOLD_DOUBLE_BONUS = 84
POINT_ITEM_DROP_BONUS = 85
--/ ȸº¹ °ü·Ã =/
POINT_POTION_BONUS = 86
POINT_KILL_HP_RECOVERY = 87
POINT_IMMUNE_STUN = 88
POINT_IMMUNE_SLOW = 89
POINT_IMMUNE_FALL = 90
--========
POINT_PARTY_ATTACKER_BONUS = 91
POINT_PARTY_TANKER_BONUS = 92
POINT_ATT_BONUS = 93
POINT_DEF_BONUS = 94
POINT_ATT_GRADE_BONUS = 95
POINT_DEF_GRADE_BONUS = 96
POINT_MAGIC_ATT_GRADE_BONUS = 97
POINT_MAGIC_DEF_GRADE_BONUS = 98
POINT_RESIST_NORMAL_DAMAGE = 99
POINT_HIT_HP_RECOVERY = 100
POINT_HIT_SP_RECOVERY = 101
POINT_MANASHIELD = 102 --Èæ½Å¼öÈ£ ½ºÅ³¿¡ ÀÇÇÑ ¸¶³ª½¯µå È¿°ú Á¤µµ
POINT_PARTY_BUFFER_BONUS = 103
POINT_PARTY_SKILL_MASTER_BONUS = 104
POINT_HP_RECOVER_CONTINUE = 105
POINT_SP_RECOVER_CONTINUE = 106
POINT_STEAL_GOLD = 107
POINT_POLYMORPH = 108 --º¯½ÅÇÑ ¸ó½ºÅÍ ¹øÈ£
POINT_MOUNT = 109 --Ÿ°íÀÖ´Â ¸ó½ºÅÍ ¹øÈ£
POINT_PARTY_HASTE_BONUS = 110
POINT_PARTY_DEFENDER_BONUS = 111
POINT_STAT_RESET_COUNT = 112 --ÇÇÀÇ ´Ü¾à »ç¿ëÀ» ÅëÇÑ ½ºÅÝ ¸®¼Â Æ÷ÀÎÆ® (1´ç 1Æ÷ÀÎÆ® ¸®¼Â°¡´É)
POINT_HORSE_SKILL = 113
POINT_MALL_ATTBONUS = 114 --°ø°Ý·Â +x%
POINT_MALL_DEFBONUS = 115 --¹æ¾î·Â +x%
POINT_MALL_EXPBONUS = 116 --°æÇèÄ¡ +x%
POINT_MALL_ITEMBONUS = 117 --¾ÆÀÌÅÛ µå·ÓÀ² x/10¹è
POINT_MALL_GOLDBONUS = 118 --µ· µå·ÓÀ² x/10¹è
POINT_MAX_HP_PCT = 119 --ÃÖ´ë»ý¸í·Â +x%
POINT_MAX_SP_PCT = 120 --ÃÖ´ëÁ¤½Å·Â +x%
POINT_SKILL_DAMAGE_BONUS = 121 --½ºÅ³ µ¥¹ÌÁö *(100+x)%
POINT_NORMAL_HIT_DAMAGE_BONUS = 122 --ÆòŸ µ¥¹ÌÁö *(100+x)%
-- DEFEND_BONUS_ATTRIBUTES
POINT_SKILL_DEFEND_BONUS = 123 --½ºÅ³ ¹æ¾î µ¥¹ÌÁö
POINT_NORMAL_HIT_DEFEND_BONUS = 124 --ÆòŸ ¹æ¾î µ¥¹ÌÁö
-- END_OF_DEFEND_BONUS_ATTRIBUTES
-- PC_BANG_ITEM_ADD
POINT_PC_BANG_EXP_BONUS = 125 --PC¹æ Àü¿ë °æÇèÄ¡ º¸³Ê½º
POINT_PC_BANG_DROP_BONUS = 126 --PC¹æ Àü¿ë µå·Ó·ü º¸³Ê½º
-- END_PC_BANG_ITEM_ADD
-- POINT_MAX_NUM = 128 common/length.h
-- point type start






