[System] Dojang Automat

Avatar utilizator
Hamato
Nou Venit

Nou Venit
Mesaje: 28
Membru din: 13 Sep 2016, 18:34
Server: Metin2 Tough Fight
Regat: Chunjo
Aprecieri: 4  
Mulţumiri: 3  
Medalii

Nume: Dojang Automat
Descriere: Salut J4M. Am cautat foarte mult timp un sistem pentru dojang automat complet functional. Este facut dupa modelul de la WoM2 Global, tradus in romana de catre mine. Tin sa precizez ca au fost eliminate functiile de restrictie pe nivele, cele de pariuri si este facut pentru un pvp automat simplu, specific serverelor pvp clasic. Stiind cat de enervant e sa gasesti unul functional, am decis sa vi-l dau si voua. Astept pareri de la cei care l-au incercat.
Imagini: -
Quest:

Cod: Selectaţi tot

quest pvp_manager begin
	state start begin
		when login with game.get_event_flag("budokan_open") > 0 and pc.get_map_index() != 112 begin
			q.set_icon("scroll_open_blue.tga")
			send_letter("*Intra la Dojang")
		end
		        when button or info begin
                        say_title("Turneul Dojang")
			say("")
			if game.get_event_flag("budokan_open") == 2 then
				say("Arena pentru Turneul Dojang este acum deschisa!")
				say("")
				say("Alatura-te si tu pentru a lupta in ring ")
				say("contra celorlalti jucatori intr-o lupta")
				say("pentru glorie, onoare si faima!")
				say("")
				local s = select("Du-ma acolo acum!","Nu multumesc.")
				if s == 1 then
					pc.warp(857300, 4400)
				end
			else
				say("Arena Dojang se va deschide in curand.")
				say("")
				say("Alatura-te si tu pentru a lupta in ring ")
				say("contra celorlalti jucatori intr-o lupta")
				say("pentru glorie, onoare si faima!")
				say("")
				say("Cand intrarea va fii deschisa, vei putea intra ")
				say("folosind aceast quest. Pregateste-ti echipamentul!")
				say("")
				local s = select("Voi fii pregatit!", "Voi urmarii ca spectator.")
				if s == 1 then
					return
				end

				say_title("Turneul Dojang")
				say("")
				say("Alege o actiune:")
				say("")
				ttype = select("Turneul Dojang : Deschidere", "Inchide")
				if ttype == 5 then
					return
				end

				pvp_manager.say_hof(ttype)
			end
		end

		when login with pc.get_map_index() == 112 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 party.is_party() then
				party.remove_player()
			end

			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() != 112 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() != 112 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().." a fost eliminat din arena.")
			pc.warp_local(pc.get_map_index(), 1112*100, 24*100)
		end
		
		when 20088.chat."Inchide Arena PvP" with pc.is_gm() and pc.get_map_index() == 112 begin
			say_title("Dojang:")
			say("Intarea in aceasta mapa este acum inchisa")
			say("iar fiecare jucator va fii teleportat in oras...")
			say("")
			warp_all_to_village( pc.get_map_index() , 1 )
			game.set_event_flag("budokan_open", 0)
		end
		
		when 20088.chat."Inapoi in oras" with pc.get_map_index() == 112 begin
			say_title("Maestrul Bataliilor")
			say("")
			say("Doresti sa parasesti arena si sa te intorci ")
			say("acasa, in oras?")
			say("")
			local s = select("Da", "Nu")
			if s == 1 then
				warp_to_village()
			end
		end

		when 20088.chat."GM: Intrerupe Turneul PvP" with pc.get_map_index() == 112 and pc.is_gm() and game.get_event_flag("pvp") != 0 begin
			say_title("Intrerupe Turneul PvP")
			say("")
			say("Chiar doresti sa intrerupi Turneul PvP?")
			say("")
			local s = select("Da", "Nu")
			if s == 1 then
				game.set_event_flag("pvp", 0)
				pvp_attenders = nil
				notice_all("Turneul Dojang a fost anulat.")
				say_title("Turneu Dojang anulat!")
				say("Turneul Dojang a fost anulat.")
				say("")
			end
		end

		when 20088.chat."GM: Incepe Turneul PvP" with pc.get_map_index() == 112 and pc.is_gm() and game.get_event_flag("pvp") == 0 begin

			local tournament_presets =
			{
			--	Min Lv 		Max Lv 	    Reward vnum 	Reward count
				{98, 		99,			11971,			1 },
			}

			say_title("Incepe Turneul PvP")
			say("")
		    local tournament = select("Turneul Dojang", "Inchide")

			if tournament < 5 then
				prize_vnum = tournament_presets[tournament][4]
				prize_count = tournament_presets[tournament][5]

                game.set_event_flag("pvp_price_vnum", prize_vnum)
				game.set_event_flag("pvp_price_count", prize_count)
				
				say_title("Start PvP-Tournament")
				say("")
				say("Premiul castigatorului va fii "..prize_count.."x "..item_name(prize_vnum))
				say("(vnum: "..prize_vnum..")")
				say("")
			end		

			local s = select("Start now", "Cancel")
			if s == 2 then
				return
			end

			say_title("Incepe Turneul Dojang")
			say("Turneul Dojang a inceput.")
			say("Oricine vrea sa participe se poate")
			say("inscrie aici.")
			say("")
			say("Inscrierile se pot inchide aici.")
	        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("Inscrierile pentru Turneul Dojang au fost deschise!")
			notice_all("Castigatorul va primii "..game.get_event_flag("pvp_price_count").."x "..item_name(game.get_event_flag("pvp_price_vnum")).." ca premiu!")
		end
		
		when 20088.chat."Inscrie-te la Turneul PvP" with pc.get_map_index() == 112 and game.get_event_flag("pvp") == 1 begin
			say_title(mob_name(,)..":")
			say("")
			if game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") then
				say("Te-ai inscris deja la Turneu.")
				say("")
				return
			end
			----"123456789012345678901234567890123456789012345678901234567890"|

			say("Bun venit la Dojang. In Turneu vei lupta")
			say("impotriva altor jucatori.")
			say("")
			say("Infrange toti participantii pentru a iti primii premiul")
			say("si a iti castiga un loc in Hala Eroilor!")
			say("")
			say("Doresti sa accepti provocarea?)
			say("")
			local s = select("Vreau sa particip!", "Nu am nici o sansa..")
			say_title(mob_name(,)..":")
			say("")
			if s == 1 then
				say("Vei fii chemat cand iti va venii randul, dar ai grija.")
				say("Trebuie sa stai prin preajma, altfel vei fii descalificat.")
				say("")
				say("Mult noroc!")
				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
			elseif s == 2 then
				say("Intr-adevar, pari cam slab.")
				say("Am mai avut cazuri care s-au soldat")
				say("cu moartea la acest turneu.")
				say("")
			end
		end
		
		when ,.chat."Cati participanti sunt?" with pc.get_map_index() == 112 and pc.is_gm() and game.get_event_flag("pvp") == 1 begin
			say_title("PVP-Tournament")
			say("Deocamdata sunt "..tostring(attender_count).." playeri inscrisi.")
			say("Shall the registration be closed and betting")
			say("Ar trebuii sa incepem?")
			say("")
			local s = select("Inchide inscrierile.", "Continua cu inscrierile.")
			if s == 1 then
				say_title("Inchide inscrierile:")
				say("Inscrierile au fost inchise.")
			    say("")
				game.set_event_flag("pvp", 2)
			end
		end
		    when 20088.chat."Cine participa la turneu?" with pc.get_map_index() == 112 and game.get_event_flag("pvp") == 2 begin
			setskin(NOWINDOW)
			chat("Urmatorii playeri sunt participanti ai Turneului:")
			for i = 1, attender_count, 4 do
				local chatline = ""
				for j = i, i + 4, 1 do
					if pvp_attenders[j] != nil then
						chatline = chatline..pvp_attenders[j].name.."	"
					end
				end
				syschat(chatline)
			end
			syschat("In total sunt "..attender_count.." participanti")
		end
		
		when 20088.chat."Cu cine voi concura in runda urmatoare?" with pc.get_map_index() == 112 and game.get_event_flag("pvp") == 3 and game.get_event_flag("pvp_tournament") == pc.getqf("pvp_tournament") begin
			say_title(mob_name(,)..":")
			say("")
			if pvp_manager.get_duel_partner() == nil then
				say("Nu este niciun oponent disponibil pentru tine momentan")
				say("")
				say("Daca nu iti vom gasii un adversar, vei avea norocul")
				say("de a trece in runda urmatoare fara sa lupti.")
				say("")
				return
			end
			say("In runda urmatoare vei lupta impotriva lui:")
			say("")
			say_reward(""..pvp_manager.get_duel_partner().."")
			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))
					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))
					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)
			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
				        partner_id = ai
				end
			end
			return tonumber(partner_id)
		end
		
		function findpartner_for_partnerless(name)
			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
				    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 20088.chat."GM: Curata arenele" with pc.is_gm() and game.get_event_flag("pvp") == 3 begin
			for aArena = 1, 4, 1 do
				arena[aArena][3] = 0
				arena[aArena][4] = "SLEEPING"
			end
			pvp_manager.refresh_arenas()
		end
		
		-- not working
		--[[
		when 20088.chat."GM: Incheie lupta" with pc.is_gm() and game.get_event_flag("pvp") == 2 begin
			say_title("Incheie lupta:")
			say("In care arena doresti sa inchei lupta?")
			local s = select("Arena 1", "Arena 2", "Arena 3", "Arena 4", "Inapoi")
			
			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("Incheie lupta:")
				say("Nu sunt lupte in desfasurare in aceasta arena.")
				say("")
				return
			end
			
			say_title("Incheie lupta:")
			say("Cine ar trebuii sa fie ales castigator cand lupta in arena "..s.." ")
			say("va trebuii sa fie inchisa?")
			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).." a castigat lupta impotriva lui "..tostring(pvp_attenders[fighter2].name).."!", pc.get_map_index())
				pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter1].name, 1112, 234))
				pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter2].name, 1112, 24))
			else
				pvp_attenders[fighter1].winner = false
				notice_in_map(tostring(pvp_attenders[fighter2].name).." a castigat lupta impotriva lui "..tostring(pvp_attenders[fighter1].name).."!", pc.get_map_index())
				pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter1].name, 1112, 24))
				pvp_manager.local_pc_warp(tostring(pvp_attenders[fighter2].name, 1112, 234))
			end
			
			pvp_attenders[fighter1].fight_mode = 0
			pvp_attenders[fighter2].fight_mode = 0
			
			
			arena[s][3] = 0
			pvp_manager.refresh_arenas()
			
			say_title("Incheie lupta:")
			say("Lupta s-a incheiat.")
		end
		--]]
		
		when 20088.chat."GM: Premiul Turneului Dojang" with pc.is_gm() begin
			say_title("Premiu:")
			say("Premiul actual: "..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")..")")
			say("")
			local s = select("Schimba premiul", "Close")
			if s == 2 then
				return
			end
			say_title("Schimba premiul:")
			say("Introdu codul noului premiu:")
			say("")
			local vnum = input()
			say_title("Schimba premiul:")
			say("Alege cantitatea de premii pe care o va primii castigatorul")
			say("")
			local count = input()
			game.set_event_flag("pvp_price_count", count)
			game.set_event_flag("pvp_price_vnum", vnum)
			say_title("Schimba premiul:")
			say("Premiul a fost schimbat.")
			say("Noul premiu: "..count.."x "..item_name(vnum).." (vnum: "..vnum..")")
			say("")
		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).." nu este online si a fost descalificat.", 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).." nu este online si a fost descalificat.", 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).." si "..tostring(pvp_attenders[pid2].name).." intrati in ring va rog!", 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).." a refuzat lupta impotriva "..tostring(pvp_attenders[pid2].name)..".", 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)), "a refuzat lupta impotriva "..tostring(pvp_attenders[pid1].name).. " an?", 15)
			if f2_accept != CONFIRM_OK then
				notice_in_map(tostring(pvp_attenders[pid2].name).." a refuzat lupta impotriva  "..tostring(pvp_attenders[pid1].name)..".", 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() == 112 and game.get_event_flag("pvp") == 3 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)
			affect.remove_good()
			affect.remove_bad()
			affect.remove(apply.AFFECT_JUMAGAP) -- Remove "Remove Magic"

			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", 60)
			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().." a castigat lupta impotriva lui "..pvp_manager.get_duel_partner().." prin descalificare!", 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(), 111200, 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)
				pc.start_duel(partner_vid)
				notice_in_map("Lupta dintre "..pvp_manager.get_duel_partner().." si "..pc.get_name().." incepe!", 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("Lupta incepe in "..tostring(arena[pvp_manager.get_arena()][5]).." secunde.")
				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("Lupta incepe in  "..tostring(arena[pvp_manager.get_arena()][5]).." secunde.")
				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") == 3 and pc.get_map_index() == 112 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().." has won the fight against "..pc.getname().."!", 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
			
			local target = find_pc_by_name(pvp_manager.get_duel_partner())
			local t = pc.select(target)
			pc.change_gold(game.get_event_flag("pvp_round_gold")*pvp_round_num)
			pc.select(t)
			
			pvp_manager.local_pc_warp(pvp_manager.get_duel_partner(), 1112, 24)
		end
		
		when kill with game.get_event_flag("pvp") == 3 and pc.get_map_index() == 112 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().." a castigat lupta impotriva lui "..pvp_manager.get_duel_partner().."!", 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.change_gold(game.get_event_flag("pvp_round_gold")*pvp_round_num)
			
			timer("fight_end", 5)
		end
		
		when fight_end.timer begin
			pc.warp_local(pc.get_map_index(), 111200, 23400)
			pvp_manager.local_pc_warp(pvp_manager.get_duel_partner(), 1112, 24)
		end
		
		when letter with pc.get_map_index() == 112 and game.get_event_flag("pvp") == 3 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.." a castigat Turneul Dojang!")
				notice_all(pvp_attenders[winner_id].name.." primeste "..game.get_event_flag("pvp_price_count").."x "..item_name(game.get_event_flag("pvp_price_vnum")).." ca premiu!")
				
				pvp_manager.distribute_bets(pvp_attenders[winner_id].name)
				
				local target = find_pc_by_name(pvp_attenders[winner_id].name)
				local t = pc.select(target)
				pc.give_item2(game.get_event_flag("pvp_price_vnum"), game.get_event_flag("pvp_price_count"))
				pc.select(t)
				notice_all("Turneul Dojang s-a incheiat.")
				game.set_event_flag("pvp", 0)
				
				if game.get_event_flag("pvp_tournament_type") ~= 0 and game.get_event_flag("pvp_tournament_type") < 5 then
					local player_found = false
					local new_content = ""
					local player_row = "%d\\t%s\\n"

					local f = io.open("data/"..pvp_manager.retrieve_hof_name(game.get_event_flag("pvp_tournament_type")), "r")
					if f ~= nil then
						for line in f:lines() do
							local data = string.split(line, "\\t") --format: [wins] [playername]

							if new_content ~= "" then
								new_content = new_content .. "\\n"
							end

							if tostring(data[2]) == pvp_attenders[winner_id].name and not player_found then
								new_content = new_content .. string.format(player_row, tonumber(data[1]) + 1, pvp_attenders[winner_id].name)
								player_found = true
							else
								new_content = new_content .. line
							end
						end
						f:close()
					end

					if not player_found then
						new_content = new_content .. "\\n" .. string.format(player_row, 1, pvp_attenders[winner_id].name)
					end

					pvp_manager.replace_hof(game.get_event_flag("pvp_tournament_type"), new_content)
				end

				game.set_event_flag("pvp_tournament_type", 0)
				pvp_attenders = nil
				return
			end
			
			pvp_manager.make_duel_list()
			duel_list_index = 0
			if winner_count == 2 then
				notice_all("Runda finala din Turneu incepe acum!")
			elseif winner_count <= 4 then
				notice_all("Runda semi-finala din Turneu incepe acum!")
			else
				notice_all("Urmatoarea runda din Turneu incepe acum!")
			end
			pvp_round_num = pvp_round_num + 1
			pvp_manager.refresh_arenas()
		end
		
		function distribute_bets(winner_name)
			--table.insert(betting_list, {pc.get_name(), bet_amount, player})
			local jackpot = 0
			local jackpot_winner_only = 0
			local winners = 0
			for i = 1, table.getn(betting_list), 1 do
				if betting_list[i][3] == winner_name then
					jackpot_winner_only = jackpot_winner_only + betting_list[i][2]
				end
				jackpot = jackpot + betting_list[i][2]
				winners = winners + 1
			end
			
			for i = 1, table.getn(betting_list), 1 do
				if betting_list[i][3] == winner_name then
					pvp_manager.give_jackpot_gold(betting_list[i][1], math.ceil( (betting_list[i][2] / jackpot_winner_only)*jackpot ))
				end
			end
			
		end
		
		function give_jackpot_gold(name, amount)
			local target = find_pc_by_name(name)
			if target == 0 then
				return
			end
			local t = pc.select(target)
			pc.change_money(amount)
			pc.select(t)
		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), "Te vei lupta impotriva "..asker.. "?", 15)
		end
		
		function retrieve_hof_name(tournament_num)
			local names = {"pvp_dojang"}
			return names[tournament_num]
		end

		function replace_hof(tnum, content)
			local f = io.open("data/"..pvp_manager.retrieve_hof_name(tnum), "w+")
			f:write(content)
			f:close()
		end

		function get_hof(tnum, offset, playerAmount)
			local f = io.open("data/"..pvp_manager.retrieve_hof_name(tnum), "r")
			if not f then 
				return function() return nil end 
			end

			local participants = {}
			for line in f:lines() do
				local data = string.split(line, "\t")
				if data[2] ~= nil then
					participants[data[2]] = tonumber(data[1])
				end
			end
			f:close()

			local sorter = function(tb,a,b) return tonumber(tb[b]) < tonumber(tb[a]) end
			return table.sort_by_value(participants, sorter, offset, playerAmount)
		end
		say("")
	end
end
[/b]
Download(Opţional): -

Tutorial instalare quest:
  • Salvaţi conţinutul quest-ului într-un fişier text numit de exemplu nume_quest.quest
  • Vă conectaţi la filezilla / winscp şi întrati în /usr/home/game/share/locale/germany/quest (depinde ce server aveţi).
  • Îl puneţi acolo (să fie .quest sau .lua) şi da-ţi permisiuni 777.
  • Te loghezi în FreeBSD / putty şi scrii în felul următor: cd /usr/home/game/share/locale/germany/quest apoi ./qc nume_quest.quest
  • Intraţi pe server şi scrieţi /reload q
  • Testaţi quest-ul.
Ultima oară modificat 22 Sep 2016, 17:46 de către Hamato, modificat 1 dată în total.
Pentru acest mesaj, Hamato a primit 2 (de) mulţumiri
didi22 • 7n0o0n
Avatar utilizator
Fikri
Nivel 2

Nivel 2
Mesaje: 180
Membru din: 05 Iul 2015, 11:38
Aprecieri: 19  
Mulţumiri: 3  
Medalii

Ai reusit sa instalezi questurile la cal ?.
OFF: Felicitari!.
Avatar utilizator
Syxov
Nivel 10

Nivel 10
Mesaje: 2197
Membru din: 18 Sep 2016, 17:34
Server: SonyMt2
Regat: Jinno
Aprecieri: 70  
Mulţumiri: 138  
Discord: Copiază ID
Medalii

Folositor , felicitări !
Imagine
Afișează semnătura
Avatar utilizator
Hamato
Nou Venit

Nou Venit
Mesaje: 28
Membru din: 13 Sep 2016, 18:34
Server: Metin2 Tough Fight
Regat: Chunjo
Aprecieri: 4  
Mulţumiri: 3  
Medalii

TheFapHands scrie:Ai reusit sa instalezi questurile la cal ?.
OFF: Felicitari!.
off:am renuntat, am incercat questuri de cal de la 24 de sf-uri, niciunu nu imi merge.
on: multumesc tuturor
Avatar utilizator
Hamato
Nou Venit

Nou Venit
Mesaje: 28
Membru din: 13 Sep 2016, 18:34
Server: Metin2 Tough Fight
Regat: Chunjo
Aprecieri: 4  
Mulţumiri: 3  
Medalii

up
Avatar utilizator
Titanus
Nivel 3

Nivel 3
Mesaje: 322
Membru din: 07 Sep 2015, 13:38
Server: www.m2argo.ro
Aprecieri: 22  
Mulţumiri: 181  
 Contact:
Medalii

Fii sincer, de unde il ai ?
Avatar utilizator
Hamato
Nou Venit

Nou Venit
Mesaje: 28
Membru din: 13 Sep 2016, 18:34
Server: Metin2 Tough Fight
Regat: Chunjo
Aprecieri: 4  
Mulţumiri: 3  
Medalii

Titanus scrie:Fii sincer, de unde il ai ?
am explicat si in topic, am luat questul pvp_manager.quest din resursele de la wom2, l-am facut .lua si l-am modificat eu. l-am tradus, am eliminat functiile inutile, am adaugat unele noi si am modificat cele actuale. pot sa ti-l fac de la 0 cu tw daca doresti =)
Avatar utilizator
blackghost27
Nivel 3

Nivel 3
Mesaje: 346
Membru din: 14 Sep 2013, 10:34
Server: Metin3D
Aprecieri: 552  
Mulţumiri: 37  
Medalii

Hamato,ti-am lăsat mesaj privat.te poti uita?

[ Postat de pe Samsung Galaxy Note 3 ] Imagine
Afișează semnătura
Avatar utilizator
sury1210
Nivel 3

Nivel 3
Mesaje: 369
Membru din: 08 Ian 2015, 20:43
Regat: Jinno
Aprecieri: 209  
Mulţumiri: 42  
  Rezolvări prob.: 1
Discord: Copiază ID
 Contact:
Medalii

Eu l-am pus, i-am dat permisiuni tot ii dau install in putty se instaleaza perfect acolo dar nu apare.. gen te duci object/20088 si nu e nimic acolo si daca schimb pe alt npc tot aceiasi poveste. ce fac?
Răspunde
Răspunsuri
4
Vizualizări
469
Răspunsuri
6
Vizualizări
411
Răspunsuri
5
Vizualizări
1488

Înapoi la “Quest-uri”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 6 vizitatori