Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > Metin2 > Metin2 Private Server
You last visited: Today at 00:00

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[SERVICE] Die Questkontrolle

Discussion on [SERVICE] Die Questkontrolle within the Metin2 Private Server forum part of the Metin2 category.

Reply
 
Old 06/16/2015, 22:09   #11656
 
dstyl's Avatar
 
elite*gold: 0
Join Date: Oct 2009
Posts: 428
Received Thanks: 192
Komme einfach net weiter, bin wohl zu blöd für die MySQL-Sachen..

Code:
quest guild_safebox begin
	state start begin
		function ginvfrei() 
			local a = mysql_query("select * from player.guild_safebox where id = '"..pc.get_guild().."'") 
			return a.open[1] 
		end
		when 11000.chat."Gildenlager öffnen" or 11002.chat."Gildenlager öffnen" or 11004.chat."Gildenlager öffnen" with pc.has_guild() and guild.has_safebox() begin
			local ginvfrei = guild_safebox.ginvfrei()
			if pc.is_guild_master()then
				say_title(mob_name(npc.get_race())..":")
				say("Gerne doch, hier ist das Lager.")
				say("Zurzeit sind "..ginvfrei.." Lagerseiten für alle zugänglich!")
				say("Wünsche einen schönen Tag!")
				say("")
				guild.open_safebox()
			else
				if ginvfrei > 0 then
					say_title(mob_name(npc.get_race())..":")
					say("Gerne doch, hier ist das Lager.")
					say("Zurzeit sind "..ginvfrei.." Lagerseiten freigegeben!")
					say("Wünsche einen schönen Tag!")
					say("")
					guild.open_safebox(ginvfrei)
				-- guild.open_safebox(1) = 1 page
				-- guild.open_safebox(3) = 3 pages [max]
				else
					say_title(mob_name(npc.get_race())..":")
					say("Leider sind die Lagerseiten zurzeit nicht")
					say("freigegeben. Wenden Sie sich an Ihren Gildenmeister!")
					say("Wünsche einen schönen Tag!")
					say("")
				end
			end
		end
	end
end
Fehler :
Code:
SYSERR: Jun 16 22:04:37 :: RunState: LUA_ERROR: locale/germany/quest/object/state/guild_safebox:2: attempt to index field `open' (a nil value)
SYSERR: Jun 16 22:04:37 :: WriteRunningStateToSyserr: LUA_ERROR: quest guild_safebox.start click
dstyl is offline  
Old 06/16/2015, 22:24   #11657
 
.Karuzo's Avatar
 
elite*gold: 19
Join Date: Aug 2011
Posts: 588
Received Thanks: 217
Quote:
Originally Posted by PlayaStylee View Post
Hillfe bitte porte mich auf die map wenn ich metin oder wildhund haue passiert nix es steht auch nix oder sonst was Kann mir bitte einer helfen

PHP Code:
quest bossrun begin
state start begin
    when 30123.chat
."bossrun betreten" with pc.get_map_index() == or 21 or 41 begin
        say
("".. pc.get_name() ..":")
        
say("Ich habe eine Notitz gefunden")
        
say("Es ist schwer etwas zu entzifern.")
        
wait()
        
say("".. pc.get_name() ..":")
        
say("Ich glaube es handelt sich um die")
        
say("Meerjungfrau die von Kryos2s")
        
say("Sklaven gefangen genommen wurde.")
        
wait()
        
say("".. pc.get_name() ..":")
        
say("Ah nun kann ich etwas entzifern..")
        
say("Es sieht so aus als stamm diese Notitz")
        
say("höchstpersönlich von Kryos2!")
        
wait()
        
say_red("Kryos2:")
        
say("Herzlichen Glückwunsch!")
        
say("Du hast einen freien eintritt in die Hölle")
        
say("erhalten!")
        
wait()
        if 
pc get_level ( ) < 40 then 
            say_reward
("Mindestlevel 40!. Komme wieder, wenn du Level 40 bist!")
        elseif    
pc get_level ( ) > 55 then
            say_reward
("Max Level 55!")
        else
            
say("Eure erste Aufgabe besteht darin")
            
say("den Metin der Seele zu bezwingen!")
            
say("Aber seht euch vor! Nur wer das Oberhaupt tötet")
            
say("und die Meerjungfrau rettet")
            
say("bekommt auch die Belohnung!")
            
wait()
            
say("Möchtest du die Meerjungfrau retten?")
            
            
local s select("Ja""Nein")
            if 
== 1 then
                pc
.warp(1251200 1246800)
                
pc.remove_item(30160,1)
            else
                return
            
end
        end
    end
    
    when 101.kill with pc
.get_map_index()==303 begin
            local jump1 
number(8990)
            if 
jump1<=50 then
                chat
("Du hattest Glück!")
                
chat("Du wirst gleich weiter teleportiert!")
                
timer("bossrun"10)
                else
                
chat("Kryos2 lacht über deine nutzlosen versuche.")
                
chat("Bezwinge erneut einen Metin der Seele!")
        
end
    end
        when bossrun
.timer begin
            d
.setf("bossrunlevel"1)
            
d.new_jump_all(3031249512480)
        
local vid d.spawn_mob(691147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
    
end
    when 692.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"2)
            
timer("bossrun2"10)
        
end
    end
        when bossrun2
.timer begin
            d
.jump_all(1249512480)
        
local vid d.spawn_mob(791147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end
    
    when 791.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"3)
            
timer("bossrun3"10)
        
end
    end
            when bossrun3
.timer begin
            d
.jump_all(1249512480)
        
local vid d.spawn_mob(2092147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end

            when 2092.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"4)
            
timer("bossrun4"10)
        
end
        end    
            when bossrun4
.timer begin
            d
.jump_all(1249512480)
        
local vid d.spawn_mob(2191147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end
        
        when 2191.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"5)
            
timer("bossrun5"10)
        
end
        end    
            when bossrun5
.timer begin
            d
.jump_all(1249512480)
        
local vid d.spawn_mob(1901147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end
        
        when 1901.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"6)
            
timer("bossrun6"10)
        
end
        end    
            when bossrun6
.timer begin
            d
.jump_all(1249512480)
        
local vid d.spawn_mob(2206147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end
        
        when 2206.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"7)
            
timer("bossrun7"10)
        
end
        end
        when bossrun7
.timer begin
            d
.jump_all(1249512480)
        
local vid d.spawn_mob(1304147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end
        
        when 1304.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"8)
            
timer("bossrun8"10)
        
end
        end
        when bossrun8
.timer begin
            d
.jump_all(1249512480)
        
local vid d.spawn_mob(1091147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end
        
        when 1091.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"9)
            
timer("bossrun9"10)
        
end
        end
        when bossrun9
.timer begin
            d
.jump_all(1249512480)
        
local vid d.spawn_mob(1092147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end
        
        when 1092.kill with pc
.in_dungeon() begin
        
if d.is_unique_dead("real"then
            d
.setf("bossrunlevel"11)
            
timer("bossrun10"10)
        
end
        end
        when bossrun10
.timer begin
        d
.jump_all(1249512480)
        
local vid d.spawn_mob(2306147135)
        
d.set_unique("real"vid)
        
d.notice("Los gehts!");
        
end
        
when 2306.kill with pc
.in_dungeon() begin
    
if d.is_unique_dead("real"then
        d
.setf("bossrunlevel"12)
        
d.notice("Ihr habt es geschaft die Meerjungfrau zu retten.")
        
d.notice("Dies war eine nicht allzu leichte Aufgabe.")
        
d.notice("Nun sollt ihr eine Belohnung erhalten.")
        
d.kill_all()
        
timer("meerjungfrau_end_port"10)
    
end
end
    when meerjungfrau_end_port
.timer begin
        d
.jump_all(1249512480)
        
d.spawn_mob(20011147135)
        
timer("bossrun_escape_timer"120)    
        
d.notice("Ihr werdet in 2 Minuten rausgeportet")
    
end
    
    when 20011.chat
."Belohnung" with pc.in_dungeon() and pc.getqf("belo") == 0 begin
        
            say
("Bla bla , hier kriegst du deine Belohnung")
            
pc.give_item2(19,1)
            
pc.setqf("belo"1)
        
    
end
    when bossrun_escape_timer
.timer begin
        d
.setf("bossrunlevel"0)
        
pc.setqf("belo",0)
        -- 
warp_to_village()
        
warp_all_to_village(pc.get_map_index(), 30)        
        
end
    end
end 
Hallo PlayaStylee,

wie ich das sehe liegt bereits hier ein Problem vor:

PHP Code:
local jump1 number(8990)
            if 
jump1<=50 then 
Er sucht sich nur eine Zahl zwischen 89 und 90 aus,
du willst aber das man teleportiert wird sobald die Zahl unter oder = 50 ist.

Außerdem würde ich dir empfehlen die Tötungen mit "npc.get_race()" zu regeln,
da "when 101.kill begin" später zu Problemen führen könnte.

Sollte das Problem morgen noch vorhanden sein kann ich dir die Quest umschreiben.
Bin gerade nicht zuhause deswegen kann ich dir nicht weiter helfen.

Mfg.
.Karuzo is offline  
Old 06/17/2015, 01:41   #11658
 
PlayaStylee's Avatar
 
elite*gold: 10
Join Date: Jun 2013
Posts: 314
Received Thanks: 24
Quote:
Originally Posted by .CHKaruzo View Post


Hallo PlayaStylee,

wie ich das sehe liegt bereits hier ein Problem vor:

PHP Code:
local jump1 number(8990)
            if 
jump1<=50 then 
Er sucht sich nur eine Zahl zwischen 89 und 90 aus,
du willst aber das man teleportiert wird sobald die Zahl unter oder = 50 ist.

Außerdem würde ich dir empfehlen die Tötungen mit "npc.get_race()" zu regeln,
da "when 101.kill begin" später zu Problemen führen könnte.

Sollte das Problem morgen noch vorhanden sein kann ich dir die Quest umschreiben.
Bin gerade nicht zuhause deswegen kann ich dir nicht weiter helfen.

Mfg.
leider hab ich keine erfahrung von questen etc hoffe du kannst mir es umschreiben ? wäre nett
PlayaStylee is offline  
Old 06/17/2015, 12:48   #11659
 
Backxtar's Avatar
 
elite*gold: 0
Join Date: Feb 2015
Posts: 400
Received Thanks: 46
Quote:
Originally Posted by Backxtar View Post
Habe diese PVP Tunier Quest (automatisch)


Allerdings kann ich nur eine Belohnung festlegen, Starten usw geht nicht.. Jemand ne Idee?
Hier..
Backxtar is offline  
Old 06/17/2015, 13:02   #11660
 
dstyl's Avatar
 
elite*gold: 0
Join Date: Oct 2009
Posts: 428
Received Thanks: 192
Quote:
Originally Posted by dstyl View Post
Komme einfach net weiter, bin wohl zu blöd für die MySQL-Sachen..

Code:
quest guild_safebox begin
	state start begin
		function ginvfrei() 
			local a = mysql_query("select * from player.guild_safebox where id = '"..pc.get_guild().."'") 
			return a.open[1] 
		end
		when 11000.chat."Gildenlager öffnen" or 11002.chat."Gildenlager öffnen" or 11004.chat."Gildenlager öffnen" with pc.has_guild() and guild.has_safebox() begin
			local ginvfrei = guild_safebox.ginvfrei()
			if pc.is_guild_master()then
				say_title(mob_name(npc.get_race())..":")
				say("Gerne doch, hier ist das Lager.")
				say("Zurzeit sind "..ginvfrei.." Lagerseiten für alle zugänglich!")
				say("Wünsche einen schönen Tag!")
				say("")
				guild.open_safebox()
			else
				if ginvfrei > 0 then
					say_title(mob_name(npc.get_race())..":")
					say("Gerne doch, hier ist das Lager.")
					say("Zurzeit sind "..ginvfrei.." Lagerseiten freigegeben!")
					say("Wünsche einen schönen Tag!")
					say("")
					guild.open_safebox(ginvfrei)
				-- guild.open_safebox(1) = 1 page
				-- guild.open_safebox(3) = 3 pages [max]
				else
					say_title(mob_name(npc.get_race())..":")
					say("Leider sind die Lagerseiten zurzeit nicht")
					say("freigegeben. Wenden Sie sich an Ihren Gildenmeister!")
					say("Wünsche einen schönen Tag!")
					say("")
				end
			end
		end
	end
end
Fehler :
Code:
SYSERR: Jun 16 22:04:37 :: RunState: LUA_ERROR: locale/germany/quest/object/state/guild_safebox:2: attempt to index field `open' (a nil value)
SYSERR: Jun 16 22:04:37 :: WriteRunningStateToSyserr: LUA_ERROR: quest guild_safebox.start click
Irgendjemand ne Idee?
dstyl is offline  
Old 06/17/2015, 13:10   #11661

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
Quote:
Originally Posted by dstyl View Post
Irgendjemand ne Idee?
Der Fehler wird dir doch schon serviert ... "attempt to index field `open' (a nil value)"

versucht auf das Feld 'open' zuzugreifen, welches nil (nicht vorhanden) ist.
Kontrollier mal, ob das Feld 'open' wirklich in der Tabelle steht, wenn ja versuchs mal so:

Code:
quest guild_safebox begin
	state start begin
		function ginvfrei() 
			local result = mysql_query(string.format("SELECT open FROM player.guild_safebox WHERE id = %s LIMIT 1;", pc.get_guild()))
			if not result or table.getn(result.open) < 1 then
				return 0
			end
			return tonumber(result.open[1])
		end
		when 11000.chat."Gildenlager öffnen" or 11002.chat."Gildenlager öffnen" or 11004.chat."Gildenlager öffnen" with pc.has_guild() and guild.has_safebox() begin
			local ginvfrei = guild_safebox.ginvfrei()
			if pc.is_guild_master()then
				say_title(mob_name(npc.get_race())..":")
				say("Gerne doch, hier ist das Lager.")
				say("Zurzeit sind "..ginvfrei.." Lagerseiten für alle zugänglich!")
				say("Wünsche einen schönen Tag!")
				say("")
				guild.open_safebox()
			else
				if ginvfrei > 0 then
					say_title(mob_name(npc.get_race())..":")
					say("Gerne doch, hier ist das Lager.")
					say("Zurzeit sind "..ginvfrei.." Lagerseiten freigegeben!")
					say("Wünsche einen schönen Tag!")
					say("")
					guild.open_safebox(ginvfrei)
				-- guild.open_safebox(1) = 1 page
				-- guild.open_safebox(3) = 3 pages [max]
				else
					say_title(mob_name(npc.get_race())..":")
					say("Leider sind die Lagerseiten zurzeit nicht")
					say("freigegeben. Wenden Sie sich an Ihren Gildenmeister!")
					say("Wünsche einen schönen Tag!")
					say("")
				end
			end
		end
	end
end
rollback is offline  
Thanks
1 User
Old 06/17/2015, 15:30   #11662
 
dstyl's Avatar
 
elite*gold: 0
Join Date: Oct 2009
Posts: 428
Received Thanks: 192
Quote:
Originally Posted by It's me, 1093 View Post
Der Fehler wird dir doch schon serviert ... "attempt to index field `open' (a nil value)"

versucht auf das Feld 'open' zuzugreifen, welches nil (nicht vorhanden) ist.
Kontrollier mal, ob das Feld 'open' wirklich in der Tabelle steht, wenn ja versuchs mal so:

Code:
quest guild_safebox begin
	state start begin
		function ginvfrei() 
			local result = mysql_query(string.format("SELECT open FROM player.guild_safebox WHERE id = %s LIMIT 1;", pc.get_guild()))
			if not result or table.getn(result.open) < 1 then
				return 0
			end
			return tonumber(result.open[1])
		end
		when 11000.chat."Gildenlager öffnen" or 11002.chat."Gildenlager öffnen" or 11004.chat."Gildenlager öffnen" with pc.has_guild() and guild.has_safebox() begin
			local ginvfrei = guild_safebox.ginvfrei()
			if pc.is_guild_master()then
				say_title(mob_name(npc.get_race())..":")
				say("Gerne doch, hier ist das Lager.")
				say("Zurzeit sind "..ginvfrei.." Lagerseiten für alle zugänglich!")
				say("Wünsche einen schönen Tag!")
				say("")
				guild.open_safebox()
			else
				if ginvfrei > 0 then
					say_title(mob_name(npc.get_race())..":")
					say("Gerne doch, hier ist das Lager.")
					say("Zurzeit sind "..ginvfrei.." Lagerseiten freigegeben!")
					say("Wünsche einen schönen Tag!")
					say("")
					guild.open_safebox(ginvfrei)
				-- guild.open_safebox(1) = 1 page
				-- guild.open_safebox(3) = 3 pages [max]
				else
					say_title(mob_name(npc.get_race())..":")
					say("Leider sind die Lagerseiten zurzeit nicht")
					say("freigegeben. Wenden Sie sich an Ihren Gildenmeister!")
					say("Wünsche einen schönen Tag!")
					say("")
				end
			end
		end
	end
end
Vorerst mal : Danke für die Hilfe.
Leider funktioniert es immernoch nicht.
Die Tabelle existiert, hier ein Screenshot :


Nachdem ich deine Quest übernommen habe, folgender Error in der Syserr (Ch1) :
Code:
SYSERR: Jun 17 15:28:39 :: RunState: LUA_ERROR: locale/germany/quest/object/state/guild_safebox:2: bad argument #1 to `getn' (table expected, got nil)
SYSERR: Jun 17 15:28:39 :: WriteRunningStateToSyserr: LUA_ERROR: quest guild_safebox.start click
dstyl is offline  
Old 06/18/2015, 00:59   #11663
 
StylerKerem's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 118
Received Thanks: 128
PHP Code:
quest give_basic_weapon begin 
    state start begin 
        when login begin 
            say_title
("Willkommen auf ImbaMT2")      
            
pc.change_money(100000)  
            
pc.give_item2("27003",200)   
            
pc.give_item2("27006",200)  
            
pc.give_item2("71050",200)  
            
pc.give_item2("72702",200)  
            
pc.give_item2("50053",1)  
            
horse.set_level(30)  
            
horse.ride()  
            if 
pc.get_job() == 0 then  
                pc 
give_item2 "19" )
                
pc give_item2 "3009" )
                
pc give_item2 "16009" )
                
pc give_item2 "15009" )
                
pc give_item2 "14009" )
                
pc give_item2 "17009" )
                
pc give_item2 "13009" )
                
pc give_item2 "12209" )
                
pc give_item2 "11209" )  
                
say_reward("Du erhielst das Kriegerset!")
            elseif 
pc.get_job() == 1 then   
                pc 
give_item2 "1009" 
                
pc give_item2 "2009" )
                
pc give_item2 "12349" )
                
pc give_item2 "11409" )
                
pc give_item2 "8000" 200 )
                
pc give_item2 "16009" )
                
pc give_item2 "15009" )
                
pc give_item2 "14009" )
                
pc give_item2 "17009" )
                
pc give_item2 "13009" 
                
say_reward("Du erhielst das Ninjaset!")  
            elseif 
pc.get_job() == 2 then   
                pc 
give_item2 "19" )  
                
pc give_item2 "12489" )
                
pc give_item2 "11609" )
                
pc give_item2 "16009" )
                
pc give_item2 "15009" )
                
pc give_item2 "14009" )
                
pc give_item2 "17009" )
                
pc give_item2 "13009" 
                
say_reward("Du erhielst das Suraset!")  
            elseif 
pc.get_job() == 3 then   
                pc 
give_item2 "7009" )
                
pc give_item2 "5009" )
                
pc give_item2 "11809" )
                
pc give_item2 "12629" )
                
pc give_item2 "16009" )
                
pc give_item2 "15009" )
                
pc give_item2 "14009" )
                
pc give_item2 "17009" )
                
pc give_item2 "13009" 
                
say_reward("Du erhielst das Schamiset!"
            
end 
        end  
    end
    state __COMPLETE__ begin 
    end
end 
Ich glaube mir fehlt diese set_state(__COMPLETE__) aber wohin ?
StylerKerem is offline  
Old 06/18/2015, 01:04   #11664
 
Rofelmau's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 294
Received Thanks: 157
jap, das fehlt
unter das end für die if abfrage

PHP Code:
local result mysql_query(string.format("SELECT open FROM player.guild_safebox WHERE id = %s LIMIT 1;"pc.get_guild()))
            if 
not result or table.getn(result.open) < 1 then
                
return 0
            end
            
return tonumber(result.open[1]) 
das ding ist result ist keine tabelle und result.open auch nicht
result ist 1 spezifischer wert und zwar der wert "open" in der tabelle guild_safebox im verzeichnis player, und zwar der open wert der deiner guilde zugeordnet ist
darum geht table.getn nicht
Rofelmau is offline  
Thanks
1 User
Old 06/18/2015, 08:13   #11665

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
Quote:
Originally Posted by Rofelmau View Post
PHP Code:
local result mysql_query(string.format("SELECT open FROM player.guild_safebox WHERE id = %s LIMIT 1;"pc.get_guild()))
            if 
not result or table.getn(result.open) < 1 then
                
return 0
            end
            
return tonumber(result.open[1]) 
das ding ist result ist keine tabelle und result.open auch nicht
result ist 1 spezifischer wert und zwar der wert "open" in der tabelle guild_safebox im verzeichnis player, und zwar der open wert der deiner guilde zugeordnet ist
darum geht table.getn nicht
mysql_query gibt einen table zurück. Der Table ist (zumindest bei der Funktion von Mijago) doppelt aufgebaut:

Code:
queryrueckgabe = {
columnname1 = {row1, row2, row3},
columnname2 = {row2, row2, row3},
[1] = {valueofCol1Row1, valueofCol1Row2, valueofCol1Row3},
[2] = {valueofCol2Row1, valueofCol2Row2, valueofCol2Row3}
}
Die Ergebnisse stehen also 2x in der Rückgabe.
Wenn man also eine Query auf eine Spalte ausführt, die auf 1 Ergebnis limitiert ist, müsste die Rückgabe im Normalfall so aussehen:
(in der Spalte open steht in der Datenbank in diesem Beispiel der Wert 7)
Code:
queryrueckgabe = {
open = {7},
[1] = {7}
}
fragt man also auf table.getn(result.open) ab, müsste es 1 zurückgeben.

Du kannst dir ja gerne mal wirklich anschauen, was mysql_query bei einem SELECT zurückgibt.
Habe mir dafür diese Funktion geschrieben:
Code:
function tablestr(tbl)
	local str = ""
	for k,v in pairs(tbl) do
		if type(v) == "table" then
			v = tablestr(v)
		elseif type(v) == "string" then
			v = string.format("\"%s\"", v)
		end
		if type(k) == "string" then
			k = string.format("\"%s\"", k)
		end
		str = string.format("%s\n	[%s] = %s,", str, k, v)
	end
	return string.format("{%s}", str)
end
Damit kannst du dir einen beliebigen Table als String ausgeben lassen
rollback is offline  
Old 06/18/2015, 18:03   #11666
 
Backxtar's Avatar
 
elite*gold: 0
Join Date: Feb 2015
Posts: 400
Received Thanks: 46
Quote:
Originally Posted by Backxtar View Post
Hier..
Up ^^

Immernoch das Problem mit der Quest

Code:
	state start begin
		when login with pc.get_map_index() == 330 and (pvp_attenders == nil or pvp_attenders[pvp_manager.get_my_attender_id()] == nil or (pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != 1 and pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != 2)) begin
			if pvp_attenders == nil then
				pvp_manager.guard_check_position()
				timer("pvp_guard_1", 20)
				return
			end
			if pvp_attenders[pvp_manager.get_my_attender_id()] == nil then
				pvp_manager.guard_check_position()
				timer("pvp_guard_1", 20)
				return
			end
			if pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != 1 and pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != 2 then
				pvp_manager.guard_check_position()
				timer("pvp_guard_1", 20)
			end
		end
		when pvp_guard_1.timer begin
			if pc.get_map_index() != 330 then
				return
			end
			pvp_manager.guard_check_position()
			timer("pvp_guard_2", 20)
		end
		when pvp_guard_2.timer begin
			if pc.get_map_index() != 330 then
				return
			end
			pvp_manager.guard_check_position()
			timer("pvp_guard_1", 20)
		end
		function guard_check_position()
			if pc.get_local_x() >= 84 and pc.get_local_y() >= 84 and pc.get_local_x() <= 116 and pc.get_local_y() <= 116 then --arena 1
				pvp_manager.guard_reset()
			end
			if pc.get_local_x() >= 84 and pc.get_local_y() >= 136 and pc.get_local_x() <= 116 and pc.get_local_y() <= 168 then --arena 2
				pvp_manager.guard_reset()
			end
			if pc.get_local_x() >= 136 and pc.get_local_y() >= 84 and pc.get_local_x() <= 168 and pc.get_local_y() <= 116 then --arena 3
				pvp_manager.guard_reset()
			end
			if pc.get_local_x() >= 136 and pc.get_local_y() >= 136 and pc.get_local_x() <= 168 and pc.get_local_y() <= 168 then --arena 4
				pvp_manager.guard_reset()
			end
		end
		
		function guard_reset()
			notice_in_map("AUTOPVP-GUARD: "..pc.getname().." wurde aus der Arena entfernt.")
			pc.warp_local(pc.get_map_index(), 126*100, 24*100)
		end
		
		when 20355.chat."Dem PvP-Turnier beitreten" with game.get_event_flag("pvp") != 0 begin
			say_title("Hauptmann:")
			if game.get_event_flag("pvp") == 1 then
				say("Schärfe deine Waffen und deine Sinne!")
				say("Das PvP-Turnier beginnt gleich!")
				say("")
				say("Beeilung!")
				say("Kämpfe für die Ehre unseres Reiches!")
				say("")
			else
				say("Das Turnier hat bereits begonnen.")
				say("Du darfst keine Zeit verlieren!")
				say("")
			end
			wait()
			pc.warp(857400,847200)
		end
		
		when 20078.chat."Zurück zur Stadt" with pc.get_map_index() == 330 begin
			say_title("Zurück zur Stadt:")
			say("Möchtest du das Arenengelände verlassen und zurück")
			say("in deine Reichshauptstadt teleportiert werden?")
			say("")
			local s = select("Ja", "Nein")
			if s == 1 then
				warp_to_village()
			end
		end

		when 20078.chat."GM: PVP-Turnier abbrechen" with pc.get_map_index() == 330 and pc.is_gm() and game.get_event_flag("pvp") != 0 begin
			say_title("PVP-Turnier abbrechen")
			say("Möchtest du das PVP-Turnier wirklich abbrechen?")
			say("")
			local s = select("Ja", "Nein")
			if s == 1 then
				game.set_event_flag("pvp", 0)
				pvp_attenders = nil
				notice_all("Das PVP-Turnier wurde abgebrochen.")
				say_title("PVP-Turnier abbrechen")
				say("Das PVP-Turnier wurde abgebrochen.")
				say("")
				if pvp_manager_callback != nil then
					pvp_manager_callback()
				end
			end
		end

		when 20078.chat."GM: PVP-Turnier starten" with pc.get_map_index() == 330 and pc.is_gm() and game.get_event_flag("pvp") == 0 and ae_pvp_tournament == nil begin
			say_title("PVP-Turnier starten:")
			say("Bitte lege die Levellimits für das PVP-Turnier")
			say("fest.")
			say("")
			say_reward("Minimum Level (minimum 15):")
			local str_min_level = input()
			say_title("PVP-Turnier starten:")
			local min_level = tonumber(str_min_level)
			if min_level == nil then
				say("Es wurde keine Zahl eingegeben.")
				say("")
				return
			end
			if tonumber(str_min_level) < 15 then
				min_level = 15
			end
			say("Das minimale Level ist nun "..tostring(min_level)..".")
			say("Bitte geben sie ein maximales Level ein:")
			local str_max_level = input()
			say_title("PVP-Turnier starten:")
			local max_level = tonumber(str_max_level)
			if max_level == nil then
				say("Es wurde keine Zahl eingegeben.")
				say("")
				return
			end
			if tonumber(str_max_level) < min_level then
				say("Das maximale Level muss größer als das")
				say("minimale Level sein.")
				say("")
				return
			end
			
			game.set_event_flag("pvp_minlevel", min_level)
			game.set_event_flag("pvp_maxlevel", max_level)
			
			say("Minimal-Level "..tostring(min_level))
			say("Maximal-Level "..tostring(max_level))
			say("")
			local s = select("Jetzt starten", "Abbrechen")
			if s == 2 then
				return
			end
			
			say_title("PVP-Turnier starten:")
			say("Das PVP-Turnier wurde gestartet.")
			say("Jeder, der teilnehmen möchte, kann sich hier")
			say("anmelden.")
			say("Die Anmeldungen können hier geschlossen werden.")
			say("")
			say_reward("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
			pvp_manager.open_registrations()
		end
		function open_registrations()
			game.set_event_flag("pvp", 1)
			attender_count = 0
			game.set_event_flag("pvp_tournament", get_global_time())
			pvp_attenders = nil
			pvp_attenders = { }
			
			arena = {
						-- arena 1
						{
							{ 113, 100 },
							{ 88, 100 },
							0,
							"SLEEPING",
							0,
						},
						-- arena 2
						{
							{ 113, 152 },
							{ 88, 152 },
							0,
							"SLEEPING",
							0,
						},
						-- arena 3
						{
							{ 140, 152 },
							{ 164, 152 },
							0,
							"SLEEPING",
							0,
						},
						-- arena 4
						{
							{ 164, 100 },
							{ 140, 100 },
							0,
							"SLEEPING",
							0,
						},
					}
			
			notice_all("Die Anmeldungen für das PVP-Turnier sind nun eröffnet!")
			notice_all("Aktuelle Levellimits: "..game.get_event_flag("pvp_minlevel").." - "..game.get_event_flag("pvp_maxlevel"))
		end
		when 20078.chat."Beim PVP-Turnier anmelden" with pc.get_map_index() == 330 and game.get_event_flag("pvp") == 1 begin
			say_title(mob_name(20078)..":")
			if game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") then
				say("Du bist bereits beim PVP-Turnier angemeldet.")
				say("")
				return
			end
			if pc.get_level() < 15 then
				say("Dein Level ist zu niedrig.")
				say("")
				return
			end
			if pc.get_level() < game.get_event_flag("pvp_minlevel") or pc.get_level() > game.get_event_flag("pvp_maxlevel") then
				say("Dein Level muss zwischen "..game.get_event_flag("pvp_minlevel").." und "..game.get_event_flag("pvp_maxlevel").." sein.")
				say("")
				return
			end
			say("Beim PVP-Turnier kämpfst du gegen Spieler")
			say("mit möglichst gleichen Leveln.")
			say("Wenn du dich gegen die Anderen durchsetzen")
			say("kannst, winkt dir ein Preis.")
			say("Möchtest du teilnehmen?")
			local s = select("Teilnehmen!", "Ich habe sowieso keine Chance.")
			say_title(mob_name(20078)..":")
			if s == 1 then
				say("Du wirst aufgerufen, wenn du dran bist.")
				say("Aber du musst hier bleiben, sonst hast du")
				say("automatisch verloren und scheidest aus.")
				say("Viel Erfolg!")
				say("")
				
				pvp_attenders[attender_count+1] = {name = pc.getname(), level = pc.get_level(), partner = nil, winner = true, fight_mode = 0, arena = 0}
				pc.setqf("attender_id", attender_count+1)
				pc.setqf("pvp_tournament", game.get_event_flag("pvp_tournament"))
				attender_count = attender_count + 1
				
				if achievement_manager != nil then
					achievement_manager.on_participatepvpevent()
				end
				
			elseif s == 2 then
				say("Stimmt, du bist wirklich ein Schwächling.")
				say("Es hat hier auch schon Tote gegeben.")
				say("")
			end
		end
		when 20078.chat."Anmeldungen des PVP-Turniers" with pc.get_map_index() == 330 and pc.is_gm() and game.get_event_flag("pvp") == 1 begin
			say_title("PVP-Turnier")
			say("Momentan sind "..tonumber(attender_count).." Spieler angemeldet.")
			if ae_pvp_tournament != nil then
				say("")
				return
			end
			say("Sollen die Anmeldungen geschlossen und das Turnier")
			say("gestartet werden?")
			say("")
			local s = select("Anmeldungen schließen", "Anmeldephase fortsetzen")
			if s == 1 then
				say_title("Anmeldungen schließen:")
				say("Die Anmeldungen wurden geschlossen.")
				say("Die Kämpfe beginnen jetzt.")
				say("")
				pvp_manager.close_registrations()
			end
		end
		
		function close_registrations()
			if attender_count == 0 then
				notice_all("Das PVP-Turnier kann nicht stattfinden, da sich niemand angemeldet hat.")
				game.set_event_flag("pvp", 0)
				pvp_attenders = nil
				if pvp_manager_callback != nil then
					pvp_manager_callback()
				end
				return
			end
			game.set_event_flag("pvp", 2)
			pvp_manager.make_duel_list()
			duel_list_index = 0
			playerless_mode = false
			notice_all("Die Anmeldungen für das PVP-Turnier sind nun geschlossen.")
			notice_all("Die Kämpfe beginnen jetzt.")
			pvp_manager.refresh_arenas()
		end
		
		when 20078.chat."Mit wem werde ich als nächstes Kämpfen?" with pc.get_map_index() == 330 and game.get_event_flag("pvp") == 2 and game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") begin
			say_title(mob_name(20078)..":")
			if pvp_manager.get_duel_partner() == nil then
				say("Im Moment hast du noch keinen Partner.")
				say("Wir müssen abwarten, ob es gleich weitere")
				say("Spieler ohne Partner gibt. Dann bilde ich")
				say("neue Paare.")
				say("Ansonsten hast du das Glück, dass du kampflos")
				say("in die nächste Runde aufsteigst.")
				say("")
				return
			end
			say("Nach dem aktuellen Plan musst du voraussichtlich")
			say("gegen "..pvp_manager.get_duel_partner().." kämpfen.")
			say("")
		end
		

		function make_duel_list()
			duel_list = { }
			local i = 0
			for ai = 1, attender_count, 1 do
				if pvp_attenders[ai] != nil and pvp_attenders[ai].partner == nil and pvp_attenders[ai].winner == true then
					local partner_id = pvp_manager.findpartner(tostring(pvp_attenders[ai].name), pvp_attenders[ai].level)
					if partner_id != nil then
						pvp_attenders[ai].partner = tostring(pvp_attenders[partner_id].name)
						pvp_attenders[partner_id].partner = tostring(pvp_attenders[ai].name)
						duel_list[i] = {fighter_id1 = ai, fighter_id2 = partner_id}
						i = i + 1
					end
				end
			end
			
			for ai = 1, attender_count, 1 do
				if pvp_attenders[ai] != nil and pvp_attenders[ai].partner == nil and pvp_attenders[ai].winner == true then
					local partner_id = pvp_manager.findpartner_for_partnerless(tostring(pvp_attenders[ai].name), pvp_attenders[ai].level)
					if partner_id != nil then
						pvp_attenders[ai].partner = tostring(pvp_attenders[partner_id].name)
						pvp_attenders[partner_id].partner = tostring(pvp_attenders[ai].name)
						duel_list[i] = {fighter_id1 = ai, fighter_id2 = partner_id}
						i = i + 1
					end
				end
			end
		end
		
		
		function findpartner(name, level)
			local closest_level = nil
			local partner_id = nil
			for ai = 1, attender_count, 1 do
				if pvp_attenders[ai] != nil and pvp_attenders[ai].winner == true and tonumber(pvp_attenders[ai].level) <= level + 30 and tonumber(pvp_attenders[ai].level) >= level - 30 and tostring(pvp_attenders[ai].name) != name and pvp_attenders[ai].partner == nil and pvp_manager.is_player_in_map(tostring(pvp_attenders[ai].name)) == true then
					if closest_level == nil then
						closest_level = pvp_attenders[ai].level
						partner_id = ai
					elseif tonumber(pvp_attenders[ai].level) == tonumber(level) then
						closest_level = pvp_attenders[ai].level
						partner_id = ai
					elseif tonumber(level) < tonumber(closest_level) and tonumber(pvp_attenders[ai].level) < tonumber(closest_level) then
						closest_level = pvp_attenders[ai].level
						partner_id = ai
					elseif tonumber(level) > tonumber(closest_level) and tonumber(pvp_attenders[ai].level) > tonumber(closest_level) then
						closest_level = pvp_attenders[ai].level
						partner_id = ai
					end
				end
			end
			return partner_id
		end
		
		function findpartner_for_partnerless(name, level)
			local closest_level = nil
			local partner_id = nil
			for ai = 1, attender_count, 1 do
				if pvp_attenders[ai] != nil and pvp_attenders[ai].winner == true and tostring(pvp_attenders[ai].name) != name and pvp_attenders[ai].partner == nil and pvp_manager.is_player_in_map(tostring(pvp_attenders[ai].name)) == true then
					if closest_level == nil then
						closest_level = pvp_attenders[ai].level
						partner_id = ai
					elseif pvp_attenders[ai].level == level then
						closest_level = pvp_attenders[ai].level
						partner_id = ai
					elseif tonumber(level) < tonumber(closest_level) and pvp_attenders[ai].level < closest_level then
						closest_level = pvp_attenders[ai].level
						partner_id = ai
					elseif tonumber(level) > tonumber(closest_level) and pvp_attenders[ai].level > closest_level then
						closest_level = pvp_attenders[ai].level
						partner_id = ai
					end
				end
			end
			return partner_id
		end
		
		function is_player_in_map(name)
			if pc.getname() == name then
				return true
			end
			local myname = pc.getname()
			local target = find_pc_by_name(name)
			local t = pc.select(target)
			if pc.getname() == myname then
				pc.select(t)
				return false
			end
			pc.select(t)
			return true
		end
		
		
		when 20078.chat."GM: Refresh 'n Clear Arenas" with pc.is_gm() and game.get_event_flag("pvp") == 2 begin
			for aArena = 1, 4, 1 do
				arena[aArena][3] = 0
				arena[aArena][4] = "SLEEPING"
			end
			pvp_manager.refresh_arenas()
		end
		
		-- not working
		--[[
		when 20078.chat."GM: End fight" with pc.is_gm() and game.get_event_flag("pvp") == 2 begin
			say_title("End fight:")
			say("On which arena should the fight be ended?")
			local s = select("Arena 1", "Arena 2", "Arena 3", "Arena 4", "Schließen")
			
			if s == 5 then
				return
			end
			
			local fighter1 = nil
			local fighter2 = nil
			for ai = 1, attender_count, 1 do
				if pvp_attenders[ai].arena == s and pvp_attenders[ai].fight_mode != 0 then
					if fighter1 == nil then
						fighter1 = ai
					else
						fighter2 = ai
					end
				end
			end
			
			if fighter1 == nil then
				say_title("End fight:")
				say("There is no current Battle on this arena.")
				say("")
				return
			end
			
			say_title("End fight:")
			say("Who should be considered winner when fight on arena "..s.." ")
			say("should be ended?")
			local w = select(tostring(pvp_attenders[fighter1].name), tostring(pvp_attenders[fighter1].name), "Cancel")
			if w == 3 then
				return
			end
			
			if w == 1 then
				pvp_attenders[fighter2].winner = false
				notice_in_map(tostring(pvp_attenders[fighter1].name).." has won the battle against "..tostring(pvp_attenders[fighter2].name).."!", pc.get_map_index())
				pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter1].name, 126, 234))
				pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter2].name, 126, 24))
			else
				pvp_attenders[fighter1].winner = false
				notice_in_map(tostring(pvp_attenders[fighter2].name).." has won the battle against "..tostring(pvp_attenders[fighter1].name).."!", pc.get_map_index())
				pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter1].name, 126, 24))
				pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter2].name, 126, 234))
			end
			
			pvp_attenders[fighter1].fight_mode = 0
			pvp_attenders[fighter2].fight_mode = 0
			
			
			arena[s][3] = 0
			pvp_manager.refresh_arenas()
			
			say_title("End fight:")
			say("The battle has been ended.")
		end
		--]]
		
		when 20078.chat."GM: PVP-Turnier Belohnung" with pc.is_gm() begin
			say_title("Belohnung:")
			say("Aktuelle Belohnung: "..game.get_event_flag("pvp_price_count").."x "..item_name(game.get_event_flag("pvp_price_vnum")).." (vnum: "..game.get_event_flag("pvp_price_vnum")..")")
			local s = select("Belohnung ändern", "Schließen")
			if s == 2 then
				return
			end
			say_title("Belohnung ändern:")
			say("Bitte gib die vnum der neuen Belohnung ein:")
			local vnum = input()
			say_title("Belohnung ändern:")
			say("Bitte gib die Anzahl der neuen Belohnung ein:")
			local count = input()
			game.set_event_flag("pvp_price_count", count)
			game.set_event_flag("pvp_price_vnum", vnum)
			say_title("Belohnung ändern:")
			say("Die Belohnung wurde geändert.")
			say("Neue Belohnung: "..count.."x "..item_name(vnum).." (vnum: "..vnum..")")
		end
		
		function refresh_arenas()
			for aArena = 1, 4, 1 do
				if duel_list[duel_list_index] == nil then
					if playerless_mode == true then
						pvp_manager.init_next_round()
					else
						pvp_manager.fight_playerless()
					end
					return
				end
				if arena[aArena][3] == 0 then
					arena[aArena][3] = 1
					pvp_manager.fight_init(duel_list[duel_list_index].fighter_id1, duel_list[duel_list_index].fighter_id2, aArena)
				end
			end
		end
		

		function fight_init(pid1, pid2, arena_id)
			duel_list_index = duel_list_index + 1
			if pvp_manager.is_player_in_map(tostring(pvp_attenders[pid1].name)) == false then
				notice_in_map(tostring(pvp_attenders[pid1].name).." ist nicht online und somit automatisch ausgeschlossen.", pc.get_map_index())
				pvp_attenders[pid1].winner = false
				pvp_attenders[pid2].partner = nil
				arena[arena_id][3] = 0
				pvp_manager.refresh_arenas()
				return
			end
			if pvp_manager.is_player_in_map(tostring(pvp_attenders[pid2].name)) == false then
				notice_in_map(tostring(pvp_attenders[pid2].name).." ist nicht online und somit automatisch ausgeschlossen.", pc.get_map_index())
				pvp_attenders[pid2].winner = false
				pvp_attenders[pid1].partner = nil
				arena[arena_id][3] = 0
				pvp_manager.refresh_arenas()
				return
			end
			
			notice_in_map(tostring(pvp_attenders[pid1].name).." und "..tostring(pvp_attenders[pid2].name).." bitte im Ring einfinden!", pc.get_map_index())
			
			--[[
			local f1_accept = ask_fight(tostring(pvp_attenders[pid1].name), tostring(pvp_attenders[pid2].name))
			if f1_accept != CONFIRM_OK then
				notice_in_map(tostring(pvp_attenders[pid1].name).." hat den Kampf gegen "..tostring(pvp_attenders[pid2].name).." nicht angetreten.", pc.get_map_index())
				pvp_attenders[pid1] = nil
				pvp_attenders[pid2].partner = nil
				pvp_manager.refresh_arenas()
				return
			end
			
			local f2_accept = confirm(find_pc_by_name(tostring(pvp_attenders[pid2].name)), "Trittst du den Kampf gegen "..tostring(pvp_attenders[pid1].name).. " an?", 15)
			if f2_accept != CONFIRM_OK then
				notice_in_map(tostring(pvp_attenders[pid2].name).." hat den Kampf gegen "..tostring(pvp_attenders[pid1].name).." nicht angetreten.", pc.get_map_index())
				pvp_attenders[pid2] = nil
				pvp_attenders[pid1].partner = nil
				pvp_manager.refresh_arenas()
				return
			end
			]]
			
			pvp_attenders[pid1].fight_mode = 1
			pvp_attenders[pid2].fight_mode = 1
			pvp_attenders[pid1].arena = arena_id
			pvp_attenders[pid2].arena = arena_id
			
			pvp_manager.local_pc_warp(tostring(pvp_attenders[pid1].name), arena[arena_id][1][1], arena[arena_id][1][2])
			pvp_manager.local_pc_warp(tostring(pvp_attenders[pid2].name), arena[arena_id][2][1], arena[arena_id][2][2])

		end
		
		when login with pc.get_map_index() == 330 and game.get_event_flag("pvp") == 2 and pvp_manager.get_fight_mode() == 1 begin
			affect.add(apply.MOV_SPEED, -10000, 2)
			affect.add_collect(apply.HP_REGEN, 5000, 30)
			affect.add_collect(apply.SP_REGEN, 5000, 30)
			pvp_manager.set_fight_mode(2)
			if arena[pvp_manager.get_arena()][3] == 2 then
				arena[pvp_manager.get_arena()][5] = 30
				loop_timer("fight_start_countdown", 1)
			else
				timer("partner_timeout", 40)
			end
			arena[pvp_manager.get_arena()][3] = 2
		end		
		
		when partner_timeout.timer begin
			if pvp_manager.is_player_in_map(pvp_manager.get_duel_partner()) == true or game.get_event_flag("pvp") != 2 or pvp_manager.get_fight_mode() != 2 then
				return
			end
			pvp_manager.set_fight_mode(3)
			if arena[pvp_manager.get_arena()][3] == 3 then
				return
			end
			arena[pvp_manager.get_arena()][3] = 3
			notice_in_map(pc.getname().." hat den Kampf gegen "..pvp_manager.get_duel_partner().." kampflos gewonnen!", pc.get_map_index())
			pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].fight_mode = 3
			pvp_attenders[pvp_manager.get_my_attender_id()].winner = true
			pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].winner = false
			pc.warp_local(pc.get_map_index(), 12600, 23400)
		end

		when fight_start_countdown.timer begin
			if arena[pvp_manager.get_arena()][5] == -1 then
				return
			end
			local partner_vid = find_pc_by_name(pvp_manager.get_duel_partner())
			local my_vid = pc.get_vid()
			if arena[pvp_manager.get_arena()][5] == 0 then
				arena[pvp_manager.get_arena()][5] = -1
				pc.select(partner_vid)
				command("pvp "..my_vid)
				pc.select(my_vid)
				command("pvp "..partner_vid)
				notice_in_map("Der Kampf zwischen "..pc.getname().." und "..pvp_manager.get_duel_partner().." beginnt!", pc.get_map_index())
				timer("fight_start_countdown_shutdown", 1)
			else
				pc.select(partner_vid)
				if math.mod(arena[pvp_manager.get_arena()][5], 5) == 0 then
					syschat("Der Kampf beginnt in "..tostring(arena[pvp_manager.get_arena()][5]).." Sekunden.")
				end
				affect.add(apply.MOV_SPEED, -10000, 2)
				pc.select(my_vid)
				if math.mod(arena[pvp_manager.get_arena()][5], 5) == 0 then
					syschat("Der Kampf beginnt in "..tostring(arena[pvp_manager.get_arena()][5]).." Sekunden.")
				end
				affect.add(apply.MOV_SPEED, -10000, 2)
				arena[pvp_manager.get_arena()][5] = arena[pvp_manager.get_arena()][5] - 1
			end
		end
		
		when fight_start_countdown_shutdown.timer begin
			cleartimer("fight_start_countdown")
		end
		
		when logout with game.get_event_flag("pvp") == 2 and pc.get_map_index() == 330 and pvp_manager.get_fight_mode() == 2 begin
			pvp_manager.set_fight_mode(3)
			arena[pvp_manager.get_arena()][3] = 3
			notice_in_map(pvp_manager.get_duel_partner().." hat den Kampf gegen "..pc.getname().." gewonnen!", pc.get_map_index())
			pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].fight_mode = 3
			pvp_attenders[pvp_manager.get_my_attender_id()].winner = false
			pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].winner = true
			
			pvp_manager.local_pc_warp(pvp_manager.get_duel_partner(), 126, 24)
		end
		
		when kill with game.get_event_flag("pvp") == 2 and pc.get_map_index() == 330 and npc.is_pc() and pvp_manager.get_fight_mode() == 2 begin
			pvp_manager.set_fight_mode(3)
			if arena[pvp_manager.get_arena()][3] == 3 then
				return
			end
			arena[pvp_manager.get_arena()][3] = 3
			notice_in_map(pc.getname().." hat den Kampf gegen "..pvp_manager.get_duel_partner().." gewonnen!", pc.get_map_index())
			pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].fight_mode = 3
			pvp_attenders[pvp_manager.get_my_attender_id()].winner = true
			pvp_attenders[pvp_manager.get_attender_id_by_name(pvp_manager.get_duel_partner())].winner = false
			
			timer("fight_end", 5)
		end
		
		when fight_end.timer begin
			pc.warp_local(pc.get_map_index(), 12600, 23400)
			pvp_manager.local_pc_warp(pvp_manager.get_duel_partner(), 126, 24)
		end
		
		when letter with pc.get_map_index() == 330 and game.get_event_flag("pvp") == 2 and pvp_manager.get_fight_mode() == 3 begin
			pvp_manager.set_fight_mode(0)
			
			if pvp_attenders[pvp_manager.get_my_attender_id()].winner == true then
				arena[pvp_manager.get_arena()][3] = 0
				pvp_manager.refresh_arenas()
			end
		end
		
		function fight_playerless()
			for aArena = 1, 4, 1 do
				if arena[aArena][3] != 0 then
					return
				end
			end
			playerless_mode = true

			
			pvp_manager.make_duel_list()
			pvp_manager.refresh_arenas()
		end
		
		function init_next_round()
			for aArena = 1, 4, 1 do
				if arena[aArena][3] != 0 then
					return
				end
			end
			playerless_mode = false
			
			local winner_count = 0
			--[[local]] winner_id = 0
			for ai = 1, attender_count, 1 do
				pvp_attenders[ai].partner = nil
				pvp_attenders[ai].fight_mode = 0
				if pvp_attenders[ai] != nil and pvp_attenders[ai].winner == true then
					winner_count = winner_count + 1
					winner_id = ai
				end
			end
			
			if winner_count == 1 then
				notice_all(pvp_attenders[winner_id].name.." hat das PVP-Turnier gewonnen!")
				notice_all(pvp_attenders[winner_id].name.." erhält "..game.get_event_flag("pvp_price_count").."x "..item_name(game.get_event_flag("pvp_price_vnum")).." als Preis!")
				local target = find_pc_by_name(pvp_attenders[winner_id].name)
				local t = pc.select(target)
				
				if achievement_manager != nil then
					achievement_manager.on_winpvpevent()
				end
				
				pc.give_item2(game.get_event_flag("pvp_price_vnum"), game.get_event_flag("pvp_price_count"))
				pc.select(t)
				notice_all("Das PVP-Turnier ist nun zuende.")
				game.set_event_flag("pvp", 0)
				--pvp_attenders = nil
				if pvp_manager_callback != nil then
					pvp_manager_callback()
				end
				return
			end
			
			
			pvp_manager.make_duel_list()
			duel_list_index = 0
			if winner_count == 2 then
				notice_all("Das Finale des PVP-Turniers beginnt!")
			elseif winner_count <= 4 then
				notice_all("Das Semi-Finale des PVP-Turniers beginnt!")
			else
				notice_all("Das PVP-Turnier geht in die nächste Runde!")
			end
			pvp_manager.refresh_arenas()
		end
		
		function local_pc_warp(name, x, y)
			local target = find_pc_by_name(name)
			local t = pc.select(target)
			pc.warp_local(pc.get_map_index(), x*100, y*100)
			pc.select(t)
		end
		
		function setqf_by_name(name, flag, value)
			local target = find_pc_by_name(name)
			local t = pc.select(target)
			pc.setqf(flag, value)
			pc.select(t)
		end
		
		function getqf_by_name(name, flag)
			local target = find_pc_by_name(name)
			local t = pc.select(target)
			local rflag = pc.getqf(flag)
			pc.select(t)
			return rflag
		end
		
		function get_attender_id_by_name(name)
			for ai = 1, attender_count, 1 do
				if tostring(pvp_attenders[ai].name) == name then
					return ai
				end
			end
			return 0
		end
		
		function get_my_attender_id()
			return pvp_manager.get_attender_id_by_name(pc.get_name())
		end
		
		function get_duel_partner()
			if pvp_attenders[pvp_manager.get_my_attender_id()] != nil and pvp_attenders[pvp_manager.get_my_attender_id()].partner != nil then
				return pvp_attenders[pvp_manager.get_my_attender_id()].partner
			else
				return nil
			end
		end
		
		function get_fight_mode()
			if pvp_attenders != nil and pvp_manager.get_my_attender_id() != 0 and pvp_attenders[pvp_manager.get_my_attender_id()] != nil and pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode != nil then
				return pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode
			else
				return 0
			end
		end
		
		function set_fight_mode(fmode)
			pvp_attenders[pvp_manager.get_my_attender_id()].fight_mode = fmode
		end
		
		function get_arena()
			return pvp_attenders[pvp_manager.get_my_attender_id()].arena
		end
		
		function set_arena(id)
			pvp_attenders[pvp_manager.get_my_attender_id()].arena = id
		end
		
		function ask_fight(asker, target)
			return confirm(find_pc_by_name(target), "Trittst du den Kampf gegen "..asker.. " an?", 15)
		end
		
		function log_current_winner(points)
			if pvp_attenders != nil then
				mysql_query("INSERT INTO player_s4.pvptournament_winlog (pid, points) VALUES ((SELECT id FROM player_s4.player WHERE name='"..tostring(pvp_attenders[winner_id].name).."'), "..tostring(points)..") ON DUPLICATE KEY UPDATE points=points+"..points, ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
			end
		end
		
		when 20087.chat."PVP-Turnier Rangliste" begin
			local s = select("Information", "Rangliste", "Abbrechen")
			if s == 1 then
				say_title("PVP-Turnier Rangliste:")
				say("In der PVP-Turnier Rangliste stehen")
				say("die Gewinner des PVP-Turnieres.")
				say("Man bekommt abhängig von den jeweiligen")
				say("Levellimits Punkte:")
				say("15-54:  3 Punkte")
				say("55-74:  6 Punkte")
				say("75-105: 9 Punkte")
				say("")
				say_reward("Hinweis: Bei allen anderen PVP-Turnieren,")
				say_reward("die außerhalb des Eventplans stattfinden,")
				say_reward("werden keine Punkte an die Gewinner verteilt.")
				say("")
			elseif s == 2 then
				local ranking = mysql_query("SELECT (SELECT name FROM player_s4.player WHERE id = pid) AS name, points FROM player_s4.pvptournament_winlog ORDER BY points DESC LIMIT 10", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
				say_title("PVP-Turnier Rangliste:")
				if ranking == "ERROR" then
					say_reward("Es gibt noch keine Spieler in der Rangliste.")
					say("")
					return
				end
				for i = 1, table.getn(ranking.name), 1 do
					say(i..". "..tostring(ranking.name[i]).." ("..tostring(ranking.points[i]).." Punkte)")
				end
				say("")
				local self_rank = mysql_query("SELECT rank, points FROM (SELECT @rownum := @rownum + 1 AS rank, points, pid FROM player_s4.pvptournament_winlog JOIN (SELECT @rownum := 0) r ORDER BY pvptournament_winlog.points DESC) x WHERE x.pid = '"..tostring(pc.get_player_id()).."'", ql.mysql["user"], ql.mysql["pass"], nil, ql.mysql["ip"])
				if self_rank == "ERROR" then
					return
				end
				say("Eigener Rang:")
				say(self_rank.rank[1]..". "..tostring(pc.get_name()).." ("..tostring(self_rank.points[1]).." Punkte)")
				say("")
			end
		end
		
	end
end
Backxtar is offline  
Old 06/18/2015, 21:43   #11667
 
MilkingCow's Avatar
 
elite*gold: 0
Join Date: Mar 2015
Posts: 119
Received Thanks: 29
Hallo, vorweg. Ich bin neu im questen!
Mein Problem ist das ich eine neue give_basic_weapon.quest machen möchte.
Hat auch alles super geklappt.
Aber wenn ich den Befehl python make_quest eingebe um die Quests zu reloaden verändert sich ingame nichts.
Der Befehl läuft sauber und ohne Fehler durch.
Die Quest:
Kurz und knapp er reloadet die Quests nicht.
Bitte um Hilfe :3
MilkingCow is offline  
Old 06/18/2015, 21:55   #11668

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
du musst ingame noch
Code:
/reload q
machen
rollback is offline  
Old 06/18/2015, 21:56   #11669
 
MilkingCow's Avatar
 
elite*gold: 0
Join Date: Mar 2015
Posts: 119
Received Thanks: 29
Schon gemacht, passiert aber nichts.
MilkingCow is offline  
Old 06/18/2015, 23:04   #11670
 
Rofelmau's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 294
Received Thanks: 157
Hm manchmal beschweren sich server bei say befehlen die auf ein login event folgen
versuch das mal mit nem timer zu umgehen
also
when login begin
if pc.getqf("basic_weapon") == 0 then
pc.setqf("basic_weapon",1)
timer("basic_weapon",2)
end
end
when basic_weapon. timer begin
say("")
usw
Rofelmau is offline  
Reply




All times are GMT +1. The time now is 00:01.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.