[SERVICE] Die Questerstellung

10/04/2015 23:12 ItChino#3196
@ sensi kannst du mir dann dabei helfen um diese Funktion hin zu bekommen
10/05/2015 12:37 .Various#3197
Quote:
Originally Posted by Red Firestar View Post
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.
Code:
quest item_info begin
    state start begin
        when ITEM_ID.use begin
            say_title("Itembeschreibung")
            say("Blablalbbla")
            say("Blubblublbub")
            say("usw?")
         end
    end
end
10/05/2015 16:37 Red Firestar#3198
Quote:
Originally Posted by .Various View Post
Code:
quest item_info begin
    state start begin
        when ITEM_ID.use begin
            say_title("Itembeschreibung")
            say("Blablalbbla")
            say("Blubblublbub")
            say("usw?")
         end
    end
end
Kommt dort auch nach dem Text ein Button oder Text, womit man dieses Feld zu machen kann?
10/05/2015 23:07 ItChino#3199
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
10/05/2015 23:37 rollback#3200
Quote:
Originally Posted by ItChino View Post
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
Code:
--[[
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
10/07/2015 14:50 Red Firestar#3201
Guten Tag ich bräuchte eine, kleine Quest es wäre sehr nett, wenn sie mir jemand erstellen könnte.

1. Quest
10/07/2015 21:50 rollback#3202
Quote:
Originally Posted by Red Firestar View Post
2. Quest
Code:
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
10/08/2015 14:52 I´m Raylee#3203
Hi liebe EPVP-Community! :)

Bräuchte eine Quest, die ab dem ersten Login die Bewegungsgeschwindigkeit auf 60 setzt! :)
10/08/2015 21:33 Nick#3204
Quote:
Originally Posted by I´m Raylee View Post
Hi liebe EPVP-Community! :)

Bräuchte eine Quest, die ab dem ersten Login die Bewegungsgeschwindigkeit auf 60 setzt! :)
Ich gehe mal von einer zusätzlichen Bewegungsgeschwindigkeit von 60 aus, dies wird aus deiner Beschreibung nicht unbedingt deutlich.

Code:
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
Würde ich persönlich nicht separieren, sondern beim Starterset mit einbringen. Bitte beachte, dass das Ausführen von /reload q in einer Live-Umgebung unschöne Folgen haben kann.

lg
10/09/2015 20:37 Kampfzwerg!#3205
Hallo liebe leute
ich bräuchte eine Quest von euch mit folgenden inhalt...
wäre nice wen die mir jemand erstellen könnte. :)

man klickt einen npc an der das lvl 90 checkt. ist man nicht 90
wird man nicht hineingeportet.
wenn man 90 ist wird man zu kordinaten 99999 88888 und map index 77
geportet. dann sollte ein Boss spawnen mit der ID 6666.
wenn er tot ist wir man nach ca 20 sekunden rausgeportet. das war es eigentlich schon.
es wäre toll wen sich die spieler nicht treffen würden
sondern immer ein boss alleine haben.
vielen dank euch!

schöne grüße

Kampfzwerg
10/11/2015 00:15 Sogma#3206
Hallo,

ich habe mich mal an einer Dungeonquest versucht, es aber nicht so hinbekommen wie es soll.

Infos:

- Ich habe einen Inselrun geplant, es gibt 28 Inseln.
- Der Dungeon soll nur für Gruppen mit mind. 2 Mitgliedern funktionieren
- Auf der ersten Insel soll noch nichts passieren, es gibt Shops und man hat eine Minute Zeit sich vorzubereiten.
- Auf den anderen Inseln sollen Monsterwellen und Metinsteine abwechselnd getötet werden.
- Insel 28 ist die Bossinsel, nachdem der Boss getötet wurde kann man über einen NPC die Map verlassen.


Wenn sich dem jemand annehmen würde wäre ich sehr dankbar. Es würde ein Dummy reichen, Koordinaten und Metin ID's habe ich ja. Wohin die wave.txt's kommen weiß ich auch. Die Stellen dann bitte möglichst mit XXX oder aussagekräftigen spacern füllen.

Vielen Dank! Super Service!
10/11/2015 01:53 ライト#3207
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.
10/11/2015 03:30 rollback#3208
Quote:
Originally Posted by Kirito' View Post
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.
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
Das was oben als Kommentar steht muss in die questlib.lua
Ausserdem muss folgendes in die quest_functions (damit es keine compilefehler gibt):
Code:
formatBoni
ipairs
unpack
func
Die vnum vom Hauptmann musst du noch anpassen.
10/11/2015 06:14 ライト#3209
Quote:
Originally Posted by Seחsi View Post
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 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
Das was oben als Kommentar steht muss in die questlib.lua
Ausserdem muss folgendes in die quest_functions (damit es keine compilefehler gibt):
Code:
formatBoni
ipairs
unpack
Die vnum vom Hauptmann musst du noch anpassen.
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!
10/11/2015 14:29 rollback#3210
Quote:
Originally Posted by Kirito' View Post
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!
Bei der Funktion SayList habe ich bei der schleife das "do" vergessen. Einfach da hinschreiben wie es bei den anderen Funktionen auch ist