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

C++ - Voir les Boss sur la MiniMap


Messages recommandés

Centre de Téléchargement

Hidden Content

    Give reaction to this post to see the hidden content.
( Interne )

Bonjour,

 

Ce système ressemble à celui avec l'affichage des Metins sur la Minimap, cette fois ce sont les Boss qui sont concernés.

 

Pré-requis:

  • Des sources client
  • Votre client
  • Notepadd++

 

I. Partie Sources Client

Révélation

 

A. Fichier InstanceBase.h

Révélation

Cherchez la ligne suivante :

NAMECOLOR_WAYPOINT,

Ajoutez celle-ci en dessous :

NAMECOLOR_BOSS,

 

 

Cherchez la ligne suivante

        BOOL                    IsEnemy();

Ajoutez celle-ci en dessous

        BOOL                    IsBoss();

 

Fin de ce fichier !

 

B. Fichier InstanceBase.cpp

Révélation

Cherchez la ligne suivante :

BOOL CInstanceBase::IsFlag()

Copiez ceci en dessous du bloc :

BOOL CInstanceBase::IsBoss()
{
	const CPythonNonPlayer::TMobTable *pkTab = CPythonNonPlayer::Instance().GetTable(GetRace());
  
  	if (!pkTab)
      		return false;

	if (pkTab->bRank >= 4 && !IsStone() && pkTab->bType == 0)
		return TRUE;

	return FALSE;
}

Fin du fichier !

 

C. Fichier InstanceBaseEffect.cpp

Révélation

Cherchez le code suivant :

else if (IsEnemy())
    {
        return NAMECOLOR_MOB;
    }

Remplacez le par ceci :

    else if (IsEnemy())
    {
        if (IsBoss())
            return NAMECOLOR_BOSS;
     
        return NAMECOLOR_MOB;
    }

Fin de ce fichier !

 

D. Fichier PythonCharacterManagerModule.cpp

Révélation

Cherchez la ligne suivante : 

PyModule_AddIntConstant(poModule, "NAMECOLOR_WAYPOINT", CInstanceBase::NAMECOLOR_WAYPOINT);

Ajoutez cette ligne en dessous :

PyModule_AddIntConstant(poModule, "NAMECOLOR_BOSS", CInstanceBase::NAMECOLOR_BOSS);

Fin de ce fichier !

 

E. Fichier PythonMiniMap.h

Révélation

Cherchez la ligne suivante

    TInstanceMarkPositionVector        m_NPCPositionVector;

Ajoutez ceci en dessous :

TInstanceMarkPositionVector        m_BossPositionVector;

Fin du fichier !

 

F. Fichier PythonMiniMap.cpp

Révélation

Cherchez la ligne suivante : 

m_NPCPositionVector.clear(

Ajoutez ceci en dessous :

m_BossPositionVector.clear();

 

 

Cherchez ensuite ce code :

    // NPC
    STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, CInstanceBase::GetIndexedNameColor(CInstanceBase::NAMECOLOR_NPC));
    aIterator = m_NPCPositionVector.begin();
    while (aIterator != m_NPCPositionVector.end())
    {
        TMarkPosition & rPosition = *aIterator;
        m_WhiteMark.SetPosition(rPosition.m_fX, rPosition.m_fY);
        m_WhiteMark.Render();
        ++aIterator;
    }

En dessous de ce code, ajoutez ceci :

   // Boss
    STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, CInstanceBase::GetIndexedNameColor(CInstanceBase::NAMECOLOR_BOSS));
    aIterator = m_BossPositionVector.begin();
    while (aIterator != m_BossPositionVector.end())
    {
        TMarkPosition & rPosition = *aIterator;
        m_WhiteMark.SetPosition(rPosition.m_fX, rPosition.m_fY);
        m_WhiteMark.Render();
        ++aIterator;
    }

 

 

Cherchez ensuite ce code :

        else if (pkInstEach->IsEnemy())
        {
            aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX;
            aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY;

            m_MonsterPositionVector.push_back(aMarkPosition);
        }

Ajoutez ceci en dessous :

  else if (pkInstEach->IsBoss())
        {
            aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX;
            aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY;

            m_BossPositionVector.push_back(aMarkPosition);
        }

Fin de ce fichier !

 

 

Succès ! Vous pouvez désormais compiler votre lanceur !

 

 

 

II. Partie Python

Révélation

 

A. Fichier colorinfo.py (root)

Révélation

Cherchez la ligne

CHAT_RGB_WHISPER = (74, 225, 74)

Ajoutez ceci en dessous :

CHR_NAME_RGB_BOSS = (9, 22, 255)

 

Info. Voici un site qui peut vous fournir des codes couleurs si vous souhaitez les modifier Codes Couleur HTML

Fin de ce fichier, sauvegardez !

 

B.Fichier introloading.py (root)

Révélation

Cherchez la ligne suivante :

			chrmgr.NAMECOLOR_WAYPOINT : colorInfo.CHR_NAME_RGB_WAYPOINT,

Ajoutez ceci en dessous :

			chrmgr.NAMECOLOR_BOSS : colorInfo.CHR_NAME_RGB_BOSS,

Sauvegardez !

 

Succès ! N'oubliez pas de repack votre fichier root et de le placer dans votre dossier pack !

 

 

Pour continuer:

Si vous avez un problème n'hésitez pas à poster vos demandes dans la section AQS !

  • Metin2 Dev 9
  • Lmao 3
  • Love 17

« Au commencement, il n’y avait que l’océan puis l’île-mère surgit des eaux… Te Fiti. Son cœur avait un immense pouvoir, celui d’engendrer la vie. L’univers tout entier profitait de ses bienfaits. Mais avec le temps, le cœur de Te Fiti fut très convoité. Certains pensaient que le posséder, c’était posséder le pouvoir de la création… Aujourd’hui encore, Te Ka et les monstres des ténèbres sont toujours à la recherche du cœur. Ils sont cachés dans l’obscurité qui continuera de se propager… »

Lien vers le commentaire
Partager sur d’autres sites

  • Développeur
Il y a 3 heures, Aremas a dit :

 


///boss
BOOL CInstanceBase::IsBoss()
{
    if (GetRace() == 691)
        return TRUE;
    if (GetRace() == 692)
        return TRUE;
    if (GetRace() == 693)
        return TRUE;
    if (GetRace() == 791)
        return TRUE;
    if (GetRace() == 991)
        return TRUE;
    if (GetRace() == 992)
        return TRUE;
    if (GetRace() == 993)
        return TRUE;
    if (GetRace() == 1091)
        return TRUE;
    if (GetRace() == 1092)
        return TRUE;
    if (GetRace() == 1093)
        return TRUE;
    if (GetRace() == 1094)
        return TRUE;
    if (GetRace() == 1095)
        return TRUE;
    if (GetRace() == 2191)
        return TRUE;
    if (GetRace() == 1191)
        return TRUE;
    if (GetRace() == 1192)
        return TRUE;
    if (GetRace() == 1304)
        return TRUE;
    if (GetRace() == 1306)
        return TRUE;
    if (GetRace() == 1307)
        return TRUE;
    if (GetRace() == 1901)
        return TRUE;
    if (GetRace() == 1902)
        return TRUE;
    if (GetRace() == 1903)
        return TRUE;
    if (GetRace() == 2206)
        return TRUE;
    if (GetRace() == 2207)
        return TRUE;
    if (GetRace() == 2291)
        return TRUE;
    if (GetRace() == 2306)
        return TRUE;
    if (GetRace() == 2307)
        return TRUE;
    if (GetRace() == 2492)
        return TRUE;
    if (GetRace() == 2493)
        return TRUE;
    if (GetRace() == 2494)
        return TRUE;
    if (GetRace() == 2598)
        return TRUE;
    if (GetRace() == 3090)
        return TRUE;
    if (GetRace() == 3091)
        return TRUE;
    if (GetRace() == 3190)
        return TRUE;
    if (GetRace() == 3191)
        return TRUE;
    if (GetRace() == 3290)
        return TRUE;
    if (GetRace() == 3291)
        return TRUE;
    if (GetRace() == 3390)
        return TRUE;
    if (GetRace() == 3391)
        return TRUE;
    if (GetRace() == 3490)
        return TRUE;
    if (GetRace() == 3491)
        return TRUE;
    if (GetRace() == 3590)
        return TRUE;
    if (GetRace() == 3591)
        return TRUE;
    if (GetRace() == 3690)
        return TRUE;
    if (GetRace() == 3691)
        return TRUE;
    if (GetRace() == 3790)
        return TRUE;
    if (GetRace() == 3791)
        return TRUE;
    if (GetRace() == 3890)
        return TRUE;
    if (GetRace() == 3891)
        return TRUE;
    if (GetRace() == 5001)
        return TRUE;
    if (GetRace() == 5004)
        return TRUE;
    if (GetRace() == 5002)
        return TRUE;
    if (GetRace() == 5161)
        return TRUE;
    if (GetRace() == 5162)
        return TRUE;
    if (GetRace() == 5163)
        return TRUE;
    if (GetRace() == 6091)
        return TRUE;
    if (GetRace() == 6191)
        return TRUE;

    return FALSE;
}
///////////////
///////////////

 

 

C'est un peu sale tout ça...

 

Y'a moyen d'améliorer ce méli-mélo ^^. Trois possibilités :

BOOL CInstanceBase::IsBoss()
{
	switch(GetRace())
		case 691:
		case 692:
		case 693:
		case 791:
		case 991:
		case 992:
		case 993:
		case 1091:
		case 1092:
		case 1093:
		case 1094:
		case 1095:
		case 2191:
		case 1191:
		case 1192:
		case 1304:
		case 1306:
		case 1307:
		case 1901:
		case 1902:
		case 1903:
		case 2206:
		case 2207:
		case 2291:
		case 2306:
		case 2307:
		case 2492:
		case 2493:
		case 2494:
		case 2598:
		case 3090:
		case 3091:
		case 3190:
		case 3191:
		case 3290:
		case 3291:
		case 3390:
		case 3391:
		case 3490:
		case 3491:
		case 3590:
		case 3591:
		case 3690:
		case 3691:
		case 3790:
		case 3791:
		case 3890:
		case 3891:
		case 5001:
		case 5004:
		case 5002:
		case 5161:
		case 5162:
		case 5163:
		case 6091:
		case 6191:
			return TRUE;
		break; // Si on ne break pas, il passe au case suivant
		default:
			return FALSE;
		break;
}

 

 La manière plus propre, mais toujours un peu sale, ou alors une manière plus propre de faire la même chose:

BOOL CInstanceBase::IsBoss()
{
	const char maxElems = 56;
	int iVnums[maxElems] = { 691, 692, 693, 791, 991, 992, 993, 1091,
			1092, 1093, 1094, 1095, 2191, 1191, 1192, 1304, 1306,
			1307, 1901, 1902, 1903, 2206, 2207, 2291, 2306, 2307,
			2492, 2493, 2494, 2598, 3090, 3091, 3190, 3191, 3290,
			3291, 3390, 3391, 3490, 3491, 3590, 3591, 3690, 3691,
			3790, 3791, 3890, 3891, 5001, 5004, 5002, 5161, 5162,
			5163, 6091, 6191 };

	for (int i=0; i < maxElems; i++)
	{
		if (GetRace() == i)
			return TRUE;
	}
	return FALSE;
}

 

Le problème de Metin2 c'est qu'ils sont bêtes au point d'avoir oublié de différencier les vrais boss avec de simples pierres Metin ou monstres nommés.

C'est con, mais c'est pas irréalisable, je m'y étais penché un peu plus dessus... En gros l'idée c'est qu'un boss c'est un rank supérieur ou égal à 4, et qui n'est pas une pierre metin.

 

Dans l'idéal et en troisième option, pour faire un truc vraiment plus propre il faudrait faire un truc du style:

BOOL CInstanceBase::IsBoss()
{
	const CPythonNonPlayer::TMobTable *pkTab = CPythonNonPlayer::Instance().GetTable(GetRace());

	if (pkTab->bRank >= 4 && pkTab->bType == 0 && !IsStone())
		return TRUE;

	return FALSE;
}

C'est beaucoup plus agréable à lire et plus simple d'utilisation ;).

La condition c'est que le Type soit égal à 0 (NPC de type mob), que son rank soit supérieur ou égal à S_KNIGHT ( = 4 comme le chef orc, et 5 comme le Dragon Rouge, de rank KING), et que le mob en question ne soit pas une pierre Metin (car leur rank est égal à 5 !)

 

Des bisous :D

Modifié par Kameyu
  • Love 4
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Merci à vous deux, même si c'est sale il faut se dire que metin est sale et tout reprendre au propre c'est long et à ce compte là autant faire son jeu, mais je suis d'accord avec toi kame c'est beaucoup plus jolie ta manière ;)

Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...
  • 2 semaines après...


  • brilliantdiscord_widget
  • Flux d'Activité

    1. 21

      Metin2 en 2020 peut-on en parler?

    2. 0

      METIN2Project

    3. 3

      Ressources - UnPack - Metin2 Client - Officiel

    4. 0

      Barre des tâches d'argent étendue

    5. 16

      Redémarrage automatique des channels

    6. 16

      Multi Logo GM / SGM / GA

    7. 0

      comment extraire les fichiers locale.epk locale.eix sur le serveur officiel ?

    8. 2

      Funky-emu.net -> fr.metin2.dev

  • En ligne récemment

    • Aucun utilisateur enregistré regarde cette page.

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.