[C++] Gossip Item
Salut à tous !
j'aimerais faire un gossip item, mais je bloque vraiment, voila où j'en suis :

[code=cpp]class gossip_custom_item : public ItemScript
{
public:

gossip_custom_item()
: ItemScript("gossip_custom_item")
{
}

bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/)
{
player->ADD_GOSSIP_ITEM( 3, "Bla bla bla" , GOSSIP_SENDER_MAIN, 1);
player->ADD_GOSSIP_ITEM( 0, "bla bla bla, encore !" , GOSSIP_SENDER_MAIN, 2);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,item->GetGUID());



return true;
}

};[/code]

Création d'un script classique, jusque la tout fonctionne, le gossip menu apparait bien in game mais j'aimerait effectuer une action lorsque le joueur clique sur un option.
Mais dans la classe ItemScript, le OnGossipSelect n'existe pas !

Auriez vous une solution ?

Cordialement, Arcanios !


EDIT : ce que j'aimerai faire exactement

Le joueur à un item dans son inventaire, il fait clic droit dessus cela lui ouvre un gossip Menu.
Quand le joueur clique sur une option, un fonction se déclenche et exécute des actions (script du genre player->TeleportTo() ou Player->setHealth() )

car l'équivalent du OnGossipSelect n'existe pas dans la Classe ItemScript.
[code=cpp]class gossip_custom_item : public ItemScript
{
public:

gossip_custom_item()
: ItemScript("gossip_custom_item")
{
}

bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/)
{
player->ADD_GOSSIP_ITEM( 3, "Bla bla bla" , GOSSIP_SENDER_MAIN, 1);
player->ADD_GOSSIP_ITEM( 0, "bla bla bla, encore !" , GOSSIP_SENDER_MAIN, 2);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,item->GetGUID());

sScriptMgr->LoadDatabase();
return true;
}

};[/code]
essaye ça
Après avoir testé, cela ne fonctionne pas.

De toute façon cela m'aurait étonné car le sScriptMgr->LoadDatabase() ne fait que charger la base de donnée, et ne récupère pas si le joueur a cliqué sur l'option ou non.

Une autre idée ? peut être ? Hihi
Pourquoi faire un ItemScript ? Si tu le fait pour un gameobject autant faire un GameObjectScript non ?

Sinon explique un peu mieux ce que tu veux faire Clin
Non justement Hihi la est toute la subtilité Xd

J'aimerai que le personnage puisse parler à une item Xd comme pierre de foyer, pour faire, par exemple, un téléporteur mobile, que le joueur puisse transporter.

Mais je n'arrive pas a récupérer sur quel Gossip Item Option a cliqué le joueur ...
Hello,

Regarde dans les autres scripts si tu trouves une fonction genre "GossipSelection" quelque chose comme ça Clin

Sgt

EDIT: Tout compte fait je ne sais pas si tu peux le faire sous Trinity
EDIT2: Tu as accès aux fonctions suivantes :

[code=cpp]
class ItemScript : public ScriptObject
{
protected:

ItemScript(const char* name);

public:

bool IsDatabaseBound() const { return true; }

// Called when a dummy spell effect is triggered on the item.
virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Item* /*target*/) { return false; }

// Called when a player accepts a quest from the item.
virtual bool OnQuestAccept(Player* /*player*/, Item* /*item*/, Quest const* /*quest*/) { return false; }

// Called when a player uses the item.
virtual bool OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) { return false; }

// Called when the item expires (is destroyed).
virtual bool OnExpire(Player* /*player*/, ItemTemplate const* /*proto*/) { return false; }
};
[/code]

Donc soit il faut ré-implémente certaines fonctions, comme pour les scripts des GOs ou créatures ou alors quelqu'un l'a déjà fait (certainement). Ou alors il ne faut pas faire comme ça, sous Ascent c'est comme ça en tout cas Hihi
Alors, merci de ta réponse,

J'ai déjà cherché les fonctions OnGossipSelect, mais en vain ...

Si c'est faisable sous Trinity (je l'ai déjà vu Hihi )

J'ai déjà regardé les fonctions dispo dans ItemScript.

J'ai cherché à les ré-implémenter, mais il y a des dépendance dans tout les coin, c'est compliqué.

Et pour plusieurs jours de recherche, personne ne l'as déjà publié sur Internet.
(12-05-2011 18:54)Arcanios a écrit :  Après avoir testé, cela ne fonctionne pas.

De toute façon cela m'aurait étonné car le sScriptMgr->LoadDatabase() ne fait que charger la base de donnée, et ne récupère pas si le joueur a cliqué sur l'option ou non.

Une autre idée ? peut être ? Hihi

j'avais mal compris la question enfaite, puis j'ai afk, si tu peut éditer le 1er poste et dire exactement ce que tu veut ça serait bien
Voila, c'est fait :


ce que j'aimerai faire exactement

Le joueur à un item dans son inventaire, il fait clic droit dessus cela lui ouvre un gossip Menu.
Quand le joueur clique sur une option, un fonction se déclenche et exécute des actions (script du genre player->TeleportTo() ou Player->setHealth() )

car l'équivalent du OnGossipSelect n'existe pas dans la Classe ItemScript.


Merci de ta réponse !
http://pastebin.com/fHh2wWcw
inspire toi de ça Smile

Retourner en haut Accueil