[SERVICE] Die Questerstellung

10/11/2015 20:31 .HypnoToad#3211
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 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.
wie mache ich das die Quest links angezeigt wird und ich sie nicht immer wieder wiederholen kann?
10/12/2015 12:02 nostradame37#3212
Halloolleeeee kann mir bitte jemand an der quest einen timer auf die qf setzen von 3 tage ? also das die premium_user nach 3 tagen ableuft ?

PHP Code:
quest premium_user begin
    state start begin
        when login with pc
.getqf("premium_user")==and not npc.is_pc() begin
        end
        when 70010.
use with pc.getqf("premium_user")==0 begin
            say_title
("Premium-Item ")
            
say("")
            
say("Με αυτό το αντικείμενο μπόρις να ενεργοποίησης ")
            
say("Τις δύναμης Premium αποχτάς το προνόμιο ")
            
say("του VIP χρηστη αυτό σημαίνει ότι παίρνεις ")
            
say("πάνω από το κεφάλι σου και παράλληλα αποχτάς ")
            
say("το προνόμιο τις χρήσης του VIP shop μας ")
            
say("")
            
say_title("Θέλεις να ενεργοποίησης το προνόμιο αυτό? ")
            
            
local s select("ΝΑΙ ""ΟΧΙ ")
                
            if 
== 1 then
                pc
.remove_item(700101)
                
pc.setqf("premium_user"1)
                
            else
                return
            
end
        end
    end
end 
zu beachten ist das ein premium shop diese abfrage macht und dem user den shop oefnet wen er premium_user ist. dank im voraus :)
10/12/2015 12:42 rollback#3213
Quote:
Originally Posted by nostradame37 View Post
Halloolleeeee kann mir bitte jemand an der quest einen timer auf die qf setzen von 3 tage ? also das die premium_user nach 3 tagen ableuft ?

PHP Code:
quest premium_user begin
    state start begin
        when login with pc
.getqf("premium_user")==and not npc.is_pc() begin
        end
        when 70010.
use with pc.getqf("premium_user")==0 begin
            say_title
("Premium-Item ")
            
say("")
            
say("Με αυτό το αντικείμενο μπόρις να ενεργοποίησης ")
            
say("Τις δύναμης Premium αποχτάς το προνόμιο ")
            
say("του VIP χρηστη αυτό σημαίνει ότι παίρνεις ")
            
say("πάνω από το κεφάλι σου και παράλληλα αποχτάς ")
            
say("το προνόμιο τις χρήσης του VIP shop μας ")
            
say("")
            
say_title("Θέλεις να ενεργοποίησης το προνόμιο αυτό? ")
            
            
local s select("ΝΑΙ ""ΟΧΙ ")
                
            if 
== 1 then
                pc
.remove_item(700101)
                
pc.setqf("premium_user"1)
                
            else
                return
            
end
        end
    end
end 
zu beachten ist das ein premium shop diese abfrage macht und dem user den shop oefnet wen er premium_user ist. dank im voraus :)
Code:
quest premium_user begin
	state start begin
		when 70010.use with pc.getqf("premium_user") - get_time() < 0 begin
			say_title("Premium-Item ")
			say("")
			say("?e a?t? t? a?t??e?µe?? µp???? ?a e?e???p???s?? ")
			say("??? d??aµ?? Premium ap??t?? t? p????µ?? ")
			say("t?? VIP ???st? a?t? s?µa??e? ?t? pa???e?? ")
			say("p??? ap? t? ?ef??? s?? ?a? pa??????a ap??t?? ")
			say("t? p????µ?? t?? ???s?? t?? VIP shop µa? ")
			say("")
			say_title("T??e?? ?a e?e???p???s?? t? p????µ?? a?t?? ")
		
			if select("??? ", "??? ") == 2 then return end
			
			pc.remove_item(70010, 1)
			pc.setqf("premium_user", get_time() + 60*60*24*3)
		end
	end
end
In deiner Shopquest musst du folgende Abfrage:
Code:
pc.getqf("premium_user") == 1
in folgende ändern:
Code:
pc.getqf("premium_user") - get_time() > 0
10/14/2015 19:23 .HypnoToad#3214
Kann mir jemand eine Quest schreiben die man ab level 25 bekommt und bei der man
70254,
70253,
70252,
70251
besitzen muss.
Und wenn man diese items hat zwischen 1k tp 25aw 50def wählen kann?

Wäre so ähnlich wie eine Biologen Quest aber ich brauche die Quest links bei den Questrollen und nicht beim Biologen.
10/14/2015 20:16 ℜyzє#3215
Quote:
Originally Posted by .HypnoToad View Post
Kann mir jemand eine Quest schreiben die man ab level 25 bekommt und bei der man
70254,
70253,
70252,
70251
besitzen muss.
Und wenn man diese items hat zwischen 1k tp 25aw 50def wählen kann?

Wäre so ähnlich wie eine Biologen Quest aber ich brauche die Quest links bei den Questrollen und nicht beim Biologen.
10/14/2015 22:37 •••Seyo92•••#3216
Kann mir jemand eine quest schreiben damit mit ab lvl 15 eine quest kommt :
lvl 15 töte Schwarzbär 5x und damit er dan zum achlemist laufen muss und 500tp 25aw
lvl 30 töte Schwarzwindsoldat 15x und damit er dann zum achlemist laufen muss und 1k tp 50aw bekommt
lvl 45töte Klauengiftspinne 20x und damit er dann zum achlemist laufen muss und 1k tp 50aw bekommt
lvl 60 töte Tödliche Giftspinne 50x und damit er dann zum achlemist laufen muss und 1k tp 10aw bekommt
lvl 80 töte Brutale Klauengiftspinne 100x 50x und damit er dann zum achlemist laufen muss und 1k tp 25aw bekommt
lvl 105 töte Beran-Setaou 1x und damit er dann zum achlemist laufen muss und 1k tp 50aw bekommt
10/15/2015 07:24 #VerkaufbyMe#3217
Suche eine Quest, die auf einem bestimmen Map-Index die Kills aller Spieler zusammen zählt ( Für jedes Reich.)
Und jede 2 Stunden kündigt sie automatisch per /n an welches Reich am meisten Tötungen hat.
10/15/2015 07:52 .Ares´#3218
Nach dem ersten login, sollte eine quest auftauchen (links die questrolle) wenn man halt drauf klick sollte stehen "Sind deine Tapferkeitsumhänge leer? Wenn ja dann bekommst du von mir 200 Neue von mir Klick einfach auf "OK" oder "Abbrechen" wenn du keine möchtest.
10/15/2015 14:58 •••Seyo92•••#3219
Kann mir jemand eine quest schreiben damit mit ab lvl 15 eine quest kommt :
lvl 15 töte Schwarzbär 5x und damit er dan zum achlemist laufen muss und 500tp 25aw
lvl 30 töte Schwarzwindsoldat 15x und damit er dann zum achlemist laufen muss und 1k tp 50aw bekommt
lvl 45töte Klauengiftspinne 20x und damit er dann zum achlemist laufen muss und 1k tp 50aw bekommt
lvl 60 töte Tödliche Giftspinne 50x und damit er dann zum achlemist laufen muss und 1k tp 10aw bekommt
lvl 80 töte Brutale Klauengiftspinne 100x 50x und damit er dann zum achlemist laufen muss und 1k tp 25aw bekommt
lvl 105 töte Beran-Setaou 1x und damit er dann zum achlemist laufen muss und 1k tp 50aw bekommt
10/16/2015 20:36 Aze /..#3220
Moinsen ^^

Wäre einer so freundlich und könnte mir diese Sache:
Code:
function set_warn(id)
            mysql_query("update account.account set warn = warn + 1 where id = "..id..";")
        end

if verwarn_system.get_warn(get_id) == qry[verwarn_system.get_warn(get_id)][1] then
                mysql_query("UPDATE account.account SET availDt = NOW() + INTERVAL "..qry[verwarn_system.get_warn(get_id)][2].." HOUR WHERE id = "..get_id..";")
                verwarn_system.exit_player(name)
            end
            if verwarn_system.get_warn(get_id) == 10 then
                mysql_query("update account.account set status = 'BLOCK' where id = "..get_id..";")
                verwarn_system.exit_player(name)
            end
--> Hier einbauen?
Code:
quest verwarn_system begin
    state start begin
        function get_warn(id)
            return tonumber(mysql_query("SELECT warn FROM account.account WHERE id = "..string.format("%d", id)..";").warn[1])
        end
        
        function set_warn(id)
            mysql_query("update account.account set warn = warn + 1 where id = "..id..";")
        end
        
        function warn_log(id, name, grund, teamler)
            mysql_query("insert into log.warn_log values("..tonumber(id)..",'"..name.."','"..grund.."','"..teamler.."');")
        end
        
        function exit_player(name)
            local player = pc.select(name)
            cmdchat("exit")
            pc.select(player)
        end
        
        when 9009.chat."Verwarn-System" with pc.is_gm() begin
            say_title("Verwarn-System[ENTER]")
            say("Was möchtest du machen?")
            if select("Spieler Verwarnen","Abbruch") == 2 then return end
            say_title("Verwarn-System[ENTER]")
            say("Wenn möchtest du verwarnen?")
            local name = input()
            local f_name = find_pc_by_name(name)
            if name == pc.get_name() then
                say_title("Verwarn-System[ENTER]")
                say("Du kannst dich nicht selber verwarnen.")
                return
            elseif not f_name or f_name == 0 then
                say_title("Verwarn-System[ENTER]")
                say("Fehler!")
                return
            end
            local sel = pc.select(f_name)
            local get_name = pc.get_name()
            local get_id = pc.get_account_id()
            pc.select(sel)
            local myname = pc.get_name()
            local qry = {
                [3] = {3,3},        --- 2te Zahl ist die Stunden Bann Zeit
                [5] = {5,24},        --- 2te Zahl ist die Stunden Bann Zeit
                [7] = {7,72},        --- 2te Zahl ist die Stunden Bann Zeit
            }
            say_title("Verwarn-System[ENTER]")
            say("Spieler: "..get_name)
            say("Account ID: "..get_id)
            say("Verwarnungen: "..verwarn_system.get_warn(get_id))
            if select("Verwarnen","Abbruch") == 2 then return end
            say_title("Verwarn-System[ENTER]")
            say("Grund für die Verwarnung:")
            local gru = tostring(input())
            if type(gru) ~= "string" or gru == nil then say_title("Verwarn-System[ENTER]") say("Du musst einen Fehler gemacht haben.") return end
            verwarn_system.warn_log(get_id, get_name, gru, myname)
            verwarn_system.set_warn(get_id)
            local x = pc.select(f_name)
            chat("Du hast einen Verwarnpunkt erhalten. Bitte halte dich an die Regeln!")
            pc.select(x)
            syschat("Der Spieler hat erfolgreich eine Verwarnung erhalten.")
            if verwarn_system.get_warn(get_id) == qry[verwarn_system.get_warn(get_id)][1] then
                mysql_query("UPDATE account.account SET availDt = NOW() + INTERVAL "..qry[verwarn_system.get_warn(get_id)][2].." HOUR WHERE id = "..get_id..";")
                verwarn_system.exit_player(f_name)
            end
            if verwarn_system.get_warn(get_id) == 10 then
                mysql_query("update account.account set status = 'BLOCK' where id = "..get_id..";")
                verwarn_system.exit_player(f_name)
            end
        end
    end
end
Es ist das Verwarnsystem von QuickFlameZ, nur würde ich gerne auch die Leute wieder entbannen können.
10/16/2015 21:31 [Flash]#3221
Ich bekomme keine Bonuse beim rufen der pets

PHP Code:
quest pet_system begin
    state start begin
        
function get_pet_info(itemVnum)
            
pet_info_map = {
            --  [
ITEM VNUMMOB_VNUM, DEFAULT NAMEbuff_idxspawn_effect_idx
                
[53001]     = { 20120"'s Feuerphönix"0},
                [
53002]     = { 20126"'s Bambi"0},
                [
53003]     = { 20123"'s Eisphöix"0},
                [
53005]     = { 20129"'s Baby Azrael"0},
                [
53006]     = { 20132"'s Hund"0},
            }

            
itemVnum tonumber(itemVnum)

            return 
pet_info_map[itemVnum]
        
end
        
function get_spawn_effect_file(idx)
            
effect_table = {
                [
0] = nil,
                [
1] = "d:\\\\ymir work\\\\effect\\\\etc\\\\appear_die\\\\npc2_appear.mse",
            }
            return 
effect_table [idx]
        
end
        when 53001.
use or 53002.use or 53003.use or 53005.use or 53006.use begin
            local pet_info 
pet_system.get_pet_info(item.vnum)

            if 
null != pet_info then

                local mobVnum 
pet_info[1]
                
local petName pet_info[2]
                
local spawn_effect_file_name pet_system.get_spawn_effect_file(pet_info[3])

                if 
true == pet.is_summon(mobVnumthen
                    
if spawn_effect_file_name != nil then
                        pet
.spawn_effect (mobVnumspawn_effect_file_name)
                    
end
                    pet
.unsummon(mobVnum)
                    
affect.remove_collect(apply.ATTBONUS_UNDEAD10060*60*8)
                    
affect.remove_collect(apply.ATT_MAX_HP1220060*60*8)
              
syschat("Du hast dein Haustier weggeschickt.")
                else
                    if 
pet.count_summoned() < 1 then
                        affect
.add_collect(apply.add_collect4060*60*8)
                        
affect.add_collect(apply.ATT_MAX_HP1220060*60*8)
                        
pet.summon(mobVnumpetNamefalse)
               
syschat("Du hast dein Haustier erfolgreich gerufen.")
                    else
                        
syschat("Du hast schon ein Haustier gerufen.")
                    
end
                    
if spawn_effect_file_name != nil then
                        pet
.spawn_effect(mobVnumspawn_effect_file_name)
                    
end
                end 
-- if pet.is_summon
            end  
-- if null != pet_info
        end 
-- when
    end 
-- state
end 
-- quest 
10/18/2015 13:57 ライト#3222
#Edit erledigt!
10/18/2015 21:21 Drαεth#3223
Hei ich suche eine Quest wo man einen Event Point erstellt für alle User...

Sprich: Eine Quest rolle erscheint für den User und man wird zum gewählten Punkt teleportiert.

Den Punkt setzt man indem man einfach als GM die Quest aktiviert . D.h wo die Quest aktiviert wurde ist der Event Point...


Hoffe ihr könnt das verstehen :0
Bitte per PN danke. :)
10/23/2015 21:48 .Ares´#3224
hallo brauche eine quest wo ich das item 71114 tauschen kann gegen das item 71115 aber dafür sollte man 100x 30203 brauchen!
10/23/2015 21:49 °Ace°#3225
Kann mir einer eine Quest schreiben, wo man aus einer Truhe mehrere Items kriegt, mit der Anzahl. Und sobald man die Truhe gestapelt hat, auch alle einzeln aufmachen kann. So das nicht alle Truhen verschwinden mit einem Klick.