Register for your free account! | Forgot your password?

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

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

Advertisement



PvP Quest, Rangliste query bei db einfügen

Discussion on PvP Quest, Rangliste query bei db einfügen within the Metin2 Private Server forum part of the Metin2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Feb 2011
Posts: 40
Received Thanks: 3
PvP Quest, Rangliste query bei db einfügen

Hallo, ich habe diesen Quest eingefügt
Code:
------------------------------------------------------
-- Automatic PVP-Tournament System Quest
-- (c) 2011 - 2012 by 
------------------------------------------------------
quest pvp_manager begin
	state start begin
		when login with pc.get_map_index() == 26 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() != 26 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() != 26 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() == 26 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() == 26 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() == 26 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() == 26 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() == 26 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() == 26 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() == 26 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() == 26 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() == 26 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() == 26 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 [MENTION=613962]Rown[/MENTION]um := [MENTION=613962]Rown[/MENTION]um + 1 AS rank, points, pid FROM player_s4.pvptournament_winlog JOIN (SELECT [MENTION=613962]Rown[/MENTION]um := 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
aber leider kann ich die Rangliste nicht aufrufen da ich glaube es fehlt mit ne Query bei der Datenbank. Kann mir einer sagen was ich genau machen muss damit ich Rangliste aufrufen kann bei der NPC?
FerryBLacK89 is offline  
Old 08/27/2017, 09:51   #2
Administrator
 
andii's Avatar
 
elite*gold: 28390
The Black Market: 155/0/0
Join Date: Aug 2013
Posts: 9,902
Received Thanks: 2,649
Moin,

für solche Fragen haben wir einen Sammelthread:
andii is offline  
Reply


Similar Threads Similar Threads
[Quest] MySQL Query Ergebnisse in Quest ausgeben lassen
12/13/2013 - Metin2 Private Server - 5 Replies
Hey Leute, ich hab mich heut an einer Kopfgeld Quest versucht und stehe nun vor folgendem Problem: Ich habe per mysql_query Command alle Spieler suchen lassen, die in der Spalte kopfgeld_exist (ja, so heißt die Spalte, in der eingetragen wird, ob der Spieler ein Kopfgeld hat oder nicht) eine 1 stehen haben. Dafür habe ich folgenden Command benutzt: mysql_query("SELECT name, kopfgeld from player.player where kopfgeld_exist = '1';") Nun würde ich gerne ingame in einer Tabelle folgendes...
[R] (Quest) Grundgerüst für eine PVP-Rangliste
08/13/2013 - Metin2 PServer Guides & Strategies - 10 Replies
Hallo Com! Ich hatte diese Quest (die full) für jemanden geschrieben, der sich leider etwas vertan hatte mit seiner Beschreibung von dem, was er wollte, doch ich will nicht, dass das auch auf meiner Platte verstaubt, ohne Nutzen, deshalb gebe ich sie euch c: Es ist ein Grundgerüst für eine PVP-Rangliste. Einmal (half mysql) mit Speicherung in Questflags, ein mal (full MySQL) pur in MySQL. Die halt-MySQL Rangliste updatet sich ca alle 6 Minuten, die full-MySQL Rangliste ist immer...
PvP Rangliste query geht nicht
07/14/2013 - Metin2 Private Server - 2 Replies
Hier meine Quest: quest pvp_kills_rank begin state start begin when login begin local pid = mysql_query("select id from player.player where name='"..pc.get_name().."' LIMIT 1") table.foreachi(pid,function(i,l) pc.setqf("pid", l) end) local set = mysql_query("INSERT INTO quest.pvp_kills (name, kills, pid) VALUES ('"..pc.get_name().."', 0, "..pc.getqf("pid")..")") pc.setqf("pvp_kills_rank", 0)
Compile all quest without quest's files list // Kompilieren Sie alle Quest ohne Quest
07/17/2011 - Metin2 PServer Guides & Strategies - 3 Replies
ENGLISH Hello dear community, this is a very simple guide but at the same time useful. How to compile ALL quest in the folder "quest" without the files list in the file "locale_list"? Easy! Open the file "make" and replace the content of the file with this: for f in *.quest; do ./qc $f; done Oki. Now set the 0777 permission to the file. Finally open a SSH client and sign in. Write the command: cd /game_file_folder



All times are GMT +1. The time now is 09:56.


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.