Pnj Mal de rez
Pnj Mal de rez

Voici un petit script qui retire votre "Mal de la résurrection" en échange de "5 pièces d'or", détaillé pour une meilleur compréhension pour les débutants, et ceux qui évoluent :

/*
 * Copyright © 2013-2014 Molios
 */

#include "ScriptPCH.h"
#include <cstring>

#ifdef WIN32
#pragma warning(disable:4305)
#endif

enum eEnums
{		
  GOLD = 50000, // prix pour enlever le mal de rez ( 50000 = 5 Po )
};

class pnj_malderez : public CreatureScript
{
    public:

        pnj_malderez()
            : CreatureScript("pnj_malderez")
        {
        }

        //MENU GENERAL
        bool OnGossipHello(Player* pPlayer, Creature* pCreature)
        {
          if (pPlayer->HasAura(15007)) // Si le joueur à l'aura 15007 (le mal de rez) il verra les menus suivant)
          {
            pPlayer->ADD_GOSSIP_ITEM(4, "Retirer mon mal de resurrection (5 po)->", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Quitter", GOSSIP_SENDER_MAIN, 2); // Fermer le menu
            pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
          }
          else
          {
            pCreature->MonsterWhisper("Vous n'avez pas le mal de resurrection.", pPlayer->GetGUID()); // Aucune ouverture du menu, message entre pnj et joueur directement envoyé
            pPlayer->CLOSE_GOSSIP_MENU();
          }
          return true;
        }

        bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
        {
          pPlayer->PlayerTalkClass->ClearMenus();
          if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) // Menu de vérification
          {
            if (pPlayer->GetUInt32Value(PLAYER_FIELD_COINAGE) < GOLD) // Si le joueur n'a pas assez de Po ( Argent du joueur < Po demandé )
            {
              pCreature->MonsterWhisper("Vous n'avez pas assez d'argent!", pPlayer->GetGUID());
              pPlayer->CLOSE_GOSSIP_MENU();
            }
            else // Sinon
            {
              pPlayer->ADD_GOSSIP_ITEM(4, "Retirer ->", GOSSIP_SENDER_MAIN, 1);
              pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Quitter", GOSSIP_SENDER_MAIN, 2);
              pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
            }
            return true;
          }

          switch (uiAction)
          {
            case 1: // mal de rez retiré ainsi que 5 Po de votre sac
            {
              int32 GetGold = pPlayer->GetUInt32Value(PLAYER_FIELD_COINAGE);
              int32 Rob = GetGold - GOLD; // Votre argent - 5 Po
              pPlayer->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob);
              pPlayer->RemoveAurasDueToSpell(15007); // Aura retiré
              pCreature->MonsterWhisper("Vous avez retirer votre mal de rez.", pPlayer->GetGUID());
              pPlayer->CLOSE_GOSSIP_MENU();
              break;
            }
            case 2: //Quitter
            {
              pCreature->MonsterWhisper("Au revoir.", pPlayer->GetGUID());
              pPlayer->CLOSE_GOSSIP_MENU();
              break;
            }
          }
          return true;
        }
};

void AddSC_pnj_malderez()
{
    new pnj_malderez();
}
Pas mal, je vois juste 2/3 petites améliorations possibles dans le code Angel

Remplacer :
Citation :
Code :
pPlayer->GetUInt32Value(PLAYER_FIELD_COINAGE)

Par :
Code :
pPlayer->GetMoney()

C'est plus simple ^^

Et aussi :

Citation :
Code :
int32 GetGold = pPlayer->GetUInt32Value(PLAYER_FIELD_COINAGE);
              int32 Rob = GetGold - GOLD; // Votre argent - 5 Po
              pPlayer->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob);

Par :
Code :
pPlayer->SetMoney(pPlayer->GetMoney() - GOLD);

Comme ça le script est encore plus beau Tongue

Ps: tu fais comment pour afficher ton code comme ça ?
Je corrigerais plus tard, je dois retesté sous Wotlk et Cataclysm, j'essaye d'adapter au mieux pour les deux versions et pour les débutants Smile
Ce sont mes vieux scripts que je partage Smile

Retourner en haut WoW-Emu