Was muss ich noch tun, damit es funktioniert..
Wollte das Premiumsystem einfügen und irgendwie aus welchem Grund auch immer will das nicht funktionieren, weil das System kein Zugriff auf die DB hat.
Info:
mysql_query("UPDATE player.player SET name = '"[VIP]"..pc.get_name().."' WHERE name = '"..pc.get_name().."';")
questlib.lua:
Quote:
CONFIRM_NO = 0
CONFIRM_YES = 1
CONFIRM_OK = 1
CONFIRM_TIMEOUT = 2
MALE = 0
FEMALE = 1
dofile("locale/germany/quest/questing.lua")
--quest.create = function(f) return coroutine.create(f) end
--quest.process = function(co,args) return coroutine.resume(co, args) end
setstate = q.setstate
newstate = q.setstate
q.set_clock = function(name, value) q.set_clock_name(name) q.set_clock_value(value) end
q.set_counter = function(name, value) q.set_counter_name(name) q.set_counter_value(value) end
c_item_name = function(vnum) return ("[ITEM value;"..vnum.."]") end
c_mob_name = function(vnum) return ("[MOB value;"..vnum.."]") end
-- d.set_folder = function (path) raw_script("[SET_PATH path;"..path.."]") end
-- d.set_folder = function (path) path.show_cinematic("[SET_PATH path;"..path.."]") end
-- party.run_cinematic = function (path) party.show_cinematic("[RUN_CINEMATIC value;"..path.."]") end
newline = "[ENTER]"
function color256(r, g, b) return "[COLOR r;"..(r/255.0).."|g;"..(g/255.0).."|b;"..(b/255.0).."]" end
function color(r,g,b) return "[COLOR r;"..r.."|g;"..g.."|b;"..b.."]" end
function delay(v) return "[DELAY value;"..v.."]" end
function setcolor(r,g,b) raw_script(color(r,g,b)) end
function setdelay(v) raw_script(delay(v)) end
function resetcolor(r,g,b) raw_script("[/COLOR]") end
function resetdelay(v) raw_script("[/DELAY]") end
-- minimap에 동그라미 표시
function addmapsignal(x,y) raw_script("[ADDMAPSIGNAL x;"..x.."|y;"..y.."]") end
-- minimap 동그라미들 모두 클리어
function clearmapsignal() raw_script("[CLEARMAPSIGNAL]") end
-- 클라이언트에서 보여줄 대화창 배경 그림을 정한다.
function setbgimage(src) raw_script("[BGIMAGE src;") raw_script(src) raw_script("]") end
-- 대화창에 이미지를 보여준다.
function addimage(x,y,src) raw_script("[IMAGE x;"..x.."|y;"..y) raw_script("|src;") raw_script(src) raw_script("]") end
function makequestbutton(name)
raw_script("[QUESTBUTTON idx;")
raw_script(""..q.getcurrentquestindex())
raw_script("|name;")
raw_script(name) raw_script("]")
end
function make_quest_button_ex(name, icon_type, icon_name)
test_chat(icon_type)
test_chat(icon_name)
raw_script("[QUESTBUTTON idx;")
raw_script(""..q.getcurrentquestindex())
raw_script("|name;")
raw_script(name)
raw_script("|icon_type;")
raw_script(icon_type)
raw_script("|icon_name;")
raw_script(icon_name)
raw_script("]")
end
function kill_in_my_level(vnum, level)
----Variablen
--Mobs
local mobs = {
{
{101, 657};
{701, 777};
{5101, 5116};
};
{
{901, 937};
{1001, 1071};
{1101, 1107};
{1171, 1177};
{1301, 1303};
{1331, 1335};
{2001, 2076};
{2101, 2158};
{5121, 5157};
};
{
{1401, 1603};
{2201, 2205};
{2231, 2235};
{2301, 2305};
{2311, 2414};
};
}
local metin = {
{8001, 8007};
{8008, 8017};
{8018, 8027};
}
-- Levelbegrenzungen
local lvl = {35, 65, 99}
----
local k=0
for i=1, 3 do
if level<=lvl[i] and k==0 then
k = i
end
end
for i=1, table.getn(mobs[k]) do
for p=mobs[k][i][1], mobs[k][i][2] do
if vnum==p then
return true
end
end
end
for p=metin[k][1], metin[k][2] do
if vnum==p then
return true
end
end
return false
end
function make_quest_button(name) makequestbutton(name) end
function send_letter_ex(name, icon_type, icon_name) make_quest_button_ex(name, icon_type, icon_name) setskin(NOWINDOW) q.set_title(name) q.start() end
function send_letter(name) makequestbutton(name) setskin(NOWINDOW) q.set_title(name) q.start() end
function clear_letter() q.done() end
function say_title(name) say(color256(255, 230, 186)..name..color256(196, 196, 196)) end
function say_reward(name) say(color256(255, 200, 200)..name..color256(196, 196, 196)) end
function say_pc_name() say(pc.get_name()..":") end
function say_size(width, height) say("[WINDOW_SIZE width;"..width.."|height;"..height.."]") end
function setmapcenterposition(x,y)
raw_script("[SETCMAPPOS x;")
raw_script(x.."|y;")
raw_script(y.."]")
end
function say_item(name, vnum, desc)
say("[INSERT_IMAGE image_type;item|idx;"..vnum.."|title;"..name.."|de sc;"..desc.."]")
end
function say_item_vnum(vnum)
say_item(item_name(vnum), vnum, "")
end
function setvarchar(name, var)
local laenge = string.len (var)
local setchar = 0
local save_name = 0
local letter = 0
while laenge > setchar do
setchar = setchar + 1
letter = string.sub (var, setchar, setchar)
letter = string.byte(letter, 1)
save_name = ""..name.."_char_"..setchar..""
pc.setqf(save_name, letter)
end
local save_laenge=""..name.."laenge"
pc.setqf(save_laenge, laenge)
end
function getvarchar(name)
local save_laenge = ""..name.."laenge"
local laenge = pc.getqf(save_laenge)
local save_name = 0
local var = ""
local letter = 0
local getchar = 0
while laenge > getchar do
getchar = getchar + 1
save_name = ""..name.."_char_"..getchar..""
letter = pc.getqf(save_name)
if letter!=0 then
letter = string.char(letter)
else
letter = ""
end
var = ""..var..""..letter..""
end
return var
end
function delvarchar(name)
local save_laenge = ""..name.."laenge"
local laenge = pc.getqf(save_laenge)
local getchar = 0
while laenge > getchar do
getchar = getchar + 1
local save_name = ""..name.."_char_"..getchar..""
pc.delqf(save_name)
end
pc.delqf(save_laenge)
end
function global_setvarchar(name, var)
local laenge = string.len (var)
local setchar = 0
local save_name = 0
local letter = 0
while laenge > setchar do
setchar = setchar + 1
letter = string.sub (var, setchar, setchar)
letter = string.byte(letter)
if letter==91 or letter==93 then
letter=32
end
save_name = ""..name.."_char_"..setchar..""
game.set_event_flag(save_name, letter)
end
local save_laenge=""..name.."laenge"
game.set_event_flag(save_laenge, laenge)
end
function global_getvarchar(name)
local save_laenge = ""..name.."laenge"
local laenge = game.get_event_flag(save_laenge)
local save_name = 0
local var = ""
local letter = 0
local getchar = 0
while laenge > getchar do
getchar = getchar + 1
save_name = ""..name.."_char_"..getchar..""
letter = game.get_event_flag(save_name)
if letter!=0 then
letter = string.char(letter)
else
letter = ""
end
var = ""..var..""..letter..""
end
return var
end
function pc_is_novice()
if pc.get_skill_group()==0 then
return true
else
return false
end
end
function pc_get_exp_bonus(exp, text)
say_reward(text)
pc.give_exp2(exp)
set_quest_state("levelup", "run")
end
function pc_get_village_map_index(index)
return village_map[pc.get_empire()][index]
end
village_map = {
{1, 3},
{21, 23},
{41, 43},
}
function npc_is_same_empire()
if pc.get_empire()==npc.empire then
return true
else
return false
end
end
function npc_get_skill_teacher_race(pc_empire, pc_job, sub_job)
if 1==sub_job then
if 0==pc_job then
return WARRIOR1_NPC_LIST[pc_empire]
elseif 1==pc_job then
return ASSASSIN1_NPC_LIST[pc_empire]
elseif 2==pc_job then
return SURA1_NPC_LIST[pc_empire]
elseif 3==pc_job then
return SHAMAN1_NPC_LIST[pc_empire]
end
elseif 2==sub_job then
if 0==pc_job then
return WARRIOR2_NPC_LIST[pc_empire]
elseif 1==pc_job then
return ASSASSIN2_NPC_LIST[pc_empire]
elseif 2==pc_job then
return SURA2_NPC_LIST[pc_empire]
elseif 3==pc_job then
return SHAMAN2_NPC_LIST[pc_empire]
end
end
return 0
end
function pc_find_square_guard_vid()
if pc.get_empire()==1 then
return find_npc_by_vnum(11000)
elseif pc.get_empire()==2 then
return find_npc_by_vnum(11002)
elseif pc.get_empire()==3 then
return find_npc_by_vnum(11004)
end
return 0
end
function pc_find_skill_teacher_vid(sub_job)
local vnum=npc_get_skill_teacher_race(pc.get_empire(), pc.get_job(), sub_job)
return find_npc_by_vnum(vnum)
end
function pc_find_square_guard_vid()
local pc_empire=pc.get_empire()
if pc_empire==1 then
return find_npc_by_vnum(11000)
elseif pc_empire==2 then
return find_npc_by_vnum(11002)
elseif pc_empire==3 then
return find_npc_by_vnum(11004)
end
end
function npc_is_same_job()
local pc_job=pc.get_job()
local npc_vnum=npc.get_race()
-- test_chat("pc.job:"..pc.get_job())
-- test_chat("npc_race:"..npc.get_race())
-- test_chat("pc.skill_group:"..pc.get_skill_group())
if pc_job==0 then
if table_is_in(WARRIOR1_NPC_LIST, npc_vnum) then return true end
if table_is_in(WARRIOR2_NPC_LIST, npc_vnum) then return true end
elseif pc_job==1 then
if table_is_in(ASSASSIN1_NPC_LIST, npc_vnum) then return true end
if table_is_in(ASSASSIN2_NPC_LIST, npc_vnum) then return true end
elseif pc_job==2 then
if table_is_in(SURA1_NPC_LIST, npc_vnum) then return true end
if table_is_in(SURA2_NPC_LIST, npc_vnum) then return true end
elseif pc_job==3 then
if table_is_in(SHAMAN1_NPC_LIST, npc_vnum) then return true end
if table_is_in(SHAMAN2_NPC_LIST, npc_vnum) then return true end
end
return false
end
function npc_get_job()
local npc_vnum=npc.get_race()
if table_is_in(WARRIOR1_NPC_LIST, npc_vnum) then return COND_WARRIOR_1 end
if table_is_in(WARRIOR2_NPC_LIST, npc_vnum) then return COND_WARRIOR_2 end
if table_is_in(ASSASSIN1_NPC_LIST, npc_vnum) then return COND_ASSASSIN_1 end
if table_is_in(ASSASSIN2_NPC_LIST, npc_vnum) then return COND_ASSASSIN_2 end
if table_is_in(SURA1_NPC_LIST, npc_vnum) then return COND_SURA_1 end
if table_is_in(SURA2_NPC_LIST, npc_vnum) then return COND_SURA_2 end
if table_is_in(SHAMAN1_NPC_LIST, npc_vnum) then return COND_SHAMAN_1 end
if table_is_in(SHAMAN2_NPC_LIST, npc_vnum) then return COND_SHAMAN_2 end
return 0
end
function time_min_to_sec(value)
return 60*value
end
function time_hour_to_sec(value)
return 3600*value
end
function next_time_set(value, test_value)
local nextTime=get_time()+value
if is_test_server() then
nextTime=get_time()+test_value
end
pc.setqf("__NEXT_TIME__", nextTime)
end
function next_time_is_now(value)
if get_time()>=pc.getqf("__NEXT_TIME__") then
return true
else
return false
end
end
function table_get_random_item(self)
return self[number(1, table.getn(self))]
end
function table_is_in(self, test)
for i = 1, table.getn(self) do
if self[i]==test then
return true
end
end
return false
end
function giveup_quest_menu(title)
local s=select("진행한다", "포기한다")
if 2==s then
say(title.." 퀘스트를 정말로")
say("포기하시겠습니까?")
local s=select("네, 그렇습니다", "아닙니다")
if 1==s then
say(title.."퀘스트를 포기했습니다")
restart_quest()
end
end
end
function restart_quest()
set_state("start")
q.done()
end
function complete_quest()
set_state("__COMPLETE__")
q.done()
end
function giveup_quest()
set_state("__GIVEUP__")
q.done()
end
function complete_quest_state(state_name)
set_state(state_name)
q.done()
end
function test_chat(log)
if is_test_server() then
chat(log)
end
end
function bool_to_str(is)
if is then
return "true"
else
return "false"
end
end
WARRIOR1_NPC_LIST = {20300, 20320, 20340, }
WARRIOR2_NPC_LIST = {20301, 20321, 20341, }
ASSASSIN1_NPC_LIST = {20302, 20322, 20342, }
ASSASSIN2_NPC_LIST = {20303, 20323, 20343, }
SURA1_NPC_LIST = {20304, 20324, 20344, }
SURA2_NPC_LIST = {20305, 20325, 20345, }
SHAMAN1_NPC_LIST = {20306, 20326, 20346, }
SHAMAN2_NPC_LIST = {20307, 20327, 20347, }
function skill_group_dialog(e, j, g) -- e = 제국, j = 직업, g = 그룹
e = 1 -- XXX 메시지가 나라별로 있다가 하나로 통합되었음
-- 다른 직업이거나 다른 제국일 경우
if pc.job != j then
say(locale.skill_group.dialog[e][pc.job][3])
elseif pc.get_skill_group() == 0 then
if pc.level < 5 then
say(locale.skill_group.dialog[e][j][g][1])
return
end
say(locale.skill_group.dialog[e][j][g][2])
local answer = select(locale.yes, locale.no)
if answer == 1 then
--say(locale.skill_group.dialog[e][j][g][2])
pc.set_skill_group(g)
else
--say(locale.skill_group.dialog[e][j][g][3])
end
--elseif pc.get_skill_group() == g then
--say(locale.skill_group.dialog[e][j][g][4])
--else
--say(locale.skill_group.dialog[e][j][g][5])
end
end
function show_horse_menu()
if horse.is_mine() then
say(locale.horse_menu.menu)
local s = 0
if horse.is_dead() then
s = select(locale.horse_menu.revive, locale.horse_menu.ride, locale.horse_menu.unsummon, locale.horse_menu.close)
else
s = select(locale.horse_menu.feed, locale.horse_menu.ride, locale.horse_menu.unsummon, locale.horse_menu.close)
end
if s==1 then
if horse.is_dead() then
horse.revive()
else
local food = horse.get_grade() + 50054 - 1
if pc.countitem(food) > 0 then
pc.removeitem(food, 1)
horse.feed()
else
say(locale.need_item_prefix..item_name(food)..loca le.need_item_postfix);
end
end
elseif s==2 then
horse.ride()
elseif s==3 then
horse.unsummon()
elseif s==4 then
-- do nothing
end
end
end
npc_index_table = {
['race'] = npc.getrace,
['empire'] = npc.get_empire,
}
pc_index_table = {
['weapon'] = pc.getweapon,
['level'] = pc.get_level,
['hp'] = pc.gethp,
['maxhp'] = pc.getmaxhp,
['sp'] = pc.getsp,
['maxsp'] = pc.getmaxsp,
['exp'] = pc.get_exp,
['nextexp'] = pc.get_next_exp,
['job'] = pc.get_job,
['money'] = pc.getmoney,
['gold'] = pc.getmoney,
['name'] = pc.getname,
['playtime'] = pc.getplaytime,
['leadership'] = pc.getleadership,
['empire'] = pc.getempire,
['skillgroup'] = pc.get_skill_group,
['x'] = pc.getx,
['y'] = pc.gety,
['local_x'] = pc.get_local_x,
['local_y'] = pc.get_local_y,
}
item_index_table = {
['vnum'] = item.get_vnum,
['name'] = item.get_name,
['size'] = item.get_size,
['count'] = item.get_count,
['type'] = item.get_type,
['sub_type'] = item.get_sub_type,
['refine_vnum'] = item.get_refine_vnum,
['level'] = item.get_level,
}
guild_war_bet_price_table =
{
10000,
30000,
50000,
100000
}
function npc_index(t,i)
local npit = npc_index_table
if npit[i] then
return npit[i]()
else
return rawget(t,i)
end
end
function pc_index(t,i)
local pit = pc_index_table
if pit[i] then
return pit[i]()
else
return rawget(t,i)
end
end
function item_index(t, i)
local iit = item_index_table
if iit[i] then
return iit[i]()
else
return rawget(t, i)
end
end
setmetatable(pc,{__index=pc_index})
setmetatable(npc,{__index=npc_index})
setmetatable(item,{__index=item_index})
--coroutine을 이용한 선택항 처리
function select(...)
return q.yield('select', arg)
end
function select_table(table)
return q.yield('select', table)
end
-- coroutine을 이용한 다음 엔터 기다리기
function wait()
q.yield('wait')
end
function input()
return q.yield('input')
end
function confirm(vid, msg, timeout)
return q.yield('confirm', vid, msg, timeout)
end
function select_item()
setskin(NOWINDOW)
return q.yield('select_item')
end
--전역 변수 접근과 관련된 계열
NOWINDOW = 0
NORMAL = 1
CINEMATIC = 2
SCROLL = 3
WARRIOR = 0
ASSASSIN = 1
SURA = 2
SHAMAN = 3
COND_WARRIOR_0 = 8
COND_WARRIOR_1 = 16
COND_WARRIOR_2 = 32
COND_WARRIOR = 56
COND_ASSASSIN_0 = 64
COND_ASSASSIN_1 = 128
COND_ASSASSIN_2 = 256
COND_ASSASSIN = 448
COND_SURA_0 = 512
COND_SURA_1 = 1024
COND_SURA_2 = 2048
COND_SURA = 3584
COND_SHAMAN_0 = 4096
COND_SHAMAN_1 = 8192
COND_SHAMAN_2 = 16384
COND_SHAMAN = 28672
PART_MAIN = 0
PART_HAIR = 3
GUILD_CREATE_ITEM_VNUM = 70101
QUEST_SCROLL_TYPE_KILL_MOB = 1
QUEST_SCROLL_TYPE_KILL_ANOTHER_EMPIRE = 2
apply = {
["MAX_HP"] = 1,
["MAX_SP"] = 2,
["CON"] = 3,
["INT"] = 4,
["STR"] = 5,
["DEX"] = 6,
["ATT_SPEED"] = 7,
["MOV_SPEED"] = 8,
["CAST_SPEED"] = 9,
["HP_REGEN"] = 10,
["SP_REGEN"] = 11,
["POISON_PCT"] = 12,
["STUN_PCT"] = 13,
["SLOW_PCT"] = 14,
["CRITICAL_PCT"] = 15,
["PENETRATE_PCT"] = 16,
["ATTBONUS_HUMAN"] = 17,
["ATTBONUS_ANIMAL"] = 18,
["ATTBONUS_ORC"] = 19,
["ATTBONUS_MILGYO"] = 20,
["ATTBONUS_UNDEAD"] = 21,
["ATTBONUS_DEVIL"] = 22,
["STEAL_HP"] = 23,
["STEAL_SP"] = 24,
["MANA_BURN_PCT"] = 25,
["DAMAGE_SP_RECOVER"] = 26,
["BLOCK"] = 27,
["DODGE"] = 28,
["RESIST_SWORD"] = 29,
["RESIST_TWOHAND"] = 30,
["RESIST_DAGGER"] = 31,
["RESIST_BELL"] = 32,
["RESIST_FAN"] = 33,
["RESIST_BOW"] = 34,
["RESIST_FIRE"] = 35,
["RESIST_ELEC"] = 36,
["RESIST_MAGIC"] = 37,
["RESIST_WIND"] = 38,
["REFLECT_MELEE"] = 39,
["REFLECT_CURSE"] = 40,
["POISON_REDUCE"] = 41,
["KILL_SP_RECOVER"] = 42,
["EXP_DOUBLE_BONUS"] = 43,
["GOLD_DOUBLE_BONUS"] = 44,
["ITEM_DROP_BONUS"] = 45,
["POTION_BONUS"] = 46,
["KILL_HP_RECOVER"] = 47,
["IMMUNE_STUN"] = 48,
["IMMUNE_SLOW"] = 49,
["IMMUNE_FALL"] = 50,
["SKILL"] = 51,
["BOW_DISTANCE"] = 52,
["ATT_GRADE_BONUS"] = 53,
["DEF_GRADE_BONUS"] = 54,
["MAGIC_ATT_GRADE"] = 55,
["MAGIC_DEF_GRADE"] = 56,
["CURSE_PCT"] = 57,
["MAX_STAMINA"] = 58,
["ATTBONUS_WARRIOR"] = 59,
["ATTBONUS_ASSASSIN"] = 60,
["ATTBONUS_SURA"] = 61,
["ATTBONUS_SHAMAN"] = 62,
["ATTBONUS_MONSTER"] = 63,
}
-- 레벨업 퀘스트 -_-
special = {}
special.fortune_telling =
{
-- { prob 크리 item money remove money
{ 1, 0, 20, 20, 0 }, -- 10
{ 499, 0, 10, 10, 0 }, -- 5
{ 2500, 0, 5, 5, 0 }, -- 1
{ 5000, 0, 0, 0, 0 },
{ 1500, 0, -5, -5, 20000 },
{ 499, 0, -10, -10, 20000 },
{ 1, 0, -20, -20, 20000 },
}
special.questscroll_reward =
{
{1, 1500, 3000, 30027, 0, 0 },
{2, 1500, 3000, 30028, 0, 0 },
{3, 1000, 2000, 30034, 30018, 0 },
{4, 1000, 2000, 30034, 30011, 0 },
{5, 1000, 2000, 30011, 30034, 0 },
{6, 1000, 2000, 27400, 0, 0 },
{7, 2000, 4000, 30023, 30003, 0 },
{8, 2000, 4000, 30005, 30033, 0 },
{9, 2000, 8000, 30033, 30005, 0 },
{10, 4000, 8000, 30021, 30033, 30045},
{11, 4000, 8000, 30045, 30022, 30046},
{12, 5000, 12000, 30047, 30045, 30055},
{13, 5000, 12000, 30051, 30017, 30058},
{14, 5000, 12000, 30051, 30007, 30041},
{15, 5000, 15000, 30091, 30017, 30018},
{16, 3500, 6500, 30021, 30033, 0 },
{17, 4000, 9000, 30051, 30033, 0 },
{18, 4500, 10000, 30056, 30057, 30058},
{19, 4500, 10000, 30059, 30058, 30041},
{20, 5000, 15000, 0, 0, 0 },
}
special.active_skill_list = {
{
{ 1, 2, 3, 4, 5, 6},
{ 16, 17, 18, 19, 20, 21},
},
{
{31, 32, 33, 34, 35, 36},
{46, 47, 48, 49, 50},
},
{
{61, 62, 63, 64, 65, 66},
{76, 77, 78, 79, 80, 81},
},
{
{91, 92, 93, 94, 95, 96},
{106, 107, 108, 109, 110, 111},
},
}
special.skill_reset_cost = {
2000,
2000,
2000,
2000,
2000,
2000,
4000,
6000,
8000,
10000,
14000,
18000,
22000,
28000,
34000,
41000,
50000,
59000,
70000,
90000,
101000,
109000,
114000,
120000,
131000,
141000,
157000,
176000,
188000,
200000,
225000,
270000,
314000,
348000,
393000,
427000,
470000,
504000,
554000,
600000,
758000,
936000,
1103000,
1276000,
1407000,
1568000,
1704000,
1860000,
2080000,
2300000,
2700000,
3100000,
3500000,
3900000,
4300000,
4800000,
5300000,
5800000,
6400000,
7000000,
8000000,
9000000,
10000000,
11000000,
12000000,
13000000,
14000000,
15000000,
16000000,
17000000,
}
special.levelup_img =
{
[101] = "dog.tga",
[102] = "wolf.tga",
[103] = "wolf.tga",
[104] = "wolf.tga",
[105] = "wolf.tga",
[105] = "wolf.tga",
[106] = "wolf.tga",
[107] = "wolf.tga",
[108] = "wild_boar.tga",
[109] = "wild_boar.tga",
[110] = "bear.tga",
[111] = "bear.tga",
[112] = "bear.tga",
[113] = "bear.tga",
[114] = "tiger.tga",
[115] = "tiger.tga",
[301] = "bak_inf.tga",
[302] = "bak_gung.tga",
[303] = "bak_gen1.tga",
[304] = "bak_gen2.tga",
[401] = "huk_inf.tga",
[402] = "huk_dol.tga",
[403] = "huk_gen1.tga",
[404] = "huk_gen2.tga",
[501] = "o_inf.tga",
[502] = "o_jol.tga",
[503] = "o_gung.tga",
[504] = "o_jang.tga",
[601] = "ung_inf.tga",
[602] = "ung_chuk.tga",
[603] = "ung_tu.tga",
[701] = "mil_chu.tga",
[702] = "mil_na.tga",
[703] = "mil_na.tga",
[704] = "mil_na.tga",
[735] = "mil_jip.tga",
[901] = "sigwi.tga",
[903] = "gwoijil.tga",
[2001] = "spider.tga",
[2002] = "spider.tga",
[2003] = "spider.tga",
[2004] = "spider.tga",
[2005] = "spider.tga",
[2102] = "2102.tga",
[2103] = "2103.tga",
}
special.levelup_quest = {
-- monster kill monster kill
-- vnum qty. vnum qty. exp percent
{ 0 , 0 , 0 , 0 , 0 } , -- lev 1
{ 101 , 10 , 102 , 5 , 10 } , -- lev 2
{ 101 , 20 , 102 , 10 , 10 } , -- lev 3
{ 102 , 15 , 103 , 5 , 10 } , -- lev 4
{ 103 , 10 , 104 , 10 , 10 } , -- lev 5
{ 104 , 20 , 108 , 10 , 10 } , -- lev 6
{ 108 , 10 , 105 , 5 , 10 } , -- lev 7
{ 108 , 20 , 105 , 10 , 10 } , -- lev 8
{ 105 , 15 , 109 , 5 , 10 } , -- lev 9
{ 105 , 20 , 109 , 10 , 10 } , -- lev 10
{ 109 , 10 , 110 , 5 , 10 } , -- lev 11
{ 110 , 15 , 106 , 10 , 10 } , -- lev 12
{ 106 , 20 , 111 , 5 , 10 } , -- lev 13
{ 111 , 15 , 107 , 5 , 10 } , -- lev 14
{ 111 , 20 , 107 , 10 , 10 } , -- lev 15
{ 107 , 15 , 114 , 5 , 10 } , -- lev 16
{ 107 , 20 , 114 , 10 , 10 } , -- lev 17
{ 114 , 10 , 112 , 10 , 10 } , -- lev 18
{ 112 , 20 , 113 , 10 , 10 } , -- lev 19
{ 113 , 20 , 302 , 15 , 10 } , -- lev 20
{ 302 , 20 , 115 , 10 , "2-10" } , -- lev 21
{ 115 , 25 , 304 , 10 , "2-10" } , -- lev 22
{ 304 , 20 , 401 , 40 , "2-10" } , -- lev 23
{ 401 , 60 , 402 , 80 , "2-10" } , -- lev 24
{ 501 , 80 , 404 , 20 , "2-10" } , -- lev 25
{ 502 , 80 , 406 , 20 , "2-10" } , -- lev 26
{ 406 , 30 , 504 , 20 , "2-10" } , -- lev 27
{ 631 , 35 , 504 , 30 , "2-10" } , -- lev 28
{ 631 , 40 , 632 , 30 , "2-10" } , -- lev 29
{ 632 , 40 , 2102 , 30 , "2-10" } , -- lev 30
{ 632 , 50 , 2102 , 45 , "2-5" } , -- lev 31
{ 633 , 45 , 2001 , 40 , "2-5" } , -- lev 32
{ 701 , 35 , 2103 , 30 , "2-5" } , -- lev 33
{ 701 , 40 , 2103 , 40 , "2-5" } , -- lev 34
{ 702 , 40 , 2002 , 30 , "2-5" } , -- lev 35
{ 704 , 20 , 2106 , 20 , "2-5" } , -- lev 36
{ 733 , 30 , 2003 , 20 , "2-5" } , -- lev 37
{ 734 , 40 , 2004 , 20 , "2-5" } , -- lev 38
{ 706 , 40 , 2005 , 30 , "2-5" } , -- lev 39
{ 707 , 40 , 2108 , 20 , "2-5" } , -- lev 40
{ 901 , 40 , 5123 , 25 , "2-5" } , -- lev 41
{ 902 , 30 , 5123 , 30 , "2-5" } , -- lev 42
{ 902 , 40 , 2031 , 35 , "2-5" } , -- lev 43
{ 903 , 40 , 2031 , 40 , "2-5" } , -- lev 44
{ 731 , 50 , 2032 , 45 , "2-5" } , -- lev 45
{ 732 , 30 , 5124 , 30 , "2-5" } , -- lev 46
{ 903 , 35 , 5125 , 30 , "2-5" } , -- lev 47
{ 904 , 40 , 5125 , 35 , "2-5" } , -- lev 48
{ 733 , 40 , 2033 , 45 , "2-5" } , -- lev 49
{ 734 , 40 , 5126 , 20 , "2-5" } , -- lev 50
{ 735 , 50 , 5126 , 30 , "1-4" } , -- lev 51
{ 904 , 45 , 2034 , 45 , "1-4" } , -- lev 52
{ 904 , 50 , 2034 , 50 , "1-4" } , -- lev 53
{ 736 , 40 , 1001 , 30 , "1-4" } , -- lev 54
{ 737 , 40 , 1301 , 35 , "1-4" } , -- lev 55
{ 905 , 50 , 1002 , 30 , "1-4" } , -- lev 56
{ 905 , 60 , 1002 , 40 , "1-4" } , -- lev 57
{ 906 , 45 , 1303 , 40 , "1-4" } , -- lev 58
{ 906 , 50 , 1303 , 45 , "1-4" } , -- lev 59
{ 907 , 45 , 1003 , 40 , "1-4" } , -- lev 60
}
special.levelup_reward1 =
{
-- warrior assassin sura shaman
{ 0, 0, 0, 0 },
{ 11200, 11400, 11600, 11800 }, -- 갑옷 lev2
{ 12200, 12340, 12480, 12620 }, -- 투구 lev3
{ 13000, 13000, 13000, 13000 } -- 방패 lev4
}
-- levelup_reward1 테이블 크기보다 레벨이 높아지면 아래
-- 테이블을 이용하여 아이템을 준다.
special.levelup_reward3 = {
-- pct item # item count
{ 33, 27002, 10 }, -- 25%
{ 67, 27005, 10 }, -- 25%
--{ 75, 27101, 5 }, -- 25%
{ 100, 27114, 5 }, -- 25%
}
special.levelup_reward_gold21 =
{
{ 10000, 20 },
{ 20000, 50 },
{ 40000, 25 },
{ 80000, 3 },
{ 100000, 2 },
}
special.levelup_reward_gold31 =
{
{ 20000, 20 },
{ 40000, 40 },
{ 60000, 25 },
{ 80000, 10 },
{ 100000, 5 },
}
special.levelup_reward_gold41 =
{
{ 40000, 20 },
{ 60000, 40 },
{ 80000, 25 },
{ 100000, 10 },
{ 150000, 5 },
}
special.levelup_reward_gold51 =
{
{ 60000, 20 },
{ 80000, 40 },
{ 100000, 25 },
{ 150000, 10 },
{ 200000, 5 },
}
special.levelup_reward_exp21 =
{
{ 2, 9 },
{ 3, 14 },
{ 4, 39 },
{ 6, 24 },
{ 8, 9 },
{ 10, 4 },
}
special.levelup_reward_exp31 =
{
{ 2, 10 },
{ 2.5, 15 },
{ 3, 40 },
{ 3.5, 25 },
{ 4, 8 },
{ 4.5, 5 },
{ 5, 2 },
}
special.levelup_reward_exp41 =
{
{ 2, 10 },
{ 2.5, 15 },
{ 3, 40 },
{ 3.5, 25 },
{ 4, 8 },
{ 4.5, 5 },
{ 5, 2 },
}
special.levelup_reward_exp51 =
{
{ 1, 10 },
{ 1.5, 15 },
{ 2, 40 },
{ 2.5, 25 },
{ 3, 8 },
{ 3.5, 5 },
{ 4, 2 },
}
special.levelup_reward_item_21 =
{
-- no couple ring
{ { 27002, 10 }, { 27005, 10 }, { 27114, 10 } }, -- lev 21
{ 15080, 15100, 15120, 15140 }, -- lev 22
{ 16080, 16100, 16120, 16140 }, -- lev 23
{ 17080, 17100, 17120, 17140 }, -- lev 24
{ { 27002, 10 }, { 27005, 10 }, { 27114, 10 } }, -- lev 25
{ { 27003, 20 }, { 27006, 20 }, { 27114, 10 } }, -- over lev 25
-- with couple ring
-- { { 27002, 10 }, { 27005, 10 }, { 27114, 10 }, { 70301, 1 } }, -- lev 21
-- { 15080, 15100, 15120, 15140, 70301 }, -- lev 22
-- { 16080, 16100, 16120, 16140, 70301 }, -- lev 23
-- { 17080, 17100, 17120, 17140, 70301 }, -- lev 24
-- { { 27002, 10 }, { 27005, 10 }, { 27114, 10 }, { 70301, 1 } }, -- lev 25
-- { { 27003, 20 }, { 27006, 20 }, { 27114, 10 } }, -- over lev 25
}
special.warp_to_pos = {
-- 승룡곡
{
{ 402100, 673900 },
{ 270400, 739900 },
{ 321300, 808000 },
},
--도염화지
{
--A 5994 7563
--B 5978 6222
--C 7307 6898
{ 599400, 756300 },
{ 597800, 622200 },
{ 730700, 689800 },
},
--영비사막
{
--A 2178 6272
{ 217800, 627200 },
--B 2219 5027
{ 221900, 502700 },
--C 3440 5025
{ 344000, 502500 },
},
--서한산
{
--A 4342 2906
{ 434200, 290600 },
--B 3752 1749
{ 375200, 174900 },
--C 4918 1736
{ 491800, 173600 },
},
}
special.devil_tower =
{
--{ 123, 608 },
{ 2048+126, 6656+384 },
{ 2048+134, 6656+147 },
{ 2048+369, 6656+629 },
{ 2048+369, 6656+401 },
{ 2048+374, 6656+167 },
{ 2048+579, 6656+616 },
{ 2048+578, 6656+392 },
{ 2048+575, 6656+148 },
}
special.lvq_map = {
{ -- "A1" 1
{},
{ { 440, 565 }, { 460, 771 }, { 668, 800 },},
{ { 440, 565 }, { 460, 771 }, { 668, 800 },},
{ { 440, 565 }, { 460, 771 }, { 668, 800 },},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{496, 401}, {494, 951}, {542, 1079}, {748, 9741},},
{{853,557}, {845,780}, {910,956},},
{{853,557}, {845,780}, {910,956},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{340, 179}, {692, 112}, {787, 256}, {898, 296},},
{{224,395}, {137,894}, {206,830}, {266,1067},},
{{224,395}, {137,894}, {206,830}, {266,1067},},
{{224,395}, {137,894}, {206,830}, {266,1067},},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}},
{{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}},
{{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}}, {{405,74}},
},
{ -- "A2" 2
{},
{{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }},
{{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }},
{{ 640,1437 }}, {{ 640,1437 }}, {{ 640,1437 }}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}},
{{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}}, {{640,1437}},
{{640,1437}},
{{640,1437}},
{{640,1437}},
{{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
{{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
{{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
{{244,1309}, {4567,1080}, {496,885}, {798,975}, {1059,1099}, {855,1351},},
{{193,772}, {390,402}, {768,600}, {1075,789}, {1338,813},},
{{193,772}, {390,402}, {768,600}, {1075,789}, {1338,813},},
},
{ -- "A3" 3
{},
{{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }},
{{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }}, {{ 948,804 }},
{{ 948,804 }},
{{ 948,804 }},
{{ 948,804 }},
{{438, 895}, {725, 864}, {632, 671},},
{{438, 895}, {725, 864}, {632, 671},},
{{438, 895}, {725, 864}, {632, 671},},
{{438, 895}, {725, 864}, {632, 671},},
{{438, 895}, {725, 864}, {632, 671},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{847, 412}, {844, 854}, {823, 757}, {433, 407},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{316,168}, {497,130}, {701,157}, {858,316},},
{{200,277}, {130,646}, {211,638}, {291,851},},
{{200,277}, {130,646}, {211,638}, {291,851},},
{{200,277}, {130,646}, {211,638}, {291,851},},
{{100,150}},
{{100,150}},
{{100,150}},
{{100,150}},
{{100,150}},
{{100,150}},
},
{}, -- 4
{}, -- 5
{}, -- 6
{}, -- 7
{}, -- 8
{}, -- 9
{}, -- 10
{}, -- 11
{}, -- 12
{}, -- 13
{}, -- 14
{}, -- 15
{}, -- 16
{}, -- 17
{}, -- 18
{}, -- 19
{}, -- 20
{ -- "B1" 21
{},
{{412,635}, {629,428}, {829,586},},
{{412,635}, {629,428}, {829,586},},
{{412,635}, {629,428}, {829,586},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{329,643}, {632,349}, {905,556},},
{{866,822}, {706,224}, {247,722},},
{{866,822}, {706,224}, {247,722},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{617,948}, {353,221},},
{{496,1089}, {890,1043},},
{{496,1089}, {890,1043},},
{{496,1089}, {890,1043},},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}},
{{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}}, {{876,1127}},
{{876,1127}}, {{876,1127}}, {{876,1127}}, {{908,87}}, {{908,87}}, {{908,87}}, {{908,87}}, {{908,87}}, {{908,87}},
},
{ -- "B2" 22
{},
{{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }},
{{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }},
{{ 95,819 }}, {{ 95,819 }}, {{ 95,819 }}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}},
{{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}}, {{746,1438}},
{{746,1438}},
{{746,1438}},
{{746,1438}},
{{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
{{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
{{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
{{ 172,810}, {288,465}, {475,841}, {303,156}, {687,466},},
{{787,235}, {1209,382}, {1350,571}, {1240,852}, {1254,1126}, {1078,1285}, {727,1360},},
{{787,235}, {1209,382}, {1350,571}, {1240,852}, {1254,1126}, {1078,1285}, {727,1360},},
},
{ -- "B3" 23
{},
{{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }},
{{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }}, {{ 106,88 }},
{{ 106,88 }},
{{ 106,88 }},
{{ 106,88 }},
{{230, 244}, {200, 444}, {594, 408},},
{{230, 244}, {200, 444}, {594, 408},},
{{230, 244}, {200, 444}, {594, 408},},
{{230, 244}, {200, 444}, {594, 408},},
{{230, 244}, {200, 444}, {594, 408},},
{{584,204}, {720,376}, {861,272},},
{{584,204}, {720,376}, {861,272},},
{{584,204}, {720,376}, {861,272},},
{{584,204}, {720,376}, {861,272},},
{{584,204}, {720,376}, {861,272},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{566,694}, {349,574}, {198,645},},
{{816,721}, {489,823},},
{{816,721}, {489,823},},
{{816,721}, {489,823},},
{{772,140}},
{{772,140}},
{{772,140}},
{{772,140}},
{{772,140}},
{{772,140}},
},
{}, -- 24
{}, -- 25
{}, -- 26
{}, -- 27
{}, -- 28
{}, -- 29
{}, -- 30
{}, -- 31
{}, -- 32
{}, -- 33
{}, -- 34
{}, -- 35
{}, -- 36
{}, -- 37
{}, -- 38
{}, -- 39
{}, -- 40
{ -- "C1" 41
{},
{{385,446}, {169,592}, {211,692}, {632,681},},
{{385,446}, {169,592}, {211,692}, {632,681},},
{{385,446}, {169,592}, {211,692}, {632,681},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{385,374}, {227,815}, {664,771},},
{{169,362}, {368,304}, {626,409}, {187,882}, {571,858},},
{{169,362}, {368,304}, {626,409}, {187,882}, {571,858},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{178,275}, {365,242}, {644,313}, {194,950}, {559,936},},
{{452,160}, {536,1034}, {184,1044},},
{{452,160}, {536,1034}, {184,1044},},
{{452,160}, {536,1034}, {184,1044},},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}},
{{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}},
{{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}}, {{137,126}},
},
{ -- "C2" 42
{},
{{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
{{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
{{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
{{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}}, {{1409,139}},
{{1409,139}},
{{1409,139}},
{{1409,139}},
{{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
{{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
{{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
{{991,222}, {1201,525}, {613,232}, {970,751}, {1324,790},},
{{192,211}, {247,600}, {249,882}, {987,981}, {1018,1288}, {1303,1174},},
{{192,211}, {247,600}, {249,882}, {987,981}, {1018,1288}, {1303,1174},},
},
{ -- "C3" 43
{},
{{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}},
{{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}}, {{901,151}},
{{901,151}},
{{901,151}},
{{901,151}},
{{421, 189}, {167, 353},},
{{421, 189}, {167, 353},},
{{421, 189}, {167, 353},},
{{421, 189}, {167, 353},},
{{421, 189}, {167, 353},},
{{679,459}, {505,709},},
{{679,459}, {505,709},},
{{679,459}, {505,709},},
{{679,459}, {505,709},},
{{679,459}, {505,709},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{858,638}, {234,596},},
{{635,856}, {324,855},},
{{635,856}, {324,855},},
{{635,856}, {324,855},},
{{136,899}},
{{136,899}},
{{136,899}},
{{136,899}},
{{136,899}},
{{136,899}},
},
{}, -- 44
{}, -- 45
{}, -- 46
{}, -- 47
{}, -- 48
{}, -- 49
{}, -- 50
{}, -- 51
{}, -- 52
{}, -- 53
{}, -- 54
{}, -- 55
{}, -- 56
{}, -- 57
{}, -- 58
{}, -- 59
{}, -- 60
}
function BuildSkillList(job, group)
local skill_vnum_list = {}
local skill_name_list = {}
if pc.get_skill_group() != 0 then
local skill_list = special.active_skill_list[job+1][group]
table.foreachi( skill_list,
function(i, t)
local lev = pc.get_skill_level(t)
if lev > 0 then
local name = locale.GM_SKILL_NAME_DICT[t]
if name != nil then
table.insert(skill_vnum_list, t)
table.insert(skill_name_list, name)
end
end
end
)
end
table.insert(skill_vnum_list, 0)
table.insert(skill_name_list, locale.cancel)
return { skill_vnum_list, skill_name_list }
end
PREMIUM_EXP = 0
PREMIUM_ITEM = 1
PREMIUM_SAFEBOX = 2
PREMIUM_AUTOLOOT = 3
PREMIUM_FISH_MIND = 4
PREMIUM_MARRIAGE_FAST = 5
PREMIUM_GOLD = 6
-- point type start
POINT_NONE = 0
POINT_LEVEL = 1
POINT_VOICE = 2
POINT_EXP = 3
POINT_NEXT_EXP = 4
POINT_HP = 5
POINT_MAX_HP = 6
POINT_SP = 7
POINT_MAX_SP = 8
POINT_STAMINA = 9 --스테미너
POINT_MAX_STAMINA = 10 --최대 스테미너
POINT_GOLD = 11
POINT_ST = 12 --근력
POINT_HT = 13 --체력
POINT_DX = 14 --민첩성
POINT_IQ = 15 --정신력
POINT_DEF_GRADE = 16
POINT_ATT_SPEED = 17 --공격속도
POINT_ATT_GRADE = 18 --공격력 MAX
POINT_MOV_SPEED = 19 --이동속도
POINT_CLIENT_DEF_GRADE = 20 --방어등급
POINT_CASTING_SPEED = 21 --주문속도 (쿨다운타임*100) / (100 + 이값) = 최종 쿨다운 타임
POINT_MAGIC_ATT_GRADE = 22 --마법공격력
POINT_MAGIC_DEF_GRADE = 23 --마법방어력
POINT_EMPIRE_POINT = 24 --제국점수
POINT_LEVEL_STEP = 25 --한 레벨에서의 단계.. (1 2 3 될 때 보상 4 되면 레벨 업)
POINT_STAT = 26 --능력치 올릴 수 있는 개수
POINT_SUB_SKILL = 27 --보조 스킬 포인트
POINT_SKILL = 28 --액티브 스킬 포인트
POINT_WEAPON_MIN = 29 --무기 최소 데미지
POINT_WEAPON_MAX = 30 --무기 최대 데미지
POINT_PLAYTIME = 31 --플레이시간
POINT_HP_REGEN = 32 --HP 회복률
POINT_SP_REGEN = 33 --SP 회복률
POINT_BOW_DISTANCE = 34 --활 사정거리 증가치 (meter)
POINT_HP_RECOVERY = 35 --체력 회복 증가량
POINT_SP_RECOVERY = 36 --정신력 회복 증가량
POINT_POISON_PCT = 37 --독 확률
POINT_STUN_PCT = 38 --기절 확률
POINT_SLOW_PCT = 39 --슬로우 확률
POINT_CRITICAL_PCT = 40 --크리티컬 확률
POINT_PENETRATE_PCT = 41 --관통타격 확률
POINT_CURSE_PCT = 42 --저주 확률
POINT_ATTBONUS_HUMAN = 43 --인간에게 강함
POINT_ATTBONUS_ANIMAL = 44 --동물에게 데미지 % 증가
POINT_ATTBONUS_ORC = 45 --웅귀에게 데미지 % 증가
POINT_ATTBONUS_MILGYO = 46 --밀교에게 데미지 % 증가
POINT_ATTBONUS_UNDEAD = 47 --시체에게 데미지 % 증가
POINT_ATTBONUS_DEVIL = 48 --마귀(악마)에게 데미지 % 증가
POINT_ATTBONUS_INSECT = 49 --벌레족
POINT_ATTBONUS_FIRE = 50 --화염족
POINT_ATTBONUS_ICE = 51 --빙설족
POINT_ATTBONUS_DESERT = 52 --사막족
POINT_ATTBONUS_MONSTER = 53 --모든 몬스터에게 강함
POINT_ATTBONUS_WARRIOR = 54 --무사에게 강함
POINT_ATTBONUS_ASSASSIN = 55 --자객에게 강함
POINT_ATTBONUS_SURA = 56 --수라에게 강함
POINT_ATTBONUS_SHAMAN = 57 --무당에게 강함
-- ADD_TRENT_MONSTER
POINT_ATTBONUS_TREE = 58 --나무에게 강함 20050729.myevan UNUSED5
-- END_OF_ADD_TRENT_MONSTER
POINT_RESIST_WARRIOR = 59 --무사에게 저항
POINT_RESIST_ASSASSIN = 60 --자객에게 저항
POINT_RESIST_SURA = 61 --수라에게 저항
POINT_RESIST_SHAMAN = 62 --무당에게 저항
POINT_STEAL_HP = 63 --생명력 흡수
POINT_STEAL_SP = 64 --정신력 흡수
POINT_MANA_BURN_PCT = 65 --마나 번
--/ 피해시 보너스 =/
POINT_DAMAGE_SP_RECOVER = 66 --공격당할 시 정신력 회복 확률
POINT_BLOCK = 67 --블럭율
POINT_DODGE = 68 --회피율
POINT_RESIST_SWORD = 69
POINT_RESIST_TWOHAND = 70
POINT_RESIST_DAGGER = 71
POINT_RESIST_BELL = 72
POINT_RESIST_FAN = 73
POINT_RESIST_BOW = 74 --화살 저항 : 대미지 감소
POINT_RESIST_FIRE = 75 --화염 저항 : 화염공격에 대한 대미지 감소
POINT_RESIST_ELEC = 76 --전기 저항 : 전기공격에 대한 대미지 감소
POINT_RESIST_MAGIC = 77 --술법 저항 : 모든술법에 대한 대미지 감소
POINT_RESIST_WIND = 78 --바람 저항 : 바람공격에 대한 대미지 감소
POINT_REFLECT_MELEE = 79 --공격 반사
--/ 특수 피해시 =/
POINT_REFLECT_CURSE = 80 --저주 반사
POINT_POISON_REDUCE = 81 --독데미지 감소
--/ 적 소멸시 =/
POINT_KILL_SP_RECOVER = 82 --적 소멸시 MP 회복
POINT_EXP_DOUBLE_BONUS = 83
POINT_GOLD_DOUBLE_BONUS = 84
POINT_ITEM_DROP_BONUS = 85
--/ 회복 관련 =/
POINT_POTION_BONUS = 86
POINT_KILL_HP_RECOVERY = 87
POINT_IMMUNE_STUN = 88
POINT_IMMUNE_SLOW = 89
POINT_IMMUNE_FALL = 90
--========
POINT_PARTY_ATTACKER_BONUS = 91
POINT_PARTY_TANKER_BONUS = 92
POINT_ATT_BONUS = 93
POINT_DEF_BONUS = 94
POINT_ATT_GRADE_BONUS = 95
POINT_DEF_GRADE_BONUS = 96
POINT_MAGIC_ATT_GRADE_BONUS = 97
POINT_MAGIC_DEF_GRADE_BONUS = 98
POINT_RESIST_NORMAL_DAMAGE = 99
POINT_HIT_HP_RECOVERY = 100
POINT_HIT_SP_RECOVERY = 101
POINT_MANASHIELD = 102 --흑신수호 스킬에 의한 마나쉴드 효과 정도
POINT_PARTY_BUFFER_BONUS = 103
POINT_PARTY_SKILL_MASTER_BONUS = 104
POINT_HP_RECOVER_CONTINUE = 105
POINT_SP_RECOVER_CONTINUE = 106
POINT_STEAL_GOLD = 107
POINT_POLYMORPH = 108 --변신한 몬스터 번호
POINT_MOUNT = 109 --타고있는 몬스터 번호
POINT_PARTY_HASTE_BONUS = 110
POINT_PARTY_DEFENDER_BONUS = 111
POINT_STAT_RESET_COUNT = 112 --피의 단약 사용을 통한 스텟 리셋 포인트 (1당 1포인트 리셋가능)
POINT_HORSE_SKILL = 113
POINT_MALL_ATTBONUS = 114 --공격력 +x%
POINT_MALL_DEFBONUS = 115 --방어력 +x%
POINT_MALL_EXPBONUS = 116 --경험치 +x%
POINT_MALL_ITEMBONUS = 117 --아이템 드롭율 x/10배
POINT_MALL_GOLDBONUS = 118 --돈 드롭율 x/10배
POINT_MAX_HP_PCT = 119 --최대생명력 +x%
POINT_MAX_SP_PCT = 120 --최대정신력 +x%
POINT_SKILL_DAMAGE_BONUS = 121 --스킬 데미지 *(100+x)%
POINT_NORMAL_HIT_DAMAGE_BONUS = 122 --평타 데미지 *(100+x)%
-- DEFEND_BONUS_ATTRIBUTES
POINT_SKILL_DEFEND_BONUS = 123 --스킬 방어 데미지
POINT_NORMAL_HIT_DEFEND_BONUS = 124 --평타 방어 데미지
-- END_OF_DEFEND_BONUS_ATTRIBUTES
-- PC_BANG_ITEM_ADD
POINT_PC_BANG_EXP_BONUS = 125 --PC방 전용 경험치 보너스
POINT_PC_BANG_DROP_BONUS = 126 --PC방 전용 드롭률 보너스
-- END_PC_BANG_ITEM_ADD
-- POINT_MAX_NUM = 128 common/length.h
-- point type start
pc.warp_to_pc = function(name)
if name == pc.get_name() then
return -1
end
local vid = find_pc_by_name(name)
if vid == 0 then
return -2
end
local pc_is_gm = pc.is_gm()
local s = pc.select(vid)
if pc.is_gm() and not is_test_server() and not pc_is_gm then
pc.select(s)
return -3
end
local pc_x = pc.get_x()
local pc_y = pc.get_y()
pc.select(s)
local target_x = pc_x*100
local target_y = (pc_y-2)*100
test_chat(target_x..target_y)
pc.warp(target_x, target_y)
return 0
end
pc.transfer = function(name)
if name == pc.get_name() then
return -1
end
local vid = find_pc_by_name(name)
if vid == 0 then
return -2
end
local pc_is_gm = pc.is_gm()
local pc_x = pc.get_x()
local pc_y = pc.get_y()
local s = pc.select(vid)
if pc.is_gm() and not is_test_server() and not pc_is_gm then
pc.select(s)
return -3
end
local target_x = pc_x*100
local target_y = (pc_y-2)*100
test_chat(target_x..target_y)
pc.warp(target_x, target_y)
pc.select(s)
return 0
end
game.transfer_pc_to_pc = function(name1, name2)
if name1 == name2 then
return -1
end
local vid
local s
local pc_name = pc.get_name()
if name2 != pc_name then
vid = find_pc_by_name(name2)
if vid == 0 then
return -2
end
s = pc.select(vid)
end
local pc_x = pc.get_x()
local pc_y = pc.get_y()
if name1 == pc_name then
pc.select(s)
else
vid = find_pc_by_name(name1)
if vid == 0 then
if name2 != pc_name then
pc.select(s)
end
return -3
end
if name2 == pc_name then
s = pc.select(vid)
else
pc.select(vid)
end
end
local target_x = pc_x*100
local target_y = (pc_y-2)*100
test_chat(target_x..target_y)
pc.warp(target_x, target_y)
if name1 != pc_name then
pc.select(s)
end
return 0
end
--Zusatz
function say_item_name(vnum) say_title(item_name(vnum or item.get_vnum())..":") end
function say_npc_name(vnum) say_title(mob_name(vnum or npc.get_race())..":") end
function say_color(color,text)
if color=="blue" then
say(color256(0, 0, 255)..text..color256(196, 196, 196))
elseif color == "green" then
say(color256(0, 255, 0)..text..color256(196, 196, 196))
elseif color == "red" then
say(color256(255, 0, 0)..text..color256(196, 196, 196))
elseif color == "yellow" then
say(color256(255, 255, 0)..text..color256(196, 196, 196))
elseif color == "white" then
say(color256(255, 255, 255)..text..color256(196, 196, 196))
elseif color == "black" then
say(color256(0, 0, 0)..text..color256(196, 196, 196))
elseif color == "cyan" then
say(color256(0, 255, 255)..text..color256(196, 196, 196))
elseif color == "pink" then
say(color256(255, 0, 255)..text..color256(196, 196, 196))
elseif color == "orange" then
say(color256(255, 145, 0)..text..color256(196, 196, 196))
elseif color == "purple" then
say(color256(100, 0, 255)..text..color256(196, 196, 196))
else
say(color256(196, 196, 196)..text..color256(196, 196, 196))
end
end
function select2(tab)
local max = tab[1]; table.remove(tab,1)
local tablen,outputstr,outputcount,nextc,incit = table.getn(tab),"",0,0,0
table.foreach(tab,
function(i,l)
outputcount = outputcount + 1
if outputcount == 1 then
outputstr=outputstr..'sel = select("'..l..'"'
elseif outputcount == max and tablen > outputcount+incit then
if tablen ~= outputcount+incit+1 then
outputstr=outputstr..',"'..l..'","N?hste Seite") + '..incit..' '
if nextc > 0 then
outputstr = outputstr..'end '
end
outputstr=outputstr..'; if sel == '..(incit+max+1)..' then ' -- Anfangen der neuen Abfrage
nextc, outputcount, incit= nextc+1,0,incit+max
else
outputstr=outputstr..',"'..l..'"'
end
elseif tablen == outputcount+incit then
outputstr=outputstr..',"'..l..'"'
else
outputstr=outputstr..',"'..l..'"'
end
end
)
outputstr = outputstr..') + '..incit
if nextc > 0 then
outputstr = outputstr..' end'
end
outputstr= outputstr.. '; return sel'
local sel = assert(loadstring(outputstr))()
tablen,outputstr,outputcount,nextc,incit = nil,nil,nil,nil,nil -- Speicher freimachen
return sel
end
function dofile (filename)
local f = assert(loadfile(filename))
return f()
end
function mysql_query(query)
i = 1
math.randomseed(os.time())
random = math.random()
n = "/tmp/mysql_"..random..pc.get_vid()
os.execute (MYSQL_BIN.." \""..MYSQL_CONFIG.."\" \""..query.."\" > " .. n)
local ret = dofile(n)
os.remove (n)
return ret
end
function setenergy(typ,value,timez)
pc.setqf("energy_value", value)
pc.setqf("energy_date", get_time() + timez)
pc.setqf("energy_typ", typ)
end
function setenergytime(timez)
pc.setqf("energy_date", timez)
end
function getenergytyp()
return pc.getqf("energy_typ")
end
function getenergyvalue()
return pc.getqf("energy_value")
end
function getenergytime()
return pc.getqf("energy_date")
end
-- Entferne Leerzeichen vor und nach dem String
function string.trim(str)
return (string.gsub(str, "^%s*(.-)%s*$", "%1"))
end
-- String zu Array ?er Seperator
function string.explode(str, sep)
if sep == "" or str == "" then
error("Fehlende Parameter")
end
local pos, t = 1, {}
for s, e in function() return string.find(str, sep, pos) end do
table.insert(t, string.trim(string.sub(str, pos, s-1)))
pos = e+1
end
table.insert(t, string.trim(string.sub(str, pos)))
return t
end
questing.lua:
Quote:
--[[
Questliberweiterung generiert by Mijago
Link:
Funktionen:
split, mysql_query, mysql_query_old, duration, is_number, is_string,
is_table, in_table, numlen, string.reverse, num_format, select2,
select3, note (Notice Mod), Zeitrechnungen, Say Autoumbruch, mysql_escape, account.set_pw,
pc.check_inventory_place, do_for_other, local_pc_setqf, pc.trans, pc.warp_to, local_warp_pc,
download, dot, dostr, Ini-Parser, Farbcodes, Apache-Funktionen,
TS3-Funcs
--]]
--[[
@name split
@author Internet
@descr
Splittet einen String in eine Tabelle.
--]]
function split(str, delim, maxNb)
if str == nil then return str end
if string.find(str, delim) == nil then return { str } end
if maxNb == nil or maxNb < 1 then maxNb = 0 end
local result = {}
local pat = "(.-)" .. delim .. "()"
local nb = 0
local lastPos
for part, pos in string.gfind(str, pat) do
nb = nb + 1
result[nb] = part
lastPos = pos
if nb == maxNb then break end
end
if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end
return result
end
--[[
@name mysql_query
@author Mijago
@needs split
@descr
Mysql-Funktion der neuesten Generation.
--]]
mysql_query = function(query)
if not pre then
local rt = io.open('CONFIG','r'):read('*all')
pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+) %s(%S+).+','-h%1 -u%2 -p%3 -D%4')
end
math.randomseed(os.time())
local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2 ^10),{},{}
os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi)
for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
out[i-1] = out[i-1] or {}
out[i-1][a] = tonumber(b) or b or 'NULL'
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = tonumber(b) or b or 'NULL'
end) end
out.__lines = t[1]
return out
end
--[[
@name mysql_query_old
@author Mijago
@needs split
@descr
Die Alte Version der MySQL-Query-Funktion.
--]]
function mysql_query_old(query,user,pass,db,ip)
local pre = ''
if query == '' or query == nil then
error("Query muss gesetzt sein!")
end
user = user or ql.mysql["user"]
pass = pass or ql.mysql["pass"]
ip = ip or ql.mysql["ip"]
if user ~= '' and user ~= nil then pre = pre..' -u'..user end
if pass ~= '' and pass ~= nil then pre = pre..' -p'..pass end
if db ~= '' and db ~= nil then pre = pre..' -D'..db end
if ip ~= '' and ip ~= nil then pre = pre..' -h'..ip end
math.randomseed(os.time()); local rand = math.random(0,10^7) -- Erstellen der Pfadvariable
local path = 'data/mysql_output_'..os.time()..'_'..rand..'_'..pc.get_ vid()
os.execute ("mysql "..pre.." --e=\""..query.."\" > "..path) -- Laden und Auflisten der Dateiinhalte
local fi,q = io.open(path,"r"),{["l"] = {},["out"]={}}
if fi == nil then
return "ERROR"
end
for line in fi:lines() do table.insert(q.l,(split(line,"\t"))) end
os.remove(path)
if type(q.l[1]) ~= "table" then
return "ERROR"
--error("Fehler bei der MySQL Verbindung oder bei der Rückgabe! Abbruch!")
end
local ix = 0
table.foreachi(q.l,function(i,l)
if i > 1 then table.foreach(l,function(i2,l2)
if q.out[q.l[1][i2]] == nil then q.out[q.l[1][i2]] = {} end
local c = tonumber(l2)
if type(c) == "number" and l2 == tostring(c) then
q.out[q.l[1][i2]][i-1] = c
else
q.out[q.l[1][i2]][i-1] = l2
end
end) end
end)
-- ENDE der eigentlichen MySQL-Funktion
-- START Zusatz: Hanashi-Kompatibilität & Fehlerbehandlung
q.out.__data = q.l[1]
setmetatable(q.out, { __index = function(a,b)
if type(b) == "number" then
return (a[a.__data[b]] or {"ERROR"})
end
return "ERROR"
--error("Fehler bei Indexierung: Index "..b.." ist nicht vorhanden!")
end})
return q.out
end
--[[
@name duration
@author Mijago
@descr
Gibt die verbleibende Zeit als String zurück.
--]]
function duration(ipe)
local ipe,dat= ipe or 0,''
local s,m,h,d,y = tonumber(os.date('%S',ipe)),
tonumber(os.date('%M',ipe)),
tonumber(os.date('%H',ipe)),
tonumber(os.date('%d',ipe))-1,
tonumber(os.date('%Y',ipe))-1970
print(s,m,h,d,y)
for x,c in {{s,"Sek."},{m,"Min."},{h,"Std."},{d,"Tage"},{Y,"J ahre"}} do
if (c[1] or 0) > 0 then
if x > 1 then dat = ' '..dat end
dat = c[1]..' '..c[2]..dat
end
end
return dat
end
--[[
@name is_number
@author Mijago
@descr
Prüft, ob eine Variable eine Zahl ist.
--]]
function is_number(var)
if (type(var) == "number") then
return true
else
return false
end
end
--[[
@name is_string
@author Mijago
@descr
Prüft, ob eine Variable ein String ist.
--]]
function is_string(var)
if (type(var) == "string") then
return true
else
return false
end
end
--[[
@name is_table
@author Mijago
@descr
Prüft, ob eine Variable eine Tabelle ist.
--]]
function is_table(var)
if (type(var) == "table") then
return true
else
return false
end
end
--[[
@name in_table
@author Mijago
@descr
Prüft, ob eine Variablei in einer Tabelle ist.
Aufruf: in_table(var,table)
--]]
function in_table ( e, t )
for _,v in pairs(t) do
if (v==e) then
return true
end
end
return false
end
--[[
@name numlen
@author Mijago
@descr
Gibt die Anzahl der Ziffern einer Zahl wieder.
--]]
function numlen(num)
return string.len(tostring(num))
end
--[[
@name string.reverse
@author Mijago
@descr
Kehrt einen String um.
--]]
function string.reverse(str)
local se = ''
for i=1,string.len(str) do
se = string.sub(str,i,i)..se
end
return se
end
--[[
@name num_format
@author Mijago; Idee von Benhero
@descr
Formatiert lange Zahlen mit Punkten.
--]]
function num_format(num)
if type(num) == "number" then num = tostring(num) end
if string.len(num) <= 3 then return num end
return string.reverse(string.gsub(string.reverse(num),'(% d%d%d)','%1.'))
end
--[[
@name select2
@author Mijago
@needs split
@descr
Wie Select:
Eine Tabelle oder eine Stringliste wird auf Seiten aufgeteilt.
Weiter und Abbrechen Buttons.
--]]
function select2(tab,...)
arg.n = nil
if type(tab) ~= "table" and type(tab) == 'number' then
table.insert(arg,1,tab)
tab = arg
elseif type(tab) ~= "table" and type(tab) == 'string' then
table.insert(arg,1,tab)
table.insert(arg,1,8)
tab = arg
elseif type(tab) == "table" and type(tab[1]) == 'string' then
table.insert(tab,1,8)
end
local max = tab[1]; table.remove(tab,1)
local tablen,outputstr,outputcount,nextc,incit = table.getn(tab),"",0,0,0
table.foreach(tab,
function(i,l)
outputcount = outputcount + 1
if outputcount == 1 then
outputstr=outputstr..'sel = select("'..l..'"'
elseif outputcount == max and tablen > outputcount+incit then
if tablen ~= outputcount+incit+1 then
outputstr=outputstr..',"'..l..'","Nächste Seite") + '..incit..' '
if nextc > 0 then
outputstr = outputstr..'end '
end
outputstr=outputstr..'; if sel == '..(incit+max+1)..' then ' -- Anfangen der neuen Abfrage
nextc, outputcount, incit= nextc+1,0,incit+max
else
outputstr=outputstr..',"'..l..'"'
end
else
outputstr=outputstr..',"'..l..'"'
end
end
)
outputstr = outputstr..') + '..incit
if nextc > 0 then
outputstr = outputstr..' end'
end
outputstr= outputstr.. '; return sel'
print(outputstr)
local sel = assert(loadstring(outputstr))()
tablen,outputstr,outputcount,nextc,incit = nil,nil,nil,nil,nil -- Speicher freimachen
return sel
end
--[[
@name select3
@author Mijago
@needs split
@descr
Wie Select2:
Eine Tabelle oder eine Stringliste wird auf Seiten aufgeteilt.
Weiter, Zurück und Abbrechen (-1) Buttons.
--]]
function select3(...)
arg.n = nil
local tp,max = arg,5
if type(tp[1]) == 'number' then
max = tp[1]
if type(tp[2]) == 'table' then
tp = tp[2]
else
table.remove(tp,1)
end
elseif type(tp[1]) == 'table' then
if type(tp[1][1]) == 'number' then
max = tp[1][1]
table.remove(tp[1],1)
tp = tp[1]
end
tp = tp[1]
end
local str = '{'
local tablen,act,incit = table.getn(tp),0,0
table.foreach(tp,function(i,l)
act = act + 1
if act == 1 then
str = str .. '{'..string.format('%q',l)
elseif act == max+1 and tablen > act+incit then
if tablen ~= act+incit+1 then
str = str..'},{'..string.format('%q',l)
else
str=str..','..string.format('%q',l)
end
incit = incit + max
act = 1
else
str=str..','..string.format('%q',l)
end
end)
local px = loadstring('return '..str ..'}}')()
local function copy_tab(t) local p= {} for i = 1,table.getn(t) do p[i] = t[i] end return p end
local pe = {}
for i = 1,table.getn(px) do pe [i] = copy_tab(px[i]) end
local function init(i,ip)
pe[i] = copy_tab(px[i])
local next,back,exit = 0,0,0
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
if i > 1 then table.insert(pe[i],table.getn(pe[i])+1,'Zurück zu Seite '..(i-1)); back = table.getn(pe[i]) end
table.insert(pe[i],table.getn(pe[i])+1,'Abbruch'); exit = table.getn(pe[i])
say('Seite '..i..' von '..table.getn(pe))
local e = select_table(pe[i])
if e == next then return init(i+1,ip+max)
elseif e == back then return init(i-1,ip-max)
elseif e == exit then return -1
else return e+ip,pe[i][e] end
end
return init(1,0) or -1
end
--[[
@name note (Notice Mod)
@author Mijago
@descr
Wie Notice, nur mit Spielername davor.
--]]
function note(text)
notice_all(pc.get_name()..': '..text)
end
--[[
@name Zeitrechnungen
@author Mijago
@descr
Funktionen zum Umrechenen von Zeit.
--]]
zt = zt or {}
zt.d_j = function(d)
return d/365
end
zt.d_mo = function(d)
return d/12
end
zt.d_h = function(d)
return d*24
end
zt.d_m = function(d)
return d*24*60
end
zt.d_s = function(d)
return d*24*60*60
end
zt.d_hs = function(d)
return d*24*60*60*100
end
zt.d_ms = function(d)
return d*24*60*60*1000
end
--- Stunden
zt.h_j = function(h)
return h/24/365
end
zt.h_mo = function(h)
return h/24/12
end
zt.h_d = function(h)
return h/24
end
zt.h_m = function(h)
return h*60
end
zt.h_s = function(h)
return h*60*60
end
zt.h_hs = function(h)
return h*60*60*100
end
zt.h_ms = function(h)
return h*60*60*1000
end
--- Minuten
zt.m_j = function(m)
return m/60/24/365
end
zt.m_mo = function(m)
return m/60/24/12
end
zt.m_d = function(m)
return m/60/24
end
zt.m_h = function(m)
return m/60
end
zt.m_s = function(m)
return m*60
end
zt.m_hs = function(m)
return m*60*100
end
zt.m_ms = function(m)
return m*60*1000
end
--- Sekunden
zt.s_j = function(s)
return s/60/60/24/365
end
zt.s_mo = function(s)
return s/60/60/24/12
end
zt.s_d = function(s)
return s/60/60/24
end
zt.s_h = function(s)
return s/60/60
end
zt.s_m = function(s)
return s/60
end
zt.s_hs = function(s)
return s*100
end
zt.s_ms = function(s)
return s*1000
end
--[[
@name Say Autoumbruch
@author Mijago
@descr
Fügt die Funktion say2 an.
Mit ihr werden Texte automatisch umgebrochen.
--]]
function say2(str,dx)
local maxl,actl,pat = dx or 50,0,'(.-)(%[.-%])()'
local result,nb,lastPos,outp = {},0,0,''
local function bere(stx)
for le in string.gfind(stx,'((%S+)%s*)') do
if actl + string.len(le) > maxl then
outp = outp..'[ENTER]'
actl = 0
end
outp = outp..le
actl = actl + string.len(le)
end
end
for part, dos,pos in string.gfind(str, pat) do
if part ~= '' then
bere(part)
end
outp = outp..dos
lastPos = pos
end
bere(string.sub(str,lastPos))
say(outp)
end
--[[
@name mysql_escape
@author Mijago
@descr
Wie mysql_real_escape_string in PHP;
Hilft, SQLi vorzubeugen.
--]]
function mysql_escape(str)
str = string.gsub(str,"%\\", "\\\\")
-- str = string.gsub(str,"%\0", "\\0") Gibt einen fehler aus| Wer rausfindet, warum.. Bitte mir Schreiben (Mijago)
str = string.gsub(str,"%\n", "\\n")
str = string.gsub(str,"%\r", "\\r")
str = string.gsub(str,"%\x1a", "\Z")
str = string.gsub(str,"%\'", "\\'")
str = string.gsub(str,'%\"', '\\"')
return str
end
--[[
@name account.set_pw
@author Mijago; Idee von Benhero
@needs mysql_query
@descr
Funktion zum Ändern des Nutzerpasswortes.
--]]
account = account or {}
function account.set_pw(pw,ac)
if pw == nil then error("Fehler... Passwort muss gesetzt werden!") end
if ac == nil then ac = pc.get_account_id() end
if type(ac) == "string" then
mysql_query("UPDATE player.player,account.account SET account.password = password('"..pw.."') WHERE account.id = player.account_id and player.name = '"..ac.."' LIMIT 1")
elseif type(ac) == "number" then
mysql_query("UPDATE account.account SET account.password = password('"..pw.."') WHERE account.id = "..ac)
end
end
--[[
@name pc.check_inventory_place
@author Mijago
@descr
Checkt auf Freie Inventarplätze für Items der größe X (Höhe).
--]]
function pc.check_inventory_place(size)
if size <= 0 or size > 3 then
return -1
end
function check(c)
for i = 0,size-1 do
item.select_cell(e[c+(5*i)])
if item.get_id() ~= 0 then
return false
end
end
return true
end
for i = 0,89 do
if check(i) then
return i
end
end
return -1
end
--[[
@name do_for_other
@author Mijago
@descr
Führt einen String als Luabefehle bei einem anderem User aus.
--]]
function do_for_other(name,ding)
local t = pc.select(find_pc_by_name(name))
assert(loadstring(ding))()
pc.select(t)
end
--[[
@name local_pc_setqf
@author Mijago
@descr
Setzt die Questflag eines anderen Spielers.
--]]
function local_pc_setqf(name, qf,wert) -- Für die aktuelle Quest
local target = find_pc_by_name(name)
local t = pc.select(target)
pc.setqf(qf,wert)
pc.select(t)
end
--[[
@name pc.trans
@author Mijago
@descr
Warpt Spieler B zu Spieler A.
Spieler a = pc.
--]]
function pc.trans(vid)
if vid == nil then
error"VID muss gesetzt sein! (pc.warp_to)"
elseif type(vid) == "string" then
vid = find_pc_by_name(vid)
if vid == 0 then
error"Spieler nicht gefunden"
end
end
local x,y = pc.get_x()*100,pc.get_y()*100
local me = pc.select(vid)
pc.warp(x,y)
pc.select(me)
end
--[[
@name pc.warp_to
@author Mijago
@descr
Warpt Spieler A zu Spieler B.
Spieler a = pc.
--]]
function pc.warp_to(vid)
if vid == nil then
error"VID muss gesetzt sein! (pc.warp_to)"
elseif type(vid) == "string" then
vid = find_pc_by_name(vid)
if vid == 0 then
error"Spieler nicht gefunden"
end
end
local me = pc.select(vid)
local x,y = pc.get_x()*100,pc.get_y()*100
pc.select(me)
pc.warp(x,y)
end
--[[
@name local_warp_pc
@author Mijago
@descr
Warpt einen anderen Spieler lokal.
--]]
function local_pc_warp(name, x, y,mid)
local target = find_pc_by_name(name)
local t = pc.select(target)
if mid == nil then
mid = pc.get_map_index()
end
pc.warp_local(mid, x*100, y*100)
pc.select(t)
end
--[[
@name download
@author Mijago
@descr
Lädt eine Datei in den Data-Ordner.
--]]
function download(url) os.execute("cd data && fetch "..url.." && cd ..") end
--[[
@name dot
@author Mijago
@descr
Führt alles Zwischen $ und $ im String aus.
--]]
function dot(x)
return string.gsub(x, "%$(.-)%$", function (s) return loadstring(s)() end)
end
--[[
@name dostr
@author Mijago
@descr
Führt einen String als Lua-Befehl aus.
--]]
function dostr(str)
assert(loadstring(str))()
end
--[[
@name Ini-Parser
@author Mijago
@needs split
@descr
Ein Parser für Ini-Dateien.
Besitzt eine Eigene Beschreibung der einzelnen Funktionen im Code.
--]]
do
-- Funktionen:
-- var = ini.new()
-- var = ini.open(path)
-- var:write_str(sub,name,wert)
-- var:write_int(sub,name,wert)
-- var:write_bool(sub,name,boolean)
-- var:clear()
-- var:read_str(sub,name,norm) -- Gibt einen String zurück. -|
-- var:read_int(sub,name,norm) -- Gibt eine Zahl zurück -| norm wird zurückgegeben, wenn sub[name] nicht existiert.
-- var:read_bool(sub,name,norm) -- Gibt true / False zurück -|
-- var:delete_key(sub,nm)
-- var:delete_section(sub)
local ini_f = {}
ini = {}
function ini_f:append(sub,nm,wert)
if nm == '' or nm == nil then
return
end
selfarse()
if self.sub[sub] == nil then self.sub[sub] = {} end
self.sub[sub][nm] = wert
self:writeit()
end
function ini_f:write_str(sub,nm,wert)
self:append(sub,nm,wert)
end
function ini_f:write_int(sub,nm,wert)
self:append(sub,nm,wert)
end
function ini_f:write_bool(sub,nm,bool)
if not type(bool) == "boolean" then
return
end
local bin = 0
if bool == true then bin = 1 end
self:append(sub,nm,bin)
return bin
end
function ini_f:clear()
self.sub = {}
self.path = ''
end
function ini_f:writeit()
local out = ''
table.foreach(self.sub,
function(i,l)
out = out..'['..i..']\n'
table.foreach(l,
function(i2,l2)
out=out..i2..'='..l2..'\n'
end
)
end
)
local d = io.open(self.path,'w')
d:write(out)
d:close()
end
function ini_f:delete_key(sub,nm)
if sub == '' or nm == '' or sub == nil or nm == nil then return end
selfarse()
self.sub[sub][nm] = nil
self:writeit()
end
function ini_f:delete_section(sub)
if sub == '' or sub == nil then return end
selfarse()
self.sub[sub]= nil
self:writeit()
end
function ini_farse()
self.sub = {}
if self.path == '' or self.path == nil then return end
local d,i = io.open(self.path,"r"),'non'
if d == nil then d = io.open(self.path,"w") end
for line in d:lines() do
if string.sub(line,1,1) == "[" then
i = string.sub(line,2,string.len(line)-1)
self.sub[i] = {}
else
local inp = split(line,'=')
self.sub[i][inp[1]] = inp[2]
end
end
d:close()
end
function ini_f:read_str(sub,nm,norm)
if sub == '' or nm == '' or sub == nil or nm == nil then return end
selfarse()
if self.sub[sub] == nil then return norm end
if self.sub[sub][nm] == nil then return norm else return self.sub[sub][nm] end
end
function ini_f:read_int(sub,nm,norm)
if sub == '' or nm == '' or sub == nil or nm == nil then return end
selfarse()
if self.sub[sub] == nil then return norm end
if self.sub[sub][nm] == nil then return norm else return tonumber(self.sub[sub][nm]) end
end
function ini_f:read_bool(sub,nm,norm) -- Norm wird zurückgegeben, wenn der Key nm nicht existiert
if sub == '' or nm == '' or sub == nil or nm == nil then return end
selfarse()
if self.sub[sub] == nil then return norm end
if self.sub[sub][nm] == nil then return norm end
if self.sub[sub][nm] == "1" then return true else return false end
end
function ini_fpen(path)
self.path = path
selfarse()
end
function ini.new()
local out = {}
out.path = ''
out.sub = {}
setmetatable(out, { __index = ini_f })
return out
end
function ini.open(path)
local dat = ini.new()
dat:clear()
dat.path=path
datpen(path)
return dat
end
end
--[[
@name Farbcodes
@author Mijago
@descr
Farbcodes für Say
--]]
col = col or {}
col.list= {
{ 'lightcoral', 240,128,128 },{ 'rosybrown', 188,143,143 },
{ 'indianred', 205,92,92 },{ 'red', 255,0,0 },{ 'firebrick', 178,34,34 },{ 'brown', 165,42,42 },
{ 'darkred', 139,0,0 },{ 'maroon', 128,0,0 },{ 'mistyrose', 255,228,225 },{ 'salmon', 250,128,114 },
{ 'tomato', 255,99,71 },{ 'darksalmon', 233,150,122 },{ 'coral', 255,127,80 },{ 'orangered', 255,69,0 },
{ 'lightsalmon', 255,160,122 },{ 'sienna', 160,82,45 },{ 'seashell', 255,245,238 },{ 'chocolate', 210,105,30 },
{ 'saddlebrown', 139,69,19 },{ 'sandybrown', 244,164,96 },{ 'peachpuff', 255,218,185 },{ 'peru', 205,133,63 },
{ 'linen', 250,240,230 },{ 'bisque', 255,228,196 },{ 'darkorange', 255,140,0 },{ 'burlywood', 222,184,135 },
{ 'antiquewhite', 250,235,215 },{ 'tan', 210,180,140 },{ 'navajowhite', 255,222,173 },{ 'blanchedalmond', 255,235,205 },
{ 'papayawhip', 255,239,213 },{ 'moccasin', 255,228,181 },{ 'orange', 255,165,0 },{ 'wheat', 245,222,179 },
{ 'oldlace', 253,245,230 },{ 'floralwhite', 255,250,240 },{ 'darkgoldenrod', 184,134,11 },{ 'goldenrod', 218,165,32 },
{ 'cornsilk', 255,248,220 },{ 'gold', 255,215,0 },{ 'lemonchiffon', 255,250,205 },{ 'khaki', 240,230,140 },
{ 'palegoldenrod', 238,232,170 },{ 'darkkhaki', 189,183,107 },{ 'ivory', 255,255,240 },{ 'lightyellow', 255,255,224 },
{ 'beige', 245,245,220 },{ 'lightgoldenrodyellow', 250,250,210 },{ 'yellow', 255,255,0 },{ 'olive', 128,128,0 },
{ 'olivedrab', 107,142,35 },{ 'yellowgreen', 154,205,50 },{ 'darkolivegreen', 85,107,47 },{ 'greenyellow', 173,255,47 },
{ 'chartreuse', 127,255,0 },{ 'lawngreen', 124,252,0 },{ 'darkseagreen', 143,188,139 },{ 'honeydew', 240,255,240 },
{ 'palegreen', 152,251,152 },{ 'lightgreen', 144,238,144 },{ 'lime', 0,255,0 },{ 'limegreen', 50,205,50 },
{ 'forestgreen', 34,139,34 },{ 'green', 0,128,0 },{ 'darkgreen', 0,100,0 },{ 'seagreen', 46,139,87 },
{ 'mediumseagreen', 60,179,113 },{ 'springgreen', 0,255,127 },{ 'mintcream', 245,255,250 },{ 'mediumspringgreen', 0,250,154 },
{ 'mediumaquamarine', 102,205,170 },{ 'aquamarine', 127,255,212 },{ 'turquoise', 64,224,208 },{ 'lightseagreen', 32,178,170 },
{ 'mediumturquoise', 72,209,204 },{ 'azure', 240,255,255 },{ 'lightcyan', 224,255,255 },{ 'paleturquoise', 175,238,238 },
{ 'aqua', 0,255,255 },{ 'cyan', 0,255,255 },{ 'darkcyan', 0,139,139 },{ 'teal', 0,128,128 },
{ 'darkslategray', 47,79,79 },{ 'darkturquoise', 0,206,209 },{ 'cadetblue', 95,158,160 },{ 'powderblue', 176,224,230 },
{ 'lightblue', 173,216,230 },{ 'deepskyblue', 0,191,255 },{ 'skyblue', 135,206,235 },{ 'lightskyblue', 135,206,250 },
{ 'steelblue', 70,130,180 },{ 'aliceblue', 240,248,255 },{ 'dodgerblue', 30,144,255 },{ 'lightslategray', 119,136,153 },
{ 'slategray', 112,128,144 },{ 'lightsteelblue', 176,196,222 },{ 'cornflowerblue', 100,149,237 },{ 'royalblue', 65,105,225 },
{ 'ghostwhite', 248,248,255 },{ 'lavender', 230,230,250 },{ 'blue', 0,0,255 },{ 'mediumblue', 0,0,205 },
{ 'darkblue', 0,0,139 },{ 'midnightblue', 25,25,112 },{ 'navy', 0,0,128 },{ 'slateblue', 106,90,205 },
{ 'darkslateblue', 72,61,139 },{ 'mediumslateblue', 123,104,238 },{ 'mediumpurple', 147,112,219 },{ 'blueviolet', 138,43,226 },
{ 'indigo', 75,0,130 },{ 'darkorchid', 153,50,204 },{ 'darkviolet', 148,0,211 },{ 'mediumorchid', 186,85,211 },
{ 'thistle', 216,191,216 },{ 'plum', 221,160,221 },{ 'violet', 238,130,238 },{ 'fuchsia', 255,0,255 },
{ 'magenta', 255,0,255 },{ 'darkmagenta', 139,0,139 },{ 'purple', 128,0,128 },{ 'orchid', 218,112,214 },
{ 'mediumvioletred', 199,21,133 },{ 'deeppink', 255,20,147 },{ 'hotpink', 255,105,180 },{ 'lavenderblush', 255,240,245 },
{ 'palevioletred', 219,112,147 },{ 'crimson', 220,20,60 },{ 'pink', 255,192,203 },{ 'lightpink', 255,182,193 },
{ 'white', 255,255,255 },{ 'snow', 255,250,250 },{ 'whitesmoke', 245,245,245 },{ 'gainsboro', 220,220,220 },
{ 'lightgray', 211,211,211 },{ 'silver', 192,192,192 },{ 'darkgray', 169,169,169 },{ 'gray', 128,128,128 },
{ 'dimgray', 105,105,105 },{ 'black', 0,0,0 },{ 'aliceblue', 240,248,255 },{ 'antiquewhite', 250,235,215 },
{ 'aqua', 0,255,255 },{ 'aquamarine', 127,255,212 },{ 'azure', 240,255,255 },{ 'beige', 245,245,220 },
{ 'bisque', 255,228,196 },{ 'black', 0,0,0 },{ 'blanchedalmond', 255,235,205 },{ 'blue', 0,0,255 },
{ 'blueviolet', 138,43,226 },{ 'brown', 165,42,42 },{ 'burlywood', 222,184,135 },{ 'cadetblue', 95,158,160 },
{ 'chartreuse', 127,255,0 },{ 'chocolate', 210,105,30 },{ 'coral', 255,127,80 },{ 'cornflowerblue', 100,149,237 },
{ 'cornsilk', 255,248,220 },{ 'crimson', 220,20,60 },{ 'cyan', 0,255,255 },{ 'darkblue', 0,0,139 },
{ 'darkcyan', 0,139,139 },{ 'darkgoldenrod', 184,134,11 },{ 'darkgray', 169,169,169 },{ 'darkgreen', 0,100,0 },
{ 'darkkhaki', 189,183,107 },{ 'darkmagenta', 139,0,139 },{ 'darkolivegreen', 85,107,47 },{ 'darkorange', 255,140,0 },
{ 'darkorchid', 153,50,204 },{ 'darkred', 139,0,0 },{ 'darksalmon', 233,150,122 },{ 'darkseagreen', 143,188,139 },
{ 'darkslateblue', 72,61,139 },{ 'darkslategray', 47,79,79 },{ 'darkturquoise', 0,206,209 },{ 'darkviolet', 148,0,211 },
{ 'deeppink', 255,20,147 },{ 'deepskyblue', 0,191,255 },{ 'dimgray', 105,105,105 },{ 'dodgerblue', 30,144,255 },
{ 'firebrick', 178,34,34 },{ 'floralwhite', 255,250,240 },{ 'forestgreen', 34,139,34 },{ 'fuchsia', 255,0,255 },
{ 'gainsboro', 220,220,220 },{ 'ghostwhite', 248,248,255 },{ 'gold', 255,215,0 },{ 'goldenrod', 218,165,32 },
{ 'gray', 128,128,128 },{ 'green', 0,128,0 },{ 'greenyellow', 173,255,47 },{ 'honeydew', 240,255,240 },
{ 'hotpink', 255,105,180 },{ 'indianred', 205,92,92 },{ 'indigo', 75,0,130 },{ 'ivory', 255,255,240 },
{ 'khaki', 240,230,140 },{ 'lavender', 230,230,250 },{ 'lavenderblush', 255,240,245 },{ 'lawngreen', 124,252,0 },
{ 'lemonchiffon', 255,250,205 },{ 'lightblue', 173,216,230 },{ 'lightcoral', 240,128,128 },{ 'lightcyan', 224,255,255 },
{ 'lightgoldenrodyellow', 250,250,210 },{ 'lightgray', 211,211,211 },{ 'lightgreen', 144,238,144 },{ 'lightpink', 255,182,193 },
{ 'lightsalmon', 255,160,122 },{ 'lightseagreen', 32,178,170 },{ 'lightskyblue', 135,206,250 },{ 'lightslategray', 119,136,153 },
{ 'lightsteelblue', 176,196,222 },{ 'lightyellow', 255,255,224 },{ 'lime', 0,255,0 },{ 'limegreen', 50,205,50 },
{ 'linen', 250,240,230 },{ 'magenta', 255,0,255 },{ 'maroon', 128,0,0 },{ 'mediumaquamarine', 102,205,170 },
{ 'mediumblue', 0,0,205 },{ 'mediumorchid', 186,85,211 },{ 'mediumpurple', 147,112,219 },{ 'mediumseagreen', 60,179,113 },
{ 'mediumslateblue', 123,104,238 },{ 'mediumspringgreen', 0,250,154 },{ 'mediumturquoise', 72,209,204 },{ 'mediumvioletred', 199,21,133 },
{ 'midnightblue', 25,25,112 },{ 'mintcream', 245,255,250 },{ 'mistyrose', 255,228,225 },{ 'moccasin', 255,228,181 },
{ 'navajowhite', 255,222,173 },{ 'navy', 0,0,128 },{ 'oldlace', 253,245,230 },{ 'olive', 128,128,0 },
{ 'olivedrab', 107,142,35 },{ 'orange', 255,165,0 },{ 'orangered', 255,69,0 },{ 'orchid', 218,112,214 },
{ 'palegoldenrod', 238,232,170 },{ 'palegreen', 152,251,152 },{ 'paleturquoise', 175,238,238 },{ 'palevioletred', 219,112,147 },
{ 'papayawhip', 255,239,213 },{ 'peachpuff', 255,218,185 },{ 'peru', 205,133,63 },{ 'pink', 255,192,203 },
{ 'plum', 221,160,221 },{ 'powderblue', 176,224,230 },{ 'purple', 128,0,128 },{ 'red', 255,0,0 },
{ 'rosybrown', 188,143,143 },{ 'royalblue', 65,105,225 },{ 'saddlebrown', 139,69,19 },{ 'salmon', 250,128,114 },
{ 'sandybrown', 244,164,96 },{ 'seagreen', 46,139,87 },{ 'seashell', 255,245,238 },{ 'sienna', 160,82,45 },
{ 'silver', 192,192,192 },{ 'skyblue', 135,206,235 },{ 'slateblue', 106,90,205 },{ 'slategray', 112,128,144 },
{ 'snow', 255,250,250 },{ 'springgreen', 0,255,127 },{ 'steelblue', 70,130,180 },{ 'tan', 210,180,140 },
{ 'teal', 0,128,128 },{ 'thistle', 216,191,216 },{ 'tomato', 255,99,71 },{ 'turquoise', 64,224,208 },
{ 'violet', 238,130,238 },{ 'wheat', 245,222,179 },{ 'white', 255,255,255 },{ 'whitesmoke', 245,245,245 },
{ 'yellow', 255,255,0 },{ 'yellowgreen', 154,205,50 }}
table.foreachi(col.list,function(a,b)
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
end)
--[[
@name Apache-Funktionen
@author Mijago
@descr
Funktionen, um Apache neu zu starten.
--]]
proc=proc or {}
proc.apache_start = function()
os.execute('apachectl start')
end
proc.apache_stop = function()
os.execute('apachectl stop')
end
proc.apache_restart = function()
os.execute('apachectl restart')
end
proc.apache_graceful = function()
os.execute('apachectl graceful')
end
--[[
@name TS3-Funcs
@author Mijago
@descr
Funktionen zum Starten, Stoppen und Neustarten eines TS3 Servers.
--]]
proc=proc or {}
proc.ts3_start = function(path)
os.execute('cd '..path..' && sh ts3server_startscript.sh start')
end
proc.ts3_stop = function(path)
os.execute('cd '..path..' && sh ts3server_startscript.sh stop')
end
proc.ts3_restart = function(path)
os.execute('cd '..path..' && sh ts3server_startscript.sh restart')
end








