Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...

C++ - Réduire le Temps de Résurrection


Messages recommandés

  • Développeur

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 :

 

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

  • Metin2 Dev 1
  • Love 1
Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 7
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Jours populaires

  • Funkiest

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
Lien vers le commentaire
Partager sur d’autres sites

  • Funkiest

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

Lien vers le commentaire
Partager sur d’autres sites

  • Développeur

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.

  • Love 1
Lien vers le commentaire
Partager sur d’autres sites



  • brilliantdiscord_widget
  • Flux d'Activité

    1. 6

      problème de connexion à mon serveur local (je suis débutant dans ce genre d'entreprise )

    2. 2

      problème de lancement serveur

    3. 9
    4. 0

      [PVM/PVP] ATLAX2 - EASY PLAY

    5. 2

      problème de lancement serveur

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.