[SERVICE] Die Questkontrolle

10/11/2018 00:22 MaLLaH95#12586
Ich will das der Mob im Chat angezeigt wird der getötet wurde...
nur leider habe ich wenig Erfahrung ....

HTML Code:
quest common_drops begin 
    state start begin 
       function ab()
            local drops = {
		{1,101},
                {2,102},
            }     
end
when kill begin
local mob = common_drops.ab()
for i = 1, table.getn(drops) do

if npc.get_race() == mob[i][2] then
chat(drops[i][2])

                end
            end 
        end
    end 
end
11/06/2018 20:40 .Gandalf#12587
Hallo EPVP Com

Vielleicht kann mir ja einer mit der folgenden Quest helfen. Es geht darum das die Level Up´s des Pferdes ab Pony zeitgesteuert sein soll (Pony 10 min Wartezeit, Kampfpferd 2h Wartezeit)

Beim ersten ausführen, reagiert die Quest wie sie soll, sie prüft ob die Bedingungen erfüllt sind und hebt das Level des Pferdes um 1. Beim 2ten klicken sollte eigentlich die Zeit die übrig ist gezeigt werden oder wenn die Zeit abgelaufen ist wieder geprüft werden ob alle Bedingungen erfüllt sind oder nicht und das Pferde Level wieder um 1 erhöht werden. Genau das macht die Quest aber nicht und "friert" stattdessen ein.

Vielen Dank schon mal für eure Hilfe.

PHP Code:
quest horse_guard begin
    state start begin
        when 20349.chat
.localeInfo.ponyUpgradeNPCchat begin
            
if game.get_event_flag("ponytimer") == 0 then
                say_title
(localeInfo.ponyUpgradeTitle)
                
say("")
                
say(localeInfo.ponyUpgrade_10)
                
say_reward(localeInfo.ponyUpgrade_20)
                
say("")
                
local s select(localeInfo.ponyUpgradeYeslocaleInfo.ponyUpgradeNo)
                    if 
== 1 then
                        
if horse.get_level() >= and horse.get_level() <= 9 then
                            
if pc.countitem("50050")>=1 then
                                pc
.removeitem("50050"1)
                                
horse.unride()
                                
horse.advance()
                                
horse.ride()
                                
game.set_event_flag("ponytimer",1)
                                
timer("ponytimer",600) -- Timer für 10 Minuten Wartezeit
                                say_title
(localeInfo.ponyUpgradeTitle)
                                
say(localeInfo.ponyUpgrade_30 ..(horse.get_level()).. localeInfo.ponyUpgrade_40)
                                
say("")
                            elseif 
pc.countitem("50050") < 1 then
                                say_title
(localeInfo.ponyUpgradeTitle)
                                
say("")
                                
say(localeInfo.ponyUpgrade_90)
                                
say("")
                            
end
                        
elseif horse.get_level() == 10 then
                            say_title
(localeInfo.ponyUpgradeTitle)
                            
say("")
                            
say(gameforge.ponyUpgrade_80)
                            
setstate(horseupgrade)
                        
end
                    
if == 2 then
                        
return
                    
end
            
else
                
say_title(localeInfo.ponyUpgradeTitle)
                
say("")
                
say(localeInfo.ponyUpgrade_60 ..timer("ponytimer")..localeInfo.ponyUpgrade_70)
            
end
        end
        end
        when ponytimer
.timer begin
            game
.set_event_flag("ponytimer"0)
        
end
    end
    state horseupgrade begin
        when 20349.chat
.localeInfo.ponyUpgradeNPCchat_2 begin
            
if  game.get_event_flag("horsetimer") == 0 then
                say_title
(localeInfo.ponyUpgradeTitle)
                
say("")
                
say(localeInfo.ponyUpgrade_100)
                
say_reward(localeInfo.ponyUpgrade_20)
                
say("")
                
local t select(localeInfo.ponyUpgradeYeslocaleInfo.ponyUpgradeNo)
                    if 
== 1 then
                        
if horse.get_level() >= 11 and horse.get_level() <= 19 then
                            
if pc.countitem("50050")>=1 then
                                pc
.removeitem("50050"1)
                                
horse.unride()
                                
horse.advance()
                                
horse.ride()
                                
game.set_event_flag("horsetimer",1)
                                
timer("horsetimer",7200) -- Timer für 1 Stunde Wartezeit
                                say_title
(localeInfo.ponyUpgradeTitle)
                                
say(localeInfo.ponyUpgrade_30 ..(horse.get_level()).. localeInfo.ponyUpgrade_40)
                                
say("")
                            elseif 
pc.countitem("50050") < 1 then
                                say_title
(localeInfo.ponyUpgradeTitle)
                                
say("")
                                
say(localeInfo.ponyUpgrade_90)
                                
say("")
                            
end
                        
elseif horse.get_level() == 20 then
                            say_title
(localeInfo.ponyUpgradeTitle)
                            
say("")
                            
say(gameforge.ponyUpgrade_110)
                            
setstate(complete)
                        
end
                    
elseif == 2 then
                        
return
                    
end
            
elseif game.get_event_flag("horsetimer") >= 1 then
                say_title
(localeInfo.ponyUpgradeTitle)
                
say("")
                
say(localeInfo.ponyUpgrade_60 ..timer("horsetimer")..localeInfo.ponyUpgrade_70)
            
end
        end
        when horsetimer
.timer begin
            game
.set_event_flag("horsetimer"0)
        
end
    end
    state complete begin
    end
end 
11/08/2018 08:14 MaxChri#12588
Quote:
Originally Posted by .Gandalf View Post
Hallo EPVP Com

Vielleicht kann mir ja einer mit der folgenden Quest helfen. Es geht darum das die Level Up´s des Pferdes ab Pony zeitgesteuert sein soll (Pony 10 min Wartezeit, Kampfpferd 2h Wartezeit)

Beim ersten ausführen, reagiert die Quest wie sie soll, sie prüft ob die Bedingungen erfüllt sind und hebt das Level des Pferdes um 1. Beim 2ten klicken sollte eigentlich die Zeit die übrig ist gezeigt werden oder wenn die Zeit abgelaufen ist wieder geprüft werden ob alle Bedingungen erfüllt sind oder nicht und das Pferde Level wieder um 1 erhöht werden. Genau das macht die Quest aber nicht und "friert" stattdessen ein.

Vielen Dank schon mal für eure Hilfe.

PHP Code:
quest horse_guard begin
    state start begin
        when 20349.chat
.localeInfo.ponyUpgradeNPCchat begin
            
if game.get_event_flag("ponytimer") == 0 then
                say_title
(localeInfo.ponyUpgradeTitle)
                
say("")
                
say(localeInfo.ponyUpgrade_10)
                
say_reward(localeInfo.ponyUpgrade_20)
                
say("")
                
local s select(localeInfo.ponyUpgradeYeslocaleInfo.ponyUpgradeNo)
                    if 
== 1 then
                        
if horse.get_level() >= and horse.get_level() <= 9 then
                            
if pc.countitem("50050")>=1 then
                                pc
.removeitem("50050"1)
                                
horse.unride()
                                
horse.advance()
                                
horse.ride()
                                
game.set_event_flag("ponytimer",1)
                                
timer("ponytimer",600) -- Timer für 10 Minuten Wartezeit
                                say_title
(localeInfo.ponyUpgradeTitle)
                                
say(localeInfo.ponyUpgrade_30 ..(horse.get_level()).. localeInfo.ponyUpgrade_40)
                                
say("")
                            elseif 
pc.countitem("50050") < 1 then
                                say_title
(localeInfo.ponyUpgradeTitle)
                                
say("")
                                
say(localeInfo.ponyUpgrade_90)
                                
say("")
                            
end
                        
elseif horse.get_level() == 10 then
                            say_title
(localeInfo.ponyUpgradeTitle)
                            
say("")
                            
say(gameforge.ponyUpgrade_80)
                            
setstate(horseupgrade)
                        
end
                    
if == 2 then
                        
return
                    
end
            
else
                
say_title(localeInfo.ponyUpgradeTitle)
                
say("")
                
say(localeInfo.ponyUpgrade_60 ..timer("ponytimer")..localeInfo.ponyUpgrade_70)
            
end
        end
        end
        when ponytimer
.timer begin
            game
.set_event_flag("ponytimer"0)
        
end
    end
    state horseupgrade begin
        when 20349.chat
.localeInfo.ponyUpgradeNPCchat_2 begin
            
if  game.get_event_flag("horsetimer") == 0 then
                say_title
(localeInfo.ponyUpgradeTitle)
                
say("")
                
say(localeInfo.ponyUpgrade_100)
                
say_reward(localeInfo.ponyUpgrade_20)
                
say("")
                
local t select(localeInfo.ponyUpgradeYeslocaleInfo.ponyUpgradeNo)
                    if 
== 1 then
                        
if horse.get_level() >= 11 and horse.get_level() <= 19 then
                            
if pc.countitem("50050")>=1 then
                                pc
.removeitem("50050"1)
                                
horse.unride()
                                
horse.advance()
                                
horse.ride()
                                
game.set_event_flag("horsetimer",1)
                                
timer("horsetimer",7200) -- Timer für 1 Stunde Wartezeit
                                say_title
(localeInfo.ponyUpgradeTitle)
                                
say(localeInfo.ponyUpgrade_30 ..(horse.get_level()).. localeInfo.ponyUpgrade_40)
                                
say("")
                            elseif 
pc.countitem("50050") < 1 then
                                say_title
(localeInfo.ponyUpgradeTitle)
                                
say("")
                                
say(localeInfo.ponyUpgrade_90)
                                
say("")
                            
end
                        
elseif horse.get_level() == 20 then
                            say_title
(localeInfo.ponyUpgradeTitle)
                            
say("")
                            
say(gameforge.ponyUpgrade_110)
                            
setstate(complete)
                        
end
                    
elseif == 2 then
                        
return
                    
end
            
elseif game.get_event_flag("horsetimer") >= 1 then
                say_title
(localeInfo.ponyUpgradeTitle)
                
say("")
                
say(localeInfo.ponyUpgrade_60 ..timer("horsetimer")..localeInfo.ponyUpgrade_70)
            
end
        end
        when horsetimer
.timer begin
            game
.set_event_flag("horsetimer"0)
        
end
    end
    state complete begin
    end
end 
Bitte verwende keine event flags (globale Ereignisse). Stattdessen werden hierbei quest flags genutzt (lokale Ereignisse).

Für Wartezeiten benutzt man:
next_time_set > setzt die delay
next_time_is_now > fragt ab, ob die delay abgelaufen ist

(Zu finden in der questlib)
11/08/2018 08:58 .Gandalf#12589
Quote:
Originally Posted by MaxChri View Post
Bitte verwende keine event flags (globale Ereignisse). Stattdessen werden hierbei quest flags genutzt (lokale Ereignisse).

Für Wartezeiten benutzt man:
next_time_set > setzt die delay
next_time_is_now > fragt ab, ob die delay abgelaufen ist

(Zu finden in der questlib)
Hallo,
vielen dank, das mit den Flags habe ich inzwischen auch gemerkt :) Er hat es zwar brav gesetzt und wie ich feststellen musste hat er es dann auch nach ablauf der Zeit umgeschrieben (die Flag wie gewünscht geändert) allerdings war das Global und somit für alle Player was dann ziemlich sinnlos war. :)
Ich teste das mal mit deiner Lösung, vielen Dank dafür.
11/11/2018 07:08 zizopi#12590
im having a problem while adding anti exp , when i use it im getting like 40 50 levels instead of losing exp .. anyone have a solution for it ?


HTML Code:
quest exp_curse begin
	state start begin
		when 70210.use begin
			pc.setqf("lastexp",pc.get_exp())
			syschat("You are under the curse of the goddess. You will gain no experience.")
			set_state(use)
		end
	end
	
	state use begin
		when 70210.use begin
			syschat("You lifted the curse of the goddess. You gain experience again.")
			set_state(start)
		end
		
		when login begin
			syschat("You are currently under the curse of the goddess and gain no experience.")
		end
		
		when kill or party_kill begin
			local current = pc.get_exp()
			local doll = pc.count_item(70210)
			if doll == 0 then
				syschat("The curse of the Goddess has lifted. You will gain Experience again.")
				set_state(start)
			end
			if current < pc.getqf("lastexp") then
				pc.setqf("lastexp",current)
			end
			if not npc.is_pc() then
				local dif = pc.get_exp()-pc.getqf("lastexp")
				pc.give_exp2(-dif)
			end
		end
	end
end
i dont think the problem comes from quest , i tried to change somethings in source but i dont know exactly from where the problem comes , so please if someone can help , thanks alot !
12/21/2018 17:22 akaschikibaba18denis#12591
Man gibt dem Stallburschen 1 PM und das Pferdelevel wird um 1 erhöht, bis pferdelvl 10 und 20, dann natürlich die pq.

Fehlertext: terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

quest horse_guard begin
state start begin
when 20349.chat."Pferdelevel steigern" begin
say_title("Stallbursche:")
say("")
say("Hallo!")
say("Bei mir kannst du dein Pferd steigern.")
say("Dafür brauche ich eine Pferdemedaille pro Level.")
say("")
say_reward("Möchtest du dein Pferd steigern?")
say("")

local s = select("Ja", "Nein")

if s == 1 then
say_title("Stallbursche:")
say("")
if pc.countitem("50050")>=1 then
pc.removeitem("50050", 1)
horse.unride()
horse.advance()
say("Dein Pferd hat nun Level "..(horse.get_level()).." erreicht.")
say("")
elseif horse.get_level()>=21 then
say("Dein Pferd hat das maximale Level erreicht!")
say("Du kannst es nicht mehr steigern.")
say("")
elseif horse.get_level()>=10 then
say("Es ist Zeit für ein besseres Pferd!")
say("Wenn du eine Pferdemedaille und ein paar Kollegen")
say("zum helfen hast, dann klick mich noch einmal an")
say("und beginne die Kampfgaulpferdeprüfung!")
say("")
elseif horse.get_level()>=20 then
say("Es ist Zeit für ein den Militärgaul!")
say("Wenn du eine Pferdemedaille und ein paar Kollegen")
say("zum helfen hast, dann klick mich noch einmal an")
say("und beginne die Militärgaulpferdeprüfung!")
say("")
elseif pc.countitem("50050")>=0 then
say("Dir fehlt eine Pferdemedaille um dein Pferdelevel zu steigern.")
say("Bringe mir das nächste mal eine mit und ich verbessere dein Pferd.")
say("")
end
elseif s == 2 then
return
end
01/31/2019 01:24 L1keZKorZ#12592
Hallo Leute,
ich hab noch nicht viel Ahnung vom Questen würd mich aber gerne weiterbilden.


Ich hab hier ein Starterset versucht zu erstellen doch nach dem eingeben
pyhton make.py

kommt diese Fehlermeldung


und hier meine Quest, wenn ihr so nett seit würde ich mich freuen wenn ihr da mal rüberschauen könnt. Danke :)

PHP Code:
quest give_basic_weapon begin 
    state start begin 
        when login begin with pc
.get_level() == 1 begin
            
if pc.is_gm() then
                say_title 
"Willkommen" )   
                
say "Willkommen auf dem Server NAME." )   
                
say "www.DeineHomepage.com" )  
                
say "Viel Spass!" )   
                
say "Wünscht dir dein NAME Team!" )  
                
say "[SA]ADMIN // [GM]Name [GM]Name2 [GM]Name3" )  
                
say "" )  
                
pc change_money "10000000" )  
                
pc give_item2 "71050" 200 )  
                
pc give_item2 "72702" )  
                
pc give_item2 "72724" )  
                
pc give_item2 "13009" 
                
pc give_item2 "14009" 
                
pc give_item2 "15009" 
                
pc give_item2 "16009" 
                
pc give_item2 "17009" 
                
pc give_item2 "70038" 200 
                
pc give_item2 "72723" 
                
pc give_item2 "72727" 
                
pc give_item2 "72701" 
                
pc give_item2 "50053" 
                
pc give_item2 "70007" )
                
pc give_item2 "72728" )
                
horse set_level "21" )
                
horse advance ( )  
                
pc give_item2 "50053" )
                
say_reward "Du wurdest level 1." )   
                
say_reward "Du erhielst 10.000.000 yang." )  
                
say_reward "Du erhielst Elixier der Sonne(M)." )   
                
say_reward "Du erhielst Elixier des Mondes(M)." )   
                
say_reward "Du erhielst Items fur Laufgeschwindigkeit." )   
                
say_reward "Du erhielst ein Gaul Level 21." )
            if 
pc job == 0 then  
                pc 
give_item2 "12209" )  
                
pc give_item2 "11209" )  
                
pc give_item2 "19" )  
                
say_reward "Der Drachengott hat dich belohnt!" )  
                
say_reward "Du hast nun die Kraft der Krieger!" )  
        elseif 
pc job == 1 then   
                pc 
give_item2 "12349" )  
                
pc give_item2 "8000" 200 )
                
pc give_item2 "1009" )  
                
pc give_item2 "2009" )  
                
say_reward "Der Drachengott hat dich belohnt!" )  
                
say_reward "Du hast nun die Kraft der Ninja!" )  
        elseif 
pc job == 2 then   
                pc 
give_item2 "12489" )    
                
pc give_item2 "11609" )  
                
pc give_item2 "19" )  
                
say_reward "Der Drachengott hat dich belohnt!" )  
                
say_reward "Du hast nun die Kraft der Sura!" )  
        elseif 
pc job == 3 then   
                pc 
give_item2 "12629" )  
                
pc give_item2 "11809" )  
                
pc give_item2 "7009" )
                
say_reward "Der Drachengott hat dich belohnt!" )  
                
say_reward "Du hast nun die Kraft der Schamanen!" )
            
end
        end
    end
end 
Mfg L1keZKorZ
02/02/2019 23:37 MrPlayboy#12593
@[Only registered and activated users can see links. Click Here To Register...]

Etwas spät, aber wenn du den fix noch brauchst:

Über "if pc . job == 0 then" muss ein end hin.
02/06/2019 15:50 MrSIB#12594
removed
02/08/2019 23:40 rollback#12595
Quote:
Originally Posted by Partelx View Post
PHP Code:
quest newrun begin
    state start begin
        when 20409.chat
."Test-Run" begin
            say_title
("Wächter des TEEEST:")
            if 
pc.get_level()<130 then 
                say
("Dein Level ist zu niedrig.."
                
say("Mindestlevel: 130"
                return 
            
end 
                say
("Soll ich dich in den Test-Run porten?")
                
local s=select("Ja""Nein"
                
d.join(3547786555783)
                
d.setf("devillevel"1)
                
set_state(inrun)
            if 
s==2 then
                
return
            
end
        end
    end

    state inrun begin
        when login with pc
.get_map_index()==354 begin
            chat
("Zerstöre das Test-Metin, um die 1. Ebene")
            
chat("zu erreichen!")
            
d.spawn_mob(805680220)
            if 
party.is_leader() then
            d
.set_regen_file("data/dungeon/new_dungeon/npc.txt")
            
end
        end
    end
end 
beim compilen zeigt der kein fehler an, jedoch wenn ich den run betrete spawnt weder "8056" noch die regen file

EDIT: immer noch keine lösung gefunden
Dungeons haben nicht den Mapindex der Map, sondern einen zufälligen (bzw. den ersten freien) Mapindex in der Range
Code:
<mapindex>*10000 - <mapindex>*10000+9999
In deinem Fall also:
3540000-3549999

Du musst also deine Bedingung so umschreiben:
Code:
... with pc.get_map_index() >= 3540000 and pc.get_map_index() < 3550000
Ich würde dir außerdem empfehlen in Dungeon Quests nicht mit states zu arbeiten (wenn der Server aus irgendeinem Grund crasht während der Spieler im Dungeon ist, hängt der Spieler in der state fest - das kann man natürlich auch noch mit einem Trigger abfangen und den Spieler wieder in state start packen, machts aber nur unnötig kompliziert).
03/06/2019 12:14 .Kornet#12596
quest antiexp begin
state start begin
when login begin
if pc.getqf("antiexp") == 1 then
pc.block_exp()
chat("Anti EXP ist noch aktiviert")
end
end
when letter begin
cmdchat("AntiEXP "..q.getcurrentquestindex())
end
when button or info begin
if pc.getqf("antiexp") == 0 then
pc.block_exp()
pc.setqf("antiexp", 1)
chat("Anti EXP wurde aktiviert.")
elseif pc.getqf("antiexp") == 1 then
pc.unblock_exp()
pc.setqf("antiexp", 0)
chat("Anti EXP wurde deaktiviert.")
end
end
end
end

brauche dringend hilfe bitte????

Mfg Kornet
03/26/2019 12:56 mogianer#12597
Hallo Leute,

Ich suche einen Befehl der testet, ob der Spieler gestorben ist.

Für folgende Quest:


Das ist meine erste Quest und ich bin für alle Hinweise dankbar!
03/28/2019 16:38 mogianer#12598
Hey Leute,

Falls sich doch nochmal jemand der Kontrolle annimmt habe ich folgende Frage.
Ich habe eine simple Quest geschrieben, um die Drops der Metins anzupassen und zu testen, wie dass funktioniert.
Während der Shinshoofelsen (8020) genau die Drops gibt, die er geben soll,
dropt der Metin des Mordes (8019) überhaupt nix. Dabei nutze ich die selben Befehle.
Wo liegt mein fehler?

Code:
04/04/2019 16:12 MaxChri#12599
Quote:
Originally Posted by mogianer View Post
Hey Leute,

Falls sich doch nochmal jemand der Kontrolle annimmt habe ich folgende Frage.
Ich habe eine simple Quest geschrieben, um die Drops der Metins anzupassen und zu testen, wie dass funktioniert.
Während der Shinshoofelsen (8020) genau die Drops gibt, die er geben soll,
dropt der Metin des Mordes (8019) überhaupt nix. Dabei nutze ich die selben Befehle.
Wo liegt mein fehler?

Code:
Drops sollte man grundsätzlich nur in den dazu vorgesehenen Systemen einstellen. Quests sind hierfür nicht gedacht und bereiten später ggf. Schwierigkeiten und Probleme.

Vielleicht hilft dir folgendes Thema:
[Only registered and activated users can see links. Click Here To Register...]
04/12/2019 00:54 Brainsick™#12600
Hallo, ich habe mir eine Quest erstellt, wenn man Level 10 ist, die Option hat zwischen 3 Pets zu entscheiden. Die Quest funktioniert soweit, nur wenn ich dann das Siegel bekomme, kann ich keine Pets mehr aufrufen (erscheinen nicht), egal welche.

Code:
quest pet begin
	state start begin
		when levelup with pc.get_level() == 10 begin
			set_state(info)
		end
	end
	
	state info begin
		when letter begin
			send_letter("Dein Begleiter")
			local v = find_npc_by_vnum(20369)
			if v != 0 then
				target.vid("__TARGET__", v, mob_name(20369))
			end
		end
		
		when info or button begin
			say_title("Hallo "..pc.get_name().."")
			say("")
			say("Du hast dich tapfer bis Level 10")
			say("gekämpft. Nun bekommst du vom Offizier")
			say("eine Belohnung, die du dir auch verdient hast!")
			say("")
			say("Das Adamantia-Team wünscht dir weiterhin viel Spaß.")
			say_reward("Du kannst nun deine Belohnung beim Offizier abholen.")
		end
		
		when __TARGET__.target.click or 20369.click begin
			target.delete("__TARGET__")
			say_title(mob_name(20369)..":")
			say("")
			say("Sei gegrüsst "..pc.get_name().."!")
			say_title("Ich soll dir was schenken?")
			say("Nun ja, dann muss ich dir wohl was schenken. Du hast")
			say("es dir auch verdient. Allerdings kannst du nur ein")
			say("Item auswählen. Du kannst dich zwischen 3 Items")
			say("entscheiden. Die Items die du bekommen kannst,")
			say("werden dir bei der Auswahl beschrieben.")
			say_reward("Wähle ein Item aus")
			say("")
			local pet = select("Feuerphönix +500 TP", "Rufus +30 AW", "Leonidas +5% Monster")
			if pet == 1 then
				pc.give_item2(53001, 1)
			elseif pet == 2 then
				pc.give_item2(53006, 1)
			elseif pet == 3 then
				pc.give_item2(53010, 1)
			end
			set_state(info)
		end
	end
end
Ich finde den Fehler nicht, hoffe jemand kann mir hierbei helfen.