Problema eliminare licori in duel

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Închis
Avatar utilizator
Luciaaη
Nou Venit

Nou Venit
Mesaje: 4
Membru din: 04 Ian 2021, 20:29
Server: !
Aprecieri: 17  
Mulţumiri: 0
Medalii

*Problemă/Întrebare: Salut!Am adaugat sistemul pentru blocarea licorilor rosii in duel si merge totul ok.Insa am adaugat si codul elixirului red in functie dar acesta nu se dezactiveaza in duel,ma poate ajuta cineva? Multumesc
Tipologie server: -
*Resursă folosită: ht tps://pastebin.com/nRHzFQSU
*ServerFiles utilizat: Marty
*Syserr: Nici-o eroare
Poză:-
*Detalii suplimentare:-
Avatar utilizator
Alcinous
Untrusted User

Untrusted User
Mesaje: 670
Membru din: 13 Noi 2020, 23:46
Server: None
Regat: Jinno
Aprecieri: 322  
Mulţumiri: 487  
Discord: Copiază ID

Pentru acest mesaj, Alcinous for the post:
Luciaaη
Avatar utilizator
Luciaaη
Nou Venit

Nou Venit
Mesaje: 4
Membru din: 04 Ian 2021, 20:29
Server: !
Aprecieri: 17  
Mulţumiri: 0
Medalii

Manah scrie: ↑09 Ian 2021, 09:12 https://metin2.dev/board/topic/14809-ho ... -duel-pvp/

[ Postat de pe iPhone ] Imagine
Mersi de raspuns.Am incercat si cu ala dar tot nu merge..
Avatar utilizator
Amun3808
Nivel 1

Nivel 1
Mesaje: 54
Membru din: 29 Noi 2020, 01:21
Regat: Chunjo
Aprecieri: 29  
Mulţumiri: 10  
Discord: Copiază ID
Medalii

Fereasca sfantul... Imi vine sa plang cand vad ce se posteaza pe aici..

In loc sa adaugi N'spe mii de functii si 1000 de linii retardate in sursa ai putea doar sa adaugi un mic check in char_item.cpp sa vezi daca jucatorul are duel si daca are sa dea return.
Doar cauta case item_auto_hp_recovery si pune check-ul inainte sau dupa if (CArenaManager::instance().IsArenaMap(GetMapIndex()))

Eventual ai putea sa faci o mica functie care sa verifice pentru licori sau elixire si sa inlocuiesti toate verificarile pentru ArenaMap cu ea, asta ca sa nu ai conditii inutile lasate in sursa, din moment ce anulezi toate licorile indiferent daca jucatorul e in arena sau nu.

In fine, bafta !
Pentru acest mesaj, Amun3808 for the post:
Luciaaη
Avatar utilizator
[Reizo]
Ţepar / Untrusted User

Ţepar / Untrusted User
Mesaje: 1301
Membru din: 22 Oct 2019, 15:44
Server: SAPPHIRE2
Regat: Chunjo
Aprecieri: 409  
Mulţumiri: 4322  
Discord: Copiază ID
 Contact:
Medalii

Amun3808 scrie: ↑09 Ian 2021, 22:34 Fereasca sfantul... Imi vine sa plang cand vad ce se posteaza pe aici..

In loc sa adaugi N'spe mii de functii si 1000 de linii retardate in sursa ai putea doar sa adaugi un mic check in char_item.cpp sa vezi daca jucatorul are duel si daca are sa dea return.
Doar cauta case item_auto_hp_recovery si pune check-ul inainte sau dupa if (CArenaManager::instance().IsArenaMap(GetMapIndex()))

Eventual ai putea sa faci o mica functie care sa verifice pentru licori sau elixire si sa inlocuiesti toate verificarile pentru ArenaMap cu ea, asta ca sa nu ai conditii inutile lasate in sursa, din moment ce anulezi toate licorile indiferent daca jucatorul e in arena sau nu.

In fine, bafta !
E ok in mare parte ce zici, da' daca le are puse nu se va da jos asta-i problema. Si pentru duel o sa trebuiasca sa schimbe if-u nuj dc ai dat pentru arena.

Pentru check duel poti folosi daca nu ma insel IsFight, si ca sa dezactiveze elixirul poti sa faci check si sa ii spui ca nu poate incepe duelul daca are un elixir activat .
Imagine
Afișează semnătura
Avatar utilizator
Amun3808
Nivel 1

Nivel 1
Mesaje: 54
Membru din: 29 Noi 2020, 01:21
Regat: Chunjo
Aprecieri: 29  
Mulţumiri: 10  
Discord: Copiază ID
Medalii

[Reizo] scrie: ↑10 Ian 2021, 00:58
Amun3808 scrie: ↑09 Ian 2021, 22:34 Fereasca sfantul... Imi vine sa plang cand vad ce se posteaza pe aici..

In loc sa adaugi N'spe mii de functii si 1000 de linii retardate in sursa ai putea doar sa adaugi un mic check in char_item.cpp sa vezi daca jucatorul are duel si daca are sa dea return.
Doar cauta case item_auto_hp_recovery si pune check-ul inainte sau dupa if (CArenaManager::instance().IsArenaMap(GetMapIndex()))

Eventual ai putea sa faci o mica functie care sa verifice pentru licori sau elixire si sa inlocuiesti toate verificarile pentru ArenaMap cu ea, asta ca sa nu ai conditii inutile lasate in sursa, din moment ce anulezi toate licorile indiferent daca jucatorul e in arena sau nu.

In fine, bafta !
E ok in mare parte ce zici, da' daca le are puse nu se va da jos asta-i problema. Si pentru duel o sa trebuiasca sa schimbe if-u nuj dc ai dat pentru arena.

Pentru check duel poti folosi daca nu ma insel IsFight, si ca sa dezactiveze elixirul poti sa faci check si sa ii spui ca nu poate incepe duelul daca are un elixir activat .
Nu am dat pentru arena, am zis sa adauge check-ul inainte sau dupa if-ul de la arena.
Aici ai dreptate, daca intra in duel cu elixirul activat acel check in case n-o sa mai aiba nicio valoare daca nu dezactiveaza elixirul.

In loc sa ne mai batem capul cu case-urile, mai bine blocam direct din AutoRecoveryItemProcess.
Bazat pe ceea ce i-a dat celalalt baiat mai sus, uite aici treaba completa:
pvp.cpp
adauga la final:

Cod: Selectaţi tot

bool CPVPManager::HasDuel(LPCHARACTER pkChar) {
	CPVPSetMap::iterator it = m_map_pkPVPSetByID.find(pkChar->GetPlayerID());

	if (it != m_map_pkPVPSetByID.end()) {
		itertype(it->second) it2 = it->second.begin();

		while (it2 != it->second.end()) {
			CPVP* pvp = *it2++;
			if (pvp->IsFight())
				return true;
		}
	}
	return false;
}
pvp.h
cauta

Cod: Selectaţi tot

CPVP *			Find(DWORD dwCRC);
adauga dupa

Cod: Selectaţi tot

bool                    HasDuel(LPCHARACTER pkChar);
char_item.cpp
Cauti

Cod: Selectaţi tot

void CHARACTER::AutoRecoveryItemProcess(const EAffectTypes type)
{
si adaugi

Cod: Selectaţi tot

	if (CPVPManager::Instance().HasDuel(quest::CQuestManager::instance().GetCurrentCharacterPtr()))
		return;
Nu am testat personal pentru ca n-am avut timp, dar cineva mi-a dat mesaj pe discord pentru chestia asta si i-am dat ce v-am pus voua aici. A testat si a zis ca merge cum trebuie.

Ceea ce ar trebui sa testati voi este daca elixirul functioneaza cum trebuie la war intre bresle sau in three_way(flag war).
Daca elixirul este blocat acolo o sa fie nevoie sa adaugati o extra conditie ca sa verifice daca jucatorul este in mapa de war/flag war.

Bafta

Edit:
Am uitat sa precizez ca puteti folosi acest check si pentru restul licorilor.
De asemenea, ar trebui sa stergeti check-urile pentru Arena din moment ce or sa fie inutile daca blocati licorile in duel.
Pentru acest mesaj, Amun3808 a primit 2 (de) mulţumiri
alex9987 • Luciaaη
Avatar utilizator
Luciaaη
Nou Venit

Nou Venit
Mesaje: 4
Membru din: 04 Ian 2021, 20:29
Server: !
Aprecieri: 17  
Mulţumiri: 0
Medalii

Rezolvat.Mersi Amun!
Închis
Răspunsuri
10
Vizualizări
514
Răspunsuri
6
Vizualizări
829
Răspunsuri
7
Vizualizări
795

Înapoi la “Probleme rezolvate”

  • Informaţie
  • Cine este conectat

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