Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ScriptPCH.h"
- #define StartLevel 1
- #define MaxLevel 80
- #define Increment i+2
- class Level_NPC : public CreatureScript
- {
- public:
- Level_NPC() : CreatureScript("Level_NPC") {}
- bool OnGossipHello(Player* pPlayer, Creature* _creature)
- {
- pPlayer->ADD_GOSSIP_ITEM(7, "Welcome to the level NPC!", GOSSIP_SENDER_MAIN, 0);
- for (uint32 i = StartLevel; i <= MaxLevel; i = Increment)
- pPlayer->ADD_GOSSIP_ITEM(10, "Level "+i, 10, i);
- pPlayer->PlayerTalkClass->SendGossipMenu(907, _creature->GetGUID());
- return true;
- }
- bool OnGossipSelect(Player* pPlayer, Creature* _creature, uint32 uiSender, uint32 uiAction)
- {
- pPlayer->PlayerTalkClass->ClearMenus();
- if(uiSender == 10 && uiAction >= StartLevel && uiAction <= MaxLevel)
- {
- if(pPlayer->getLevel() < uiAction)
- {
- if(!HandleResetStatsOrLevelHelper(pPlayer))
- {
- OnGossipHello(pPlayer, _creature);
- return true;
- }
- pPlayer->_ApplyAllLevelScaleItemMods(false);
- pPlayer->SetLevel(uiAction);
- pPlayer->InitRunes();
- pPlayer->InitStatsForLevel(true);
- pPlayer->InitTaxiNodesForLevel();
- pPlayer->InitGlyphsForLevel();
- pPlayer->InitTalentForLevel();
- pPlayer->SetUInt32Value(PLAYER_XP, 0);
- pPlayer->resetSpells(true);
- pPlayer->_ApplyAllLevelScaleItemMods(true);
- // reset level for pet
- if (Pet* pet = pPlayer->GetPet())
- pet->SynchronizeLevelWithOwner();
- }
- else
- pPlayer->SetLevel(uiAction);
- pPlayer->GetSession()->SendAreaTriggerMessage("You are now Level %u!", uiAction);
- }
- OnGossipHello(pPlayer, _creature);
- return true;
- }
- bool HandleResetStatsOrLevelHelper(Player* player)
- {
- ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(player->getClass());
- if (!classEntry)
- {
- return false;
- }
- uint8 powerType = classEntry->powerType;
- // reset m_form if no aura
- if (!player->HasAuraType(SPELL_AURA_MOD_SHAPESHIFT))
- player->SetShapeshiftForm(FORM_NONE);
- player->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, DEFAULT_WORLD_OBJECT_SIZE);
- player->SetFloatValue(UNIT_FIELD_COMBATREACH, DEFAULT_COMBAT_REACH);
- player->setFactionForRace(player->getRace());
- player->SetUInt32Value(UNIT_FIELD_BYTES_0, ((player->getRace()) | (player->getClass() << 8) | (player->getGender() << 16) | (powerType << 24)));
- // reset only if player not in some form;
- if (player->GetShapeshiftForm() == FORM_NONE)
- player->InitDisplayIds();
- player->SetByteValue(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_PVP);
- player->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
- //-1 is default value
- player->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1));
- //player->SetUInt32Value(PLAYER_FIELD_BYTES, 0xEEE00000);
- return true;
- }
- };
- void AddSC_Level_NPC()
- {
- new Level_NPC();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement