ich wollte mal wieder was Releasen. Heute ist es ein Skillbaum-System.
Aufbau:
- Mann kann den Skillbaum als Gm an,- und auschalten.
- Wenn der Skillbaum aktiv ist kann mann zu dem bestimmten Npc wo sich der
- der Skillbaum befindet hingehen und mit bestimmten Items die Bonis erhöhen.
- Nachdem mann erfolgreich geskillt hat(die Chance das es klappt ist 50%) erhält
- mann den Boni und muss 1 Stunde warten bis mann wieder etwas skillen kann.
- Es gibt 5 Level wenn mann in jedem Level alles durch geskillt hat wird mann
- ein Level höher gestuft.
Infos:
- Fast alles selber einstellbar.(Die Anzahl der Skillpunkte die mann für ein Bonus
- braucht sind noch nicht selber einstellbar, werde es aber gerne auf
- Anfragen edit.)
- Jeden Bonus muss mann min. 10 x skillen um weiter zu kommen.
- Die Bonis pro Level sind alle einstellbar(für die SA´s)
- Die Quest war eig. für mein Server gedacht aber naja
- Guckt sie euch einfach mal an.
Achja und da die Quest jetzt Großteils über qf läuft werde ich auf Anfragen auch gerne eine Mysql Version davon raushauen.
(Verbesserungsvorschläge gerne angenommen)
Quest:
PHP Code:
--[[
@name skilltree
@creator QuickFlameZ
@server Perfection2
--]]
quest skilltree begin
state start begin
when 9009.chat."Skillbaum Panel" with pc.is_gm() begin
say(col.gold("Skillbaum:[ENTER]"))
say("Skillbaum ".. ({'offline','online'})[game.get_event_flag("skill_tree")+1])
say()
if select("Skillbaum "..({'anschalten','ausschalten'})[game.get_event_flag("skill_tree")+1], "Nichts") == 2 then return end
notice_all("Der Skillbaum ist jetzt "..({"erreichbar","nicht erreichbar"})[game.get_event_flag("skill_tree")+1])
if game.get_event_flag("skill_tree") == 0 then
game.set_event_flag("skill_tree", 1)
else
game.set_event_flag("skill_tree", 0)
end
end
when 9009.chat."Skillbaum" with game.get_event_flag("skill_tree") == 1 begin
local bonis = {}
local tree = {
-- [Skillbaumlevel]//Bonus Name//Flag_name//Bonus pro up//Bonus Name//Benötigtes Item//Anzahl
[0] = {
{"Trefferpunkte","tree_tp", 1000, apply.MAX_HP, 19, 1},
{"Angriffsgeschwindigkeit","tree_angr", 2, apply.ATT_SPEED, 19, 2},
{"Laufgeschwindigkeit","tree_speed", 3, apply.MOV_SPEED, 19, 1},
{"Tp-Regeneration","tree_reg", 2, apply.HP_REGEN, 29, 1},
},
[1] = {
{"Stark gegen Tiere","tree_animals", 3, apply.ATTBONUS_ANIMAL, 39, 1},
{"Stark gegen Orks","tree_orc", 2, apply.ATTBONUS_ORC, 19, 1},
{"Stark gegen Teufel","tree_devil", 2, apply.ATTBONUS_DEVIL, 19, 1},
},
[2] = {
{"Kritische Treffer","tree_crit", 1, apply.CRITICAL_PCT, 19, 1},
{"Durchbohrende Treffer","tree_db", 1, apply.PENERATE_PCT, 29, 1},
{"Vergiftungschane","tree_poisen", 1, apply.POISON_PCT, 39, 1},
},
[3] = {
{"Stark gegen Halbmenschen","tree_hm", 2, apply.ATTBONUS_HUMAN, 19, 1},
{"Schwertverteidigung","tree_sword", 1, apply.RESIST_SWORD, 19, 1},
{"Zweihänderverteidigung","tree_tsword", 1, apply.RESIST_TWOHAND, 19, 1},
{"Glockenverteidigung","tree_bell", 1, apply.RESIST_BELL, 19, 1},
{"Fächerverteidigung","tree_fan", 1, apply.RESIST_FAN, 19, 1},
{"Dolchverteidigung","tree_dagger", 1, apply.RESIST_DAGGER, 19, 1},
{"Pfeilverteidigung","tree_bow", 1, apply.RESIST_BOW, 19, 1},
},
[4] = {
{"Stark gegen Krieger","tree_warrior", 1, apply.ATT_BONUS_TO_WARRIOR, 19, 1},
{"Stark gegen Ninja","tree_assasine", 1, apply.ATT_BONUS_TO_ASSASSIN, 19, 1},
{"Stark gegen Sura","tree_sura", 1, apply.ATT_BONUS_TO_SURA, 19, 1},
{"Stark gegen Schamenen","tree_shaman", 1, apply.ATT_BONUS_TO_SHAMAN, 19, 1},
},
}
say(col.gold("Hallo "..pc.get_name()..","))
say("bei mir kannst du im Tausch von")
say("Gegenständen verschiedene Bonis skillen.")
say("Möchtest du fortfahren?")
if select("Forfahren","Abbruch") == 2 then return end
say(col.gold("Skillbaum:[ENTER]"))
say("Gut, ich werde dir Auflisten")
say("was du alles skillen kannst.")
wait()
say(col.gold("Skillbaum:[ENTER]"))
for i = 1, table.getn(tree[pc.getqf("tree_level")]), 1 do
if pc.getqf(tree[pc.getqf("tree_level")][i][2]) >= 10 then
table.insert(bonis, tree[pc.getqf("tree_level")][i][1].." - Beendet")
else
table.insert(bonis, tree[pc.getqf("tree_level")][i][1])
end
end
local menu = select3(bonis)
if menu == -1 then return end
local rnd = math.random(1, 100)
say(col.gold("Skillbaum:[ENTER]"))
say("Du hast den Boni bereits auf "..pc.getqf(tree[pc.getqf("tree_level")][menu][2]))
say()
say("Du möchtest also "..tree[pc.getqf("tree_level")][menu][1].." skillen?")
if select("Skillen","Abbruch") == 2 then return end
if pc.getqf(tree[pc.getqf("tree_level")][menu][2]) < 10 then
if get_time() > pc.getqf("tree_time") then
if pc.count_item(tree[pc.getqf("tree_level")][menu][5]) >= tree[pc.getqf("tree_level")][menu][6] then
if rnd > 49 then -- Chance ob klappen soll immoment 50%
say(col.gold("Skillbaum:[ENTER]"))
say("Glückwunsch dein Skillpunkt")
say("wurde erfolgreich gesetzt.[ENTER]")
say(col.lightgreen("Erfolgreich!![ENTER]"))
wait()
pc.remove_item(tree[pc.getqf("tree_level")][menu][5], tree[pc.getqf("tree_level")][menu][6])
affect.add_collect(tree[pc.getqf("tree_level")][menu][4], tree[pc.getqf("tree_level")][menu][3], 60*60*24*365*60)
chat("Du hast "..tree[pc.getqf("tree_level")][menu][3].." mehr "..tree[pc.getqf("tree_level")][menu][1].." erhalten.")
pc.setqf(tree[pc.getqf("tree_level")][menu][2], pc.getqf(tree[pc.getqf("tree_level")][menu][2])+1)
pc.setqf("tree_time", get_time()+3600) -- Warte Zeit
if pc.getqf(tree[pc.getqf("tree_level")][menu][2]) >= 10 then
local tree_skill = table.getn(tree[pc.getqf("tree_level")])*1
say(col.gold("Skillbaum:[ENTER]"))
say("Glückwunsch dein Skill,")
say("wurde erfolgreich auf die max.")
say("Stufe gestuft.")
say()
say(col.lightgreen("Mach weiter so!"))
say()
wait()
pc.setqf("tree_level_skill", pc.getqf("tree_level_skill")+1)
if pc.getqf("tree_level_skill") == tree_skill then
pc.setqf("tree_level", pc.getqf("tree_level")+1)
say(col.gold("Skillbaum[ENTER]"))
say("Glückwunsch du hast das Level")
say("erfolgreich absolviert.")
say()
say(col.lightgreen("Aufstieg: Level "..pc.getqf("tree_level")))
wait()
pc.setqf("tree_time", get_time()+7200)
end
end
else
say(col.gold("Skillbaum:[ENTER]"))
say("Leider ist der Skillpunkt")
say("nicht gut genung gewesen.")
say()
say_reward("Fehlgeschlagen!!")
pc.remove_item(tree[pc.getqf("tree_level")][menu][5], tree[pc.getqf("tree_level")][menu][6])
say()
return
end
else
say(col.gold("Skillbaum:"))
say()
say("Leider fehlt dir ein")
say_item_vnum(tree[pc.getqf("tree_level")][menu][5])
say()
return
end
else
say(col.gold("Skillbaum:[ENTER]"))
say("Du musst noch warten")
say("bevor du wieder skillen kannst.")
say()
return
end
else
say(col.gold("Skillbaum"))
say("Leider ist der Skill")
say("bereits auf dem Maximum.")
say()
return
end
end
end
end
quest_functions:
PHP Code:
col.gold
col.lightgreen
select3
questlib.lua:
col:
select3
PHP Code:
--[[
@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)
PHP Code:
--[[
@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])
if table.getn(pe) > 1 then
say('Seite '..i..' von '..table.getn(pe))
end
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
Special thanks:
- Boneyx3
- Cry wegen cool
- Whit3Styler
- Swek. 1337 für ganz viel swek
- alpha-1337 für
Mfg