Problema Quest Dungeon / RUN

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Închis
Avatar utilizator
rawn3cr0
Nivel 2

Nivel 2
Mesaje: 226
Membru din: 08 Iul 2014, 01:26
Aprecieri: 149  
Mulţumiri: 6  
  Rezolvări prob.: 1
Medalii

*Problemă/Întrebare:Quest Dungeon / Run
Tipologie server:-
*Resursă folosită:-
*ServerFiles utilizat:-
*Syserr:-
Poză:-
*Detalii suplimentare:
Am luat un quest simplu pentru un run pe care l-am modificat pentru ceva run-uri simple.
Problema e ca atunci cand esti in grup in dungeon / run si unul isi da logout/disconnect/change character, scoate tot grupul din dungeon/run.
Eu vreau sa il fac normal. Cand cineva din grup isi da logout sa nu mai scoata si restul grupului din dungeon.
Imagine

Cod: Selectaţi tot

quest DragonLair_dungeon begin
	state start begin
        when 20090.chat."Dungeon RUN 3 -0" with pc.get_map_index() == 73 begin
            if pc.get_level() < 75 then -- Daca jucatorul este sub nivel 15
                say_title("DR:")--Text cu nume NPC
                say("[ENTER]Nivelul tau este prea scazut")-- Text cu paragraf
            elseif pc.get_level() > 105 then--Daca jucatorul este peste nivel 75
                say_title("DR:")--Text cu nume NPC
                say("[ENTER]Nivelul tau este prea mare")-- Text cu paragraf
--[Camilo's code]
			elseif pc.getqf("last_exit_time") > get_time() then 
				say_title("DR:")
				local wait_time = pc.getqf("last_exit_time")-get_time()
				say(string.format("Wait time:%s", get_time_format(wait_time)))
			elseif party.is_in_dungeon() then
				say_title("DR:")
				say("Party is in dungeon now")
			elseif not party.is_map_member_flag_lt("last_exit_time" , get_time()) then
				say_title("DR:")
				say("Someone has to wait cooltime")
			else
				if party.is_party() then-- Daca jucatorul are inter lv 15 si lv 75 ( alles andere )
					if party.is_leader() then
						d.new_jump_party(207, 8435, 10668) --no 00
						DragonLair_dungeon.createDungeon() --new line
					else
						say("You are not leader group")
					end
					else
						d.new_jump(207, 843500, 1066800)-- Teleport pe harta ( Dungeon Map )
						DragonLair_dungeon.createDungeon() --new line
					end
--[Camilo's code]
				server_timer("timelimit_dungeon_exit", 300, d.get_map_index()) -- Seteaza un timer de 1 minut pentru a termina temnita    
			end
		end	

--[STAGE 1] Inceput


		when login or enter with DragonLair_dungeon.isInDungeon(207) begin-- Când jucatorul se conecteaza ?i se afla pe indexul har?ii temni?ei
			d.set_warp_location(73, 2418, 12750)--Se seteaza locatia
		end

		when 8031.kill or 8032.kill or 8033.kill or 8034.kill with d.getf("DragonLair_stage01") == 1 begin-- Declan?atorul de ucidere a fost interogat cu semnalizarea misiunii
			local count = d.getf("kill_counter01") -1-- Variabila setata sa numere ?i scazând -1 din a treia
			d.setf("kill_counter01", count)-- Questflag pentru numarare pe misiune
			if count >= 1 then-- Întreba?i daca valoarea numarului este mai mare decât 1
				d.notice("Ramas: "..count.."")-- Ie?ire text calculata cu valoarea curenta -1
			elseif count == 0 then-- este contorul 0
				d.notice("Sarcina 1 finalizata.")-- Ie?ire ca a?i finalizat nivelul
				d.setf("DragonLair_stage02", 1)--Indicatorul de cautare nivelul 2 setat pentru interogare
				d.setf("kill_counter02", 1)--Contor setat cu valoarea 100
				d.regen_file("data/dungeon/dragon_lair/boss.txt")--Regenfile [STAGE 2]
			end
		end
--[STAGE 1] Sfarsit

-- [STAGE 2] Inceput
		when 2493.kill with d.getf("DragonLair_stage02") == 1 begin
			local count = d.getf("DragonLair_stage02") -1
			d.setf("kill_counter02", count)
			if count >= 1 then
				d.notice("Ramas: "..count.."")
			elseif count == 0 then
				d.notice("Sarcina 2 finalizata.")
				server_timer("end_dungeon_exit", 20 , d.get_map_index())--Cateva secunde pentru iesire
			end
			
			d.setqf("last_exit_time" , get_time()+60*10) --[Camilo's code] 10 minutes
			
		end
--[STAGE 2] Sfarsit



-- Functie terminare limita de timp dungeon
		when timelimit_dungeon_exit.server_timer begin
			if d.select(get_server_timer_arg()) then
				DragonLair_dungeon.clearDungeon()
				d.exit_all()
			end
		end

-- Functie iesire terminare dungeon
		when end_dungeon_exit.server_timer begin
			if d.select(get_server_timer_arg()) then
				DragonLair_dungeon.clearDungeon()
				d.exit_all()
			end
		end

-- Verificare de securitate la deconectare
		when logout begin
			d.set_warp_location(73, 2418, 12750)
			if DragonLair_dungeon.isInDungeon() then
				DragonLair_dungeon.clearDungeon()
			end
			
		end

	end

-- FUNCTIONS BEGIN
	state __FUNCTIONS__ begin
		function isInDungeon(idx)
			return pc.get_map_index() >= (idx * 10000) and pc.get_map_index() < ((idx+1) * 10000)-- Calculul indexului har?ii pentru interogarea de securitate
		end
		
		
		
		--function IsInDungeon()
			--local map_index = 217;
			--local player_index = pc.get_map_index();
			--return player_index >= map_index*10000 and player_index < (map_index+1)*10000;
		--end -- function
		
		
		
		function clearDungeon()
			d.setf("DragonLair_stage01", 0)
			d.setf("DragonLair_stage02", 0)
			d.kill_all()
			d.clear_regen()
			d.clear_regen()
			clear_server_timer("end_dungeon_exit", get_server_timer_arg())
		end
		
		

		function createDungeon()
			d.regen_file("data/dungeon/dragon_lair/metins.txt")--Regenfile [STAGE 1]
			d.notice("Distruge toate pietrele de metin.")-- Text
			d.setf("DragonLair_stage01", 1)--Setul de nivel 1 pentru interogare
			d.setf("kill_counter01", 4)--Contor setat cu valoarea 3
		end
		
		
		
	end
-- FUNCTIONS END

end--Quest
Avatar utilizator
rawn3cr0
Nivel 2

Nivel 2
Mesaje: 226
Membru din: 08 Iul 2014, 01:26
Aprecieri: 149  
Mulţumiri: 6  
  Rezolvări prob.: 1
Medalii

Am rezolvat tot eu. Daca are cineva problema asta:
In game src / party.cpp

Cod: Selectaţi tot

void CParty::UpdateOfflineState(DWORD dwPID)
{
	TPacketGCPartyAdd p;
	p.header = HEADER_GC_PARTY_ADD;
	p.pid = dwPID;
	memset(p.name, 0, CHARACTER_NAME_MAX_LEN+1);
	for (TMemberMap::iterator it = m_memberMap.begin(); it != m_memberMap.end(); ++it)
	{
		if (it->second.pCharacter && it->second.pCharacter->GetDesc())
		{
			
			it->second.pCharacter->GetDesc()->Packet(&p, sizeof(p));
			//if (it->second.pCharacter->GetDungeon())
				//it->second.pCharacter->GetDungeon()->ExitAllToStartPosition();
			//else
				//it->second.pCharacter->GetDesc()->Packet(&p, sizeof(p));
		}
	}
}
Srergeti sau comentati ce e cu // si linia it->second.pCharacter->GetDesc()->Packet(&p, sizeof(p)); stergeti un [TAB]
Închis
Răspunsuri
1
Vizualizări
1010
Răspunsuri
6
Vizualizări
426
Răspunsuri
7
Vizualizări
120
Răspunsuri
3
Vizualizări
469

Înapoi la “Probleme rezolvate”

  • Informaţie
  • Cine este conectat

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