Azteco

ItemReedem

Mar 18th, 2013
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #include "ObjectMgr.h"
  2. #include "ScriptMgr.h"
  3. #include "ScriptedCreature.h"
  4. #include <string>
  5. #include <cstring>
  6. #include <array>
  7. using namespace std;
  8.  
  9. class ItemRedeem : public CreatureScript
  10. {
  11.     public:
  12.         ItemRedeem() : CreatureScript("ItemRedeem"){}
  13.  
  14.         bool OnGossipHello(Player * pPlayer, Creature * pCreature)
  15.         {
  16.             pPlayer->ADD_GOSSIP_ITEM_EXTENDED(4, "I want to enter the code", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1,"", 0, true);
  17.             pPlayer->ADD_GOSSIP_ITEM(4, "Nevermind", GOSSIP_SENDER_MAIN, 2);
  18.             pPlayer->PlayerTalkClass->SendGossipMenu(9425, pCreature->GetGUID());
  19.             return true;
  20.         }
  21.  
  22.         void CreateItemAndMailToPlayer(Player *pPlayer, uint32 itemId)
  23.         {
  24.             Item *pItem = new Item();
  25.             if(pItem->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM), itemId, pPlayer) == false)
  26.                 return;
  27.  
  28.             MailSender toSend(MAIL_NORMAL, pPlayer->GetGUIDLow(), MAIL_STATIONERY_GM);
  29.             SQLTransaction trans = CharacterDatabase.BeginTransaction();
  30.             pItem->SaveToDB(trans);
  31.  
  32.             MailDraft mailDraft("Lottery", "Your Reward");
  33.             mailDraft.AddItem(pItem);
  34.             mailDraft.SendMailTo(trans, MailReceiver(pPlayer), toSend);
  35.             CharacterDatabase.CommitTransaction(trans);
  36.         }
  37.  
  38.         bool CheckCode(Player * player, const char* sCode)
  39.         {
  40.             QueryResult res = CharacterDatabase.PQuery("SELECT reward,quantity FROM lottery WHERE code ='%s' AND used = 1 LIMIT 1", sCode);
  41.             if(res)
  42.             {
  43.                 Field * fields = res->Fetch();
  44.                 uint32 itemid = fields[0].GetUInt32();
  45.                 uint32 quantity = fields[1].GetUInt32();
  46.                 ItemPosCountVec dest;
  47.                 uint8 canStoreNewItem = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemid, quantity);
  48.                 if(canStoreNewItem == EQUIP_ERR_OK)
  49.                 {
  50.                     Item *newItem = NULL;
  51.                     newItem = player->StoreNewItem(dest,itemid,quantity,true);
  52.                     player->SendNewItem(newItem,quantity,true,false);
  53.                  }
  54.                  else
  55.                  {
  56.                     CreateItemAndMailToPlayer(player, itemid);
  57.                 }
  58.                 return true;
  59.             }
  60.             else
  61.             {
  62.                 return false;
  63.             }
  64.  
  65.         }
  66.  
  67.         bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code)
  68.         {
  69.             player->PlayerTalkClass->ClearMenus();
  70.             if (sender == GOSSIP_SENDER_MAIN)
  71.             {
  72.                 switch (action)
  73.                 {
  74.                 case GOSSIP_ACTION_INFO_DEF+1:
  75.                     if (CheckCode(player,code))
  76.                     {
  77.                         printf("Entered code %s", code);
  78.                        
  79.                         CharacterDatabase.PQuery("UPDATE lottery SET used = 0 WHERE code ='%s'", code);
  80.                     }
  81.                     else
  82.                     {
  83.                       player->MonsterWhisper("Wrong code sorry!", player->GetGUID());
  84.                     }
  85.                     player->CLOSE_GOSSIP_MENU();
  86.  
  87.                     return true;
  88.                 }
  89.             }
  90.  
  91.             return false;
  92.         }
  93.  
  94. };
  95.  
  96. void ADDSC_ItemRedeem_mob()
  97. {
  98.     new ItemRedeem);
  99. }
Advertisement
Add Comment
Please, Sign In to add comment