Le système de gossip ayant changer un de mes script ne fonctionne plus correctement, par exemple lorsque je clique sur suivant et bien les choix ne font que s'additionner et même quand l'on clique sur menu principale sa ne nettoie pas al fenêtre de chat du pnj et défoix une petite fenêtre rouge apparait avec écrit : Thos NPC too many quest and/ or gossip options.
voici un screen pour illustré ceci :
donc pouvez vous m'aidez voici le script :
Code :
#include "precompiled.h"
#include <sstream>
#include "sc_gossip.h"
#include "sc_creature.h"
#define NEXT_PAGE "-> Page suivante"
#define PREV_PAGE "<- Page precedente"
#define MAIN_MENU "<= [Menu Principal]"
using namespace std;
using namespace SD2P_NAMESPACE;
using namespace SD2P_NAMESPACE::SD2P_RECOMPENSE_NAMESPACE;
namespace
{
enum
{
// npc_text
NPC_TEXT_NOTHING = 100100,
NPC_TEXT_INVITEC = 100101,
NPC_TEXT_INVITER = 100102,
NPC_TEXT_VALID = 100103,
// Divers.
GOSSIP_ACHAT = GOSSIP_ACTION_INFO_DEF + 1,
GOSSIP_NEXT_PAGEC = GOSSIP_ACTION_INFO_DEF + 2,
GOSSIP_PREV_PAGEC = GOSSIP_ACTION_INFO_DEF + 3,
GOSSIP_NEXT_PAGEI = GOSSIP_ACTION_INFO_DEF + 4,
GOSSIP_PREV_PAGEI = GOSSIP_ACTION_INFO_DEF + 5,
GOSSIP_SHOW_ITEMS = GOSSIP_ACTION_INFO_DEF + 6,
GOSSIP_CONFIRM = GOSSIP_ACTION_INFO_DEF + 7,
GOSSIP_QUIT = GOSSIP_ACTION_INFO_DEF + 8,
GOSSIP_MAIN_MENU = GOSSIP_ACTION_INFO_DEF + 9,
};
ListPage PageCat, PageItem, CatSelect;
// En cas d'erreur interne (produite uniquement en cas de reload
// durant une transaction d'un joueur), reinitialisation de l'interface.
void AffichErreur(Player * const pPlayer, Creature * const pCreature)
{
pPlayer->SEND_GOSSIP_MENU(NPC_TEXT_NOTHING, pCreature->GetObjectGuid());
}
// Fonction permettant de faire un lancer de des en fonction d'une probabilite.
bool GagneJet(const uint8 &SuccesProbability)
{
return urand(1, 100) <= SuccesProbability;
}
// Fonction d'affichage des categories
void AffichCat(Player * const pPlayer, Creature * const pCreature)
{
const Vendor * pVendor = GetVendor(pCreature->GetEntry());
if (!pVendor || pVendor->m_VCategories.empty())
{
AffichErreur(pPlayer, pCreature);
return;
}
Vendor::VCategorie_t VCat = pVendor->m_VCategories;
Vendor::VCategorie_t::size_type i = PageCat[pPlayer] * NB_ITEM_PAGE;
// Affichage Page Precedente.
if (PageCat[pPlayer] > 0)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, PREV_PAGE, GOSSIP_PREV_PAGEC, 0);
for ( ; i < VCat.size() && i < (NB_ITEM_PAGE * (PageCat[pPlayer] + 1)); ++i)
{
const Categorie * pCat = GetCategorie(VCat[i]);
if (!pCat)
{
AffichErreur(pPlayer, pCreature);
return;
}
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, pCat->GetName().c_str(), GOSSIP_SHOW_ITEMS, i);
}
// Affichage Page Suivante.
if (i < VCat.size())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, NEXT_PAGE, GOSSIP_NEXT_PAGEC, 0);
pPlayer->SEND_GOSSIP_MENU(NPC_TEXT_INVITEC, pCreature->GetObjectGuid());
}
// Fonction d'affichage des items d'une categorie
void AffichItem(Player * const pPlayer, Creature * const pCreature)
{
const Vendor * pVendor = GetVendor(pCreature->GetEntry());
if (!pVendor || pVendor->m_VCategories.empty())
{
AffichErreur(pPlayer, pCreature);
return;
}
Vendor::VCategorie_t VCat = pVendor->m_VCategories;
Categorie::VIRecompense_t::size_type i = PageItem[pPlayer] * NB_ITEM_PAGE;
const Categorie * pCat = GetCategorie(VCat[CatSelect[pPlayer]]);
if (!pCat)
{
AffichErreur(pPlayer, pCreature);
return;
}
// Affichage Page Precedente.
if (PageItem[pPlayer] > 0)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, PREV_PAGE, GOSSIP_PREV_PAGEI, 0);
for ( ; i < pCat->size() && i < (NB_ITEM_PAGE * (PageItem[pPlayer] + 1)); ++i)
{
const ItemRecompense * pRec = pCat->GetItem(i);
if (!pRec)
{
AffichErreur(pPlayer, pCreature);
return;
}
const ItemSD2P * pItem = GetItemSD2P(pRec->m_Entry);
if (!pItem)
{
AffichErreur(pPlayer, pCreature);
return;
}
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_2, pItem->m_Name.c_str(), GOSSIP_CONFIRM, i);
}
// Affichage Page Suivante.
if (i < pCat->size())
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, NEXT_PAGE, GOSSIP_NEXT_PAGEI, 0);
// Affichage lien vers menu Principal.
if (VCat.size() > 1)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, MAIN_MENU, GOSSIP_MAIN_MENU, 0);
pPlayer->SEND_GOSSIP_MENU(NPC_TEXT_INVITER, pCreature->GetObjectGuid());
}