[Eluna] Applied a load of missing hooks

This commit is contained in:
Antz 2017-01-09 00:30:17 +00:00 committed by Antz
parent 253017e2eb
commit 7332173b6e
24 changed files with 462 additions and 14 deletions

View file

@ -41,6 +41,9 @@
#include "Formulas.h"
#include "GridNotifiersImpl.h"
#include "Chat.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
namespace MaNGOS
{
@ -256,6 +259,10 @@ BattleGround::BattleGround(): m_BuffChange(false), m_ArenaBuffSpawned(false), m_
BattleGround::~BattleGround()
{
#ifdef ENABLE_ELUNA
// sEluna->OnBGDestroy(this, GetTypeID(), GetInstanceID());
#endif /* ENABLE_ELUNA */
// remove objects and creatures
// (this is done automatically in mapmanager update, when the instance is reset after the reset time)
sBattleGroundMgr.RemoveBattleGround(GetInstanceID(), GetTypeID());
@ -656,6 +663,9 @@ void BattleGround::UpdateWorldStateForPlayer(uint32 Field, uint32 Value, Player*
void BattleGround::EndBattleGround(Team winner)
{
#ifdef ENABLE_ELUNA
sEluna->OnBGEnd(this, GetTypeID(), GetInstanceID(), winner);
#endif /* ENABLE_ELUNA */
this->RemoveFromBGFreeSlotQueue();
ArenaTeam* winner_arena_team = NULL;
@ -1205,6 +1215,10 @@ void BattleGround::StartBattleGround()
// This must be done here, because we need to have already invited some players when first BG::Update() method is executed
// and it doesn't matter if we call StartBattleGround() more times, because m_BattleGrounds is a map and instance id never changes
sBattleGroundMgr.AddBattleGround(GetInstanceID(), GetTypeID(), this);
#ifdef ENABLE_ELUNA
sEluna->OnBGStart(this, GetTypeID(), GetInstanceID());
#endif /* ENABLE_ELUNA */
}
void BattleGround::StartTimedAchievement(AchievementCriteriaTypes type, uint32 entry)

View file

@ -48,6 +48,9 @@
#include "World.h"
#include "WorldPacket.h"
#include "GameEventMgr.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
#include "Policies/Singleton.h"
@ -1858,6 +1861,10 @@ uint32 BattleGroundMgr::CreateBattleGround(BattleGroundTypeId bgTypeId, bool IsA
// add bg to update list
AddBattleGround(bg->GetInstanceID(), bg->GetTypeID(), bg);
#ifdef ENABLE_ELUNA
sEluna->OnBGCreate(bg, bgTypeId, bg->GetInstanceID());
#endif /* ENABLE_ELUNA */
// return some not-null value, bgTypeId is good enough for me
return bgTypeId;
}

View file

@ -212,6 +212,11 @@ void Creature::AddToWorld()
// Make active if required
if (sWorld.isForceLoadMap(GetMapId()) || (GetCreatureInfo()->ExtraFlags & CREATURE_EXTRA_FLAG_ACTIVE))
SetActiveObjectState(true);
#ifdef ENABLE_ELUNA
if (!IsInWorld())
sEluna->OnAddToWorld(this);
#endif /* ENABLE_ELUNA */
}
void Creature::RemoveFromWorld()

View file

@ -108,6 +108,11 @@ void GameObject::AddToWorld()
// After Object::AddToWorld so that for initial state the GO is added to the world (and hence handled correctly)
UpdateCollisionState();
#ifdef ENABLE_ELUNA
if (!IsInWorld())
sEluna->OnAddToWorld(this);
#endif /* ENABLE_ELUNA */
}
void GameObject::RemoveFromWorld()

View file

@ -36,6 +36,9 @@
#include "Language.h"
#include "World.h"
#include "Calendar.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
//// MemberSlot ////////////////////////////////////////////
void MemberSlot::SetMemberStats(Player* player)
@ -148,6 +151,11 @@ bool Guild::Create(Player* leader, std::string gname)
CreateDefaultGuildRanks(lSession->GetSessionDbLocaleIndex());
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnCreate(this, leader, gname.c_str());
#endif /* ENABLE_ELUNA */
return AddMember(m_LeaderGuid, (uint32)GR_GUILDMASTER);
}
@ -249,6 +257,11 @@ bool Guild::AddMember(ObjectGuid plGuid, uint32 plRank)
UpdateAccountsNumber();
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnAddMember(this, pl, newmember.RankId);
#endif /* ENABLE_ELUNA */
return true;
}
@ -259,6 +272,11 @@ void Guild::SetMOTD(std::string motd)
// motd now can be used for encoding to DB
CharacterDatabase.escape_string(motd);
CharacterDatabase.PExecute("UPDATE guild SET motd='%s' WHERE guildid='%u'", motd.c_str(), m_Id);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnMOTDChanged(this, motd);
#endif /* ENABLE_ELUNA */
}
void Guild::SetGINFO(std::string ginfo)
@ -268,6 +286,11 @@ void Guild::SetGINFO(std::string ginfo)
// ginfo now can be used for encoding to DB
CharacterDatabase.escape_string(ginfo);
CharacterDatabase.PExecute("UPDATE guild SET info='%s' WHERE guildid='%u'", ginfo.c_str(), m_Id);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnInfoChanged(this, ginfo);
#endif /* ENABLE_ELUNA */
}
bool Guild::LoadGuildFromDB(QueryResult* guildDataResult)
@ -567,6 +590,11 @@ bool Guild::DelMember(ObjectGuid guid, bool isDisbanding)
if (!isDisbanding)
UpdateAccountsNumber();
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnRemoveMember(this, player, isDisbanding); // IsKicked not a part of Mangos, implement?
#endif /* ENABLE_ELUNA */
return members.empty();
}
@ -861,6 +889,12 @@ void Guild::Disband()
CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE guildid = '%u'", m_Id);
CharacterDatabase.PExecute("DELETE FROM guild_eventlog WHERE guildid = '%u'", m_Id);
CharacterDatabase.CommitTransaction();
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnDisband(this);
#endif /* ENABLE_ELUNA */
sGuildMgr.RemoveGuild(m_Id);
}

View file

@ -2573,6 +2573,11 @@ void Player::GiveXP(uint32 xp, Unit* victim)
uint32 level = getLevel();
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnGiveXP(this, xp, victim);
#endif /* ENABLE_ELUNA */
// XP to money conversion processed in Player::RewardQuest
if (level >= sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL))
return;
@ -2690,6 +2695,11 @@ void Player::GiveLevel(uint32 level)
// resend quests status directly
SendQuestGiverStatusMultiple();
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnLevelChanged(this, level);
#endif /* ENABLE_ELUNA */
}
void Player::UpdateFreeTalentPoints(bool resetIfNeed)
@ -3864,6 +3874,11 @@ uint32 Player::resetTalentsCost() const
bool Player::resetTalents(bool no_cost, bool all_specs)
{
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnTalentsReset(this, no_cost);
#endif /* ENABLE_ELUNA */
// not need after this call
if (HasAtLoginFlag(AT_LOGIN_RESET_TALENTS) && all_specs)
RemoveAtLoginFlag(AT_LOGIN_RESET_TALENTS, true);
@ -4678,6 +4693,10 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness)
// update visibility of player for nearby cameras
UpdateObjectVisibility();
#ifdef ENABLE_ELUNA
sEluna->OnResurrect(this);
#endif /* ENABLE_ELUNA */
if (!applySickness)
return;
@ -6953,9 +6972,10 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
}
}
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnUpdateZone(this, newZone, newArea);
#endif
#endif /* ENABLE_ELUNA */
m_zoneUpdateId = newZone;
m_zoneUpdateTimer = ZONE_UPDATE_INTERVAL;
@ -7096,6 +7116,11 @@ void Player::DuelComplete(DuelCompleteType type)
duel->opponent->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL, 1);
}
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnDuelEnd(duel->opponent, this, type);
#endif /* ENABLE_ELUNA */
// Remove Duel Flag object
if (GameObject* obj = GetMap()->GetGameObject(GetGuidValue(PLAYER_DUEL_ARBITER)))
duel->initiator->RemoveGameObject(obj, true);
@ -10542,6 +10567,12 @@ InventoryResult Player::CanUseItem(ItemPrototype const* pProto) const
if (getLevel() < pProto->RequiredLevel)
return EQUIP_ERR_CANT_EQUIP_LEVEL_I;
#ifdef ENABLE_ELUNA
InventoryResult eres = sEluna->OnCanUseItem(this, pProto->ItemId);
if (eres != EQUIP_ERR_OK)
return eres;
#endif
return EQUIP_ERR_OK;
}
return EQUIP_ERR_ITEM_NOT_FOUND;
@ -10866,6 +10897,11 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update)
ApplyEquipCooldown(pItem2);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnEquip(this, pItem2, bag, slot);
#endif /* ENABLE_ELUNA */
return pItem2;
}
// Apply Titan's Grip damage penalty if necessary
@ -10875,6 +10911,10 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update)
// only for full equip instead adding to stack
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM, pItem->GetEntry());
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM, slot + 1);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnEquip(this, pItem, bag, slot);
#endif /* ENABLE_ELUNA */
return pItem;
}
@ -11104,6 +11144,9 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
ApplyItemOnStoreSpell(pItem, false);
ItemRemovedQuestCheck(pItem->GetEntry(), pItem->GetCount());
#ifdef ENABLE_ELUNA
sEluna->OnRemove(this, pItem);
#endif /* ENABLE_ELUNA */
if (bag == INVENTORY_SLOT_BAG_0)
{
@ -17059,6 +17102,10 @@ InstancePlayerBind* Player::BindToInstance(DungeonPersistentState* state, bool p
if (!load)
DEBUG_LOG("Player::BindToInstance: %s(%d) is now bound to map %d, instance %d, difficulty %d",
GetName(), GetGUIDLow(), state->GetMapId(), state->GetInstanceId(), state->GetDifficulty());
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnBindToInstance(this, (Difficulty)0, state->GetMapId(), permanent);
#endif /* ENABLE_ELUNA */
return &bind;
}
else
@ -17291,6 +17338,13 @@ void Player::SaveToDB()
CharacterDatabase.BeginTransaction();
#ifdef ENABLE_ELUNA
// Hack to check that this is not on create save
if (!HasAtLoginFlag(AT_LOGIN_FIRST))
sEluna->OnSave(this);
#endif /* ENABLE_ELUNA */
static SqlStatementID delChar ;
static SqlStatementID insChar ;
@ -18383,6 +18437,11 @@ void Player::UpdateDuelFlag(time_t currTime)
if (!duel || duel->startTimer == 0 || currTime < duel->startTimer + 3)
return;
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnDuelStart(this, duel->opponent);
#endif /* ENABLE_ELUNA */
SetUInt32Value(PLAYER_DUEL_TEAM, 1);
duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 2);
@ -22776,6 +22835,9 @@ void Player::LearnPetTalent(ObjectGuid petGuid, uint32 talentId, uint32 talentRa
// learn! (other talent ranks will unlearned at learning)
pet->learnSpell(spellid);
DETAIL_LOG("PetTalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid);
#ifdef ENABLE_ELUNA
sEluna->OnLearnTalents(this, talentId, talentRank, spellid);
#endif /*ENABLE_ELUNA*/
}
void Player::UpdateFallInformationIfNeed(MovementInfo const& minfo, uint16 opcode)

View file

@ -27,6 +27,9 @@
#include "Player.h"
#include "WorldPacket.h"
#include "ObjectMgr.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
const int32 ReputationMgr::PointsInRank[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000};
@ -240,6 +243,11 @@ void ReputationMgr::Initialize()
void ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental)
{
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnReputationChange(m_player, factionEntry->ID, standing, incremental);
#endif /* ENABLE_ELUNA */
bool anyRankIncreased = false;
// if spillover definition exists in DB, override DBC

View file

@ -31,6 +31,9 @@
#include "SpellMgr.h"
#include "CreatureAI.h"
#include "InstanceData.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
Totem::Totem() : Creature(CREATURE_SUBTYPE_TOTEM)
{
@ -102,6 +105,9 @@ void Totem::Summon(Unit* owner)
if (owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->AI())
((Creature*)owner)->AI()->JustSummoned((Creature*)this);
#ifdef ENABLE_ELUNA
sEluna->OnSummoned(this, owner);
#endif /* ENABLE_ELUNA */
// there are some totems, which exist just for their visual appeareance
if (!GetSpell())

View file

@ -1138,13 +1138,14 @@ uint32 Unit::DealDamage(Unit* pVictim, uint32 damage, CleanDamage const* cleanDa
if (GetTypeId() == TYPEID_UNIT && ((Creature*)this)->AI())
{ ((Creature*)this)->AI()->KilledUnit(pVictim); }
#ifdef ENABLE_ELUNA
if (Creature* killer = ToCreature())
{
// Used by Eluna
#ifdef ENABLE_ELUNA
if (Player* killed = pVictim->ToPlayer())
sEluna->OnPlayerKilledByCreature(killer, killed);
#endif /* ENABLE_ELUNA */
}
#endif
// Call AI OwnerKilledUnit (for any current summoned minipet/guardian/protector)
PetOwnerKilledUnit(pVictim);
@ -1210,9 +1211,10 @@ uint32 Unit::DealDamage(Unit* pVictim, uint32 damage, CleanDamage const* cleanDa
{ outdoorPvP->HandlePlayerKill(player_tap, playerVictim); }
}
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnPVPKill(player_tap, playerVictim);
#endif
#endif /* ENABLE_ELUNA */
}
}
else // Killed creature

View file

@ -48,6 +48,9 @@
#include "WorldSocketMgr.h"
#include "Log.h"
#include "DBCStores.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
#if defined( __GNUC__ )
#pragma pack(1)
@ -172,6 +175,11 @@ int WorldSocket::SendPacket(const WorldPacket& pct)
// Dump outgoing packet.
sLog.outWorldPacketDump(uint32(get_handle()), pct.GetOpcode(), pct.GetOpcodeName(), &pct, false);
//#ifdef ENABLE_ELUNA
// if (!sEluna->OnPacketSend(m_Session, pct))
// { return 0; }
//#endif /* ENABLE_ELUNA */
ServerPktHeader header(pct.size() + 2, pct.GetOpcode());
m_Crypt.EncryptSend((uint8*)header.header, header.getHeaderLength());
@ -700,10 +708,17 @@ int WorldSocket::ProcessIncoming(WorldPacket* new_pct)
return -1;
}
#ifdef ENABLE_ELUNA
if (!sEluna->OnPacketReceive(m_Session, *new_pct))
return 0;
#endif /* ENABLE_ELUNA */
return HandleAuthSession(*new_pct);
case CMSG_KEEP_ALIVE:
DEBUG_LOG("CMSG_KEEP_ALIVE ,size: " SIZEFMTD " ", new_pct->size());
#ifdef ENABLE_ELUNA
sEluna->OnPacketReceive(m_Session, *new_pct);
#endif /* ENABLE_ELUNA */
return 0;
default:
{

View file

@ -35,6 +35,9 @@
#include "Mail.h"
#include "Util.h"
#include "Chat.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
// please DO NOT use iterator++, because it is slower than ++iterator!!!
// post-incrementation is always slower than pre-incrementation !
@ -366,6 +369,11 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recv_data)
SendAuctionCommandResult(AH, AUCTION_STARTED, AUCTION_OK);
GetPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION, 1);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnAdd(auctionHouse, AH);
#endif /* ENABLE_ELUNA */
}
}
@ -512,6 +520,11 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket& recv_data)
CharacterDatabase.CommitTransaction();
sAuctionMgr.RemoveAItem(auction->itemGuidLow);
auctionHouse->RemoveAuction(auction->Id);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnRemove(auctionHouse, auction);
#endif /* ENABLE_ELUNA */
delete auction;
}

View file

@ -46,6 +46,9 @@
#include "Language.h"
#include "SpellMgr.h"
#include "Calendar.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
// config option SkipCinematics supported values
enum CinematicsSkipMode
@ -552,6 +555,11 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recv_data)
BASIC_LOG("Account: %d (IP: %s) Create Character:[%s] (guid: %u)", GetAccountId(), IP_str.c_str(), name.c_str(), pNewChar->GetGUIDLow());
sLog.outChar("Account: %d (IP: %s) Create Character:[%s] (guid: %u)", GetAccountId(), IP_str.c_str(), name.c_str(), pNewChar->GetGUIDLow());
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnCreate(pNewChar);
#endif /* ENABLE_ELUNA */
delete pNewChar; // created only to call SaveToDB()
}
@ -604,6 +612,11 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recv_data)
BASIC_LOG("Account: %d (IP: %s) Delete Character:[%s] (guid: %u)", GetAccountId(), IP_str.c_str(), name.c_str(), lowguid);
sLog.outChar("Account: %d (IP: %s) Delete Character:[%s] (guid: %u)", GetAccountId(), IP_str.c_str(), name.c_str(), lowguid);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnDelete(lowguid);
#endif /* ENABLE_ELUNA */
if (sLog.IsOutCharDump()) // optimize GetPlayerDump call
{
std::string dump = PlayerDumpWriter().GetDump(lowguid);
@ -884,10 +897,20 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
SendNotification(LANG_RESET_TALENTS); // we can use SMSG_TALENTS_INVOLUNTARILY_RESET here
}
// Used by Eluna
#ifdef ENABLE_ELUNA
if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST))
pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST);
sEluna->OnFirstLogin(pCurrChar);
#endif /* ENABLE_ELUNA */
// show time before shutdown if shutdown planned.
/* We've done what we need to, remove the flag */
if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST))
{
pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST);
}
/* If the server is shutting down, show shutdown time remaining */
if (sWorld.IsShutdowning())
sWorld.ShutdownMsg(true, pCurrChar);
@ -917,6 +940,11 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
// Handle Login-Achievements (should be handled after loading)
pCurrChar->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN, 1);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnLogin(pCurrChar);
#endif /* ENABLE_ELUNA */
delete holder;
}

View file

@ -41,6 +41,9 @@
#include "PoolManager.h"
#include "GameEventMgr.h"
#include "AuctionHouseBot/AuctionHouseBot.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
// Supported shift-links (client generated and server side)
// |color|Hachievement:achievement_id:player_guid_hex:completed_0_1:mm:dd:yy_from_2000:criteriaMask1:criteriaMask2:criteriaMask3:criteriaMask4|h[name]|h|r
@ -1270,6 +1273,10 @@ void ChatHandler::ExecuteCommand(const char* text)
}
case CHAT_COMMAND_UNKNOWN_SUBCOMMAND:
{
#ifdef ENABLE_ELUNA
if (!sEluna->OnCommand(m_session ? m_session->GetPlayer() : NULL, fullcmd.c_str()))
return;
#endif /* ENABLE_ELUNA */
SendSysMessage(LANG_NO_SUBCMD);
ShowHelpForCommand(command->ChildCommands, text);
SetSentErrorMessage(true);
@ -1277,6 +1284,10 @@ void ChatHandler::ExecuteCommand(const char* text)
}
case CHAT_COMMAND_UNKNOWN:
{
#ifdef ENABLE_ELUNA
if (!sEluna->OnCommand(m_session ? m_session->GetPlayer() : NULL, fullcmd.c_str()))
return;
#endif /* ENABLE_ELUNA */
SendSysMessage(LANG_NO_CMD);
SetSentErrorMessage(true);
break;

View file

@ -41,6 +41,9 @@
#include "Util.h"
#include "GridNotifiersImpl.h"
#include "CellImpl.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
bool WorldSession::processChatmessageFurtherAfterSecurityChecks(std::string& msg, uint32 lang)
{
@ -207,11 +210,29 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
break;
if (type == CHAT_MSG_SAY)
{
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg))
return;
#endif /* ENABLE_ELUNA */
GetPlayer()->Say(msg, lang);
}
else if (type == CHAT_MSG_EMOTE)
{
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, LANG_UNIVERSAL, msg))
return;
#endif /* ENABLE_ELUNA */
GetPlayer()->TextEmote(msg);
}
else if (type == CHAT_MSG_YELL)
{
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg))
return;
#endif /* ENABLE_ELUNA */
GetPlayer()->Yell(msg, lang);
}
} break;
case CHAT_MSG_WHISPER:
@ -255,6 +276,10 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
}
}
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnChat(GetPlayer(), type, lang, msg, player);
#endif /* ENABLE_ELUNA */
GetPlayer()->Whisper(msg, lang, player->GetObjectGuid());
} break;
@ -287,6 +312,11 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
if ((type == CHAT_MSG_PARTY_LEADER) && !group->IsLeader(_player->GetObjectGuid()))
return;
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, group))
return;
#endif /* ENABLE_ELUNA */
WorldPacket data;
ChatHandler::BuildChatPacket(data, ChatMsg(type), msg.c_str(), Language(lang), _player->GetChatTag(), _player->GetObjectGuid(), _player->GetName());
@ -313,7 +343,15 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
if (GetPlayer()->GetGuildId())
if (Guild* guild = sGuildMgr.GetGuildById(GetPlayer()->GetGuildId()))
{
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, guild))
return;
#endif /* ENABLE_ELUNA */
guild->BroadcastToGuild(this, msg, lang == LANG_ADDON ? LANG_ADDON : LANG_UNIVERSAL);
}
break;
}
@ -336,7 +374,15 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
if (GetPlayer()->GetGuildId())
if (Guild* guild = sGuildMgr.GetGuildById(GetPlayer()->GetGuildId()))
{
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, guild))
return;
#endif /* ENABLE_ELUNA */
guild->BroadcastToOfficers(this, msg, lang == LANG_ADDON ? LANG_ADDON : LANG_UNIVERSAL);
}
break;
}
@ -366,6 +412,12 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
return;
}
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, group))
return;
#endif /* ENABLE_ELUNA */
WorldPacket data;
ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID, msg.c_str(), Language(lang), _player->GetChatTag(), _player->GetObjectGuid(), _player->GetName());
group->BroadcastPacket(&data, false);
@ -396,6 +448,12 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
return;
}
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, group))
return;
#endif /* ENABLE_ELUNA */
WorldPacket data;
ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_LEADER, msg.c_str(), Language(lang), _player->GetChatTag(), _player->GetObjectGuid(), _player->GetName());
group->BroadcastPacket(&data, false);
@ -417,6 +475,12 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
!(group->IsLeader(GetPlayer()->GetObjectGuid()) || group->IsAssistant(GetPlayer()->GetObjectGuid())))
return;
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, group))
return;
#endif /* ENABLE_ELUNA */
WorldPacket data;
// in battleground, raid warning is sent only to players in battleground - code is ok
ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_WARNING, msg.c_str(), Language(lang), _player->GetChatTag(), _player->GetObjectGuid(), _player->GetName());
@ -439,6 +503,12 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
if (!group || !group->isBGGroup())
return;
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, group))
return;
#endif /* ENABLE_ELUNA */
WorldPacket data;
ChatHandler::BuildChatPacket(data, CHAT_MSG_BATTLEGROUND, msg.c_str(), Language(lang), _player->GetChatTag(), _player->GetObjectGuid(), _player->GetName());
group->BroadcastPacket(&data, false);
@ -460,6 +530,12 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
if (!group || !group->isBGGroup() || !group->IsLeader(GetPlayer()->GetObjectGuid()))
return;
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, group))
return;
#endif /* ENABLE_ELUNA */
WorldPacket data;
ChatHandler::BuildChatPacket(data, CHAT_MSG_BATTLEGROUND_LEADER, msg.c_str(), Language(lang), _player->GetChatTag(), _player->GetObjectGuid(), _player->GetName());
group->BroadcastPacket(&data, false);
@ -480,8 +556,18 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
break;
if (ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
{
if (Channel* chn = cMgr->GetChannel(channel, _player))
{
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg, chn))
return;
#endif /* ENABLE_ELUNA */
chn->Say(_player, msg.c_str(), lang);
}
}
} break;
case CHAT_MSG_AFK:
@ -507,6 +593,11 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
_player->ToggleAFK();
}
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg))
return;
#endif /* ENABLE_ELUNA */
}
break;
}
@ -531,6 +622,12 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recv_data)
_player->ToggleDND();
}
// Used by Eluna
#ifdef ENABLE_ELUNA
if (!sEluna->OnChat(GetPlayer(), type, lang, msg))
return;
#endif /* ENABLE_ELUNA */
break;
}
@ -659,7 +756,11 @@ void WorldSession::HandleEmoteOpcode(WorldPacket& recv_data)
uint32 emote;
recv_data >> emote;
DEBUG_LOG("CMSG_EMOTE %u", emote);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnEmote(GetPlayer(), emote);
#endif /* ENABLE_ELUNA */
GetPlayer()->HandleEmoteCommand(emote);
}
@ -717,6 +818,11 @@ void WorldSession::HandleTextEmoteOpcode(WorldPacket& recv_data)
recv_data >> emoteNum;
recv_data >> guid;
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnTextEmote(GetPlayer(), text_emote, emoteNum, guid);
#endif /* ENABLE_ELUNA */
EmotesTextEntry const* em = sEmotesTextStore.LookupEntry(text_emote);
if (!em)
return;

View file

@ -39,6 +39,10 @@
#include "Util.h"
#include "LootMgr.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
#define LOOT_ROLL_TIMEOUT (1*MINUTE*IN_MILLISECONDS)
//===================================================
@ -172,6 +176,11 @@ bool Group::Create(ObjectGuid guid, const char* name)
_updateLeaderFlag();
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnCreate(this, m_leaderGuid, m_groupType);
#endif /* ENABLE_ELUNA */
return true;
}
@ -264,6 +273,11 @@ bool Group::AddInvite(Player* player)
player->SetGroupInvite(this);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnInviteMember(this, player->GetObjectGuid());
#endif /* ENABLE_ELUNA */
return true;
}
@ -347,6 +361,11 @@ bool Group::AddMember(ObjectGuid guid, const char* name)
player->SetGroupUpdateFlag(GROUP_UPDATE_FULL);
UpdatePlayerOutOfRange(player);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnAddMember(this, player->GetObjectGuid());
#endif /* ENABLE_ELUNA */
// quest related GO state dependent from raid membership
if (isRaidGroup())
player->UpdateForQuestWorldObjects();
@ -405,6 +424,11 @@ uint32 Group::RemoveMember(ObjectGuid guid, uint8 method)
else
Disband(true);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnRemoveMember(this, guid, method); // Kicker and Reason not a part of Mangos, implement?
#endif /* ENABLE_ELUNA */
return m_memberSlots.size();
}
@ -414,6 +438,11 @@ void Group::ChangeLeader(ObjectGuid guid)
if (slot == m_memberSlots.end())
return;
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnChangeLeader(this, guid, GetLeaderGuid());
#endif /* ENABLE_ELUNA */
_setLeader(guid);
WorldPacket data(SMSG_GROUP_SET_LEADER, slot->name.size() + 1);
@ -490,6 +519,11 @@ void Group::Disband(bool hideDestroy)
}
_updateLeaderFlag(true);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnDisband(this);
#endif /* ENABLE_ELUNA */
m_leaderGuid.Clear();
m_leaderName.clear();
}

View file

@ -34,6 +34,9 @@
#include "GossipDef.h"
#include "SocialMgr.h"
#include "Calendar.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket)
{

View file

@ -37,6 +37,9 @@
#include "World.h"
#include "Util.h"
#include "DBCStores.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
void WorldSession::HandleAutostoreLootItemOpcode(WorldPacket& recv_data)
{
@ -294,6 +297,11 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket & /*recv_data*/)
player->GetSession()->SendPacket(&data);
}
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnLootMoney(player, pLoot->gold);
#endif /* ENABLE_ELUNA */
pLoot->gold = 0;
if (pItem)
@ -598,6 +606,11 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recv_data)
target->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE, pLoot->loot_type, item.count);
target->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM, item.itemid, item.count);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnLootItem(target, newitem, item.count, lootguid);
#endif /* ENABLE_ELUNA */
// mark as looted
item.count = 0;
item.is_looted = true;

View file

@ -64,6 +64,11 @@ Map::~Map()
if (m_persistentState)
{ m_persistentState->SetUsedByMapState(NULL); } // field pointer can be deleted after this
//#ifdef ENABLE_ELUNA
// if (Instanceable())
// sEluna->FreeInstanceId(GetInstanceId());
//#endif /* ENABLE_ELUNA */
delete i_data;
i_data = NULL;
@ -118,6 +123,9 @@ Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode)
m_persistentState->SetUsedByMapState(this);
m_weatherSystem = new WeatherSystem(this);
#ifdef ENABLE_ELUNA
sEluna->OnCreate(this);
#endif /* ENABLE_ELUNA */
}
void Map::InitVisibilityDistance()
@ -323,6 +331,11 @@ bool Map::Add(Player* player)
player->GetViewPoint().Event_AddedToWorld(&(*grid)(cell.CellX(), cell.CellY()));
UpdateObjectVisibility(player, cell, p);
#ifdef ENABLE_ELUNA
sEluna->OnMapChanged(player);
sEluna->OnPlayerEnter(this, player);
#endif /* ENABLE_ELUNA */
if (i_data)
{ i_data->OnPlayerEnter(player); }
@ -587,6 +600,10 @@ void Map::Update(const uint32& t_diff)
if (!m_scriptSchedule.empty())
{ ScriptsProcess(); }
#ifdef ENABLE_ELUNA
sEluna->OnUpdate(this, t_diff);
#endif /* ENABLE_ELUNA */
if (i_data)
{ i_data->Update(t_diff); }
@ -595,6 +612,10 @@ void Map::Update(const uint32& t_diff)
void Map::Remove(Player* player, bool remove)
{
#ifdef ENABLE_ELUNA
sEluna->OnPlayerLeave(this, player);
#endif /* ENABLE_ELUNA */
if (i_data)
{ i_data->OnPlayerLeave(player); }
@ -1015,6 +1036,13 @@ void Map::AddObjectToRemoveList(WorldObject* obj)
{
MANGOS_ASSERT(obj->GetMapId() == GetId() && obj->GetInstanceId() == GetInstanceId());
#ifdef ENABLE_ELUNA
if (Creature* creature = obj->ToCreature())
sEluna->OnRemove(creature);
else if (GameObject* gameobject = obj->ToGameObject())
sEluna->OnRemove(gameobject);
#endif /* ENABLE_ELUNA */
obj->CleanupsBeforeDelete(); // remove or simplify at least cross referenced links
i_objectsToRemove.insert(obj);
@ -1202,6 +1230,10 @@ void Map::CreateInstanceData(bool load)
return;
}
//#ifdef ENABLE_ELUNA
// i_data = sEluna->GetInstanceData(this);
//#endif /* ENABLE_ELUNA */
uint32 i_script_id = GetScriptId();
if (!i_script_id)
@ -2195,6 +2227,7 @@ bool Map::ContainsGameObjectModel(const GameObjectModel& mdl) const
{
return m_dyn_tree.contains(mdl);
}
// This will generate a random point to all directions in water for the provided point in radius range.
bool Map::GetRandomPointUnderWater(uint32 phaseMask, float& x, float& y, float& z, float radius, GridMapLiquidData& liquid_status)
{

View file

@ -49,6 +49,9 @@
#include "Pet.h"
#include "SocialMgr.h"
#include "DBCEnums.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
void WorldSession::HandleRepopRequestOpcode(WorldPacket& recv_data)
{
@ -73,6 +76,11 @@ void WorldSession::HandleRepopRequestOpcode(WorldPacket& recv_data)
GetPlayer()->KillPlayer();
}
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnRepop(GetPlayer());
#endif /* ENABLE_ELUNA */
// this is spirit release confirm?
GetPlayer()->RemovePet(PET_SAVE_REAGENTS);
GetPlayer()->BuildPlayerRepop();

View file

@ -40,6 +40,9 @@
#include "Guild.h"
#include "GuildMgr.h"
#include "Chat.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
enum StableResultCode
{

View file

@ -35,6 +35,9 @@
#include "ObjectAccessor.h"
#include "ScriptMgr.h"
#include "Group.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recv_data)
{
@ -347,6 +350,11 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPacket& recv_data)
}
_player->SetQuestStatus(quest, QUEST_STATUS_NONE);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnQuestAbandon(_player, quest);
#endif /* ENABLE_ELUNA */
}
_player->SetQuestSlot(slot, 0);

View file

@ -55,6 +55,9 @@
#include "Vehicle.h"
#include "TemporarySummon.h"
#include "SQLStorages.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
extern pEffect SpellEffects[TOTAL_SPELL_EFFECTS];
@ -3504,6 +3507,11 @@ void Spell::cast(bool skipCheck)
((Player*)m_caster)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM, m_CastItem->GetEntry());
((Player*)m_caster)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, m_spellInfo->Id);
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnSpellCast(m_caster->ToPlayer(), this, skipCheck);
#endif /* ENABLE_ELUNA */
}
FillTargetMap();

View file

@ -66,6 +66,9 @@
#include "Vehicle.h"
#include "G3D/Vector3.h"
#include "LootMgr.h"
#ifdef ENABLE_ELUNA
#include "LuaEngine.h"
#endif /* ENABLE_ELUNA */
pEffect SpellEffects[TOTAL_SPELL_EFFECTS] =
{
@ -6042,7 +6045,13 @@ bool Spell::DoSummonVehicle(CreatureSummonPositions& list, SummonPropertiesEntry
// Notify Summoner
if (m_originalCaster && m_originalCaster != m_caster && m_originalCaster->GetTypeId() == TYPEID_UNIT && ((Creature*)m_originalCaster)->AI())
((Creature*)m_originalCaster)->AI()->JustSummoned(spawnCreature);
#ifdef ENABLE_ELUNA
if (Unit* summoner = m_caster->ToUnit())
sEluna->OnSummoned(spawnCreature, summoner);
else if (m_originalCaster)
if (Unit* summoner = m_originalCaster->ToUnit())
sEluna->OnSummoned(spawnCreature, summoner);
#endif /* ENABLE_ELUNA */
return true;
}
@ -10218,6 +10227,11 @@ void Spell::EffectDuel(SpellEffectEntry const* effect)
caster->SetGuidValue(PLAYER_DUEL_ARBITER, pGameObj->GetObjectGuid());
target->SetGuidValue(PLAYER_DUEL_ARBITER, pGameObj->GetObjectGuid());
// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnDuelRequest(target, caster);
#endif /* ENABLE_ELUNA */
}
void Spell::EffectStuck(SpellEffectEntry const* effect /*effect*/)
@ -10474,6 +10488,10 @@ void Spell::EffectApplyGlyph(SpellEffectEntry const* effect)
player->SendTalentsInfoData(false);
}
}
//#ifdef ENABLE_ELUNA
// if (Unit* summoner = m_originalCaster->ToUnit())
// sEluna->OnSummoned(spawnCreature, summoner);
//#endif /* ENABLE_ELUNA */
}
void Spell::EffectEnchantHeldItem(SpellEffectEntry const* effect)

View file

@ -1985,6 +1985,10 @@ void World::ShutdownServ(uint32 time, uint32 options, uint8 exitcode)
m_ShutdownTimer = time;
ShutdownMsg(true);
}
///- Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnShutdownInitiate(ShutdownExitCode(exitcode), ShutdownMask(options));
#endif /* ENABLE_ELUNA */
}
/// Display a shutdown message to the user(s)