BGames
Olá visitante! Seja bem vindo á BGames!

Para ter total acesso ao nosso fórum é preciso que você se registre.

Registre-se Aqui!


PARA VER LINKS E IMAGENS É PRECISO SE REGISTRAR!


BGames
Olá visitante! Seja bem vindo á BGames!

Para ter total acesso ao nosso fórum é preciso que você se registre.

Registre-se Aqui!


PARA VER LINKS E IMAGENS É PRECISO SE REGISTRAR!

BGames
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

BGamesEntrar

Fórum de Desenvolvimento de Jogos e Programação


O autor desta mensagem foi banido do fórum - Mostrar mensagem

description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
como faço pra colocar esse npc no meu server?
O autor desta mensagem foi banido do fórum - Mostrar mensagem

description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
Olá HardKill,
Substitua o código por este

Código:

/*
Transmogrification
By Rochet2
*/

#include "ScriptPCH.h"

class NPC_Transmogrify : public CreatureScript
{
public:
  NPC_Transmogrify() : CreatureScript("NPC_Transmogrify") { }

  bool OnGossipHello(Player* pPlayer, Creature* pUnit)
  {
      pPlayer->PlayerTalkClass->ClearMenus();
      for (uint8 Slot = EQUIPMENT_SLOT_START; Slot < EQUIPMENT_SLOT_END; Slot++)
        if (Item* pItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, Slot))
        {
            uint32 Quality = pItem->GetTemplate()->Quality;
            if(Quality == ITEM_QUALITY_UNCOMMON || Quality == ITEM_QUALITY_RARE || Quality == ITEM_QUALITY_EPIC)
              if(char* SlotName = GetSlotName(Slot))
                  pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, SlotName, EQUIPMENT_SLOT_END, Slot);
        }
        pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "Nevermind..", EQUIPMENT_SLOT_END+2, 0);
        pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pUnit->GetGUID());       
        return true;
  }

  bool OnGossipSelect(Player* pPlayer, Creature* pUnit, uint32 sender, uint32 uiAction)
  {
      pPlayer->PlayerTalkClass->ClearMenus();
      if(sender == EQUIPMENT_SLOT_END)
      {
        if (Item* OLD = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, uiAction))
        {
            uint64 GUID = pPlayer->GetGUID();
            Items[GUID].clear();
            for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
              if (Item* pItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, i))
                  if(IsSuitable(pItem, OLD, pPlayer))
                    if(Items[GUID].find(pItem->GetTemplate()->DisplayInfoID) == Items[GUID].end())
                        Items[GUID][pItem->GetTemplate()->DisplayInfoID] = pItem, pPlayer->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_INTERACT_1, pItem->GetTemplate()->Name1, uiAction, pItem->GetTemplate()->DisplayInfoID, AreYouSure(uiAction, pItem), 0, false);

            for (uint8 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
              if (Bag* pBag = pPlayer->GetBagByPos(i))
                  for (uint32 j = 0; j < pBag->GetBagSize(); j++)
                    if (Item* pItem = pPlayer->GetItemByPos(i, j))
                        if(IsSuitable(pItem, OLD, pPlayer))
                          if(Items[GUID].find(pItem->GetTemplate()->DisplayInfoID) == Items[GUID].end())
                              Items[GUID][pItem->GetTemplate()->DisplayInfoID] = pItem, pPlayer->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_INTERACT_1, pItem->GetTemplate()->Name1, uiAction, pItem->GetTemplate()->DisplayInfoID, AreYouSure(uiAction, pItem), 0, false);

            if(Items[GUID].empty())
            {
              pPlayer->GetSession()->SendNotification("You have no suitable items in your inventory");
              OnGossipHello(pPlayer, pUnit);
              return true;
            }
            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "Back..", EQUIPMENT_SLOT_END+1, 0);
            pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pUnit->GetGUID());
        }
        else
            OnGossipHello(pPlayer, pUnit);
      }
      else if(sender == EQUIPMENT_SLOT_END+1)
        OnGossipHello(pPlayer, pUnit);
      else if(sender == EQUIPMENT_SLOT_END+2)
        pPlayer->PlayerTalkClass->SendCloseGossip();
      else
      {
        uint64 GUID = pPlayer->GetGUID();
        Item* OLD = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, sender);
        if(!OLD || Items[GUID].find(uiAction) == Items[GUID].end() || !IsSuitable(Items[GUID][uiAction], OLD, pPlayer))
        {
            pPlayer->GetSession()->SendNotification("There is no suitable item in the slot");
            return true;
        }
        else
        {
            pPlayer->UpdateUInt32Value(PLAYER_VISIBLE_ITEM_1_ENTRYID + (sender * 2), Items[GUID][uiAction]->GetEntry());
            pPlayer->GetSession()->SendAreaTriggerMessage("%s transmogrified", GetSlotName(sender));
        }
        Items[GUID].clear();
        OnGossipHello(pPlayer, pUnit);
      }
      return true;
  }
private:
  std::map<uint64, std::map<uint32, Item*> > Items; // Items[GUID][DISPLAY] = item

  char * GetSlotName(uint8 slot)
  {
      switch(slot)
      {
      case EQUIPMENT_SLOT_HEAD      : return "Head";
      case EQUIPMENT_SLOT_SHOULDERS : return "Shoulders";
      case EQUIPMENT_SLOT_BODY      : return "Shirt";
      case EQUIPMENT_SLOT_CHEST    : return "Chest";
      case EQUIPMENT_SLOT_WAIST    : return "Waist";
      case EQUIPMENT_SLOT_LEGS      : return "Legs";
      case EQUIPMENT_SLOT_FEET      : return "Feet";
      case EQUIPMENT_SLOT_WRISTS    : return "Wrists";
      case EQUIPMENT_SLOT_HANDS    : return "Hands";
      case EQUIPMENT_SLOT_BACK      : return "Back";
      case EQUIPMENT_SLOT_MAINHAND  : return "Main hand";
      case EQUIPMENT_SLOT_OFFHAND  : return "Off hand";
      case EQUIPMENT_SLOT_RANGED    : return "Ranged";
      case EQUIPMENT_SLOT_TABARD    : return "Tabard";
      default: return NULL;
      }
  }

  bool IsSuitable(Item* pItem, Item* OLD, Player* pPlayer)
  {
      if(pPlayer->CanUseItem(pItem, false) == EQUIP_ERR_OK)
      {
        uint32 Quality = pItem->GetTemplate()->Quality;
        if(Quality == ITEM_QUALITY_UNCOMMON || Quality == ITEM_QUALITY_RARE || Quality == ITEM_QUALITY_EPIC)
        {
            uint32 NClass = pItem->GetTemplate()->Class;
            uint32 OClass = OLD->GetTemplate()->Class;
            uint32 NSubClass = pItem->GetTemplate()->SubClass;
            uint32 OSubClass = OLD->GetTemplate()->SubClass;
            if(NClass == OClass) // not possibly the best structure here, but atleast I got my head around this
              if(NClass == ITEM_CLASS_WEAPON)
              {
                  if(NSubClass == OSubClass || ((NSubClass == ITEM_SUBCLASS_WEAPON_BOW || NSubClass == ITEM_SUBCLASS_WEAPON_GUN || NSubClass == ITEM_SUBCLASS_WEAPON_CROSSBOW) && (OSubClass == ITEM_SUBCLASS_WEAPON_BOW || OSubClass == ITEM_SUBCLASS_WEAPON_GUN || OSubClass == ITEM_SUBCLASS_WEAPON_CROSSBOW)))
                  {
                    return true;
                  }
              }
              else if(NClass == ITEM_CLASS_ARMOR)
                  if(NSubClass == OSubClass && pItem->GetTemplate()->InventoryType == OLD->GetTemplate()->InventoryType)
                  {
                    return true;
                  }
        }
      }
      return false;
  }
  std::string AreYouSure(uint8 slot, Item* pItem)
  {
      std::string msg = "Transmogrify ";
      msg += GetSlotName(slot);
      msg += "nTo ";
      msg += pItem->GetTemplate()->Name1;
      return msg;
  }
};

void AddSC_NPC_Transmogrify()
{
  new NPC_Transmogrify();
}


Até mais.
O autor desta mensagem foi banido do fórum - Mostrar mensagem

description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
Olá HardKill,

Esse script é de autoria do Rochet2, por favor edite os créditos.



Atenciosamente,
Baina
O autor desta mensagem foi banido do fórum - Mostrar mensagem

description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
Baina,
Creio que não entendeu,
no próprio Código esta os direitos autorais,
os créditos que ele me deu foi por disponibiliza-lo para ele .

Até mais.

description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
Qual o ID do Npc?

description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
Olá amigo,
não tem o NPC,
mais para adicionar um Npc como o tal ,
faça o seguinte .
adicione o Npc desejado em sua data~base , vá até a DB World , na tabela
Creature_template, procure por algo semelhante à ScriptName , do Npc que você
quer que se torne o tal,
e adicione na tabela

Código:

NPC_Transmogrify


Resulta?



description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
Olá,
Esté Script Está Bugado !!!
ele da Crash no Servidor !!!
Irei Postar um Funcional Agorinha !

description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
Vlw foofkinight, espero que funfe mesmo, adoro esse npc!

e brigadão fox pela dica de como colocar o npc!

description[C++]Transmogrification EmptyRe: [C++]Transmogrification

more_horiz
privacy_tip Permissões neste sub-fórum
Não podes responder a tópicos
power_settings_newInicie sessão para responder