Code:
--[[
In die Questlib: ((c) Kilroy)
function formatBoni(id, w)
boni = {
[1] = "Max. TP +%d",
[2] = "Max. MP +%d",
[3] = "Vitalität +%d",
[4] = "Intelligenz +%d",
[5] = "Stärke +%d",
[6] = "Beweglichkeit +%d",
[7] = "Angriffsgeschwindigkeit +%d%%",
[8] = "Bewegungsgeschw. %d%%",
[9] = "Zaubergeschwindigkeit +%d%%",
[10] = "TP-Regeneration +%d%%",
[11] = "MP-Regeneration +%d%%",
[12] = "Vergiftungschance %d%%",
[13] = "Ohnmachtschance %d%%",
[14] = "Verlangsamungschance %d%%",
[15] = "Chance auf krit. Treffer +%d%%",
[16] = "%d%% Chance auf durchbohrenden Treffer",
[17] = "Stark gegen Halbmenschen +%d%%",
[18] = "Stark gegen Tiere +%d%%",
[19] = "Stark gegen Orks +%d%%",
[20] = "Stark gegen Esoterische +%d%%",
[21] = "Stark gegen Untote +%d%%",
[22] = "Stark gegen Teufel +%d%%",
[23] = "%d%% Schaden wird von TP absorbiert",
[24] = "%d%% Schaden wird von MP absorbiert",
[25] = "%d%% Chance auf Manaraub",
[26] = "%d%% Chance, MP bei Treffer zurückzuerhalten",
[27] = "Chance, Nahkampf-Angriff abzublocken %d%%",
[28] = "%d%% Chance, Pfeilangriff auszuweichen",
[29] = "Schwertverteidigung %d%%",
[30] = "Zweihänderverteidigung %d%%",
[31] = "Dolchverteidigung %d%%",
[32] = "Glockenverteidigung %d%%",
[33] = "Fächerverteidigung %d%%",
[34] = "Pfeilwiderstand %d%%",
[35] = "Feuerwiderstand %d%%",
[36] = "Blitzwiderstand %d%%",
[37] = "Magiewiderstand %d%%",
[38] = "Windwiderstand %d%%",
[39] = "%d%% Chance, Nahkampftreffer zu reflektieren",
[40] = "%d%% Chance, Fluch zu reflektieren",
[41] = "Giftwiderstand %d%%",
[42] = "%d%% Chance, MP wiederherzustellen",
[43] = "%d%% Chance auf EXP-Bonus",
[44] = "%d%% Chance, eine doppelte Menge Yang fallen zu lassen",
[45] = "%d%% Chance, eine doppelte Menge von Gegenständen fallen zu lassen",
[46] = "Trank %d%% Effektzuwachs",
[47] = "%d%% Chance, TP wiederherzustellen",
[48] = "Abwehr gegen Ohnmacht",
[49] = "Abwehr gegen Verlangsamen",
[50] = "Immun gegen Stürzen",
[52] = "Bogenreichweite +%dm",
[53] = "Angriffswert +%d",
[54] = "Verteidigung +%d",
[55] = "Magischer Angriffswert +%d",
[56] = "Magische Verteidigung +%d",
[58] = "Max. Ausdauer +%d",
[59] = "Stark gegen Krieger +%d%%",
[60] = "Stark gegen Ninjas +%d%%",
[61] = "Stark gegen Sura +%d%%",
[62] = "Stark gegen Schamanen +%d%%",
[63] = "Stark gegen Monster +%d%%",
[64] = "Angriffswert +%d",
[65] = "Verteidigung +%d",
[66] = "EXP +%d%%",
[67] = "Dropchance von Gegenständen +%d%%",
[68] = "Droppchance von Yang +%d%%",
[71] = "Fertigkeitsschaden %d%%",
[72] = "Durchschn. Schaden %d%%",
[73] = "Widerstand gegen Fertigkeitsschaden %d%%",
[74] = "Durchschn. Schadenswiderstand %d%%",
[76] = "iCafe EXP-Bonus +%d%%",
[77] = "iCafe Chance auf Erbeuten von Gegenständen plus %d%%",
[78] = "Abwehrchance gegen Kriegerangriffe %d%%",
[79] = "Abwehrchance gegen Ninjaangriffe %d%%",
[80] = "Abwehrchance gegen Suraangriffe %d%%",
[81] = "Abwehrchance gegen Schamanenangriffe %d%%"
}
meta = {
__index = function(t,i)
return "undefiniert + %d"
end
}
setmetatable(boni, meta)
return string.format(boni[id], w)
end
]]
quest itemexchange begin
state start begin
when 20014.chat."Itemtausch" begin
local neededItems = {
vnum1,
vnum2,
...
}
local selectableBonus = {
{1, 5000},
{64, 100},
{65, 100}
}
local itemNames = itemexchange.getItemNameList(neededItems)
local leftItems = itemexchange.getLeftItems(neededItems)
local bonusNames = itemexchange.getBonusNameList(selectableBonus)
say_title(mob_name(npc.get_race()) .. ":")
say("Hallo Abenteurer,")
say("Im Tausch gegen folgende Items:")
itemexchange.sayList(itemNames, say_reward, "- ")
say("")
say("Biete ich dir eine Auswahl aus folgenden Boni an:")
itemexchange.sayList(bonusNames, say_reward, "- ")
say("")
if table.getn(leftItems) >= 1 then
say_reward("Für einen Tausch fehlt dir mindestens eins")
say_reward("Der benötigten Items.")
if select("Fehlende Items anzeigen", "Abbrechen") == 2 then return end
say_title(mob_name(npc.get_race()) .. ":")
say("Dir fehlen folgende Items:")
itemexchange.sayList(itemexchange.getItemNameList(leftItems), say_reward, "- ")
say("")
return
end
if select("Jetzt tauschen", "Abbrechen") == 2 then return end
say_title(mob_name(npc.get_race()) .. ":")
say("Bitte wähle einen der folgenden Boni")
say("")
table.insert(bonusNames, "Abbrechen")
local selectedBonus = selectableBonus[select_table(bonusNames)] or false
if not selectedBonus then return end
say_title(mob_name(npc.get_race()) .. ":")
say("Möchtest du folgende Items:")
itemexchange.sayList(itemNames, say_reward, "- ")
say("")
say("Wirklich gegen")
say_reward(formatBoni(unpack(selectedBonus)))
say("tauschen?")
say("")
if select("Tauschen", "Abbrechen") == 2 then return end
if not itemexchange.removeItems(neededItems) then
syschat("Etwas ist schiefgelaufen ...")
return
end
itemexchange.giveBonus(selectedBonus)
syschat("Deinem Charakter wurden " .. formatBoni(unpack(selectedBonus)) .. " gutgeschrieben.")
end
function getLeftItems(itemVnumList)
local leftItems = {}
for _,vnum in ipairs(itemVnumList) do
if pc.count_item(vnum) < 1 then
table.insert(leftItems, vnum)
end
end
return leftItems
end
function getItemNameList(itemVnumList)
local itemNames = {}
for _,vnum in ipairs(itemVnumList) do
table.insert(itemNames, item_name(vnum))
end
return itemNames
end
function getBonusNameList(bonusIDAmountList)
local bonusNames = {}
for _,idAmount in ipairs(bonusIDAmountList) do
table.insert(bonusNames, formatBoni(unpack(idAmount)))
end
return bonusNames
end
function sayList(list, func, pre)
local func = func or say
local pre = pre or ""
for _,line in ipairs(list) do
func(pre .. line)
end
end
function removeItems(itemVnumList)
if table.getn(itemexchange.getLeftItems(itemVnumList)) >= 1 then
return false
end
for _,vnum in ipairs(itemVnumList) do
pc.remove_item(vnum)
end
return true
end
function giveBonus(bonus)
affect.add_collect(bonus[1], bonus[2], 60*60*24*365*10)
end
end
end
Ausserdem muss folgendes in die quest_functions (damit es keine compilefehler gibt):
Die vnum vom Hauptmann musst du noch anpassen.