Raptt

 tutoriel C++ - Recensement des Modifications des Sources Metin2

Recommended Posts

 

Niveau requis Intermédiaire

Temps estimé : Entre 5 et 10 minutes

 

 

Réécriture by Xayah

 

Voici un petit listing de modifications (simples) à faire dans vos sources si vous le souhaitez !

 

Pré-requis:

  • Sources 

 

I. Listing des modifications des sources

Révélation

 

A. Activer les bonus 6/7

Révélation

Rendez-vous dans les sources game et dans le fichier char_item.cpp

Recherchez le code suivant (il est présent deux fois) :


if (LC_IsEurope() || LC_IsSingapore() || LC_IsVietnam()) return false;

Commentez les deux codes comme ceci :


//if (LC_IsEurope() || LC_IsSingapore() || LC_IsVietnam()) return false;

 

Sauvegardez & compilez !

 

B. Chance de lier les pierres sur une arme ou une armure

Révélation

Rendez-vous dans les sources game et dans le fichier char_item.cpp

Recherchez le code suivant


if (number(1, 100) <= 30)

Modifiez le dernier nombre (30) qui représente le taux de réussite.

 

C. Activer la fonction pc_change_name

Révélation

Rendez-vous dans les sources game puis dans le fichier questlua_pc.cpp

Recherchez le code suivant :


if ( LC_IsEurope() ) { lua_pushnumber(L, 5); return 1; }

Commentez le comme ceci :


//if ( LC_IsEurope() )
//{ 
	//lua_pushnumber(L, 5); 
	//return 1;
//}

 

 

D. Activer la vente des objets 70035 & 70024 dans les marchands

Révélation

Rendez-vous dans les sources game puis dans le fichier shop.cpp

Recherchez le code suivant


if (!m_pkPC)
{
	if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
	{
		//ĂŕşąŔÇ ±¸˝˝ && ¸¸łâÇŃö ŔĚşĄĆ® 
		if (item->GetVnum() == 70024 || item->GetVnum() == 70035)
		{
			return SHOP_SUBHEADER_GC_END;
		}
	}
}

Remplacez le par :


if (!m_pkPC)
{
	if (item->GetVnum() == 70024 || item->GetVnum() == 70035)
	{
		return SHOP_SUBHEADER_GC_END;
	}
}

 

 

Puis recherchez le code suivant :


//HIVALUE_ITEM_EVENT
if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
{
//ĂŕşąŔÇ ±¸˝˝ && ¸¸łâÇŃö ŔĚşĄĆ® 
if (item.vnum == 70024 || item.vnum == 70035)
{ 
continue;
}
}
//END_HIVALUE_ITEM_EVENT

Remplacez le par :


//HIVALUE_ITEM_EVENT
if (item.vnum == 70024 || item.vnum == 70035)
{ 
continue;
}
//END_HIVALUE_ITEM_EVENT

 


E. Permettre d'acheter des objets à 0 yang

Révélation

Rendez-vous dans les sources game puis dans le fichier shop.cpp

Recherchez le code suivant :


if (r_item.price <= 0)

Remplacez le par :


if (r_item.price < 0)

 

 

F. Désactiver les 6/7 sur les Costumes

Révélation

Rendez-vous dans les sources game puis dans char_item.cpp

Recherchez ceci :


case 71051 :

A la ligne là :


if (item2->GetAttributeSetIndex() == -1)

Au dessus de cette ligne, ajoutez ceci :


if (item2->GetType() == ITEM_COSTUME) //6-7 javítás kosztümön 
{ 
  	return false;
}

 

 

G. Modifier le temps de Shutdown

Révélation

Rendez-vous dans les sources game puis dans le fichier cmd_general.cpp

Recherchez ceci :


Shutdown(10);

Modifiez le nombre par un autre !  (en secondes)

 

H. Loupe désactivée pour montrer un item dans le chat

Révélation

Rendez-vous dans les sources game puis dans le fichier input_main.cpp

Recherchez le code suivant :


int ProcessTextTag(LPCHARACTER ch, const char * c_pszText, size_t len)
{
	//2012.05.17 ±è¿ë¿í
	//0 : Á¤»óÀûÀ¸·Î »ç¿ë
	//1 : ±Ý°­°æ ºÎÁ·
	//2 : ±Ý°­°æÀÌ ÀÖÀ¸³ª, °³ÀλóÁ¡¿¡¼­ »ç¿ëÁß
	//3 : ±³È¯Áß
	//4 : ¿¡·¯
	int hyperlinks;
	bool colored;

Remplacez le par :


int ProcessTextTag(LPCHARACTER ch, const char * c_pszText, size_t len)
 {
	 return 0;
	int hyperlinks;
	bool colored;

 

 

I. Bloquer le jet de yangs au sol

Révélation

Rendez-vous dans les sources game puis dans char_item.cpp

Recherchez ce code :


bool CHARACTER::DropGold(int gold)

Remplacez le par :


bool CHARACTER::DropGold(int gold)
{
  return false;
}

 

 

J. Modifier le temps de changement des bonus

Révélation

Rendez-vous dans les sources game puis dans char_item.cpp

Recherchez ce code :


										if (pPC)
										{
											DWORD dwNowMin = get_global_time() / 60;

											DWORD dwLastChangeItemAttrMin = pPC->GetFlag(msc_szLastChangeItemAttrFlag);

											if (dwLastChangeItemAttrMin + dwChangeItemAttrCycle > dwNowMin)
											{
												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» ¹Ù²ÛÁö %dºÐ À̳»¿¡´Â ´Ù½Ã º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.(%d ºÐ ³²À½)"),
														dwChangeItemAttrCycle, dwChangeItemAttrCycle - (dwNowMin - dwLastChangeItemAttrMin));
												return false;
											}

											pPC->SetFlag(msc_szLastChangeItemAttrFlag, dwNowMin);
										}

Remplacez par :


										if (pPC)
										{
											DWORD dwNowMin = get_global_time() / 60;
											//Comment for 0 switch players start 
											//DWORD dwLastChangeItemAttrMin = pPC->GetFlag(msc_szLastChangeItemAttrFlag);
											//if (dwLastChangeItemAttrMin + dwChangeItemAttrCycle > dwNowMin)
											//{ 
													//ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ĽÓĽşŔ» ąŮ˛ŰÁö %dşĐ ŔĚł»żˇ´Â ´Ů˝Ă şŻ°ćÇŇ Ľö ľř˝Ŕ´Ď´Ů.(%d şĐ ł˛Ŕ˝)"),
														//dwChangeItemAttrCycle, dwChangeItemAttrCycle - (dwNowMin - dwLastChangeItemAttrMin));
												//return false;
											//} //Comment for 0 switch players end
											pPC->SetFlag(msc_szLastChangeItemAttrFlag, dwNowMin);
										}

 

 

K. Modifier le temps des objets au sol

Révélation

Rendez-vous dans les sources game puis dans char_item.cpp

Recherchez le code suivant :


ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¶łľîÁř ľĆŔĚĹŰŔş 3şĐ ČÄ »ç¶óÁý´Ď´Ů.")); pkItemToDrop->StartDestroyEvent();

Modifiez le comme ceci (par exemple pour 30 secondes) :


ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¶łľîÁř ľĆŔĚĹŰŔş 3şĐ ČÄ »ç¶óÁý´Ď´Ů.")); pkItemToDrop->StartDestroyEvent(30);

 

 

L. Faire des émotions sans masque

Révélation

Rendez-vous dans les sources game puis dans cmd_emotion.cpp

Recherchez le code suivant :


bool CHARACTER_CanEmotion(CHARACTER& rch)
{
	// °áÈ¥½Ä ¸Ê¿¡¼­´Â »ç¿ëÇÒ ¼ö ÀÖ´Ù.
	if (marriage::WeddingManager::instance().IsWeddingMap(rch.GetMapIndex()))
		return true;

	// ¿­Á¤ÀÇ °¡¸é Âø¿ë½Ã »ç¿ëÇÒ ¼ö ÀÖ´Ù.
	if (rch.IsEquipUniqueItem(UNIQUE_ITEM_EMOTION_MASK))
		return true;

	if (rch.IsEquipUniqueItem(UNIQUE_ITEM_EMOTION_MASK2))
		return true;

	return false;
}

Remplacez le par :


bool CHARACTER_CanEmotion(CHARACTER& rch)
{
		return true;
}

 

 

M. Fix war

Révélation

Rendez-vous dans les sources game puis dans cmd_general.cpp

Recherchez le code suivant :


	if (*arg2)
	{
		str_to_number(type, arg2);

		if (type >= GUILD_WAR_TYPE_MAX_NUM)
			type = GUILD_WAR_TYPE_FIELD;
	}

Remplacez le par :


	if (*arg2)
	{
		str_to_number(type, arg2);

		if (type >= GUILD_WAR_TYPE_MAX_NUM)
			type = GUILD_WAR_TYPE_FIELD; 
		if(type < 0) //war crash fix
          	return;
	}

 

 

N.Enlever les potions à chaque Up de votre personnage

Révélation

Rendez-vous dans les sources game puis dans char.cpp

Recherchez le code suivant :


				if (GetLevel() <= 10)
					AutoGiveItem(27001, 2);
				else if (GetLevel() <= 30)
					AutoGiveItem(27002, 2);
				else
				{
					AutoGiveItem(27002, 2);
//					AutoGiveItem(27003, 2);
				}

Il suffit de supprimer le tout !

 

O.Client version check fix

Révélation

Rendez-vous dans les sources game puis dans config.cpp

Recherchez le code suivant :


if (version > date)

Remplacez le par :


if (version != date)

 

 

P.Debug de l'anti stun

Révélation

Rendez-vous dans les sources game puis dans char_resist.cpp

Recherchez ce code :


int immune_pct = 90;

Remplacez le par :


int immune_pct = 100;

 

 

Q.Supprimer la perte d’expérience à la mort

Révélation

Rendez-vous dans les sources game puis dans char_battle.cpp

Recherchez le code suivant :


void CHARACTER::DeathPenalty(BYTE bTown)
{

Remplacez par :


void CHARACTER::DeathPenalty(BYTE bTown)
{
	return;

 

 

R.Modifier le taux de réussite d'un joyau

Révélation

Rendez-vous dans les sources game puis dans char_battle.cpp

Recherchez le code suivant :


if (GetLevel() < 50)

Modifiez le nombre qui représente le taux de réussite !

 

S.Debug de la cape de bravoure + Modifier distance de cape

Révélation

Rendez-vous dans les sources game puis dans char_battle.cpp

Recherchez le code suivant :


if (number(1, 100) <= 50);

Remplacez le par :


if (number(1, 100) <= 100);

 

Modifier la distance de cape :

Recherchez :


if (DISTANCE_APPROX(ch->GetX() - m_ch->GetX(), ch->GetY() - m_ch->GetY()) < 5000)

Modifiez la valeur 5000 par la distance que vous souhaitez !

 

T.Chatter au niveau 1

Révélation

Rendez-vous dans les sources game puis dans input_main.cpp

Cherchez le code suivant :


         const int SHOUT_LIMIT_LEVEL = g_iUseLocale ? 15 : 3;

        if (ch->GetLevel() < SHOUT_LIMIT_LEVEL)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("외치기는 레벨 %d 이상만 사용 가능 합니다."), SHOUT_LIMIT_LEVEL);
            return (iExtraLen);
        }

Supprimez le ou commentez le avec des //

 

U.Passage des skills en M à 17

Révélation

Rendez-vous dans les sources game puis dans char_skill.cpp

Recherchez ce code :


if (number(1, 21 - MIN(20, GetSkillLevel(pkSk->dwVnum))) == 1)

Supprimez le ou commentez le avec des //

 

V.Lire des manuels de compétences sans expèrience

Révélation

Rendez-vous dans les sources game puis dans char_skill.cpp

Recherchez le code suivant :


need_exp = 20000;

Remplacez le par :


need_exp = 0;

 

 

W.Rendre les manuels de compétences empilables

Révélation

Rendez-vous dans les sources game puis dans char_item.cpp

Recherchez le code suivant :


ITEM_MANAGER::instance().RemoveItem(item);

Modifiez le par :


item->SetCount(item->GetCount() - 1); 

 

Attention ! N'oubliez pas de rendre les manuels empilables dans l'item_proto (flag 4 ou ITEM_STACKABLE)

 

 

X.Supprimer le Temps d'attente sur les manuels

Révélation

Rendez-vous dans les sources game puis dans char_skill.cpp

Recherchez le code suivant :


return m_pSkillLevels ? m_pSkillLevels[dwVnum].tNextRead : 0;

Modifiez le par :


return 0;

 

 

Y.Activer l'Effet de Pénétration

Révélation

Rendez-vous dans les sources game puis dans char_battle.cpp

Recherchez le code suivant :


IsPenetrate = true;

Recherchez ensuite plus bas : 


dam += GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100;

Ajoutez en dessous :


EffectPacket(SE_PENETRATE); // effet de la penetration

 

 

Z.Accélérer la vitesse du texte des quêtes

Révélation

Rendez-vous dans les sources client puis dans PythonEventManager.cpp

Recherchez le code suivant


const long c_lNormal_Waiting_Time = 10;

Modifiez la valeur 10 par celle que vous souhaitez !

 

1.Potions Rouges & Bleus illimités

Révélation

Rendez-vous dans les sources game puis dans char_item.cpp

Recherchez le code suivant :


case 27006 :

Recherchez plus bas :


item->SetCount(item->GetCount()-1);

Commenter ou supprimer cette ligne !

 

2.Debug Aura de l'Epee : Reste activé sans arme

Révélation

Rendez-vous dans les sources game puis dans char_skill.cpp

Recherchez :


bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaster)

A l'intérieur de la fonction : ajoutez :


if ((dwVnum == SKILL_GEOMKYUNG || dwVnum == SKILL_GWIGEOM) && !GetWear(WEAR_WEAPON))
return false;

044652IiEbzKv.png

 

3. Réapparaitre avec 100% de vos points de vie

Révélation

Rendez-vous dans les sources game puis dans cmd_general.cpp

Recherchez :


ch->PointChange(POINT_HP, 50 - ch->GetHP());

Modifiez toutes les instances que vous y trouverez par :


ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());

 

 

4. Modifier le nombre de joueurs dans un groupe

Révélation

Rendez-vous dans les sources game puis dans party.h

Recherchez :


PARTY_MAX_MEMBER

Ca doit ressembler à ça :


enum{
  PARTY_ENOUGH_MINUTE_FOR_EXP_BONUS = 60,
  PARTY_HEAL_COOLTIME_LONG = 60,
  PARTY_HEAL_COOLTIME_SHORT = 30,
  PARTY_MAX_MEMBER = 8,
  PARTY_DEFAULT_RANGE = 5000,
};

Modifiez 8 par la valeur que vous souhaitez :


PARTY_MAX_MEMBER = 8,

 

 

5. Flèches illimités

Révélation

Rendez-vous dans les sources game puis dans char_battle.cpp

Recherchez :


iCount = iCount - MIN(iCount, dwArrowCount);

Commenter ou supprimer ce morceau de code !

 

6. Enlever l'italique de l'écriture GM dans les messages privés

Révélation

Rendez-vous dans les sources client puis dans PythonChat.cpp

Recherchez :


CGraphicText* pkDefaultFont = (iType == CPythonChat::WHISPER_TYPE_GM) ? static_cast(DefaultItalicFont_GetResource()) : static_cast(DefaultFont_GetResource());

Remplacez :


CGraphicText* pkDefaultFont = (iType == CPythonChat::WHISPER_TYPE_GM) ? static_cast(DefaultFont_GetResource()) : static_cast(DefaultFont_GetResource());

 

 

7. Modifier le nombre de Manuel pour up le skill en G

Révélation

Rendez-vous dans les sources du game puis dans char_skill.cpp

Recherchez :


int need_bookcount = GetSkillLevel(dwSkillVnum) - 20;

Exemple : M1 > M2 > M3... avec 1 livre : Modifiez comme ci :


int need_bookcount = 0;

Exemple : M1 > M2 > M3... avec 2 livres :


int need_bookcount = 1;

 

 

8. Debug et fix des crashs du core dans les donjons

Révélation

Rendez-vous dans les sources game puis dans char.cpp

Recherchez :


void CHARACTER::SetParty(LPPARTY pkParty)

Recherchez plus bas :


	//if (m_pkDungeon && IsPC())
//SetDungeon(NULL);

Remplacez :


    if (m_pkDungeon && IsPC() && !pkParty)
       SetDungeon(NULL);

 

 

9. Activer le Drop des Fragments de pierre dragon

Révélation

Rendez-vous dans les sources game puis dans item_manager.cpp

Recherchez :


   //if (pkChr->GetLevel() >= 30 && (GetDropPerKillPct(50, 100, iDeltaPercent, "ds_drop") >= number(1, iRandRange)))
   //{
   //    const static DWORD dragon_soul_gemstone = 30270;
   //    if ((item = CreateItem(dragon_soul_gemstone, 1, 0, true)))
   //        vec_item.push_back(item);
   //}

Remplacez :


   if (pkChr->GetLevel() >= 30 && (GetDropPerKillPct(50, 100, iDeltaPercent, "ds_drop") >= number(1, iRandRange)))
   {
       const static DWORD dragon_soul_gemstone = 30270;
       if ((item = CreateItem(dragon_soul_gemstone, 1, 0, true)))
           vec_item.push_back(item);
   }

Tapez : /e ds_drop 1

Activer dès le lv30 le drop des fragments !

 

 

Pour continuer:

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

 

  • Like 5

Share this post


Link to post
Share on other sites

Pour le numéro 4, c'est non fonctionnel, voici ce qu'il faut faire :

 

Chercher ça dans shop.cpp :

if (!m_pkPC)
{
	if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
	{
		//ĂŕşąŔÇ ±¸˝˝ && ¸¸łâÇŃö ŔĚşĄĆ® 
		if (item->GetVnum() == 70024 || item->GetVnum() == 70035)
		{
			return SHOP_SUBHEADER_GC_END;
		}
	}
}

 

Et le remplacer par ça :

if (!m_pkPC)
{
	if (item->GetVnum() == 70024 || item->GetVnum() == 70035)
	{
		return SHOP_SUBHEADER_GC_END;
	}
}

 

Puis plus loin chercher :

//HIVALUE_ITEM_EVENT
if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
{
//ĂŕşąŔÇ ±¸˝˝ && ¸¸łâÇŃö ŔĚşĄĆ® 
if (item.vnum == 70024 || item.vnum == 70035)
{ 
continue;
}
}
//END_HIVALUE_ITEM_EVENT

 

 

et remplacer par :

 

//HIVALUE_ITEM_EVENT
if (item.vnum == 70024 || item.vnum == 70035)
{ 
continue;
}
//END_HIVALUE_ITEM_EVENT

 

Cependant, le mieux c'est d'aller en jeu et de taper "/e hivalue_item_sell 1" et vous pourrez les avoir en shop :)

 

Edit : Tu l'as dit plus loin, tu t'es trompé en recopiant et tu as décalé, le n°5 n'est pas présent :/

Share this post


Link to post
Share on other sites

Dans les sources côté serveur, il y a pas d'endroit précis car ça varie d'une personne à l'autre pour l'emplacement

Share this post


Link to post
Share on other sites
Prix de 0 yang accepté dans les shops
Shop.cpp

Code à rechercher //

if (r_item.price <= 0)

Code à mettre //

if (r_item.price < 0)

Share this post


Link to post
Share on other sites

Merci de partagé des modifications fonctionnel car pour certains codes ça empêche de compilé le game!

Merci d'avance.

 

 

Faire attention au TAB et autres.

Share this post


Link to post
Share on other sites

Pour le numéro 4, c'est non fonctionnel, voici ce qu'il faut faire :

 

Chercher ça dans shop.cpp :

if (!m_pkPC)
{
	if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
	{
		//ĂŕşąŔÇ ±¸˝˝ && ¸¸łâÇŃö ŔĚşĄĆ® 
		if (item->GetVnum() == 70024 || item->GetVnum() == 70035)
		{
			return SHOP_SUBHEADER_GC_END;
		}
	}
}

 

Et le remplacer par ça :

if (!m_pkPC)
{
	if (item->GetVnum() == 70024 || item->GetVnum() == 70035)
	{
		return SHOP_SUBHEADER_GC_END;
	}
}

 

Puis plus loin chercher :

//HIVALUE_ITEM_EVENT
if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
{
//ĂŕşąŔÇ ±¸˝˝ && ¸¸łâÇŃö ŔĚşĄĆ® 
if (item.vnum == 70024 || item.vnum == 70035)
{ 
continue;
}
}
//END_HIVALUE_ITEM_EVENT

 

 

et remplacer par :

 

//HIVALUE_ITEM_EVENT
if (item.vnum == 70024 || item.vnum == 70035)
{ 
continue;
}
//END_HIVALUE_ITEM_EVENT

 

Cependant, le mieux c'est d'aller en jeu et de taper "/e hivalue_item_sell 1" et vous pourrez les avoir en shop :)

 

Edit : Tu l'as dit plus loin, tu t'es trompé en recopiant et tu as décalé, le n°5 n'est pas présent :/

 

 

Ou bien, tout simplement remplacé le " if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)"

par " if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 1)"

Share this post


Link to post
Share on other sites

Mais qu'est-ce que tu dis ? xDDD

 

Là ta modification fait juste en sorte que le flag par défaut pour ne pas vendre d'item comme les 5ème bonus en magasin devient un true à la place d'un false. C'est inutile en plus d'être idiot xD

T'as même pas besoin de toucher aux sources pour mettre en vente ces objets, t'as juste à faire /e hivalue_item_sell 1 en jeu et tu peux les vendre...

Share this post


Link to post
Share on other sites

Sinon, pour permettre que les marchands (marchande, armes, armure, etc) puissent vendre des items à 0 yang il faut faire ça:

 

Dans shop.cpp chercher :

 

if (r_item.price <= 0)

 

 

Et remplacer par:

 

if (r_item.price < 0)

 

 

Faudrait mettre à jour le post ;)

Share this post


Link to post
Share on other sites

Bonjour , 

Pour les bonus 6/7 ? Je dois aller ou pour trouver le fichier chat_item.cpp ? Je n'arrive pas à le trouver ! 

Winscp ? Navicat ? Ou et comment y aller ? 

 

Ty.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.