Advertisement
Rochet2

Level setter

Dec 8th, 2012
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2. #define StartLevel  1
  3. #define MaxLevel    80
  4. #define Increment   i+2
  5.  
  6. class Level_NPC : public CreatureScript
  7. {
  8. public:
  9.     Level_NPC() : CreatureScript("Level_NPC") {}
  10.  
  11.     bool OnGossipHello(Player* pPlayer, Creature* _creature)
  12.     {
  13.         pPlayer->ADD_GOSSIP_ITEM(7, "Welcome to the level NPC!", GOSSIP_SENDER_MAIN, 0);
  14.         for (uint32 i = StartLevel; i <= MaxLevel; i = Increment)
  15.             pPlayer->ADD_GOSSIP_ITEM(10, "Level "+i, 10, i);
  16.  
  17.         pPlayer->PlayerTalkClass->SendGossipMenu(907, _creature->GetGUID());
  18.         return true;
  19.     }
  20.  
  21.     bool OnGossipSelect(Player* pPlayer, Creature* _creature, uint32 uiSender, uint32 uiAction)
  22.     {
  23.         pPlayer->PlayerTalkClass->ClearMenus();
  24.         if(uiSender == 10 && uiAction >= StartLevel && uiAction <= MaxLevel)
  25.         {
  26.             if(pPlayer->getLevel() < uiAction)
  27.             {
  28.                 if(!HandleResetStatsOrLevelHelper(pPlayer))
  29.                 {
  30.                     OnGossipHello(pPlayer, _creature);
  31.                     return true;
  32.                 }
  33.                 pPlayer->_ApplyAllLevelScaleItemMods(false);
  34.                 pPlayer->SetLevel(uiAction);
  35.                 pPlayer->InitRunes();
  36.                 pPlayer->InitStatsForLevel(true);
  37.                 pPlayer->InitTaxiNodesForLevel();
  38.                 pPlayer->InitGlyphsForLevel();
  39.                 pPlayer->InitTalentForLevel();
  40.                 pPlayer->SetUInt32Value(PLAYER_XP, 0);
  41.                 pPlayer->resetSpells(true);
  42.  
  43.                 pPlayer->_ApplyAllLevelScaleItemMods(true);
  44.  
  45.                 // reset level for pet
  46.                 if (Pet* pet = pPlayer->GetPet())
  47.                     pet->SynchronizeLevelWithOwner();
  48.             }
  49.             else
  50.                 pPlayer->SetLevel(uiAction);
  51.             pPlayer->GetSession()->SendAreaTriggerMessage("You are now Level %u!", uiAction);
  52.         }
  53.  
  54.         OnGossipHello(pPlayer, _creature);
  55.         return true;
  56.     }
  57.  
  58.     bool HandleResetStatsOrLevelHelper(Player* player)
  59.     {
  60.         ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(player->getClass());
  61.         if (!classEntry)
  62.         {
  63.             return false;
  64.         }
  65.  
  66.         uint8 powerType = classEntry->powerType;
  67.  
  68.         // reset m_form if no aura
  69.         if (!player->HasAuraType(SPELL_AURA_MOD_SHAPESHIFT))
  70.             player->SetShapeshiftForm(FORM_NONE);
  71.  
  72.         player->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, DEFAULT_WORLD_OBJECT_SIZE);
  73.         player->SetFloatValue(UNIT_FIELD_COMBATREACH, DEFAULT_COMBAT_REACH);
  74.  
  75.         player->setFactionForRace(player->getRace());
  76.  
  77.         player->SetUInt32Value(UNIT_FIELD_BYTES_0, ((player->getRace()) | (player->getClass() << 8) | (player->getGender() << 16) | (powerType << 24)));
  78.  
  79.         // reset only if player not in some form;
  80.         if (player->GetShapeshiftForm() == FORM_NONE)
  81.             player->InitDisplayIds();
  82.  
  83.         player->SetByteValue(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_PVP);
  84.  
  85.         player->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
  86.  
  87.         //-1 is default value
  88.         player->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1));
  89.  
  90.         //player->SetUInt32Value(PLAYER_FIELD_BYTES, 0xEEE00000);
  91.         return true;
  92.     }
  93. };
  94.  
  95. void AddSC_Level_NPC()
  96. {
  97.     new Level_NPC();
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement