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

Question sur les pets files 2016


huntmaster1327

Question

Bonsoir, alors voilà j'ai quelque question concernant le système de pets des files 2016 de la team FE.

J'ai pu constaté que le pet gagnait de l'xp juste en le renvoyant et le rappelant, je voudrais retirer ceci mais je ne sais pas comment faire.

Je voudrais savoir comment changer la liste des items nécessaires pour faire évoluer le pet (c'est à dire débloquer le pallier 40+).

Et enfin j'aimerais savoir comment changer les bonus que rapportent les pets. 

J'ai déjà regardé côté quest et item proto mais je ne trouve pas alors si quelqu'un pouvait m'indiquer où ça se passe :S

Merci pour vos futures réponses.

 

Version des files : 2016

Domaine (Base de données, Core, etc.) : base de données

Votre niveau (débutant, intermédiaire, avancé) : intermédiaire

 

 

En postant ma demande d'aide, j'affirme avoir lu et accepté le règlement des demandes d'aides.

Lien vers le commentaire
Partager sur d’autres sites

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

Meilleurs contributeurs dans cette question

Meilleurs contributeurs dans cette question

Images postées

Messages recommandés

  • 0

Hellow,

 

Pour le problème d'xp il faut crée un dossier share dans la racine de ton WinSCP et mettre le fichier exppettable.txt qui ce trouve dans metin2/share/local/france je crois si je me souvien bien, pour modifier les bonus ect il faut le faire dans les sources serveur =)

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Oui mais modifier les palier d'xp dans exppettable.txt c'est juste l'xp qu'il a besoin pour passer un niveau, donc en gros peu importe les paliers que je mets il gagnera toujours de l'xp via les mobs, et non par un item

Pourrais-tu m'indiquer où ça se passe dans les sources pour modifier les pets stp ?

Lien vers le commentaire
Partager sur d’autres sites

  • 0

void CNewPetActor::ItemCubeFeed(int type)
{
for (int i = 0; i < 9; ++i) {
	if (m_dwpetslotitem[i] != -1) {
		LPITEM itemxp = m_pkOwner->GetInventoryItem(m_dwpetslotitem[i]);
		if (!itemxp)
			return;
		if (itemxp->GetID() == ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetID() || m_pkOwner->GetExchange() || m_pkOwner->GetMyShop() || m_pkOwner->GetShopOwner() || m_pkOwner->IsOpenSafebox() || m_pkOwner->IsCubeOpen())
			return;
		if(type == 1)
		{
			if (itemxp->GetVnum() >= 55401 && itemxp->GetVnum() <= 55407 || itemxp->GetVnum() >= 55701 && itemxp->GetVnum() <= 55707 || itemxp->GetVnum() == 55001) {
				if(itemxp->GetVnum() == 55001)
				{
					int tmp_dur = m_dwtduration;
					if (m_dwduration+tmp_dur > m_dwtduration)
						m_dwduration = m_dwtduration;
					else
						m_dwduration += tmp_dur;
					m_pkOwner->ChatPacket(CHAT_TYPE_COMMAND, "PetDuration %d %d", m_dwduration, m_dwtduration);
				}
				else
				{
					int tmp_dur = m_dwtduration * 3 / 100;
					if (m_dwduration+tmp_dur > m_dwtduration)
						m_dwduration = m_dwtduration;
					else
						m_dwduration += tmp_dur;
					m_pkOwner->ChatPacket(CHAT_TYPE_COMMAND, "PetDuration %d %d", m_dwduration, m_dwtduration);
				}
				ITEM_MANAGER::instance().RemoveItem(itemxp);
			}
		}
		else if(type == 3)
		{
			if(itemxp->GetType() == 1 || itemxp->GetType() == 2)
			{
				SetExp(itemxp->GetShopBuyPrice() / 2, 1);
				ITEM_MANAGER::instance().RemoveItem(itemxp);
			}
		}
	}
}

for (int s = 0; s < 9; ++s) {
	m_dwpetslotitem[s] = -1;
}
}

 

à prioris cela gère les fonctions nourrir du pet, cependant en le nourrissant rien ne change. Les ID 55707 et 55001 sont des sources de nourriture pour les PET.

 

void CNewPetActor:: IncreasePetBonus() {
int tmplevel = GetLevel();
if (tmplevel % 5 == 0) {
	m_dwbonuspet[0][1] += number(1, 6);

}
if (tmplevel % 7 == 0) {
	m_dwbonuspet[1][1] += number(1, 6);
}
if (tmplevel % 4 == 0) {
	m_dwbonuspet[2][1] += number(1, 6);
}
m_pkOwner->ChatPacket(CHAT_TYPE_COMMAND, "PetBonus %d %d %d", m_dwbonuspet[0][1], m_dwbonuspet[1][1], m_dwbonuspet[2][1]);
LPITEM pSummonItem = ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID());
if (pSummonItem != NULL){
	for (int b = 0; b < 3; b++){
		pSummonItem->SetForceAttribute(b, 1, m_dwbonuspet[b][1]);
	}

}
}

 

Cette fonction sert à gérer les bonus des Pet, mais j'y comprends rien, si quelqu'un pouvait m'aider, merci.

J'ai trouvé ces bouts de code dans les sources serveur, côté game, le fichier New_PetSystem.cpp

Lien vers le commentaire
Partager sur d’autres sites

  • 0

pour les bonus tu modifie 1 . 15 . 17  et tu met les bonus que tu veux ^^

 

for (int x = 0; x < 3; ++x) //Inizializzazione bonus del pet

{

int btype[3] = { 1, 15, 17};

m_dwbonuspet[x][0] = btype[x];

m_dwbonuspet[x][1] = 0;

}

 

 

et pour des item xp je pense qu'il va falloir faire une fonction pour ca mais je suis pas sur =)

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

Salut,

pour modifier la puissance des bonus il te faut modifier la table m_dwbonuspet

La seconde valeur sur chaque ligne devrait être la puissance du bonus et la première le numéro du bonus (je n'ai pas ces fichiers, donc je peux me tromper)

Soit tu modifie la table directement soit tu modifie la fonction IncreasePetBonus

Par exemple tu peux remplacer :

    int tmplevel = GetLevel();
    if (tmplevel % 5 == 0) {
        m_dwbonuspet[0][1] += number(1, 6);

    }
    if (tmplevel % 7 == 0) {
        m_dwbonuspet[1][1] += number(1, 6);
    }
    if (tmplevel % 4 == 0) {
        m_dwbonuspet[2][1] += number(1, 6);
    }

 

Par :

    int tmplevel = GetLevel();
    m_dwbonuspet[0][1] = tmplevel // puissance du bonus n°1 = niveau du pet
    m_dwbonuspet[1][1] = tmplevel*2 // puissance du bonus n°2 = niveau du pet *2
    m_dwbonuspet[2][1] = tmplevel/2 // puissance du bonus n°3 = niveau du pet /2

 

À toi de jouer.

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

  • 0

Je me permets d'up ce sujet, car je m'attaque enfin à ces fameux pets, maintenant que j'arrive à compiler. 

 

Pour les bonus j'ai constaté qu'ils donnaient tous pv / cc / dh => ce qui correspond bien à :

 

int btype[3] = { 1, 15, 17};

 

Cependant j'ai remarqué qu'un pet ne donne pas du tout de cc. 

 

 

	for (int x = 0; x < 3; ++x) //Inizializzazione bonus del pet
{
	int btype[3] = { 1, 15, 17};
	m_dwbonuspet[x][0] = btype[x];
	m_dwbonuspet[x][1] = 0;
}
}

C'est le seul endroit où on peut voir m_dwbonuspet qui d'après ce que vous m'avez dit correspond à la valeur des bonus. Comment est-ce que ça marche et comment je pourrais faire pour avoir des bonus propres à chaque pet ?

Dois-je faire en sorte que tous mes pets aient les mêmes bonus (exemple : tous bonus mob / race / cc / ph / pv), puis que je mette des valeurs à 0 pour que mon pet ait des bonus qui lui est propre tel que le pet qui n'a pas de cc (le singe) ?

Merci à vous ça avance malgres tout ^^

 

 

Edit : Est-ce que ce code serait responsable au fait que le pet prenne des niveaux à chaque fois qu'on le rappelle ?

 

#ifdef NEW_PET_SYSTEM
DWORD CHARACTER::PetGetNextExp() const
{
if (IsNewPet()) {
	if (120 < GetLevel())
		return 2500000000;
	else
		return exppet_table[GetLevel()];
}
}
#endif

int	CHARACTER::GetSkillPowerByLevel(int level, bool bMob) const
{
return CTableBySkill::instance().GetSkillPowerByLevelFromType(GetJob(), GetSkillGroup(), MINMAX(0, level, SKILL_MAX_LEVEL), bMob); 
}

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

Pour la seconde question : rien à voir avec ton problème. Ça peut venir de la quête (sans doute) comme des sources. Peux-tu poster cette quête ?

 

Qui a codé ce torchon ?

m_dwbonuspet reçoit le n° du bonus et sa puissance, c'est sans doute dans cette zone qu'il faudra travailler pour mettre des bonus propres à chaque pet. Mais ça peut pas être sa seule occurrence, elle doit forcément être appelée plus loin (ou dans un autre fichier ?) dans une fonction comme AddEffect

Lien vers le commentaire
Partager sur d’autres sites

  • 0

En fait c'est dans la database player puis table new_petsystem que les bonus sont affichés, il y a 3 colonnes indiquant la valeur des bonus, cependant ces valeurs sont données complètement aléatoirement !

 

Voici la quête pet_system.quest :

quest pet_system begin
state start begin
	function get_pet_info(itemVnum)
		pet_info_map = {
		--  [iTEM VNUM] MOB_VNUM, DEFAULT NAME, buff_idx, spawn_effect_idx
			[53001] = { 34001, " - Phœnix", 0},
			[53002] = { 34002, " - Faon", 0},
			[53003] = { 34003, " - Phœnix de glace", 0},
			[53004] = { 34001, " - Phœnix", 0},
			[53005] = { 34004, " - Bébé Azraël", 1},
			[53006] = { 34009, " - Bébé Azraël (or)", 1},
			[53007] = { 34010, " - Bambi", 0},
			[53010] = { 34008, " - Léonidas", 0},
			[53011] = { 34007, " - Khan", 0},
			[53012] = { 34005, " - Porky", 0},
			[53013] = { 34006, " - Rufus", 0},
			[53009] = { 34012, " - Bao Bao", 0},
			[53008] = { 34011, " - Knuud", 0},
			[53014] = { 34013, " - mini-bourreau", 0},
			[53015] = { 34014, " - mini-bourreau (or)", 0},
			[53016] = { 34015, " - Boney", 0},
			[53017] = { 34016, " - Phoenix de jade", 0},
			[53228] = { 34033, " - Croissant de lune bleu", 0},
			[53229] = { 34032, " - Croissant de lune rouge", 0},
			[53230] = { 34034, " - Brebis blanche", 0},
			[53231] = { 34035, " - Bélier bleu", 0},
			[53232] = { 34039, " - Huashin", 0},
			[53233] = { 34056, " - Robin", 0},
			[53234] = { 34057, " - Wayne", 0},
			[53236] = { 34058, " - Valentino", 0},
			[53237] = { 34059, " - Valentinia", 0},
			[53022] = { 34021, " - Sheldon", 0},
			[53023] = { 34022, " - Cooper", 0},
			[53024] = { 34023, " - Bébé panthère", 0},
			[53025] = { 34024, " - Bébé léopard", 0},
			[53218] = { 34023, " - Bébé panthère", 0},
			[53219] = { 34024, " - Bébé léopard", 0},
			[53220] = { 34023, " - Bébé panthère", 0},
			[53221] = { 34024, " - Bébé léopard", 0},
			[53222] = { 34026, " - Tête de citrouille", 0},
			[53223] = { 34027, " - Balayette", 0},
			[53224] = { 34028, " - Flocon", 0},
			[53225] = { 34029, " - Clochette", 0},
			[53227] = { 34031, " - Coeur courrouce", 0},
			[53226] = { 34030, " - Cupidon", 0},
			[53021] = { 34018, " - Rufus des glaces", 0},
			[53019] = { 34019, " - Kahn arctique", 0},
			[53018] = { 34020, " - Léonidas polaire", 0},
			[53020] = { 34017, " - Porky des glaces", 0},

		}

		itemVnum = tonumber(itemVnum)

		return pet_info_map[itemVnum]
	end

	function get_spawn_effect_file(idx)
		effect_table = {
			[0] = nil,
			[1] = "d:\\\\ymir work\\\\effect\\\\etc\\\\appear_die\\\\npc2_appear.mse",
		}
		return effect_table [idx]
	end

	    when 34057.use or 53229.use or
		 53230.use or 53228.use or 53017.use or 53016.use or 53015.use or 53014.use or
		 53013.use or 53008.use or 53009.use or 53001.use or 53002.use or 53003.use or
		 53004.use or 53005.use or 53006.use or 53007.use or 53010.use or 53011.use or
		 53236.use or 53237.use or 
		 55709.use or 55710.use or 53022.use or 53023.use or 53024.use or 53025.use or
		 53218.use or 53219.use or 53220.use or 53221.use or 53222.use or 53223.use or
		 53224.use or 53225.use or 53226.use or 53227.use or 53021.use or 53019.use or 53018.use or 53020.use or 
		 53012.use or 53013.use or 53231.use or 53232.use or 53233.use or 53234.use  begin

		local pet_info = pet_system.get_pet_info(item.vnum)

		if null != pet_info then

			local mobVnum = pet_info[1]
			local petName = pet_info[2]
			local spawn_effect_file_name = pet_system.get_spawn_effect_file(pet_info[3])

			if true == pet.is_summon(mobVnum) then
				if spawn_effect_file_name != nil then
						pet.spawn_effect (mobVnum, spawn_effect_file_name)
				end
				pet.unsummon(mobVnum)
			else
				if pet.count_summoned() < 1 then
					pet.summon(mobVnum, petName, false)
				else
					syschat("Vous avez déjà invoqué un animal de compagnie.")
				end

				if spawn_effect_file_name != nil then
					pet.spawn_effect(mobVnum, spawn_effect_file_name)
				end

			end -- if pet.is_summon
		end  -- if null != pet_info
	end -- when
end -- state
end -- quest

 

PetSystems.lua :

quest PetSystems begin
state start begin
	function get_pet_info(itemVnum)
		pet_info_map = {
		--  [iTEM VNUM] MOB_VNUM, DEFAULT NAME, buff_idx, spawn_effect_idx
			[55701]     = { 34041, "'s Petit singe", 0},
			[55702]     = { 34045, "'s Petite araignée", 0},
			[55703]     = { 34049, "'s Petit Razador", 0},
			[55704]     = { 34053, "'s Petit Nemere", 0},
			[55705]     = { 34036, "'s Petit dragon", 0},
			[55706]     = { 34064, "'s Bébé de Meley", 0},


		}
		itemVnum = tonumber(itemVnum)
		return pet_info_map[itemVnum]
	end

	when 55701.use or 55702.use or 55703.use or 55705.use or 55706.use or 55704.use begin
		local pet_info = PetSystems.get_pet_info(item.vnum)

		if null != pet_info then

			local mobVnum = pet_info[1]
			local petName = pet_info[2]


			if true == newpet.is_summon(mobVnum) then					
				newpet.unsummon(mobVnum)
			else
				if newpet.count_summoned() < 1 then
					newpet.summon(mobVnum, petName, false)
				else
					syschat("Vous avez déjà un familier d'invoqué.")
				end					
			end -- if pet.is_summon
		end  -- if null != pet_info
	end -- when
end
end

 

 

pour le m_dwbonuspet, pourrais-tu me faire un exemple ? Afin que je puisse avoir une bonne base pour modifier ? =s

 

Merci à toi Sparks.

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

Bon, ça m'avance pas en fait... (Désolé je découvre le système à travers tes posts)

 

La bdd tu dis, on devrait pouvoir facilement la squizzer. Je telechargerai ces files à mon retour. À la limite poste le fichier cpp des pets pour que je puisse y jeter un coup d'œil.

Dans tous les cas je pourrai t'aider plus facilement d'ici une semaine. ;)

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Funkiest

pour les bonus tu modifie 1 . 15 . 17  et tu met les bonus que tu veux ^^

 

for (int x = 0; x < 3; ++x) //Inizializzazione bonus del pet

{

int btype[3] = { 1, 15, 17};

m_dwbonuspet[x][0] = btype[x];

m_dwbonuspet[x][1] = 0;

}

 

 

et pour des item xp je pense qu'il va falloir faire une fonction pour ca mais je suis pas sur =)

 

T'abuses je t'ai dit ça en PV la dernière fois xD

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Hellow,

 

Le tableau dans navicat te montre en effet les bonus mais ces bonus sont fixé depuis les sources donc tu peux modifier les bonus a partir de navicat mais faut tous les faire a la main ( un peux relou hein ) que veux tu faire exactement ? je pourrais t'aider j'ai passer pas mal de temps sur ces familiers ^^

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Oui je me doute de cela ^^

J'aimerais modifier leur bonus, pour qu'ils aient tous un bonus qui leur est propre (exemple le singe qui donne du bonus / paré contre une race, et l'araignée vs une autre race)

Et faire en sorte qu'ils prennent plus d'xp quand on les appelle car si on spam l'appel et le renvoi on le up 40 en 30 secondes lol

Lien vers le commentaire
Partager sur d’autres sites

  • 0

bah une fonction 

for (int x = 0; x < 3; ++x) //Inizializzazione bonus del pet
{
int btype[3] = { 1, 15, 17};
m_dwbonuspet[x][0] = btype[x];
m_dwbonuspet[x][1] = 0;
}

 

c'est un exemple de fonction mais j'ai pas fait de fonction sur les bonus des familiers mais tu peux te promener sur internet tu trouvera surement ton bonheur =)

Lien vers le commentaire
Partager sur d’autres sites

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.


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.