PNJ distributeur d'items
Bonjour à tous.

Dans ce post je vous propose un PNJ qui peut trouver sa place sur serveur fun car il s'agit d'un PNJ distributeur d'item. Le principe est simple : vous rentrez l'ID de l'item et le PNJ vous le donne automatiquement.

Je vous donne ici le script mais je vous laisse créer le PNJ dans la base de donnée.

Code :
#include "precompiled.h"
#include <cstring>

bool GossipHello_npc_jean(Player *pPlayer, Creature *pCreature)
{
    pPlayer->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_CHAT, "Je voudrais un objet", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1, "", 0, true); //Cette option fait apparaitre une boite de dialogue permettant aux joueurs d'entrer l'ID de l'item
    /*pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Comment savoir quelle code vous donner ?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);*/ //Peut servir si vous désirez faire un tutoriel rapide sur le PNJ.

    pPlayer->SEND_GOSSIP_MENU(/*95000*/, pCreature->GetGUID());
    return true;
}

bool GossipSelect_npc_jean(Player *pPlayer, Creature *pCreature, uint32 sender, uint32 uiAction)
{
    if(sender == GOSSIP_SENDER_MAIN)
    {
        if(uiAction == GOSSIP_ACTION_INFO_DEF+2)
        {
            pPlayer->SEND_GOSSIP_MENU(/*95001*/, pCreature->GetGUID());
        }
    }
    return true;
}

bool GossipSelectWithCode_npc_jean(Player *pPlayer, Creature *pCreature, uint32 sender, uint32 uiAction, const char *code)
{
    if(sender == GOSSIP_SENDER_MAIN)
    {
        switch(uiAction - GOSSIP_ACTION_INFO_DEF)
        {
        case 1:
            uint32 itemId = static_cast<uint32>(strtol(code, NULL, 10));
            if(itemId != 0)
            {
                uint32 noSpaceForCount = 0;

                ItemPosCountVec dest;
                uint8 msg = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT,dest, itemId, 1, &noSpaceForCount);
                if(dest.empty())
                {
                    DoScriptText(/*-95001*/, pCreature);
                    return false;
                }

                Item *pItem = pPlayer->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
                pPlayer->SendNewItem(pItem, 1, true, false);
                pPlayer->CLOSE_GOSSIP_MENU();
                return true;
            }
            break;
        }
    }
    return false;
}
            

void AddSC_npc_jean()
{
    Script *script;

    script = new Script;
    script->Name = "npc_jean";
    script->pGossipHello = &GossipHello_npc_jean;
    script->pGossipSelect = &GossipSelect_npc_jean;
    script->pGossipSelectWithCode = &GossipSelectWithCode_npc_jean;
    script->RegisterSelf(false);
}

A l'heure où je publie ce script, il fonctionne sous ScriptDev2.

@+
pas mal mais autant donner la commande .additem


une chose qui serait bien sa serait par exemple de crée une nouvelle table du style item_gratuit avec dedans un field "id" et le joueur devrais taper un id, si celui ci est dans la table il reçois l'item, sinon non Hihi sa permettrais au admin du serveur de choisir les items qu'il voudrais donner

Retourner en haut Accueil