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

C++ - Buff de Groupe


Messages recommandés

Centre de Téléchargement

Hidden Content

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

Buff de groupe.

1) Qu'est ce c'est?

2) Les prérequis.

3) Le code.

1) Qu'est ce c'est?

Le "buff de groupe" vous permet de "buffer" les personnes de votre groupes ( à partir d'une certaines distance seulement) en même temps que vous vous "buffez" vous-même.

2) Les prérequis.

  • Sources serveur.
  • Un client.
  • Des files.
  • Navicat.

3) Le code.

Server/Game/Src/skill.h

Cherchez:

SKILL_FLAG_FIRE = (1 << 26),
Ajoutez en-dessous ↓:
SKILL_FLAG_PARTY = (1 << 27),

 

 
Server/Game/Scr/char_skill.cpp

Cherchez:

SKILL_RESIST_PENETRATE

 

Ajoutez en-dessous ↓:
struct FPartyPIDCollector
{
	std::vector <DWORD> vecPIDs;
	FPartyPIDCollector()
	{
	}
	void operator () (LPCHARACTER ch)
	{
		vecPIDs.push_back(ch->GetPlayerID());
	}
};

 

Screen de changement:

https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif

Cherchez:

if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
ComputeSkill(dwVnum, this);

 

Ajoutez en-dessous ↓:
	else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty())
		ComputeSkill(dwVnum, this);
	else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty())
		{
			FPartyPIDCollector f;
			GetParty()->ForEachOnMapMember(f, GetMapIndex());
			for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
		{
		LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
		ComputeSkill(dwVnum, ch);
		}
	}

 

 
Server/Game/Src/guild.cpp

Cherchez:

if ((pkSk->dwFlag & SKILL_FLAG_SELFONLY))
{
	// 이미 걸려 있으므로 사용하지 않음.
	if (ch->FindAffect(pkSk->dwVnum))
	return;

	victim = ch;
}

 

Ajoutez en-dessous ↓:
if ((pkSk->dwFlag & SKILL_FLAG_PARTY))
	{
		if (ch->FindAffect(pkSk->dwVnum))
		return;

		victim = ch;
	}

 

 
Navicat

Ouvrez Navicat et lancez cet query dans player/skill_proto :

UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='94');
UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='95');
UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='96');
UPDATE `skill_proto` SET `setFlag`='REMOVE_BAD_AFFECT,PARTY' WHERE (`dwVnum`='109');
UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='110');
UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='111');

 

 
Si les querys ne fonctionnent pas:

Ouvrez votre database player faites un design table sur skill_proto.

cliquez sur :


setFlag
Vous verrez alors l'encadré "value" cliquez sur les "..."  et ajoutez à la 27 ième position (donc la 28 ième ligne) :

Merci Takuma pour cette remarque!


'PARTY'
 
Correction (pour ceux ayant déjà installé le système) :
Cherchez : 
	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty())
		pkVictim = this;

 

Remplacez par ->

	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
		pkVictim = this;

Faites le 2 fois car vous l'avez remplacé 2 fois.

 
Sources: Metin2Dev.

Traduction/Tutoriel/Correction: Metin2Dev et moi.

Cordialement, History.

Modifié par Funky Emulation
Core X - External 2 Internal
  • Metin2 Dev 1
  • Love 3
Lien vers le commentaire
Partager sur d’autres sites

Salut, quand j'essaye de faire le Query, ça me met une erreur, et du coup, ça ne marche pas !

Erreur MySQL

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='95')

UPDATE `skill_' at line 2

 

Je suis sous file 2016 !

Lien vers le commentaire
Partager sur d’autres sites

AQS la prochaine fois ! ^^

 

Autrement tu fais un design table sur skill_proto , tu cherche la ligne :

setFlag

 

Tu regarde dans l'encadré values:

 

et tu ajoute a la 27 ième position PARTY

 

Ensuite pour les skills Sh tu rajoute PARTY en flag.

 

Et le tour est joué!

 

Cordialement, History.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...
  • 1 mois après...
  • 3 mois après...
  • Développeur

Ouvrez Navicat et lancez cet query dans player/skill_proto :

 

UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='94')UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='95')UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='96')UPDATE `skill_proto` SET `setFlag`='REMOVE_BAD_AFFECT,PARTY' WHERE (`dwVnum`='109')UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='110')UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='111')

 

 

 

 

C'est normal que la query ne marche pas. Il manque un point virgule à chaque ligne de commande. Essayez plutôt ceci:

 

UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='94');UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='95');UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='96');UPDATE `skill_proto` SET `setFlag`='REMOVE_BAD_AFFECT,PARTY' WHERE (`dwVnum`='109');UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='110');UPDATE `skill_proto` SET `setFlag`='PARTY' WHERE (`dwVnum`='111');

 

 

Précision également, faites à la fois les queries et les modifications. Les queries ne servent qu'à mettre le setFlag à "PARTY" pour

les skills de la Shaman. Le setFlag ne sera pas rajouté avec ces lignes de commande.

 

Pense à mettre à jour ton tuto ;)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Correction des skills qui peux maintenant vous buff vous / les membres du groupe et un personnages de votre choix !

 

Pour la correction vous suffit de chercher :

	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty())
		pkVictim = this;

 

et de remettre a l'origine comme ceci ->>

	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
		pkVictim = this;

Vous devrez le faire 2 fois.

 

Et voilà pour la correction de ce bug qui était plutôt gênant !

 

Oui je sais ça fait déjà quelques mois que ce système as été publié et qu'il n'y as jamais eu de correction mais voila choses faite !

 

Cordialement, History.

Modifié par History/Liberty
Lien vers le commentaire
Partager sur d’autres sites



  • brilliantdiscord_widget
  • Flux d'Activité

    1. 37
    2. 21

      Metin2 en 2020 peut-on en parler?

    3. 0

      METIN2Project

    4. 3

      Ressources - UnPack - Metin2 Client - Officiel

    5. 0

      Barre des tâches d'argent étendue

    6. 16

      Redémarrage automatique des channels

    7. 16

      Multi Logo GM / SGM / GA

  • 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.