Quest fehler, brauche hilfe

02/08/2015 11:02 timonick#1
hay,

ich hab meine Eigene Quest geschrieben, eine Art Bossrun. Aber ich hab da 2 Fehler. 1. Ich weiß nicht wie ich einstelle das man alle 3 Metinsteine töten muss, bevor es weiter geht. Wenn alle down sind, passiert einfach nichts. Und auserdem klappt bei mir dieser d.new_jump_all befehl nicht, ich werde nur mit d.join geportet. Hat da jemand ne lösung?

quest bossrun begin
state start begin
when 20090.chat."Bossrun" begin
say_title("Bossrun")
say("Dieser Run ist richtig schwer")
say("Traust du dich?")
local s = select("Betreten", "Abbrechen")
if s== 1 then
pc.warp(855000, 1200)
end
end
when 20001.chat."Was willst du?" begin
say_title("Bossrun")
say("Denkst du echt du könntest")
say("unsere besten Bosse erlegen?")
say("")
say("erbärmlich, viel spaß beim Sterben!")
npc.kill(20001)
mob.spawn(8032, 150, 150, 1)
end
when 8032.kill with pc.get_map_index() == 112 begin
d.join(112, 855000, 1200)
d.regen_file("data/dungeon/Bossrun/br1.txt")
end
when 3591.kill begin
notice("Ihr habt den ersten Boss geschafft!")
notice("Aber der zweite wird viel schwerer!")
timer("br2", 6)
end
when br2.timer begin
d.regen_file("data/dungeon/Bossrun/br2.txt")
end
when 2684.kill begin
notice("Woow, du hast einen sehr starken")
notice("Verteidiger von uns umgelegt!! Respekt !!")
timer("br3", 6)
end
when br3.timer begin
d.regen_file("data/dungeon/Bossrun/br3.txt")
end
when 3691.kill begin
notice("Du scheinst stärker zu sein, als ich Gedacht")
notice("habe!! Aber lebend wirst du hier eh nicht rauskommen!")
timer("metinebene", 6)
end
when metinebene.timer begin
d.regen_file("data/dungeon/Bossrun/metinebene.txt")
q.set_counter("Verbleibend", 4)
end
when 8033.kill begin
local count = pc.getqf("state") + 1
end
when 8034.kill begin
local count = pc.getqf("state") + 1
end
when 8035.kill begin
local count = pc.getqf("state") + 1
if count <= 4 then
pc.setqf("state", count)
q.set_counter("state", count)
end
if count == 0 then
timer("br4", 6)
end
end
when br4.timer begin
d.regen_file("data/dungeon/Bossrun/br4.txt")
end
when 3491.kill begin
notice("Du scheinst stärker zu sein, als ich Gedacht")
notice("habe!! Aber lebend wirst du hier eh nicht rauskommen!")
end
end
end
02/08/2015 12:24 Dyshaxo#2
Parameter:

d.new_jump_all(index, x, y) -> der Befehl wird gerne mal Missinterpretiert.

In Dungeons - Prinzipiell mit Dungeon-Flags arbeiten -> Streich das ganze "pc.setqf" raus, und mach daraus "d.setf" und "d.getf".

Dann - musst du die Flags nicht Zwangsläufig in 'ner Variable zwischenspeichern, globale Variabeln machen in .quest-files sowieso immer nur tucken.

Wenn du dir was abschauen willst kann ich dir hier als Beispiel meinen Bossrun geben:

Code:
quest the_abyss begin
	state start begin
		
		when login with pc.in_dungeon() and mapidproof(304) begin
			if party.is_leader() or pc.is_gm() then
				d.spawn_mob_dir(40001, 210, 26, 2)
				d.set_unique("boss", d.spawn_mob(8054, 126, 148))
				d.notice("Macht euch bereit zum Kampf!")
			end
			d.setf("a_boss", 0)
			d.setf("healstone", 0)
			d.setf("Defstone", 0)
			d.setf("complete", 0)
			bosslist = {6005, 6008, 6003, 6002, 2291}
		end
		
		when kill with pc.in_dungeon() and mapidproof(304) begin
			if d.is_unique_dead("boss") then
				if d.getf("a_boss") < 5 then
					cleartimer("stone")
					d.kill_all()
					d.setf("a_boss", d.getf("a_boss") + 1)
					d.setf("healstone", 4)
					d.setf("Defstone", 2)
					d.regen_file("data/dungeon/abyss/abyss_stone_regen.txt")
					d.set_unique("boss", d.spawn_mob(bosslist[d.getf("a_boss")], 127, 147))
					d.unique_set_maxhp("boss", 100000)
					d.unique_set_hp("boss", 100000)
					d.unique_set_def_grade("boss", d.getf("Defstone") * 200)
					loop_timer("stone", 1)
				else
					d.kill_all()
					d.notice("Instance Dungeon abgeschlossen!")
					d.notice("Die Herausforderungen des Abgrunds wurden Überstanden!")
					d.notice("Sprecht mit Rezeena um eure Belohnung zu erhalten.")
					d.spawn_mob_dir(40001, 129, 152, 1)
					d.setf("complete", 1)
				end
			end
		end
		
		when 8010.kill with pc.in_dungeon() and mapidproof(304) begin
			d.setf("healstone", d.getf("healstone") - 1)
			d.notice("Ein Heilstein wurde zerstört!")
		end
		
		when 11510.kill with pc.in_dungeon() and mapidproof(304) begin
			d.unique_set_hp("boss", (d.unique_get_hp_perc("boss") * 1000) - 25000)
			d.notice("Das Feuer der Lebenskraft ist erloschen!")
			d.notice("Das Bossmonster erhält großen Schaden!")
		end
		
		when 8008.kill with pc.in_dungeon() and mapidproof(304) begin
			d.setf("Defstone", d.getf("Defstone") - 1)
			d.unique_set_def_grade("boss", d.getf("Defstone") * 200)
			d.notice("Die Verteidigung des Bossmonsters wurde geschwächt!")
		end
		
		when stone.timer with pc.in_dungeon() and mapidproof(304) begin
			d.unique_set_hp("boss", (d.unique_get_hp_perc("boss") * 1000) + (d.getf("healstone") * 1000))
		end
		
		--#desc
		when 40001.chat. "Was erwartet mich?" with pc.in_dungeon() and mapidproof(304) and d.getf("complete") == 0 begin
			say_title("Rezeena")
			say()
			say("Dies ist der Abgrund.")
			say("Vor dir liegt eine Kampfarena.")
			say("In dieser Arena wirst du auf starke")
			say("Gegner treffen.")
			say("Besiege alle Gegner in einem Stück, um")
			say("den Kampf zu gewinnen.")
			say("Während des Kampfes spawnen verschiedene")
			say("Seelen, welche den Kampf beeinflussen.")
			say("Entwerft eine Strategie, um die Instance")
			say("erfolgreich zu beenden.")
		end
		--#endofdesc
		
		--leave--
		
		when 40001.chat. "Den Abgrund verlassen" with pc.in_dungeon() and mapidproof(304) and d.getf("complete") == 1 begin
			say_title("Den Abgrund verlassen")
			say("")
			say("Deine Party hat alle Monster")
			say("des Abgrunds vernichtet.")
			say_reward("Zur Belohnung erhälst du:")
			say_reward("Blablabla")
			say_reward("Blablabla")
			say_reward("Blablabla")
			wait()
			--belohnung Einfügen--
			d.exit()
		end
	end
end
Code:
function mapidproof(index)
	if index >= pc.get_map_index() * 10000 and pc.get_map_index() < ((index + 1) * 10000) then
		return true
	else
		return false
	end
end
Beim Dungeon-Erstellen unbedingt darauf achten:
- Niemals mehr als 1 State verwenden (NUR state start)
- Bedingungen EINDEUTIG setzen, damit - was im Dungeon passiert auch wirklich nur im Dungeon passiert.
02/08/2015 12:40 timonick#3
Hab jetzt alle pc.setqf in d.setf und pc.getqf in d.getf geänder, aber klappt immer noch nicht.

when metinebene.timer begin
d.regen_file("data/dungeon/Bossrun/metinebene.txt")
q.set_counter("Verbleibend", 4)
end
when 8033.kill begin
local count = d.getf("state") + 1
end
when 8033.kill begin
local count = d.getf("state") + 1
end
when 8033.kill begin
local count = d.getf("state") + 1
if count <= 4 then
d.setf("state", count)
q.set_counter("state", count)
end
if count == 4 then
timer("br4", 6)
end
end
when br4.timer begin
d.regen_file("data/dungeon/Bossrun/br4.txt")
end
when 3491.kill begin
notice("Du scheinst stärker zu sein, als ich Gedacht")
notice("habe!! Aber lebend wirst du hier eh nicht rauskommen!")
end
end
end
02/08/2015 12:44 Dyshaxo#4
Vergiss das Flag-in-Variable-Speichern, genau dafür sind die Questflags ja gut:
"local count = d.getf("state") + 1"
mach daraus:
"d.setf("state", d.getf("state") +1)"

Versuch's mal like this:

Code:
quest bossrun begin
	state start begin
		when 20090.chat."Bossrun" begin
			say_title("Bossrun")
			say("Dieser Run ist richtig schwer")
			say("Traust du dich?")
			local s = select("Betreten", "Abbrechen")
			if s== 1 then
				pc.warp(855000, 1200)
			end
		end

		when 20001.chat."Was willst du?" begin
			say_title("Bossrun")
			say("Denkst du echt du könntest")
			say("unsere besten Bosse erlegen?")
			say("")
			say("erbärmlich, viel spaß beim Sterben!")
			npc.purge()
			mob.spawn(8032, 150, 150, 1)
		end
		when 8032.kill with pc.get_map_index() == 112 begin
			d.join(112)
			--d.regen_file("data/dungeon/Bossrun/br1.txt")
		end
		
		when login with pc.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
			d.regen_file("data/dungeon/Bossrun/br1.txt")
		end
		
		when 3591.kill with pc.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
			notice("Ihr habt den ersten Boss geschafft!")
			notice("Aber der zweite wird viel schwerer!")
			timer("br2", 6)
		end
		when br2.timer begin
			d.regen_file("data/dungeon/Bossrun/br2.txt")
		end
		when 2684.kill pc.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
			notice("Woow, du hast einen sehr starken")
			notice("Verteidiger von uns umgelegt!! Respekt !!")
			timer("br3", 6)
		end
		when br3.timer begin
			d.regen_file("data/dungeon/Bossrun/br3.txt")
		end
		when 3691.kill pc.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
			notice("Du scheinst stärker zu sein, als ich Gedacht")
			notice("habe!! Aber lebend wirst du hier eh nicht rauskommen!")
			timer("metinebene", 6)
		end

		when metinebene.timer begin
			d.regen_file("data/dungeon/Bossrun/metinebene.txt")
			d.setf("remain", 3)
		end

		when 8033.kill with pc.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
			d.setf("remain", d.getf("remain") - 1)
			if d.getf("remain") == 0 then
				timer("br4", 6)
			end
		end

		when 8034.kill with pc.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
			d.setf("remain", d.getf("remain") - 1)
			if d.getf("remain") == 0 then
				timer("br4", 6)
			end
		end

		when 8035.kill with pc.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
			d.setf("remain", d.getf("remain") - 1)
			if d.getf("remain") == 0 then
				timer("br4", 6)
			end
		end

		when br4.timer begin
			d.regen_file("data/dungeon/Bossrun/br4.txt")
		end

		when 3491.kill begin
			d.notice("Bis hierher klappt der spaß schonmal.")
			d.notice("Du scheinst stärker zu sein, als ich Gedacht")
			d.notice("habe!! Aber lebend wirst du hier eh nicht rauskommen!")
		end
	end
end
02/08/2015 12:54 timonick#5
oke ich versuchs mal. hast du skype? Wenn ich mal ne frage habe, geht das schneller.
02/08/2015 12:58 Dyshaxo#6
Beim Dungeon-Scripten-Lernen hat mir auch keiner wirklich explizit geholfen, ich hab' hier im Forum viele viele Fragen gestellt, und die wurden dann für gewöhnlich beantwortet =)

evtl. kannst du mit der Liste hier noch was Anfangen:

Quote:
Zitat von DaisukeBanned Beitrag anzeigen
Hi there, hab n paar Fragen zu Questbefehlen für Dungeons:

Gib es die Bedingung:
-> Wenn ein Spieler innerhalb eines States disconnected,
soll passieren: 1, 2, 3, 4...

when disconnect begin

Mit d.join(index) wird von der Map 'ne neue Instanz nur für den Spieler geöffnet.
Wie lautet der Befehl, wenn das ganze durch den Gruppenführer ausgelöst werden soll, und die komplette Gruppe zum Dungeon teleportiert werden soll?

d.new_jump_party(map_idx,x_kord,y_kord)

Und wie lautet der Befehl, wenn alle Spieler einer Map zum dungeon teleportiert werden sollen?

d.new_jump_all(map_idx,x_kord,y_kord)

Gibt es 'ne Funktion, die die Anzahl Spieler in der Gruppe eines Spielers zählt?

party.get_near_count() (Zählt allerdings nur die, die sich auf der gleichen Map befinden)

Gibt es Quest-Funktionen, mit denen man NPCs/Monster spawnt und wieder purgen kann,
ohne eine regen.txt zu laden?

mob.spawn(vnum,lokale_x_koordinate, lokale_y_koordinate, radius, aggressiv (0|1), anzahl)

oder

d.spawn_mob(vnum,lokale_x_koordinate, lokale_y_koordinate, radius, anzahl)

d.purge() oder npc.purge() bzw. d.purge_area oder purge_area()
02/08/2015 13:24 timonick#7
Also ich hab jetzt das bei mir eingefügt und da kommt when dosent have begin end clause (pc)
02/08/2015 15:10 deutschenstyle#8
Kommt glaube ich zur [Only registered and activated users can see links. Click Here To Register...]

Oder Irre ich mich?
02/08/2015 17:56 Dyshaxo#9
Quote:
Originally Posted by timonick View Post
Also ich hab jetzt das bei mir eingefügt und da kommt when dosent have begin end clause (pc)
Dann darfst du jetzt herausfinden, wo ich 'n "end" falsch gesetzt habe =)
02/08/2015 21:00 timonick#10
Alle End sind richtig gesetzt :D Glaube das der Pc befehl anders beendet werden muss. Ich hab kp, sitze an der Quest seit 10 Stunden :/
02/08/2015 21:06 rollback#11
[Only registered and activated users can see links. Click Here To Register...]

PHP Code:
quest bossrun begin
    state start begin
        when 20090.chat
."Bossrun" begin
            say_title
("Bossrun")
            
say("Dieser Run ist richtig schwer")
            
say("Traust du dich?")
            
local s select("Betreten""Abbrechen")
            if 
s== 1 then
                pc
.warp(8550001200)
            
end
        end

        when 20001.chat
."Was willst du?" begin
            say_title
("Bossrun")
            
say("Denkst du echt du könntest")
            
say("unsere besten Bosse erlegen?")
            
say("")
            
say("erbärmlich, viel spaß beim Sterben!")
            
npc.purge()
            
mob.spawn(80321501501)
        
end
        when 8032.kill with pc
.get_map_index() == 112 begin
            d
.join(112)
            --
d.regen_file("data/dungeon/Bossrun/br1.txt")
        
end
        
        when login with pc
.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
            d
.regen_file("data/dungeon/Bossrun/br1.txt")
        
end
        
        when 3591.kill with pc
.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
            notice
("Ihr habt den ersten Boss geschafft!")
            
notice("Aber der zweite wird viel schwerer!")
            
timer("br2"6)
        
end
        when br2
.timer begin
            d
.regen_file("data/dungeon/Bossrun/br2.txt")
        
end
        when 2684.kill with pc
.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
            notice
("Woow, du hast einen sehr starken")
            
notice("Verteidiger von uns umgelegt!! Respekt !!")
            
timer("br3"6)
        
end
        when br3
.timer begin
            d
.regen_file("data/dungeon/Bossrun/br3.txt")
        
end
        when 3691.kill with pc
.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
            notice
("Du scheinst stärker zu sein, als ich Gedacht")
            
notice("habe!! Aber lebend wirst du hier eh nicht rauskommen!")
            
timer("metinebene"6)
        
end

        when metinebene
.timer begin
            d
.regen_file("data/dungeon/Bossrun/metinebene.txt")
            
d.setf("remain"3)
        
end

        when 8033.kill with pc
.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
            d
.setf("remain"d.getf("remain") - 1)
            if 
d.getf("remain") == 0 then
                timer
("br4"6)
            
end
        end

        when 8034.kill with pc
.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
            d
.setf("remain"d.getf("remain") - 1)
            if 
d.getf("remain") == 0 then
                timer
("br4"6)
            
end
        end

        when 8035.kill with pc
.in_dungeon() and pc.get_map_index() >= 112*10000 and pc.get_map_index() < 113*10000 begin
            d
.setf("remain"d.getf("remain") - 1)
            if 
d.getf("remain") == 0 then
                timer
("br4"6)
            
end
        end

        when br4
.timer begin
            d
.regen_file("data/dungeon/Bossrun/br4.txt")
        
end

        when 3491.kill begin
            d
.notice("Bis hierher klappt der spaß schonmal.")
            
d.notice("Du scheinst stärker zu sein, als ich Gedacht")
            
d.notice("habe!! Aber lebend wirst du hier eh nicht rauskommen!")
        
end
    end
end 
02/08/2015 21:30 timonick#12
Mmh, jetzt werde ich nicht mehr geportet wenn ich vnum 8023 kille. Oh man ich zerbrech an der quest ..
Kann mir vielleicht jemand über teamviewer helfen? oder skype.
02/09/2015 10:24 Zevion#13
-> [Only registered and activated users can see links. Click Here To Register...]

#closed