@ sensi kannst du mir dann dabei helfen um diese Funktion hin zu bekommen
Quote:
Ich bräuchte, eine Kleine quest, die automatisch ein Text Feld öffnet, wo ein Text drinnen steht, wenn man auf ein Item per Rechtsklick drauf drückt.
Wäre sehr nett, wenn sie jemand erstellen könnte.
quest item_info begin
state start begin
when ITEM_ID.use begin
say_title("Itembeschreibung")
say("Blablalbbla")
say("Blubblublbub")
say("usw?")
end
end
end
Quote:
Hallo,
Kann mir jemand eine Quest schreiben wen man 10Stk von dem gegenstand x,y abgibt bekommt man 1 Itempunkt wen man 25 Itempunkte hat kann man sich eine Truhe bei dem gleichen NPC bekommen
Würde mich echt freuen danke
--[[
Das hier in die Questlib.lua eintragen:
EXCHANGE_ITEMPOINT = {}
EXCHANGE_ITEMPOINT.EXCHANGE_VNUM = 30270
EXCHANGE_ITEMPOINT.EXCHANGE_NAME = item_name(EXCHANGE_ITEMPOINT.EXCHANGE_VNUM)
EXCHANGE_ITEMPOINT.EXCHANGE_CHAT_TEXT = EXCHANGE_ITEMPOINT.EXCHANGE_NAME .. " eintauschen"
EXCHANGE_ITEMPOINT.ITEMPOINTS_PER_ITEM = 1
EXCHANGE_ITEMPOINT.NEEDED_POINTS = 25
EXCHANGE_ITEMPOINT.QF_NAME = "EXCHANGE_ITEMPOINTS"
EXCHANGE_ITEMPOINT.BUY_CHAT_TEXT = "Itempunkte eintauschen"
EXCHANGE_ITEMPOINT.POSSIBLE_ITEMS = {
1239,
1240,
1241,
1242,
1243,
1244,
1245,
1246,
1247,
1248,
1249
}
]]
quest exchangeItempoint begin
state start begin
when 20001.chat.EXCHANGE_ITEMPOINT.EXCHANGE_CHAT_TEXT or 20001.take begin
local itemVnum = item.get_vnum()
if itemVnum ~= 0 and itemVnum ~= EXCHANGE_ITEMPOINT.EXCHANGE_VNUM then
say_title(mob_name(npc.get_race()) .. ":")
say("Das ist das falsche Item.")
say("Ich suche nur " .. EXCHANGE_ITEMPOINT.EXCHANGE_NAME .. "!")
return
end
local itemCount = pc.count_item(EXCHANGE_ITEMPOINT.EXCHANGE_VNUM)
say_title(mob_name(npc.get_race()) .. ":")
say("Du besitzt " .. itemCount .. "x " .. EXCHANGE_ITEMPOINT.EXCHANGE_NAME .. ".")
say("Für jeden " .. EXCHANGE_ITEMPOINT.EXCHANGE_NAME .. " biete ich dir")
say(EXCHANGE_ITEMPOINT.ITEMPOINTS_PER_ITEM .. " Itempunkt(e) an.")
say(EXCHANGE_ITEMPOINT.NEEDED_POINTS .. " Itempunkt(e) kannst du gegen ein zufälliges Item eintauschen.")
say("")
if itemCount < 1 then
say_reward("Du besitzt kein Item zum eintauschen.")
return
end
local exchangeCount = ({itemCount, 1})[select("Alle eintauschen", "Eins eintauschen", "Abbrechen")]
if not exchangeCount then return end
local addItempointCount = exchangeCount * EXCHANGE_ITEMPOINT.ITEMPOINTS_PER_ITEM
say_title(mob_name(npc.get_race()) .. ":")
say("Möchtest du wirklich " .. exchangeCount .. "x " .. EXCHANGE_ITEMPOINT.EXCHANGE_NAME)
say("gegen " .. addItempointCount .. " eintauschen?")
if select("Eintauschen", "Abbrechen") == 2 then return end
if pc.count_item(EXCHANGE_ITEMPOINT.EXCHANGE_VNUM) < exchangeCount then
syschat("Eintauschen fehlgeschlagen -> Ungenügend Items.")
return
end
pc.remove_item(EXCHANGE_ITEMPOINT.EXCHANGE_VNUM, exchangeCount)
exchangeItempoint.addPoints(addItempointCount)
syschat("Deinem Itempunkte-Konto wurden " .. addItempointCount .. " Punkte gutgeschrieben. Du hast nun " .. exchangeItempoint.getPoints() .. " Itempunkte.")
end
when 20001.chat.EXCHANGE_ITEMPOINT.BUY_CHAT_TEXT begin
local itempoints = exchangeItempoint.getPoints()
local possibleExchangeCount = math.floor(itempoints / EXCHANGE_ITEMPOINT.NEEDED_POINTS)
say_title(mob_name(npc.get_race()) .. ":")
say("Itempunkte: " .. exchangeItempoint.getPoints())
say("")
say(EXCHANGE_ITEMPOINT.NEEDED_POINTS .. " tausche ich dir gegen ein zufälliges Item aus")
say("einer Liste an möglichen Items.")
say("")
if possibleExchangeCount < 1 then
say_reward("Du besitzt nicht genügend Itempunkte für einen Tausch.")
return
end
local exchangeCount = ({possibleExchangeCount, 1})[select("Alle eintauschen", "Eins eintauschen", "Abbrechen")]
if not exchangeCount then return end
local removeItempointCount = exchangeCount * EXCHANGE_ITEMPOINT.NEEDED_POINTS
say_title(mob_name(npc.get_race()) .. ":")
say("Möchtest du wirklich " .. removeItempointCount .. " Itempunkte")
say("gegen " .. exchangeCount .. " zufällige Items eintauschen?")
if select("Eintauschen", "Abbrechen") == 2 then return end
if exchangeItempoint.getPoints() < removeItempointCount then
syschat("Eintauschen fehlgeschlagen -> Ungenügend Itempunkte.")
return
end
for i = 1, exchangeCount do
local itemVnum = exchangeItempoint.giveRandomItem()
exchangeItempoint.removePoints(EXCHANGE_ITEMPOINT.NEEDED_POINTS)
syschat("Du hast " .. EXCHANGE_ITEMPOINT.NEEDED_POINTS .. " Itempunkte gegen " .. item_name(itemVnum) .. " getauscht!")
end
end
function getPoints()
return pc.getqf(EXCHANGE_ITEMPOINT.QF_NAME)
end
function addPoints(count)
pc.setqf(EXCHANGE_ITEMPOINT.QF_NAME, exchangeItempoint.getPoints() + count)
end
function removePoints(count)
pc.setqf(EXCHANGE_ITEMPOINT.QF_NAME, exchangeItempoint.getPoints() - count)
end
function giveRandomItem()
local itemVnum = EXCHANGE_ITEMPOINT.POSSIBLE_ITEMS[math.random(table.getn(EXCHANGE_ITEMPOINT.POSSIBLE_ITEMS))]
pc.give_item2(itemVnum)
return itemVnum
end
end
end
Quote:
2. Quest
quest viplogin begin state start begin when login with viplogin.pcIsVip() begin notice_all(pc.get_name() .. " ist online!") end function pcIsVip() local name = pc.get_name() return string.sub(name, 1, (string.len(name) < 5 and string.len(name) or 5)) == "[VIP]" end end end
Ich gehe mal von einer zusätzlichen Bewegungsgeschwindigkeit von 60 aus, dies wird aus deiner Beschreibung nicht unbedingt deutlich.Quote:
Hi liebe EPVP-Community! :)
Bräuchte eine Quest, die ab dem ersten Login die Bewegungsgeschwindigkeit auf 60 setzt! :)
quest give_basic_speed_bonus begin
state start begin
when login begin
affect.add_collect(apply.MOV_SPEED, 60, 60*60*24*365*60) -- (applyType: 8)
set_state("finish")
end
end
state finish begin
end
end
Quote:
Hallo,
ich benötige eine Quest. Sollte so aussehen: Man muss bei einem NPC (Hauptman) 7 Items abgeben. Besitzt er diese 7 Items kann er zwischen 3 Belohnungen wählen. 5k TP, 100 AW oder 100 Deff. Wenn er Beispielsweise 2 Items nicht besitzt, soll angezeigt werden welches Item fehlt.
Wäre Super wenn mir jemand so eine Quest schreiben könnte.
--[[
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
formatBoni ipairs unpack func
Erstmal danke für die Quest. Allerdings erhalte ich diese Fehlermeldung:Quote:
Das was oben als Kommentar steht muss in die questlib.luaCode:--[[ 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 HAUPTMANN_VNUM.chat."Itemtausch" begin local neededItems = { vnum1, vnum2, vnum3, vnum4, vnum5, vnum6, vnum7 } 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("der Sensi ist jetzt nicht kreativ mit dem Text.") 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("") local selectedBonus = selectableBonus[select(unpack(bonusNames), "Abbrechen")] 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) 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(unpack(bonus), 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.Code:formatBoni ipairs unpack
WHEN : 20355.chat ("Itemtausch")
FUNCTION getLeftItems(itemVnumList)
FUNCTION getItemNameList(itemVnumList)
FUNCTION getBonusNameList(bonusIDAmountList)
FUNCTION sayList(list,func,pre)
itemexchange.quest:112:expecting 'state'
Error occured on compile itemexchange.quest
Quest wurden neu kompiliert!
Bei der Funktion SayList habe ich bei der schleife das "do" vergessen. Einfach da hinschreiben wie es bei den anderen Funktionen auch istQuote:
Erstmal danke für die Quest. Allerdings erhalte ich diese Fehlermeldung:
Code:WHEN : 20355.chat ("Itemtausch") FUNCTION getLeftItems(itemVnumList) FUNCTION getItemNameList(itemVnumList) FUNCTION getBonusNameList(bonusIDAmountList) FUNCTION sayList(list,func,pre) itemexchange.quest:112:expecting 'state' Error occured on compile itemexchange.quest Quest wurden neu kompiliert!