Aller au contenu

Nouveau membre ?! Pense à te présenter pour accéder au contenu du forum !

New member ?! Introduce yourself to get access to the forum !

Kameyu

 tutoriel / partage [C++] Réduire le temps de résurrection

Messages recommandés

Salut à tous; ça faisait un moment que j'avais pas posté mais why not !

Ce tuto aura pour but de vous expliquer comment réduire le délai avant le respawn, voyez donc :

 

P_U9Oz5UTfytvcFzCpgxYQ.png

 

Passons sans plus attendre au vif du sujet.

cmd_general.cpp cherchez :

int iTimeToDead = (event_time(ch->m_pkDeadEvent) / passes_per_sec);
 

À partir de cette ligne, jusqu'à la ligne :

	//END_PREVENT_HACK
 

Remplacez tout par mon code :

	int iTimeToDead = (event_time(ch->m_pkDeadEvent) / passes_per_sec);
	int iTown = iTimeToDead - 2; // Retire 2 secondes au temps de rez en ville (default = 6)
	int iHere = iTimeToDead - 5; // Retire 5 secondes au temps de rez sur place (default = 9)
	
	if (subcmd != SCMD_RESTART_TOWN && (!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG))
	{
		if (!test_server)
		{
			if (ch->IsHack())
			{
				//성지 맵일경우에는 체크 하지 않는다.
				if (false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
				{
					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iTimeToDead - (180 - g_nPortalLimitTime));
					return;
				}
			}
			
			if (iHere > 170) // RESPAWN_HERE
			{
				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iHere - 170);
				return;
			}
		}
	}//PREVENT_HACK
	//DESC : 창고, 교환 창 후 포탈을 사용하는 버그에 이용될수 있어서
	//		쿨타임을 추가
	if (subcmd == SCMD_RESTART_TOWN)
	{
		if (ch->IsHack())
		{
			//길드맵, 성지맵에서는 체크 하지 않는다.
			if ((!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG) ||
				false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
			{
				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iTimeToDead - (180 - g_nPortalLimitTime));
				return;
			}
		}
		
		if (iTown > 173) // RESPAWN_TOWN
		{
			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 마을에서 재시작 할 수 없습니다. (%d 초 남음)"), iTown - 173);
			return;
		}
	}
	//END_PREVENT_HACK
 

Modifiez ensuite les données de ces valeurs à votre souhait :

	int iTown = iTimeToDead - 2; // Retire 2 secondes au temps de rez en ville
	int iHere = iTimeToDead - 5; // Retire 5 secondes au temps de rez sur place
 

Attention aux tabulations en début de ligne ! Compilez, profitez.

ATTENTION: vous pouvez réduire à 0 le temps d'attente mais ne vous étonnez pas si votre client plante après plusieurs résurrections.

Également, mettre une valeur trop faible créerait de la triche pour du PK, alors je vous invite à vérifier les valeurs que vous mettez ;).

 

Source: Moi, en cherchant un peu, c'est pas bien compliqué Ctrl+F ^^

Merci à Galet pour le petit effort, mais c'était pas le bon endroit :P

Modifié par Kameyu

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut !

 

Merci du tutoriel, mais sur le coup, HardCode is real haha, bien que le tutoriel fonctionne, je pense que la valeur peut directement être changée sans passer par une soustraction vu qu'elle est (sauf erreur de ma part) déjà attribuée dans char_battle.cpp, c'est d'ailleurs de là que vient le 180.

 

Après ça permet juste de changer le temps à la mort du personnage plutôt qu'au moment où le joueur clique sur "Revivre ici" (d'ailleurs que se passe-t'il si le joueur clique sur "Revivre ici" une fois que le temps imparti est automatiquement écoulé ?)

 

Ce n'est qu'un rapide coup d’œil porté aux sources alors n'hésitez pas à me dire si je fais fausse route, ce qui est probablement le cas vu que je n'ai pas testé la chose ! ^^

 

Voici le bout de code en question :

 

	SCharDeadEventInfo* pEventInfo = AllocEventInfo();	if (IsPC())	{		pEventInfo->isPC = true;		pEventInfo->dwID = this->GetPlayerID();		m_pkDeadEvent = event_create(dead_event, pEventInfo, PASSES_PER_SEC(180));	}	else	{		pEventInfo->isPC = false;		pEventInfo->dwID = this->GetVID();		if (IsRevive() == false && HasReviverInParty() == true)		{			m_pkDeadEvent = event_create(dead_event, pEventInfo, bImmediateDead ? 1 : PASSES_PER_SEC(3));		}		else		{			m_pkDeadEvent = event_create(dead_event, pEventInfo, bImmediateDead ? 1 : PASSES_PER_SEC(10));		}	}
 

Merci du tuto Sparkk !

Modifié par GuiguiOfMetin

Partager ce message


Lien à poster
Partager sur d’autres sites

Hmmm ouais en fait ça revient à faire la même mais à un endroit différent. C'est un peu plus clair sur le tien;

mais il me semble que le 170 viendrait de leur système pour "compter" en secondes (passes_per_sec).

 

Je valide aussi.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ça pose pas de problème genre à 6 secondes avec le temps de reconnexion par Cité ? Genre ça explose par à cause de la variable négative ? :3

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est grosso-modo ce que j'expliquais, de mon côté, vu que je ne me suis pas énormément penché sur le passes_per_sec j'ai pensé comme toi mais j'ai aussi pensé au fait que ça pourrait être le temps avant qu'un joueur ne recommence automatiquement à la cité si aucune action n'est entreprise pendant 3 minutes (à tester?). Par ailleurs, pour compter les secondes j'ai pris l'habitude d'utiliser un des nombreux moyens de comptage de seconde dans les sources, j'utilise quand j'en ai besoin le "thecore_heart->pulse" mais ça revient à peu près au même que les autres.

 

En tout cas sympa le tutoriel, c'est ce qui fait avancer cette bonne vieille section

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour avoir accidentellement testé, ça nous fait juste respawn instantanément.

D'ailleurs Galet, précise que c'est dans char_battle.cpp ton bout de code ^^.

 

EDIT: J'ai testé de modifier le code que tu nous as cité Galet, la ligne qui définit le temps de rez dans ton code est:

m_pkDeadEvent = event_create(dead_event, pEventInfo, PASSES_PER_SEC(180));

 

Il faut réduire 180 en fonction du nombre de secondes que l'on veut enlever au temps de rez.

Par contre, j'ai pas encore trouvé comment réduire l'un OU l'autre; j'y travaille.

 

EDIT2: J'ai trouvé comment marche le système. Je mets à jour le tuto.

Partager ce message


Lien à poster
Partager sur d’autres sites

Yep j'ai déjà précisé où se trouvait le bout de code :o

 

"déjà attribuée dans char_battle.cpp"

 

Merci du rajout et au plaisir ! ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

J'avais pas vu; mais t'inquiète ^^.

Partager ce message


Lien à poster
Partager sur d’autres sites

×

Information importante

By using this site, you agree to our Conditions d’utilisation.