SHARE
TWEET

Untitled

a guest Apr 29th, 2017 72 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CONFIRM_NO = 0
  2. CONFIRM_YES = 1
  3. CONFIRM_OK = 1
  4. CONFIRM_TIMEOUT = 2
  5.  
  6. MALE = 0
  7. FEMALE = 1
  8. --quest.create = function(f) return coroutine.create(f) end
  9. --quest.process = function(co,args) return coroutine.resume(co, args) end
  10. setstate = q.setstate
  11. newstate = q.setstate
  12.  
  13. q.set_clock = function(name, value) q.set_clock_name(name) q.set_clock_value(value) end
  14. q.set_counter = function(name, value) q.set_counter_name(name) q.set_counter_value(value) end
  15. c_item_name = function(vnum) return ("[ITEM value;"..vnum.."]") end
  16. c_mob_name = function(vnum) return ("[MOB value;"..vnum.."]") end
  17.  
  18. -- d.set_folder = function (path) raw_script("[SET_PATH path;"..path.."]") end
  19. -- d.set_folder = function (path) path.show_cinematic("[SET_PATH path;"..path.."]") end
  20. -- party.run_cinematic = function (path) party.show_cinematic("[RUN_CINEMATIC value;"..path.."]") end
  21.  
  22. newline = "[ENTER]"
  23. function color256(r, g, b) return "[COLOR r;"..(r/255.0).."|g;"..(g/255.0).."|b;"..(b/255.0).."]" end
  24. function color(r,g,b) return "[COLOR r;"..r.."|g;"..g.."|b;"..b.."]" end
  25. function delay(v) return "[DELAY value;"..v.."]" end
  26. function setcolor(r,g,b) raw_script(color(r,g,b)) end
  27. function setdelay(v) raw_script(delay(v)) end
  28. function resetcolor(r,g,b) raw_script("[/COLOR]") end
  29. function resetdelay(v) raw_script("[/DELAY]") end
  30. function send_letter_blue(name) send_letter_ex(name, "ex", "scroll_open_blue.tga") end
  31. function send_letter_golden(name) send_letter_ex(name, "ex", "scroll_open_golden.tga") end
  32. function send_letter_green(name) send_letter_ex(name, "ex", "scroll_open_green.tga") end
  33. function send_letter_purple(name) send_letter_ex(name, "ex", "scroll_open_purple.tga") end
  34. function send_letter_blue_blink(name) send_letter_ex(name, "blink,ex", "scroll_open_blue.tga") end
  35. function send_letter_golden_blink(name) send_letter_ex(name, "blink,ex", "scroll_open_golden.tga") end
  36. function send_letter_green_blink(name) send_letter_ex(name, "blink,ex", "scroll_open_green.tga") end
  37. function send_letter_purple_blink(name) send_letter_ex(name, "blink,ex", "scroll_open_purple.tga") end
  38. function send_letter_blue_text(name) send_letter_ex(name, "blue,ex", "scroll_open_blue.tga") end
  39. function send_letter_golden_text(name) send_letter_ex(name, "golden,ex", "scroll_open_golden.tga") end
  40. function send_letter_green_text(name) send_letter_ex(name, "green,ex", "scroll_open_green.tga") end
  41. function send_letter_purple_text(name) send_letter_ex(name, "purple,ex", "scroll_open_purple.tga") end
  42. function send_letter_blue_blink_text(name) send_letter_ex(name, "blink,blue,ex", "scroll_open_blue.tga") end
  43. function send_letter_golden_blink_text(name) send_letter_ex(name, "blink,golden,ex", "scroll_open_golden.tga") end
  44. function send_letter_green_blink_text(name) send_letter_ex(name, "blink,green,ex", "scroll_open_green.tga") end
  45. function send_letter_purple_blink_text(name) send_letter_ex(name, "blink,purple,ex", "scroll_open_purple.tga") end
  46. function string:split(delimiter)
  47.   local result = { }
  48.   local from  = 1
  49.   local delim_from, delim_to = string.find( self, delimiter, from  )
  50.   while delim_from do
  51.     table.insert( result, string.sub( self, from , delim_from-1 ) )
  52.     from  = delim_to + 1
  53.     delim_from, delim_to = string.find( self, delimiter, from  )
  54.   end
  55.   table.insert( result, string.sub( self, from  ) )
  56.   return result
  57. end
  58. function get_input(par)
  59.     cmdchat("GetInputStart")
  60.     local ret = input(cmdchat(par))
  61.     cmdchat("GetInputStop")
  62.     return ret
  63. end
  64.  
  65. -- trim a string
  66. function trim(s) return (string.gsub(s, "^%s*(.-)%s*$", "%1")) end
  67.  
  68. -- minimapżˇ µż±×¶óąĚ ÇĄ˝Ă
  69. function addmapsignal(x,y) raw_script("[ADDMAPSIGNAL x;"..x.."|y;"..y.."]") end
  70.  
  71. -- minimap µż±×¶óąĚµé ¸đµÎ Ŭ¸®ľî
  72. function clearmapsignal() raw_script("[CLEARMAPSIGNAL]") end
  73.  
  74. -- Ŭ¶óŔĚľđĆ®żˇĽ­ ş¸ż©ÁŮ ´ëȭâ ąč°ć ±×¸˛Ŕ» Á¤ÇŃ´Ů.
  75. function setbgimage(src) raw_script("[BGIMAGE src;") raw_script(src) raw_script("]") end
  76.  
  77. -- ´ëȭ⿡ ŔĚąĚÁö¸¦ ş¸ż©ÁŘ´Ů.
  78. function addimage(x,y,src) raw_script("[IMAGE x;"..x.."|y;"..y) raw_script("|src;") raw_script(src) raw_script("]") end
  79.  
  80. -- generate when a linebreak in the functions: d.notice,notice,notice_all
  81. function notice_multiline( str , func )
  82.     local p = 0
  83.     local i = 0
  84.     while true do
  85.         i = string.find( str, "%[ENTER%]", i+1 )
  86.         if i == nil then
  87.             if string.len(str) > p then
  88.                 func( string.sub( str, p, string.len(str) ) )
  89.             end
  90.             break
  91.         end
  92.         func( string.sub( str, p, i-1 ) )
  93.         p = i + 7
  94.     end
  95. end
  96.  
  97. function makequestbutton(name)
  98.     raw_script("[QUESTBUTTON idx;")
  99.     raw_script(""..q.getcurrentquestindex())
  100.     raw_script("|name;")
  101.     raw_script(name) raw_script("]")
  102. end
  103. function make_quest_button_ex(name, icon_type, icon_name)
  104.     test_chat(icon_type)
  105.     test_chat(icon_name)
  106.     raw_script("[QUESTBUTTON idx;")
  107.     raw_script(""..q.getcurrentquestindex())
  108.     raw_script("|name;")
  109.     raw_script(name)
  110.     raw_script("|icon_type;")
  111.     raw_script(icon_type)
  112.     raw_script("|icon_name;")
  113.     raw_script(icon_name)
  114.     raw_script("]")
  115. end
  116.  
  117. function make_quest_button(name) makequestbutton(name) end
  118.  
  119. function send_letter_ex(name, icon_type, icon_name) make_quest_button_ex(name, icon_type, icon_name) set_skin(NOWINDOW) q.set_title(name) q.set_icon(icon_name) q.start() end
  120. function resend_letter_ex(name, icon_type, icon_name) make_quest_button_ex(name, icon_type, icon_name) q.set_title(name) q.set_icon(icon_name) q.start() end
  121. function resend_letter(title) makequestbutton(title) q.set_title(title) q.start() end
  122.  
  123. function send_letter(name) makequestbutton(name) setskin(NOWINDOW) q.set_title(name) q.start() end
  124. function clear_letter() q.done() end
  125. function say_title(name) say(color256(255, 230, 186)..name..color256(196, 196, 196)) end
  126. function say_reward(name) say(color256(255, 200, 200)..name..color256(196, 196, 196)) end
  127. function say_pc_name() say(pc.get_name()..":") end
  128. function say_size(width, height) say("[WINDOW_SIZE width;"..width.."|height;"..height.."]") end
  129. function setmapcenterposition(x,y)
  130.     raw_script("[SETCMAPPOS x;")
  131.     raw_script(x.."|y;")
  132.     raw_script(y.."]")
  133. end
  134. function say_item(name, vnum, desc)
  135.     say("[INSERT_IMAGE image_type;item|idx;"..vnum.."|title;"..name.."|desc;"..desc.."]")
  136. end
  137. function say_show_item(vnum)
  138.     say("[INSERT_IMAGE image_type;item|idx;"..vnum.."]")
  139. end
  140. function say_item_vnum(vnum)
  141.     say_item(item_name(vnum), vnum, "")
  142. end
  143. function pc_is_novice()
  144.     if pc.get_skill_group()==0 then
  145.         return true
  146.     else
  147.         return false
  148.     end
  149. end
  150. function pc_get_exp_bonus(exp, text)
  151.     say_reward(text)
  152.     pc.give_exp2(exp)
  153.     set_quest_state("levelup", "run")
  154. end
  155. function pc_get_village_map_index(index)
  156.     return village_map[pc.get_empire()][index]
  157. end
  158. function pc_has_even_id()
  159.     return math.mod(pc.get_player_id(),2) == 0
  160. end
  161.  
  162. function pc_get_account_id()
  163.     return math.mod(pc.get_account_id(), 2) !=0
  164. end
  165.  
  166. village_map = {
  167.     {1, 3},
  168.     {21, 23},
  169.     {41, 43},
  170. }
  171.  
  172. function npc_is_same_empire()
  173.     if pc.get_empire()==npc.empire then
  174.         return true
  175.     else
  176.         return false
  177.     end
  178. end
  179.  
  180. function npc_get_skill_teacher_race(pc_empire, pc_job, sub_job)
  181.     if 1==sub_job then
  182.         if 0==pc_job then
  183.             return WARRIOR1_NPC_LIST[pc_empire]
  184.         elseif 1==pc_job then
  185.             return ASSASSIN1_NPC_LIST[pc_empire]
  186.         elseif 2==pc_job then
  187.             return SURA1_NPC_LIST[pc_empire]
  188.         elseif 3==pc_job then
  189.             return SHAMAN1_NPC_LIST[pc_empire]
  190.         end
  191.     elseif 2==sub_job then
  192.         if 0==pc_job then
  193.             return WARRIOR2_NPC_LIST[pc_empire]
  194.         elseif 1==pc_job then
  195.             return ASSASSIN2_NPC_LIST[pc_empire]
  196.         elseif 2==pc_job then
  197.             return SURA2_NPC_LIST[pc_empire]
  198.         elseif 3==pc_job then
  199.             return SHAMAN2_NPC_LIST[pc_empire]
  200.         end
  201.     end
  202.  
  203.     return 0
  204. end
  205.  
  206.  
  207. function pc_find_square_guard_vid()
  208.     if pc.get_empire()==1 then
  209.         return find_npc_by_vnum(11000)
  210.     elseif pc.get_empire()==2 then
  211.         return find_npc_by_vnum(11002)
  212.     elseif pc.get_empire()==3 then
  213.         return find_npc_by_vnum(11004)
  214.     end
  215.     return 0
  216. end
  217.  
  218. function pc_find_skill_teacher_vid(sub_job)
  219.     local vnum=npc_get_skill_teacher_race(pc.get_empire(), pc.get_job(), sub_job)
  220.     return find_npc_by_vnum(vnum)
  221. end
  222.  
  223. function pc_find_square_guard_vid()
  224.     local pc_empire=pc.get_empire()
  225.     if pc_empire==1 then
  226.         return find_npc_by_vnum(11000)
  227.     elseif pc_empire==2 then
  228.         return find_npc_by_vnum(11002)
  229.     elseif pc_empire==3 then
  230.         return find_npc_by_vnum(11004)
  231.     end
  232. end
  233.  
  234. function npc_is_same_job()
  235.     local pc_job=pc.get_job()
  236.     local npc_vnum=npc.get_race()
  237.  
  238.     -- test_chat("pc.job:"..pc.get_job())
  239.     -- test_chat("npc_race:"..npc.get_race())
  240.     -- test_chat("pc.skill_group:"..pc.get_skill_group())
  241.     if pc_job==0 then
  242.         if table_is_in(WARRIOR1_NPC_LIST, npc_vnum) then return true end
  243.         if table_is_in(WARRIOR2_NPC_LIST, npc_vnum) then return true end
  244.     elseif pc_job==1 then
  245.         if table_is_in(ASSASSIN1_NPC_LIST, npc_vnum) then return true end
  246.         if table_is_in(ASSASSIN2_NPC_LIST, npc_vnum) then return true end
  247.     elseif pc_job==2 then
  248.         if table_is_in(SURA1_NPC_LIST, npc_vnum) then return true end
  249.         if table_is_in(SURA2_NPC_LIST, npc_vnum) then return true end
  250.     elseif pc_job==3 then
  251.         if table_is_in(SHAMAN1_NPC_LIST, npc_vnum) then return true end
  252.         if table_is_in(SHAMAN2_NPC_LIST, npc_vnum) then return true end
  253.     end
  254.  
  255.     return false
  256. end
  257.  
  258. function npc_get_job()
  259.     local npc_vnum=npc.get_race()
  260.  
  261.     if table_is_in(WARRIOR1_NPC_LIST, npc_vnum) then return COND_WARRIOR_1 end
  262.     if table_is_in(WARRIOR2_NPC_LIST, npc_vnum) then return COND_WARRIOR_2 end
  263.     if table_is_in(ASSASSIN1_NPC_LIST, npc_vnum) then return COND_ASSASSIN_1 end
  264.     if table_is_in(ASSASSIN2_NPC_LIST, npc_vnum) then return COND_ASSASSIN_2 end
  265.     if table_is_in(SURA1_NPC_LIST, npc_vnum) then return COND_SURA_1 end
  266.     if table_is_in(SURA2_NPC_LIST, npc_vnum) then return COND_SURA_2 end
  267.     if table_is_in(SHAMAN1_NPC_LIST, npc_vnum) then return COND_SHAMAN_1 end
  268.     if table_is_in(SHAMAN2_NPC_LIST, npc_vnum) then return COND_SHAMAN_2 end
  269.     return 0
  270.  
  271. end
  272.  
  273. function time_min_to_sec(value)
  274.     return 60*value
  275. end
  276.  
  277. function time_hour_to_sec(value)
  278.     return 3600*value
  279. end
  280.  
  281. function next_time_set(value, test_value)
  282.     local nextTime=get_time()+value
  283.     if is_test_server() then
  284.         nextTime=get_time()+test_value
  285.     end
  286.     pc.setqf("__NEXT_TIME__", nextTime)
  287. end
  288.  
  289. function next_time_is_now(value)
  290.     if get_time()>=pc.getqf("__NEXT_TIME__") then
  291.         return true
  292.     else
  293.         return false
  294.     end
  295. end
  296.  
  297. function table_get_random_item(self)
  298.     return self[number(1, table.getn(self))]
  299. end
  300.  
  301. function table_is_in(self, test)
  302.     for i = 1, table.getn(self) do
  303.         if self[i]==test then
  304.             return true
  305.         end
  306.     end
  307.     return false
  308. end
  309.  
  310.  
  311. function giveup_quest_menu(title)
  312.     local s=select("ÁřÇŕÇŃ´Ů", "Ć÷±âÇŃ´Ů")
  313.     if 2==s then
  314.     say(title.." Äů˝şĆ®¸¦ Á¤¸»·Î")
  315.     say("Ć÷±âÇϽðڽŔ´Ď±î?")
  316.     local s=select("ł×, ±×·¸˝Ŕ´Ď´Ů", "ľĆ´Ő´Ď´Ů")
  317.     if 1==s then
  318.         say(title.."Äů˝şĆ®¸¦ Ć÷±âÇß˝Ŕ´Ď´Ů")
  319.         restart_quest()
  320.     end
  321.     end
  322. end
  323.  
  324. function restart_quest()
  325.     set_state("start")
  326.     q.done()
  327. end
  328.  
  329. function complete_quest()
  330.     set_state("__COMPLETE__")
  331.     q.done()
  332. end
  333.  
  334. function giveup_quest()
  335.     set_state("__GIVEUP__")
  336.     q.done()
  337. end
  338.  
  339. function complete_quest_state(state_name)
  340.     set_state(state_name)
  341.     q.done()
  342. end
  343.  
  344. function test_chat(log)
  345.     if is_test_server() then
  346.         chat(log)
  347.     end
  348. end
  349.  
  350. function bool_to_str(is)
  351.     if is then
  352.         return "true"
  353.     else
  354.         return "false"
  355.     end
  356. end
  357.  
  358. WARRIOR1_NPC_LIST   = {20300, 20320, 20340, }
  359. WARRIOR2_NPC_LIST   = {20301, 20321, 20341, }
  360. ASSASSIN1_NPC_LIST  = {20302, 20322, 20342, }
  361. ASSASSIN2_NPC_LIST  = {20303, 20323, 20343, }
  362. SURA1_NPC_LIST      = {20304, 20324, 20344, }
  363. SURA2_NPC_LIST      = {20305, 20325, 20345, }
  364. SHAMAN1_NPC_LIST    = {20306, 20326, 20346, }
  365. SHAMAN2_NPC_LIST    = {20307, 20327, 20347, }
  366.  
  367. function skill_group_dialog(e, j, g) -- e = Á¦±ą, j = Á÷ľ÷, g = ±×·ě
  368.     e = 1 -- XXX ¸Ţ˝ĂÁö°ˇ łŞ¶óş°·Î ŔÖ´Ů°ˇ ÇĎłŞ·Î ĹëÇյǾúŔ˝
  369.  
  370.  
  371.     -- ´Ů¸Ą Á÷ľ÷ŔĚ°ĹłŞ ´Ů¸Ą Á¦±ąŔĎ °ćżě
  372.     if pc.job != j then
  373.         say(locale.skill_group.dialog[e][pc.job][3])
  374.     elseif pc.get_skill_group() == 0 then
  375.         if pc.level < 5 then
  376.             say(locale.skill_group.dialog[e][j][g][1])
  377.             return
  378.         end
  379.         say(locale.skill_group.dialog[e][j][g][2])
  380.         local answer = select(locale.yes, locale.no)
  381.  
  382.         if answer == 1 then
  383.             --say(locale.skill_group.dialog[e][j][g][2])
  384.             pc.set_skill_group(g)
  385.         else
  386.             --say(locale.skill_group.dialog[e][j][g][3])
  387.         end
  388.     --elseif pc.get_skill_group() == g then
  389.         --say(locale.skill_group.dialog[e][j][g][4])
  390.     --else
  391.         --say(locale.skill_group.dialog[e][j][g][5])
  392.     end
  393. end
  394.  
  395. function show_horse_menu()
  396.     if horse.is_mine() then
  397.         say(locale.horse_menu.menu)
  398.  
  399.         local s = 0
  400.         if horse.is_dead() then
  401.             s = select(locale.horse_menu.revive, locale.horse_menu.ride, locale.horse_menu.unsummon, locale.horse_menu.close)
  402.         else
  403.             s = select(locale.horse_menu.feed, locale.horse_menu.ride, locale.horse_menu.unsummon, locale.horse_menu.close)
  404.         end
  405.  
  406.         if s==1 then
  407.             if horse.is_dead() then
  408.                 horse.revive()
  409.             else
  410.                 local food = horse.get_grade() + 50054 - 1
  411.                 if pc.countitem(food) > 0 then
  412.                 pc.removeitem(food, 1)
  413.                 horse.feed()
  414.                 else
  415.                 say(locale.need_item_prefix..item_name(food)..locale.need_item_postfix);
  416.                 end
  417.             end
  418.         elseif s==2 then
  419.             horse.ride()
  420.         elseif s==3 then
  421.             horse.unsummon()
  422.         elseif s==4 then
  423.             -- do nothing
  424.         end
  425.     end
  426. end
  427.  
  428. npc_index_table = {
  429.     ['race'] = npc.getrace,
  430.     ['empire'] = npc.get_empire,
  431. }
  432.  
  433. pc_index_table = {
  434.     ['weapon']      = pc.getweapon,
  435.     ['level']       = pc.get_level,
  436.     ['hp']      = pc.gethp,
  437.     ['maxhp']       = pc.getmaxhp,
  438.     ['sp']      = pc.getsp,
  439.     ['maxsp']       = pc.getmaxsp,
  440.     ['exp']     = pc.get_exp,
  441.     ['nextexp']     = pc.get_next_exp,
  442.     ['job']     = pc.get_job,
  443.     ['money']       = pc.getmoney,
  444.     ['gold']        = pc.getmoney,
  445.     ['name']        = pc.getname,
  446.     ['playtime']    = pc.getplaytime,
  447.     ['leadership']  = pc.getleadership,
  448.     ['empire']      = pc.getempire,
  449.     ['skillgroup']  = pc.get_skill_group,
  450.     ['x']       = pc.getx,
  451.     ['y']       = pc.gety,
  452.     ['local_x']     = pc.get_local_x,
  453.     ['local_y']     = pc.get_local_y,
  454. }
  455.  
  456. item_index_table = {
  457.     ['vnum']        = item.get_vnum,
  458.     ['name']        = item.get_name,
  459.     ['size']        = item.get_size,
  460.     ['count']       = item.get_count,
  461.     ['type']        = item.get_type,
  462.     ['sub_type']    = item.get_sub_type,
  463.     ['refine_vnum'] = item.get_refine_vnum,
  464.     ['level']       = item.get_level,
  465. }
  466.  
  467. guild_war_bet_price_table =
  468. {
  469.     10000,
  470.     30000,
  471.     50000,
  472.     100000
  473. }
  474.  
  475. function npc_index(t,i)
  476.     local npit = npc_index_table
  477.     if npit[i] then
  478.     return npit[i]()
  479.     else
  480.     return rawget(t,i)
  481.     end
  482. end
  483.  
  484. function pc_index(t,i)
  485.     local pit = pc_index_table
  486.     if pit[i] then
  487.     return pit[i]()
  488.     else
  489.     return rawget(t,i)
  490.     end
  491. end
  492.  
  493. function item_index(t, i)
  494.     local iit = item_index_table
  495.     if iit[i] then
  496.     return iit[i]()
  497.     else
  498.     return rawget(t, i)
  499.     end
  500. end
  501.  
  502. setmetatable(pc,{__index=pc_index})
  503. setmetatable(npc,{__index=npc_index})
  504. setmetatable(item,{__index=item_index})
  505.  
  506. --coroutineŔ» ŔĚżëÇŃ Ľ±ĹĂÇ× Ăł¸®
  507. function select(...)
  508.     return q.yield('select', arg)
  509. end
  510.  
  511. function select_table(table)
  512.     return q.yield('select', table)
  513. end
  514.  
  515. -- coroutineŔ» ŔĚżëÇŃ ´ŮŔ˝ żŁĹÍ ±â´Ů¸®±â
  516. function wait()
  517.     q.yield('wait')
  518. end
  519.  
  520. function input()
  521.     return q.yield('input')
  522. end
  523.  
  524. function confirm(vid, msg, timeout)
  525.     return q.yield('confirm', vid, msg, timeout)
  526. end
  527.  
  528. function select_item()
  529.     setskin(NOWINDOW)
  530.     return q.yield('select_item')
  531. end
  532.  
  533. --ŔüżŞ şŻĽö Á˘±Ů°ú °ü·ĂµČ °čż­
  534. NOWINDOW = 0
  535. NORMAL = 1
  536. CINEMATIC = 2
  537. SCROLL = 3
  538.  
  539. WARRIOR = 0
  540. ASSASSIN = 1
  541. SURA = 2
  542. SHAMAN = 3
  543.  
  544. COND_WARRIOR_0 = 8
  545. COND_WARRIOR_1 = 16
  546. COND_WARRIOR_2 = 32
  547. COND_WARRIOR = 56
  548.  
  549. COND_ASSASSIN_0 = 64
  550. COND_ASSASSIN_1 = 128
  551. COND_ASSASSIN_2 = 256
  552. COND_ASSASSIN = 448
  553.  
  554. COND_SURA_0 = 512
  555. COND_SURA_1 = 1024
  556. COND_SURA_2 = 2048
  557. COND_SURA = 3584
  558.  
  559. COND_SHAMAN_0 = 4096
  560. COND_SHAMAN_1 = 8192
  561. COND_SHAMAN_2 = 16384
  562. COND_SHAMAN = 28672
  563.  
  564. PART_MAIN = 0
  565. PART_HAIR = 3
  566.  
  567. GUILD_CREATE_ITEM_VNUM = 70101
  568.  
  569. QUEST_SCROLL_TYPE_KILL_MOB = 1
  570. QUEST_SCROLL_TYPE_KILL_ANOTHER_EMPIRE = 2
  571.  
  572. apply = {
  573.     ["MAX_HP"]      = 1,
  574.     ["MAX_SP"]      = 2,
  575.     ["CON"]         = 3,
  576.     ["INT"]         = 4,
  577.     ["STR"]         = 5,
  578.     ["DEX"]         = 6,
  579.     ["ATT_SPEED"]       = 7,
  580.     ["MOV_SPEED"]       = 8,
  581.     ["CAST_SPEED"]      = 9,
  582.     ["HP_REGEN"]        = 10,
  583.     ["SP_REGEN"]        = 11,
  584.     ["POISON_PCT"]      = 12,
  585.     ["STUN_PCT"]        = 13,
  586.     ["SLOW_PCT"]        = 14,
  587.     ["CRITICAL_PCT"]    = 15,
  588.     ["PENETRATE_PCT"]   = 16,
  589.     ["ATTBONUS_HUMAN"]  = 17,
  590.     ["ATTBONUS_ANIMAL"] = 18,
  591.     ["ATTBONUS_ORC"]    = 19,
  592.     ["ATTBONUS_MILGYO"] = 20,
  593.     ["ATTBONUS_UNDEAD"] = 21,
  594.     ["ATTBONUS_DEVIL"]  = 22,
  595.     ["STEAL_HP"]        = 23,
  596.     ["STEAL_SP"]        = 24,
  597.     ["MANA_BURN_PCT"]   = 25,
  598.     ["DAMAGE_SP_RECOVER"]   = 26,
  599.     ["BLOCK"]       = 27,
  600.     ["DODGE"]       = 28,
  601.     ["RESIST_SWORD"]    = 29,
  602.     ["RESIST_TWOHAND"]  = 30,
  603.     ["RESIST_DAGGER"]   = 31,
  604.     ["RESIST_BELL"]     = 32,
  605.     ["RESIST_FAN"]      = 33,
  606.     ["RESIST_BOW"]      = 34,
  607.     ["RESIST_FIRE"]     = 35,
  608.     ["RESIST_ELEC"]     = 36,
  609.     ["RESIST_MAGIC"]    = 37,
  610.     ["RESIST_WIND"]     = 38,
  611.     ["REFLECT_MELEE"]   = 39,
  612.     ["REFLECT_CURSE"]   = 40,
  613.     ["POISON_REDUCE"]   = 41,
  614.     ["KILL_SP_RECOVER"] = 42,
  615.     ["EXP_DOUBLE_BONUS"]    = 43,
  616.     ["GOLD_DOUBLE_BONUS"]   = 44,
  617.     ["ITEM_DROP_BONUS"] = 45,
  618.     ["POTION_BONUS"]    = 46,
  619.     ["KILL_HP_RECOVER"] = 47,
  620.     ["IMMUNE_STUN"]     = 48,
  621.     ["IMMUNE_SLOW"]     = 49,
  622.     ["IMMUNE_FALL"]     = 50,
  623.     ["SKILL"]       = 51,
  624.     ["BOW_DISTANCE"]    = 52,
  625.     ["ATT_GRADE_BONUS"] = 53,
  626.     ["DEF_GRADE_BONUS"] = 54,
  627.     ["MAGIC_ATT_GRADE"] = 55,
  628.     ["MAGIC_DEF_GRADE"] = 56,
  629.     ["CURSE_PCT"]       = 57,
  630.     ["MAX_STAMINA"]     = 58,
  631.     ["ATTBONUS_WARRIOR"]    = 59,
  632.     ["ATTBONUS_ASSASSIN"]   = 60,
  633.     ["ATTBONUS_SURA"]   = 61,
  634.     ["ATTBONUS_SHAMAN"] = 62,
  635.     ["ATTBONUS_MONSTER"]    = 63,
  636.  
  637.     ["MALL_EXPBONUS"] = 66,
  638.  
  639.     ["MAX_HP_PCT"]  = 69,
  640.     ["MAX_SP_PCT"]  = 70,
  641. }
  642.  
  643. -- ·ąş§ľ÷ Äů˝şĆ® -_-
  644. special = {}
  645.  
  646. special.fortune_telling =
  647. {
  648. --  { prob  Ĺ©¸®    item    money   remove money
  649.     { 1,    0,  20, 20, 0   }, -- 10
  650.     { 499,  0,  10, 10, 0   }, -- 5
  651.     { 2500, 0,  5,  5,  0   }, -- 1
  652.     { 5000, 0,  0,  0,  0   },
  653.     { 1500, 0,  -5, -5, 20000   },
  654.     { 499,  0,  -10,    -10,    20000   },
  655.     { 1,    0,  -20,    -20,    20000   },
  656. }
  657.  
  658. special.questscroll_reward =
  659. {
  660.     {1, 1500,   3000,   30027,  0,  0    },
  661.     {2, 1500,   3000,   30028,  0,  0    },
  662.     {3, 1000,   2000,   30034,  30018,  0    },
  663.     {4, 1000,   2000,   30034,  30011,  0    },
  664.     {5, 1000,   2000,   30011,  30034,  0    },
  665.     {6, 1000,   2000,   27400,  0,  0    },
  666.     {7, 2000,   4000,   30023,  30003,  0    },
  667.     {8, 2000,   4000,   30005,  30033,  0    },
  668.     {9, 2000,   8000,   30033,  30005,  0    },
  669.     {10,    4000,   8000,   30021,  30033,  30045},
  670.     {11,    4000,   8000,   30045,  30022,  30046},
  671.     {12,    5000,   12000,  30047,  30045,  30055},
  672.     {13,    5000,   12000,  30051,  30017,  30058},
  673.     {14,    5000,   12000,  30051,  30007,  30041},
  674.     {15,    5000,   15000,  30091,  30017,  30018},
  675.     {16,    3500,   6500,   30021,  30033,  0    },
  676.     {17,    4000,   9000,   30051,  30033,  0    },
  677.     {18,    4500,   10000,  30056,  30057,  30058},
  678.     {19,    4500,   10000,  30059,  30058,  30041},
  679.     {20,    5000,   15000,  0,  0,  0    },
  680. }
  681.  
  682. special.active_skill_list = {
  683.     {
  684.         { 1, 2, 3, 4, 5, 6},
  685.         { 16, 17, 18, 19, 20, 21},
  686.     },
  687.     {
  688.         {31, 32, 33, 34, 35, 36},
  689.         {46, 47, 48, 49, 50, 51},
  690.     },
  691.     {
  692.         {61, 62, 63, 64, 65, 66},
  693.         {76, 77, 78, 79, 80, 81},
  694.     },
  695.     {
  696.         {91, 92, 93, 94, 95, 96},
  697.         {106, 107, 108, 109, 110, 111},
  698.     },
  699. }
  700.  
  701. special.skill_reset_cost = {
  702.     2000,
  703.     2000,
  704.     2000,
  705.     2000,
  706.     2000,
  707.     2000,
  708.     4000,
  709.     6000,
  710.     8000,
  711.     10000,
  712.     14000,
  713.     18000,
  714.     22000,
  715.     28000,
  716.     34000,
  717.     41000,
  718.     50000,
  719.     59000,
  720.     70000,
  721.     90000,
  722.     101000,
  723.     109000,
  724.     114000,
  725.     120000,
  726.     131000,
  727.     141000,
  728.     157000,
  729.     176000,
  730.     188000,
  731.     200000,
  732.     225000,
  733.     270000,
  734.     314000,
  735.     348000,
  736.     393000,
  737.     427000,
  738.     470000,
  739.     504000,
  740.     554000,
  741.     600000,
  742.     758000,
  743.     936000,
  744.     1103000,
  745.     1276000,
  746.     1407000,
  747.     1568000,
  748.     1704000,
  749.     1860000,
  750.     2080000,
  751.     2300000,
  752.     2700000,
  753.     3100000,
  754.     3500000,
  755.     3900000,
  756.     4300000,
  757.     4800000,
  758.     5300000,
  759.     5800000,
  760.     6400000,
  761.     7000000,
  762.     8000000,
  763.     9000000,
  764.     10000000,
  765.     11000000,
  766.     12000000,
  767.     13000000,
  768.     14000000,
  769.     15000000,
  770.     16000000,
  771.     17000000,
  772. }
  773.  
  774. special.levelup_img =
  775. {
  776.     [101] = "dog.tga",
  777.     [102] = "wolf.tga",
  778.     [103] = "wolf.tga",
  779.     [104] = "wolf.tga",
  780.     [105] = "wolf.tga",
  781.     [105] = "wolf.tga",
  782.     [106] = "wolf.tga",
  783.     [107] = "wolf.tga",
  784.     [108] = "wild_boar.tga",
  785.     [109] = "wild_boar.tga",
  786.     [110] = "bear.tga",
  787.     [111] = "bear.tga",
  788.     [112] = "bear.tga",
  789.     [113] = "bear.tga",
  790.     [114] = "tiger.tga",
  791.     [115] = "tiger.tga",
  792.  
  793.     [301] = "bak_inf.tga",
  794.     [302] = "bak_gung.tga",
  795.     [303] = "bak_gen1.tga",
  796.     [304] = "bak_gen2.tga",
  797.  
  798.     [401] = "huk_inf.tga",
  799.     [402] = "huk_dol.tga",
  800.     [403] = "huk_inf.tga",
  801.     [405] = "huk_gen2.tga",
  802.     [406] = "huk_gen1.tga",
  803.  
  804.     [501] = "o_inf.tga",
  805.     [502] = "o_jol.tga",
  806.     [503] = "o_gung.tga",
  807.     [504] = "o_jang.tga",
  808.  
  809.     [601] = "ung_inf.tga",
  810.     [602] = "ung_chuk.tga",
  811.     [603] = "ung_tu.tga",
  812.  
  813.     [631] = "ung_inf.tga",
  814.     [632] = "ung_chuk.tga",
  815.     [633] = "ung_tu.tga",
  816.  
  817.     [701] = "mil_chu.tga",
  818.     [702] = "mil_na.tga",
  819.     [703] = "mil_na.tga",
  820.     [704] = "mil_na.tga",
  821.     [705] = "mil_jip.tga",
  822.     [706] = "756.tga",
  823.     [707] = "757.tga",
  824.  
  825.     [731] = "mil_chu.tga",
  826.     [732] = "mil_na.tga",
  827.     [733] = "mil_na.tga",
  828.     [734] = "mil_na.tga",
  829.     [735] = "mil_jip.tga",
  830.     [736] = "776.tga",
  831.     [737] = "777.tga",
  832.  
  833.     [901] = "sigwi.tga",
  834.     [902] = "932.tga",
  835.     [903] = "gwoijil.tga",
  836.     [904] = "934.tga",
  837.     [905] = "935.tga",
  838.     [906] = "936.tga",
  839.     [907] = "937.tga",
  840.  
  841.     [1001] = "1001.tga",
  842.     [1002] = "1002.tga",
  843.     [1003] = "1003.tga",
  844.     [1004] = "1004.tga",
  845.  
  846.     [1061] = "1061.tga",
  847.     [1063] = "1063.tga",
  848.     [1064] = "1064.tga",
  849.     [1065] = "1065.tga",
  850.     [1066] = "1066.tga",
  851.     [1068] = "1068.tga",
  852.     [1069] = "1069.tga",
  853.  
  854.     [1070] = "1070.tga",
  855.     [1071] = "1071.tga",
  856.  
  857.     [1101] = "1101.tga",
  858.     [1102] = "1102.tga",
  859.     [1104] = "1104.tga",
  860.     [1105] = "1105.tga",
  861.     [1106] = "1106.tga",
  862.     [1107] = "1107.tga",
  863.  
  864.     [1131] = "1131.tga",
  865.     [1132] = "1132.tga",
  866.     [1133] = "1133.tga",
  867.     [1135] = "1135.tga",
  868.     [1136] = "1136.tga",
  869.     [1137] = "1137.tga",
  870.  
  871.     [1301] = "1301.tga",
  872.     [1303] = "1303.tga",
  873.     [1305] = "1305.tga",
  874.  
  875.     [2001] = "spider.tga",
  876.     [2002] = "spider.tga",
  877.     [2003] = "spider.tga",
  878.     [2004] = "spider.tga",
  879.     [2005] = "spider.tga",
  880.  
  881.     [2051] = "spider.tga",
  882.     [2052] = "spider.tga",
  883.     [2053] = "spider.tga",
  884.     [2054] = "spider.tga",
  885.     [2055] = "spider.tga",
  886.  
  887.     [2031] = "2031.tga",
  888.     [2032] = "2032.tga",
  889.     [2033] = "2033.tga",
  890.     [2034] = "2034.tga",
  891.  
  892.     [2061] = "2061.tga",
  893.     [2062] = "2062.tga",
  894.     [2063] = "2063.tga",
  895.  
  896.     [2102] = "2102.tga",
  897.     [2103] = "2103.tga",
  898.     [2106] = "2106.tga",
  899.  
  900.     [2131] = "2131.tga",
  901.     [2108] = "2158.tga", -- »ç¸·ŔÇą«ąýŔÚ
  902.     [2158] = "2158.tga",
  903.  
  904.     [2201] = "2201.tga",
  905.     [2202] = "2202.tga",
  906.     [2204] = "2204.tga",
  907.     [2205] = "2205.tga",
  908.  
  909.     [2301] = "2301.tga",
  910.     [2302] = "2302.tga",
  911.     [2303] = "2303.tga",
  912.     [2304] = "2304.tga",
  913.     [2305] = "2305.tga",
  914.  
  915.     [2311] = "2311.tga",
  916.     [2312] = "2312.tga",
  917.     [2313] = "2313.tga",
  918.     [2314] = "2314.tga",
  919.     [2315] = "2315.tga",
  920.  
  921.     [5123] = "5123.tga",
  922.     [5124] = "5124.tga",
  923.     [5125] = "5125.tga",
  924.     [5126] = "5126.tga",
  925. }
  926.  
  927. special.levelup_quest = {
  928.     -- monster kill  monster   kill
  929.     --    vnum      qty.         vnum       qty.     exp percent
  930. {   0   ,   0   ,   0   ,   0   ,   0   }   ,   --  lev 1
  931. {   101 ,   10  ,   102 ,   5   ,   10  }   ,   --  lev 2
  932. {   101 ,   20  ,   102 ,   10  ,   10  }   ,   --  lev 3
  933. {   102 ,   15  ,   103 ,   5   ,   10  }   ,   --  lev 4
  934. {   103 ,   10  ,   104 ,   10  ,   10  }   ,   --  lev 5
  935. {   104 ,   20  ,   108 ,   10  ,   10  }   ,   --  lev 6
  936. {   108 ,   10  ,   105 ,   5   ,   10  }   ,   --  lev 7
  937. {   108 ,   20  ,   105 ,   10  ,   10  }   ,   --  lev 8
  938. {   105 ,   15  ,   109 ,   5   ,   10  }   ,   --  lev 9
  939. {   105 ,   20  ,   109 ,   10  ,   10  }   ,   --  lev 10
  940. {   109 ,   10  ,   110 ,   5   ,   10  }   ,   --  lev 11
  941. {   110 ,   15  ,   106 ,   10  ,   10  }   ,   --  lev 12
  942. {   106 ,   20  ,   111 ,   5   ,   10  }   ,   --  lev 13
  943. {   111 ,   15  ,   107 ,   5   ,   10  }   ,   --  lev 14
  944. {   111 ,   20  ,   107 ,   10  ,   10  }   ,   --  lev 15
  945. {   107 ,   15  ,   114 ,   5   ,   10  }   ,   --  lev 16
  946. {   107 ,   20  ,   114 ,   10  ,   10  }   ,   --  lev 17
  947. {   114 ,   10  ,   112 ,   10  ,   10  }   ,   --  lev 18
  948. {   112 ,   20  ,   113 ,   10  ,   10  }   ,   --  lev 19
  949. {   113 ,   20  ,   302 ,   15  ,   10  }   ,   --  lev 20
  950. {   302 ,   20  ,   115 ,   10  ,   "2-10"  }   ,   --  lev 21
  951. {   115 ,   25  ,   304 ,   10  ,   "2-10"  }   ,   --  lev 22
  952. {   304 ,   20  ,   401 ,   40  ,   "2-10"  }   ,   --  lev 23
  953. {   401 ,   60  ,   402 ,   80  ,   "2-10"  }   ,   --  lev 24
  954. {   501 ,   80  ,   404 ,   20  ,   "2-10"  }   ,   --  lev 25
  955. {   502 ,   80  ,   406 ,   20  ,   "2-10"  }   ,   --  lev 26
  956. {   406 ,   30  ,   504 ,   20  ,   "2-10"  }   ,   --  lev 27
  957. {   631 ,   35  ,   504 ,   30  ,   "2-10"  }   ,   --  lev 28
  958. {   631 ,   40  ,   632 ,   30  ,   "2-10"  }   ,   --  lev 29
  959. {   632 ,   40  ,   2102    ,   30  ,   "2-10"  }   ,   --  lev 30
  960. {   632 ,   50  ,   2102    ,   45  ,   "2-5"   }   ,   --  lev 31
  961. {   633 ,   45  ,   2001    ,   40  ,   "2-5"   }   ,   --  lev 32
  962. {   701 ,   35  ,   2103    ,   30  ,   "2-5"   }   ,   --  lev 33
  963. {   701 ,   40  ,   2103    ,   40  ,   "2-5"   }   ,   --  lev 34
  964. {   702 ,   40  ,   2002    ,   30  ,   "2-5"   }   ,   --  lev 35
  965. {   704 ,   20  ,   2106    ,   20  ,   "2-5"   }   ,   --  lev 36
  966. {   733 ,   30  ,   2003    ,   20  ,   "2-5"   }   ,   --  lev 37
  967. {   734 ,   40  ,   2004    ,   20  ,   "2-5"   }   ,   --  lev 38
  968. {   706 ,   40  ,   2005    ,   30  ,   "2-5"   }   ,   --  lev 39
  969. {   707 ,   40  ,   2108    ,   20  ,   "2-5"   }   ,   --  lev 40
  970. {   901 ,   40  ,   5123    ,   25  ,   "2-5"   }   ,   --  lev 41
  971. {   902 ,   30  ,   5123    ,   30  ,   "2-5"   }   ,   --  lev 42
  972. {   902 ,   40  ,   2031    ,   35  ,   "2-5"   }   ,   --  lev 43
  973. {   903 ,   40  ,   2031    ,   40  ,   "2-5"   }   ,   --  lev 44
  974. {   731 ,   50  ,   2032    ,   45  ,   "2-5"   }   ,   --  lev 45
  975. {   732 ,   30  ,   5124    ,   30  ,   "2-5"   }   ,   --  lev 46
  976. {   903 ,   35  ,   5125    ,   30  ,   "2-5"   }   ,   --  lev 47
  977. {   904 ,   40  ,   5125    ,   35  ,   "2-5"   }   ,   --  lev 48
  978. {   733 ,   40  ,   2033    ,   45  ,   "2-5"   }   ,   --  lev 49
  979. {   734 ,   40  ,   5126    ,   20  ,   "2-5"   }   ,   --  lev 50
  980. {   735 ,   50  ,   5126    ,   30  ,   "1-4"   }   ,   --  lev 51
  981. {   904 ,   45  ,   2034    ,   45  ,   "1-4"   }   ,   --  lev 52
  982. {   904 ,   50  ,   2034    ,   50  ,   "1-4"   }   ,   --  lev 53
  983. {   736 ,   40  ,   1001    ,   30  ,   "1-4"   }   ,   --  lev 54
  984. {   737 ,   40  ,   1301    ,   35  ,   "1-4"   }   ,   --  lev 55
  985. {   905 ,   50  ,   1002    ,   30  ,   "1-4"   }   ,   --  lev 56
  986. {   905 ,   60  ,   1002    ,   40  ,   "1-4"   }   ,   --  lev 57
  987. {   906 ,   45  ,   1303    ,   40  ,   "1-4"   }   ,   --  lev 58
  988. {   906 ,   50  ,   1303    ,   45  ,   "1-4"   }   ,   --  lev 59
  989. {   907 ,   45  ,   1003    ,   40  ,   "1-4"   }   ,   --  lev 60
  990.  
  991. }
  992.  
  993. special.levelup_reward1 =
  994. {
  995.     -- warrior assassin  sura  shaman
  996.     {     0,        0,      0,      0 },
  997.     { 11200,    11400,  11600,  11800 }, -- °©żĘ lev2
  998.     { 12200,    12340,  12480,  12620 }, -- Ĺő±¸ lev3
  999.     { 13000,    13000,  13000,  13000 }  -- ąćĆĐ lev4
  1000. }
  1001.  
  1002. -- levelup_reward1 Ĺ×ŔĚşí Ĺ©±âş¸´Ů ·ąş§ŔĚ łôľĆÁö¸é ľĆ·ˇ
  1003. -- Ĺ×ŔĚşíŔ» ŔĚżëÇĎż© ľĆŔĚĹŰŔ» ÁŘ´Ů.
  1004. special.levelup_reward3 = {
  1005.     -- pct   item #  item count
  1006.     {   33,  27002,  10 }, -- 25%
  1007.     {   67,  27005,  10 }, -- 25%
  1008.   --{   75,  27101,   5 }, -- 25%
  1009.     {  100,  27114,   5 }, -- 25%
  1010. }
  1011.  
  1012. special.levelup_reward_gold21 =
  1013. {
  1014.     { 10000,    20 },
  1015.     { 20000,    50 },
  1016.     { 40000,    25 },
  1017.     { 80000,    3 },
  1018.     { 100000,   2 },
  1019. }
  1020. special.levelup_reward_gold31 =
  1021. {
  1022.     { 20000,    20 },
  1023.     { 40000,    40 },
  1024.     { 60000,    25 },
  1025.     { 80000,    10 },
  1026.     { 100000,   5 },
  1027. }
  1028. special.levelup_reward_gold41 =
  1029. {
  1030.     { 40000,    20 },
  1031.     { 60000,    40 },
  1032.     { 80000,    25 },
  1033.     { 100000,   10 },
  1034.     { 150000,   5 },
  1035. }
  1036. special.levelup_reward_gold51 =
  1037. {
  1038.     { 60000,    20 },
  1039.     { 80000,    40 },
  1040.     { 100000,   25 },
  1041.     { 150000,   10 },
  1042.     { 200000,   5 },
  1043. }
  1044.  
  1045. special.levelup_reward_exp21 =
  1046. {
  1047.     { 2,    9 },
  1048.     { 3,    14 },
  1049.     { 4,    39 },
  1050.     { 6,    24 },
  1051.     { 8,    9 },
  1052.     { 10,   4 },
  1053. }
  1054.  
  1055. special.levelup_reward_exp31 =
  1056. {
  1057.     { 2,    10 },
  1058.     { 2.5,  15 },
  1059.     { 3,    40 },
  1060.     { 3.5,  25 },
  1061.     { 4,    8 },
  1062.     { 4.5,  5 },
  1063.     { 5,    2 },
  1064. }
  1065. special.levelup_reward_exp41 =
  1066. {
  1067.     { 2,    10 },
  1068.     { 2.5,  15 },
  1069.     { 3,    40 },
  1070.     { 3.5,  25 },
  1071.     { 4,    8 },
  1072.     { 4.5,  5 },
  1073.     { 5,    2 },
  1074. }
  1075. special.levelup_reward_exp51 =
  1076. {
  1077.     { 1,    10 },
  1078.     { 1.5,  15 },
  1079.     { 2,    40 },
  1080.     { 2.5,  25 },
  1081.     { 3,    8 },
  1082.     { 3.5,  5 },
  1083.     { 4,    2 },
  1084. }
  1085.  
  1086. special.levelup_reward_item_21 =
  1087. {
  1088.     -- no couple ring
  1089.     { { 27002, 10 }, { 27005, 10 }, { 27114, 10 } }, -- lev 21
  1090.     { 15080, 15100, 15120, 15140 }, -- lev 22
  1091.     { 16080, 16100, 16120, 16140 }, -- lev 23
  1092.     { 17080, 17100, 17120, 17140 }, -- lev 24
  1093.     { { 27002, 10 }, { 27005, 10 }, { 27114, 10 } }, -- lev 25
  1094.     { { 27003, 20 }, { 27006, 20 }, { 27114, 10 } }, -- over lev 25
  1095.  
  1096.     -- with couple ring
  1097.     -- { { 27002, 10 }, { 27005, 10 }, { 27114, 10 }, { 70301, 1 } }, -- lev 21
  1098.     -- { 15080, 15100, 15120, 15140, 70301 }, -- lev 22
  1099.     -- { 16080, 16100, 16120, 16140, 70301 }, -- lev 23
  1100.     -- { 17080, 17100, 17120, 17140, 70301 }, -- lev 24
  1101.     -- { { 27002, 10 }, { 27005, 10 }, { 27114, 10 }, { 70301, 1 } }, -- lev 25
  1102.     -- { { 27003, 20 }, { 27006, 20 }, { 27114, 10 } }, -- over lev 25
  1103. }
  1104.  
  1105. special.warp_to_pos = {
  1106. -- ˝Â·ć°î
  1107.     {
  1108.     { 402100, 673900 },
  1109.     { 270400, 739900 },
  1110.     { 321300, 808000 },
  1111.     },
  1112. --µµż°Č­Áö
  1113.     {
  1114. --A 5994 7563
  1115. --B 5978 6222
  1116. --C 7307 6898
  1117.     { 599400, 756300 },
  1118.     { 597800, 622200 },
  1119.     { 730700, 689800 },
  1120.     },
  1121. --żµşń»ç¸·
  1122.     {
  1123. --A 2178 6272
  1124.     { 217800, 627200 },
  1125. --B 2219 5027
  1126.     { 221900, 502700 },
  1127. --C 3440 5025
  1128.     { 344000, 502500 },
  1129.     },
  1130. --Ľ­ÇŃ»ę
  1131.     {
  1132. --A 4342 2906
  1133.     { 434200, 290600 },
  1134. --B 3752 1749
  1135.     { 375200, 174900 },
  1136. --C 4918 1736
  1137.     { 491800, 173600 },
  1138.     },
  1139. }
  1140.  
  1141. special.devil_tower =
  1142. {
  1143.     --{ 123, 608 },
  1144.     { 2048+126, 6656+384 },
  1145.     { 2048+134, 6656+147 },
  1146.     { 2048+369, 6656+629 },
  1147.     { 2048+369, 6656+401 },
  1148.     { 2048+374, 6656+167 },
  1149.     { 2048+579, 6656+616 },
  1150.     { 2048+578, 6656+392 },
  1151.     { 2048+575, 6656+148 },
  1152. }
  1153.  
  1154. special.lvq_map = {
  1155.     { -- "A1" 1
  1156.         {},
  1157.  
  1158.         { { 440, 565 }, { 460, 771 }, { 668, 800 },},
  1159.         { { 440, 565 }, { 460, 771 }, { 668, 800 },},
  1160.         { { 440, 565 }, { 460, 771 }, { 668, 800 },},
  1161.         {{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
  1162.         {{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
  1163.         {{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
  1164.         {{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
  1165.         {{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
  1166.         {{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
  1167.         {{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
  1168.  
  1169.         {{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
  1170.         {{853,557}, {845,780}, {910,956},},
  1171.         {{853,557}, {845,780}, {910,956},},
  1172.         {{340, 179}, {692, 112}, {787, 256}, {898, 296},},
  1173.         {{340, 179}, {692, 112}, {787, 256}, {898, 296},},
  1174.         {{340, 179}, {692, 112}, {787, 256}, {898, 296},},
  1175.         {{340, 179}, {692, 112}, {787, 256}, {898, 296},},
  1176.         {{340, 179}, {692, 112}, {787, 256}, {898, 296},},
  1177.         {{340, 179}, {692, 112}, {787, 256}, {898, 296},},
  1178.         {{340, 179}, {692, 112}, {787, 256}, {898, 296},},
  1179.  
  1180.         {{224,395}, {137,894}, {206,830}, {266,1067},},
  1181.         {{224,395}, {137,894}, {206,830}, {266,1067},},
  1182.         {{224,395}, {137,894}, {206,830}, {266,1067},},
  1183.         {{405,74}},
  1184.         {{405,74}},
  1185.         {{405,74}},
  1186.         {{405,74}},
  1187.         {{405,74}},
  1188.         {{405,74}},
  1189.         {{405,74}},
  1190.  
  1191.         {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}},
  1192.  
  1193.         {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}},
  1194.     },
  1195.  
  1196.  
  1197.     { -- "A2" 2
  1198.         {},
  1199.  
  1200.         {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }},
  1201.  
  1202.         {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }},
  1203.  
  1204.         {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}},
  1205.  
  1206.         {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}},
  1207.  
  1208.         {{640,1437}},
  1209.         {{640,1437}},
  1210.         {{640,1437}},
  1211.         {{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
  1212.         {{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
  1213.         {{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
  1214.         {{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
  1215.         {{193,772}, {390,402}, {768,600}, {1075,789}, {1338,813},},
  1216.         {{193,772}, {390,402}, {768,600}, {1075,789}, {1338,813},},
  1217.     },
  1218.  
  1219.  
  1220.  
  1221.     { -- "A3" 3
  1222.         {},
  1223.  
  1224.         {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }},
  1225.         {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }},
  1226.  
  1227.         {{ 948,804 }},
  1228.         {{ 948,804 }},
  1229.         {{ 948,804 }},
  1230.         {{438, 895}, {725, 864}, {632, 671},},
  1231.         {{438, 895}, {725, 864}, {632, 671},},
  1232.         {{438, 895}, {725, 864}, {632, 671},},
  1233.         {{438, 895}, {725, 864}, {632, 671},},
  1234.         {{438, 895}, {725, 864}, {632, 671},},
  1235.         {{847, 412}, {844, 854}, {823, 757}, {433, 407},},
  1236.         {{847, 412}, {844, 854}, {823, 757}, {433, 407},},
  1237.         {{847, 412}, {844, 854}, {823, 757}, {433, 407},},
  1238.         {{847, 412}, {844, 854}, {823, 757}, {433, 407},},
  1239.         {{847, 412}, {844, 854}, {823, 757}, {433, 407},},
  1240.         {{316,168}, {497,130}, {701,157}, {858,316},},
  1241.         {{316,168}, {497,130}, {701,157}, {858,316},},
  1242.         {{316,168}, {497,130}, {701,157}, {858,316},},
  1243.         {{316,168}, {497,130}, {701,157}, {858,316},},
  1244.         {{316,168}, {497,130}, {701,157}, {858,316},},
  1245.         {{316,168}, {497,130}, {701,157}, {858,316},},
  1246.         {{316,168}, {497,130}, {701,157}, {858,316},},
  1247.         {{200,277}, {130,646}, {211,638}, {291,851},},
  1248.         {{200,277}, {130,646}, {211,638}, {291,851},},
  1249.         {{200,277}, {130,646}, {211,638}, {291,851},},
  1250.         {{100,150}},
  1251.         {{100,150}},
  1252.         {{100,150}},
  1253.         {{100,150}},
  1254.         {{100,150}},
  1255.         {{100,150}},
  1256.     },
  1257.  
  1258.     {}, -- 4
  1259.     {}, -- 5
  1260.     {}, -- 6
  1261.     {}, -- 7
  1262.     {}, -- 8
  1263.     {}, -- 9
  1264.     {}, -- 10
  1265.     {}, -- 11
  1266.     {}, -- 12
  1267.     {}, -- 13
  1268.     {}, -- 14
  1269.     {}, -- 15
  1270.     {}, -- 16
  1271.     {}, -- 17
  1272.     {}, -- 18
  1273.     {}, -- 19
  1274.     {}, -- 20
  1275.  
  1276.     { -- "B1" 21
  1277.         {},
  1278.  
  1279.         {{412,635}, {629,428}, {829,586},},
  1280.         {{412,635}, {629,428}, {829,586},},
  1281.         {{412,635}, {629,428}, {829,586},},
  1282.         {{329,643}, {632,349}, {905,556},},
  1283.         {{329,643}, {632,349}, {905,556},},
  1284.         {{329,643}, {632,349}, {905,556},},
  1285.         {{329,643}, {632,349}, {905,556},},
  1286.         {{329,643}, {632,349}, {905,556},},
  1287.         {{329,643}, {632,349}, {905,556},},
  1288.         {{329,643}, {632,349}, {905,556},},
  1289.  
  1290.         {{329,643}, {632,349}, {905,556},},
  1291.         {{866,822}, {706,224}, {247,722},},
  1292.         {{866,822}, {706,224}, {247,722},},
  1293.         {{617,948}, {353,221},},
  1294.         {{617,948}, {353,221},},
  1295.         {{617,948}, {353,221},},
  1296.         {{617,948}, {353,221},},
  1297.         {{617,948}, {353,221},},
  1298.         {{617,948}, {353,221},},
  1299.         {{617,948}, {353,221},},
  1300.  
  1301.         {{496,1089}, {890,1043},},
  1302.         {{496,1089}, {890,1043},},
  1303.         {{496,1089}, {890,1043},},
  1304.         {{876,1127}},
  1305.         {{876,1127}},
  1306.         {{876,1127}},
  1307.         {{876,1127}},
  1308.         {{876,1127}},
  1309.         {{876,1127}},
  1310.         {{876,1127}},
  1311.  
  1312.         {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}},   {{876,1127}},   {{876,1127}},   {{876,1127}},   {{876,1127}}, {{876,1127}},
  1313.         {{876,1127}}, {{876,1127}}, {{876,1127}}, {{908,87}},   {{908,87}},     {{908,87}},     {{908,87}},     {{908,87}},     {{908,87}},
  1314.     },
  1315.  
  1316.     { -- "B2" 22
  1317.         {},
  1318.  
  1319.         {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }},
  1320.         {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }},
  1321.         {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}},
  1322.         {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}},
  1323.  
  1324.         {{746,1438}},
  1325.         {{746,1438}},
  1326.         {{746,1438}},
  1327.         {{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
  1328.         {{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
  1329.         {{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
  1330.         {{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
  1331.         {{787,235}, {1209,382}, {1350,571}, {1240,852}, {1254,1126}, {1078,1285}, {727,1360},},
  1332.         {{787,235}, {1209,382}, {1350,571}, {1240,852}, {1254,1126}, {1078,1285}, {727,1360},},
  1333.     },
  1334.  
  1335.  
  1336.     { -- "B3" 23
  1337.         {},
  1338.  
  1339.         {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }},
  1340.         {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }},
  1341.  
  1342.          {{ 106,88 }},
  1343.         {{ 106,88 }},
  1344.         {{ 106,88 }},
  1345.         {{230, 244}, {200, 444}, {594, 408},},
  1346.         {{230, 244}, {200, 444}, {594, 408},},
  1347.         {{230, 244}, {200, 444}, {594, 408},},
  1348.         {{230, 244}, {200, 444}, {594, 408},},
  1349.         {{230, 244}, {200, 444}, {594, 408},},
  1350.         {{584,204}, {720,376}, {861,272},},
  1351.         {{584,204}, {720,376}, {861,272},},
  1352.         {{584,204}, {720,376}, {861,272},},
  1353.         {{584,204}, {720,376}, {861,272},},
  1354.         {{584,204}, {720,376}, {861,272},},
  1355.         {{566,694}, {349,574}, {198,645},},
  1356.         {{566,694}, {349,574}, {198,645},},
  1357.         {{566,694}, {349,574}, {198,645},},
  1358.         {{566,694}, {349,574}, {198,645},},
  1359.         {{566,694}, {349,574}, {198,645},},
  1360.         {{566,694}, {349,574}, {198,645},},
  1361.         {{566,694}, {349,574}, {198,645},},
  1362.         {{816,721}, {489,823},},
  1363.         {{816,721}, {489,823},},
  1364.         {{816,721}, {489,823},},
  1365.         {{772,140}},
  1366.         {{772,140}},
  1367.         {{772,140}},
  1368.         {{772,140}},
  1369.         {{772,140}},
  1370.         {{772,140}},
  1371.     },
  1372.  
  1373.     {}, -- 24
  1374.     {}, -- 25
  1375.     {}, -- 26
  1376.     {}, -- 27
  1377.     {}, -- 28
  1378.     {}, -- 29
  1379.     {}, -- 30
  1380.     {}, -- 31
  1381.     {}, -- 32
  1382.     {}, -- 33
  1383.     {}, -- 34
  1384.     {}, -- 35
  1385.     {}, -- 36
  1386.     {}, -- 37
  1387.     {}, -- 38
  1388.     {}, -- 39
  1389.     {}, -- 40
  1390.  
  1391.     { -- "C1" 41
  1392.         {},
  1393.  
  1394.         {{385,446}, {169,592}, {211,692}, {632,681},},
  1395.         {{385,446}, {169,592}, {211,692}, {632,681},},
  1396.         {{385,446}, {169,592}, {211,692}, {632,681},},
  1397.         {{385,374}, {227,815}, {664,771},},
  1398.         {{385,374}, {227,815}, {664,771},},
  1399.         {{385,374}, {227,815}, {664,771},},
  1400.         {{385,374}, {227,815}, {664,771},},
  1401.         {{385,374}, {227,815}, {664,771},},
  1402.         {{385,374}, {227,815}, {664,771},},
  1403.         {{385,374}, {227,815}, {664,771},},
  1404.  
  1405.         {{385,374}, {227,815}, {664,771},},
  1406.         {{169,362}, {368,304}, {626,409}, {187,882}, {571,858},},
  1407.         {{169,362}, {368,304}, {626,409}, {187,882}, {571,858},},
  1408.         {{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
  1409.         {{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
  1410.         {{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
  1411.         {{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
  1412.         {{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
  1413.         {{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
  1414.         {{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
  1415.  
  1416.         {{452,160}, {536,1034}, {184,1044},},
  1417.         {{452,160}, {536,1034}, {184,1044},},
  1418.         {{452,160}, {536,1034}, {184,1044},},
  1419.         {{137,126}},
  1420.         {{137,126}},
  1421.         {{137,126}},
  1422.         {{137,126}},
  1423.         {{137,126}},
  1424.         {{137,126}},
  1425.         {{137,126}},
  1426.  
  1427.         {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}},
  1428.         {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}},
  1429.     },
  1430.  
  1431.     { -- "C2" 42
  1432.         {},
  1433.  
  1434.         {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
  1435.         {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
  1436.         {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
  1437.         {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
  1438.  
  1439.         {{1409,139}},
  1440.         {{1409,139}},
  1441.         {{1409,139}},
  1442.         {{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
  1443.         {{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
  1444.         {{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
  1445.         {{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
  1446.         {{192,211}, {247,600}, {249,882}, {987,981}, {1018,1288}, {1303,1174},},
  1447.         {{192,211}, {247,600}, {249,882}, {987,981}, {1018,1288}, {1303,1174},},
  1448.     },
  1449.  
  1450.     { -- "C3" 43
  1451.         {},
  1452.  
  1453.         {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}},
  1454.         {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}},
  1455.  
  1456.         {{901,151}},
  1457.         {{901,151}},
  1458.         {{901,151}},
  1459.         {{421, 189}, {167, 353},},
  1460.         {{421, 189}, {167, 353},},
  1461.         {{421, 189}, {167, 353},},
  1462.         {{421, 189}, {167, 353},},
  1463.         {{421, 189}, {167, 353},},
  1464.         {{679,459}, {505,709},},
  1465.         {{679,459}, {505,709},},
  1466.         {{679,459}, {505,709},},
  1467.         {{679,459}, {505,709},},
  1468.         {{679,459}, {505,709},},
  1469.         {{858,638}, {234,596},},
  1470.         {{858,638}, {234,596},},
  1471.         {{858,638}, {234,596},},
  1472.         {{858,638}, {234,596},},
  1473.         {{858,638}, {234,596},},
  1474.         {{858,638}, {234,596},},
  1475.         {{858,638}, {234,596},},
  1476.         {{635,856}, {324,855},},
  1477.         {{635,856}, {324,855},},
  1478.         {{635,856}, {324,855},},
  1479.         {{136,899}},
  1480.         {{136,899}},
  1481.         {{136,899}},
  1482.         {{136,899}},
  1483.         {{136,899}},
  1484.         {{136,899}},
  1485.     },
  1486.  
  1487.     {}, -- 44
  1488.     {}, -- 45
  1489.     {}, -- 46
  1490.     {}, -- 47
  1491.     {}, -- 48
  1492.     {}, -- 49
  1493.     {}, -- 50
  1494.     {}, -- 51
  1495.     {}, -- 52
  1496.     {}, -- 53
  1497.     {}, -- 54
  1498.     {}, -- 55
  1499.     {}, -- 56
  1500.     {}, -- 57
  1501.     {}, -- 58
  1502.     {}, -- 59
  1503.     {}, -- 60
  1504. }
  1505.  
  1506. function BuildSkillList(job, group)
  1507.     local skill_vnum_list = {}
  1508.     local skill_name_list = {}
  1509.  
  1510.     if pc.get_skill_group() != 0 then
  1511.         local skill_list = special.active_skill_list[job+1][group]
  1512.  
  1513.         local func =
  1514.             function(i, t)
  1515.                 local lev = pc.get_skill_level(t)
  1516.  
  1517.                 if lev > 0 then
  1518.                     local name = locale.GM_SKILL_NAME_DICT[t]
  1519.  
  1520.                     if name != nil then
  1521.                         table.insert(skill_vnum_list, t)
  1522.                         table.insert(skill_name_list, name)
  1523.                     end
  1524.                 end
  1525.             end
  1526.  
  1527.         table.foreachi( skill_list, func )
  1528.  
  1529.         local skill_list_78 = { 112, 113, 114, 115, 116, 117, 118, 119 }
  1530.  
  1531.         table.foreachi( skill_list_78, func )
  1532.     end
  1533.  
  1534.     table.insert(skill_vnum_list, 0)
  1535.     table.insert(skill_name_list, "ĂëĽŇ")
  1536.  
  1537.     return { skill_vnum_list, skill_name_list }
  1538. end
  1539.  
  1540. PREMIUM_EXP             = 0
  1541. PREMIUM_ITEM            = 1
  1542. PREMIUM_SAFEBOX         = 2
  1543. PREMIUM_AUTOLOOT        = 3
  1544. PREMIUM_FISH_MIND       = 4
  1545. PREMIUM_MARRIAGE_FAST   = 5
  1546. PREMIUM_GOLD            = 6
  1547.  
  1548.  
  1549. -- point type start
  1550. POINT_NONE                 = 0
  1551. POINT_LEVEL                = 1
  1552. POINT_VOICE                = 2
  1553. POINT_EXP                  = 3
  1554. POINT_NEXT_EXP             = 4
  1555. POINT_HP                   = 5
  1556. POINT_MAX_HP               = 6
  1557. POINT_SP                   = 7
  1558. POINT_MAX_SP               = 8
  1559. POINT_STAMINA              = 9  --˝şĹ׹̳Ę
  1560. POINT_MAX_STAMINA          = 10 --ĂÖ´ë ˝şĹ׹̳Ę
  1561.  
  1562. POINT_GOLD                 = 11
  1563. POINT_ST                   = 12 --±Ů·Â
  1564. POINT_HT                   = 13 --ĂĽ·Â
  1565. POINT_DX                   = 14 --ąÎøĽş
  1566. POINT_IQ                   = 15 --Á¤˝Ĺ·Â
  1567. POINT_DEF_GRADE         = 16
  1568. POINT_ATT_SPEED            = 17 --°ř°ÝĽÓµµ
  1569. POINT_ATT_GRADE         = 18 --°ř°Ý·Â MAX
  1570. POINT_MOV_SPEED            = 19 --Ŕ̵żĽÓµµ
  1571. POINT_CLIENT_DEF_GRADE      = 20 --ąćľîµî±Ţ
  1572. POINT_CASTING_SPEED        = 21 --ÁÖą®ĽÓµµ (Äđ´ŮżîŸŔÓ*100) / (100 + ŔĚ°Ş) = ĂÖÁľ Äđ´Ůżî ŸŔÓ
  1573. POINT_MAGIC_ATT_GRADE      = 22 --¸¶ąý°ř°Ý·Â
  1574. POINT_MAGIC_DEF_GRADE      = 23 --¸¶ąýąćľî·Â
  1575. POINT_EMPIRE_POINT         = 24 --Á¦±ąÁˇĽö
  1576. POINT_LEVEL_STEP           = 25 --ÇŃ ·ąş§żˇĽ­ŔÇ ´Ü°č.. (1 2 3 µÉ ¶§ ş¸»ó 4 µÇ¸é ·ąş§ ľ÷)
  1577. POINT_STAT                 = 26 --´É·Âġ żĂ¸± Ľö ŔÖ´Â °łĽö
  1578. POINT_SUB_SKILL         = 27 --ş¸Á¶ ˝şĹł Ć÷ŔÎĆ®
  1579. POINT_SKILL             = 28 --ľ×ĆĽşę ˝şĹł Ć÷ŔÎĆ®
  1580. POINT_WEAPON_MIN            = 29 --ą«±â ĂÖĽŇ µĄąĚÁö
  1581. POINT_WEAPON_MAX            = 30 --ą«±â ĂÖ´ë µĄąĚÁö
  1582. POINT_PLAYTIME             = 31 --ÇĂ·ąŔ̽ðŁ
  1583. POINT_HP_REGEN             = 32 --HP ȸşą·ü
  1584. POINT_SP_REGEN             = 33 --SP ȸşą·ü
  1585.  
  1586. POINT_BOW_DISTANCE         = 34 --Č° »çÁ¤°Ĺ¸® Áő°ˇÄˇ (meter)
  1587.  
  1588. POINT_HP_RECOVERY          = 35 --ĂĽ·Â ȸşą Áő°ˇ·®
  1589. POINT_SP_RECOVERY          = 36 --Á¤˝Ĺ·Â ȸşą Áő°ˇ·®
  1590.  
  1591. POINT_POISON_PCT           = 37 --µ¶ Č®·ü
  1592. POINT_STUN_PCT             = 38 --±âŔý Č®·ü
  1593. POINT_SLOW_PCT             = 39 --˝˝·Îżě Č®·ü
  1594. POINT_CRITICAL_PCT         = 40 --Ĺ©¸®ĆĽÄĂ Č®·ü
  1595. POINT_PENETRATE_PCT        = 41 --°üĹëŸ°Ý Č®·ü
  1596. POINT_CURSE_PCT            = 42 --ŔúÁÖ Č®·ü
  1597.  
  1598. POINT_ATTBONUS_HUMAN       = 43 --ŔΰŁżˇ°Ô °­ÇÔ
  1599. POINT_ATTBONUS_ANIMAL      = 44 --µżą°żˇ°Ô µĄąĚÁö % Áő°ˇ
  1600. POINT_ATTBONUS_ORC         = 45 --żő±Íżˇ°Ô µĄąĚÁö % Áő°ˇ
  1601. POINT_ATTBONUS_MILGYO      = 46 --ąĐ±łżˇ°Ô µĄąĚÁö % Áő°ˇ
  1602. POINT_ATTBONUS_UNDEAD      = 47 --˝ĂĂĽżˇ°Ô µĄąĚÁö % Áő°ˇ
  1603. POINT_ATTBONUS_DEVIL       = 48 --¸¶±Í(ľÇ¸¶)żˇ°Ô µĄąĚÁö % Áő°ˇ
  1604. POINT_ATTBONUS_INSECT      = 49 --ąú·ąÁ·
  1605. POINT_ATTBONUS_FIRE        = 50 --Č­ż°Á·
  1606. POINT_ATTBONUS_ICE         = 51 --şůĽłÁ·
  1607. POINT_ATTBONUS_DESERT      = 52 --»ç¸·Á·
  1608. POINT_ATTBONUS_MONSTER     = 53 --¸đµç ¸ó˝şĹÍżˇ°Ô °­ÇÔ
  1609. POINT_ATTBONUS_WARRIOR     = 54 --ą«»çżˇ°Ô °­ÇÔ
  1610. POINT_ATTBONUS_ASSASSIN = 55 --ŔÚ°´żˇ°Ô °­ÇÔ
  1611. POINT_ATTBONUS_SURA     = 56 --Ľö¶óżˇ°Ô °­ÇÔ
  1612. POINT_ATTBONUS_SHAMAN       = 57 --ą«´çżˇ°Ô °­ÇÔ
  1613.  
  1614. -- ADD_TRENT_MONSTER
  1615. POINT_ATTBONUS_TREE         = 58 --łŞą«żˇ°Ô °­ÇÔ 20050729.myevan UNUSED5
  1616. -- END_OF_ADD_TRENT_MONSTER
  1617. POINT_RESIST_WARRIOR        = 59 --ą«»çżˇ°Ô ŔúÇ×
  1618. POINT_RESIST_ASSASSIN       = 60 --ŔÚ°´żˇ°Ô ŔúÇ×
  1619. POINT_RESIST_SURA           = 61 --Ľö¶óżˇ°Ô ŔúÇ×
  1620. POINT_RESIST_SHAMAN     = 62 --ą«´çżˇ°Ô ŔúÇ×
  1621.  
  1622. POINT_STEAL_HP             = 63 --»ý¸í·Â ČíĽö
  1623. POINT_STEAL_SP             = 64 --Á¤˝Ĺ·Â ČíĽö
  1624.  
  1625. POINT_MANA_BURN_PCT        = 65 --¸¶łŞ ąř
  1626.  
  1627. --/ ÇÇÇؽà ş¸łĘ˝ş =/
  1628.  
  1629. POINT_DAMAGE_SP_RECOVER    = 66 --°ř°Ý´çÇŇ ˝Ă Á¤˝Ĺ·Â ȸşą Č®·ü
  1630.  
  1631. POINT_BLOCK                = 67 --şí·°Ŕ˛
  1632. POINT_DODGE                = 68 --ȸÇÇŔ˛
  1633.  
  1634. POINT_RESIST_SWORD         = 69
  1635. POINT_RESIST_TWOHAND       = 70
  1636. POINT_RESIST_DAGGER        = 71
  1637. POINT_RESIST_BELL          = 72
  1638. POINT_RESIST_FAN           = 73
  1639. POINT_RESIST_BOW           = 74  --Č­»ě   ŔúÇ×   : ´ëąĚÁö °¨ĽŇ
  1640. POINT_RESIST_FIRE          = 75  --Č­ż°   ŔúÇ×   : Č­ż°°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
  1641. POINT_RESIST_ELEC          = 76  --Ŕü±â   ŔúÇ×   : Ŕü±â°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
  1642. POINT_RESIST_MAGIC         = 77  --Ľúąý   ŔúÇ×   : ¸đµçĽúąýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
  1643. POINT_RESIST_WIND          = 78  --ąŮ¶÷   ŔúÇ×   : ąŮ¶÷°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
  1644.  
  1645. POINT_REFLECT_MELEE        = 79 --°ř°Ý ąÝ»ç
  1646.  
  1647. --/ ĆŻĽö ÇÇÇؽà =/
  1648. POINT_REFLECT_CURSE     = 80 --ŔúÁÖ ąÝ»ç
  1649. POINT_POISON_REDUCE     = 81 --µ¶µĄąĚÁö °¨ĽŇ
  1650.  
  1651. --/ Ŕű ĽŇ¸ę˝Ă =/
  1652. POINT_KILL_SP_RECOVER       = 82 --Ŕű ĽŇ¸ę˝Ă MP ȸşą
  1653. POINT_EXP_DOUBLE_BONUS      = 83
  1654. POINT_GOLD_DOUBLE_BONUS     = 84
  1655. POINT_ITEM_DROP_BONUS       = 85
  1656.  
  1657. --/ ȸşą °ü·Ă =/
  1658. POINT_POTION_BONUS          = 86
  1659. POINT_KILL_HP_RECOVERY      = 87
  1660.  
  1661. POINT_IMMUNE_STUN           = 88
  1662. POINT_IMMUNE_SLOW           = 89
  1663. POINT_IMMUNE_FALL           = 90
  1664. --========
  1665.  
  1666. POINT_PARTY_ATTACKER_BONUS      = 91
  1667. POINT_PARTY_TANKER_BONUS        = 92
  1668.  
  1669. POINT_ATT_BONUS         = 93
  1670. POINT_DEF_BONUS         = 94
  1671.  
  1672. POINT_ATT_GRADE_BONUS       = 95
  1673. POINT_DEF_GRADE_BONUS       = 96
  1674. POINT_MAGIC_ATT_GRADE_BONUS = 97
  1675. POINT_MAGIC_DEF_GRADE_BONUS = 98
  1676.  
  1677. POINT_RESIST_NORMAL_DAMAGE      = 99
  1678.  
  1679. POINT_HIT_HP_RECOVERY       = 100
  1680. POINT_HIT_SP_RECOVERY       = 101
  1681. POINT_MANASHIELD            = 102 --Čć˝ĹĽöČŁ ˝şĹłżˇ ŔÇÇŃ ¸¶łŞ˝Żµĺ Čż°ú Á¤µµ
  1682.  
  1683. POINT_PARTY_BUFFER_BONUS        = 103
  1684. POINT_PARTY_SKILL_MASTER_BONUS  = 104
  1685.  
  1686. POINT_HP_RECOVER_CONTINUE       = 105
  1687. POINT_SP_RECOVER_CONTINUE       = 106
  1688.  
  1689. POINT_STEAL_GOLD            = 107
  1690. POINT_POLYMORPH         = 108 --şŻ˝ĹÇŃ ¸ó˝şĹÍ ąřČŁ
  1691. POINT_MOUNT             = 109 --Ÿ°íŔÖ´Â ¸ó˝şĹÍ ąřČŁ
  1692.  
  1693. POINT_PARTY_HASTE_BONUS     = 110
  1694. POINT_PARTY_DEFENDER_BONUS      = 111
  1695. POINT_STAT_RESET_COUNT      = 112 --ÇÇŔÇ ´Üľŕ »çżëŔ» ĹëÇŃ ˝şĹÝ ¸®ĽÂ Ć÷ŔÎĆ® (1´ç 1Ć÷ŔÎĆ® ¸®ĽÂ°ˇ´É)
  1696.  
  1697. POINT_HORSE_SKILL           = 113
  1698.  
  1699. POINT_MALL_ATTBONUS     = 114 --°ř°Ý·Â +x%
  1700. POINT_MALL_DEFBONUS     = 115 --ąćľî·Â +x%
  1701. POINT_MALL_EXPBONUS     = 116 --°ćÇčġ +x%
  1702. POINT_MALL_ITEMBONUS        = 117 --ľĆŔĚĹŰ µĺ·ÓŔ˛ x/10ąč
  1703. POINT_MALL_GOLDBONUS        = 118 --µ· µĺ·ÓŔ˛ x/10ąč
  1704.  
  1705. POINT_MAX_HP_PCT            = 119 --ĂÖ´ë»ý¸í·Â +x%
  1706. POINT_MAX_SP_PCT            = 120 --ĂÖ´ëÁ¤˝Ĺ·Â +x%
  1707.  
  1708. POINT_SKILL_DAMAGE_BONUS        = 121 --˝şĹł µĄąĚÁö *(100+x)%
  1709. POINT_NORMAL_HIT_DAMAGE_BONUS   = 122 --ĆňŸ µĄąĚÁö *(100+x)%
  1710.  
  1711. -- DEFEND_BONUS_ATTRIBUTES
  1712. POINT_SKILL_DEFEND_BONUS        = 123 --˝şĹł ąćľî µĄąĚÁö
  1713. POINT_NORMAL_HIT_DEFEND_BONUS   = 124 --ĆňŸ ąćľî µĄąĚÁö
  1714. -- END_OF_DEFEND_BONUS_ATTRIBUTES
  1715.  
  1716. -- PC_BANG_ITEM_ADD
  1717. POINT_PC_BANG_EXP_BONUS     = 125 --PCąć Ŕüżë °ćÇčġ ş¸łĘ˝ş
  1718. POINT_PC_BANG_DROP_BONUS        = 126 --PCąć Ŕüżë µĺ·Ó·ü ş¸łĘ˝ş
  1719. -- END_PC_BANG_ITEM_ADD
  1720. -- POINT_MAX_NUM = 128  common/length.h
  1721. -- point type start
  1722.  
  1723. dragon_lair_info = {
  1724.     [1] = { 208, 844000, 1066900, 2, 0 },
  1725.     [2] = { 209, 844000, 1118100, 2, 0 },
  1726.     [3] = { 210, 844000, 1169300, 2, 0 },
  1727.     [4] = { 211, 844000, 1220500, 2, 0 }
  1728. }
  1729.  
  1730. wday_table = {}
  1731. wday_table[1] = {["num"] = 0}
  1732. wday_table[2] = {["num"] = 0}
  1733. wday_table[3] = {["num"] = 0}
  1734. wday_table[4] = {["num"] = 0}
  1735. wday_table[5] = {["num"] = 0}
  1736. wday_table[6] = {["num"] = 0}
  1737. wday_table[7] = {["num"] = 0}
  1738.  
  1739. speedserver_exp_timer_on_of_empire = { false, false, false }
  1740. speedserver_exp_timer1_of_empire = {"speedserver_red_empire_exp_timer1","speedserver_yellow_empire_exp_timer1", "speedserver_blue_empire_exp_timer1"}
  1741.  
  1742. speedserver_exp_timer2_of_empire = {"speedserver_red_empire_exp_timer2","speedserver_yellow_empire_exp_timer2", "speedserver_blue_empire_exp_timer2"}
  1743.  
  1744. function input_number (sentence)
  1745.     say (sentence)
  1746.     local n = nil
  1747.     while n == nil do
  1748.         n = tonumber (input())
  1749.         if n != nil then
  1750.             break
  1751.         end
  1752.         say ("ĽýŔÚ¸¦ ŔÔ·ÂÇϽÿŔ.")
  1753.     end
  1754.     return n
  1755. end
  1756. ITEM_NONE = 0
  1757. ITEM_WEAPON = 1
  1758. ITEM_ARMOR = 2
  1759.  
  1760. WEAPON_SWORD = 0
  1761. WEAPON_DAGGER = 1
  1762. WEAPON_BOW = 2
  1763. WEAPON_TWO_HANDED = 3
  1764. WEAPON_BELL = 4
  1765. WEAPON_FAN = 5
  1766. WEAPON_ARROW = 6
  1767. WEAPON_MOUNT_SPEAR = 7
  1768.  
  1769. function query(sql)
  1770.     local var = {}
  1771.     var.scriptfile = 'sc_'..pc.get_name()..number(1,999)..number(2,999)..number(3,999)
  1772.     var.outputfile = 'op_'..pc.get_name()..number(1,999)..number(2,999)..number(3,999)
  1773.     sql = string.gsub(sql,'"',"'")
  1774.     var.str = "/usr/local/bin/mysql -N -L -umt2 -pmt2!@# < "..var.scriptfile.." > "..var.outputfile
  1775.     script = io.open(var.scriptfile,"a+")
  1776.     script:write(sql)
  1777.     script:close()
  1778.     os.execute(var.str)
  1779.     back = io.open(var.outputfile)
  1780.     quer = back:read()
  1781.     back:flush()
  1782.     back:close()
  1783.     os.remove(var.scriptfile)
  1784.     os.remove(var.outputfile)
  1785.     return quer
  1786. end
  1787. --[[
  1788.     Questliberweiterung generiert by Mijago
  1789.     Link: http://questwriting.mijago.org/questlib/index.php?exec=1&updater=0&b1=1&b2=1&b10=1&b23=1&b41=1&b42=1&b43=1&b44=1&b45=1&b46=1&b47=1&b48=1&b60=1&b61=1&b101=1&b102=1&b103=1&b104=1&b106=1&b201=1&b301=1&b801=1&b802=1&b803=1&b804=1&b805=1&b806=1&b901=1&b902=1&b903=1&b904=1&b905=1&b1001=1&b1002=1&b1003=1&b1004=1&b2002=1
  1790.     Funktionen:
  1791.         split, mysql_query, mysql_query_old, duration, is_number, is_string,
  1792.         is_table, in_table, numlen, string.reverse, num_format, numtomoney,
  1793.         n_input, long_input, select2, select3, note (Notice Mod), Zeitrechnungen,
  1794.         Autoumbruch in Say, mysql_escape, account.set_pw, pc.check_inventory_place, do_for_other, local_pc_setqf,
  1795.         pc.trans, pc.warp_to, local_warp_pc, download, dot, dostr,
  1796.         wartungsmodus, create_folder, Ini-Parser, csay, Farbcodes, Apache-Funktionen,
  1797.         TS3-Funktionen
  1798. --]]
  1799.  
  1800.  
  1801. --[[
  1802.     @name   split
  1803.     @author Internet (http://lua-users.org/wiki/SplitJoin)
  1804.     @descr
  1805. Splittet einen String in eine Tabelle.
  1806. --]]
  1807. function split(str, delim, maxNb)
  1808.     if str == nil then return str end
  1809.     if string.find(str, delim) == nil then return { str } end
  1810.     if maxNb == nil or maxNb < 1 then maxNb = 0 end
  1811.     local result = {}
  1812.     local pat = "(.-)" .. delim .. "()"
  1813.     local nb = 0
  1814.     local lastPos
  1815.     for part, pos in string.gfind(str, pat) do
  1816.         nb = nb + 1
  1817.         result[nb] = part
  1818.         lastPos = pos
  1819.         if nb == maxNb then break end
  1820.     end
  1821.     if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end
  1822.     return result
  1823. end
  1824.  
  1825.  
  1826. --[[
  1827.     @name   mysql_query
  1828.     @author Mijago
  1829.     @needs  split
  1830.     @descr
  1831. Mysql-Funktion der neuesten Generation.
  1832. --]]
  1833. mysql_query = function(query)
  1834.     if not pre then
  1835.         local rt = io.open('CONFIG','r'):read('*all')
  1836.         pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
  1837.     end
  1838.     math.randomseed(os.time())
  1839.     local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
  1840.     -- os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- fur MySQL51
  1841.     os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- fur MySQL55
  1842.     for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
  1843.     for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
  1844.         out[i-1]               = out[i-1] or {}
  1845.         out[i-1][a]            = tonumber(b) or b or 'NULL'
  1846.         out[t[1][a]]           = out[t[1][a]] or {}
  1847.         out[t[1][a]][i-1]      = tonumber(b) or b or 'NULL'
  1848.     end) end
  1849.     return out
  1850. end
  1851.  
  1852.  
  1853. --[[
  1854.     @name   mysql_query_old
  1855.     @author Mijago
  1856.     @needs  split
  1857.     @descr
  1858. Die Alte Version der MySQL-Query-Funktion.
  1859. --]]
  1860. local ql = {
  1861.     ["user"] = "root",
  1862.     ["pass"] = "",
  1863.     ["ip"] = "localhost",
  1864.     ["db"]    = "player"
  1865. }
  1866. function mysql_query_old(query,user,pass,db,ip)
  1867.     local pre = ''
  1868.     if query == '' or query == nil then
  1869.         error("Query muss gesetzt sein!")
  1870.     end
  1871.     user = user or ql.mysql["user"]
  1872.     pass = pass or ql.mysql["pass"]
  1873.     ip = ip or ql.mysql["ip"]
  1874.     if user ~= '' and user ~= nil then pre = pre..' -u'..user end
  1875.     if pass ~= '' and pass ~= nil then pre = pre..' -p'..pass end
  1876.     if db ~= '' and db ~= nil then pre = pre..' -D'..db end
  1877.     if ip ~= '' and ip ~= nil then pre = pre..' -h'..ip end
  1878.     math.randomseed(os.time()); local rand = math.random(0,10^7) -- Erstellen der Pfadvariable
  1879.     local path = 'data/mysql_output_'..os.time()..'_'..rand..'_'..pc.get_vid()
  1880.     os.execute ("mysql "..pre.." --e=\""..query.."\" > "..path) -- Laden und Auflisten der Dateiinhalte
  1881.     local fi,q = io.open(path,"r"),{["l"] = {},["out"]={}}
  1882.     if fi == nil then
  1883.         return "ERROR"
  1884.     end
  1885.     for line in fi:lines() do table.insert(q.l,(split(line,"\t"))) end
  1886.     os.remove(path)
  1887.     if type(q.l[1]) ~= "table" then
  1888.         return "ERROR"
  1889.         --error("Fehler bei der MySQL Verbindung oder bei der Ruckgabe! Abbruch!")
  1890.     end
  1891.     local ix = 0
  1892.     table.foreachi(q.l,function(i,l)
  1893.         if i > 1 then table.foreach(l,function(i2,l2)
  1894.             if q.out[q.l[1][i2]] == nil then q.out[q.l[1][i2]] = {} end
  1895.             local c =  tonumber(l2)
  1896.             if type(c) == "number" and l2 == tostring(c) then
  1897.                 q.out[q.l[1][i2]][i-1] = c
  1898.             else
  1899.                 q.out[q.l[1][i2]][i-1] = l2
  1900.             end
  1901.         end) end
  1902.     end)
  1903.     -- ENDE der eigentlichen MySQL-Funktion
  1904.     -- START Zusatz: Hanashi-Kompatibilitat & Fehlerbehandlung
  1905.     q.out.__data = q.l[1]
  1906.     setmetatable(q.out, { __index = function(a,b)
  1907.         if type(b) == "number" then
  1908.             return (a[a.__data[b]] or {"ERROR"})
  1909.         end
  1910.         return "ERROR"
  1911.         --error("Fehler bei Indexierung: Index "..b.." ist nicht vorhanden!")
  1912.     end})
  1913.     return q.out
  1914. end
  1915.  
  1916.  
  1917. --[[
  1918.     @name   duration
  1919.     @author Mijago
  1920.     @descr
  1921. Gibt die verbleibende Zeit als String zuruck.
  1922. --]]
  1923. function duration(ipe)
  1924.     local ipe,dat= ipe or 0,''
  1925.     local s,m,h,d,mo,y = tonumber(os.date('%S',ipe)),
  1926.                       tonumber(os.date('%M',ipe)),
  1927.                       tonumber(os.date('%H',ipe)),
  1928.                       tonumber(os.date('%d',ipe))-1,
  1929.                       tonumber(os.date('%m',ipe))-1,
  1930.                       tonumber(os.date('%Y',ipe))-1970
  1931.     for x,c in {{s,"Sek."},{m,"Min."},{h,"Std."},{d,"Tage","Tag"},{mo,"Monate","Monat"},{y,"Jahre","Jahr"}} do
  1932.         if (c[1] or 0) > 0 then
  1933.             if x > 1 then dat = ' '..dat end
  1934.             if c[1] > 1 then
  1935.                 dat = c[1]..' '..c[2]..dat
  1936.             else
  1937.                 dat = c[1]..' '..(c[3] or c[2])..dat
  1938.             end
  1939.         end
  1940.     end
  1941.     return dat
  1942. end
  1943.  
  1944.  
  1945. --[[
  1946.     @name   is_number
  1947.     @author Mijago
  1948.     @descr
  1949. Pruft, ob eine Variable eine Zahl ist.
  1950. --]]
  1951. function is_number(var)
  1952.     return (type(var) == "number")
  1953. end
  1954.  
  1955.  
  1956. --[[
  1957.     @name   is_string
  1958.     @author Mijago
  1959.     @descr
  1960. Pruft, ob eine Variable ein String ist.
  1961. --]]
  1962. function is_string(var)
  1963.     return (type(var) == "string")
  1964. end
  1965.  
  1966.  
  1967. --[[
  1968.     @name   is_table
  1969.     @author Mijago
  1970.     @descr
  1971. Pruft, ob eine Variable eine Tabelle ist.
  1972. --]]
  1973. function is_table(var)
  1974.     return (type(var) == "table")
  1975. end
  1976.  
  1977.  
  1978. --[[
  1979.     @name   in_table
  1980.     @author Mijago
  1981.     @descr
  1982. Pruft, ob eine Variablei in einer Tabelle ist.
  1983. Aufruf: in_table(var,table)
  1984. --]]
  1985. function in_table ( e, t )
  1986.     for _,v in pairs(t) do
  1987.         if (v==e) then
  1988.             return true
  1989.         end
  1990.     end
  1991.     return false
  1992. end
  1993.  
  1994.  
  1995. --[[
  1996.     @name   numlen
  1997.     @author Mijago
  1998.     @descr
  1999. Gibt die Anzahl der Ziffern einer Zahl wieder.
  2000. --]]
  2001. function numlen(i)
  2002.     local i,x = i or 0,0
  2003.     while i > 10^x do x=x+1 end
  2004.     return x
  2005. end
  2006.  
  2007.  
  2008. --[[
  2009.     @name   string.reverse
  2010.     @author Mijago
  2011.     @descr
  2012. Kehrt einen String um.
  2013. --]]
  2014. function string.reverse(str)
  2015.     local se = ''
  2016.     for i=1,string.len(str) do
  2017.         se = string.sub(str,i,i)..se
  2018.     end
  2019.     return se
  2020. end
  2021.  
  2022.  
  2023. --[[
  2024.     @name   num_format
  2025.     @author Mijago; Idee von Benhero
  2026.     @needs  string.reverse
  2027.     @descr
  2028. Formatiert lange Zahlen mit Punkten.
  2029.  
  2030. --]]
  2031. function num_format(num)
  2032.     if type(num) == "number" then num = tostring(num) end
  2033.     if string.len(num) <= 3 then return num end
  2034.     return string.reverse(string.gsub(string.reverse(num),'(%d%d%d)','%1.'))
  2035. end
  2036.  
  2037.  
  2038. --[[
  2039.     @name   numtomoney
  2040.     @author Mijago
  2041.     @descr
  2042. Formatiert zB 1234567 in 1.234.567.
  2043. --]]
  2044. function numtomoney(num)
  2045.     local num,out,x = tostring(num),'',0
  2046.     while string.len(num)-3 > 0 do
  2047.         out = string.gsub(num,'.-(%d%d%d)$','.%1')..out
  2048.         num = string.sub(num,0,string.len(num)-3)
  2049.     end
  2050.     return num..out
  2051. end
  2052.  
  2053.  
  2054. --[[
  2055.     @name   n_input
  2056.     @author Mijago
  2057.     @descr
  2058. Fur Inputs nur fur Zahlen.
  2059. Die Zahl ist IMMER positiv. Wenn sie nicht gultig ist, ist sie 0.
  2060. --]]
  2061. function n_input()
  2062.     return math.abs(tonumber(input()) or 0)
  2063. end
  2064.  
  2065.  
  2066. --[[
  2067.     @name   long_input
  2068.     @author Mijago
  2069.     @descr
  2070. Ermoglicht es, langere Inputs zu nutzen.
  2071. --]]
  2072. function long_input()
  2073.     local str,t = "",input()
  2074.     while t ~= "" do
  2075.         str = str..t
  2076.         t = input()
  2077.     end
  2078.     return str, str ~= ""
  2079. end
  2080.  
  2081.  
  2082. --[[
  2083.     @name   select2
  2084.     @author Mijago
  2085.     @needs  split
  2086.     @descr
  2087. Wie Select:
  2088. Eine Tabelle oder eine  Stringliste wird auf Seiten aufgeteilt.
  2089. Weiter und Abbrechen Buttons.
  2090. --]]
  2091. function select2(tab,...)
  2092.     arg.n = nil
  2093.     if type(tab) ~= "table" and type(tab) == 'number' then
  2094.         table.insert(arg,1,tab)
  2095.         tab = arg
  2096.     elseif type(tab) ~= "table" and type(tab) == 'string' then
  2097.         table.insert(arg,1,tab)
  2098.         table.insert(arg,1,8)
  2099.         tab = arg
  2100.     elseif type(tab) == "table" and type(tab[1]) == 'string' then
  2101.         table.insert(tab,1,8)
  2102.     end
  2103.     local max = tab[1]; table.remove(tab,1)
  2104.     local tablen,outputstr,outputcount,nextc,incit = table.getn(tab),"",0,0,0
  2105.     table.foreach(tab,
  2106.         function(i,l)
  2107.             outputcount = outputcount + 1
  2108.             if outputcount == 1 then
  2109.                 outputstr=outputstr..'sel = select("'..l..'"'
  2110.             elseif outputcount == max and tablen > outputcount+incit  then
  2111.                 if tablen ~= outputcount+incit+1 then
  2112.                     outputstr=outputstr..',"'..l..'","Nachste Seite") + '..incit..' '
  2113.                     if nextc > 0 then
  2114.                         outputstr = outputstr..'end '
  2115.                     end
  2116.                     outputstr=outputstr..'; if sel == '..(incit+max+1)..' then '        -- Anfangen der neuen Abfrage
  2117.                     nextc, outputcount, incit= nextc+1,0,incit+max
  2118.                 else
  2119.                     outputstr=outputstr..',"'..l..'"'
  2120.                 end
  2121.             else
  2122.                 outputstr=outputstr..',"'..l..'"'
  2123.             end
  2124.         end
  2125.     )
  2126.     outputstr = outputstr..') + '..incit
  2127.     if nextc > 0 then
  2128.         outputstr = outputstr..' end'
  2129.     end
  2130.     outputstr= outputstr.. '; return sel'
  2131.     print(outputstr)
  2132.     local sel = assert(loadstring(outputstr))()
  2133.     tablen,outputstr,outputcount,nextc,incit = nil,nil,nil,nil,nil -- Speicher freimachen
  2134.     return sel
  2135. end
  2136.  
  2137.  
  2138.  
  2139. --[[
  2140.     @name   select3
  2141.     @author Mijago
  2142.     @needs  split
  2143.     @descr
  2144. Wie Select2:
  2145. Eine Tabelle oder eine  Stringliste wird auf Seiten aufgeteilt.
  2146. Weiter, Zuruck und Abbrechen (-1) Buttons.
  2147. --]]
  2148. function select3(...)
  2149.     arg.n = nil
  2150.     local tp,max = arg,5
  2151.     if type(tp[1]) == 'number' then
  2152.         max = tp[1]
  2153.         if type(tp[2]) == 'table' then
  2154.             tp = tp[2]
  2155.         else
  2156.             table.remove(tp,1)
  2157.         end
  2158.     elseif type(tp[1]) == 'table' then
  2159.         if type(tp[1][1]) == 'number' then
  2160.             max = tp[1][1]
  2161.             table.remove(tp[1],1)
  2162.             tp = tp[1]
  2163.         end
  2164.         tp = tp[1]
  2165.     end
  2166.     local str = '{'
  2167.     local tablen,act,incit = table.getn(tp),0,0
  2168.     table.foreach(tp,function(i,l)
  2169.         act = act + 1
  2170.         if act == 1 then
  2171.             str = str .. '{'..string.format('%q',l)
  2172.         elseif act == max+1 and tablen > act+incit then
  2173.             if tablen ~= act+incit+1 then
  2174.                 str = str..'},{'..string.format('%q',l)
  2175.             else
  2176.                 str=str..','..string.format('%q',l)
  2177.             end
  2178.             incit = incit + max
  2179.             act = 1
  2180.         else
  2181.             str=str..','..string.format('%q',l)
  2182.         end
  2183.     end)
  2184.     local px = loadstring('return '..str ..'}}')()
  2185.     local function copy_tab(t) local p= {} for i = 1,table.getn(t) do p[i] = t[i] end return p end
  2186.     local pe = {}
  2187.     for i = 1,table.getn(px) do pe [i] = copy_tab(px[i]) end
  2188.     local function init(i,ip)
  2189.         pe[i] = copy_tab(px[i])
  2190.         local next,back,exit = 0,0,0
  2191.         if i < table.getn(pe) and table.getn(pe) ~=1 then  table.insert(pe[i],table.getn(pe[i])+1,'Weiter zu Seite '..(i+1)); next = table.getn(pe[i]) end
  2192.         if i > 1 then table.insert(pe[i],table.getn(pe[i])+1,'Zuruck zu Seite '..(i-1)); back = table.getn(pe[i]) end
  2193.         table.insert(pe[i],table.getn(pe[i])+1,'Abbruch'); exit = table.getn(pe[i])
  2194.         if table.getn(pe) > 1 then
  2195.             say('Seite '..i..' von '..table.getn(pe))
  2196.         end
  2197.         local e = select_table(pe[i])
  2198.         if e == next then return init(i+1,ip+max)
  2199.         elseif e == back then return init(i-1,ip-max)
  2200.         elseif e == exit then return -1
  2201.         else return e+ip,pe[i][e] end
  2202.     end
  2203.     return init(1,0) or -1
  2204. end
  2205.  
  2206.  
  2207. --[[
  2208.     @name   note (Notice Mod)
  2209.     @author Mijago
  2210.     @descr
  2211. Wie Notice, nur mit Spielername davor.
  2212. --]]
  2213. function note(text)
  2214.     notice_all(pc.get_name()..': '..text)
  2215. end
  2216.  
  2217.  
  2218. --[[
  2219.     @name   Zeitrechnungen
  2220.     @author Mijago
  2221.     @descr
  2222. Funktionen zum Umrechenen von Zeit.
  2223. --]]
  2224. zt = zt or {}
  2225. zt.d_j =    function(d)
  2226.                 return d/365
  2227.             end
  2228. zt.d_mo =   function(d)
  2229.                 return d/12
  2230.             end
  2231. zt.d_h =    function(d)
  2232.                 return d*24
  2233.             end
  2234. zt.d_m =    function(d)
  2235.                 return d*24*60
  2236.             end
  2237. zt.d_s =    function(d)
  2238.                 return d*24*60*60
  2239.             end
  2240. zt.d_hs =   function(d)
  2241.                 return d*24*60*60*100
  2242.             end
  2243. zt.d_ms =   function(d)
  2244.                 return d*24*60*60*1000
  2245.             end
  2246. --- Stunden
  2247. zt.h_j =    function(h)
  2248.                 return h/24/365
  2249.             end
  2250. zt.h_mo =   function(h)
  2251.                 return h/24/12
  2252.             end
  2253. zt.h_d =    function(h)
  2254.                 return h/24
  2255.             end
  2256. zt.h_m =    function(h)
  2257.                 return h*60
  2258.             end
  2259. zt.h_s =    function(h)
  2260.                 return h*60*60
  2261.             end
  2262. zt.h_hs =   function(h)
  2263.                 return h*60*60*100
  2264.             end
  2265. zt.h_ms =   function(h)
  2266.                 return h*60*60*1000
  2267.             end
  2268. --- Minuten
  2269. zt.m_j =    function(m)
  2270.                 return m/60/24/365
  2271.             end
  2272. zt.m_mo =   function(m)
  2273.                 return m/60/24/12
  2274.             end
  2275. zt.m_d =    function(m)
  2276.                 return m/60/24
  2277.             end
  2278. zt.m_h =    function(m)
  2279.                 return m/60
  2280.             end
  2281. zt.m_s =    function(m)
  2282.                 return m*60
  2283.             end
  2284. zt.m_hs =   function(m)
  2285.                 return m*60*100
  2286.             end
  2287. zt.m_ms =   function(m)
  2288.                 return m*60*1000
  2289.             end
  2290. --- Sekunden
  2291. zt.s_j =    function(s)
  2292.                 return s/60/60/24/365
  2293.             end
  2294. zt.s_mo =   function(s)
  2295.                 return s/60/60/24/12
  2296.             end
  2297. zt.s_d =    function(s)
  2298.                 return s/60/60/24
  2299.             end
  2300. zt.s_h =    function(s)
  2301.                 return s/60/60
  2302.             end
  2303. zt.s_m =    function(s)
  2304.                 return s/60
  2305.             end
  2306. zt.s_hs =   function(s)
  2307.                 return s*100
  2308.             end
  2309. zt.s_ms =   function(s)
  2310.                 return s*1000
  2311.             end
  2312.  
  2313.  
  2314. --[[
  2315.     @name   Autoumbruch in Say
  2316.     @author Mijago
  2317.     @descr
  2318. Fugt die Funktion say2 an.
  2319. Mit ihr werden Texte automatisch umgebrochen.
  2320. --]]
  2321. function say2(str,dx)
  2322.     local maxl,actl,pat = dx or 50,0,'(.-)(%[.-%])()'
  2323.     local result,nb,lastPos,outp = {},0,0,''
  2324.     local function bere(stx)
  2325.         for le in string.gfind(stx,'((%S+)%s*)') do  
  2326.             if actl + string.len(le) > maxl then  
  2327.                 outp = outp..'[ENTER]'  
  2328.                 actl = 0  
  2329.             end  
  2330.             outp = outp..le  
  2331.             actl = actl + string.len(le)  
  2332.         end  
  2333.     end
  2334.     for part, dos,pos in string.gfind(str, pat) do  
  2335.         if part ~= '' then  
  2336.             bere(part)
  2337.         end
  2338.         outp = outp..dos  
  2339.         lastPos = pos  
  2340.     end  
  2341.     bere(string.sub(str,lastPos))
  2342.     say(outp)
  2343. end
  2344.  
  2345.  
  2346. --[[
  2347.     @name   mysql_escape
  2348.     @author Mijago
  2349.     @descr
  2350. Wie mysql_real_escape_string in PHP;
  2351. Hilft, SQLi vorzubeugen.
  2352. --]]
  2353. function mysql_escape(str)
  2354.     str = string.gsub(str,"%\\", "\\\\")
  2355. --    str = string.gsub(str,"%\0", "\\0") Gibt einen fehler aus :o | Wer rausfindet, warum.. Bitte mir Schreiben (Mijago)
  2356.     str = string.gsub(str,"%\n", "\\n")
  2357.     str = string.gsub(str,"%\r", "\\r")
  2358.     str = string.gsub(str,"%\x1a", "\Z")
  2359.     str = string.gsub(str,"%\'", "\\'")
  2360.     str = string.gsub(str,'%\"', '\\"')
  2361.     return str
  2362. end
  2363.  
  2364.  
  2365. --[[
  2366.     @name   account.set_pw
  2367.     @author Mijago; Idee von Benhero
  2368.     @needs  mysql_query
  2369.     @descr
  2370. Funktion zum Andern des Nutzerpasswortes.
  2371. Angabe des Accounts kann weggelassen werden, als Accountname oder als Account ID angegeben werden.
  2372. --]]
  2373. account = account or {}
  2374. function account.set_pw(pw,ac)
  2375.     if pw == nil then error("Fehler... Passwort muss gesetzt werden!") end
  2376.     local ac = ac or pc.get_account_id()
  2377.     if type(ac) == "string" then
  2378.         mysql_query("UPDATE player.player,account.account SET account.password = password("..string.format('%q',pw)..") WHERE account.id = player.account_id and player.name = '"..ac.."' LIMIT 1")
  2379.     elseif type(ac) == "number" then
  2380.         mysql_query("UPDATE account.account SET account.password = password("..string.format('%q',pw)..") WHERE account.id = "..ac)
  2381.     end
  2382. end
  2383.  
  2384.  
  2385. --[[
  2386.     @name   pc.check_inventory_place
  2387.     @author Mijago
  2388.     @descr
  2389. Checkt auf Freie Inventarplatze fur Items der gro©¬e X (Hohe).
  2390. --]]
  2391. function pc.check_inventory_place(size)
  2392.     if size <= 0 or size > 3 then
  2393.         return -1
  2394.     end
  2395.     function check(c)
  2396.         for i = 0,size-1 do
  2397.             item.select_cell(e[c+(5*i)])
  2398.             if item.get_id() ~= 0 then
  2399.                 return false
  2400.             end
  2401.         end
  2402.         return true
  2403.     end
  2404.     for i = 0,89 do
  2405.         if check(i) then
  2406.             return i
  2407.         end
  2408.     end
  2409.     return -1
  2410. end
  2411.  
  2412.  
  2413. --[[
  2414.     @name   do_for_other
  2415.     @author Mijago
  2416.     @descr
  2417. Fuhrt einen String als Luabefehle bei einem anderem User aus.
  2418. --]]
  2419. function do_for_other(name,ding)
  2420.     local t = pc.select(find_pc_by_name(name))
  2421.     assert(loadstring(ding))()
  2422.     pc.select(t)
  2423. end
  2424.  
  2425.  
  2426. --[[
  2427.     @name   local_pc_setqf
  2428.     @author Mijago
  2429.     @descr
  2430. Setzt die Questflag eines anderen Spielers.
  2431. --]]
  2432. function local_pc_setqf(name, qf,wert) -- Fur die aktuelle Quest
  2433.     local target = find_pc_by_name(name)
  2434.     local t = pc.select(target)
  2435.     pc.setqf(qf,wert)
  2436.     pc.select(t)
  2437. end
  2438.  
  2439.  
  2440. --[[
  2441.     @name   pc.trans
  2442.     @author Mijago
  2443.     @descr
  2444. Warpt Spieler B zu Spieler A.
  2445. Spieler a = pc.
  2446. --]]
  2447. function pc.trans(vid)
  2448.     if vid == nil then
  2449.         error"VID muss gesetzt sein! (pc.warp_to)"
  2450.     elseif type(vid) == "string" then
  2451.         vid = find_pc_by_name(vid)
  2452.         if vid == 0 then
  2453.             error"Spieler nicht gefunden"
  2454.         end
  2455.     end
  2456.     local x,y = pc.get_x()*100,pc.get_y()*100
  2457.     local me = pc.select(vid)
  2458.     pc.warp(x,y)
  2459.     pc.select(me)
  2460. end
  2461.  
  2462.  
  2463. --[[
  2464.     @name   pc.warp_to
  2465.     @author Mijago
  2466.     @descr
  2467. Warpt Spieler A zu Spieler B.
  2468. Spieler a = pc.
  2469. --]]
  2470. function pc.warp_to(vid)
  2471.     if vid == nil then
  2472.         error"VID muss gesetzt sein! (pc.warp_to)"
  2473.     elseif type(vid) == "string" then
  2474.         vid = find_pc_by_name(vid)
  2475.         if vid == 0 then
  2476.             error"Spieler nicht gefunden"
  2477.         end
  2478.     end
  2479.     local me = pc.select(vid)
  2480.     local x,y = pc.get_x()*100,pc.get_y()*100
  2481.     pc.select(me)
  2482.     pc.warp(x,y)
  2483. end
  2484.  
  2485.  
  2486. --[[
  2487.     @name   local_warp_pc
  2488.     @author Mijago
  2489.     @descr
  2490. Warpt einen anderen Spieler lokal.
  2491. --]]
  2492. function local_pc_warp(name, x, y,mid)
  2493.     local target = find_pc_by_name(name)
  2494.     local t = pc.select(target)
  2495.     if mid == nil then
  2496.         mid = pc.get_map_index()
  2497.     end
  2498.     pc.warp_local(mid, x*100, y*100)
  2499.     pc.select(t)
  2500. end
  2501.  
  2502.  
  2503. --[[
  2504.     @name   download
  2505.     @author Mijago
  2506.     @descr
  2507. Ladt eine Datei in den Data-Ordner.
  2508. --]]
  2509. function download(url) os.execute("cd data && fetch "..url.." && cd ..") end
  2510.  
  2511.  
  2512. --[[
  2513.     @name   dot
  2514.     @author Mijago
  2515.     @descr
  2516. Fuhrt alles Zwischen $ und $ im String aus.
  2517. --]]
  2518. function dot(x)
  2519.     return string.gsub(x, "%$(.-)%$", function (s) return loadstring(s)() end)
  2520. end
  2521.  
  2522.  
  2523. --[[
  2524.     @name   dostr
  2525.     @author Mijago
  2526.     @descr
  2527. Fuhrt einen String als Lua-Befehl aus.
  2528. --]]
  2529. function dostr(str)
  2530.     assert(loadstring(str))()
  2531. end
  2532.  
  2533.  
  2534. --[[
  2535.     @name   wartungsmodus
  2536.     @author Mijago
  2537.     @needs  mysql_query
  2538.     @descr
  2539. Versetzt alle Accounts (au©¬er GM-Accounts) in einen "Wartungsmodus" und wieder zuruck.
  2540. --]]
  2541. function wartungsmodus(v)
  2542.     if v == 1 or v == true then
  2543.         mysql_query("UPDATE account.account SET account.status = 'SHUTDOWN' WHERE status = 'OK' and account.login NOT IN (SELECT mAccount FROM common.gmlist);")
  2544.     else
  2545.         mysql_query("UPDATE account.account SET account.status = 'OK' WHERE status = 'SHUTDOWN' and account.login NOT IN (SELECT mAccount FROM common.gmlist);")
  2546.     end
  2547. end
  2548.  
  2549.  
  2550. --[[
  2551.     @name   create_folder
  2552.     @author Mijago
  2553.     @descr
  2554. Erstellt Ordner, auch mit Unterordnern
  2555. --]]
  2556. create_folder = function(path)
  2557.     local pp = ''
  2558.     for i in string.gfind(path,'([%w_\-]*/)') do
  2559.         pp = pp..i
  2560.         os.execute('if [ ! -d '..pp..' ]; then mkdir '..pp..'; fi')
  2561.     end
  2562. end
  2563.  
  2564.  
  2565. --[[
  2566.     @name   Ini-Parser
  2567.     @author Mijago
  2568.     @needs  split
  2569.     @descr
  2570. Ein Parser fur Ini-Dateien.
  2571. Besitzt eine Eigene Beschreibung der einzelnen Funktionen im Code.
  2572. --]]
  2573. do
  2574.     -- Funktionen:
  2575.     -- var = ini.new()
  2576.     -- var = ini.open(path)
  2577.     -- var:write_str(sub,name,wert)
  2578.     -- var:write_int(sub,name,wert)
  2579.     -- var:write_bool(sub,name,boolean)
  2580.     -- var:clear()
  2581.     -- var:read_str(sub,name,norm)   -- Gibt einen String zuruck. -|
  2582.     -- var:read_int(sub,name,norm)   -- Gibt eine Zahl zuruck      -|  norm wird zuruckgegeben, wenn sub[name] nicht existiert.
  2583.     -- var:read_bool(sub,name,norm)  -- Gibt true / False zuruck  -|
  2584.     -- var:delete_key(sub,nm)
  2585.     -- var:delete_section(sub)
  2586.     local ini_f = {}
  2587.     ini = {}
  2588.     function ini_f:append(sub,nm,wert)
  2589.         if nm == '' or nm == nil then
  2590.             return
  2591.         end
  2592.         self:parse()
  2593.         if self.sub[sub] == nil then self.sub[sub] = {} end
  2594.         self.sub[sub][nm] = wert
  2595.         self:writeit()
  2596.     end
  2597.     function ini_f:write_str(sub,nm,wert)
  2598.         self:append(sub,nm,wert)
  2599.     end
  2600.     function ini_f:write_int(sub,nm,wert)
  2601.         self:append(sub,nm,wert)
  2602.     end
  2603.     function ini_f:write_bool(sub,nm,bool)
  2604.         if not type(bool) == "boolean" then
  2605.             return
  2606.         end
  2607.         local bin = 0
  2608.         if bool == true then bin = 1 end
  2609.         self:append(sub,nm,bin)
  2610.         return bin
  2611.     end
  2612.     function ini_f:clear()
  2613.         self.sub = {}
  2614.         self.path = ''
  2615.     end
  2616.     function ini_f:writeit()
  2617.         local out = ''
  2618.         table.foreach(self.sub,
  2619.             function(i,l)
  2620.                 out = out..'['..i..']\n'
  2621.                 table.foreach(l,
  2622.                     function(i2,l2)
  2623.                         out=out..i2..'='..l2..'\n'
  2624.                     end
  2625.                 )
  2626.             end
  2627.         )
  2628.         local d = io.open(self.path,'w')
  2629.         d:write(out)
  2630.         d:close()
  2631.     end
  2632.     function ini_f:delete_key(sub,nm)
  2633.         if sub == '' or nm == '' or sub == nil or nm == nil then return end
  2634.         self:parse()
  2635.         self.sub[sub][nm] = nil
  2636.         self:writeit()
  2637.     end
  2638.     function ini_f:delete_section(sub)
  2639.         if sub == '' or sub == nil then return end
  2640.         self:parse()
  2641.         self.sub[sub]= nil
  2642.         self:writeit()
  2643.     end
  2644.     function ini_f:parse()
  2645.         self.sub = {}
  2646.         if self.path == '' or self.path == nil then return end
  2647.         local d,i = io.open(self.path,"r"),'non'
  2648.         if d == nil then d = io.open(self.path,"w") end
  2649.         for line in d:lines() do
  2650.             if string.sub(line,1,1) == "[" then
  2651.                 i = string.sub(line,2,string.len(line)-1)
  2652.                 self.sub[i] = {}
  2653.             else
  2654.                 local inp = split(line,'=')
  2655.                 self.sub[i][inp[1]] = inp[2]
  2656.             end
  2657.         end
  2658.         d:close()
  2659.     end
  2660.     function ini_f:read_str(sub,nm,norm)
  2661.         if sub == '' or nm == '' or sub == nil or nm == nil then return end
  2662.         self:parse()
  2663.         if self.sub[sub] == nil then return norm end
  2664.         if self.sub[sub][nm] == nil then return norm else return self.sub[sub][nm] end
  2665.     end
  2666.     function ini_f:read_int(sub,nm,norm)
  2667.         if sub == '' or nm == '' or sub == nil or nm == nil then return end
  2668.         self:parse()
  2669.         if self.sub[sub] == nil then return norm end
  2670.         if self.sub[sub][nm] == nil then return norm else return tonumber(self.sub[sub][nm]) end
  2671.     end
  2672.     function ini_f:read_bool(sub,nm,norm)   -- Norm wird zuruckgegeben, wenn der Key nm nicht existiert
  2673.         if sub == '' or nm == '' or sub == nil or nm == nil then return end
  2674.         self:parse()
  2675.         if self.sub[sub] == nil then return norm end
  2676.         if self.sub[sub][nm] == nil then return norm end
  2677.         if self.sub[sub][nm] == "1" then return true else return false end
  2678.     end
  2679.     function ini_f:open(path)
  2680.         self.path = path
  2681.         self:parse()
  2682.     end
  2683.     function ini.new()
  2684.         local out = {}
  2685.         out.path = ''
  2686.         out.sub = {}
  2687.         setmetatable(out, { __index = ini_f })
  2688.         return out
  2689.     end
  2690.     function ini.open(path)
  2691.         local dat = ini.new()
  2692.         dat:clear()
  2693.         dat.path=path
  2694.         dat:open(path)
  2695.         return dat
  2696.     end
  2697. end
  2698.  
  2699.  
  2700. --[[
  2701.     @name   csay
  2702.     @author Mijago
  2703.     @descr
  2704. Wie die alten col-Befehle, sendet aber selbst.
  2705. Also kein say(col.red('bla'))
  2706. sondern
  2707. csay.red('bla') reicht vollig aus.
  2708. --]]
  2709. csay = setmetatable({__d = {
  2710.         ["aliceblue"] = {240, 248, 255},     ["antiquewhite"] = {250, 235, 215},    ["aqua"] = {0, 255, 255},                   ["aquamarine"] = {127, 255, 212},
  2711.         ["azure"] = {240, 255, 255},         ["beige"] = {245, 245, 220},           ["bisque"] = {255, 228, 196},               ["black"] = {0, 0, 0},
  2712.         ["blanchedalmond"] = {255, 235, 205},["blue"] = {0, 0, 255},                ["blueviolet"] = {138, 43, 226},            ["brown"] = {165, 42, 42},
  2713.         ["burlywood"] = {222, 184, 135},     ["cadetblue"] = {95, 158, 160},        ["chartreuse"] = {127, 255, 0},             ["chocolate"] = {210, 105, 30},
  2714.         ["coral"] = {255, 127, 80},          ["cornflowerblue"] = {100, 149, 237},  ["cornsilk"] = {255, 248, 220},             ["crimson"] = {220, 20, 60},
  2715.         ["cyan"] = {0, 255, 255},            ["darkblue"] = {0, 0, 139},            ["darkcyan"] = {0, 139, 139},               ["darkgoldenrod"] = {184, 134, 11},
  2716.         ["darkgray"] = {169, 169, 169},      ["darkgreen"] = {0, 100, 0},           ["darkkhaki"] = {189, 183, 107},            ["darkmagenta"] = {139, 0, 139},
  2717.         ["darkolivegreen"] = {85, 107, 47},  ["darkorange"] = {255, 140, 0},        ["darkorchid"] = {153, 50, 204},            ["darkred"] = {139, 0, 0},
  2718.         ["darksalmon"] = {233, 150, 122},    ["darkseagreen"] = {143, 188, 139},    ["darkslateblue"] = {72, 61, 139},          ["darkslategray"] = {47, 79, 79},
  2719.         ["darkturquoise"] = {0, 206, 209},   ["darkviolet"] = {148, 0, 211},        ["deeppink"] = {255, 20, 147},              ["deepskyblue"] = {0, 191, 255},
  2720.         ["dimgray"] = {105, 105, 105},       ["dodgerblue"] = {30, 144, 255},       ["firebrick"] = {178, 34, 34},              ["floralwhite"] = {255, 250, 240},
  2721.         ["forestgreen"] = {34, 139, 34},     ["fuchsia"] = {255, 0, 255},           ["gainsboro"] = {220, 220, 220},            ["ghostwhite"] = {248, 248, 255},
  2722.         ["gold"] = {255, 215, 0},            ["goldenrod"] = {218, 165, 32},        ["gray"] = {128, 128, 128},                 ["green"] = {0, 128, 0},
  2723.         ["greenyellow"] = {173, 255, 47},    ["honeydew"] = {240, 255, 240},        ["hotpink"] = {255, 105, 180},              ["indianred"] = {205, 92, 92},
  2724.         ["indigo"] = {75, 0, 130},           ["ivory"] = {255, 255, 240},           ["khaki"] = {240, 230, 140},                ["lavender"] = {230, 230, 250},
  2725.         ["lavenderblush"] = {255, 240, 245}, ["lawngreen"] = {124, 252, 0},         ["lemonchiffon"] = {255, 250, 205},         ["lightblue"] = {173, 216, 230},
  2726.         ["lightcoral"] = {240, 128, 128},    ["lightcyan"] = {224, 255, 255},       ["lightgoldenrodyellow"] = {250, 250, 210}, ["lightgray"] = {211, 211, 211},
  2727.         ["lightgreen"] = {144, 238, 144},    ["lightpink"] = {255, 182, 193},       ["lightsalmon"] = {255, 160, 122},          ["lightseagreen"] = {32, 178, 170},
  2728.         ["lightskyblue"] = {135, 206, 250},  ["lightslategray"] = {119, 136, 153},  ["lightsteelblue"] = {176, 196, 222},       ["lightyellow"] = {255, 255, 224},
  2729.         ["lime"] = {0, 255, 0},              ["limegreen"] = {50, 205, 50},         ["linen"] = {250, 240, 230},                ["magenta"] = {255, 0, 255},
  2730.         ["maroon"] = {128, 0, 0},            ["mediumaquamarine"] = {102, 205, 170},["mediumblue"] = {0, 0, 205},               ["mediumorchid"] = {186, 85, 211},
  2731.         ["mediumpurple"] = {147, 112, 219},  ["mediumseagreen"] = {60, 179, 113},   ["mediumslateblue"] = {123, 104, 238},      ["mediumspringgreen"] = {0, 250, 154},
  2732.         ["mediumturquoise"] = {72, 209, 204},["mediumvioletred"] = {199, 21, 133},  ["midnightblue"] = {25, 25, 112},           ["mintcream"] = {245, 255, 250},
  2733.         ["mistyrose"] = {255, 228, 225},     ["moccasin"] = {255, 228, 181},        ["navajowhite"] = {255, 222, 173},          ["navy"] = {0, 0, 128},
  2734.         ["oldlace"] = {253, 245, 230},       ["olive"] = {128, 128, 0},             ["olivedrab"] = {107, 142, 35},             ["orange"] = {255, 165, 0},
  2735.         ["orangered"] = {255, 69, 0},        ["orchid"] = {218, 112, 214},          ["palegoldenrod"] = {238, 232, 170},        ["palegreen"] = {152, 251, 152},
  2736.         ["paleturquoise"] = {175, 238, 238}, ["palevioletred"] = {219, 112, 147},   ["papayawhip"] = {255, 239, 213},           ["peachpuff"] = {255, 218, 185},
  2737.         ["peru"] = {205, 133, 63},           ["pink"] = {255, 192, 203},            ["plum"] = {221, 160, 221},                 ["powderblue"] = {176, 224, 230},
  2738.         ["purple"] = {128, 0, 128},          ["red"] = {255, 0, 0},                 ["rosybrown"] = {188, 143, 143},            ["royalblue"] = {65, 105, 225},
  2739.         ["saddlebrown"] = {139, 69, 19},     ["salmon"] = {250, 128, 114},          ["sandybrown"] = {244, 164, 96},            ["seagreen"] = {46, 139, 87},
  2740.         ["seashell"] = {255, 245, 238},      ["sienna"] = {160, 82, 45},            ["silver"] = {192, 192, 192},               ["skyblue"] = {135, 206, 235},
  2741.         ["slateblue"] = {106, 90, 205},      ["slategray"] = {112, 128, 144},       ["snow"] = {255, 250, 250},                 ["springgreen"] = {0, 255, 127},
  2742.         ["steelblue"] = {70, 130, 180},      ["tan"] = {210, 180, 140},             ["teal"] = {0, 128, 128},                   ["thistle"] = {216, 191, 216},
  2743.         ["tomato"] = {255, 99, 71},          ["turquoise"] = {64, 224, 208},        ["violet"] = {238, 130, 238},               ["wheat"] = {245, 222, 179},
  2744.         ["white"] = {255, 255, 255},         ["whitesmoke"] = {245, 245, 245},      ["yellow"] = {255, 255, 0},                 ["yellowgreen"] = {154, 205, 50}
  2745.     }},{
  2746.         __index = function(tab,idx)
  2747.             local color = tab.__d[idx] or {0,0,0}
  2748.             return function(x) say('[COLOR r;'..(color[1]/255)..'|g;'..(color[2]/255)..'|b;'..(color[3]/255)..']'..x..'[/COLOR]') end
  2749.         end
  2750. })
  2751.  
  2752.  
  2753. --[[
  2754.     @name   Farbcodes
  2755.     @author Mijago
  2756.     @descr
  2757. Farbcodes fur Say
  2758. --]]
  2759. col = col or {}
  2760. col.list= {
  2761. { 'lightcoral', 240,128,128 },{ 'rosybrown', 188,143,143 },
  2762. { 'indianred', 205,92,92 },{ 'red', 255,0,0 },{ 'firebrick', 178,34,34 },{ 'brown', 165,42,42 },
  2763. { 'darkred', 139,0,0 },{ 'maroon', 128,0,0 },{ 'mistyrose', 255,228,225 },{ 'salmon', 250,128,114 },
  2764. { 'tomato', 255,99,71 },{ 'darksalmon', 233,150,122 },{ 'coral', 255,127,80 },{ 'orangered', 255,69,0 },
  2765. { 'lightsalmon', 255,160,122 },{ 'sienna', 160,82,45 },{ 'seashell', 255,245,238 },{ 'chocolate', 210,105,30 },
  2766. { 'saddlebrown', 139,69,19 },{ 'sandybrown', 244,164,96 },{ 'peachpuff', 255,218,185 },{ 'peru', 205,133,63 },
  2767. { 'linen', 250,240,230 },{ 'bisque', 255,228,196 },{ 'darkorange', 255,140,0 },{ 'burlywood', 222,184,135 },
  2768. { 'antiquewhite', 250,235,215 },{ 'tan', 210,180,140 },{ 'navajowhite', 255,222,173 },{ 'blanchedalmond', 255,235,205 },
  2769. { 'papayawhip', 255,239,213 },{ 'moccasin', 255,228,181 },{ 'orange', 255,165,0 },{ 'wheat', 245,222,179 },
  2770. { 'oldlace', 253,245,230 },{ 'floralwhite', 255,250,240 },{ 'darkgoldenrod', 184,134,11 },{ 'goldenrod', 218,165,32 },
  2771. { 'cornsilk', 255,248,220 },{ 'gold', 255,215,0 },{ 'lemonchiffon', 255,250,205 },{ 'khaki', 240,230,140 },
  2772. { 'palegoldenrod', 238,232,170 },{ 'darkkhaki', 189,183,107 },{ 'ivory', 255,255,240 },{ 'lightyellow', 255,255,224 },
  2773. { 'beige', 245,245,220 },{ 'lightgoldenrodyellow', 250,250,210 },{ 'yellow', 255,255,0 },{ 'olive', 128,128,0 },
  2774. { 'olivedrab', 107,142,35 },{ 'yellowgreen', 154,205,50 },{ 'darkolivegreen', 85,107,47 },{ 'greenyellow', 173,255,47 },
  2775. { 'chartreuse', 127,255,0 },{ 'lawngreen', 124,252,0 },{ 'darkseagreen', 143,188,139 },{ 'honeydew', 240,255,240 },
  2776. { 'palegreen', 152,251,152 },{ 'lightgreen', 144,238,144 },{ 'lime', 0,255,0 },{ 'limegreen', 50,205,50 },
  2777. { 'forestgreen', 34,139,34 },{ 'green', 0,128,0 },{ 'darkgreen', 0,100,0 },{ 'seagreen', 46,139,87 },
  2778. { 'mediumseagreen', 60,179,113 },{ 'springgreen', 0,255,127 },{ 'mintcream', 245,255,250 },{ 'mediumspringgreen', 0,250,154 },
  2779. { 'mediumaquamarine', 102,205,170 },{ 'aquamarine', 127,255,212 },{ 'turquoise', 64,224,208 },{ 'lightseagreen', 32,178,170 },
  2780. { 'mediumturquoise', 72,209,204 },{ 'azure', 240,255,255 },{ 'lightcyan', 224,255,255 },{ 'paleturquoise', 175,238,238 },
  2781. { 'aqua', 0,255,255 },{ 'cyan', 0,255,255 },{ 'darkcyan', 0,139,139 },{ 'teal', 0,128,128 },
  2782. { 'darkslategray', 47,79,79 },{ 'darkturquoise', 0,206,209 },{ 'cadetblue', 95,158,160 },{ 'powderblue', 176,224,230 },
  2783. { 'lightblue', 173,216,230 },{ 'deepskyblue', 0,191,255 },{ 'skyblue', 135,206,235 },{ 'lightskyblue', 135,206,250 },
  2784. { 'steelblue', 70,130,180 },{ 'aliceblue', 240,248,255 },{ 'dodgerblue', 30,144,255 },{ 'lightslategray', 119,136,153 },
  2785. { 'slategray', 112,128,144 },{ 'lightsteelblue', 176,196,222 },{ 'cornflowerblue', 100,149,237 },{ 'royalblue', 65,105,225 },
  2786. { 'ghostwhite', 248,248,255 },{ 'lavender', 230,230,250 },{ 'blue', 0,0,255 },{ 'mediumblue', 0,0,205 },
  2787. { 'darkblue', 0,0,139 },{ 'midnightblue', 25,25,112 },{ 'navy', 0,0,128 },{ 'slateblue', 106,90,205 },
  2788. { 'darkslateblue', 72,61,139 },{ 'mediumslateblue', 123,104,238 },{ 'mediumpurple', 147,112,219 },{ 'blueviolet', 138,43,226 },
  2789. { 'indigo', 75,0,130 },{ 'darkorchid', 153,50,204 },{ 'darkviolet', 148,0,211 },{ 'mediumorchid', 186,85,211 },
  2790. { 'thistle', 216,191,216 },{ 'plum', 221,160,221 },{ 'violet', 238,130,238 },{ 'fuchsia', 255,0,255 },
  2791. { 'magenta', 255,0,255 },{ 'darkmagenta', 139,0,139 },{ 'purple', 128,0,128 },{ 'orchid', 218,112,214 },
  2792. { 'mediumvioletred', 199,21,133 },{ 'deeppink', 255,20,147 },{ 'hotpink', 255,105,180 },{ 'lavenderblush', 255,240,245 },
  2793. { 'palevioletred', 219,112,147 },{ 'crimson', 220,20,60 },{ 'pink', 255,192,203 },{ 'lightpink', 255,182,193 },
  2794. { 'white', 255,255,255 },{ 'snow', 255,250,250 },{ 'whitesmoke', 245,245,245 },{ 'gainsboro', 220,220,220 },
  2795. { 'lightgray', 211,211,211 },{ 'silver', 192,192,192 },{ 'darkgray', 169,169,169 },{ 'gray', 128,128,128 },
  2796. { 'dimgray', 105,105,105 },{ 'black', 0,0,0 },{ 'aliceblue', 240,248,255 },{ 'antiquewhite', 250,235,215 },
  2797. { 'aqua', 0,255,255 },{ 'aquamarine', 127,255,212 },{ 'azure', 240,255,255 },{ 'beige', 245,245,220 },
  2798. { 'bisque', 255,228,196 },{ 'black', 0,0,0 },{ 'blanchedalmond', 255,235,205 },{ 'blue', 0,0,255 },
  2799. { 'blueviolet', 138,43,226 },{ 'brown', 165,42,42 },{ 'burlywood', 222,184,135 },{ 'cadetblue', 95,158,160 },
  2800. { 'chartreuse', 127,255,0 },{ 'chocolate', 210,105,30 },{ 'coral', 255,127,80 },{ 'cornflowerblue', 100,149,237 },
  2801. { 'cornsilk', 255,248,220 },{ 'crimson', 220,20,60 },{ 'cyan', 0,255,255 },{ 'darkblue', 0,0,139 },
  2802. { 'darkcyan', 0,139,139 },{ 'darkgoldenrod', 184,134,11 },{ 'darkgray', 169,169,169 },{ 'darkgreen', 0,100,0 },
  2803. { 'darkkhaki', 189,183,107 },{ 'darkmagenta', 139,0,139 },{ 'darkolivegreen', 85,107,47 },{ 'darkorange', 255,140,0 },
  2804. { 'darkorchid', 153,50,204 },{ 'darkred', 139,0,0 },{ 'darksalmon', 233,150,122 },{ 'darkseagreen', 143,188,139 },
  2805. { 'darkslateblue', 72,61,139 },{ 'darkslategray', 47,79,79 },{ 'darkturquoise', 0,206,209 },{ 'darkviolet', 148,0,211 },
  2806. { 'deeppink', 255,20,147 },{ 'deepskyblue', 0,191,255 },{ 'dimgray', 105,105,105 },{ 'dodgerblue', 30,144,255 },
  2807. { 'firebrick', 178,34,34 },{ 'floralwhite', 255,250,240 },{ 'forestgreen', 34,139,34 },{ 'fuchsia', 255,0,255 },
  2808. { 'gainsboro', 220,220,220 },{ 'ghostwhite', 248,248,255 },{ 'gold', 255,215,0 },{ 'goldenrod', 218,165,32 },
  2809. { 'gray', 128,128,128 },{ 'green', 0,128,0 },{ 'greenyellow', 173,255,47 },{ 'honeydew', 240,255,240 },
  2810. { 'hotpink', 255,105,180 },{ 'indianred', 205,92,92 },{ 'indigo', 75,0,130 },{ 'ivory', 255,255,240 },
  2811. { 'khaki', 240,230,140 },{ 'lavender', 230,230,250 },{ 'lavenderblush', 255,240,245 },{ 'lawngreen', 124,252,0 },
  2812. { 'lemonchiffon', 255,250,205 },{ 'lightblue', 173,216,230 },{ 'lightcoral', 240,128,128 },{ 'lightcyan', 224,255,255 },
  2813. { 'lightgoldenrodyellow', 250,250,210 },{ 'lightgray', 211,211,211 },{ 'lightgreen', 144,238,144 },{ 'lightpink', 255,182,193 },
  2814. { 'lightsalmon', 255,160,122 },{ 'lightseagreen', 32,178,170 },{ 'lightskyblue', 135,206,250 },{ 'lightslategray', 119,136,153 },
  2815. { 'lightsteelblue', 176,196,222 },{ 'lightyellow', 255,255,224 },{ 'lime', 0,255,0 },{ 'limegreen', 50,205,50 },
  2816. { 'linen', 250,240,230 },{ 'magenta', 255,0,255 },{ 'maroon', 128,0,0 },{ 'mediumaquamarine', 102,205,170 },
  2817. { 'mediumblue', 0,0,205 },{ 'mediumorchid', 186,85,211 },{ 'mediumpurple', 147,112,219 },{ 'mediumseagreen', 60,179,113 },
  2818. { 'mediumslateblue', 123,104,238 },{ 'mediumspringgreen', 0,250,154 },{ 'mediumturquoise', 72,209,204 },{ 'mediumvioletred', 199,21,133 },
  2819. { 'midnightblue', 25,25,112 },{ 'mintcream', 245,255,250 },{ 'mistyrose', 255,228,225 },{ 'moccasin', 255,228,181 },
  2820. { 'navajowhite', 255,222,173 },{ 'navy', 0,0,128 },{ 'oldlace', 253,245,230 },{ 'olive', 128,128,0 },
  2821. { 'olivedrab', 107,142,35 },{ 'orange', 255,165,0 },{ 'orangered', 255,69,0 },{ 'orchid', 218,112,214 },
  2822. { 'palegoldenrod', 238,232,170 },{ 'palegreen', 152,251,152 },{ 'paleturquoise', 175,238,238 },{ 'palevioletred', 219,112,147 },
  2823. { 'papayawhip', 255,239,213 },{ 'peachpuff', 255,218,185 },{ 'peru', 205,133,63 },{ 'pink', 255,192,203 },
  2824. { 'plum', 221,160,221 },{ 'powderblue', 176,224,230 },{ 'purple', 128,0,128 },{ 'red', 255,0,0 },
  2825. { 'rosybrown', 188,143,143 },{ 'royalblue', 65,105,225 },{ 'saddlebrown', 139,69,19 },{ 'salmon', 250,128,114 },
  2826. { 'sandybrown', 244,164,96 },{ 'seagreen', 46,139,87 },{ 'seashell', 255,245,238 },{ 'sienna', 160,82,45 },
  2827. { 'silver', 192,192,192 },{ 'skyblue', 135,206,235 },{ 'slateblue', 106,90,205 },{ 'slategray', 112,128,144 },
  2828. { 'snow', 255,250,250 },{ 'springgreen', 0,255,127 },{ 'steelblue', 70,130,180 },{ 'tan', 210,180,140 },
  2829. { 'teal', 0,128,128 },{ 'thistle', 216,191,216 },{ 'tomato', 255,99,71 },{ 'turquoise', 64,224,208 },
  2830. { 'violet', 238,130,238 },{ 'wheat', 245,222,179 },{ 'white', 255,255,255 },{ 'whitesmoke', 245,245,245 },
  2831. { 'yellow', 255,255,0 },{ 'yellowgreen', 154,205,50 }}
  2832. table.foreachi(col.list,function(a,b)
  2833.     col[b[1]] =     function(text) return "[COLOR r;"..(b[2]/255.0).."|g;"..(b[3]/255.0).."|b;"..(b[4]/255.0).."]"..text..'[/COLOR]' end
  2834. end)
  2835.  
  2836.  
  2837. --[[
  2838.     @name   Apache-Funktionen
  2839.     @author Mijago
  2840.     @descr
  2841. Funktionen, um Apache neu zu starten.
  2842. --]]
  2843. proc=proc or {}
  2844. proc.apache_start = function()
  2845.                 os.execute('apachectl start')
  2846.             end
  2847. proc.apache_stop = function()
  2848.                 os.execute('apachectl stop')
  2849.             end
  2850. proc.apache_restart = function()
  2851.                 os.execute('apachectl restart')
  2852.             end
  2853. proc.apache_graceful = function()
  2854.                 os.execute('apachectl graceful')
  2855.             end
  2856.  
  2857.  
  2858. --[[
  2859.     @name   TS3-Funktionen
  2860.     @author Mijago
  2861.     @descr
  2862. Funktionen zum Starten, Stoppen und Neustarten eines TS3 Servers.
  2863. --]]
  2864. proc=proc or {}
  2865. proc.ts3_start = function(path)
  2866.                 os.execute('cd '..path..' && sh ts3server_startscript.sh start')
  2867.                 end
  2868. proc.ts3_stop = function(path)
  2869.                 os.execute('cd '..path..' && sh ts3server_startscript.sh stop')
  2870.                 end
  2871. proc.ts3_restart = function(path)
  2872.                 os.execute('cd '..path..' && sh ts3server_startscript.sh restart')
  2873.                 end
  2874.  
  2875. function say10(name) say(color256(255, 128, 16)..name..color256(196, 196, 196)) end
  2876. function say11(name) say(color256(255, 192, 0)..name..color256(196, 196, 196)) end
  2877. function say_title(name) say(color256(255, 230, 186)..name..color256(196, 196, 196)) end
  2878. function say_reward(name) say(color256(255, 200, 200)..name..color256(196, 196, 196)) end
  2879. function say_blekit(name) say(color256(0, 255, 255)..name..color256(196, 196, 196)) end
  2880. function say_akwa(name) say(color256(127, 255, 212)..name..color256(196, 196, 196)) end
  2881. function say_amarant(name) say(color256(230, 28, 102)..name..color256(196, 196, 196)) end
  2882. function say_ametyst(name) say(color256(153, 102, 204)..name..color256(196, 196, 196)) end
  2883. function say_antracyt(name) say(color256(54, 65, 53)..name..color256(196, 196, 196)) end
  2884. function say_atrament(name) say(color256(0, 49, 83)..name..color256(196, 196, 196)) end
  2885. function say_banan(name) say(color256(254, 254, 51)..name..color256(196, 196, 196)) end
  2886. function say_bez(name) say(color256(194, 178, 128)..name..color256(196, 196, 196)) end
  2887. function say_blue(name) say(color256(0, 39, 194)..name..color256(196, 196, 196)) end
  2888. function say_bordo(name) say(color256(80, 0, 0)..name..color256(196, 196, 196)) end
  2889. function say_braz(name) say(color256(150, 75, 0)..name..color256(196, 196, 196)) end
  2890. function say_brunatny(name) say(color256(112, 32, 31)..name..color256(196, 196, 196)) end
  2891. function say_brzoskwinia(name) say(color256(255, 204, 153)..name..color256(196, 196, 196)) end
  2892. function say_burak(name) say(color256(98, 0, 44)..name..color256(196, 196, 196)) end
  2893. function say_cynamon(name) say(color256(157, 91, 3)..name..color256(196, 196, 196)) end
  2894. function say_red(name) say(color256(255, 0, 0)..name..color256(196, 196, 196)) end
  2895. function say_fiolet(name) say(color256(184, 3, 255)..name..color256(196, 196, 196)) end
  2896. function say_granat(name) say(color256(0, 0, 128)..name..color256(196, 196, 196)) end
  2897. function say_lawenda(name) say(color256(201, 162, 191)..name..color256(196, 196, 196)) end
  2898. function say_arbuz(name) say(color256(255, 109, 102)..name..color256(196, 196, 196)) end
  2899. function say_biskup(name) say(color256(194, 178, 128)..name..color256(196, 196, 196)) end
  2900. function say_burgund(name) say(color256(96, 2, 1)..name..color256(196, 196, 196)) end
  2901. function say_bursztyn(name) say(color256(255, 191, 0)..name..color256(196, 196, 196)) end
  2902. function say_bury(name) say(color256(107, 86, 54)..name..color256(196, 196, 196)) end
  2903. function say_cegla(name) say(color256(233, 107, 57)..name..color256(196, 196, 196)) end
  2904. function say_chaber(name) say(color256(51, 0, 204)..name..color256(196, 196, 196)) end
  2905. function say_cialo(name) say(color256(255, 229, 180)..name..color256(196, 196, 196)) end
  2906. function say_cyklamen(name) say(color256(162, 0, 123)..name..color256(196, 196, 196)) end
  2907. function say_cynober(name) say(color256(227, 66, 52)..name..color256(196, 196, 196)) end
  2908. function say_czekolada(name) say(color256(123, 63, 0)..name..color256(196, 196, 196)) end
  2909. function say_rdza(name) say(color256(128, 24, 24)..name..color256(196, 196, 196)) end
  2910. function say_grafit(name) say(color256(53, 69, 79)..name..color256(196, 196, 196)) end
  2911. function say_grynszpan(name) say(color256(0, 166, 147)..name..color256(196, 196, 196)) end
  2912. function say_heban(name) say(color256(61, 43, 31)..name..color256(196, 196, 196)) end
  2913. function say_herbata(name) say(color256(204, 93, 93)..name..color256(196, 196, 196)) end
  2914. function say_kawa(name) say(color256(44, 27, 1)..name..color256(196, 196, 196)) end
  2915. function say_koral(name) say(color256(255, 127, 80)..name..color256(196, 196, 196)) end
  2916. function say_krew(name) say(color256(207, 41, 41)..name..color256(196, 196, 196)) end
  2917. function say_lazur(name) say(color256(0, 127, 255)..name..color256(196, 196, 196)) end
  2918. function say_limonka(name) say(color256(147, 246, 0)..name..color256(196, 196, 196)) end
  2919. function say_malachit(name) say(color256(0, 102, 51)..name..color256(196, 196, 196)) end
  2920. function say_malina(name) say(color256(235, 1, 101)..name..color256(196, 196, 196)) end
  2921. function say_miedz(name) say(color256(184, 115, 51)..name..color256(196, 196, 196)) end
  2922. function say_oliwka(name) say(color256(128, 128, 0)..name..color256(196, 196, 196)) end
  2923. function say_orzech(name) say(color256(189, 148, 96)..name..color256(196, 196, 196)) end
  2924. function say_patyna(name) say(color256(110, 190, 159)..name..color256(196, 196, 196)) end
  2925. function say_pistacja(name) say(color256(159, 251, 136)..name..color256(196, 196, 196)) end
  2926. function say_poziomka(name) say(color256(207, 47, 47)..name..color256(196, 196, 196)) end
  2927. function say_purpura(name) say(color256(128, 0, 128)..name..color256(196, 196, 196)) end
  2928. function say_rubin(name) say(color256(212, 27, 86)..name..color256(196, 196, 196)) end
  2929. function say_rudy(name) say(color256(205, 87, 128)..name..color256(196, 196, 196)) end
  2930. function say_trawa(name) say(color256(124, 252, 0)..name..color256(196, 196, 196)) end
  2931. function say_turkus(name) say(color256(48, 213, 200)..name..color256(196, 196, 196)) end
  2932. function say_wisnia(name) say(color256(128, 0, 0)..name..color256(196, 196, 196)) end
  2933. function say_green(name) say(color256(0, 128, 0)..name..color256(196, 196, 196)) end
  2934. function say_zloto(name) say(color256(255, 215, 0)..name..color256(196, 196, 196)) end
  2935. function say_pc_name() say(pc.get_name()..":") end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top