mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[Sync] Some long overdue project sync
This commit is contained in:
parent
a479a2ccc5
commit
65ec4ea06e
76 changed files with 1693 additions and 1489 deletions
|
|
@ -130,7 +130,7 @@ class Grid
|
|||
*/
|
||||
bool AddGridObject(SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
if (obj->isActiveObject())
|
||||
if (obj->IsActiveObject())
|
||||
{ m_activeGridObjects.insert(obj); }
|
||||
|
||||
return i_container.template insert<SPECIFIC_OBJECT>(obj);
|
||||
|
|
@ -145,7 +145,7 @@ class Grid
|
|||
*/
|
||||
bool RemoveGridObject(SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
if (obj->isActiveObject())
|
||||
if (obj->IsActiveObject())
|
||||
{ m_activeGridObjects.erase(obj); }
|
||||
|
||||
return i_container.template remove<SPECIFIC_OBJECT>(obj);
|
||||
|
|
|
|||
|
|
@ -1138,7 +1138,7 @@ void BattleGround::SendRewardMarkByMail(Player* plr, uint32 mark, uint32 count)
|
|||
/// <param name="plr">The PLR.</param>
|
||||
void BattleGround::RewardQuestComplete(Player* plr)
|
||||
{
|
||||
uint32 quest;
|
||||
uint32 quest = 0;
|
||||
switch (GetTypeID())
|
||||
{
|
||||
case BATTLEGROUND_AV:
|
||||
|
|
@ -2072,6 +2072,11 @@ void BattleGround::CheckArenaWinConditions()
|
|||
EndBattleGround(ALLIANCE);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the bg raid.
|
||||
/// </summary>
|
||||
/// <param name="team">The team.</param>
|
||||
/// <param name="bg_raid">The bg_raid.</param>
|
||||
void BattleGround::SetBgRaid(Team team, Group* bg_raid)
|
||||
{
|
||||
Group*& old_raid = m_BgRaids[GetTeamIndexByTeamId(team)];
|
||||
|
|
|
|||
|
|
@ -911,9 +911,9 @@ bool ChatHandler::HandleModifyFactionCommand(char* args)
|
|||
{
|
||||
uint32 factionid = chr->getFaction();
|
||||
uint32 flag = chr->GetUInt32Value(UNIT_FIELD_FLAGS);
|
||||
uint32 NpcFlags = chr->GetUInt32Value(UNIT_NPC_FLAGS);
|
||||
uint32 npcflag = chr->GetUInt32Value(UNIT_NPC_FLAGS);
|
||||
uint32 dyflag = chr->GetUInt32Value(UNIT_DYNAMIC_FLAGS);
|
||||
PSendSysMessage(LANG_CURRENT_FACTION, chr->GetGUIDLow(), factionid, flag, NpcFlags, dyflag);
|
||||
PSendSysMessage(LANG_CURRENT_FACTION, chr->GetGUIDLow(), factionid, flag, npcflag, dyflag);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -940,19 +940,19 @@ bool ChatHandler::HandleModifyFactionCommand(char* args)
|
|||
if (!ExtractOptUInt32(&args, flag, chr->GetUInt32Value(UNIT_FIELD_FLAGS)))
|
||||
{ return false; }
|
||||
|
||||
uint32 NpcFlags;
|
||||
if (!ExtractOptUInt32(&args, NpcFlags, chr->GetUInt32Value(UNIT_NPC_FLAGS)))
|
||||
uint32 npcflag;
|
||||
if (!ExtractOptUInt32(&args, npcflag, chr->GetUInt32Value(UNIT_NPC_FLAGS)))
|
||||
{ return false; }
|
||||
|
||||
uint32 dyflag;
|
||||
if (!ExtractOptUInt32(&args, dyflag, chr->GetUInt32Value(UNIT_DYNAMIC_FLAGS)))
|
||||
{ return false; }
|
||||
|
||||
PSendSysMessage(LANG_YOU_CHANGE_FACTION, chr->GetGUIDLow(), factionid, flag, NpcFlags, dyflag);
|
||||
PSendSysMessage(LANG_YOU_CHANGE_FACTION, chr->GetGUIDLow(), factionid, flag, npcflag, dyflag);
|
||||
|
||||
chr->setFaction(factionid);
|
||||
chr->SetUInt32Value(UNIT_FIELD_FLAGS, flag);
|
||||
chr->SetUInt32Value(UNIT_NPC_FLAGS, NpcFlags);
|
||||
chr->SetUInt32Value(UNIT_NPC_FLAGS, npcflag);
|
||||
chr->SetUInt32Value(UNIT_DYNAMIC_FLAGS, dyflag);
|
||||
|
||||
return true;
|
||||
|
|
@ -2288,7 +2288,8 @@ bool ChatHandler::HandleGoGridCommand(char* args)
|
|||
|
||||
bool ChatHandler::HandleModifyDrunkCommand(char* args)
|
||||
{
|
||||
if (!*args) { return false; }
|
||||
if (!*args)
|
||||
return false;
|
||||
|
||||
uint8 drunkValue = (uint8)atoi(args);
|
||||
if (drunkValue > 100)
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ bool ChatHandler::HandleTriggerCommand(char* args)
|
|||
|
||||
AreaTrigger const* at = sObjectMgr.GetAreaTrigger(atEntry->id);
|
||||
if (at)
|
||||
PSendSysMessage(LANG_TRIGGER_REQ_LEVEL, at->requiredLevel);
|
||||
{ PSendSysMessage(LANG_TRIGGER_REQ_LEVEL, at->requiredLevel); }
|
||||
|
||||
if (uint32 quest_id = sObjectMgr.GetQuestForAreaTrigger(atEntry->id))
|
||||
{
|
||||
|
|
@ -286,9 +286,9 @@ bool ChatHandler::HandleTriggerCommand(char* args)
|
|||
SendSysMessage(LANG_TRIGGER_REQ_ITEMS);
|
||||
|
||||
if (at->requiredItem)
|
||||
ShowItemListHelper(at->requiredItem, loc_idx, pl);
|
||||
{ ShowItemListHelper(at->requiredItem, loc_idx, pl); }
|
||||
if (at->requiredItem2)
|
||||
ShowItemListHelper(at->requiredItem2, loc_idx, pl);
|
||||
{ ShowItemListHelper(at->requiredItem2, loc_idx, pl); }
|
||||
}
|
||||
|
||||
if (at->requiredQuest)
|
||||
|
|
@ -1369,6 +1369,7 @@ bool ChatHandler::HandleCharacterAchievementsCommand(char* args)
|
|||
void ChatHandler::ShowFactionListHelper(FactionEntry const* factionEntry, LocaleConstant loc, FactionState const* repState /*= NULL*/, Player* target /*= NULL */)
|
||||
{
|
||||
std::string name = factionEntry->name[loc];
|
||||
|
||||
// send faction in "id - [faction] rank reputation [visible] [at war] [own team] [unknown] [invisible] [inactive]" format
|
||||
// or "id - [faction] [no reputation]" format
|
||||
std::ostringstream ss;
|
||||
|
|
@ -1921,6 +1922,7 @@ bool ChatHandler::HandleNpcMoveCommand(char* args)
|
|||
Player* player = m_session->GetPlayer();
|
||||
|
||||
Creature* pCreature = getSelectedCreature();
|
||||
|
||||
if (!pCreature)
|
||||
{
|
||||
// number or [name] Shift-click form |color|Hcreature:creature_guid|h[name]|h|r
|
||||
|
|
@ -2476,7 +2478,6 @@ bool ChatHandler::HandleDeMorphCommand(char* /*args*/)
|
|||
if (!target)
|
||||
{ target = m_session->GetPlayer(); }
|
||||
|
||||
|
||||
// check online security
|
||||
else if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target))
|
||||
{ return false; }
|
||||
|
|
@ -2679,7 +2680,7 @@ bool ChatHandler::HandleTicketCommand(char* args)
|
|||
PSendSysMessage(LANG_COMMAND_TICKETCOUNT, count, GetOnOffStr(accept));
|
||||
}
|
||||
else
|
||||
PSendSysMessage(LANG_COMMAND_TICKETCOUNT_CONSOLE, count);
|
||||
{ PSendSysMessage(LANG_COMMAND_TICKETCOUNT_CONSOLE, count); }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -2756,7 +2757,7 @@ bool ChatHandler::HandleTicketCommand(char* args)
|
|||
|
||||
// no response text?
|
||||
if (!*args)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
ticket->SetResponseText(args);
|
||||
|
||||
|
|
@ -2771,7 +2772,7 @@ bool ChatHandler::HandleTicketCommand(char* args)
|
|||
if (ExtractUInt32(&px, num))
|
||||
{
|
||||
if (num == 0)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// mgr numbering tickets start from 0
|
||||
GMTicket* ticket = sTicketMgr.GetGMTicketByOrderPos(num - 1);
|
||||
|
|
@ -2789,7 +2790,7 @@ bool ChatHandler::HandleTicketCommand(char* args)
|
|||
ObjectGuid target_guid;
|
||||
std::string target_name;
|
||||
if (!ExtractPlayerTarget(&px, NULL, &target_guid, &target_name))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// ticket $char_name
|
||||
GMTicket* ticket = sTicketMgr.GetGMTicket(target_guid);
|
||||
|
|
@ -2849,7 +2850,7 @@ bool ChatHandler::HandleDelTicketCommand(char* args)
|
|||
PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL, GetNameLink(pl).c_str());
|
||||
}
|
||||
else
|
||||
PSendSysMessage(LANG_COMMAND_TICKETDEL);
|
||||
{ PSendSysMessage(LANG_COMMAND_TICKETDEL); }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -3139,7 +3140,7 @@ bool ChatHandler::HandleWpModifyCommand(char* args)
|
|||
|
||||
// Did user provide a GUID or did the user select a creature?
|
||||
Creature* targetCreature = getSelectedCreature(); // Expect a visual waypoint to be selected
|
||||
Creature* wpOwner; // Who moves along the waypoint
|
||||
Creature* wpOwner = NULL; // Who moves along the waypoint
|
||||
uint32 wpId = 0;
|
||||
WaypointPathOrigin wpSource = PATH_NO_PATH;
|
||||
int32 wpPathId = 0;
|
||||
|
|
@ -3392,7 +3393,7 @@ bool ChatHandler::HandleWpShowCommand(char* args)
|
|||
}
|
||||
}
|
||||
|
||||
Creature* wpOwner; ///< Npc that is moving
|
||||
Creature* wpOwner = NULL; ///< Npc that is moving
|
||||
TemporarySummonWaypoint* wpTarget = NULL; // Define here for wp-info command
|
||||
|
||||
// Show info for the selected waypoint (Step one: get moving npc)
|
||||
|
|
@ -3543,7 +3544,7 @@ bool ChatHandler::HandleWpExportCommand(char* args)
|
|||
if (!*args)
|
||||
return false;
|
||||
|
||||
Creature* wpOwner;
|
||||
Creature* wpOwner = NULL;
|
||||
WaypointPathOrigin wpOrigin = PATH_NO_PATH;
|
||||
int32 wpPathId = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -4352,7 +4352,7 @@ bool ChatHandler::HandleNpcInfoCommand(char* /*args*/)
|
|||
}
|
||||
|
||||
uint32 faction = target->getFaction();
|
||||
uint32 NpcFlagss = target->GetUInt32Value(UNIT_NPC_FLAGS);
|
||||
uint32 npcflags = target->GetUInt32Value(UNIT_NPC_FLAGS);
|
||||
uint32 displayid = target->GetDisplayId();
|
||||
uint32 nativeid = target->GetNativeDisplayId();
|
||||
uint32 Entry = target->GetEntry();
|
||||
|
|
@ -4372,11 +4372,11 @@ bool ChatHandler::HandleNpcInfoCommand(char* /*args*/)
|
|||
break;
|
||||
|
||||
if (diff < MAX_DIFFICULTY)
|
||||
PSendSysMessage(LANG_NPCINFO_CHAR_DIFFICULTY, target->GetGuidStr().c_str(), faction, NpcFlagss,
|
||||
PSendSysMessage(LANG_NPCINFO_CHAR_DIFFICULTY, target->GetGuidStr().c_str(), faction, npcflags,
|
||||
Entry, target->GetCreatureInfo()->Entry, diff,
|
||||
displayid, nativeid);
|
||||
else
|
||||
PSendSysMessage(LANG_NPCINFO_CHAR, target->GetGuidStr().c_str(), faction, NpcFlagss, Entry, displayid, nativeid);
|
||||
PSendSysMessage(LANG_NPCINFO_CHAR, target->GetGuidStr().c_str(), faction, npcflags, Entry, displayid, nativeid);
|
||||
|
||||
PSendSysMessage(LANG_NPCINFO_LEVEL, target->getLevel());
|
||||
PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), target->GetMaxHealth(), target->GetHealth());
|
||||
|
|
@ -4386,11 +4386,11 @@ bool ChatHandler::HandleNpcInfoCommand(char* /*args*/)
|
|||
PSendSysMessage(LANG_NPCINFO_DUNGEON_ID, target->GetInstanceId());
|
||||
PSendSysMessage(LANG_NPCINFO_POSITION, float(target->GetPositionX()), float(target->GetPositionY()), float(target->GetPositionZ()));
|
||||
|
||||
if ((NpcFlagss & UNIT_NPC_FLAG_VENDOR))
|
||||
if ((npcflags & UNIT_NPC_FLAG_VENDOR))
|
||||
{
|
||||
SendSysMessage(LANG_NPCINFO_VENDOR);
|
||||
}
|
||||
if ((NpcFlagss & UNIT_NPC_FLAG_TRAINER))
|
||||
if ((npcflags & UNIT_NPC_FLAG_TRAINER))
|
||||
{
|
||||
SendSysMessage(LANG_NPCINFO_TRAINER);
|
||||
}
|
||||
|
|
@ -5387,17 +5387,17 @@ bool ChatHandler::HandleServerRestartCommand(char* args)
|
|||
{
|
||||
uint32 delay;
|
||||
if (!ExtractUInt32(&args, delay))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
uint32 exitcode;
|
||||
if (!ExtractOptUInt32(&args, exitcode, RESTART_EXIT_CODE))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// Exit code should be in range of 0-125, 126-255 is used
|
||||
// in many shells for their own return codes and code > 255
|
||||
// is not supported in many others
|
||||
if (exitcode > 125)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
sWorld.ShutdownServ(delay, SHUTDOWN_MASK_RESTART, exitcode);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@ bool ChatHandler::HandleDebugSendChannelNotifyCommand(char* args)
|
|||
// Send notification in chat
|
||||
bool ChatHandler::HandleDebugSendChatMsgCommand(char* args)
|
||||
{
|
||||
const char* msg = "testtest";
|
||||
const char* msg = args;
|
||||
|
||||
uint32 type;
|
||||
if (!ExtractUInt32(&args, type) || type > 255)
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ void ConfusedMovementGenerator<T>::Initialize(T& unit)
|
|||
unit.GetPosition(i_x, i_y, i_z);
|
||||
|
||||
if (!unit.IsAlive() || unit.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
unit.StopMoving();
|
||||
unit.addUnitState(UNIT_STAT_CONFUSED_MOVE);
|
||||
|
|
@ -57,7 +57,7 @@ void ConfusedMovementGenerator<T>::Reset(T& unit)
|
|||
i_nextMoveTime.Reset(0);
|
||||
|
||||
if (!unit.IsAlive() || unit.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
unit.StopMoving();
|
||||
unit.addUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_CONFUSED_MOVE);
|
||||
|
|
@ -68,7 +68,7 @@ bool ConfusedMovementGenerator<T>::Update(T& unit, const uint32& diff)
|
|||
{
|
||||
// ignore in case other no reaction state
|
||||
if (unit.hasUnitState(UNIT_STAT_CAN_NOT_REACT & ~UNIT_STAT_CONFUSED))
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
if (i_nextMoveTime.Passed())
|
||||
{
|
||||
|
|
@ -76,7 +76,7 @@ bool ConfusedMovementGenerator<T>::Update(T& unit, const uint32& diff)
|
|||
unit.addUnitState(UNIT_STAT_CONFUSED_MOVE);
|
||||
|
||||
if (unit.movespline->Finalized())
|
||||
i_nextMoveTime.Reset(urand(800, 1500));
|
||||
{ i_nextMoveTime.Reset(urand(800, 1500)); }
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
#include "MovementGenerator.h"
|
||||
|
||||
template<class T>
|
||||
class ConfusedMovementGenerator
|
||||
class ConfusedMovementGenerator
|
||||
: public MovementGeneratorMedium< T, ConfusedMovementGenerator<T> >
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ void FleeingMovementGenerator<T>::_setTargetLocation(T& owner)
|
|||
{
|
||||
// ignore in case other no reaction state
|
||||
if (owner.hasUnitState((UNIT_STAT_CAN_NOT_REACT | UNIT_STAT_NOT_MOVE) & ~UNIT_STAT_FLEEING))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
float x, y, z;
|
||||
if (!_getPoint(owner, x, y, z))
|
||||
|
|
@ -76,9 +76,9 @@ bool FleeingMovementGenerator<T>::_getPoint(T& owner, float& x, float& y, float&
|
|||
{
|
||||
dist_from_caster = fright->GetDistance(&owner);
|
||||
if (dist_from_caster > 0.2f)
|
||||
angle_to_caster = fright->GetAngle(&owner);
|
||||
{ angle_to_caster = fright->GetAngle(&owner); }
|
||||
else
|
||||
angle_to_caster = frand(0, 2 * M_PI_F);
|
||||
{ angle_to_caster = frand(0, 2 * M_PI_F); }
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -172,7 +172,7 @@ template<class T>
|
|||
bool FleeingMovementGenerator<T>::Update(T& owner, const uint32& time_diff)
|
||||
{
|
||||
if (!owner.IsAlive())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// ignore in case other no reaction state
|
||||
if (owner.hasUnitState((UNIT_STAT_CAN_NOT_REACT | UNIT_STAT_NOT_MOVE) & ~UNIT_STAT_FLEEING))
|
||||
|
|
@ -183,7 +183,7 @@ bool FleeingMovementGenerator<T>::Update(T& owner, const uint32& time_diff)
|
|||
|
||||
i_nextCheckTime.Update(time_diff);
|
||||
if (i_nextCheckTime.Passed() && owner.movespline->Finalized())
|
||||
_setTargetLocation(owner);
|
||||
{ _setTargetLocation(owner); }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -217,7 +217,7 @@ void TimedFleeingMovementGenerator::Finalize(Unit& owner)
|
|||
bool TimedFleeingMovementGenerator::Update(Unit& owner, const uint32& time_diff)
|
||||
{
|
||||
if (!owner.IsAlive())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// ignore in case other no reaction state
|
||||
if (owner.hasUnitState((UNIT_STAT_CAN_NOT_REACT | UNIT_STAT_NOT_MOVE) & ~UNIT_STAT_FLEEING))
|
||||
|
|
@ -228,7 +228,7 @@ bool TimedFleeingMovementGenerator::Update(Unit& owner, const uint32& time_diff)
|
|||
|
||||
i_totalFleeTime.Update(time_diff);
|
||||
if (i_totalFleeTime.Passed())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// This calls grant-parent Update method hiden by FleeingMovementGenerator::Update(Creature &, const uint32 &) version
|
||||
// This is done instead of casting Unit& to Creature& and call parent method, then we can use Unit directly
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
#include "ObjectGuid.h"
|
||||
|
||||
template<class T>
|
||||
class FleeingMovementGenerator
|
||||
class FleeingMovementGenerator
|
||||
: public MovementGeneratorMedium< T, FleeingMovementGenerator<T> >
|
||||
{
|
||||
public:
|
||||
|
|
@ -51,7 +51,7 @@ class FleeingMovementGenerator
|
|||
TimeTracker i_nextCheckTime;
|
||||
};
|
||||
|
||||
class TimedFleeingMovementGenerator
|
||||
class TimedFleeingMovementGenerator
|
||||
: public FleeingMovementGenerator<Creature>
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ void HomeMovementGenerator<Creature>::Reset(Creature&)
|
|||
void HomeMovementGenerator<Creature>::_setTargetLocation(Creature& owner)
|
||||
{
|
||||
if (owner.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
Movement::MoveSplineInit init(owner);
|
||||
float x, y, z, o;
|
||||
|
|
@ -72,7 +72,7 @@ void HomeMovementGenerator<Creature>::Finalize(Creature& owner)
|
|||
if (arrived)
|
||||
{
|
||||
if (owner.GetTemporaryFactionFlags() & TEMPFACTION_RESTORE_REACH_HOME)
|
||||
owner.ClearTemporaryFaction();
|
||||
{ owner.ClearTemporaryFaction(); }
|
||||
|
||||
owner.SetWalk(!owner.hasUnitState(UNIT_STAT_RUNNING_STATE) && !owner.IsLevitating(), false);
|
||||
owner.LoadCreatureAddon(true);
|
||||
|
|
|
|||
|
|
@ -30,10 +30,10 @@
|
|||
class Creature;
|
||||
|
||||
template < class T >
|
||||
class HomeMovementGenerator;
|
||||
class HomeMovementGenerator;
|
||||
|
||||
template <>
|
||||
class HomeMovementGenerator<Creature>
|
||||
class HomeMovementGenerator<Creature>
|
||||
: public MovementGeneratorMedium< Creature, HomeMovementGenerator<Creature> >
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ bool
|
|||
DistractMovementGenerator::Update(Unit& /*owner*/, const uint32& time_diff)
|
||||
{
|
||||
if (time_diff > m_timer)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
m_timer -= time_diff;
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/**
|
||||
* MaNGOS is a full featured server for World of Warcraft, supporting
|
||||
* the following clients: 1.12.x, 2.4.3, 3.3.5a, 4.3.4a and 5.4.8
|
||||
*
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include "MovementGenerator.h"
|
||||
|
||||
class IdleMovementGenerator : public MovementGenerator
|
||||
class IdleMovementGenerator : public MovementGenerator
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ class IdleMovementGenerator : public MovementGenerator
|
|||
|
||||
extern IdleMovementGenerator si_idleMovement;
|
||||
|
||||
class DistractMovementGenerator : public MovementGenerator
|
||||
class DistractMovementGenerator : public MovementGenerator
|
||||
{
|
||||
public:
|
||||
explicit DistractMovementGenerator(uint32 timer) : m_timer(timer) {}
|
||||
|
|
@ -57,7 +57,7 @@ class DistractMovementGenerator : public MovementGenerator
|
|||
uint32 m_timer;
|
||||
};
|
||||
|
||||
class AssistanceDistractMovementGenerator : public DistractMovementGenerator
|
||||
class AssistanceDistractMovementGenerator : public DistractMovementGenerator
|
||||
{
|
||||
public:
|
||||
AssistanceDistractMovementGenerator(uint32 timer) :
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ void MotionMaster::Initialize()
|
|||
(static_cast<WaypointMovementGenerator<Creature>*>(top()))->InitializeWaypointPath(*((Creature*)(m_owner)), 0, PATH_NO_PATH, 0, 0);
|
||||
}
|
||||
else
|
||||
push(&si_idleMovement);
|
||||
{ push(&si_idleMovement); }
|
||||
}
|
||||
|
||||
MotionMaster::~MotionMaster()
|
||||
|
|
@ -76,14 +76,14 @@ MotionMaster::~MotionMaster()
|
|||
MovementGenerator* m = top();
|
||||
pop();
|
||||
if (!isStatic(m))
|
||||
delete m;
|
||||
{ delete m; }
|
||||
}
|
||||
}
|
||||
|
||||
void MotionMaster::UpdateMotion(uint32 diff)
|
||||
{
|
||||
if (m_owner->hasUnitState(UNIT_STAT_CAN_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
MANGOS_ASSERT(!empty());
|
||||
m_cleanFlag |= MMCF_UPDATE;
|
||||
|
|
@ -94,7 +94,7 @@ void MotionMaster::UpdateMotion(uint32 diff)
|
|||
MovementExpired();
|
||||
}
|
||||
else
|
||||
m_cleanFlag &= ~MMCF_UPDATE;
|
||||
{ m_cleanFlag &= ~MMCF_UPDATE; }
|
||||
|
||||
if (m_expList)
|
||||
{
|
||||
|
|
@ -102,14 +102,14 @@ void MotionMaster::UpdateMotion(uint32 diff)
|
|||
{
|
||||
MovementGenerator* mg = (*m_expList)[i];
|
||||
if (!isStatic(mg))
|
||||
delete mg;
|
||||
{ delete mg; }
|
||||
}
|
||||
|
||||
delete m_expList;
|
||||
m_expList = NULL;
|
||||
|
||||
if (empty())
|
||||
Initialize();
|
||||
{ Initialize(); }
|
||||
|
||||
if (m_cleanFlag & MMCF_RESET)
|
||||
{
|
||||
|
|
@ -128,7 +128,7 @@ void MotionMaster::DirectClean(bool reset, bool all)
|
|||
curr->Finalize(*m_owner);
|
||||
|
||||
if (!isStatic(curr))
|
||||
delete curr;
|
||||
{ delete curr; }
|
||||
}
|
||||
|
||||
if (!all && reset)
|
||||
|
|
@ -141,15 +141,15 @@ void MotionMaster::DirectClean(bool reset, bool all)
|
|||
void MotionMaster::DelayedClean(bool reset, bool all)
|
||||
{
|
||||
if (reset)
|
||||
m_cleanFlag |= MMCF_RESET;
|
||||
{ m_cleanFlag |= MMCF_RESET; }
|
||||
else
|
||||
m_cleanFlag &= ~MMCF_RESET;
|
||||
{ m_cleanFlag &= ~MMCF_RESET; }
|
||||
|
||||
if (empty() || (!all && size() == 1))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (!m_expList)
|
||||
m_expList = new ExpireList();
|
||||
{ m_expList = new ExpireList(); }
|
||||
|
||||
while (all ? !empty() : size() > 1)
|
||||
{
|
||||
|
|
@ -158,14 +158,14 @@ void MotionMaster::DelayedClean(bool reset, bool all)
|
|||
curr->Finalize(*m_owner);
|
||||
|
||||
if (!isStatic(curr))
|
||||
m_expList->push_back(curr);
|
||||
{ m_expList->push_back(curr); }
|
||||
}
|
||||
}
|
||||
|
||||
void MotionMaster::DirectExpire(bool reset)
|
||||
{
|
||||
if (empty() || size() == 1)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
MovementGenerator* curr = top();
|
||||
pop();
|
||||
|
|
@ -185,31 +185,31 @@ void MotionMaster::DirectExpire(bool reset)
|
|||
curr->Finalize(*m_owner);
|
||||
|
||||
if (!isStatic(curr))
|
||||
delete curr;
|
||||
{ delete curr; }
|
||||
|
||||
if (empty())
|
||||
Initialize();
|
||||
{ Initialize(); }
|
||||
|
||||
// Prevent reseting possible new pushed MMGen
|
||||
if (reset && top() == nowTop)
|
||||
top()->Reset(*m_owner);
|
||||
{ top()->Reset(*m_owner); }
|
||||
}
|
||||
|
||||
void MotionMaster::DelayedExpire(bool reset)
|
||||
{
|
||||
if (reset)
|
||||
m_cleanFlag |= MMCF_RESET;
|
||||
{ m_cleanFlag |= MMCF_RESET; }
|
||||
else
|
||||
m_cleanFlag &= ~MMCF_RESET;
|
||||
{ m_cleanFlag &= ~MMCF_RESET; }
|
||||
|
||||
if (empty() || size() == 1)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
MovementGenerator* curr = top();
|
||||
pop();
|
||||
|
||||
if (!m_expList)
|
||||
m_expList = new ExpireList();
|
||||
{ m_expList = new ExpireList(); }
|
||||
|
||||
// also drop stored under top() targeted motions
|
||||
while (!empty() && (top()->GetMovementGeneratorType() == CHASE_MOTION_TYPE || top()->GetMovementGeneratorType() == FOLLOW_MOTION_TYPE))
|
||||
|
|
@ -223,13 +223,13 @@ void MotionMaster::DelayedExpire(bool reset)
|
|||
curr->Finalize(*m_owner);
|
||||
|
||||
if (!isStatic(curr))
|
||||
m_expList->push_back(curr);
|
||||
{ m_expList->push_back(curr); }
|
||||
}
|
||||
|
||||
void MotionMaster::MoveIdle()
|
||||
{
|
||||
if (empty() || !isStatic(top()))
|
||||
push(&si_idleMovement);
|
||||
{ push(&si_idleMovement); }
|
||||
}
|
||||
|
||||
void MotionMaster::MoveRandomAroundPoint(float x, float y, float z, float radius, float verticalZ)
|
||||
|
|
@ -248,7 +248,7 @@ void MotionMaster::MoveRandomAroundPoint(float x, float y, float z, float radius
|
|||
void MotionMaster::MoveTargetedHome()
|
||||
{
|
||||
if (m_owner->hasUnitState(UNIT_STAT_LOST_CONTROL))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
Clear(false);
|
||||
|
||||
|
|
@ -256,7 +256,7 @@ void MotionMaster::MoveTargetedHome()
|
|||
{
|
||||
// Manual exception for linked mobs
|
||||
if (m_owner->IsLinkingEventTrigger() && m_owner->GetMap()->GetCreatureLinkingHolder()->TryFollowMaster((Creature*)m_owner))
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s refollowed linked master", m_owner->GetGuidStr().c_str());
|
||||
{ DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s refollowed linked master", m_owner->GetGuidStr().c_str()); }
|
||||
else
|
||||
{
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s targeted home", m_owner->GetGuidStr().c_str());
|
||||
|
|
@ -276,7 +276,7 @@ void MotionMaster::MoveTargetedHome()
|
|||
}
|
||||
}
|
||||
else
|
||||
sLog.outError("%s attempt targeted home", m_owner->GetGuidStr().c_str());
|
||||
{ sLog.outError("%s attempt targeted home", m_owner->GetGuidStr().c_str()); }
|
||||
}
|
||||
|
||||
void MotionMaster::MoveConfused()
|
||||
|
|
@ -284,42 +284,42 @@ void MotionMaster::MoveConfused()
|
|||
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s move confused", m_owner->GetGuidStr().c_str());
|
||||
|
||||
if (m_owner->GetTypeId() == TYPEID_PLAYER)
|
||||
Mutate(new ConfusedMovementGenerator<Player>());
|
||||
{ Mutate(new ConfusedMovementGenerator<Player>()); }
|
||||
else
|
||||
Mutate(new ConfusedMovementGenerator<Creature>());
|
||||
{ Mutate(new ConfusedMovementGenerator<Creature>()); }
|
||||
}
|
||||
|
||||
void MotionMaster::MoveChase(Unit* target, float dist, float angle)
|
||||
{
|
||||
// ignore movement request if target not exist
|
||||
if (!target)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s chase to %s", m_owner->GetGuidStr().c_str(), target->GetGuidStr().c_str());
|
||||
|
||||
if (m_owner->GetTypeId() == TYPEID_PLAYER)
|
||||
Mutate(new ChaseMovementGenerator<Player>(*target, dist, angle));
|
||||
{ Mutate(new ChaseMovementGenerator<Player>(*target, dist, angle)); }
|
||||
else
|
||||
Mutate(new ChaseMovementGenerator<Creature>(*target, dist, angle));
|
||||
{ Mutate(new ChaseMovementGenerator<Creature>(*target, dist, angle)); }
|
||||
}
|
||||
|
||||
void MotionMaster::MoveFollow(Unit* target, float dist, float angle)
|
||||
{
|
||||
if (m_owner->hasUnitState(UNIT_STAT_LOST_CONTROL))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
Clear();
|
||||
|
||||
// ignore movement request if target not exist
|
||||
if (!target)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s follow to %s", m_owner->GetGuidStr().c_str(), target->GetGuidStr().c_str());
|
||||
|
||||
if (m_owner->GetTypeId() == TYPEID_PLAYER)
|
||||
Mutate(new FollowMovementGenerator<Player>(*target, dist, angle));
|
||||
{ Mutate(new FollowMovementGenerator<Player>(*target, dist, angle)); }
|
||||
else
|
||||
Mutate(new FollowMovementGenerator<Creature>(*target, dist, angle));
|
||||
{ Mutate(new FollowMovementGenerator<Creature>(*target, dist, angle)); }
|
||||
}
|
||||
|
||||
void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generatePath)
|
||||
|
|
@ -327,9 +327,9 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generate
|
|||
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s targeted point (Id: %u X: %f Y: %f Z: %f)", m_owner->GetGuidStr().c_str(), id, x, y, z);
|
||||
|
||||
if (m_owner->GetTypeId() == TYPEID_PLAYER)
|
||||
Mutate(new PointMovementGenerator<Player>(id, x, y, z, generatePath));
|
||||
{ Mutate(new PointMovementGenerator<Player>(id, x, y, z, generatePath)); }
|
||||
else
|
||||
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, generatePath));
|
||||
{ Mutate(new PointMovementGenerator<Creature>(id, x, y, z, generatePath)); }
|
||||
}
|
||||
|
||||
void MotionMaster::MoveSeekAssistance(float x, float y, float z)
|
||||
|
|
@ -363,18 +363,18 @@ void MotionMaster::MoveSeekAssistanceDistract(uint32 time)
|
|||
void MotionMaster::MoveFleeing(Unit* enemy, uint32 time)
|
||||
{
|
||||
if (!enemy)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s flee from %s", m_owner->GetGuidStr().c_str(), enemy->GetGuidStr().c_str());
|
||||
|
||||
if (m_owner->GetTypeId() == TYPEID_PLAYER)
|
||||
Mutate(new FleeingMovementGenerator<Player>(enemy->GetObjectGuid()));
|
||||
{ Mutate(new FleeingMovementGenerator<Player>(enemy->GetObjectGuid())); }
|
||||
else
|
||||
{
|
||||
if (time)
|
||||
Mutate(new TimedFleeingMovementGenerator(enemy->GetObjectGuid(), time));
|
||||
{ Mutate(new TimedFleeingMovementGenerator(enemy->GetObjectGuid(), time)); }
|
||||
else
|
||||
Mutate(new FleeingMovementGenerator<Creature>(enemy->GetObjectGuid()));
|
||||
{ Mutate(new FleeingMovementGenerator<Creature>(enemy->GetObjectGuid())); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -434,7 +434,7 @@ void MotionMaster::MoveDistract(uint32 timer)
|
|||
void MotionMaster::MoveFlyOrLand(uint32 id, float x, float y, float z, bool liftOff)
|
||||
{
|
||||
if (m_owner->GetTypeId() != TYPEID_UNIT)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_AI_AND_MOVEGENSS, "%s targeted point for %s (Id: %u X: %f Y: %f Z: %f)", m_owner->GetGuidStr().c_str(), liftOff ? "liftoff" : "landing", id, x, y, z);
|
||||
Mutate(new FlyOrLandMovementGenerator(id, x, y, z, liftOff));
|
||||
|
|
@ -457,7 +457,7 @@ void MotionMaster::Mutate(MovementGenerator* m)
|
|||
}
|
||||
|
||||
if (!empty())
|
||||
top()->Interrupt(*m_owner);
|
||||
{ top()->Interrupt(*m_owner); }
|
||||
}
|
||||
|
||||
m->Initialize(*m_owner);
|
||||
|
|
@ -488,7 +488,7 @@ uint32 MotionMaster::getLastReachedWaypoint() const
|
|||
for (Impl::container_type::const_reverse_iterator rItr = Impl::c.rbegin(); rItr != Impl::c.rend(); ++rItr)
|
||||
{
|
||||
if ((*rItr)->GetMovementGeneratorType() == WAYPOINT_MOTION_TYPE)
|
||||
return (static_cast<WaypointMovementGenerator<Creature>*>(*rItr))->getLastReachedWaypoint();
|
||||
{ return (static_cast<WaypointMovementGenerator<Creature>*>(*rItr))->getLastReachedWaypoint(); }
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -496,7 +496,7 @@ uint32 MotionMaster::getLastReachedWaypoint() const
|
|||
MovementGeneratorType MotionMaster::GetCurrentMovementGeneratorType() const
|
||||
{
|
||||
if (empty())
|
||||
return IDLE_MOTION_TYPE;
|
||||
{ return IDLE_MOTION_TYPE; }
|
||||
|
||||
return top()->GetMovementGeneratorType();
|
||||
}
|
||||
|
|
@ -516,7 +516,7 @@ void MotionMaster::GetWaypointPathInformation(std::ostringstream& oss) const
|
|||
bool MotionMaster::GetDestination(float& x, float& y, float& z)
|
||||
{
|
||||
if (m_owner->movespline->Finalized())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
const G3D::Vector3& dest = m_owner->movespline->FinalDestination();
|
||||
x = dest.x;
|
||||
|
|
@ -558,7 +558,7 @@ void MotionMaster::MoveFall()
|
|||
|
||||
// Abort too if the ground is very near
|
||||
if (fabs(m_owner->GetPositionZ() - tz) < 0.1f)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
Movement::MoveSplineInit init(*m_owner);
|
||||
init.MoveTo(m_owner->GetPositionX(), m_owner->GetPositionY(), tz);
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ enum MMCleanFlag
|
|||
MMCF_RESET = 2 // Flag if need top()->Reset()
|
||||
};
|
||||
|
||||
class MotionMaster : private std::stack<MovementGenerator*>
|
||||
class MotionMaster : private std::stack<MovementGenerator*>
|
||||
{
|
||||
private:
|
||||
typedef std::stack<MovementGenerator*> Impl;
|
||||
|
|
@ -95,16 +95,16 @@ class MotionMaster : private std::stack<MovementGenerator*>
|
|||
void Clear(bool reset = true, bool all = false)
|
||||
{
|
||||
if (m_cleanFlag & MMCF_UPDATE)
|
||||
DelayedClean(reset, all);
|
||||
{ DelayedClean(reset, all); }
|
||||
else
|
||||
DirectClean(reset, all);
|
||||
{ DirectClean(reset, all); }
|
||||
}
|
||||
void MovementExpired(bool reset = true)
|
||||
{
|
||||
if (m_cleanFlag & MMCF_UPDATE)
|
||||
DelayedExpire(reset);
|
||||
{ DelayedExpire(reset); }
|
||||
else
|
||||
DirectExpire(reset);
|
||||
{ DirectExpire(reset); }
|
||||
}
|
||||
|
||||
void MoveIdle();
|
||||
|
|
@ -129,9 +129,9 @@ class MotionMaster : private std::stack<MovementGenerator*>
|
|||
|
||||
void propagateSpeedChange();
|
||||
bool SetNextWaypoint(uint32 pointId);
|
||||
|
||||
uint32 getLastReachedWaypoint() const;
|
||||
void GetWaypointPathInformation(std::ostringstream& oss) const;
|
||||
|
||||
bool GetDestination(float& x, float& y, float& z);
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class Unit;
|
|||
class Creature;
|
||||
class Player;
|
||||
|
||||
class MovementGenerator
|
||||
class MovementGenerator
|
||||
{
|
||||
public:
|
||||
virtual ~MovementGenerator();
|
||||
|
|
@ -70,7 +70,7 @@ class MovementGenerator
|
|||
};
|
||||
|
||||
template<class T, class D>
|
||||
class MANGOS_DLL_SPEC MovementGeneratorMedium : public MovementGenerator
|
||||
class MovementGeneratorMedium : public MovementGenerator
|
||||
{
|
||||
public:
|
||||
void Initialize(Unit& u) override
|
||||
|
|
|
|||
|
|
@ -102,7 +102,6 @@ class PathFinder
|
|||
|
||||
dtQueryFilter m_filter; // use single filter for all movements, update it when needed
|
||||
|
||||
|
||||
void setStartPosition(const Vector3& point) { m_startPosition = point; }
|
||||
void setEndPosition(const Vector3& point) { m_actualEndPosition = point; m_endPosition = point; }
|
||||
void setActualEndPosition(const Vector3& point) { m_actualEndPosition = point; }
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ template<class T>
|
|||
void PointMovementGenerator<T>::Initialize(T& unit)
|
||||
{
|
||||
if (unit.hasUnitState(UNIT_STAT_CAN_NOT_REACT | UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
unit.StopMoving();
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ void PointMovementGenerator<T>::Finalize(T& unit)
|
|||
unit.clearUnitState(UNIT_STAT_ROAMING | UNIT_STAT_ROAMING_MOVE);
|
||||
|
||||
if (unit.movespline->Finalized())
|
||||
MovementInform(unit);
|
||||
{ MovementInform(unit); }
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
@ -79,7 +79,7 @@ bool PointMovementGenerator<T>::Update(T& unit, const uint32& diff)
|
|||
}
|
||||
|
||||
if (!unit.hasUnitState(UNIT_STAT_ROAMING_MOVE) && unit.movespline->Finalized())
|
||||
Initialize(unit);
|
||||
{ Initialize(unit); }
|
||||
|
||||
return !unit.movespline->Finalized();
|
||||
}
|
||||
|
|
@ -93,7 +93,7 @@ template <>
|
|||
void PointMovementGenerator<Creature>::MovementInform(Creature& unit)
|
||||
{
|
||||
if (unit.AI())
|
||||
unit.AI()->MovementInform(POINT_MOTION_TYPE, id);
|
||||
{ unit.AI()->MovementInform(POINT_MOTION_TYPE, id); }
|
||||
|
||||
if (unit.IsTemporarySummon())
|
||||
{
|
||||
|
|
@ -101,7 +101,7 @@ void PointMovementGenerator<Creature>::MovementInform(Creature& unit)
|
|||
if (pSummon->GetSummonerGuid().IsCreatureOrVehicle())
|
||||
if (Creature* pSummoner = unit.GetMap()->GetCreature(pSummon->GetSummonerGuid()))
|
||||
if (pSummoner->AI())
|
||||
pSummoner->AI()->SummonedMovementInform(&unit, POINT_MOTION_TYPE, id);
|
||||
{ pSummoner->AI()->SummonedMovementInform(&unit, POINT_MOTION_TYPE, id); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ void AssistanceMovementGenerator::Finalize(Unit& unit)
|
|||
((Creature*)&unit)->SetNoCallAssistance(false);
|
||||
((Creature*)&unit)->CallAssistance();
|
||||
if (unit.IsAlive())
|
||||
unit.GetMotionMaster()->MoveSeekAssistanceDistract(sWorld.getConfig(CONFIG_UINT32_CREATURE_FAMILY_ASSISTANCE_DELAY));
|
||||
{ unit.GetMotionMaster()->MoveSeekAssistanceDistract(sWorld.getConfig(CONFIG_UINT32_CREATURE_FAMILY_ASSISTANCE_DELAY)); }
|
||||
}
|
||||
|
||||
bool EffectMovementGenerator::Update(Unit& unit, const uint32&)
|
||||
|
|
@ -134,24 +134,24 @@ bool EffectMovementGenerator::Update(Unit& unit, const uint32&)
|
|||
void EffectMovementGenerator::Finalize(Unit& unit)
|
||||
{
|
||||
if (unit.GetTypeId() != TYPEID_UNIT)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (((Creature&)unit).AI() && unit.movespline->Finalized())
|
||||
((Creature&)unit).AI()->MovementInform(EFFECT_MOTION_TYPE, m_Id);
|
||||
{ ((Creature&)unit).AI()->MovementInform(EFFECT_MOTION_TYPE, m_Id); }
|
||||
// Need restore previous movement since we have no proper states system
|
||||
if (unit.IsAlive() && !unit.hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_FLEEING | UNIT_STAT_NO_COMBAT_MOVEMENT))
|
||||
{
|
||||
if (Unit* victim = unit.getVictim())
|
||||
unit.GetMotionMaster()->MoveChase(victim);
|
||||
{ unit.GetMotionMaster()->MoveChase(victim); }
|
||||
else
|
||||
unit.GetMotionMaster()->Initialize();
|
||||
{ unit.GetMotionMaster()->Initialize(); }
|
||||
}
|
||||
}
|
||||
|
||||
void FlyOrLandMovementGenerator::Initialize(Unit& unit)
|
||||
{
|
||||
if (unit.hasUnitState(UNIT_STAT_CAN_NOT_REACT | UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
unit.StopMoving();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
#include "MovementGenerator.h"
|
||||
|
||||
template<class T>
|
||||
class PointMovementGenerator
|
||||
class PointMovementGenerator
|
||||
: public MovementGeneratorMedium< T, PointMovementGenerator<T> >
|
||||
{
|
||||
public:
|
||||
|
|
@ -52,7 +52,7 @@ class PointMovementGenerator
|
|||
bool m_generatePath;
|
||||
};
|
||||
|
||||
class AssistanceMovementGenerator
|
||||
class AssistanceMovementGenerator
|
||||
: public PointMovementGenerator<Creature>
|
||||
{
|
||||
public:
|
||||
|
|
@ -78,7 +78,7 @@ class EffectMovementGenerator : public MovementGenerator
|
|||
uint32 m_Id;
|
||||
};
|
||||
|
||||
class FlyOrLandMovementGenerator : public PointMovementGenerator<Creature>
|
||||
class FlyOrLandMovementGenerator : public PointMovementGenerator<Creature>
|
||||
{
|
||||
public:
|
||||
FlyOrLandMovementGenerator(uint32 _id, float _x, float _y, float _z, bool liftOff) :
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ void RandomMovementGenerator<Creature>::Initialize(Creature& creature)
|
|||
creature.addUnitState(UNIT_STAT_ROAMING); // _MOVE set in _setRandomLocation
|
||||
|
||||
if (!creature.IsAlive() || creature.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
_setRandomLocation(creature);
|
||||
}
|
||||
|
|
@ -144,7 +144,7 @@ bool RandomMovementGenerator<Creature>::Update(Creature& creature, const uint32&
|
|||
{
|
||||
i_nextMoveTime.Update(diff);
|
||||
if (i_nextMoveTime.Passed())
|
||||
_setRandomLocation(creature);
|
||||
{ _setRandomLocation(creature); }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
#define MOVEMENT_RANDOM_MMGEN_CHANCE_NO_BREAK 30
|
||||
|
||||
template<class T>
|
||||
class RandomMovementGenerator
|
||||
class RandomMovementGenerator
|
||||
: public MovementGeneratorMedium< T, RandomMovementGenerator<T> >
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -38,10 +38,10 @@ template<class T, typename D>
|
|||
void TargetedMovementGeneratorMedium<T, D>::_setTargetLocation(T& owner, bool updateDestination)
|
||||
{
|
||||
if (!i_target.isValid() || !i_target->IsInWorld())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (owner.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
float x, y, z;
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ void TargetedMovementGeneratorMedium<T, D>::_setTargetLocation(T& owner, bool up
|
|||
if (!RequiresNewPosition(owner, x, y, z))
|
||||
{
|
||||
if (!owner.movespline->Finalized())
|
||||
return;
|
||||
{ return; }
|
||||
}
|
||||
// Chase Movement and angle == 0 case: Chase to current angle
|
||||
else if (this->GetMovementGeneratorType() == CHASE_MOTION_TYPE && i_angle == 0.0f)
|
||||
|
|
@ -78,14 +78,14 @@ void TargetedMovementGeneratorMedium<T, D>::_setTargetLocation(T& owner, bool up
|
|||
}
|
||||
|
||||
if (!i_path)
|
||||
i_path = new PathFinder(&owner);
|
||||
{ i_path = new PathFinder(&owner); }
|
||||
|
||||
// allow pets following their master to cheat while generating paths
|
||||
bool forceDest = (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->IsPet()
|
||||
&& owner.hasUnitState(UNIT_STAT_FOLLOW));
|
||||
i_path->calculate(x, y, z, forceDest);
|
||||
if (i_path->getPathType() & PATHFIND_NOPATH)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
D::_addUnitStateMove(owner);
|
||||
i_targetReached = false;
|
||||
|
|
@ -101,10 +101,10 @@ template<class T, typename D>
|
|||
bool TargetedMovementGeneratorMedium<T, D>::Update(T& owner, const uint32& time_diff)
|
||||
{
|
||||
if (!i_target.isValid() || !i_target->IsInWorld())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
if (!owner.IsAlive())
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
if (owner.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||
{
|
||||
|
|
@ -122,7 +122,7 @@ bool TargetedMovementGeneratorMedium<T, D>::Update(T& owner, const uint32& time_
|
|||
if (owner.IsNonMeleeSpellCasted(false, false, true))
|
||||
{
|
||||
if (!owner.IsStopped())
|
||||
owner.StopMoving();
|
||||
{ owner.StopMoving(); }
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -139,17 +139,16 @@ bool TargetedMovementGeneratorMedium<T, D>::Update(T& owner, const uint32& time_
|
|||
{
|
||||
i_recheckDistance.Reset(this->GetMovementGeneratorType() == FOLLOW_MOTION_TYPE ? 50 : 100);
|
||||
G3D::Vector3 dest = owner.movespline->FinalDestination();
|
||||
|
||||
targetMoved = RequiresNewPosition(owner, dest.x, dest.y, dest.z);
|
||||
}
|
||||
|
||||
if (m_speedChanged || targetMoved)
|
||||
_setTargetLocation(owner, targetMoved);
|
||||
{ _setTargetLocation(owner, targetMoved); }
|
||||
|
||||
if (owner.movespline->Finalized())
|
||||
{
|
||||
if (i_angle == 0.f && !owner.HasInArc(0.01f, i_target.getTarget()))
|
||||
owner.SetInFront(i_target.getTarget());
|
||||
{ owner.SetInFront(i_target.getTarget()); }
|
||||
|
||||
if (!i_targetReached)
|
||||
{
|
||||
|
|
@ -171,9 +170,9 @@ bool TargetedMovementGeneratorMedium<T, D>::RequiresNewPosition(T& owner, float
|
|||
{
|
||||
// More distance let have better performance, less distance let have more sensitive reaction at target move.
|
||||
if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->CanFly())
|
||||
return !i_target->IsWithinDist3d(x, y, z, this->GetDynamicTargetDistance(owner, true));
|
||||
{ return !i_target->IsWithinDist3d(x, y, z, this->GetDynamicTargetDistance(owner, true)); }
|
||||
else
|
||||
return !i_target->IsWithinDist2d(x, y, this->GetDynamicTargetDistance(owner, true));
|
||||
{ return !i_target->IsWithinDist2d(x, y, this->GetDynamicTargetDistance(owner, true)); }
|
||||
}
|
||||
|
||||
//-----------------------------------------------//
|
||||
|
|
@ -192,7 +191,7 @@ template<class T>
|
|||
void ChaseMovementGenerator<T>::_reachTarget(T& owner)
|
||||
{
|
||||
if (owner.CanReachWithMeleeAttack(this->i_target.getTarget()))
|
||||
owner.Attack(this->i_target.getTarget(), true);
|
||||
{ owner.Attack(this->i_target.getTarget(), true); }
|
||||
}
|
||||
|
||||
template<>
|
||||
|
|
@ -237,7 +236,7 @@ template<class T>
|
|||
float ChaseMovementGenerator<T>::GetDynamicTargetDistance(T& owner, bool forRangeCheck) const
|
||||
{
|
||||
if (!forRangeCheck)
|
||||
return this->i_offset + CHASE_DEFAULT_RANGE_FACTOR * this->i_target->GetCombatReach(&owner);
|
||||
{ return this->i_offset + CHASE_DEFAULT_RANGE_FACTOR * this->i_target->GetCombatReach(&owner); }
|
||||
|
||||
return CHASE_RECHASE_RANGE_FACTOR * this->i_target->GetCombatReach(&owner) - this->i_target->GetObjectBoundingRadius();
|
||||
}
|
||||
|
|
@ -261,7 +260,7 @@ bool FollowMovementGenerator<Player>::EnableWalking() const
|
|||
}
|
||||
|
||||
template<>
|
||||
void FollowMovementGenerator<Player>::_updateSpeed(Player &/*u*/)
|
||||
void FollowMovementGenerator<Player>::_updateSpeed(Player& /*u*/)
|
||||
{
|
||||
// nothing to do for Player
|
||||
}
|
||||
|
|
@ -271,7 +270,7 @@ void FollowMovementGenerator<Creature>::_updateSpeed(Creature& u)
|
|||
{
|
||||
// pet only sync speed with owner
|
||||
if (!((Creature&)u).IsPet() || !i_target.isValid() || i_target->GetObjectGuid() != u.GetOwnerGuid())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
u.UpdateSpeed(MOVE_RUN, true);
|
||||
u.UpdateSpeed(MOVE_WALK, true);
|
||||
|
|
@ -327,12 +326,12 @@ template<class T>
|
|||
float FollowMovementGenerator<T>::GetDynamicTargetDistance(T& owner, bool forRangeCheck) const
|
||||
{
|
||||
if (!forRangeCheck)
|
||||
return this->i_offset + owner.GetObjectBoundingRadius() + this->i_target->GetObjectBoundingRadius();
|
||||
{ return this->i_offset + owner.GetObjectBoundingRadius() + this->i_target->GetObjectBoundingRadius(); }
|
||||
|
||||
float allowed_dist = sWorld.getConfig(CONFIG_FLOAT_RATE_TARGET_POS_RECALCULATION_RANGE) - this->i_target->GetObjectBoundingRadius();
|
||||
allowed_dist += FOLLOW_RECALCULATE_FACTOR * (owner.GetObjectBoundingRadius() + this->i_target->GetObjectBoundingRadius());
|
||||
if (this->i_offset > FOLLOW_DIST_GAP_FOR_DIST_FACTOR)
|
||||
allowed_dist += FOLLOW_DIST_RECALCULATE_FACTOR * this->i_offset;
|
||||
{ allowed_dist += FOLLOW_DIST_RECALCULATE_FACTOR * this->i_offset; }
|
||||
|
||||
return allowed_dist;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
class PathFinder;
|
||||
|
||||
class TargetedMovementGeneratorBase
|
||||
class TargetedMovementGeneratorBase
|
||||
{
|
||||
public:
|
||||
TargetedMovementGeneratorBase(Unit& target) { i_target.link(&target, this); }
|
||||
|
|
@ -40,7 +40,7 @@ class TargetedMovementGeneratorBase
|
|||
};
|
||||
|
||||
template<class T, typename D>
|
||||
class TargetedMovementGeneratorMedium
|
||||
class TargetedMovementGeneratorMedium
|
||||
: public MovementGeneratorMedium< T, D >, public TargetedMovementGeneratorBase
|
||||
{
|
||||
protected:
|
||||
|
|
@ -78,7 +78,7 @@ class TargetedMovementGeneratorMedium
|
|||
};
|
||||
|
||||
template<class T>
|
||||
class ChaseMovementGenerator : public TargetedMovementGeneratorMedium<T, ChaseMovementGenerator<T> >
|
||||
class ChaseMovementGenerator : public TargetedMovementGeneratorMedium<T, ChaseMovementGenerator<T> >
|
||||
{
|
||||
public:
|
||||
ChaseMovementGenerator(Unit& target, float offset, float angle)
|
||||
|
|
@ -103,7 +103,7 @@ class ChaseMovementGenerator : public TargetedMovementGeneratorMedium<T, ChaseM
|
|||
};
|
||||
|
||||
template<class T>
|
||||
class FollowMovementGenerator : public TargetedMovementGeneratorMedium<T, FollowMovementGenerator<T> >
|
||||
class FollowMovementGenerator : public TargetedMovementGeneratorMedium<T, FollowMovementGenerator<T> >
|
||||
{
|
||||
public:
|
||||
FollowMovementGenerator(Unit& target)
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ void WaypointMovementGenerator<Creature>::LoadPath(Creature& creature, int32 pat
|
|||
}
|
||||
|
||||
if (i_path->empty())
|
||||
return;
|
||||
{ return; }
|
||||
// Initialize the i_currentNode to point to the first node
|
||||
i_currentNode = i_path->begin()->first;
|
||||
m_lastReachedWaypoint = 0;
|
||||
|
|
@ -107,12 +107,12 @@ void WaypointMovementGenerator<Creature>::Reset(Creature& creature)
|
|||
void WaypointMovementGenerator<Creature>::OnArrived(Creature& creature)
|
||||
{
|
||||
if (!i_path || i_path->empty())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
m_lastReachedWaypoint = i_currentNode;
|
||||
|
||||
if (m_isArrivalDone)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
creature.clearUnitState(UNIT_STAT_ROAMING_MOVE);
|
||||
m_isArrivalDone = true;
|
||||
|
|
@ -131,13 +131,13 @@ void WaypointMovementGenerator<Creature>::OnArrived(Creature& creature)
|
|||
if (WaypointBehavior* behavior = node.behavior)
|
||||
{
|
||||
if (behavior->emote != 0)
|
||||
creature.HandleEmote(behavior->emote);
|
||||
{ creature.HandleEmote(behavior->emote); }
|
||||
|
||||
if (behavior->spell != 0)
|
||||
creature.CastSpell(&creature, behavior->spell, false);
|
||||
{ creature.CastSpell(&creature, behavior->spell, false); }
|
||||
|
||||
if (behavior->model1 != 0)
|
||||
creature.SetDisplayId(behavior->model1);
|
||||
{ creature.SetDisplayId(behavior->model1); }
|
||||
|
||||
if (behavior->textid[0])
|
||||
{
|
||||
|
|
@ -150,16 +150,16 @@ void WaypointMovementGenerator<Creature>::OnArrived(Creature& creature)
|
|||
for (; i < MAX_WAYPOINT_TEXT; ++i)
|
||||
{
|
||||
if (!behavior->textid[i])
|
||||
break;
|
||||
{ break; }
|
||||
}
|
||||
|
||||
textId = behavior->textid[urand(0, i - 1)];
|
||||
}
|
||||
|
||||
if (MangosStringLocale const* textData = sObjectMgr.GetMangosStringLocale(textId))
|
||||
creature.MonsterText(textData, NULL);
|
||||
{ creature.MonsterText(textData, NULL); }
|
||||
else
|
||||
sLog.outErrorDb("%s reached waypoint %u, attempted to do text %i, but required text-data could not be found", creature.GetGuidStr().c_str(), i_currentNode, textId);
|
||||
{ sLog.outErrorDb("%s reached waypoint %u, attempted to do text %i, but required text-data could not be found", creature.GetGuidStr().c_str(), i_currentNode, textId); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -179,13 +179,13 @@ void WaypointMovementGenerator<Creature>::OnArrived(Creature& creature)
|
|||
void WaypointMovementGenerator<Creature>::StartMove(Creature& creature)
|
||||
{
|
||||
if (!i_path || i_path->empty())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (Stopped(creature))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (!creature.IsAlive() || creature.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
WaypointPath::const_iterator currPoint = i_path->find(i_currentNode);
|
||||
MANGOS_ASSERT(currPoint != i_path->end());
|
||||
|
|
@ -193,7 +193,7 @@ void WaypointMovementGenerator<Creature>::StartMove(Creature& creature)
|
|||
if (WaypointBehavior* behavior = currPoint->second.behavior)
|
||||
{
|
||||
if (behavior->model2 != 0)
|
||||
creature.SetDisplayId(behavior->model2);
|
||||
{ creature.SetDisplayId(behavior->model2); }
|
||||
creature.SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||
}
|
||||
|
||||
|
|
@ -231,7 +231,7 @@ void WaypointMovementGenerator<Creature>::StartMove(Creature& creature)
|
|||
init.MoveTo(nextNode.x, nextNode.y, nextNode.z, true);
|
||||
|
||||
if (nextNode.orientation != 100 && nextNode.delay != 0)
|
||||
init.SetFacing(nextNode.orientation);
|
||||
{ init.SetFacing(nextNode.orientation); }
|
||||
creature.SetWalk(!creature.hasUnitState(UNIT_STAT_RUNNING_STATE) && !creature.IsLevitating(), false);
|
||||
init.Launch();
|
||||
}
|
||||
|
|
@ -256,12 +256,12 @@ bool WaypointMovementGenerator<Creature>::Update(Creature& creature, const uint3
|
|||
if (Stopped(creature))
|
||||
{
|
||||
if (CanMove(diff, creature))
|
||||
StartMove(creature);
|
||||
{ StartMove(creature); }
|
||||
}
|
||||
else
|
||||
{
|
||||
if (creature.IsStopped())
|
||||
Stop(STOP_TIME_FOR_PLAYER);
|
||||
{ Stop(STOP_TIME_FOR_PLAYER); }
|
||||
else if (creature.movespline->Finalized())
|
||||
{
|
||||
OnArrived(creature);
|
||||
|
|
@ -289,12 +289,12 @@ bool WaypointMovementGenerator<Creature>::GetResetPosition(Creature&, float& x,
|
|||
{
|
||||
// prevent a crash at empty waypoint path.
|
||||
if (!i_path || i_path->empty())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
WaypointPath::const_iterator lastPoint = i_path->find(m_lastReachedWaypoint);
|
||||
// Special case: Before the first waypoint is reached, m_lastReachedWaypoint is set to 0 (which may not be contained in i_path)
|
||||
if (!m_lastReachedWaypoint && lastPoint == i_path->end())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
MANGOS_ASSERT(lastPoint != i_path->end());
|
||||
|
||||
|
|
@ -367,14 +367,14 @@ bool WaypointMovementGenerator<Creature>::SetNextWaypoint(uint32 pointId)
|
|||
uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const
|
||||
{
|
||||
if (i_currentNode >= i_path->size())
|
||||
return i_path->size();
|
||||
{ return i_path->size(); }
|
||||
|
||||
uint32 curMapId = (*i_path)[i_currentNode].mapid;
|
||||
|
||||
for (uint32 i = i_currentNode; i < i_path->size(); ++i)
|
||||
{
|
||||
if ((*i_path)[i].mapid != curMapId)
|
||||
return i;
|
||||
{ return i; }
|
||||
}
|
||||
|
||||
return i_path->size();
|
||||
|
|
@ -398,7 +398,7 @@ void FlightPathMovementGenerator::Finalize(Player& player)
|
|||
{
|
||||
player.GetHostileRefManager().setOnlineOfflineState(true);
|
||||
if (player.pvpInfo.inHostileArea)
|
||||
player.CastSpell(&player, 2479, true);
|
||||
{ player.CastSpell(&player, 2479, true); }
|
||||
|
||||
// update z position to ground and orientation for landing point
|
||||
// this prevent cheating with landing point at lags
|
||||
|
|
@ -446,7 +446,7 @@ bool FlightPathMovementGenerator::Update(Player& player, const uint32& diff)
|
|||
{
|
||||
DoEventIfAny(player, (*i_path)[i_currentNode], departureEvent);
|
||||
if (pointId == i_currentNode)
|
||||
break;
|
||||
{ break; }
|
||||
i_currentNode += (uint32)departureEvent;
|
||||
departureEvent = !departureEvent;
|
||||
}
|
||||
|
|
@ -459,7 +459,7 @@ bool FlightPathMovementGenerator::Update(Player& player, const uint32& diff)
|
|||
void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport()
|
||||
{
|
||||
if (i_path->empty())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
uint32 map0 = (*i_path)[0].mapid;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,10 +39,10 @@
|
|||
#include <set>
|
||||
|
||||
#define FLIGHT_TRAVEL_UPDATE 100
|
||||
#define STOP_TIME_FOR_PLAYER (3 * MINUTE * IN_MILLISECONDS) // 3 Minutes
|
||||
#define STOP_TIME_FOR_PLAYER (3 * MINUTE * IN_MILLISECONDS)// 3 Minutes
|
||||
|
||||
template<class T, class P>
|
||||
class MANGOS_DLL_SPEC PathMovementBase
|
||||
class PathMovementBase
|
||||
{
|
||||
public:
|
||||
PathMovementBase() : i_currentNode(0) {}
|
||||
|
|
@ -63,12 +63,12 @@ class MANGOS_DLL_SPEC PathMovementBase
|
|||
*/
|
||||
|
||||
template<class T>
|
||||
class WaypointMovementGenerator;
|
||||
class WaypointMovementGenerator;
|
||||
|
||||
template<>
|
||||
class MANGOS_DLL_SPEC WaypointMovementGenerator<Creature>
|
||||
class WaypointMovementGenerator<Creature>
|
||||
: public MovementGeneratorMedium< Creature, WaypointMovementGenerator<Creature> >,
|
||||
public PathMovementBase<Creature, WaypointPath const*>
|
||||
public PathMovementBase<Creature, WaypointPath const*>
|
||||
{
|
||||
public:
|
||||
WaypointMovementGenerator(Creature&) : i_nextMoveTime(0), m_isArrivalDone(false), m_lastReachedWaypoint(0) {}
|
||||
|
|
@ -111,7 +111,7 @@ class MANGOS_DLL_SPEC WaypointMovementGenerator<Creature>
|
|||
/** FlightPathMovementGenerator generates movement of the player for the paths
|
||||
* and hence generates ground and activities for the player.
|
||||
*/
|
||||
class FlightPathMovementGenerator
|
||||
class FlightPathMovementGenerator
|
||||
: public MovementGeneratorMedium< Player, FlightPathMovementGenerator >,
|
||||
public PathMovementBase<Player, TaxiPathNodeList const*>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ int AggressorAI::Permissible(const Creature* creature)
|
|||
{
|
||||
// have some hostile factions, it will be selected by IsHostileTo check at MoveInLineOfSight
|
||||
if (!creature->IsCivilian() && !creature->IsNeutralToAll())
|
||||
return PERMIT_BASE_PROACTIVE;
|
||||
{ return PERMIT_BASE_PROACTIVE; }
|
||||
|
||||
return PERMIT_BASE_NO;
|
||||
}
|
||||
|
|
@ -47,10 +47,10 @@ void AggressorAI::MoveInLineOfSight(Unit* u)
|
|||
{
|
||||
// Ignore Z for flying creatures
|
||||
if (!m_creature->CanFly() && m_creature->GetDistanceZ(u) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (m_creature->CanInitiateAttack() && u->IsTargetableForAttack() &&
|
||||
m_creature->IsHostileTo(u) && u->isInAccessablePlaceFor(m_creature))
|
||||
m_creature->IsHostileTo(u) && u->isInAccessablePlaceFor(m_creature))
|
||||
{
|
||||
float attackRadius = m_creature->GetAttackDistance(u);
|
||||
if (m_creature->IsWithinDistInMap(u, attackRadius) && m_creature->IsWithinLOSInMap(u))
|
||||
|
|
@ -111,7 +111,7 @@ void AggressorAI::EnterEvadeMode()
|
|||
|
||||
// Remove ChaseMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead
|
||||
if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
|
||||
m_creature->GetMotionMaster()->MoveTargetedHome();
|
||||
{ m_creature->GetMotionMaster()->MoveTargetedHome(); }
|
||||
}
|
||||
|
||||
m_creature->DeleteThreatList();
|
||||
|
|
@ -124,7 +124,7 @@ void AggressorAI::UpdateAI(const uint32 /*diff*/)
|
|||
{
|
||||
// update i_victimGuid if m_creature->getVictim() !=0 and changed
|
||||
if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
i_victimGuid = m_creature->getVictim()->GetObjectGuid();
|
||||
|
||||
|
|
@ -140,7 +140,7 @@ bool AggressorAI::IsVisible(Unit* pl) const
|
|||
void AggressorAI::AttackStart(Unit* u)
|
||||
{
|
||||
if (!u || !m_creature->CanAttackByItself())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (m_creature->Attack(u, true))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -580,7 +580,7 @@ uint32 ArenaTeam::GetPoints(uint32 MemberRating)
|
|||
else if (m_Type == ARENA_TYPE_3v3)
|
||||
points *= 0.88f;
|
||||
|
||||
return (uint32)points;
|
||||
return (uint32) points;
|
||||
}
|
||||
|
||||
bool ArenaTeam::HaveMember(ObjectGuid guid) const
|
||||
|
|
@ -736,8 +736,8 @@ void ArenaTeam::UpdateArenaPointsHelper(std::map<uint32, uint32>& PlayerPoints)
|
|||
if (m_stats.games_week < 10)
|
||||
return;
|
||||
// to get points, a player has to participate in at least 30% of the matches
|
||||
uint32 min_plays = (uint32)ceil(m_stats.games_week * 0.3);
|
||||
for (MemberList::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
uint32 min_plays = (uint32) ceil(m_stats.games_week * 0.3);
|
||||
for (MemberList::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
{
|
||||
// the player participated in enough games, update his points
|
||||
uint32 points_to_add = 0;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/**
|
||||
* MaNGOS is a full featured server for World of Warcraft, supporting
|
||||
* the following clients: 1.12.x, 2.4.3, 3.3.5a, 4.3.4a and 5.4.8
|
||||
*
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ AuctionHouseMgr::AuctionHouseMgr()
|
|||
AuctionHouseMgr::~AuctionHouseMgr()
|
||||
{
|
||||
for (ItemMap::const_iterator itr = mAitems.begin(); itr != mAitems.end(); ++itr)
|
||||
delete itr->second;
|
||||
{ delete itr->second; }
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -143,7 +143,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction)
|
|||
}
|
||||
}
|
||||
else if (!bidder)
|
||||
bidder_accId = sObjectMgr.GetPlayerAccountIdByGUID(bidder_guid);
|
||||
{ bidder_accId = sObjectMgr.GetPlayerAccountIdByGUID(bidder_guid); }
|
||||
|
||||
if (auction_owner)
|
||||
auction_owner->GetSession()->SendAuctionOwnerNotification(auction);
|
||||
|
|
@ -412,29 +412,29 @@ void AuctionHouseMgr::LoadAuctions()
|
|||
auction->itemGuidLow = 0; // must be 0 if auction delivery pending
|
||||
else
|
||||
{
|
||||
// check if sold item exists for guid
|
||||
// and item_template in fact (GetAItem will fail if problematic in result check in AuctionHouseMgr::LoadAuctionItems)
|
||||
Item* pItem = GetAItem(auction->itemGuidLow);
|
||||
if (!pItem)
|
||||
{
|
||||
auction->DeleteFromDB();
|
||||
sLog.outError("Auction %u has not a existing item : %u, deleted", auction->Id, auction->itemGuidLow);
|
||||
delete auction;
|
||||
continue;
|
||||
}
|
||||
// check if sold item exists for guid
|
||||
// and item_template in fact (GetAItem will fail if problematic in result check in AuctionHouseMgr::LoadAuctionItems)
|
||||
Item* pItem = GetAItem(auction->itemGuidLow);
|
||||
if (!pItem)
|
||||
{
|
||||
auction->DeleteFromDB();
|
||||
sLog.outError("Auction %u has not a existing item : %u, deleted", auction->Id, auction->itemGuidLow);
|
||||
delete auction;
|
||||
continue;
|
||||
}
|
||||
|
||||
// overwrite by real item data
|
||||
if ((auction->itemTemplate != pItem->GetEntry()) ||
|
||||
(auction->itemCount != pItem->GetCount()) ||
|
||||
(auction->itemRandomPropertyId != pItem->GetItemRandomPropertyId()))
|
||||
{
|
||||
auction->itemTemplate = pItem->GetEntry();
|
||||
auction->itemCount = pItem->GetCount();
|
||||
auction->itemRandomPropertyId = pItem->GetItemRandomPropertyId();
|
||||
// overwrite by real item data
|
||||
if ((auction->itemTemplate != pItem->GetEntry()) ||
|
||||
(auction->itemCount != pItem->GetCount()) ||
|
||||
(auction->itemRandomPropertyId != pItem->GetItemRandomPropertyId()))
|
||||
{
|
||||
auction->itemTemplate = pItem->GetEntry();
|
||||
auction->itemCount = pItem->GetCount();
|
||||
auction->itemRandomPropertyId = pItem->GetItemRandomPropertyId();
|
||||
|
||||
// No SQL injection (no strings)
|
||||
CharacterDatabase.PExecute("UPDATE auction SET item_template = %u, item_count = %u, item_randompropertyid = %i WHERE itemguid = %u",
|
||||
auction->itemTemplate, auction->itemCount, auction->itemRandomPropertyId, auction->itemGuidLow);
|
||||
// No SQL injection (no strings)
|
||||
CharacterDatabase.PExecute("UPDATE auction SET item_template = %u, item_count = %u, item_randompropertyid = %i WHERE itemguid = %u",
|
||||
auction->itemTemplate, auction->itemCount, auction->itemRandomPropertyId, auction->itemGuidLow);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -844,7 +844,7 @@ void WorldSession::BuildListAuctionItems(std::vector<AuctionEntry*> const& aucti
|
|||
{ continue; }
|
||||
|
||||
if (levelmin != 0x00 && (proto->RequiredLevel < levelmin || (levelmax != 0x00 && proto->RequiredLevel > levelmax)))
|
||||
continue;
|
||||
{ continue; }
|
||||
|
||||
if (usable != 0x00)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,12 +22,30 @@
|
|||
* and lore are copyrighted by Blizzard Entertainment, Inc.
|
||||
*/
|
||||
|
||||
/**
|
||||
* This is part of the code that takes care of the Auction House and all that can happen with it,
|
||||
* it takes care of adding new items to it, bidding/buyouting them etc. Also handles the errors
|
||||
* that can happen, ie: you don't have enough money, your account isn't paid for (won't really
|
||||
* happen on these servers), the item you are trying to buy doesn't exist etc.
|
||||
*
|
||||
* This is also what is partly used by the \ref AuctionHouseBot as an interface to what it needs
|
||||
* for performing the usual operations such as checking what has been bidded on etc.
|
||||
*
|
||||
* \todo Add more info about how the auction house system works.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _AUCTION_HOUSE_MGR_H
|
||||
#define _AUCTION_HOUSE_MGR_H
|
||||
|
||||
#include "Common.h"
|
||||
#include "DBCStructure.h"
|
||||
|
||||
/** \addtogroup auctionhouse
|
||||
* @{
|
||||
* \file
|
||||
*/
|
||||
|
||||
class Item;
|
||||
class Player;
|
||||
class Unit;
|
||||
|
|
@ -37,24 +55,28 @@ class WorldPacket;
|
|||
#define MAX_AUCTION_SORT 12
|
||||
#define AUCTION_SORT_REVERSED 0x10
|
||||
|
||||
/**
|
||||
* Documentation for this taken directly from comments in source
|
||||
* \todo Needs real documentation of what these values mean and where they are sent etc.
|
||||
*/
|
||||
enum AuctionError
|
||||
{
|
||||
AUCTION_OK = 0, // depends on enum AuctionAction
|
||||
AUCTION_ERR_INVENTORY = 1, // depends on enum InventoryChangeResult
|
||||
AUCTION_ERR_DATABASE = 2, // ERR_AUCTION_DATABASE_ERROR (default)
|
||||
AUCTION_ERR_NOT_ENOUGH_MONEY = 3, // ERR_NOT_ENOUGH_MONEY
|
||||
AUCTION_ERR_ITEM_NOT_FOUND = 4, // ERR_ITEM_NOT_FOUND
|
||||
AUCTION_ERR_HIGHER_BID = 5, // ERR_AUCTION_HIGHER_BID
|
||||
AUCTION_ERR_BID_INCREMENT = 7, // ERR_AUCTION_BID_INCREMENT
|
||||
AUCTION_ERR_BID_OWN = 10, // ERR_AUCTION_BID_OWN
|
||||
AUCTION_ERR_RESTRICTED_ACCOUNT = 13 // ERR_RESTRICTED_ACCOUNT
|
||||
AUCTION_OK = 0, ///< depends on enum AuctionAction
|
||||
AUCTION_ERR_INVENTORY = 1, ///< depends on enum InventoryChangeResult
|
||||
AUCTION_ERR_DATABASE = 2, ///< ERR_AUCTION_DATABASE_ERROR (default)
|
||||
AUCTION_ERR_NOT_ENOUGH_MONEY = 3, ///< ERR_NOT_ENOUGH_MONEY
|
||||
AUCTION_ERR_ITEM_NOT_FOUND = 4, ///< ERR_ITEM_NOT_FOUND
|
||||
AUCTION_ERR_HIGHER_BID = 5, ///< ERR_AUCTION_HIGHER_BID
|
||||
AUCTION_ERR_BID_INCREMENT = 7, ///< ERR_AUCTION_BID_INCREMENT
|
||||
AUCTION_ERR_BID_OWN = 10, ///< ERR_AUCTION_BID_OWN
|
||||
AUCTION_ERR_RESTRICTED_ACCOUNT = 13 ///< ERR_RESTRICTED_ACCOUNT
|
||||
};
|
||||
|
||||
enum AuctionAction
|
||||
{
|
||||
AUCTION_STARTED = 0, // ERR_AUCTION_STARTED
|
||||
AUCTION_REMOVED = 1, // ERR_AUCTION_REMOVED
|
||||
AUCTION_BID_PLACED = 2 // ERR_AUCTION_BID_PLACED
|
||||
AUCTION_STARTED = 0, ///< ERR_AUCTION_STARTED
|
||||
AUCTION_REMOVED = 1, ///< ERR_AUCTION_REMOVED
|
||||
AUCTION_BID_PLACED = 2 ///< ERR_AUCTION_BID_PLACED
|
||||
};
|
||||
|
||||
struct AuctionEntry
|
||||
|
|
@ -99,7 +121,7 @@ class AuctionHouseObject
|
|||
~AuctionHouseObject()
|
||||
{
|
||||
for (AuctionEntryMap::const_iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr)
|
||||
delete itr->second;
|
||||
{ delete itr->second; }
|
||||
}
|
||||
|
||||
typedef std::map<uint32, AuctionEntry*> AuctionEntryMap;
|
||||
|
|
@ -150,11 +172,16 @@ class AuctionSorter
|
|||
Player* m_viewPlayer;
|
||||
};
|
||||
|
||||
/**
|
||||
* This describes the type of auction house that we are dealing with, they can be either:
|
||||
* - neutral (anyone can do their shopping there)
|
||||
* - alliance/horde (only the respective faction can shop there)
|
||||
*/
|
||||
enum AuctionHouseType
|
||||
{
|
||||
AUCTION_HOUSE_ALLIANCE = 0,
|
||||
AUCTION_HOUSE_HORDE = 1,
|
||||
AUCTION_HOUSE_NEUTRAL = 2
|
||||
AUCTION_HOUSE_ALLIANCE = 0, ///< Alliance only auction house
|
||||
AUCTION_HOUSE_HORDE = 1, ///< Horde only auction house
|
||||
AUCTION_HOUSE_NEUTRAL = 2 ///< Neutral auction house, anyone can do business here
|
||||
};
|
||||
|
||||
#define MAX_AUCTION_HOUSE_TYPE 3
|
||||
|
|
@ -205,6 +232,9 @@ class AuctionHouseMgr
|
|||
ItemMap mAitems;
|
||||
};
|
||||
|
||||
/// Convenience define to access the singleton object for the Auction House Manager
|
||||
#define sAuctionMgr MaNGOS::Singleton<AuctionHouseMgr>::Instance()
|
||||
|
||||
/** @} */
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ Bag::Bag(): Item()
|
|||
Bag::~Bag()
|
||||
{
|
||||
for (int i = 0; i < MAX_BAG_SIZE; ++i)
|
||||
delete m_bagslot[i];
|
||||
{ delete m_bagslot[i]; }
|
||||
}
|
||||
|
||||
void Bag::AddToWorld()
|
||||
|
|
@ -49,14 +49,14 @@ void Bag::AddToWorld()
|
|||
|
||||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
if (m_bagslot[i])
|
||||
m_bagslot[i]->AddToWorld();
|
||||
{ m_bagslot[i]->AddToWorld(); }
|
||||
}
|
||||
|
||||
void Bag::RemoveFromWorld()
|
||||
{
|
||||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
if (m_bagslot[i])
|
||||
m_bagslot[i]->RemoveFromWorld();
|
||||
{ m_bagslot[i]->RemoveFromWorld(); }
|
||||
|
||||
Item::RemoveFromWorld();
|
||||
}
|
||||
|
|
@ -66,7 +66,7 @@ bool Bag::Create(uint32 guidlow, uint32 itemid, Player const* owner)
|
|||
ItemPrototype const* itemProto = ObjectMgr::GetItemPrototype(itemid);
|
||||
|
||||
if (!itemProto || itemProto->ContainerSlots > MAX_BAG_SIZE)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
Object::_Create(guidlow, 0, HIGHGUID_CONTAINER);
|
||||
|
||||
|
|
@ -101,7 +101,7 @@ void Bag::SaveToDB()
|
|||
bool Bag::LoadFromDB(uint32 guidLow, Field* fields, ObjectGuid ownerGuid)
|
||||
{
|
||||
if (!Item::LoadFromDB(guidLow, fields, ownerGuid))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// cleanup bag content related item value fields (its will be filled correctly from `character_inventory`)
|
||||
for (int i = 0; i < MAX_BAG_SIZE; ++i)
|
||||
|
|
@ -119,7 +119,7 @@ void Bag::DeleteFromDB()
|
|||
{
|
||||
for (int i = 0; i < MAX_BAG_SIZE; ++i)
|
||||
if (m_bagslot[i])
|
||||
m_bagslot[i]->DeleteFromDB();
|
||||
{ m_bagslot[i]->DeleteFromDB(); }
|
||||
|
||||
Item::DeleteFromDB();
|
||||
}
|
||||
|
|
@ -129,7 +129,7 @@ uint32 Bag::GetFreeSlots() const
|
|||
uint32 slots = 0;
|
||||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
if (!m_bagslot[i])
|
||||
++slots;
|
||||
{ ++slots; }
|
||||
|
||||
return slots;
|
||||
}
|
||||
|
|
@ -139,7 +139,7 @@ void Bag::RemoveItem(uint8 slot, bool /*update*/)
|
|||
MANGOS_ASSERT(slot < MAX_BAG_SIZE);
|
||||
|
||||
if (m_bagslot[slot])
|
||||
m_bagslot[slot]->SetContainer(NULL);
|
||||
{ m_bagslot[slot]->SetContainer(NULL); }
|
||||
|
||||
m_bagslot[slot] = NULL;
|
||||
SetGuidValue(CONTAINER_FIELD_SLOT_1 + (slot * 2), ObjectGuid());
|
||||
|
|
@ -166,7 +166,7 @@ void Bag::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) cons
|
|||
|
||||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
if (m_bagslot[i])
|
||||
m_bagslot[i]->BuildCreateUpdateBlockForPlayer(data, target);
|
||||
{ m_bagslot[i]->BuildCreateUpdateBlockForPlayer(data, target); }
|
||||
}
|
||||
|
||||
// If the bag is empty returns true
|
||||
|
|
@ -174,7 +174,7 @@ bool Bag::IsEmpty() const
|
|||
{
|
||||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
if (m_bagslot[i])
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -183,7 +183,7 @@ Item* Bag::GetItemByEntry(uint32 item) const
|
|||
{
|
||||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
if (m_bagslot[i] && m_bagslot[i]->GetEntry() == item)
|
||||
return m_bagslot[i];
|
||||
{ return m_bagslot[i]; }
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -204,7 +204,7 @@ uint32 Bag::GetItemCount(uint32 item, Item* eItem) const
|
|||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
if (m_bagslot[i])
|
||||
if (m_bagslot[i] != eItem && m_bagslot[i]->GetEntry() == item)
|
||||
count += m_bagslot[i]->GetCount();
|
||||
{ count += m_bagslot[i]->GetCount(); }
|
||||
|
||||
if (eItem && eItem->GetProto()->GemProperties)
|
||||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
|
|
@ -232,7 +232,7 @@ uint8 Bag::GetSlotByItemGUID(ObjectGuid guid) const
|
|||
for (uint32 i = 0; i < GetBagSize(); ++i)
|
||||
if (m_bagslot[i] != 0)
|
||||
if (m_bagslot[i]->GetObjectGuid() == guid)
|
||||
return i;
|
||||
{ return i; }
|
||||
|
||||
return NULL_SLOT;
|
||||
}
|
||||
|
|
@ -240,7 +240,7 @@ uint8 Bag::GetSlotByItemGUID(ObjectGuid guid) const
|
|||
Item* Bag::GetItemByPos(uint8 slot) const
|
||||
{
|
||||
if (slot < GetBagSize())
|
||||
return m_bagslot[slot];
|
||||
{ return m_bagslot[slot]; }
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ class Bag : public Item
|
|||
inline Item* NewItemOrBag(ItemPrototype const* proto)
|
||||
{
|
||||
if (proto->InventoryType == INVTYPE_BAG)
|
||||
return new Bag;
|
||||
{ return new Bag; }
|
||||
|
||||
return new Item;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ void Camera::UpdateForCurrentViewPoint()
|
|||
m_gridRef.unlink();
|
||||
|
||||
if (GridType* grid = m_source->GetViewPoint().m_grid)
|
||||
grid->AddWorldObject(this);
|
||||
{ grid->AddWorldObject(this); }
|
||||
|
||||
UpdateVisibilityForOwner();
|
||||
}
|
||||
|
|
@ -63,7 +63,7 @@ void Camera::SetView(WorldObject* obj, bool update_far_sight_field /*= true*/)
|
|||
MANGOS_ASSERT(obj);
|
||||
|
||||
if (m_source == obj)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (!m_owner.IsInMap(obj))
|
||||
{
|
||||
|
|
@ -79,18 +79,18 @@ void Camera::SetView(WorldObject* obj, bool update_far_sight_field /*= true*/)
|
|||
|
||||
// detach and deregister from active objects if there are no more reasons to be active
|
||||
m_source->GetViewPoint().Detach(this);
|
||||
if (!m_source->isActiveObject())
|
||||
m_source->GetMap()->RemoveFromActive(m_source);
|
||||
if (!m_source->IsActiveObject())
|
||||
{ m_source->GetMap()->RemoveFromActive(m_source); }
|
||||
|
||||
m_source = obj;
|
||||
|
||||
if (!m_source->isActiveObject())
|
||||
m_source->GetMap()->AddToActive(m_source);
|
||||
if (!m_source->IsActiveObject())
|
||||
{ m_source->GetMap()->AddToActive(m_source); }
|
||||
|
||||
m_source->GetViewPoint().Attach(this);
|
||||
|
||||
if (update_far_sight_field)
|
||||
m_owner.SetGuidValue(PLAYER_FARSIGHT, (m_source == &m_owner ? ObjectGuid() : m_source->GetObjectGuid()));
|
||||
{ m_owner.SetGuidValue(PLAYER_FARSIGHT, (m_source == &m_owner ? ObjectGuid() : m_source->GetObjectGuid())); }
|
||||
|
||||
UpdateForCurrentViewPoint();
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ void Camera::SetView(WorldObject* obj, bool update_far_sight_field /*= true*/)
|
|||
void Camera::Event_ViewPointVisibilityChanged()
|
||||
{
|
||||
if (!m_owner.HaveAtClient(m_source))
|
||||
ResetView();
|
||||
{ ResetView(); }
|
||||
}
|
||||
|
||||
void Camera::ResetView(bool update_far_sight_field /*= true*/)
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ class WorldPacket;
|
|||
class Player;
|
||||
|
||||
/// Camera - object-receiver. Receives broadcast packets from nearby worldobjects, object visibility changes and sends them to client
|
||||
class Camera
|
||||
class Camera
|
||||
{
|
||||
friend class ViewPoint;
|
||||
public:
|
||||
|
|
@ -77,13 +77,13 @@ class Camera
|
|||
|
||||
public:
|
||||
GridReference<Camera>& GetGridRef() { return m_gridRef; }
|
||||
bool isActiveObject() const { return false; }
|
||||
bool IsActiveObject() const { return false; }
|
||||
private:
|
||||
GridReference<Camera> m_gridRef;
|
||||
};
|
||||
|
||||
/// Object-observer, notifies farsight object state to cameras that attached to it
|
||||
class ViewPoint
|
||||
class ViewPoint
|
||||
{
|
||||
friend class Camera;
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ void Corpse::AddToWorld()
|
|||
{
|
||||
///- Register the corpse for guid lookup
|
||||
if (!IsInWorld())
|
||||
sObjectAccessor.AddObject(this);
|
||||
{ sObjectAccessor.AddObject(this); }
|
||||
|
||||
Object::AddToWorld();
|
||||
}
|
||||
|
|
@ -64,7 +64,7 @@ void Corpse::RemoveFromWorld()
|
|||
{
|
||||
///- Remove the corpse from the accessor
|
||||
if (IsInWorld())
|
||||
sObjectAccessor.RemoveObject(this);
|
||||
{ sObjectAccessor.RemoveObject(this); }
|
||||
|
||||
Object::RemoveFromWorld();
|
||||
}
|
||||
|
|
@ -232,9 +232,9 @@ bool Corpse::LoadFromDB(uint32 lowguid, Field* fields)
|
|||
|
||||
uint32 flags = CORPSE_FLAG_UNK2;
|
||||
if (playerFlags & PLAYER_FLAGS_HIDE_HELM)
|
||||
flags |= CORPSE_FLAG_HIDE_HELM;
|
||||
{ flags |= CORPSE_FLAG_HIDE_HELM; }
|
||||
if (playerFlags & PLAYER_FLAGS_HIDE_CLOAK)
|
||||
flags |= CORPSE_FLAG_HIDE_CLOAK;
|
||||
{ flags |= CORPSE_FLAG_HIDE_CLOAK; }
|
||||
SetUInt32Value(CORPSE_FIELD_FLAGS, flags);
|
||||
|
||||
// no need to mark corpse as lootable, because corpses are not saved in battle grounds
|
||||
|
|
@ -265,23 +265,23 @@ bool Corpse::isVisibleForInState(Player const* u, WorldObject const* viewPoint,
|
|||
bool Corpse::IsHostileTo(Unit const* unit) const
|
||||
{
|
||||
if (Player* owner = sObjectMgr.GetPlayer(GetOwnerGuid()))
|
||||
return owner->IsHostileTo(unit);
|
||||
{ return owner->IsHostileTo(unit); }
|
||||
else
|
||||
return false;
|
||||
{ return false; }
|
||||
}
|
||||
|
||||
bool Corpse::IsFriendlyTo(Unit const* unit) const
|
||||
{
|
||||
if (Player* owner = sObjectMgr.GetPlayer(GetOwnerGuid()))
|
||||
return owner->IsFriendlyTo(unit);
|
||||
{ return owner->IsFriendlyTo(unit); }
|
||||
else
|
||||
return true;
|
||||
{ return true; }
|
||||
}
|
||||
|
||||
bool Corpse::IsExpired(time_t t) const
|
||||
{
|
||||
if (m_type == CORPSE_BONES)
|
||||
return m_time < t - 60 * MINUTE;
|
||||
{ return m_time < t - 60 * MINUTE; }
|
||||
else
|
||||
return m_time < t - 3 * DAY;
|
||||
{ return m_time < t - 3 * DAY; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ class Corpse : public WorldObject
|
|||
Player* lootRecipient;
|
||||
bool lootForBody;
|
||||
|
||||
GridReference<Corpse> &GetGridRef() { return m_gridRef; }
|
||||
GridReference<Corpse>& GetGridRef() { return m_gridRef; }
|
||||
|
||||
bool IsExpired(time_t t) const;
|
||||
private:
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -91,20 +91,20 @@ struct CreatureInfo
|
|||
uint32 FactionAlliance;
|
||||
uint32 FactionHorde;
|
||||
float Scale;
|
||||
uint32 Family; // enum CreatureFamily values (optional)
|
||||
uint32 CreatureType; // enum CreatureType values
|
||||
uint32 Family; // enum CreatureFamily values (optional)
|
||||
uint32 CreatureType; // enum CreatureType values
|
||||
uint32 InhabitType;
|
||||
uint32 RegenerateStats;
|
||||
int32 RacialLeader;
|
||||
uint32 NpcFlags;
|
||||
uint32 UnitFlags; // enum UnitFlags mask values
|
||||
uint32 UnitFlags; // enum UnitFlags mask values
|
||||
uint32 UnitFlags2; // enum UnitFlags2 mask values
|
||||
uint32 DynamicFlags;
|
||||
uint32 ExtraFlags;
|
||||
uint32 CreatureTypeFlags; // enum CreatureTypeFlags mask values
|
||||
uint32 CreatureTypeFlags; // enum CreatureTypeFlags mask values
|
||||
float SpeedWalk;
|
||||
float SpeedRun;
|
||||
uint32 UnitClass; // enum Classes. Note only 4 classes are known for creatures.
|
||||
uint32 UnitClass; // enum Classes. Note only 4 classes are known for creatures.
|
||||
uint32 Rank;
|
||||
int32 Expansion; // creature expansion, important for stats, CAN BE -1 as marker for some invalid cases.
|
||||
float HealthMultiplier;
|
||||
|
|
@ -166,13 +166,13 @@ struct CreatureInfo
|
|||
SkillType GetRequiredLootSkill() const
|
||||
{
|
||||
if (CreatureTypeFlags & CREATURE_TYPEFLAGS_HERBLOOT)
|
||||
return SKILL_HERBALISM;
|
||||
{ return SKILL_HERBALISM; }
|
||||
else if (CreatureTypeFlags & CREATURE_TYPEFLAGS_MININGLOOT)
|
||||
return SKILL_MINING;
|
||||
{ return SKILL_MINING; }
|
||||
else if (CreatureTypeFlags & CREATURE_TYPEFLAGS_ENGINEERLOOT)
|
||||
return SKILL_ENGINEERING;
|
||||
else
|
||||
return SKILL_SKINNING; // normal case
|
||||
{ return SKILL_SKINNING; } // normal case
|
||||
}
|
||||
|
||||
bool IsExotic() const
|
||||
|
|
@ -341,8 +341,8 @@ enum SelectFlags
|
|||
|
||||
enum RegenStatsFlags
|
||||
{
|
||||
REGEN_FLAG_HEALTH = 0x001,
|
||||
REGEN_FLAG_POWER = 0x002,
|
||||
REGEN_FLAG_HEALTH = 0x001,
|
||||
REGEN_FLAG_POWER = 0x002,
|
||||
};
|
||||
|
||||
// Vendors
|
||||
|
|
@ -377,7 +377,7 @@ struct VendorItemData
|
|||
|
||||
VendorItem* GetItem(uint32 slot) const
|
||||
{
|
||||
if (slot >= m_items.size()) return NULL;
|
||||
if (slot >= m_items.size()) { return NULL; }
|
||||
return m_items[slot];
|
||||
}
|
||||
bool Empty() const { return m_items.empty(); }
|
||||
|
|
@ -690,6 +690,12 @@ class Creature : public Unit
|
|||
* \return ObjectGuid Player GUID.
|
||||
*/
|
||||
ObjectGuid GetLootRecipientGuid() const { return m_lootRecipientGuid; }
|
||||
|
||||
/**
|
||||
* function returning the group recipient ID.
|
||||
*
|
||||
* \return uint32 Group ID.
|
||||
*/
|
||||
uint32 GetLootGroupRecipientId() const { return m_lootGroupRecipientId; }
|
||||
Player* GetLootRecipient() const; // use group cases as prefered
|
||||
Group* GetGroupLootRecipient() const;
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ CanCastResult CreatureAI::DoCastSpellIfCan(Unit* pTarget, uint32 uiSpell, uint32
|
|||
}
|
||||
|
||||
// Interrupt any previous spell
|
||||
if (uiCastFlags & CAST_INTERRUPT_PREVIOUS && pCaster->IsNonMeleeSpellCasted(false))
|
||||
if ((uiCastFlags & CAST_INTERRUPT_PREVIOUS) && pCaster->IsNonMeleeSpellCasted(false))
|
||||
{ pCaster->InterruptNonMeleeSpells(false); }
|
||||
|
||||
// Creature should always stop before it will cast a non-instant spell
|
||||
|
|
@ -153,16 +153,16 @@ void CreatureAI::SetCombatMovement(bool enable, bool stopOrStartMovement /*=fals
|
|||
m_isCombatMovement = enable;
|
||||
|
||||
if (enable)
|
||||
m_creature->clearUnitState(UNIT_STAT_NO_COMBAT_MOVEMENT);
|
||||
{ m_creature->clearUnitState(UNIT_STAT_NO_COMBAT_MOVEMENT); }
|
||||
else
|
||||
m_creature->addUnitState(UNIT_STAT_NO_COMBAT_MOVEMENT);
|
||||
{ m_creature->addUnitState(UNIT_STAT_NO_COMBAT_MOVEMENT); }
|
||||
|
||||
if (stopOrStartMovement && m_creature->getVictim()) // Only change current movement while in combat
|
||||
{
|
||||
if (enable)
|
||||
m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), m_attackDistance, m_attackAngle);
|
||||
{ m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), m_attackDistance, m_attackAngle); }
|
||||
else if (!enable && m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
|
||||
m_creature->StopMoving();
|
||||
{ m_creature->StopMoving(); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -261,7 +261,7 @@ void CreatureAI::SendAIEventAround(AIEventType eventType, Unit* pInvoker, uint32
|
|||
}
|
||||
}
|
||||
|
||||
void CreatureAI::SendAIEvent(AIEventType eventType, Unit* pInvoker, Creature* pReceiver, uint32 miscValue /*=0*/) const
|
||||
void CreatureAI::SendAIEvent(AIEventType eventType, Unit* pInvoker, Creature* pReceiver, uint32 miscValue /*=0*/) const
|
||||
{
|
||||
MANGOS_ASSERT(pReceiver);
|
||||
pReceiver->AI()->ReceiveAIEvent(eventType, m_creature, pInvoker, miscValue);
|
||||
|
|
|
|||
|
|
@ -91,14 +91,14 @@ enum AIEventType
|
|||
// Internal Use
|
||||
AI_EVENT_CALL_ASSISTANCE = 13, // Sender = Attacked Npc, Invoker = Enemy
|
||||
|
||||
// Predefined for SD2
|
||||
// Predefined for SD3
|
||||
AI_EVENT_START_ESCORT = 100, // Invoker = Escorting Player
|
||||
AI_EVENT_START_ESCORT_B = 101, // Invoker = Escorting Player
|
||||
AI_EVENT_START_EVENT = 102, // Invoker = EventStarter
|
||||
AI_EVENT_START_EVENT_A = 103, // Invoker = EventStarter
|
||||
AI_EVENT_START_EVENT_B = 104, // Invoker = EventStarter
|
||||
|
||||
// Some IDs for special cases in SD2
|
||||
// Some IDs for special cases in SD3
|
||||
AI_EVENT_CUSTOM_A = 1000,
|
||||
AI_EVENT_CUSTOM_B = 1001,
|
||||
AI_EVENT_CUSTOM_C = 1002,
|
||||
|
|
@ -121,7 +121,7 @@ class CreatureAI
|
|||
|
||||
///== Information about AI ========================
|
||||
/**
|
||||
* This function is used to display information about the AI.
|
||||
* This funcion is used to display information about the AI.
|
||||
* It is called when the .npc aiinfo command is used.
|
||||
* Use this for on-the-fly debugging
|
||||
* @param reader is a ChatHandler to send messages to.
|
||||
|
|
@ -327,7 +327,7 @@ class CreatureAI
|
|||
|
||||
///== Event Handling ===============================
|
||||
|
||||
/**
|
||||
/*
|
||||
* Send an AI Event to nearby Creatures around
|
||||
* @param uiType number to specify the event, default cases listed in enum AIEventType
|
||||
* @param pInvoker Unit that triggered this event (like an attacker)
|
||||
|
|
@ -336,7 +336,7 @@ class CreatureAI
|
|||
*/
|
||||
void SendAIEventAround(AIEventType eventType, Unit* pInvoker, uint32 uiDelay, float fRadius, uint32 miscValue = 0) const;
|
||||
|
||||
/**
|
||||
/*
|
||||
* Send an AI Event to a Creature
|
||||
* @param eventType to specify the event, default cases listed in enum AIEventType
|
||||
* @param pInvoker Unit that triggered this event (like an attacker)
|
||||
|
|
@ -344,7 +344,7 @@ class CreatureAI
|
|||
*/
|
||||
void SendAIEvent(AIEventType eventType, Unit* pInvoker, Creature* pReceiver, uint32 miscValue = 0) const;
|
||||
|
||||
/**
|
||||
/*
|
||||
* Called when an AI Event is received
|
||||
* @param eventType to specify the event, default cases listed in enum AIEventType
|
||||
* @param pSender Creature that sent this event
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/**
|
||||
* MaNGOS is a full featured server for World of Warcraft, supporting
|
||||
* the following clients: 1.12.x, 2.4.3, 3.3.5a, 4.3.4a and 5.4.8
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/**
|
||||
* MaNGOS is a full featured server for World of Warcraft, supporting
|
||||
* the following clients: 1.12.x, 2.4.3, 3.3.5a, 4.3.4a and 5.4.8
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/**
|
||||
* MaNGOS is a full featured server for World of Warcraft, supporting
|
||||
* the following clients: 1.12.x, 2.4.3, 3.3.5a, 4.3.4a and 5.4.8
|
||||
*
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ namespace FactorySelector
|
|||
|
||||
// Allow scripting AI for normal creatures and not controlled pets (guardians and mini-pets)
|
||||
if (!creature->IsPet() || !static_cast<Pet*>(creature)->isControlled())
|
||||
return scriptedAI;
|
||||
{ return scriptedAI; }
|
||||
}
|
||||
|
||||
CreatureAIRegistry& ai_registry(CreatureAIRepository::Instance());
|
||||
|
|
@ -64,17 +64,17 @@ namespace FactorySelector
|
|||
{
|
||||
Unit* controler = creature->GetOwner() ? creature->GetOwner() : creature->GetCharmer();
|
||||
if (controler && controler->GetTypeId() == TYPEID_PLAYER && controler->IsAlive())
|
||||
ai_factory = ai_registry.GetRegistryItem("PetAI");
|
||||
{ ai_factory = ai_registry.GetRegistryItem("PetAI"); }
|
||||
}
|
||||
else if (creature->IsTotem())
|
||||
ai_factory = ai_registry.GetRegistryItem("TotemAI");
|
||||
{ ai_factory = ai_registry.GetRegistryItem("TotemAI"); }
|
||||
|
||||
// select by script name
|
||||
if (!ai_factory && !ainame.empty())
|
||||
ai_factory = ai_registry.GetRegistryItem(ainame.c_str());
|
||||
{ ai_factory = ai_registry.GetRegistryItem(ainame.c_str()); }
|
||||
|
||||
if (!ai_factory && creature->IsGuard())
|
||||
ai_factory = ai_registry.GetRegistryItem("GuardAI");
|
||||
{ ai_factory = ai_registry.GetRegistryItem("GuardAI"); }
|
||||
|
||||
// select by permit check
|
||||
if (!ai_factory)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/**
|
||||
* MaNGOS is a full featured server for World of Warcraft, supporting
|
||||
* the following clients: 1.12.x, 2.4.3, 3.3.5a, 4.3.4a and 5.4.8
|
||||
*
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@
|
|||
bool CreatureEventAIHolder::UpdateRepeatTimer(Creature* creature, uint32 repeatMin, uint32 repeatMax)
|
||||
{
|
||||
if (repeatMin == repeatMax)
|
||||
Time = repeatMin;
|
||||
{ Time = repeatMin; }
|
||||
else if (repeatMax > repeatMin)
|
||||
Time = urand(repeatMin, repeatMax);
|
||||
{ Time = urand(repeatMin, repeatMax); }
|
||||
else
|
||||
{
|
||||
sLog.outErrorEventAI("Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", creature->GetEntry(), Event.event_id, Event.event_type);
|
||||
|
|
@ -56,7 +56,7 @@ bool CreatureEventAIHolder::UpdateRepeatTimer(Creature* creature, uint32 repeatM
|
|||
int CreatureEventAI::Permissible(const Creature* creature)
|
||||
{
|
||||
if (creature->GetAIName() == "EventAI")
|
||||
return PERMIT_BASE_SPECIAL;
|
||||
{ return PERMIT_BASE_SPECIAL; }
|
||||
return PERMIT_BASE_NO;
|
||||
}
|
||||
|
||||
|
|
@ -67,17 +67,17 @@ void CreatureEventAI::GetAIInformation(ChatHandler& reader)
|
|||
reader.PSendSysMessage(LANG_NPC_EVENTAI_COMBAT, reader.GetOnOffStr(m_MeleeEnabled));
|
||||
|
||||
if (sLog.HasLogFilter(LOG_FILTER_EVENT_AI_DEV)) // Give some more details if in EventAI Dev Mode
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
reader.PSendSysMessage("Current events of this creature:");
|
||||
for (CreatureEventAIList::const_iterator itr = m_CreatureEventAIList.begin(); itr != m_CreatureEventAIList.end(); ++itr)
|
||||
{
|
||||
if (itr->Event.action[2].type != ACTION_T_NONE)
|
||||
reader.PSendSysMessage("%u Type%3u (%s) Timer(%3us) actions[type(param1)]: %2u(%5u) -- %2u(%u) -- %2u(%5u)", itr->Event.event_id, itr->Event.event_type, itr->Enabled ? "On" : "Off", itr->Time/1000, itr->Event.action[0].type, itr->Event.action[0].raw.param1, itr->Event.action[1].type, itr->Event.action[1].raw.param1, itr->Event.action[2].type, itr->Event.action[2].raw.param1);
|
||||
{ reader.PSendSysMessage("%u Type%3u (%s) Timer(%3us) actions[type(param1)]: %2u(%5u) -- %2u(%u) -- %2u(%5u)", itr->Event.event_id, itr->Event.event_type, itr->Enabled ? "On" : "Off", itr->Time / 1000, itr->Event.action[0].type, itr->Event.action[0].raw.param1, itr->Event.action[1].type, itr->Event.action[1].raw.param1, itr->Event.action[2].type, itr->Event.action[2].raw.param1); }
|
||||
else if (itr->Event.action[1].type != ACTION_T_NONE)
|
||||
reader.PSendSysMessage("%u Type%3u (%s) Timer(%3us) actions[type(param1)]: %2u(%5u) -- %2u(%5u)", itr->Event.event_id, itr->Event.event_type, itr->Enabled ? "On" : "Off", itr->Time/1000, itr->Event.action[0].type, itr->Event.action[0].raw.param1, itr->Event.action[1].type, itr->Event.action[1].raw.param1);
|
||||
{ reader.PSendSysMessage("%u Type%3u (%s) Timer(%3us) actions[type(param1)]: %2u(%5u) -- %2u(%5u)", itr->Event.event_id, itr->Event.event_type, itr->Enabled ? "On" : "Off", itr->Time / 1000, itr->Event.action[0].type, itr->Event.action[0].raw.param1, itr->Event.action[1].type, itr->Event.action[1].raw.param1); }
|
||||
else
|
||||
reader.PSendSysMessage("%u Type%3u (%s) Timer(%3us) action[type(param1)]: %2u(%5u)", itr->Event.event_id, itr->Event.event_type, itr->Enabled ? "On" : "Off", itr->Time/1000, itr->Event.action[0].type, itr->Event.action[0].raw.param1);
|
||||
{ reader.PSendSysMessage("%u Type%3u (%s) Timer(%3us) action[type(param1)]: %2u(%5u)", itr->Event.event_id, itr->Event.event_type, itr->Enabled ? "On" : "Off", itr->Time / 1000, itr->Event.action[0].type, itr->Event.action[0].raw.param1); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ CreatureEventAI::CreatureEventAI(Creature* c) : CreatureAI(c),
|
|||
// Debug check
|
||||
#ifndef MANGOS_DEBUG
|
||||
if (i->event_flags & EFLAG_DEBUG_ONLY)
|
||||
continue;
|
||||
{ continue; }
|
||||
#endif
|
||||
if (m_creature->GetMap()->IsDungeon())
|
||||
{
|
||||
|
|
@ -133,7 +133,7 @@ CreatureEventAI::CreatureEventAI(Creature* c) : CreatureAI(c),
|
|||
// Debug check
|
||||
#ifndef MANGOS_DEBUG
|
||||
if (i->event_flags & EFLAG_DEBUG_ONLY)
|
||||
continue;
|
||||
{ continue; }
|
||||
#endif
|
||||
bool storeEvent = false;
|
||||
if (m_creature->GetMap()->IsDungeon())
|
||||
|
|
@ -155,7 +155,7 @@ CreatureEventAI::CreatureEventAI(Creature* c) : CreatureAI(c),
|
|||
}
|
||||
}
|
||||
else
|
||||
sLog.outErrorEventAI("EventMap for Creature %u is empty but creature is using CreatureEventAI.", m_creature->GetEntry());
|
||||
{ sLog.outErrorEventAI("EventMap for Creature %u is empty but creature is using CreatureEventAI.", m_creature->GetEntry()); }
|
||||
}
|
||||
|
||||
#define LOG_PROCESS_EVENT \
|
||||
|
|
@ -186,21 +186,21 @@ inline bool IsTimerBasedEvent(EventAI_Type type)
|
|||
}
|
||||
}
|
||||
|
||||
bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pActionInvoker, Creature* pAIEventSender)
|
||||
bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pActionInvoker, Creature* pAIEventSender /*=NULL*/)
|
||||
{
|
||||
if (!pHolder.Enabled || pHolder.Time)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// Check the inverse phase mask (event doesn't trigger if current phase bit is set in mask)
|
||||
if (pHolder.Event.event_inverse_phase_mask & (1 << m_Phase))
|
||||
{
|
||||
if (!IsTimerBasedEvent(pHolder.Event.event_type))
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_EVENT_AI_DEV, "CreatureEventAI: Event %u skipped because of phasemask %u. Current phase %u", pHolder.Event.event_id, pHolder.Event.event_inverse_phase_mask, m_Phase);
|
||||
{ DEBUG_FILTER_LOG(LOG_FILTER_EVENT_AI_DEV, "CreatureEventAI: Event %u skipped because of phasemask %u. Current phase %u", pHolder.Event.event_id, pHolder.Event.event_inverse_phase_mask, m_Phase); }
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!IsTimerBasedEvent(pHolder.Event.event_type))
|
||||
LOG_PROCESS_EVENT;
|
||||
{ LOG_PROCESS_EVENT; }
|
||||
|
||||
CreatureEventAI_Event const& event = pHolder.Event;
|
||||
|
||||
|
|
@ -209,7 +209,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
{
|
||||
case EVENT_T_TIMER_IN_COMBAT:
|
||||
if (!m_creature->IsInCombat())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -217,7 +217,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
break;
|
||||
case EVENT_T_TIMER_OOC:
|
||||
if (m_creature->IsInCombat() || m_creature->IsInEvadeMode())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -231,12 +231,12 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_HP:
|
||||
{
|
||||
if (!m_creature->IsInCombat() || !m_creature->GetMaxHealth())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
uint32 perc = (m_creature->GetHealth() * 100) / m_creature->GetMaxHealth();
|
||||
|
||||
if (perc > event.percent_range.percentMax || perc < event.percent_range.percentMin)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -246,12 +246,12 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_MANA:
|
||||
{
|
||||
if (!m_creature->IsInCombat() || !m_creature->GetMaxPower(POWER_MANA))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
uint32 perc = (m_creature->GetPower(POWER_MANA) * 100) / m_creature->GetMaxPower(POWER_MANA);
|
||||
|
||||
if (perc > event.percent_range.percentMax || perc < event.percent_range.percentMin)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -293,12 +293,12 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_TARGET_HP:
|
||||
{
|
||||
if (!m_creature->IsInCombat() || !m_creature->getVictim() || !m_creature->getVictim()->GetMaxHealth())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
uint32 perc = (m_creature->getVictim()->GetHealth() * 100) / m_creature->getVictim()->GetMaxHealth();
|
||||
|
||||
if (perc > event.percent_range.percentMax || perc < event.percent_range.percentMin)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -307,7 +307,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
}
|
||||
case EVENT_T_TARGET_CASTING:
|
||||
if (!m_creature->IsInCombat() || !m_creature->getVictim() || !m_creature->getVictim()->IsNonMeleeSpellCasted(false, false, true))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -316,11 +316,11 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_FRIENDLY_HP:
|
||||
{
|
||||
if (!m_creature->IsInCombat())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
Unit* pUnit = DoSelectLowestHpFriendly((float)event.friendly_hp.radius, event.friendly_hp.hpDeficit);
|
||||
if (!pUnit)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
pActionInvoker = pUnit;
|
||||
|
||||
|
|
@ -332,14 +332,14 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_FRIENDLY_IS_CC:
|
||||
{
|
||||
if (!m_creature->IsInCombat())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
std::list<Creature*> pList;
|
||||
DoFindFriendlyCC(pList, (float)event.friendly_is_cc.radius);
|
||||
|
||||
// List is empty
|
||||
if (pList.empty())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// We don't really care about the whole list, just return first available
|
||||
pActionInvoker = *(pList.begin());
|
||||
|
|
@ -355,7 +355,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
|
||||
// List is empty
|
||||
if (pList.empty())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// We don't really care about the whole list, just return first available
|
||||
pActionInvoker = *(pList.begin());
|
||||
|
|
@ -370,11 +370,11 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
{
|
||||
// Prevent event from occuring on no unit or non creatures
|
||||
if (!pActionInvoker || pActionInvoker->GetTypeId() != TYPEID_UNIT)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// Creature id doesn't match up
|
||||
if (((Creature*)pActionInvoker)->GetEntry() != event.summoned.creatureId)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// Repeat Timers
|
||||
pHolder.UpdateRepeatTimer(m_creature, event.summoned.repeatMin, event.summoned.repeatMax);
|
||||
|
|
@ -383,12 +383,12 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_TARGET_MANA:
|
||||
{
|
||||
if (!m_creature->IsInCombat() || !m_creature->getVictim() || !m_creature->getVictim()->GetMaxPower(POWER_MANA))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
uint32 perc = (m_creature->getVictim()->GetPower(POWER_MANA) * 100) / m_creature->getVictim()->GetMaxPower(POWER_MANA);
|
||||
|
||||
if (perc > event.percent_range.percentMax || perc < event.percent_range.percentMin)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// Repeat Timers
|
||||
pHolder.UpdateRepeatTimer(m_creature, event.percent_range.repeatMin, event.percent_range.repeatMax);
|
||||
|
|
@ -404,7 +404,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
|
||||
SpellAuraHolder* holder = m_creature->GetSpellAuraHolder(event.buffed.spellId);
|
||||
if (!holder || holder->GetStackAmount() < event.buffed.amount)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -414,11 +414,11 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_TARGET_AURA:
|
||||
{
|
||||
if (!m_creature->IsInCombat() || !m_creature->getVictim())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
SpellAuraHolder* holder = m_creature->getVictim()->GetSpellAuraHolder(event.buffed.spellId);
|
||||
if (!holder || holder->GetStackAmount() < event.buffed.amount)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -432,7 +432,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
|
||||
SpellAuraHolder* holder = m_creature->GetSpellAuraHolder(event.buffed.spellId);
|
||||
if (holder && holder->GetStackAmount() >= event.buffed.amount)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -442,11 +442,11 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_TARGET_MISSING_AURA:
|
||||
{
|
||||
if (!m_creature->IsInCombat() || !m_creature->getVictim())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
SpellAuraHolder* holder = m_creature->getVictim()->GetSpellAuraHolder(event.buffed.spellId);
|
||||
if (holder && holder->GetStackAmount() >= event.buffed.amount)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -458,12 +458,12 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_ENERGY:
|
||||
{
|
||||
if (!m_creature->IsInCombat() || !m_creature->GetMaxPower(POWER_ENERGY))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
uint32 perc = (m_creature->GetPower(POWER_ENERGY) * 100) / m_creature->GetMaxPower(POWER_ENERGY);
|
||||
|
||||
if (perc > event.percent_range.percentMax || perc < event.percent_range.percentMin)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LOG_PROCESS_EVENT;
|
||||
// Repeat Timers
|
||||
|
|
@ -477,20 +477,20 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
|
||||
// Disable non-repeatable events
|
||||
if (!(pHolder.Event.event_flags & EFLAG_REPEATABLE))
|
||||
pHolder.Enabled = false;
|
||||
{ pHolder.Enabled = false; }
|
||||
|
||||
// Store random here so that all random actions match up
|
||||
uint32 rnd = rand();
|
||||
|
||||
// Return if chance for event is not met
|
||||
if (pHolder.Event.event_chance <= rnd % 100)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// Process actions, normal case
|
||||
if (!(pHolder.Event.event_flags & EFLAG_RANDOM_ACTION))
|
||||
{
|
||||
for (uint32 j = 0; j < MAX_ACTIONS; ++j)
|
||||
ProcessAction(pHolder.Event.action[j], rnd, pHolder.Event.event_id, pActionInvoker, pAIEventSender);
|
||||
{ ProcessAction(pHolder.Event.action[j], rnd, pHolder.Event.event_id, pActionInvoker, pAIEventSender); }
|
||||
}
|
||||
// Process actions, random case
|
||||
else
|
||||
|
|
@ -499,7 +499,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
uint32 count = 0;
|
||||
for (uint32 j = 0; j < MAX_ACTIONS; ++j)
|
||||
if (pHolder.Event.action[j].type != ACTION_T_NONE)
|
||||
++count;
|
||||
{ ++count; }
|
||||
|
||||
if (count)
|
||||
{
|
||||
|
|
@ -513,7 +513,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
if (pHolder.Event.action[j].type != ACTION_T_NONE)
|
||||
{
|
||||
if (!idx)
|
||||
break;
|
||||
{ break; }
|
||||
--idx;
|
||||
}
|
||||
}
|
||||
|
|
@ -527,7 +527,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32 rnd, uint32 EventId, Unit* pActionInvoker, Creature* pAIEventSender)
|
||||
{
|
||||
if (action.type == ACTION_T_NONE)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_EVENT_AI_DEV, "CreatureEventAI: Process action %u (script %u) triggered for %s (invoked by %s)",
|
||||
action.type, EventId, m_creature->GetGuidStr().c_str(), pActionInvoker ? pActionInvoker->GetGuidStr().c_str() : "<no invoker>");
|
||||
|
|
@ -539,7 +539,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
case ACTION_T_CHANCED_TEXT:
|
||||
{
|
||||
if (!action.text.TextId[0])
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
int32 textId = 0;
|
||||
|
||||
|
|
@ -548,9 +548,9 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
if (action.text.TextId[1] && action.text.TextId[2])
|
||||
textId = action.text.TextId[rnd % 3];
|
||||
else if (action.text.TextId[1] && (rnd % 2))
|
||||
textId = action.text.TextId[1];
|
||||
{ textId = action.text.TextId[1]; }
|
||||
else
|
||||
textId = action.text.TextId[0];
|
||||
{ textId = action.text.TextId[0]; }
|
||||
}
|
||||
// ACTION_T_CHANCED_TEXT, chance hits
|
||||
else if ((rnd % 100) < action.chanced_text.chance)
|
||||
|
|
@ -558,7 +558,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
if (action.chanced_text.TextId[0] && action.chanced_text.TextId[1])
|
||||
textId = action.chanced_text.TextId[rnd % 2];
|
||||
else
|
||||
textId = action.chanced_text.TextId[0];
|
||||
{ textId = action.chanced_text.TextId[0]; }
|
||||
}
|
||||
|
||||
if (textId)
|
||||
|
|
@ -568,11 +568,11 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
if (pActionInvoker)
|
||||
{
|
||||
if (pActionInvoker->GetTypeId() == TYPEID_PLAYER)
|
||||
target = pActionInvoker;
|
||||
{ target = pActionInvoker; }
|
||||
else if (Unit* owner = pActionInvoker->GetOwner())
|
||||
{
|
||||
if (owner->GetTypeId() == TYPEID_PLAYER)
|
||||
target = owner;
|
||||
{ target = owner; }
|
||||
}
|
||||
}
|
||||
else if ((target = m_creature->getVictim()))
|
||||
|
|
@ -580,20 +580,20 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
if (target->GetTypeId() != TYPEID_PLAYER)
|
||||
if (Unit* owner = target->GetOwner())
|
||||
if (owner->GetTypeId() == TYPEID_PLAYER)
|
||||
target = owner;
|
||||
{ target = owner; }
|
||||
}
|
||||
|
||||
if (!DoDisplayText(m_creature, textId, target))
|
||||
sLog.outErrorEventAI("Error attempting to display text %i, used by script %u", textId, EventId);
|
||||
{ sLog.outErrorEventAI("Error attempting to display text %i, used by script %u", textId, EventId); }
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTION_T_SET_FACTION:
|
||||
{
|
||||
if (action.set_faction.factionId)
|
||||
m_creature->SetFactionTemporary(action.set_faction.factionId, action.set_faction.factionFlags);
|
||||
{ m_creature->SetFactionTemporary(action.set_faction.factionId, action.set_faction.factionFlags); }
|
||||
else // no id provided, assume reset and then use default
|
||||
m_creature->ClearTemporaryFaction();
|
||||
{ m_creature->ClearTemporaryFaction(); }
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -612,10 +612,10 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
}
|
||||
// if no param1, then use value from param2 (modelId)
|
||||
else
|
||||
m_creature->SetDisplayId(action.morph.modelId);
|
||||
{ m_creature->SetDisplayId(action.morph.modelId); }
|
||||
}
|
||||
else
|
||||
m_creature->DeMorph();
|
||||
{ m_creature->DeMorph(); }
|
||||
break;
|
||||
}
|
||||
case ACTION_T_SOUND:
|
||||
|
|
@ -628,14 +628,14 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
{
|
||||
int32 temp = GetRandActionParam(rnd, action.random_sound.soundId1, action.random_sound.soundId2, action.random_sound.soundId3);
|
||||
if (temp >= 0)
|
||||
m_creature->PlayDirectSound(temp);
|
||||
{ m_creature->PlayDirectSound(temp); }
|
||||
break;
|
||||
}
|
||||
case ACTION_T_RANDOM_EMOTE:
|
||||
{
|
||||
int32 temp = GetRandActionParam(rnd, action.random_emote.emoteId1, action.random_emote.emoteId2, action.random_emote.emoteId3);
|
||||
if (temp >= 0)
|
||||
m_creature->HandleEmote(temp);
|
||||
{ m_creature->HandleEmote(temp); }
|
||||
break;
|
||||
}
|
||||
case ACTION_T_CAST:
|
||||
|
|
@ -652,7 +652,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
if (!target)
|
||||
{
|
||||
if (reportTargetError)
|
||||
sLog.outErrorEventAI("NULL target for ACTION_T_CAST creature entry %u casting spell id %u", m_creature->GetEntry(), action.cast.spellId);
|
||||
{ sLog.outErrorEventAI("NULL target for ACTION_T_CAST creature entry %u casting spell id %u", m_creature->GetEntry(), action.cast.spellId); }
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -715,53 +715,52 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
{
|
||||
Unit* target = GetTargetByType(action.summon.target, pActionInvoker, pAIEventSender, reportTargetError);
|
||||
if (!target && reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_SUMMON(%u), target-type %u", EventId, action.type, action.summon.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_SUMMON(%u), target-type %u", EventId, action.type, action.summon.target); }
|
||||
|
||||
Creature* pCreature = NULL;
|
||||
|
||||
if (action.summon.duration)
|
||||
pCreature = m_creature->SummonCreature(action.summon.creatureId, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OOC_OR_DEAD_DESPAWN, action.summon.duration);
|
||||
{ pCreature = m_creature->SummonCreature(action.summon.creatureId, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OOC_OR_DEAD_DESPAWN, action.summon.duration); }
|
||||
else
|
||||
pCreature = m_creature->SummonCreature(action.summon.creatureId, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OOC_DESPAWN, 0);
|
||||
{ pCreature = m_creature->SummonCreature(action.summon.creatureId, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OOC_DESPAWN, 0); }
|
||||
|
||||
if (!pCreature)
|
||||
sLog.outErrorEventAI("failed to spawn creature %u. Spawn event %d is on creature %d", action.summon.creatureId, EventId, m_creature->GetEntry());
|
||||
{ sLog.outErrorEventAI("failed to spawn creature %u. Spawn event %d is on creature %d", action.summon.creatureId, EventId, m_creature->GetEntry()); }
|
||||
else if (action.summon.target != TARGET_T_SELF && target)
|
||||
pCreature->AI()->AttackStart(target);
|
||||
{ pCreature->AI()->AttackStart(target); }
|
||||
break;
|
||||
}
|
||||
case ACTION_T_THREAT_SINGLE_PCT:
|
||||
if (Unit* target = GetTargetByType(action.threat_single_pct.target, pActionInvoker, pAIEventSender, reportTargetError))
|
||||
m_creature->GetThreatManager().modifyThreatPercent(target, action.threat_single_pct.percent);
|
||||
{ m_creature->GetThreatManager().modifyThreatPercent(target, action.threat_single_pct.percent); }
|
||||
else if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_THREAT_SINGLE_PCT(%u), target-type %u", EventId, action.type, action.threat_single_pct.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_THREAT_SINGLE_PCT(%u), target-type %u", EventId, action.type, action.threat_single_pct.target); }
|
||||
break;
|
||||
case ACTION_T_THREAT_ALL_PCT:
|
||||
{
|
||||
ThreatList const& threatList = m_creature->GetThreatManager().getThreatList();
|
||||
for (ThreatList::const_iterator i = threatList.begin(); i != threatList.end(); ++i)
|
||||
if (Unit* Temp = m_creature->GetMap()->GetUnit((*i)->getUnitGuid()))
|
||||
m_creature->GetThreatManager().modifyThreatPercent(Temp, action.threat_all_pct.percent);
|
||||
{ m_creature->GetThreatManager().modifyThreatPercent(Temp, action.threat_all_pct.percent); }
|
||||
break;
|
||||
}
|
||||
case ACTION_T_QUEST_EVENT:
|
||||
if (Unit* target = GetTargetByType(action.quest_event.target, pActionInvoker, pAIEventSender, reportTargetError))
|
||||
{
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)target)->AreaExploredOrEventHappens(action.quest_event.questId);
|
||||
{ ((Player*)target)->AreaExploredOrEventHappens(action.quest_event.questId); }
|
||||
}
|
||||
else if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_QUEST_EVENT(%u), target-type %u", EventId, action.type, action.quest_event.target);
|
||||
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_QUEST_EVENT(%u), target-type %u", EventId, action.type, action.quest_event.target); }
|
||||
break;
|
||||
case ACTION_T_CAST_EVENT:
|
||||
if (Unit* target = GetTargetByType(action.cast_event.target, pActionInvoker, pAIEventSender, reportTargetError, 0, SELECT_FLAG_PLAYER))
|
||||
{
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)target)->CastedCreatureOrGO(action.cast_event.creatureId, m_creature->GetObjectGuid(), action.cast_event.spellId);
|
||||
{ ((Player*)target)->CastedCreatureOrGO(action.cast_event.creatureId, m_creature->GetObjectGuid(), action.cast_event.spellId); }
|
||||
}
|
||||
else if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_CST_EVENT(%u), target-type %u", EventId, action.type, action.cast_event.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_CST_EVENT(%u), target-type %u", EventId, action.type, action.cast_event.target); }
|
||||
break;
|
||||
case ACTION_T_SET_UNIT_FIELD:
|
||||
{
|
||||
|
|
@ -769,38 +768,38 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
|
||||
// not allow modify important for integrity object fields
|
||||
if (action.set_unit_field.field < OBJECT_END || action.set_unit_field.field >= UNIT_END)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
else if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_SET_UNIT_FIELD(%u), target-type %u", EventId, action.type, action.set_unit_field.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_SET_UNIT_FIELD(%u), target-type %u", EventId, action.type, action.set_unit_field.target); }
|
||||
|
||||
break;
|
||||
}
|
||||
case ACTION_T_SET_UNIT_FLAG:
|
||||
if (Unit* target = GetTargetByType(action.unit_flag.target, pActionInvoker, pAIEventSender, reportTargetError))
|
||||
target->SetFlag(UNIT_FIELD_FLAGS, action.unit_flag.value);
|
||||
{ target->SetFlag(UNIT_FIELD_FLAGS, action.unit_flag.value); }
|
||||
else if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_SET_UNIT_FLAG(%u), target-type %u", EventId, action.type, action.unit_flag.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_SET_UNIT_FLAG(%u), target-type %u", EventId, action.type, action.unit_flag.target); }
|
||||
break;
|
||||
case ACTION_T_REMOVE_UNIT_FLAG:
|
||||
if (Unit* target = GetTargetByType(action.unit_flag.target, pActionInvoker, pAIEventSender, reportTargetError))
|
||||
target->RemoveFlag(UNIT_FIELD_FLAGS, action.unit_flag.value);
|
||||
{ target->RemoveFlag(UNIT_FIELD_FLAGS, action.unit_flag.value); }
|
||||
else if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_REMOVE_UNIT_FLAG(%u), target-type %u", EventId, action.type, action.unit_flag.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_REMOVE_UNIT_FLAG(%u), target-type %u", EventId, action.type, action.unit_flag.target); }
|
||||
case ACTION_T_AUTO_ATTACK:
|
||||
m_MeleeEnabled = action.auto_attack.state != 0;
|
||||
break;
|
||||
case ACTION_T_COMBAT_MOVEMENT:
|
||||
// ignore no affect case
|
||||
if (m_isCombatMovement == (action.combat_movement.state != 0) || m_creature->IsNonMeleeSpellCasted(false))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
SetCombatMovement(action.combat_movement.state != 0, true);
|
||||
|
||||
if (m_isCombatMovement && action.combat_movement.melee && m_creature->IsInCombat() && m_creature->getVictim())
|
||||
m_creature->SendMeleeAttackStart(m_creature->getVictim());
|
||||
{ m_creature->SendMeleeAttackStart(m_creature->getVictim()); }
|
||||
else if (action.combat_movement.melee && m_creature->IsInCombat() && m_creature->getVictim())
|
||||
m_creature->SendMeleeAttackStop(m_creature->getVictim());
|
||||
{ m_creature->SendMeleeAttackStop(m_creature->getVictim()); }
|
||||
break;
|
||||
case ACTION_T_SET_PHASE:
|
||||
m_Phase = action.set_phase.phase;
|
||||
|
|
@ -816,11 +815,11 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
}
|
||||
else if (new_phase >= MAX_PHASE)
|
||||
{
|
||||
sLog.outErrorEventAI("Event %d incremented Phase above %u. Phase mask cannot be used with phases past %u. CreatureEntry = %d", EventId, MAX_PHASE - 1, MAX_PHASE - 1, m_creature->GetEntry());
|
||||
sLog.outErrorEventAI("Event %d incremented Phase above %u. Phase mask can not be used with phases past %u. CreatureEntry = %d", EventId, MAX_PHASE - 1, MAX_PHASE - 1, m_creature->GetEntry());
|
||||
m_Phase = MAX_PHASE - 1;
|
||||
}
|
||||
else
|
||||
m_Phase = new_phase;
|
||||
{ m_Phase = new_phase; }
|
||||
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_EVENT_AI_DEV, "CreatureEventAI: ACTION_T_INC_PHASE - script %u for %s, phase is now %u", EventId, m_creature->GetGuidStr().c_str(), m_Phase);
|
||||
break;
|
||||
|
|
@ -840,21 +839,21 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
temp->GroupEventHappens(action.quest_event_all.questId, m_creature);
|
||||
}
|
||||
else if (pActionInvoker && pActionInvoker->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)pActionInvoker)->GroupEventHappens(action.quest_event_all.questId, m_creature);
|
||||
{ ((Player*)pActionInvoker)->GroupEventHappens(action.quest_event_all.questId, m_creature); }
|
||||
break;
|
||||
case ACTION_T_CAST_EVENT_ALL:
|
||||
{
|
||||
ThreatList const& threatList = m_creature->GetThreatManager().getThreatList();
|
||||
for (ThreatList::const_iterator i = threatList.begin(); i != threatList.end(); ++i)
|
||||
if (Player* temp = m_creature->GetMap()->GetPlayer((*i)->getUnitGuid()))
|
||||
temp->CastedCreatureOrGO(action.cast_event_all.creatureId, m_creature->GetObjectGuid(), action.cast_event_all.spellId);
|
||||
{ temp->CastedCreatureOrGO(action.cast_event_all.creatureId, m_creature->GetObjectGuid(), action.cast_event_all.spellId); }
|
||||
break;
|
||||
}
|
||||
case ACTION_T_REMOVEAURASFROMSPELL:
|
||||
if (Unit* target = GetTargetByType(action.remove_aura.target, pActionInvoker, pAIEventSender, reportTargetError))
|
||||
target->RemoveAurasDueToSpell(action.remove_aura.spellId);
|
||||
{ target->RemoveAurasDueToSpell(action.remove_aura.spellId); }
|
||||
else if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_REMOVEAURASFROMSPELL(%u), target-type %u", EventId, action.type, action.remove_aura.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_REMOVEAURASFROMSPELL(%u), target-type %u", EventId, action.type, action.remove_aura.target); }
|
||||
break;
|
||||
case ACTION_T_RANGED_MOVEMENT:
|
||||
m_attackDistance = (float)action.ranged_movement.distance;
|
||||
|
|
@ -876,15 +875,15 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
break;
|
||||
case ACTION_T_RANDOM_PHASE_RANGE:
|
||||
if (action.random_phase_range.phaseMax > action.random_phase_range.phaseMin)
|
||||
m_Phase = action.random_phase_range.phaseMin + (rnd % (action.random_phase_range.phaseMax - action.random_phase_range.phaseMin));
|
||||
{ m_Phase = action.random_phase_range.phaseMin + (rnd % (action.random_phase_range.phaseMax - action.random_phase_range.phaseMin)); }
|
||||
else
|
||||
sLog.outErrorEventAI("ACTION_T_RANDOM_PHASE_RANGE cannot have Param2 <= Param1. Divide by Zero. Event = %d. CreatureEntry = %d", EventId, m_creature->GetEntry());
|
||||
{ sLog.outErrorEventAI("ACTION_T_RANDOM_PHASE_RANGE can not have Param2 <= Param1. Divide by Zero. Event = %d. CreatureEntry = %d", EventId, m_creature->GetEntry()); }
|
||||
break;
|
||||
case ACTION_T_SUMMON_ID:
|
||||
{
|
||||
Unit* target = GetTargetByType(action.summon_id.target, pActionInvoker, pAIEventSender, reportTargetError);
|
||||
if (!target && reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_SUMMON_ID(%u), target-type %u", EventId, action.type, action.summon_id.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_SUMMON_ID(%u), target-type %u", EventId, action.type, action.summon_id.target); }
|
||||
|
||||
CreatureEventAI_Summon_Map::const_iterator i = sEventAIMgr.GetCreatureEventAISummonMap().find(action.summon_id.spawnId);
|
||||
if (i == sEventAIMgr.GetCreatureEventAISummonMap().end())
|
||||
|
|
@ -900,26 +899,26 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
pCreature = m_creature->SummonCreature(action.summon_id.creatureId, i->second.position_x, i->second.position_y, i->second.position_z, i->second.orientation, TEMPSUMMON_TIMED_OOC_DESPAWN, 0);
|
||||
|
||||
if (!pCreature)
|
||||
sLog.outErrorEventAI("failed to spawn creature %u. EventId %d.Creature %d", action.summon_id.creatureId, EventId, m_creature->GetEntry());
|
||||
{ sLog.outErrorEventAI("failed to spawn creature %u. EventId %d.Creature %d", action.summon_id.creatureId, EventId, m_creature->GetEntry()); }
|
||||
else if (action.summon_id.target != TARGET_T_SELF && target)
|
||||
pCreature->AI()->AttackStart(target);
|
||||
{ pCreature->AI()->AttackStart(target); }
|
||||
|
||||
break;
|
||||
}
|
||||
case ACTION_T_KILLED_MONSTER:
|
||||
// first attempt player/group who tapped creature
|
||||
if (Player* pPlayer = m_creature->GetLootRecipient())
|
||||
pPlayer->RewardPlayerAndGroupAtEvent(action.killed_monster.creatureId, m_creature);
|
||||
{ pPlayer->RewardPlayerAndGroupAtEvent(action.killed_monster.creatureId, m_creature); }
|
||||
else
|
||||
{
|
||||
// if not available, use pActionInvoker
|
||||
if (Unit* pTarget = GetTargetByType(action.killed_monster.target, pActionInvoker, pAIEventSender, reportTargetError, 0, SELECT_FLAG_PLAYER))
|
||||
{
|
||||
if (Player* pPlayer2 = pTarget->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
pPlayer2->RewardPlayerAndGroupAtEvent(action.killed_monster.creatureId, m_creature);
|
||||
{ pPlayer2->RewardPlayerAndGroupAtEvent(action.killed_monster.creatureId, m_creature); }
|
||||
}
|
||||
else if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_KILLED_MONSTER(%u), target-type %u", EventId, action.type, action.killed_monster.target);
|
||||
{ sLog.outErrorEventAI("Event %u - NULL target for ACTION_T_KILLED_MONSTER(%u), target-type %u", EventId, action.type, action.killed_monster.target); }
|
||||
}
|
||||
break;
|
||||
case ACTION_T_SET_INST_DATA:
|
||||
|
|
@ -940,7 +939,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
if (!target)
|
||||
{
|
||||
if (reportTargetError)
|
||||
sLog.outErrorEventAI("Event %d attempt to set instance data64 but Target == NULL. Creature %d", EventId, m_creature->GetEntry());
|
||||
{ sLog.outErrorEventAI("Event %d attempt to set instance data64 but Target == NULL. Creature %d", EventId, m_creature->GetEntry()); }
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -957,7 +956,6 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
case ACTION_T_UPDATE_TEMPLATE:
|
||||
if (m_creature->GetEntry() == action.update_template.creatureId)
|
||||
{
|
||||
|
||||
sLog.outErrorEventAI("Event %d ACTION_T_UPDATE_TEMPLATE call with param1 == current entry. Creature %d", EventId, m_creature->GetEntry());
|
||||
return;
|
||||
}
|
||||
|
|
@ -967,7 +965,6 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
case ACTION_T_DIE:
|
||||
if (m_creature->IsDead())
|
||||
{
|
||||
|
||||
sLog.outErrorEventAI("Event %d ACTION_T_DIE on dead creature. Creature %d", EventId, m_creature->GetEntry());
|
||||
return;
|
||||
}
|
||||
|
|
@ -996,9 +993,9 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
case ACTION_T_SET_INVINCIBILITY_HP_LEVEL:
|
||||
{
|
||||
if (action.invincibility_hp_level.is_percent)
|
||||
m_InvinceabilityHpLevel = m_creature->GetMaxHealth() * action.invincibility_hp_level.hp_level / 100;
|
||||
{ m_InvinceabilityHpLevel = m_creature->GetMaxHealth() * action.invincibility_hp_level.hp_level / 100; }
|
||||
else
|
||||
m_InvinceabilityHpLevel = action.invincibility_hp_level.hp_level;
|
||||
{ m_InvinceabilityHpLevel = action.invincibility_hp_level.hp_level; }
|
||||
break;
|
||||
}
|
||||
case ACTION_T_MOUNT_TO_ENTRY_OR_MODEL:
|
||||
|
|
@ -1016,10 +1013,10 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
}
|
||||
// if no param1, then use value from param2 (modelId)
|
||||
else
|
||||
m_creature->Mount(action.mount.modelId);
|
||||
{ m_creature->Mount(action.mount.modelId); }
|
||||
}
|
||||
else
|
||||
m_creature->Unmount();
|
||||
{ m_creature->Unmount(); }
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -1079,11 +1076,11 @@ void CreatureEventAI::JustRespawned() // NOTE that this is
|
|||
if (i->Event.event_type == EVENT_T_TIMER_GENERIC)
|
||||
{
|
||||
if (i->UpdateRepeatTimer(m_creature, i->Event.timer.initialMin, i->Event.timer.initialMax))
|
||||
i->Enabled = true;
|
||||
{ i->Enabled = true; }
|
||||
}
|
||||
// Handle Spawned Events
|
||||
else if (SpawnedEventConditionsCheck((*i).Event))
|
||||
ProcessEvent(*i);
|
||||
{ ProcessEvent(*i); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1099,7 +1096,7 @@ void CreatureEventAI::Reset()
|
|||
CreatureEventAI_Event const& event = i->Event;
|
||||
switch (event.event_type)
|
||||
{
|
||||
// Reset all out of combat timers
|
||||
// Reset all out of combat timers
|
||||
case EVENT_T_TIMER_OOC:
|
||||
{
|
||||
if (i->UpdateRepeatTimer(m_creature, event.timer.initialMin, event.timer.initialMax))
|
||||
|
|
@ -1120,7 +1117,7 @@ void CreatureEventAI::JustReachedHome()
|
|||
for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i)
|
||||
{
|
||||
if (i->Event.event_type == EVENT_T_REACHED_HOME)
|
||||
ProcessEvent(*i);
|
||||
{ ProcessEvent(*i); }
|
||||
}
|
||||
|
||||
Reset();
|
||||
|
|
@ -1134,7 +1131,7 @@ void CreatureEventAI::EnterEvadeMode()
|
|||
|
||||
// only alive creatures that are not on transport can return to home position
|
||||
if (m_creature->IsAlive() && !m_creature->IsBoarded())
|
||||
m_creature->GetMotionMaster()->MoveTargetedHome();
|
||||
{ m_creature->GetMotionMaster()->MoveTargetedHome(); }
|
||||
|
||||
m_creature->SetLootRecipient(NULL);
|
||||
|
||||
|
|
@ -1142,7 +1139,7 @@ void CreatureEventAI::EnterEvadeMode()
|
|||
for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i)
|
||||
{
|
||||
if (i->Event.event_type == EVENT_T_EVADE)
|
||||
ProcessEvent(*i);
|
||||
{ ProcessEvent(*i); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1154,17 +1151,17 @@ void CreatureEventAI::JustDied(Unit* killer)
|
|||
{
|
||||
// Send Zone Under Attack message to the LocalDefense and WorldDefense Channels
|
||||
if (Player* pKiller = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
m_creature->SendZoneUnderAttackMessage(pKiller);
|
||||
{ m_creature->SendZoneUnderAttackMessage(pKiller); }
|
||||
}
|
||||
|
||||
if (m_throwAIEventMask & (1 << AI_EVENT_JUST_DIED))
|
||||
SendAIEventAround(AI_EVENT_JUST_DIED, killer, 0, AIEVENT_DEFAULT_THROW_RADIUS);
|
||||
{ SendAIEventAround(AI_EVENT_JUST_DIED, killer, 0, AIEVENT_DEFAULT_THROW_RADIUS); }
|
||||
|
||||
// Handle On Death events
|
||||
for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i)
|
||||
{
|
||||
if (i->Event.event_type == EVENT_T_DEATH)
|
||||
ProcessEvent(*i, killer);
|
||||
{ ProcessEvent(*i, killer); }
|
||||
}
|
||||
|
||||
// reset phase after any death state events
|
||||
|
|
@ -1174,12 +1171,12 @@ void CreatureEventAI::JustDied(Unit* killer)
|
|||
void CreatureEventAI::KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i)
|
||||
{
|
||||
if (i->Event.event_type == EVENT_T_KILL)
|
||||
ProcessEvent(*i, victim);
|
||||
{ ProcessEvent(*i, victim); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1188,7 +1185,7 @@ void CreatureEventAI::JustSummoned(Creature* pUnit)
|
|||
for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i)
|
||||
{
|
||||
if (i->Event.event_type == EVENT_T_SUMMONED_UNIT)
|
||||
ProcessEvent(*i, pUnit);
|
||||
{ ProcessEvent(*i, pUnit); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1197,7 +1194,7 @@ void CreatureEventAI::SummonedCreatureJustDied(Creature* pUnit)
|
|||
for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i)
|
||||
{
|
||||
if (i->Event.event_type == EVENT_T_SUMMONED_JUST_DIED)
|
||||
ProcessEvent(*i, pUnit);
|
||||
{ ProcessEvent(*i, pUnit); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1206,7 +1203,7 @@ void CreatureEventAI::SummonedCreatureDespawn(Creature* pUnit)
|
|||
for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i)
|
||||
{
|
||||
if (i->Event.event_type == EVENT_T_SUMMONED_JUST_DESPAWN)
|
||||
ProcessEvent(*i, pUnit);
|
||||
{ ProcessEvent(*i, pUnit); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1217,8 +1214,8 @@ void CreatureEventAI::ReceiveAIEvent(AIEventType eventType, Creature* pSender, U
|
|||
for (CreatureEventAIList::iterator itr = m_CreatureEventAIList.begin(); itr != m_CreatureEventAIList.end(); ++itr)
|
||||
{
|
||||
if (itr->Event.event_type == EVENT_T_RECEIVE_AI_EVENT &&
|
||||
itr->Event.receiveAIEvent.eventType == eventType && (!itr->Event.receiveAIEvent.senderEntry || itr->Event.receiveAIEvent.senderEntry == pSender->GetEntry()))
|
||||
ProcessEvent(*itr, pInvoker, pSender);
|
||||
itr->Event.receiveAIEvent.eventType == eventType && (!itr->Event.receiveAIEvent.senderEntry || itr->Event.receiveAIEvent.senderEntry == pSender->GetEntry()))
|
||||
{ ProcessEvent(*itr, pInvoker, pSender); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1234,12 +1231,12 @@ void CreatureEventAI::EnterCombat(Unit* enemy)
|
|||
i->Enabled = true;
|
||||
ProcessEvent(*i, enemy);
|
||||
break;
|
||||
// Reset all in combat timers
|
||||
// Reset all in combat timers
|
||||
case EVENT_T_TIMER_IN_COMBAT:
|
||||
if (i->UpdateRepeatTimer(m_creature, event.timer.initialMin, event.timer.initialMax))
|
||||
i->Enabled = true;
|
||||
break;
|
||||
// All normal events need to be re-enabled and their time set to 0
|
||||
// All normal events need to be re-enabled and their time set to 0
|
||||
default:
|
||||
i->Enabled = true;
|
||||
i->Time = 0;
|
||||
|
|
@ -1254,7 +1251,7 @@ void CreatureEventAI::EnterCombat(Unit* enemy)
|
|||
void CreatureEventAI::AttackStart(Unit* who)
|
||||
{
|
||||
if (!who || !m_creature->CanAttackByItself())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (m_creature->Attack(who, m_MeleeEnabled))
|
||||
{
|
||||
|
|
@ -1269,7 +1266,7 @@ void CreatureEventAI::AttackStart(Unit* who)
|
|||
void CreatureEventAI::MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!who)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
// Check for OOC LOS Event
|
||||
if (m_HasOOCLoSEvent && !m_creature->getVictim())
|
||||
|
|
@ -1294,13 +1291,13 @@ void CreatureEventAI::MoveInLineOfSight(Unit* who)
|
|||
}
|
||||
|
||||
if (m_creature->IsCivilian() || m_creature->IsNeutralToAll())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (m_creature->CanInitiateAttack() && who->IsTargetableForAttack() &&
|
||||
m_creature->IsHostileTo(who) && who->isInAccessablePlaceFor(m_creature))
|
||||
m_creature->IsHostileTo(who) && who->isInAccessablePlaceFor(m_creature))
|
||||
{
|
||||
if (!m_creature->CanFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
float attackRadius = m_creature->GetAttackDistance(who);
|
||||
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
|
||||
|
|
@ -1326,7 +1323,7 @@ void CreatureEventAI::SpellHit(Unit* pUnit, const SpellEntry* pSpell)
|
|||
// If spell id matches (or no spell id) & if spell school matches (or no spell school)
|
||||
if (!i->Event.spell_hit.spellId || pSpell->Id == i->Event.spell_hit.spellId)
|
||||
if (pSpell->SchoolMask & i->Event.spell_hit.schoolMask)
|
||||
ProcessEvent(*i, pUnit);
|
||||
{ ProcessEvent(*i, pUnit); }
|
||||
}
|
||||
|
||||
void CreatureEventAI::UpdateAI(const uint32 diff)
|
||||
|
|
@ -1347,7 +1344,7 @@ void CreatureEventAI::UpdateAI(const uint32 diff)
|
|||
{
|
||||
if (i->Time > m_EventDiff)
|
||||
{
|
||||
// Do not decrement timers if event cannot trigger in this phase
|
||||
// Do not decrement timers if event can not trigger in this phase
|
||||
if (!(i->Event.event_inverse_phase_mask & (1 << m_Phase)))
|
||||
i->Time -= m_EventDiff;
|
||||
}
|
||||
|
|
@ -1433,52 +1430,52 @@ inline Unit* CreatureEventAI::GetTargetByType(uint32 Target, Unit* pActionInvoke
|
|||
case TARGET_T_HOSTILE:
|
||||
resTarget = m_creature->getVictim();
|
||||
if (!resTarget)
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return resTarget;
|
||||
case TARGET_T_HOSTILE_SECOND_AGGRO:
|
||||
resTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_TOPAGGRO, 1, forSpellId, selectFlags);
|
||||
if (!resTarget && ((forSpellId == 0 && selectFlags == 0 && m_creature->GetThreatManager().getThreatList().size() > 1) || m_creature->GetThreatManager().getThreatList().empty()))
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return resTarget;
|
||||
case TARGET_T_HOSTILE_LAST_AGGRO:
|
||||
case TARGET_T_HOSTILE_LAST_AGGRO:
|
||||
resTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_BOTTOMAGGRO, 0, forSpellId, selectFlags);
|
||||
if (!resTarget && m_creature->GetThreatManager().getThreatList().empty())
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return resTarget;
|
||||
case TARGET_T_HOSTILE_RANDOM:
|
||||
case TARGET_T_HOSTILE_RANDOM:
|
||||
resTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0, forSpellId, selectFlags);
|
||||
if (!resTarget && m_creature->GetThreatManager().getThreatList().empty())
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return resTarget;
|
||||
case TARGET_T_HOSTILE_RANDOM_NOT_TOP:
|
||||
case TARGET_T_HOSTILE_RANDOM_NOT_TOP:
|
||||
resTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 1, forSpellId, selectFlags);
|
||||
if (!resTarget && ((forSpellId == 0 && selectFlags == 0 && m_creature->GetThreatManager().getThreatList().size() > 1) || m_creature->GetThreatManager().getThreatList().empty()))
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return resTarget;
|
||||
case TARGET_T_HOSTILE_RANDOM_PLAYER:
|
||||
case TARGET_T_HOSTILE_RANDOM_PLAYER:
|
||||
resTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0, forSpellId, SELECT_FLAG_PLAYER | selectFlags);
|
||||
if (!resTarget)
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return resTarget;
|
||||
case TARGET_T_HOSTILE_RANDOM_NOT_TOP_PLAYER:
|
||||
case TARGET_T_HOSTILE_RANDOM_NOT_TOP_PLAYER:
|
||||
resTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 1, forSpellId, SELECT_FLAG_PLAYER | selectFlags);
|
||||
if (!resTarget && ((forSpellId == 0 && selectFlags == 0 && m_creature->GetThreatManager().getThreatList().size() > 1) || m_creature->GetThreatManager().getThreatList().empty()))
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return resTarget;
|
||||
case TARGET_T_ACTION_INVOKER:
|
||||
case TARGET_T_ACTION_INVOKER:
|
||||
if (!pActionInvoker)
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return pActionInvoker;
|
||||
case TARGET_T_ACTION_INVOKER_OWNER:
|
||||
case TARGET_T_ACTION_INVOKER_OWNER:
|
||||
resTarget = pActionInvoker ? pActionInvoker->GetCharmerOrOwnerOrSelf() : NULL;
|
||||
if (!resTarget)
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return resTarget;
|
||||
case TARGET_T_EVENT_SENDER:
|
||||
case TARGET_T_EVENT_SENDER:
|
||||
if (!pAIEventSender)
|
||||
isError = true;
|
||||
{ isError = true; }
|
||||
return pAIEventSender;
|
||||
default:
|
||||
default:
|
||||
isError = true;
|
||||
return NULL;
|
||||
};
|
||||
|
|
@ -1493,7 +1490,7 @@ Unit* CreatureEventAI::DoSelectLowestHpFriendly(float range, uint32 MinHPDiff)
|
|||
|
||||
/*
|
||||
typedef TYPELIST_4(GameObject, Creature*except pets*, DynamicObject, Corpse*Bones*) AllGridObjectTypes;
|
||||
This means that if we only search grid then we cannot possibly return pets or players so this is safe
|
||||
This means that if we only search grid then we can not possibly return pets or players so this is safe
|
||||
*/
|
||||
Cell::VisitGridObjects(m_creature, searcher, range);
|
||||
return pUnit;
|
||||
|
|
@ -1542,9 +1539,9 @@ void CreatureEventAI::DamageTaken(Unit* dealer, uint32& damage)
|
|||
if (m_InvinceabilityHpLevel > 0 && m_creature->GetHealth() < m_InvinceabilityHpLevel + damage)
|
||||
{
|
||||
if (m_creature->GetHealth() <= m_InvinceabilityHpLevel)
|
||||
damage = 0;
|
||||
{ damage = 0; }
|
||||
else
|
||||
damage = m_creature->GetHealth() - m_InvinceabilityHpLevel;
|
||||
{ damage = m_creature->GetHealth() - m_InvinceabilityHpLevel; }
|
||||
}
|
||||
|
||||
uint32 step = m_throwAIEventStep != 100 ? m_throwAIEventStep : 0;
|
||||
|
|
@ -1556,7 +1553,7 @@ void CreatureEventAI::DamageTaken(Unit* dealer, uint32& damage)
|
|||
AIEventType sendEvent[HEALTH_STEPS] = { AI_EVENT_LOST_SOME_HEALTH, AI_EVENT_LOST_HEALTH, AI_EVENT_CRITICAL_HEALTH };
|
||||
|
||||
if (newHealthPercent > healthSteps[step])
|
||||
return; // Not reached the next mark
|
||||
{ return; } // Not reached the next mark
|
||||
|
||||
// search for highest reached mark (with actual event attached)
|
||||
for (uint32 i = HEALTH_STEPS - 1; i > step; --i)
|
||||
|
|
@ -1569,7 +1566,7 @@ void CreatureEventAI::DamageTaken(Unit* dealer, uint32& damage)
|
|||
}
|
||||
|
||||
if (m_throwAIEventMask & (1 << sendEvent[step]))
|
||||
SendAIEventAround(sendEvent[step], dealer, 0, AIEVENT_DEFAULT_THROW_RADIUS);
|
||||
{ SendAIEventAround(sendEvent[step], dealer, 0, AIEVENT_DEFAULT_THROW_RADIUS); }
|
||||
|
||||
m_throwAIEventStep = step + 1;
|
||||
}
|
||||
|
|
@ -1578,12 +1575,12 @@ void CreatureEventAI::DamageTaken(Unit* dealer, uint32& damage)
|
|||
void CreatureEventAI::HealedBy(Unit* healer, uint32& healedAmount)
|
||||
{
|
||||
if (m_throwAIEventStep == 100)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (m_creature->GetHealth() + healedAmount >= m_creature->GetMaxHealth())
|
||||
{
|
||||
if (m_throwAIEventMask & (1 << AI_EVENT_GOT_FULL_HEALTH))
|
||||
SendAIEventAround(AI_EVENT_GOT_FULL_HEALTH, healer, 0, AIEVENT_DEFAULT_THROW_RADIUS);
|
||||
{ SendAIEventAround(AI_EVENT_GOT_FULL_HEALTH, healer, 0, AIEVENT_DEFAULT_THROW_RADIUS); }
|
||||
m_throwAIEventStep = 100;
|
||||
}
|
||||
}
|
||||
|
|
@ -1591,7 +1588,7 @@ void CreatureEventAI::HealedBy(Unit* healer, uint32& healedAmount)
|
|||
bool CreatureEventAI::SpawnedEventConditionsCheck(CreatureEventAI_Event const& event)
|
||||
{
|
||||
if (event.event_type != EVENT_T_SPAWNED)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
switch (event.spawned.condition)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ enum SpawnedEventMode
|
|||
|
||||
struct CreatureEventAI_Action
|
||||
{
|
||||
EventAI_ActionType type : 16;
|
||||
EventAI_ActionType type: 16;
|
||||
union
|
||||
{
|
||||
// ACTION_T_TEXT = 1
|
||||
|
|
@ -627,7 +627,7 @@ struct CreatureEventAIHolder
|
|||
bool UpdateRepeatTimer(Creature* creature, uint32 repeatMin, uint32 repeatMax);
|
||||
};
|
||||
|
||||
class CreatureEventAI : public CreatureAI
|
||||
class CreatureEventAI : public CreatureAI
|
||||
{
|
||||
public:
|
||||
explicit CreatureEventAI(Creature* c);
|
||||
|
|
|
|||
|
|
@ -42,14 +42,15 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Texts(bool check_entry_use)
|
|||
{
|
||||
// Load EventAI Text
|
||||
sObjectMgr.LoadMangosStrings(WorldDatabase, "creature_ai_texts", MIN_CREATURE_AI_TEXT_STRING_ID, MAX_CREATURE_AI_TEXT_STRING_ID, true);
|
||||
|
||||
if (check_entry_use)
|
||||
CheckUnusedAITexts();
|
||||
{ CheckUnusedAITexts(); }
|
||||
}
|
||||
|
||||
void CreatureEventAIMgr::CheckUnusedAITexts()
|
||||
{
|
||||
if (m_usedTextsAmount == sObjectMgr.GetLoadedStringsCount(MIN_CREATURE_AI_TEXT_STRING_ID))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
sLog.outString("Checking EventAI for unused texts, this might take a while");
|
||||
|
||||
|
|
@ -57,7 +58,7 @@ void CreatureEventAIMgr::CheckUnusedAITexts()
|
|||
// check not used strings this is negative range
|
||||
for (int32 i = MAX_CREATURE_AI_TEXT_STRING_ID + 1; i <= MIN_CREATURE_AI_TEXT_STRING_ID; ++i)
|
||||
if (sObjectMgr.GetMangosStringLocale(i))
|
||||
idx_set.insert(i);
|
||||
{ idx_set.insert(i); }
|
||||
|
||||
for (CreatureEventAI_Event_Map::const_iterator itr = m_CreatureEventAI_Event_Map.begin(); itr != m_CreatureEventAI_Event_Map.end(); ++itr)
|
||||
{
|
||||
|
|
@ -77,7 +78,7 @@ void CreatureEventAIMgr::CheckUnusedAITexts()
|
|||
int k = action.type == ACTION_T_TEXT ? 0 : 1;
|
||||
for (; k < 3; ++k)
|
||||
if (action.text.TextId[k])
|
||||
idx_set.erase(action.text.TextId[k]);
|
||||
{ idx_set.erase(action.text.TextId[k]); }
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
|
|
@ -105,7 +106,7 @@ bool IsValidTargetType(EventAI_Type eventType, EventAI_ActionType actionType, ui
|
|||
case TARGET_T_HOSTILE_RANDOM:
|
||||
case TARGET_T_HOSTILE_RANDOM_NOT_TOP:
|
||||
if (actionType == ACTION_T_QUEST_EVENT || actionType == ACTION_T_CAST_EVENT || actionType == ACTION_T_QUEST_EVENT_ALL || actionType == ACTION_T_KILLED_MONSTER)
|
||||
sLog.outErrorEventAI("Event %u Action%u uses LIKELY bad Target type %u for event-type %u (must target player)", eventId, action, targetType, eventType);
|
||||
{ sLog.outErrorEventAI("Event %u Action%u uses LIKELY bad Target type %u for event-type %u (must target player)", eventId, action, targetType, eventType); }
|
||||
// no break, check if valid at all
|
||||
case TARGET_T_HOSTILE:
|
||||
case TARGET_T_HOSTILE_SECOND_AGGRO:
|
||||
|
|
@ -117,10 +118,10 @@ bool IsValidTargetType(EventAI_Type eventType, EventAI_ActionType actionType, ui
|
|||
case EVENT_T_TIMER_OOC:
|
||||
case EVENT_T_OOC_LOS:
|
||||
case EVENT_T_REACHED_HOME:
|
||||
sLog.outErrorEventAI("Event %u Action%u uses incorrect Target type %u for event-type %u (cannot be used OOC)", eventId, action, targetType, eventType);
|
||||
sLog.outErrorEventAI("Event %u Action%u uses incorrect Target type %u for event-type %u (can not be used OOC)", eventId, action, targetType, eventType);
|
||||
return false;
|
||||
case EVENT_T_TIMER_GENERIC:
|
||||
sLog.outErrorEventAI("Event %u Action%u uses LIKELY incorrect Target type %u for event-type %u (cannot be used OOC)", eventId, action, targetType, eventType);
|
||||
sLog.outErrorEventAI("Event %u Action%u uses LIKELY incorrect Target type %u for event-type %u (can not be used OOC)", eventId, action, targetType, eventType);
|
||||
return true; // Does not need to be an error
|
||||
default:
|
||||
return true;
|
||||
|
|
@ -304,7 +305,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
|
||||
// No chance of this event occuring
|
||||
if (temp.event_chance == 0)
|
||||
sLog.outErrorEventAI("Event %u has 0 percent chance. Event will never trigger!", i);
|
||||
{ sLog.outErrorEventAI("Event %u has 0 percent chance. Event will never trigger!", i); }
|
||||
// Chance above 100, force it to be 100
|
||||
else if (temp.event_chance > 100)
|
||||
{
|
||||
|
|
@ -319,9 +320,9 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
case EVENT_T_TIMER_OOC:
|
||||
case EVENT_T_TIMER_GENERIC:
|
||||
if (temp.timer.initialMax < temp.timer.initialMin)
|
||||
sLog.outErrorEventAI("Creature %u are using timed event(%u) with param2 < param1 (InitialMax < InitialMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using timed event(%u) with param2 < param1 (InitialMax < InitialMin). Event will never repeat.", temp.creature_id, i); }
|
||||
if (temp.timer.repeatMax < temp.timer.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_HP:
|
||||
case EVENT_T_MANA:
|
||||
|
|
@ -329,14 +330,14 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
case EVENT_T_TARGET_MANA:
|
||||
case EVENT_T_ENERGY:
|
||||
if (temp.percent_range.percentMax > 100)
|
||||
sLog.outErrorEventAI("Creature %u are using percentage event(%u) with param2 (MinPercent) > 100. Event will never trigger! ", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using percentage event(%u) with param2 (MinPercent) > 100. Event will never trigger! ", temp.creature_id, i); }
|
||||
|
||||
if (temp.percent_range.percentMax <= temp.percent_range.percentMin)
|
||||
sLog.outErrorEventAI("Creature %u are using percentage event(%u) with param1 <= param2 (MaxPercent <= MinPercent). Event will never trigger! ", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using percentage event(%u) with param1 <= param2 (MaxPercent <= MinPercent). Event will never trigger! ", temp.creature_id, i); }
|
||||
|
||||
if (temp.event_flags & EFLAG_REPEATABLE && !temp.percent_range.repeatMin && !temp.percent_range.repeatMax)
|
||||
{
|
||||
sLog.outErrorEventAI("Creature %u has param3 and param4=0 (RepeatMin/RepeatMax) but cannot be repeatable without timers. Removing EFLAG_REPEATABLE for event %u.", temp.creature_id, i);
|
||||
sLog.outErrorEventAI("Creature %u has param3 and param4=0 (RepeatMin/RepeatMax) but can not be repeatable without timers. Removing EFLAG_REPEATABLE for event %u.", temp.creature_id, i);
|
||||
temp.event_flags &= ~EFLAG_REPEATABLE;
|
||||
}
|
||||
break;
|
||||
|
|
@ -351,24 +352,24 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
}
|
||||
|
||||
if ((temp.spell_hit.schoolMask & pSpell->SchoolMask) != pSpell->SchoolMask)
|
||||
sLog.outErrorEventAI("Creature %u has param1(spellId %u) but param2 is not -1 and not equal to spell's school mask. Event %u can never trigger.", temp.creature_id, temp.spell_hit.schoolMask, i);
|
||||
{ sLog.outErrorEventAI("Creature %u has param1(spellId %u) but param2 is not -1 and not equal to spell's school mask. Event %u can never trigger.", temp.creature_id, temp.spell_hit.schoolMask, i); }
|
||||
}
|
||||
|
||||
if (!temp.spell_hit.schoolMask)
|
||||
sLog.outErrorEventAI("Creature %u is using invalid SpellSchoolMask(%u) defined in event %u.", temp.creature_id, temp.spell_hit.schoolMask, i);
|
||||
{ sLog.outErrorEventAI("Creature %u is using invalid SpellSchoolMask(%u) defined in event %u.", temp.creature_id, temp.spell_hit.schoolMask, i); }
|
||||
|
||||
if (temp.spell_hit.repeatMax < temp.spell_hit.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_RANGE:
|
||||
if (temp.range.maxDist < temp.range.minDist)
|
||||
sLog.outErrorEventAI("Creature %u are using event(%u) with param2 < param1 (MaxDist < MinDist). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using event(%u) with param2 < param1 (MaxDist < MinDist). Event will never repeat.", temp.creature_id, i); }
|
||||
if (temp.range.repeatMax < temp.range.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_OOC_LOS:
|
||||
if (temp.ooc_los.repeatMax < temp.ooc_los.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_SPAWNED:
|
||||
switch (temp.spawned.condition)
|
||||
|
|
@ -377,11 +378,11 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
break;
|
||||
case SPAWNED_EVENT_MAP:
|
||||
if (!sMapStore.LookupEntry(temp.spawned.conditionValue1))
|
||||
sLog.outErrorEventAI("Creature %u are using spawned event(%u) with param1 = %u 'map specific' but map (param2: %u) does not exist. Event will never repeat.", temp.creature_id, i, temp.spawned.condition, temp.spawned.conditionValue1);
|
||||
{ sLog.outErrorEventAI("Creature %u are using spawned event(%u) with param1 = %u 'map specific' but map (param2: %u) does not exist. Event will never repeat.", temp.creature_id, i, temp.spawned.condition, temp.spawned.conditionValue1); }
|
||||
break;
|
||||
case SPAWNED_EVENT_ZONE:
|
||||
if (!GetAreaEntryByAreaID(temp.spawned.conditionValue1))
|
||||
sLog.outErrorEventAI("Creature %u are using spawned event(%u) with param1 = %u 'area specific' but area (param2: %u) does not exist. Event will never repeat.", temp.creature_id, i, temp.spawned.condition, temp.spawned.conditionValue1);
|
||||
{ sLog.outErrorEventAI("Creature %u are using spawned event(%u) with param1 = %u 'area specific' but area (param2: %u) does not exist. Event will never repeat.", temp.creature_id, i, temp.spawned.condition, temp.spawned.conditionValue1); }
|
||||
break;
|
||||
default:
|
||||
sLog.outErrorEventAI("Creature %u are using invalid spawned event %u mode (%u) in param1", temp.creature_id, i, temp.spawned.condition);
|
||||
|
|
@ -390,11 +391,11 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
break;
|
||||
case EVENT_T_FRIENDLY_HP:
|
||||
if (temp.friendly_hp.repeatMax < temp.friendly_hp.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_FRIENDLY_IS_CC:
|
||||
if (temp.friendly_is_cc.repeatMax < temp.friendly_is_cc.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_FRIENDLY_MISSING_BUFF:
|
||||
{
|
||||
|
|
@ -410,29 +411,29 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
continue;
|
||||
}
|
||||
if (temp.friendly_buff.repeatMax < temp.friendly_buff.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
}
|
||||
case EVENT_T_KILL:
|
||||
if (temp.kill.repeatMax < temp.kill.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using event(%u) with param2 < param1 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using event(%u) with param2 < param1 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_TARGET_CASTING:
|
||||
if (temp.target_casting.repeatMax < temp.target_casting.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using event(%u) with param2 < param1 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using event(%u) with param2 < param1 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_SUMMONED_UNIT:
|
||||
case EVENT_T_SUMMONED_JUST_DIED:
|
||||
case EVENT_T_SUMMONED_JUST_DESPAWN:
|
||||
if (!sCreatureStorage.LookupEntry<CreatureInfo>(temp.summoned.creatureId))
|
||||
sLog.outErrorEventAI("Creature %u are using event(%u) with nonexistent creature template id (%u) in param1, skipped.", temp.creature_id, i, temp.summoned.creatureId);
|
||||
{ sLog.outErrorEventAI("Creature %u are using event(%u) with nonexistent creature template id (%u) in param1, skipped.", temp.creature_id, i, temp.summoned.creatureId); }
|
||||
if (temp.summoned.repeatMax < temp.summoned.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using event(%u) with param2 < param1 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using event(%u) with param2 < param1 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
case EVENT_T_QUEST_ACCEPT:
|
||||
case EVENT_T_QUEST_COMPLETE:
|
||||
if (!sObjectMgr.GetQuestTemplate(temp.quest.questId))
|
||||
sLog.outErrorEventAI("Creature %u are using event(%u) with nonexistent quest id (%u) in param1, skipped.", temp.creature_id, i, temp.quest.questId);
|
||||
{ sLog.outErrorEventAI("Creature %u are using event(%u) with nonexistent quest id (%u) in param1, skipped.", temp.creature_id, i, temp.quest.questId); }
|
||||
sLog.outErrorEventAI("Creature %u using not implemented event (%u) in event %u.", temp.creature_id, temp.event_id, i);
|
||||
continue;
|
||||
|
||||
|
|
@ -490,7 +491,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
continue;
|
||||
}
|
||||
if (temp.buffed.repeatMax < temp.buffed.repeatMin)
|
||||
sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
{ sLog.outErrorEventAI("Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i); }
|
||||
break;
|
||||
}
|
||||
case EVENT_T_RECEIVE_AI_EVENT:
|
||||
|
|
@ -539,9 +540,9 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
case ACTION_T_CHANCED_TEXT:
|
||||
// Check first param as chance
|
||||
if (!action.chanced_text.chance)
|
||||
sLog.outErrorEventAI("Event %u Action %u has not set chance param1. Text will not be displayed", i, j + 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u has not set chance param1. Text will not be displayed", i, j + 1); }
|
||||
else if (action.chanced_text.chance >= 100)
|
||||
sLog.outErrorEventAI("Event %u Action %u has set chance param1 >= 100. Text will always be displayed", i, j + 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u has set chance param1 >= 100. Text will always be displayed", i, j + 1); }
|
||||
// no break here to check texts
|
||||
case ACTION_T_TEXT:
|
||||
{
|
||||
|
|
@ -552,10 +553,10 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
if (action.text.TextId[k])
|
||||
{
|
||||
if (k > firstTextParam && not_set)
|
||||
sLog.outErrorEventAI("Event %u Action %u has param%d, but it follow after not set param. Required for randomized text.", i, j + 1, k + 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u has param%d, but it follow after not set param. Required for randomized text.", i, j + 1, k + 1); }
|
||||
|
||||
if (!action.text.TextId[k])
|
||||
not_set = true;
|
||||
{ not_set = true; }
|
||||
// range negative
|
||||
else if (action.text.TextId[k] > MIN_CREATURE_AI_TEXT_STRING_ID || action.text.TextId[k] <= MAX_CREATURE_AI_TEXT_STRING_ID)
|
||||
{
|
||||
|
|
@ -568,7 +569,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
action.text.TextId[k] = 0;
|
||||
}
|
||||
else
|
||||
usedTextIds.insert(action.text.TextId[k]);
|
||||
{ usedTextIds.insert(action.text.TextId[k]); }
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -606,33 +607,33 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
break;
|
||||
case ACTION_T_SOUND:
|
||||
if (!sSoundEntriesStore.LookupEntry(action.sound.soundId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent SoundID %u.", i, j + 1, action.sound.soundId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent SoundID %u.", i, j + 1, action.sound.soundId); }
|
||||
break;
|
||||
case ACTION_T_EMOTE:
|
||||
if (!sEmotesStore.LookupEntry(action.emote.emoteId))
|
||||
sLog.outErrorEventAI("Event %u Action %u param1 (EmoteId: %u) are not valid.", i, j + 1, action.emote.emoteId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u param1 (EmoteId: %u) are not valid.", i, j + 1, action.emote.emoteId); }
|
||||
break;
|
||||
case ACTION_T_RANDOM_SOUND:
|
||||
if (!sSoundEntriesStore.LookupEntry(action.random_sound.soundId1))
|
||||
sLog.outErrorEventAI("Event %u Action %u param1 uses nonexistent SoundID %u.", i, j + 1, action.random_sound.soundId1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u param1 uses nonexistent SoundID %u.", i, j + 1, action.random_sound.soundId1); }
|
||||
if (action.random_sound.soundId2 >= 0 && !sSoundEntriesStore.LookupEntry(action.random_sound.soundId2))
|
||||
sLog.outErrorEventAI("Event %u Action %u param2 uses nonexistent SoundID %u.", i, j + 1, action.random_sound.soundId2);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u param2 uses nonexistent SoundID %u.", i, j + 1, action.random_sound.soundId2); }
|
||||
if (action.random_sound.soundId3 >= 0 && !sSoundEntriesStore.LookupEntry(action.random_sound.soundId3))
|
||||
sLog.outErrorEventAI("Event %u Action %u param3 uses nonexistent SoundID %u.", i, j + 1, action.random_sound.soundId3);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u param3 uses nonexistent SoundID %u.", i, j + 1, action.random_sound.soundId3); }
|
||||
break;
|
||||
case ACTION_T_RANDOM_EMOTE:
|
||||
if (!sEmotesStore.LookupEntry(action.random_emote.emoteId1))
|
||||
sLog.outErrorEventAI("Event %u Action %u param1 (EmoteId: %u) are not valid.", i, j + 1, action.random_emote.emoteId1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u param1 (EmoteId: %u) are not valid.", i, j + 1, action.random_emote.emoteId1); }
|
||||
if (action.random_emote.emoteId2 >= 0 && !sEmotesStore.LookupEntry(action.random_emote.emoteId2))
|
||||
sLog.outErrorEventAI("Event %u Action %u param2 (EmoteId: %u) are not valid.", i, j + 1, action.random_emote.emoteId2);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u param2 (EmoteId: %u) are not valid.", i, j + 1, action.random_emote.emoteId2); }
|
||||
if (action.random_emote.emoteId3 >= 0 && !sEmotesStore.LookupEntry(action.random_emote.emoteId3))
|
||||
sLog.outErrorEventAI("Event %u Action %u param3 (EmoteId: %u) are not valid.", i, j + 1, action.random_emote.emoteId3);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u param3 (EmoteId: %u) are not valid.", i, j + 1, action.random_emote.emoteId3); }
|
||||
break;
|
||||
case ACTION_T_CAST:
|
||||
{
|
||||
const SpellEntry* spell = sSpellStore.LookupEntry(action.cast.spellId);
|
||||
if (!spell)
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent SpellID %u.", i, j + 1, action.cast.spellId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent SpellID %u.", i, j + 1, action.cast.spellId); }
|
||||
/* FIXME: temp.raw.param3 not have event tipes with recovery time in it....
|
||||
else
|
||||
{
|
||||
|
|
@ -647,7 +648,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
|
||||
// Cast is always triggered if target is forced to cast on self
|
||||
if (action.cast.castFlags & CAST_FORCE_TARGET_SELF)
|
||||
action.cast.castFlags |= CAST_TRIGGERED;
|
||||
{ action.cast.castFlags |= CAST_TRIGGERED; }
|
||||
|
||||
IsValidTargetType(temp.event_type, action.type, action.cast.target, i, j + 1);
|
||||
|
||||
|
|
@ -656,7 +657,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
{
|
||||
// spell must be cast on self, but is not
|
||||
if ((IsOnlySelfTargeting(spell) || spell->rangeIndex == SPELL_RANGE_IDX_SELF_ONLY) && action.cast.target != TARGET_T_SELF && !(action.cast.castFlags & CAST_FORCE_TARGET_SELF))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses SpellID %u that must be self cast (target is %u)", i, j + 1, action.cast.spellId, action.cast.target);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses SpellID %u that must be self cast (target is %u)", i, j + 1, action.cast.spellId, action.cast.target); }
|
||||
|
||||
// TODO: spell must be cast on enemy, but is not
|
||||
|
||||
|
|
@ -664,51 +665,51 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
if (action.cast.target == TARGET_T_ACTION_INVOKER &&
|
||||
(IsSpellHaveEffect(spell, SPELL_EFFECT_QUEST_COMPLETE) || IsSpellHaveEffect(spell, SPELL_EFFECT_CREATE_RANDOM_ITEM) || IsSpellHaveEffect(spell, SPELL_EFFECT_DUMMY)
|
||||
|| IsSpellHaveEffect(spell, SPELL_EFFECT_KILL_CREDIT_PERSONAL) || IsSpellHaveEffect(spell, SPELL_EFFECT_KILL_CREDIT_GROUP)))
|
||||
sLog.outErrorEventAI("Event %u Action %u has TARGET_T_ACTION_INVOKER(%u) target type, but should have TARGET_T_ACTION_INVOKER_OWNER(%u).", i, j + 1, TARGET_T_ACTION_INVOKER, TARGET_T_ACTION_INVOKER_OWNER);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u has TARGET_T_ACTION_INVOKER(%u) target type, but should have TARGET_T_ACTION_INVOKER_OWNER(%u).", i, j + 1, TARGET_T_ACTION_INVOKER, TARGET_T_ACTION_INVOKER_OWNER); }
|
||||
|
||||
// Spell that should only target players, but could get any
|
||||
if (spell->HasAttribute(SPELL_ATTR_EX3_TARGET_ONLY_PLAYER) &&
|
||||
(action.cast.target == TARGET_T_ACTION_INVOKER || action.cast.target == TARGET_T_HOSTILE_RANDOM || action.cast.target == TARGET_T_HOSTILE_RANDOM_NOT_TOP))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses Target type %u for a spell (%u) that should only target players. This could be wrong.", i, j + 1, action.cast.target, action.cast.spellId);
|
||||
(action.cast.target == TARGET_T_ACTION_INVOKER || action.cast.target == TARGET_T_HOSTILE_RANDOM || action.cast.target == TARGET_T_HOSTILE_RANDOM_NOT_TOP))
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses Target type %u for a spell (%u) that should only target players. This could be wrong.", i, j + 1, action.cast.target, action.cast.spellId); }
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTION_T_SUMMON:
|
||||
if (!sCreatureStorage.LookupEntry<CreatureInfo>(action.summon.creatureId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.summon.creatureId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.summon.creatureId); }
|
||||
|
||||
IsValidTargetType(temp.event_type, action.type, action.summon.target, i, j + 1);
|
||||
break;
|
||||
case ACTION_T_THREAT_SINGLE_PCT:
|
||||
if (std::abs(action.threat_single_pct.percent) > 100)
|
||||
sLog.outErrorEventAI("Event %u Action %u uses invalid percent value %u.", i, j + 1, action.threat_single_pct.percent);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses invalid percent value %u.", i, j + 1, action.threat_single_pct.percent); }
|
||||
IsValidTargetType(temp.event_type, action.type, action.threat_single_pct.target, i, j + 1);
|
||||
break;
|
||||
case ACTION_T_THREAT_ALL_PCT:
|
||||
if (std::abs(action.threat_all_pct.percent) > 100)
|
||||
sLog.outErrorEventAI("Event %u Action %u uses invalid percent value %u.", i, j + 1, action.threat_all_pct.percent);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses invalid percent value %u.", i, j + 1, action.threat_all_pct.percent); }
|
||||
break;
|
||||
case ACTION_T_QUEST_EVENT:
|
||||
if (Quest const* qid = sObjectMgr.GetQuestTemplate(action.quest_event.questId))
|
||||
{
|
||||
if (!qid->HasSpecialFlag(QUEST_SPECIAL_FLAG_EXPLORATION_OR_EVENT))
|
||||
sLog.outErrorEventAI("Event %u Action %u. SpecialFlags for quest entry %u does not include |2, Action will not have any effect.", i, j + 1, action.quest_event.questId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u. SpecialFlags for quest entry %u does not include |2, Action will not have any effect.", i, j + 1, action.quest_event.questId); }
|
||||
}
|
||||
else
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent Quest entry %u.", i, j + 1, action.quest_event.questId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent Quest entry %u.", i, j + 1, action.quest_event.questId); }
|
||||
|
||||
IsValidTargetType(temp.event_type, action.type, action.quest_event.target, i, j + 1);
|
||||
break;
|
||||
case ACTION_T_CAST_EVENT:
|
||||
if (!sCreatureStorage.LookupEntry<CreatureInfo>(action.cast_event.creatureId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.cast_event.creatureId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.cast_event.creatureId); }
|
||||
if (!sSpellStore.LookupEntry(action.cast_event.spellId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent SpellID %u.", i, j + 1, action.cast_event.spellId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent SpellID %u.", i, j + 1, action.cast_event.spellId); }
|
||||
IsValidTargetType(temp.event_type, action.type, action.cast_event.target, i, j + 1);
|
||||
break;
|
||||
case ACTION_T_SET_UNIT_FIELD:
|
||||
if (action.set_unit_field.field < OBJECT_END || action.set_unit_field.field >= UNIT_END)
|
||||
sLog.outErrorEventAI("Event %u Action %u param1 (UNIT_FIELD*). Index out of range for intended use.", i, j + 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u param1 (UNIT_FIELD*). Index out of range for intended use.", i, j + 1); }
|
||||
IsValidTargetType(temp.event_type, action.type, action.set_unit_field.target, i, j + 1);
|
||||
break;
|
||||
case ACTION_T_SET_UNIT_FLAG:
|
||||
|
|
@ -717,47 +718,47 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
break;
|
||||
case ACTION_T_SET_PHASE:
|
||||
if (action.set_phase.phase >= MAX_PHASE)
|
||||
sLog.outErrorEventAI("Event %u Action %u attempts to set phase >= %u. Phase mask cannot be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u attempts to set phase >= %u. Phase mask can not be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1); }
|
||||
break;
|
||||
case ACTION_T_INC_PHASE:
|
||||
if (action.set_inc_phase.step == 0)
|
||||
sLog.outErrorEventAI("Event %u Action %u is incrementing phase by 0. Was this intended?", i, j + 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u is incrementing phase by 0. Was this intended?", i, j + 1); }
|
||||
else if (std::abs(action.set_inc_phase.step) > MAX_PHASE - 1)
|
||||
sLog.outErrorEventAI("Event %u Action %u is change phase by too large for any use %i.", i, j + 1, action.set_inc_phase.step);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u is change phase by too large for any use %i.", i, j + 1, action.set_inc_phase.step); }
|
||||
break;
|
||||
case ACTION_T_QUEST_EVENT_ALL:
|
||||
if (Quest const* qid = sObjectMgr.GetQuestTemplate(action.quest_event_all.questId))
|
||||
{
|
||||
if (!qid->HasSpecialFlag(QUEST_SPECIAL_FLAG_EXPLORATION_OR_EVENT))
|
||||
sLog.outErrorEventAI("Event %u Action %u. SpecialFlags for quest entry %u does not include |2, Action will not have any effect.", i, j + 1, action.quest_event_all.questId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u. SpecialFlags for quest entry %u does not include |2, Action will not have any effect.", i, j + 1, action.quest_event_all.questId); }
|
||||
}
|
||||
else
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent Quest entry %u.", i, j + 1, action.quest_event_all.questId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent Quest entry %u.", i, j + 1, action.quest_event_all.questId); }
|
||||
break;
|
||||
case ACTION_T_CAST_EVENT_ALL:
|
||||
if (!sCreatureStorage.LookupEntry<CreatureInfo>(action.cast_event_all.creatureId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.cast_event_all.creatureId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.cast_event_all.creatureId); }
|
||||
if (!sSpellStore.LookupEntry(action.cast_event_all.spellId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent SpellID %u.", i, j + 1, action.cast_event_all.spellId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent SpellID %u.", i, j + 1, action.cast_event_all.spellId); }
|
||||
break;
|
||||
case ACTION_T_REMOVEAURASFROMSPELL:
|
||||
if (!sSpellStore.LookupEntry(action.remove_aura.spellId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent SpellID %u.", i, j + 1, action.remove_aura.spellId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent SpellID %u.", i, j + 1, action.remove_aura.spellId); }
|
||||
IsValidTargetType(temp.event_type, action.type, action.remove_aura.target, i, j + 1);
|
||||
break;
|
||||
case ACTION_T_RANDOM_PHASE: // PhaseId1, PhaseId2, PhaseId3
|
||||
if (action.random_phase.phase1 >= MAX_PHASE)
|
||||
sLog.outErrorEventAI("Event %u Action %u attempts to set phase1 >= %u. Phase mask cannot be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u attempts to set phase1 >= %u. Phase mask can not be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1); }
|
||||
if (action.random_phase.phase2 >= MAX_PHASE)
|
||||
sLog.outErrorEventAI("Event %u Action %u attempts to set phase2 >= %u. Phase mask cannot be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u attempts to set phase2 >= %u. Phase mask can not be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1); }
|
||||
if (action.random_phase.phase3 >= MAX_PHASE)
|
||||
sLog.outErrorEventAI("Event %u Action %u attempts to set phase3 >= %u. Phase mask cannot be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u attempts to set phase3 >= %u. Phase mask can not be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1); }
|
||||
break;
|
||||
case ACTION_T_RANDOM_PHASE_RANGE: // PhaseMin, PhaseMax
|
||||
if (action.random_phase_range.phaseMin >= MAX_PHASE)
|
||||
sLog.outErrorEventAI("Event %u Action %u attempts to set phaseMin >= %u. Phase mask cannot be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u attempts to set phaseMin >= %u. Phase mask can not be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1); }
|
||||
if (action.random_phase_range.phaseMin >= MAX_PHASE)
|
||||
sLog.outErrorEventAI("Event %u Action %u attempts to set phaseMax >= %u. Phase mask cannot be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u attempts to set phaseMax >= %u. Phase mask can not be used past phase %u.", i, j + 1, MAX_PHASE, MAX_PHASE - 1); }
|
||||
if (action.random_phase_range.phaseMin >= action.random_phase_range.phaseMax)
|
||||
{
|
||||
sLog.outErrorEventAI("Event %u Action %u attempts to set phaseMax <= phaseMin.", i, j + 1);
|
||||
|
|
@ -767,21 +768,21 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
break;
|
||||
case ACTION_T_SUMMON_ID:
|
||||
if (!sCreatureStorage.LookupEntry<CreatureInfo>(action.summon_id.creatureId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.summon_id.creatureId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.summon_id.creatureId); }
|
||||
IsValidTargetType(temp.event_type, action.type, action.summon_id.target, i, j + 1);
|
||||
if (m_CreatureEventAI_Summon_Map.find(action.summon_id.spawnId) == m_CreatureEventAI_Summon_Map.end())
|
||||
sLog.outErrorEventAI("Event %u Action %u summons missing CreatureEventAI_Summon %u", i, j + 1, action.summon_id.spawnId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u summons missing CreatureEventAI_Summon %u", i, j + 1, action.summon_id.spawnId); }
|
||||
break;
|
||||
case ACTION_T_KILLED_MONSTER:
|
||||
if (!sCreatureStorage.LookupEntry<CreatureInfo>(action.killed_monster.creatureId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.killed_monster.creatureId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.killed_monster.creatureId); }
|
||||
IsValidTargetType(temp.event_type, action.type, action.killed_monster.target, i, j + 1);
|
||||
break;
|
||||
case ACTION_T_SET_INST_DATA:
|
||||
if (!(temp.event_flags & EFLAG_DIFFICULTY_ALL))
|
||||
sLog.outErrorEventAI("Event %u Action %u. Cannot set instance data without difficulty event flags.", i, j + 1);
|
||||
if (action.set_inst_data.value > 4/*SPECIAL*/)
|
||||
sLog.outErrorEventAI("Event %u Action %u attempts to set instance data above encounter state 4. Custom case?", i, j + 1);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u attempts to set instance data above encounter state 4. Custom case?", i, j + 1); }
|
||||
break;
|
||||
case ACTION_T_SET_INST_DATA64:
|
||||
if (!(temp.event_flags & EFLAG_DIFFICULTY_ALL))
|
||||
|
|
@ -790,7 +791,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
break;
|
||||
case ACTION_T_UPDATE_TEMPLATE:
|
||||
if (!sCreatureStorage.LookupEntry<CreatureInfo>(action.update_template.creatureId))
|
||||
sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.update_template.creatureId);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses nonexistent creature entry %u.", i, j + 1, action.update_template.creatureId); }
|
||||
break;
|
||||
case ACTION_T_SET_SHEATH:
|
||||
if (action.set_sheath.sheath >= MAX_SHEATH_STATE)
|
||||
|
|
@ -858,7 +859,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
continue;
|
||||
}
|
||||
if (action.throwEvent.radius > SIZE_OF_GRIDS)
|
||||
sLog.outErrorEventAI("Event %u Action %u uses unexpectedly huge radius %u (expected to be less than %f)", i, j + 1, action.throwEvent.radius, SIZE_OF_GRIDS);
|
||||
{ sLog.outErrorEventAI("Event %u Action %u uses unexpectedly huge radius %u (expected to be less than %f)", i, j + 1, action.throwEvent.radius, SIZE_OF_GRIDS); }
|
||||
|
||||
if (action.throwEvent.radius == 0)
|
||||
{
|
||||
|
|
@ -867,7 +868,6 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
}
|
||||
|
||||
break;
|
||||
|
||||
case ACTION_T_SET_THROW_MASK:
|
||||
if (action.setThrowMask.eventTypeMask & ~((1 << MAXIMAL_AI_EVENT_EVENTAI) - 1))
|
||||
{
|
||||
|
|
@ -913,9 +913,9 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
bool ainame = strcmp(cInfo->AIName, "EventAI") == 0;
|
||||
bool hasevent = m_CreatureEventAI_Event_Map.find(i) != m_CreatureEventAI_Event_Map.end();
|
||||
if (ainame && !hasevent)
|
||||
sLog.outErrorEventAI("EventAI not has script for creature entry (%u), but AIName = '%s'.", i, cInfo->AIName);
|
||||
{ sLog.outErrorEventAI("EventAI not has script for creature entry (%u), but AIName = '%s'.", i, cInfo->AIName); }
|
||||
else if (!ainame && hasevent)
|
||||
sLog.outErrorEventAI("EventAI has script for creature entry (%u), but AIName = '%s' instead 'EventAI'.", i, cInfo->AIName);
|
||||
{ sLog.outErrorEventAI("EventAI has script for creature entry (%u), but AIName = '%s' instead 'EventAI'.", i, cInfo->AIName); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -134,9 +134,9 @@ void DynamicObject::Update(uint32 /*update_diff*/, uint32 p_time)
|
|||
bool deleteThis = false;
|
||||
|
||||
if (m_aliveDuration > int32(p_time))
|
||||
m_aliveDuration -= p_time;
|
||||
{ m_aliveDuration -= p_time; }
|
||||
else
|
||||
deleteThis = true;
|
||||
{ deleteThis = true; }
|
||||
|
||||
// have radius and work as persistent effect
|
||||
if (m_radius)
|
||||
|
|
@ -197,36 +197,35 @@ void DynamicObject::Delay(int32 delaytime)
|
|||
++iter;
|
||||
}
|
||||
else
|
||||
m_affected.erase(iter++);
|
||||
{ m_affected.erase(iter++); }
|
||||
}
|
||||
}
|
||||
|
||||
bool DynamicObject::isVisibleForInState(Player const* u, WorldObject const* viewPoint, bool inVisibleList) const
|
||||
{
|
||||
if (!IsInWorld() || !u->IsInWorld())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// always seen by owner
|
||||
if (GetCasterGuid() == u->GetObjectGuid())
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
// normal case
|
||||
return IsWithinDistInMap(viewPoint, GetMap()->GetVisibilityDistance() + (inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false);
|
||||
}
|
||||
|
||||
|
||||
bool DynamicObject::IsHostileTo(Unit const* unit) const
|
||||
{
|
||||
if (Unit* owner = GetCaster())
|
||||
return owner->IsHostileTo(unit);
|
||||
{ return owner->IsHostileTo(unit); }
|
||||
else
|
||||
return false;
|
||||
{ return false; }
|
||||
}
|
||||
|
||||
bool DynamicObject::IsFriendlyTo(Unit const* unit) const
|
||||
{
|
||||
if (Unit* owner = GetCaster())
|
||||
return owner->IsFriendlyTo(unit);
|
||||
{ return owner->IsFriendlyTo(unit); }
|
||||
else
|
||||
return true;
|
||||
{ return true; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ class DynamicObject : public WorldObject
|
|||
|
||||
bool isVisibleForInState(Player const* u, WorldObject const* viewPoint, bool inVisibleList) const override;
|
||||
|
||||
GridReference<DynamicObject> &GetGridRef() { return m_gridRef; }
|
||||
GridReference<DynamicObject>& GetGridRef() { return m_gridRef; }
|
||||
|
||||
protected:
|
||||
uint32 m_spellId;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ namespace MaNGOS
|
|||
return (float)ceil(count * (-0.53177f + 0.59357f * exp((level + 23.54042f) / 26.07859f)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace XP
|
||||
{
|
||||
enum XPColorChar { RED, ORANGE, YELLOW, GREEN, GRAY };
|
||||
|
|
@ -43,9 +45,9 @@ namespace MaNGOS
|
|||
inline uint32 GetGrayLevel(uint32 pl_level)
|
||||
{
|
||||
if (pl_level <= 5)
|
||||
return 0;
|
||||
{ return 0; }
|
||||
else if (pl_level <= 39)
|
||||
return pl_level - 5 - pl_level / 10;
|
||||
{ return pl_level - 5 - pl_level / 10; }
|
||||
else if (pl_level <= 59)
|
||||
return pl_level - 1 - pl_level / 5;
|
||||
else
|
||||
|
|
@ -55,30 +57,30 @@ namespace MaNGOS
|
|||
inline XPColorChar GetColorCode(uint32 pl_level, uint32 mob_level)
|
||||
{
|
||||
if (mob_level >= pl_level + 5)
|
||||
return RED;
|
||||
{ return RED; }
|
||||
else if (mob_level >= pl_level + 3)
|
||||
return ORANGE;
|
||||
{ return ORANGE; }
|
||||
else if (mob_level >= pl_level - 2)
|
||||
return YELLOW;
|
||||
{ return YELLOW; }
|
||||
else if (mob_level > GetGrayLevel(pl_level))
|
||||
return GREEN;
|
||||
{ return GREEN; }
|
||||
else
|
||||
return GRAY;
|
||||
{ return GRAY; }
|
||||
}
|
||||
|
||||
inline uint32 GetZeroDifference(uint32 pl_level)
|
||||
{
|
||||
if (pl_level < 8) return 5;
|
||||
if (pl_level < 10) return 6;
|
||||
if (pl_level < 12) return 7;
|
||||
if (pl_level < 16) return 8;
|
||||
if (pl_level < 20) return 9;
|
||||
if (pl_level < 30) return 11;
|
||||
if (pl_level < 40) return 12;
|
||||
if (pl_level < 45) return 13;
|
||||
if (pl_level < 50) return 14;
|
||||
if (pl_level < 55) return 15;
|
||||
if (pl_level < 60) return 16;
|
||||
if (pl_level < 8) { return 5; }
|
||||
if (pl_level < 10) { return 6; }
|
||||
if (pl_level < 12) { return 7; }
|
||||
if (pl_level < 16) { return 8; }
|
||||
if (pl_level < 20) { return 9; }
|
||||
if (pl_level < 30) { return 11; }
|
||||
if (pl_level < 40) { return 12; }
|
||||
if (pl_level < 45) { return 13; }
|
||||
if (pl_level < 50) { return 14; }
|
||||
if (pl_level < 55) { return 15; }
|
||||
if (pl_level < 60) { return 16; }
|
||||
return 17;
|
||||
}
|
||||
|
||||
|
|
@ -100,7 +102,7 @@ namespace MaNGOS
|
|||
{
|
||||
uint32 nLevelDiff = mob_level - pl_level;
|
||||
if (nLevelDiff > 4)
|
||||
nLevelDiff = 4;
|
||||
{ nLevelDiff = 4; }
|
||||
return ((pl_level * 5 + nBaseExp) * (20 + nLevelDiff) / 10 + 1) / 2;
|
||||
}
|
||||
else
|
||||
|
|
@ -118,16 +120,16 @@ namespace MaNGOS
|
|||
inline uint32 Gain(Player* pl, Unit* u)
|
||||
{
|
||||
if (u->GetTypeId() == TYPEID_UNIT && (
|
||||
((Creature*)u)->IsTotem() || ((Creature*)u)->IsPet() ||
|
||||
((Creature*)u)->IsTotem() || ((Creature*)u)->IsPet() ||
|
||||
(((Creature*)u)->GetCreatureInfo()->ExtraFlags & CREATURE_EXTRA_FLAG_NO_XP_AT_KILL)))
|
||||
return 0;
|
||||
{ return 0; }
|
||||
|
||||
uint32 xp_gain = BaseGain(pl->getLevel(), u->getLevel(), GetContentLevelsForMapAndZone(pl->GetMapId(), pl->GetZoneId()));
|
||||
if (xp_gain == 0)
|
||||
return 0;
|
||||
{ return 0; }
|
||||
|
||||
if (u->GetTypeId() == TYPEID_UNIT && ((Creature*)u)->IsElite())
|
||||
xp_gain *= 2;
|
||||
{ xp_gain *= 2; }
|
||||
|
||||
return (uint32)(xp_gain * sWorld.getConfig(CONFIG_FLOAT_RATE_XP_KILL));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,10 +63,9 @@ void GMTicketMgr::LoadGMTickets()
|
|||
|
||||
uint32 guidlow = fields[0].GetUInt32();
|
||||
if (!guidlow)
|
||||
continue;
|
||||
{ continue; }
|
||||
|
||||
ObjectGuid guid = ObjectGuid(HIGHGUID_PLAYER, guidlow);
|
||||
|
||||
GMTicket& ticket = m_GMTicketMap[guid];
|
||||
|
||||
if (ticket.GetPlayerGuid()) // already exist
|
||||
|
|
@ -90,7 +89,7 @@ void GMTicketMgr::DeleteAll()
|
|||
for (GMTicketMap::const_iterator itr = m_GMTicketMap.begin(); itr != m_GMTicketMap.end(); ++itr)
|
||||
{
|
||||
if (Player* owner = sObjectMgr.GetPlayer(itr->first))
|
||||
owner->GetSession()->SendGMTicketGetTicket(0x0A);
|
||||
{ owner->GetSession()->SendGMTicketGetTicket(0x0A); }
|
||||
}
|
||||
CharacterDatabase.Execute("DELETE FROM character_ticket");
|
||||
m_GMTicketListByCreatingOrder.clear();
|
||||
|
|
|
|||
|
|
@ -31,12 +31,63 @@
|
|||
#include "ObjectGuid.h"
|
||||
#include <map>
|
||||
|
||||
/**
|
||||
* \addtogroup game
|
||||
* @{
|
||||
* \file
|
||||
*/
|
||||
|
||||
/**
|
||||
* This is the class that takes care of representing a ticket made to the GMs on the server
|
||||
* with a question of some sort.
|
||||
*
|
||||
* The code responsible for taking care of the opcodes coming
|
||||
* in can be found in:
|
||||
* - \ref WorldSession::SendGMTicketStatusUpdate
|
||||
* - \ref WorldSession::SendGMTicketGetTicket
|
||||
* - \ref WorldSession::HandleGMTicketGetTicketOpcode
|
||||
* - \ref WorldSession::HandleGMTicketUpdateTextOpcode
|
||||
* - \ref WorldSession::HandleGMTicketDeleteTicketOpcode
|
||||
* - \ref WorldSession::HandleGMTicketCreateOpcode
|
||||
* - \ref WorldSession::HandleGMTicketSystemStatusOpcode
|
||||
* - \ref WorldSession::HandleGMTicketSurveySubmitOpcode
|
||||
* These in their turn will make calls to the \ref GMTicketMgr which will take
|
||||
* care of what needs to be done by giving back a \ref GMTicket. The database table interesting
|
||||
* in this case is character_ticket in the characaters database.
|
||||
*
|
||||
* Theres also some handling of tickets in \ref ChatHandler::HandleTicketCommand where
|
||||
* you can turn on/off accepting tickets with your current GM char. You can also turn
|
||||
* off tickets globally, this will show the client a message about tickets not being
|
||||
* available at the moment. The commands that can be used are:
|
||||
* <dl>
|
||||
* <dt>.ticket on/off</dt>
|
||||
* <dd>Turns on/off showing new incoming tickets for you character</dd>
|
||||
* <dt>.ticket system_on/off</dt>
|
||||
* <dd>Will turn the whole ticket reporting system on/off, ie: if it's off the clients
|
||||
* will get a message that the system is unavailable when trying to submit a ticket</dd>
|
||||
* <dt>.ticket close $character_name/.ticket close #num_of_ticket</dt>
|
||||
* <dd>Will close a ticket for the given character name or the given number of the ticket,
|
||||
* this will make the little icon in the top right go away for the player</dd>
|
||||
* <dt>.ticket close_survey $character_name/.ticket close_survey #num_of_ticket</dt>
|
||||
* <dd>Does the same as .ticket close but instead of just closing it it also asks the \ref Player
|
||||
* to answer a survey about how please they were with the experience</dd>
|
||||
* <dt>.ticket respond $character_name/.ticket respond #num_of_ticket</dt>
|
||||
* <dd>Will respond to a ticket, this will whisper the \ref Player who asked the question and from
|
||||
* there on you will have to explain the solution etc. and then close the ticket again.</dd>
|
||||
* <dt>.ticket</dt>
|
||||
* <dd>Shows the number of currently active tickets</dd>
|
||||
* <dt>.ticket $character_name/.ticket #num_of_ticket</dt>
|
||||
* <dd>Will show the question and name of the character for the given ticket</dd>
|
||||
*
|
||||
* \todo Do not remove tickets from db when closing but mark them as solved instead.
|
||||
* \todo Log conversations between GM and the player receiving help.
|
||||
*/
|
||||
class GMTicket
|
||||
{
|
||||
public:
|
||||
explicit GMTicket() : m_lastUpdate(0)
|
||||
{
|
||||
}
|
||||
{}
|
||||
|
||||
|
||||
void Init(ObjectGuid guid, const std::string& text, const std::string& responsetext, time_t update)
|
||||
{
|
||||
|
|
@ -46,6 +97,10 @@ class GMTicket
|
|||
m_lastUpdate = update;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the \ref Player s \ref ObjectGuid which asked the question and created the ticket
|
||||
* @return the \ref ObjectGuid for the \ref Player that asked the question
|
||||
*/
|
||||
ObjectGuid const& GetPlayerGuid() const
|
||||
{
|
||||
return m_guid;
|
||||
|
|
@ -66,6 +121,10 @@ class GMTicket
|
|||
return m_lastUpdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes the tickets question text.
|
||||
* @param text the text to change the question to
|
||||
*/
|
||||
void SetText(const char* text)
|
||||
{
|
||||
m_text = text ? text : "";
|
||||
|
|
@ -128,7 +187,7 @@ class GMTicketMgr
|
|||
{
|
||||
GMTicketMap::iterator itr = m_GMTicketMap.find(guid);
|
||||
if (itr == m_GMTicketMap.end())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
return &(itr->second);
|
||||
}
|
||||
|
||||
|
|
@ -140,21 +199,28 @@ class GMTicketMgr
|
|||
GMTicket* GetGMTicketByOrderPos(uint32 pos)
|
||||
{
|
||||
if (pos >= GetTicketCount())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
GMTicketList::iterator itr = m_GMTicketListByCreatingOrder.begin();
|
||||
std::advance(itr, pos);
|
||||
if (itr == m_GMTicketListByCreatingOrder.end())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
return *itr;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This will delete a \ref GMTicket from this manager of tickets so that we don't
|
||||
* need to handle it anymore, this should be used in conjunction with setting
|
||||
* resolved = 1 in the character_ticket table.
|
||||
*
|
||||
* Note: This will _not_ remove anything from the DB
|
||||
* @param guid guid of the \ref Player who created the ticket that we want to delete
|
||||
*/
|
||||
void Delete(ObjectGuid guid)
|
||||
{
|
||||
GMTicketMap::iterator itr = m_GMTicketMap.find(guid);
|
||||
if (itr == m_GMTicketMap.end())
|
||||
return;
|
||||
{ return; }
|
||||
itr->second.DeleteFromDB();
|
||||
m_GMTicketListByCreatingOrder.remove(&itr->second);
|
||||
m_GMTicketMap.erase(itr);
|
||||
|
|
@ -162,6 +228,18 @@ class GMTicketMgr
|
|||
|
||||
void DeleteAll();
|
||||
|
||||
/**
|
||||
* This will create a new \ref GMTicket and fill it with the given question so that
|
||||
* a GM can find it and answer it. Should only be called if we've already checked
|
||||
* that there are no open tickets already, as this function will close any other
|
||||
* currently open tickets for the given \ref Player and open a new one with the given
|
||||
* text.
|
||||
*
|
||||
* Tables of interest here are characters.character_ticket and possibly characaters.
|
||||
* character_whispers
|
||||
* @param guid \ref ObjectGuid of the creator of the \ref GMTicket
|
||||
* @param text the question text sent
|
||||
*/
|
||||
void Create(ObjectGuid guid, const char* text)
|
||||
{
|
||||
GMTicket& ticket = m_GMTicketMap[guid];
|
||||
|
|
@ -181,4 +259,6 @@ class GMTicketMgr
|
|||
};
|
||||
|
||||
#define sTicketMgr MaNGOS::Singleton<GMTicketMgr>::Instance()
|
||||
|
||||
/** @} */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -772,7 +772,7 @@ bool GameObject::isVisibleForInState(Player const* u, WorldObject const* viewPoi
|
|||
{
|
||||
// Not in world
|
||||
if (!IsInWorld() || !u->IsInWorld())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// invisible at client always
|
||||
if (!GetGOInfo()->displayId)
|
||||
|
|
@ -780,14 +780,14 @@ bool GameObject::isVisibleForInState(Player const* u, WorldObject const* viewPoi
|
|||
|
||||
// Transport always visible at this step implementation
|
||||
if (IsTransport() && IsInMap(u))
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
// quick check visibility false cases for non-GM-mode
|
||||
if (!u->isGameMaster())
|
||||
{
|
||||
// despawned and then not visible for non-GM in GM-mode
|
||||
if (!isSpawned())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// special invisibility cases
|
||||
if (GetGOInfo()->type == GAMEOBJECT_TYPE_TRAP && GetGOInfo()->trap.stealthed)
|
||||
|
|
@ -1216,7 +1216,7 @@ void GameObject::Use(Unit* user)
|
|||
|
||||
// TODO: Improve this when more information is available, currently these traps are known that must send the anim (Onyxia/ Heigan Fissures/ Trap in DireMaul)
|
||||
if (GetDisplayId() == 4392 || GetDisplayId() == 4472 || GetDisplayId() == 4491 || GetDisplayId() == 6785 || GetDisplayId() == 3073 || GetDisplayId() == 7998)
|
||||
SendGameObjectCustomAnim(GetObjectGuid());
|
||||
{ SendGameObjectCustomAnim(GetObjectGuid()); }
|
||||
|
||||
// TODO: Despawning of traps? (Also related to code in ::Update)
|
||||
return;
|
||||
|
|
@ -1354,7 +1354,7 @@ void GameObject::Use(Unit* user)
|
|||
if (!scriptReturnValue)
|
||||
{ GetMap()->ScriptsStart(DBS_ON_GO_USE, GetGUIDLow(), spellCaster, this); }
|
||||
else
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
// cast this spell later if provided
|
||||
spellId = info->goober.spellId;
|
||||
|
|
@ -2143,19 +2143,19 @@ void GameObject::SetCapturePointSlider(float value, bool isLocked)
|
|||
|
||||
// only activate non-locked capture point
|
||||
if (!isLocked)
|
||||
SetLootState(GO_ACTIVATED);
|
||||
{ SetLootState(GO_ACTIVATED); }
|
||||
|
||||
// set the state of the capture point based on the slider value
|
||||
if ((int)m_captureSlider == CAPTURE_SLIDER_ALLIANCE)
|
||||
m_captureState = CAPTURE_STATE_WIN_ALLIANCE;
|
||||
{ m_captureState = CAPTURE_STATE_WIN_ALLIANCE; }
|
||||
else if ((int)m_captureSlider == CAPTURE_SLIDER_HORDE)
|
||||
m_captureState = CAPTURE_STATE_WIN_HORDE;
|
||||
{ m_captureState = CAPTURE_STATE_WIN_HORDE; }
|
||||
else if (m_captureSlider > CAPTURE_SLIDER_MIDDLE + info->capturePoint.neutralPercent * 0.5f)
|
||||
m_captureState = CAPTURE_STATE_PROGRESS_ALLIANCE;
|
||||
{ m_captureState = CAPTURE_STATE_PROGRESS_ALLIANCE; }
|
||||
else if (m_captureSlider < CAPTURE_SLIDER_MIDDLE - info->capturePoint.neutralPercent * 0.5f)
|
||||
m_captureState = CAPTURE_STATE_PROGRESS_HORDE;
|
||||
{ m_captureState = CAPTURE_STATE_PROGRESS_HORDE; }
|
||||
else
|
||||
m_captureState = CAPTURE_STATE_NEUTRAL;
|
||||
{ m_captureState = CAPTURE_STATE_NEUTRAL; }
|
||||
}
|
||||
|
||||
void GameObject::TickCapturePoint()
|
||||
|
|
@ -2499,3 +2499,4 @@ uint32 GameObject::GetScriptId()
|
|||
{
|
||||
return sScriptMgr.GetBoundScriptId(SCRIPTED_GAMEOBJECT, -int32(GetGUIDLow())) ? sScriptMgr.GetBoundScriptId(SCRIPTED_GAMEOBJECT, -int32(GetGUIDLow())) : sScriptMgr.GetBoundScriptId(SCRIPTED_GAMEOBJECT, GetEntry());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
int GuardAI::Permissible(const Creature* creature)
|
||||
{
|
||||
if (creature->IsGuard())
|
||||
return PERMIT_BASE_SPECIAL;
|
||||
{ return PERMIT_BASE_SPECIAL; }
|
||||
|
||||
return PERMIT_BASE_NO;
|
||||
}
|
||||
|
|
@ -44,11 +44,11 @@ void GuardAI::MoveInLineOfSight(Unit* u)
|
|||
{
|
||||
// Ignore Z for flying creatures
|
||||
if (!m_creature->CanFly() && m_creature->GetDistanceZ(u) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (!m_creature->getVictim() && u->IsTargetableForAttack() &&
|
||||
(u->IsHostileToPlayers() || m_creature->IsHostileTo(u) /*|| u->getVictim() && m_creature->IsFriendlyTo(u->getVictim())*/) &&
|
||||
u->isInAccessablePlaceFor(m_creature))
|
||||
(u->IsHostileToPlayers() || m_creature->IsHostileTo(u) /*|| u->getVictim() && m_creature->IsFriendlyTo(u->getVictim())*/) &&
|
||||
u->isInAccessablePlaceFor(m_creature))
|
||||
{
|
||||
float attackRadius = m_creature->GetAttackDistance(u);
|
||||
if (m_creature->IsWithinDistInMap(u, attackRadius))
|
||||
|
|
@ -107,14 +107,14 @@ void GuardAI::EnterEvadeMode()
|
|||
|
||||
// Remove ChaseMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead
|
||||
if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
|
||||
m_creature->GetMotionMaster()->MoveTargetedHome();
|
||||
{ m_creature->GetMotionMaster()->MoveTargetedHome(); }
|
||||
}
|
||||
|
||||
void GuardAI::UpdateAI(const uint32 /*diff*/)
|
||||
{
|
||||
// update i_victimGuid if i_creature.getVictim() !=0 and changed
|
||||
if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
i_victimGuid = m_creature->getVictim()->GetObjectGuid();
|
||||
|
||||
|
|
@ -130,7 +130,7 @@ bool GuardAI::IsVisible(Unit* pl) const
|
|||
void GuardAI::AttackStart(Unit* u)
|
||||
{
|
||||
if (!u)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
if (m_creature->Attack(u, true))
|
||||
{
|
||||
|
|
@ -146,5 +146,5 @@ void GuardAI::AttackStart(Unit* u)
|
|||
void GuardAI::JustDied(Unit* killer)
|
||||
{
|
||||
if (Player* pkiller = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
m_creature->SendZoneUnderAttackMessage(pkiller);
|
||||
{ m_creature->SendZoneUnderAttackMessage(pkiller); }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ void MemberSlot::ChangeRank(uint32 newRank)
|
|||
Player* player = sObjectMgr.GetPlayer(guid);
|
||||
// If player not online data in data field will be loaded from guild tabs no need to update it !!
|
||||
if (player)
|
||||
player->SetRank(newRank);
|
||||
{ player->SetRank(newRank); }
|
||||
|
||||
CharacterDatabase.PExecute("UPDATE guild_member SET rank='%u' WHERE guid='%u'", newRank, guid.GetCounter());
|
||||
}
|
||||
|
|
@ -117,11 +117,11 @@ Guild::~Guild()
|
|||
bool Guild::Create(Player* leader, std::string gname)
|
||||
{
|
||||
if (sGuildMgr.GetGuildByName(gname))
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
WorldSession* lSession = leader->GetSession();
|
||||
if (!lSession)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
m_LeaderGuid = leader->GetObjectGuid();
|
||||
m_Name = gname;
|
||||
|
|
@ -179,12 +179,12 @@ bool Guild::AddMember(ObjectGuid plGuid, uint32 plRank)
|
|||
if (pl)
|
||||
{
|
||||
if (pl->GetGuildId() != 0)
|
||||
return false;
|
||||
{ return false; }
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Player::GetGuildIdFromDB(plGuid) != 0) // player already in guild
|
||||
return false;
|
||||
{ return false; }
|
||||
}
|
||||
|
||||
// remove all player signs from another petitions
|
||||
|
|
@ -211,7 +211,7 @@ bool Guild::AddMember(ObjectGuid plGuid, uint32 plRank)
|
|||
// 0 1 2 3 4
|
||||
QueryResult* result = CharacterDatabase.PQuery("SELECT name,level,class,zone,account FROM characters WHERE guid = '%u'", lowguid);
|
||||
if (!result)
|
||||
return false; // player doesn't exist
|
||||
{ return false; } // player doesn't exist
|
||||
|
||||
Field* fields = result->Fetch();
|
||||
newmember.Name = fields[0].GetCppString();
|
||||
|
|
@ -222,9 +222,9 @@ bool Guild::AddMember(ObjectGuid plGuid, uint32 plRank)
|
|||
delete result;
|
||||
|
||||
if (newmember.Level < 1 || newmember.Level > STRONG_MAX_LEVEL ||
|
||||
!((1 << (newmember.Class - 1)) & CLASSMASK_ALL_PLAYABLE))
|
||||
!((1 << (newmember.Class - 1)) & CLASSMASK_ALL_PLAYABLE))
|
||||
{
|
||||
sLog.outError("%s has a broken data in field `characters` table, cannot add him to guild.", plGuid.GetString().c_str());
|
||||
sLog.outError("%s has a broken data in field `characters` table, can not add him to guild.", plGuid.GetString().c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -296,7 +296,7 @@ void Guild::SetGINFO(std::string ginfo)
|
|||
bool Guild::LoadGuildFromDB(QueryResult* guildDataResult)
|
||||
{
|
||||
if (!guildDataResult)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
Field* fields = guildDataResult->Fetch();
|
||||
|
||||
|
|
@ -335,10 +335,10 @@ bool Guild::CheckGuildStructure()
|
|||
if (GM_rights == -1)
|
||||
{
|
||||
if (DelMember(m_LeaderGuid))
|
||||
return false; // guild will disbanded and deleted in caller
|
||||
{ return false; } // guild will disbanded and deleted in caller
|
||||
}
|
||||
else if (GM_rights != GR_GUILDMASTER)
|
||||
SetLeader(m_LeaderGuid);
|
||||
{ SetLeader(m_LeaderGuid); }
|
||||
|
||||
// Allow only 1 guildmaster, set other to officer
|
||||
for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr)
|
||||
|
|
@ -365,7 +365,7 @@ bool Guild::LoadRanksFromDB(QueryResult* guildRanksResult)
|
|||
|
||||
// GUILD RANKS are sequence starting from 0 = GUILD_MASTER (ALL PRIVILEGES) to max 9 (lowest privileges)
|
||||
// the lower rank id is considered higher rank - so promotion does rank-- and demotion does rank++
|
||||
// between ranks in sequence cannot be gaps - so 0,1,2,4 cannot be
|
||||
// between ranks in sequence can not be gaps - so 0,1,2,4 can not be
|
||||
// min ranks count is 5 and max is 10.
|
||||
|
||||
do
|
||||
|
|
@ -373,7 +373,7 @@ bool Guild::LoadRanksFromDB(QueryResult* guildRanksResult)
|
|||
fields = guildRanksResult->Fetch();
|
||||
// condition that would be true when all ranks in QueryResult will be processed and guild without ranks is being processed
|
||||
if (!fields)
|
||||
break;
|
||||
{ break; }
|
||||
|
||||
uint32 guildId = fields[0].GetUInt32();
|
||||
if (guildId < m_Id)
|
||||
|
|
@ -385,7 +385,7 @@ bool Guild::LoadRanksFromDB(QueryResult* guildRanksResult)
|
|||
}
|
||||
|
||||
if (guildId > m_Id) // we loaded all ranks for this guild already, break cycle
|
||||
break;
|
||||
{ break; }
|
||||
|
||||
uint32 rankID = fields[1].GetUInt32();
|
||||
std::string rankName = fields[2].GetCppString();
|
||||
|
|
@ -393,11 +393,11 @@ bool Guild::LoadRanksFromDB(QueryResult* guildRanksResult)
|
|||
uint32 rankMoney = fields[4].GetUInt32();
|
||||
|
||||
if (rankID != m_Ranks.size()) // guild_rank.ids are sequence 0,1,2,3..
|
||||
broken_ranks = true;
|
||||
{ broken_ranks = true; }
|
||||
|
||||
// first rank is guildmaster, prevent loss leader rights
|
||||
if (m_Ranks.empty())
|
||||
rankRights |= GR_RIGHT_ALL;
|
||||
{ rankRights |= GR_RIGHT_ALL; }
|
||||
|
||||
AddRank(rankName, rankRights, rankMoney);
|
||||
}
|
||||
|
|
@ -432,14 +432,14 @@ bool Guild::LoadRanksFromDB(QueryResult* guildRanksResult)
|
|||
bool Guild::LoadMembersFromDB(QueryResult* guildMembersResult)
|
||||
{
|
||||
if (!guildMembersResult)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
do
|
||||
{
|
||||
Field* fields = guildMembersResult->Fetch();
|
||||
// this condition will be true when all rows in QueryResult are processed and new guild without members is going to be loaded - prevent crash
|
||||
if (!fields)
|
||||
break;
|
||||
{ break; }
|
||||
uint32 guildId = fields[0].GetUInt32();
|
||||
if (guildId < m_Id)
|
||||
{
|
||||
|
|
@ -451,7 +451,7 @@ bool Guild::LoadMembersFromDB(QueryResult* guildMembersResult)
|
|||
|
||||
if (guildId > m_Id)
|
||||
// we loaded all members for this guild already, break cycle
|
||||
break;
|
||||
{ break; }
|
||||
|
||||
MemberSlot newmember;
|
||||
uint32 lowguid = fields[1].GetUInt32();
|
||||
|
|
@ -459,7 +459,7 @@ bool Guild::LoadMembersFromDB(QueryResult* guildMembersResult)
|
|||
newmember.RankId = fields[2].GetUInt32();
|
||||
// don't allow member to have not existing rank!
|
||||
if (newmember.RankId >= m_Ranks.size())
|
||||
newmember.RankId = GetLowestRank();
|
||||
{ newmember.RankId = GetLowestRank(); }
|
||||
|
||||
newmember.Pnote = fields[3].GetCppString();
|
||||
newmember.OFFnote = fields[4].GetCppString();
|
||||
|
|
@ -467,8 +467,8 @@ bool Guild::LoadMembersFromDB(QueryResult* guildMembersResult)
|
|||
newmember.BankRemMoney = fields[6].GetUInt32();
|
||||
for (int i = 0; i < GUILD_BANK_MAX_TABS; ++i)
|
||||
{
|
||||
newmember.BankResetTimeTab[i] = fields[7 + (2 * i)].GetUInt32();
|
||||
newmember.BankRemSlotsTab[i] = fields[8 + (2 * i)].GetUInt32();
|
||||
newmember.BankResetTimeTab[i] = fields[7+(2*i)].GetUInt32();
|
||||
newmember.BankRemSlotsTab[i] = fields[8+(2*i)].GetUInt32();
|
||||
}
|
||||
|
||||
newmember.Name = fields[19].GetCppString();
|
||||
|
|
@ -504,7 +504,7 @@ bool Guild::LoadMembersFromDB(QueryResult* guildMembersResult)
|
|||
while (guildMembersResult->NextRow());
|
||||
|
||||
if (members.empty())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
UpdateAccountsNumber();
|
||||
|
||||
|
|
@ -515,7 +515,7 @@ void Guild::SetLeader(ObjectGuid guid)
|
|||
{
|
||||
MemberSlot* slot = GetMemberSlot(guid);
|
||||
if (!slot)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
m_LeaderGuid = guid;
|
||||
slot->ChangeRank(GR_GUILDMASTER);
|
||||
|
|
@ -558,13 +558,13 @@ bool Guild::DelMember(ObjectGuid guid, bool isDisbanding)
|
|||
}
|
||||
|
||||
if (!best)
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
SetLeader(newLeaderGUID);
|
||||
|
||||
// If player not online data in data field will be loaded from guild tabs no need to update it !!
|
||||
if (Player* newLeader = sObjectMgr.GetPlayer(newLeaderGUID))
|
||||
newLeader->SetRank(GR_GUILDMASTER);
|
||||
{ newLeader->SetRank(GR_GUILDMASTER); }
|
||||
|
||||
// when leader non-exist (at guild load with deleted leader only) not send broadcasts
|
||||
if (oldLeader)
|
||||
|
|
@ -691,7 +691,7 @@ void Guild::BroadcastPacket(WorldPacket* packet)
|
|||
{
|
||||
Player* player = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first));
|
||||
if (player)
|
||||
player->GetSession()->SendPacket(packet);
|
||||
{ player->GetSession()->SendPacket(packet); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -703,7 +703,7 @@ void Guild::BroadcastPacketToRank(WorldPacket* packet, uint32 rankId)
|
|||
{
|
||||
Player* player = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first));
|
||||
if (player)
|
||||
player->GetSession()->SendPacket(packet);
|
||||
{ player->GetSession()->SendPacket(packet); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -744,7 +744,7 @@ void Guild::MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 max
|
|||
void Guild::CreateRank(std::string name_, uint32 rights)
|
||||
{
|
||||
if (m_Ranks.size() >= GUILD_RANKS_MAX_COUNT)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
// ranks are sequence 0,1,2,... where 0 means guildmaster
|
||||
uint32 new_rank_id = m_Ranks.size();
|
||||
|
|
@ -775,7 +775,7 @@ void Guild::DelRank(uint32 rankId)
|
|||
|
||||
// client won't allow to have less than GUILD_RANKS_MIN_COUNT ranks in guild
|
||||
if (m_Ranks.size() <= GUILD_RANKS_MIN_COUNT || rankId < GUILD_RANKS_MIN_COUNT)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
RankList::iterator itr = m_Ranks.erase(m_Ranks.begin() + rankId);
|
||||
// delete lowest guild_rank
|
||||
|
|
@ -826,7 +826,7 @@ void Guild::SwitchRank(uint32 rankId, bool up)
|
|||
std::string Guild::GetRankName(uint32 rankId)
|
||||
{
|
||||
if (rankId >= m_Ranks.size())
|
||||
return "<unknown>";
|
||||
{ return "<unknown>"; }
|
||||
|
||||
return m_Ranks[rankId].Name;
|
||||
}
|
||||
|
|
@ -834,7 +834,7 @@ std::string Guild::GetRankName(uint32 rankId)
|
|||
uint32 Guild::GetRankRights(uint32 rankId)
|
||||
{
|
||||
if (rankId >= m_Ranks.size())
|
||||
return 0;
|
||||
{ return 0; }
|
||||
|
||||
return m_Ranks[rankId].Rights;
|
||||
}
|
||||
|
|
@ -842,7 +842,7 @@ uint32 Guild::GetRankRights(uint32 rankId)
|
|||
void Guild::SetRankName(uint32 rankId, std::string name_)
|
||||
{
|
||||
if (rankId >= m_Ranks.size())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
m_Ranks[rankId].Name = name_;
|
||||
|
||||
|
|
@ -854,7 +854,7 @@ void Guild::SetRankName(uint32 rankId, std::string name_)
|
|||
void Guild::SetRankRights(uint32 rankId, uint32 rights)
|
||||
{
|
||||
if (rankId >= m_Ranks.size())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
m_Ranks[rankId].Rights = rights;
|
||||
|
||||
|
|
@ -980,15 +980,15 @@ void Guild::Roster(WorldSession* session /*= NULL*/)
|
|||
data << uint32(0);
|
||||
|
||||
if (session)
|
||||
session->SendPacket(&data);
|
||||
{ session->SendPacket(&data); }
|
||||
else
|
||||
BroadcastPacket(&data);
|
||||
{ BroadcastPacket(&data); }
|
||||
DEBUG_LOG("WORLD: Sent (SMSG_GUILD_ROSTER)");
|
||||
}
|
||||
|
||||
void Guild::Query(WorldSession* session)
|
||||
{
|
||||
WorldPacket data(SMSG_GUILD_QUERY_RESPONSE, 8 * 32 + 200); // we can only guess size
|
||||
WorldPacket data(SMSG_GUILD_QUERY_RESPONSE, (8 * 32 + 200)); // we can only guess size
|
||||
|
||||
data << GetObjectGuid();
|
||||
data << m_Name;
|
||||
|
|
@ -996,9 +996,9 @@ void Guild::Query(WorldSession* session)
|
|||
for (size_t i = 0 ; i < GUILD_RANKS_MAX_COUNT; ++i) // show always 10 ranks
|
||||
{
|
||||
if (i < m_Ranks.size())
|
||||
data << m_Ranks[i].Name;
|
||||
{ data << m_Ranks[i].Name; }
|
||||
else
|
||||
data << uint8(0); // null string
|
||||
{ data << uint8(0); } // null string
|
||||
}
|
||||
|
||||
// Rank order of creation
|
||||
|
|
@ -1079,12 +1079,12 @@ uint32 Guild::GetAccountsNumber()
|
|||
{
|
||||
// not need recalculation
|
||||
if (m_accountsNumber)
|
||||
return m_accountsNumber;
|
||||
{ return m_accountsNumber; }
|
||||
|
||||
// We use a set to be sure each element will be unique
|
||||
std::set<uint32> accountsIdSet;
|
||||
for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
|
||||
accountsIdSet.insert(itr->second.accountId);
|
||||
{ accountsIdSet.insert(itr->second.accountId); }
|
||||
|
||||
m_accountsNumber = accountsIdSet.size();
|
||||
|
||||
|
|
@ -1119,7 +1119,7 @@ void Guild::LoadGuildEventLogFromDB()
|
|||
// 0 1 2 3 4 5
|
||||
QueryResult* result = CharacterDatabase.PQuery("SELECT LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp FROM guild_eventlog WHERE guildid=%u ORDER BY TimeStamp DESC,LogGuid DESC LIMIT %u", m_Id, GUILD_EVENTLOG_MAX_RECORDS);
|
||||
if (!result)
|
||||
return;
|
||||
{ return; }
|
||||
bool isNextLogGuidSet = false;
|
||||
// uint32 configCount = sWorld.getConfig(CONFIG_UINT32_GUILD_EVENT_LOG_COUNT);
|
||||
// First event in list will be the oldest and the latest event is last event in list
|
||||
|
|
@ -1164,7 +1164,7 @@ void Guild::LogGuildEvent(uint8 EventType, ObjectGuid playerGuid1, ObjectGuid pl
|
|||
m_GuildEventLogNextGuid = (m_GuildEventLogNextGuid + 1) % sWorld.getConfig(CONFIG_UINT32_GUILD_EVENT_LOG_COUNT);
|
||||
// Check max records limit
|
||||
if (m_GuildEventLog.size() >= GUILD_EVENTLOG_MAX_RECORDS)
|
||||
m_GuildEventLog.pop_front();
|
||||
{ m_GuildEventLog.pop_front(); }
|
||||
// Add event to list
|
||||
m_GuildEventLog.push_back(NewEvent);
|
||||
// Save event to DB
|
||||
|
|
@ -1510,6 +1510,12 @@ bool Guild::MemberMoneyWithdraw(uint64 amount, uint32 LowGuid)
|
|||
CharacterDatabase.PExecute("UPDATE guild_member SET BankRemMoney='%u' WHERE guildid='%u' AND guid='%u'",
|
||||
itr->second.BankRemMoney, m_Id, LowGuid);
|
||||
}
|
||||
|
||||
//#ifdef ENABLE_ELUNA
|
||||
// Player* player = sObjectMgr.GetPlayer(ObjectGuid(HIGHGUID_PLAYER, LowGuid));
|
||||
// sEluna->OnMemberWitdrawMoney(this, player, amount, false); // IsRepair not a part of Mangos, implement?
|
||||
//#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1877,6 +1883,10 @@ void Guild::LogBankEvent(uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uin
|
|||
m_GuildBankEventLog_Item[TabId].push_back(NewEvent);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_ELUNA
|
||||
sEluna->OnBankEvent(this, EventType, TabId, PlayerGuidLow, ItemOrMoney, ItemStackCount, DestTabId);
|
||||
#endif
|
||||
|
||||
// save event to database
|
||||
CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE guildid='%u' AND LogGuid='%u' AND TabId='%u'", m_Id, currentLogGuid, currentTabId);
|
||||
|
||||
|
|
@ -2630,7 +2640,7 @@ void Guild::BroadcastEvent(GuildEvents event, ObjectGuid guid, char const* str1
|
|||
data << str2;
|
||||
}
|
||||
else if (str1)
|
||||
data << str1;
|
||||
{ data << str1; }
|
||||
|
||||
if (guid)
|
||||
data << ObjectGuid(guid);
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class Item;
|
|||
|
||||
enum GuildDefaultRanks
|
||||
{
|
||||
// these ranks can be modified, but they cannot be deleted
|
||||
// these ranks can be modified, but they can not be deleted
|
||||
GR_GUILDMASTER = 0,
|
||||
GR_OFFICER = 1,
|
||||
GR_VETERAN = 2,
|
||||
|
|
@ -401,7 +401,7 @@ class Guild
|
|||
for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr)
|
||||
if (Player* player = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first)))
|
||||
if (player != except)
|
||||
_do(player);
|
||||
{ _do(player); }
|
||||
}
|
||||
|
||||
void CreateRank(std::string name, uint32 rights);
|
||||
|
|
@ -443,7 +443,7 @@ class Guild
|
|||
{
|
||||
for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr)
|
||||
if (itr->second.Name == name)
|
||||
return &itr->second;
|
||||
{ return &itr->second; }
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,8 +104,7 @@ void LoadRandomEnchantmentsTable()
|
|||
|
||||
uint32 GetItemEnchantMod(int32 entry)
|
||||
{
|
||||
if (!entry)
|
||||
return 0;
|
||||
if (!entry) { return 0; }
|
||||
|
||||
EnchantmentStore::const_iterator tab;
|
||||
if (entry > 0)
|
||||
|
|
@ -135,7 +134,7 @@ uint32 GetItemEnchantMod(int32 entry)
|
|||
{
|
||||
fCount += ench_iter->chance;
|
||||
|
||||
if (fCount > dRoll) return ench_iter->ench;
|
||||
if (fCount > dRoll) { return ench_iter->ench; }
|
||||
}
|
||||
|
||||
// we could get here only if sum of all enchantment chances is lower than 100%
|
||||
|
|
@ -146,7 +145,7 @@ uint32 GetItemEnchantMod(int32 entry)
|
|||
{
|
||||
fCount += ench_iter->chance;
|
||||
|
||||
if (fCount > dRoll) return ench_iter->ench;
|
||||
if (fCount > dRoll) { return ench_iter->ench; }
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -598,7 +598,7 @@ struct ItemPrototype
|
|||
uint32 Delay;
|
||||
float RangedModRange;
|
||||
_Spell Spells[MAX_ITEM_PROTO_SPELLS];
|
||||
uint32 Bonding;
|
||||
uint32 Bonding; ///< See \ref ItemBondingType
|
||||
char* Description;
|
||||
uint32 PageText;
|
||||
uint32 LanguageID;
|
||||
|
|
@ -622,7 +622,7 @@ struct ItemPrototype
|
|||
float ArmorDamageModifier;
|
||||
uint32 Duration;
|
||||
uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc
|
||||
uint32 HolidayId;
|
||||
uint32 HolidayId; // id from Holidays.dbc
|
||||
uint32 DisenchantID;
|
||||
uint32 FoodType;
|
||||
float StatScalingFactor;
|
||||
|
|
@ -662,7 +662,7 @@ struct ItemPrototype
|
|||
float GetMinDamage() const { return floor(getDPS() * float(Delay) / 1000.0f * 0.7f + 0.5f); }
|
||||
float GetMaxDamage() const { return floor(getDPS() * float(Delay) / 1000.0f * 1.3f + 0.5f); }
|
||||
|
||||
bool IsPotion() const { return Class==ITEM_CLASS_CONSUMABLE && SubClass==ITEM_SUBCLASS_POTION; }
|
||||
bool IsPotion() const { return Class == ITEM_CLASS_CONSUMABLE && SubClass == ITEM_SUBCLASS_POTION; }
|
||||
bool IsConjuredConsumable() const { return Class == ITEM_CLASS_CONSUMABLE && (Flags & ITEM_FLAG_CONJURED); }
|
||||
bool IsVellum() const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ class LootTemplate::LootGroup // A set of loot def
|
|||
public:
|
||||
void AddEntry(LootStoreItem& item); // Adds an entry to the group (at loading stage)
|
||||
bool HasQuestDrop() const; // True if group includes at least 1 quest drop entry
|
||||
bool HasQuestDropForPlayer(Player const* player) const;
|
||||
bool HasQuestDropForPlayer(Player const* player) const; // The same for active quests of the player
|
||||
// The same for active quests of the player
|
||||
void Process(Loot& loot) const; // Rolls an item from the group (if any) and adds the item to the loot
|
||||
float RawTotalChance() const; // Overall chance for the group (without equal chanced items)
|
||||
|
|
@ -82,7 +82,7 @@ class LootTemplate::LootGroup // A set of loot def
|
|||
void LootStore::Clear()
|
||||
{
|
||||
for (LootTemplateMap::const_iterator itr = m_LootTemplates.begin(); itr != m_LootTemplates.end(); ++itr)
|
||||
delete itr->second;
|
||||
{ delete itr->second; }
|
||||
m_LootTemplates.clear();
|
||||
}
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ void LootStore::Clear()
|
|||
void LootStore::Verify() const
|
||||
{
|
||||
for (LootTemplateMap::const_iterator i = m_LootTemplates.begin(); i != m_LootTemplates.end(); ++i)
|
||||
i->second->Verify(*this, i->first);
|
||||
{ i->second->Verify(*this, i->first); }
|
||||
}
|
||||
|
||||
// Loads a *_loot_template DB table into loot store
|
||||
|
|
@ -152,7 +152,7 @@ void LootStore::LoadLootTable()
|
|||
LootStoreItem storeitem = LootStoreItem(item, type, chanceOrQuestChance, group, conditionId, mincountOrRef, maxcount);
|
||||
|
||||
if (!storeitem.IsValid(*this, entry)) // Validity checks
|
||||
continue;
|
||||
{ continue; }
|
||||
|
||||
// Looking for the template of the entry
|
||||
// often entries are put together
|
||||
|
|
@ -193,7 +193,7 @@ bool LootStore::HaveQuestLootFor(uint32 loot_id) const
|
|||
{
|
||||
LootTemplateMap::const_iterator itr = m_LootTemplates.find(loot_id);
|
||||
if (itr == m_LootTemplates.end())
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
// scan loot for quest items
|
||||
return itr->second->HasQuestDrop(m_LootTemplates);
|
||||
|
|
@ -204,7 +204,7 @@ bool LootStore::HaveQuestLootForPlayer(uint32 loot_id, Player* player) const
|
|||
LootTemplateMap::const_iterator tab = m_LootTemplates.find(loot_id);
|
||||
if (tab != m_LootTemplates.end())
|
||||
if (tab->second->HasQuestDropForPlayer(m_LootTemplates, player))
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
@ -214,7 +214,7 @@ LootTemplate const* LootStore::GetLootFor(uint32 loot_id) const
|
|||
LootTemplateMap::const_iterator tab = m_LootTemplates.find(loot_id);
|
||||
|
||||
if (tab == m_LootTemplates.end())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return tab->second;
|
||||
}
|
||||
|
|
@ -224,20 +224,20 @@ void LootStore::LoadAndCollectLootIds(LootIdSet& ids_set)
|
|||
LoadLootTable();
|
||||
|
||||
for (LootTemplateMap::const_iterator tab = m_LootTemplates.begin(); tab != m_LootTemplates.end(); ++tab)
|
||||
ids_set.insert(tab->first);
|
||||
{ ids_set.insert(tab->first); }
|
||||
}
|
||||
|
||||
void LootStore::CheckLootRefs(LootIdSet* ref_set) const
|
||||
{
|
||||
for (LootTemplateMap::const_iterator ltItr = m_LootTemplates.begin(); ltItr != m_LootTemplates.end(); ++ltItr)
|
||||
ltItr->second->CheckLootRefs(ref_set);
|
||||
{ ltItr->second->CheckLootRefs(ref_set); }
|
||||
}
|
||||
|
||||
void LootStore::ReportUnusedIds(LootIdSet const& ids_set) const
|
||||
{
|
||||
// all still listed ids isn't referenced
|
||||
for (LootIdSet::const_iterator itr = ids_set.begin(); itr != ids_set.end(); ++itr)
|
||||
sLog.outErrorDb("Table '%s' entry %d isn't %s and not referenced from loot, and then useless.", GetName(), *itr, GetEntryName());
|
||||
{ sLog.outErrorDb("Table '%s' entry %d isn't %s and not referenced from loot, and then useless.", GetName(), *itr, GetEntryName()); }
|
||||
}
|
||||
|
||||
void LootStore::ReportNotExistedId(uint32 id) const
|
||||
|
|
@ -254,10 +254,10 @@ void LootStore::ReportNotExistedId(uint32 id) const
|
|||
bool LootStoreItem::Roll(bool rate) const
|
||||
{
|
||||
if (chance >= 100.0f)
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
if (mincountOrRef < 0) // reference case
|
||||
return roll_chance_f(chance * (rate ? sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_ITEM_REFERENCED) : 1.0f));
|
||||
{ return roll_chance_f(chance * (rate ? sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_ITEM_REFERENCED) : 1.0f)); }
|
||||
|
||||
if (type == LOOTITEM_TYPE_CURRENCY)
|
||||
return roll_chance_f(chance * (rate ? sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_CURRENCY) : 1.0f));
|
||||
|
|
@ -473,7 +473,7 @@ LootSlotType LootItem::GetSlotTypeForSharedLoot(PermissionTypes permission, Play
|
|||
{
|
||||
// ignore currencies, looted items, FFA (each player get own copy) and not allowed items
|
||||
if (currency || is_looted || freeforall || (conditionId && !condition_ok) || !AllowedForPlayer(viewer, lootTarget))
|
||||
return MAX_LOOT_SLOT_TYPE;
|
||||
{ return MAX_LOOT_SLOT_TYPE; }
|
||||
|
||||
switch (permission)
|
||||
{
|
||||
|
|
@ -500,7 +500,7 @@ void Loot::AddItem(LootStoreItem const& item)
|
|||
if (item.needs_quest) // Quest drop
|
||||
{
|
||||
if (m_questItems.size() < MAX_NR_QUEST_ITEMS)
|
||||
m_questItems.push_back(LootItem(item));
|
||||
{ m_questItems.push_back(LootItem(item)); }
|
||||
}
|
||||
else if (items.size() < MAX_NR_LOOT_ITEMS) // Non-quest drop
|
||||
{
|
||||
|
|
@ -514,7 +514,7 @@ void Loot::AddItem(LootStoreItem const& item)
|
|||
{
|
||||
ItemPrototype const* proto = ObjectMgr::GetItemPrototype(item.itemid);
|
||||
if (!proto || !(proto->Flags & ITEM_FLAG_PARTY_LOOT))
|
||||
++unlootedCount;
|
||||
{ ++unlootedCount; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -524,14 +524,14 @@ bool Loot::FillLoot(uint32 loot_id, LootStore const& store, Player* loot_owner,
|
|||
{
|
||||
// Must be provided
|
||||
if (!loot_owner)
|
||||
return false;
|
||||
{ return false; }
|
||||
|
||||
LootTemplate const* tab = store.GetLootFor(loot_id);
|
||||
|
||||
if (!tab)
|
||||
{
|
||||
if (!noEmptyError)
|
||||
sLog.outErrorDb("Table '%s' loot id #%u used but it doesn't have records.", store.GetName(), loot_id);
|
||||
{ sLog.outErrorDb("Table '%s' loot id #%u used but it doesn't have records.", store.GetName(), loot_id); }
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -546,11 +546,11 @@ bool Loot::FillLoot(uint32 loot_id, LootStore const& store, Player* loot_owner,
|
|||
{
|
||||
for (GroupReference* itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
if (Player* pl = itr->getSource())
|
||||
FillNotNormalLootFor(pl);
|
||||
{ FillNotNormalLootFor(pl); }
|
||||
}
|
||||
// ... for personal loot
|
||||
else
|
||||
FillNotNormalLootFor(loot_owner);
|
||||
{ FillNotNormalLootFor(loot_owner); }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -565,11 +565,11 @@ void Loot::FillNotNormalLootFor(Player* pl)
|
|||
|
||||
qmapitr = m_playerQuestItems.find(plguid);
|
||||
if (qmapitr == m_playerQuestItems.end())
|
||||
FillQuestLoot(pl);
|
||||
{ FillQuestLoot(pl); }
|
||||
|
||||
qmapitr = m_playerFFAItems.find(plguid);
|
||||
if (qmapitr == m_playerFFAItems.end())
|
||||
FillFFALoot(pl);
|
||||
{ FillFFALoot(pl); }
|
||||
|
||||
qmapitr = m_playerNonQuestNonFFANonCurrencyConditionalItems.find(plguid);
|
||||
if (qmapitr == m_playerNonQuestNonFFANonCurrencyConditionalItems.end())
|
||||
|
|
@ -624,7 +624,7 @@ QuestItemList* Loot::FillFFALoot(Player* player)
|
|||
|
||||
QuestItemList* Loot::FillQuestLoot(Player* player)
|
||||
{
|
||||
if (items.size() == MAX_NR_LOOT_ITEMS) return NULL;
|
||||
if (items.size() == MAX_NR_LOOT_ITEMS) { return NULL; }
|
||||
QuestItemList* ql = new QuestItemList();
|
||||
|
||||
for (uint8 i = 0; i < m_questItems.size(); ++i)
|
||||
|
|
@ -639,12 +639,12 @@ QuestItemList* Loot::FillQuestLoot(Player* player)
|
|||
//
|
||||
// increase once if one looter only, looter-times if free for all
|
||||
if (item.freeforall || !item.is_blocked)
|
||||
++unlootedCount;
|
||||
{ ++unlootedCount; }
|
||||
|
||||
item.is_blocked = true;
|
||||
|
||||
if (items.size() + ql->size() == MAX_NR_LOOT_ITEMS)
|
||||
break;
|
||||
{ break; }
|
||||
}
|
||||
}
|
||||
if (ql->empty())
|
||||
|
|
@ -696,9 +696,9 @@ void Loot::NotifyItemRemoved(uint8 lootIndex)
|
|||
i_next = i;
|
||||
++i_next;
|
||||
if (Player* pl = ObjectAccessor::FindPlayer(*i))
|
||||
pl->SendNotifyLootItemRemoved(lootIndex);
|
||||
{ pl->SendNotifyLootItemRemoved(lootIndex); }
|
||||
else
|
||||
m_playersLooting.erase(i);
|
||||
{ m_playersLooting.erase(i); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -711,9 +711,9 @@ void Loot::NotifyMoneyRemoved()
|
|||
i_next = i;
|
||||
++i_next;
|
||||
if (Player* pl = ObjectAccessor::FindPlayer(*i))
|
||||
pl->SendNotifyLootMoneyRemoved();
|
||||
{ pl->SendNotifyLootMoneyRemoved(); }
|
||||
else
|
||||
m_playersLooting.erase(i);
|
||||
{ m_playersLooting.erase(i); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -740,14 +740,14 @@ void Loot::NotifyQuestItemRemoved(uint8 questIndex)
|
|||
uint8 j;
|
||||
for (j = 0; j < pql.size(); ++j)
|
||||
if (pql[j].index == questIndex)
|
||||
break;
|
||||
{ break; }
|
||||
|
||||
if (j < pql.size())
|
||||
pl->SendNotifyLootItemRemoved(items.size() + j);
|
||||
{ pl->SendNotifyLootItemRemoved(items.size() + j); }
|
||||
}
|
||||
}
|
||||
else
|
||||
m_playersLooting.erase(i);
|
||||
{ m_playersLooting.erase(i); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -756,11 +756,11 @@ void Loot::generateMoneyLoot(uint32 minAmount, uint32 maxAmount)
|
|||
if (maxAmount > 0)
|
||||
{
|
||||
if (maxAmount <= minAmount)
|
||||
gold = uint32(maxAmount * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY));
|
||||
{ gold = uint32(maxAmount * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY)); }
|
||||
else if ((maxAmount - minAmount) < 32700)
|
||||
gold = uint32(urand(minAmount, maxAmount) * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY));
|
||||
{ gold = uint32(urand(minAmount, maxAmount) * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY)); }
|
||||
else
|
||||
gold = uint32(urand(minAmount >> 8, maxAmount >> 8) * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY)) << 8;
|
||||
{ gold = uint32(urand(minAmount >> 8, maxAmount >> 8) * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY)) << 8; }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -776,7 +776,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem** qite
|
|||
{
|
||||
QuestItem* qitem2 = &itr->second->at(questSlot);
|
||||
if (qitem)
|
||||
*qitem = qitem2;
|
||||
{ *qitem = qitem2; }
|
||||
item = &m_questItems[qitem2->index];
|
||||
is_looted = qitem2->is_looted;
|
||||
}
|
||||
|
|
@ -813,7 +813,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem** qite
|
|||
{
|
||||
QuestItem* ffaitem2 = (QuestItem*) & (*iter);
|
||||
if (ffaitem)
|
||||
*ffaitem = ffaitem2;
|
||||
{ *ffaitem = ffaitem2; }
|
||||
is_looted = ffaitem2->is_looted;
|
||||
break;
|
||||
}
|
||||
|
|
@ -830,7 +830,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem** qite
|
|||
{
|
||||
QuestItem* conditem2 = (QuestItem*) & (*iter);
|
||||
if (conditem)
|
||||
*conditem = conditem2;
|
||||
{ *conditem = conditem2; }
|
||||
is_looted = conditem2->is_looted;
|
||||
break;
|
||||
}
|
||||
|
|
@ -840,7 +840,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem** qite
|
|||
}
|
||||
|
||||
if (is_looted)
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return item;
|
||||
}
|
||||
|
|
@ -897,7 +897,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv)
|
|||
{
|
||||
LootSlotType slot_type = l.items[i].GetSlotTypeForSharedLoot(lv.permission, lv.viewer, l.GetLootTarget());
|
||||
if (slot_type >= MAX_LOOT_SLOT_TYPE)
|
||||
continue;
|
||||
{ continue; }
|
||||
|
||||
b << uint8(i) << l.items[i];
|
||||
b << uint8(slot_type); // 0 - get 1 - look only 2 - master selection
|
||||
|
|
@ -915,7 +915,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv)
|
|||
|
||||
LootSlotType slot_type = item.GetSlotTypeForSharedLoot(lv.permission, lv.viewer, l.GetLootTarget(), !ci->is_looted);
|
||||
if (slot_type >= MAX_LOOT_SLOT_TYPE)
|
||||
continue;
|
||||
{ continue; }
|
||||
|
||||
b << uint8(ci->index) << item;
|
||||
b << uint8(slot_type); // allow loot
|
||||
|
|
@ -992,9 +992,9 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv)
|
|||
void LootTemplate::LootGroup::AddEntry(LootStoreItem& item)
|
||||
{
|
||||
if (item.chance != 0)
|
||||
ExplicitlyChanced.push_back(item);
|
||||
{ ExplicitlyChanced.push_back(item); }
|
||||
else
|
||||
EqualChanced.push_back(item);
|
||||
{ EqualChanced.push_back(item); }
|
||||
}
|
||||
|
||||
// Rolls an item from the group, returns NULL if all miss their chances
|
||||
|
|
@ -1007,15 +1007,15 @@ LootStoreItem const* LootTemplate::LootGroup::Roll() const
|
|||
for (uint32 i = 0; i < ExplicitlyChanced.size(); ++i) // check each explicitly chanced entry in the template and modify its chance based on quality.
|
||||
{
|
||||
if (ExplicitlyChanced[i].chance >= 100.0f)
|
||||
return &ExplicitlyChanced[i];
|
||||
{ return &ExplicitlyChanced[i]; }
|
||||
|
||||
Roll -= ExplicitlyChanced[i].chance;
|
||||
if (Roll < 0)
|
||||
return &ExplicitlyChanced[i];
|
||||
{ return &ExplicitlyChanced[i]; }
|
||||
}
|
||||
}
|
||||
if (!EqualChanced.empty()) // If nothing selected yet - an item is taken from equal-chanced part
|
||||
return &EqualChanced[irand(0, EqualChanced.size() - 1)];
|
||||
{ return &EqualChanced[irand(0, EqualChanced.size() - 1)]; }
|
||||
|
||||
return NULL; // Empty drop from the group
|
||||
}
|
||||
|
|
@ -1025,10 +1025,10 @@ bool LootTemplate::LootGroup::HasQuestDrop() const
|
|||
{
|
||||
for (LootStoreItemList::const_iterator i = ExplicitlyChanced.begin(); i != ExplicitlyChanced.end(); ++i)
|
||||
if (i->needs_quest)
|
||||
return true;
|
||||
{ return true; }
|
||||
for (LootStoreItemList::const_iterator i = EqualChanced.begin(); i != EqualChanced.end(); ++i)
|
||||
if (i->needs_quest)
|
||||
return true;
|
||||
{ return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1037,10 +1037,10 @@ bool LootTemplate::LootGroup::HasQuestDropForPlayer(Player const* player) const
|
|||
{
|
||||
for (LootStoreItemList::const_iterator i = ExplicitlyChanced.begin(); i != ExplicitlyChanced.end(); ++i)
|
||||
if (player->HasQuestForItem(i->itemid))
|
||||
return true;
|
||||
{ return true; }
|
||||
for (LootStoreItemList::const_iterator i = EqualChanced.begin(); i != EqualChanced.end(); ++i)
|
||||
if (player->HasQuestForItem(i->itemid))
|
||||
return true;
|
||||
{ return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1049,7 +1049,7 @@ void LootTemplate::LootGroup::Process(Loot& loot) const
|
|||
{
|
||||
LootStoreItem const* item = Roll();
|
||||
if (item != NULL)
|
||||
loot.AddItem(*item);
|
||||
{ loot.AddItem(*item); }
|
||||
}
|
||||
|
||||
// Overall chance for the group without equal chanced items
|
||||
|
|
@ -1059,7 +1059,7 @@ float LootTemplate::LootGroup::RawTotalChance() const
|
|||
|
||||
for (LootStoreItemList::const_iterator i = ExplicitlyChanced.begin(); i != ExplicitlyChanced.end(); ++i)
|
||||
if (!i->needs_quest)
|
||||
result += i->chance;
|
||||
{ result += i->chance; }
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -1070,7 +1070,7 @@ float LootTemplate::LootGroup::TotalChance() const
|
|||
float result = RawTotalChance();
|
||||
|
||||
if (!EqualChanced.empty() && result < 100.0f)
|
||||
return 100.0f;
|
||||
{ return 100.0f; }
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -1096,9 +1096,9 @@ void LootTemplate::LootGroup::CheckLootRefs(LootIdSet* ref_set) const
|
|||
if (ieItr->mincountOrRef < 0)
|
||||
{
|
||||
if (!LootTemplates_Reference.GetLootFor(-ieItr->mincountOrRef))
|
||||
LootTemplates_Reference.ReportNotExistedId(-ieItr->mincountOrRef);
|
||||
{ LootTemplates_Reference.ReportNotExistedId(-ieItr->mincountOrRef); }
|
||||
else if (ref_set)
|
||||
ref_set->erase(-ieItr->mincountOrRef);
|
||||
{ ref_set->erase(-ieItr->mincountOrRef); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1107,9 +1107,9 @@ void LootTemplate::LootGroup::CheckLootRefs(LootIdSet* ref_set) const
|
|||
if (ieItr->mincountOrRef < 0)
|
||||
{
|
||||
if (!LootTemplates_Reference.GetLootFor(-ieItr->mincountOrRef))
|
||||
LootTemplates_Reference.ReportNotExistedId(-ieItr->mincountOrRef);
|
||||
{ LootTemplates_Reference.ReportNotExistedId(-ieItr->mincountOrRef); }
|
||||
else if (ref_set)
|
||||
ref_set->erase(-ieItr->mincountOrRef);
|
||||
{ ref_set->erase(-ieItr->mincountOrRef); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1124,11 +1124,11 @@ void LootTemplate::AddEntry(LootStoreItem& item)
|
|||
if (item.group > 0 && item.mincountOrRef > 0) // Group
|
||||
{
|
||||
if (item.group >= Groups.size())
|
||||
Groups.resize(item.group); // Adds new group the the loot template if needed
|
||||
{ Groups.resize(item.group); } // Adds new group the the loot template if needed
|
||||
Groups[item.group - 1].AddEntry(item); // Adds new entry to the group
|
||||
}
|
||||
else // Non-grouped entries and references are stored together
|
||||
Entries.push_back(item);
|
||||
{ Entries.push_back(item); }
|
||||
}
|
||||
|
||||
// Rolls for every item in the template and adds the rolled items the the loot
|
||||
|
|
@ -1137,7 +1137,7 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, bool rate, uint8
|
|||
if (groupId) // Group reference uses own processing of the group
|
||||
{
|
||||
if (groupId > Groups.size())
|
||||
return; // Error message already printed at loading stage
|
||||
{ return; } // Error message already printed at loading stage
|
||||
|
||||
Groups[groupId - 1].Process(loot);
|
||||
return;
|
||||
|
|
@ -1147,29 +1147,29 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, bool rate, uint8
|
|||
for (LootStoreItemList::const_iterator i = Entries.begin() ; i != Entries.end() ; ++i)
|
||||
{
|
||||
if (!i->Roll(rate))
|
||||
continue; // Bad luck for the entry
|
||||
{ continue; } // Bad luck for the entry
|
||||
|
||||
if (i->mincountOrRef < 0 && i->type == LOOT_ITEM_TYPE_ITEM) // References processing
|
||||
{
|
||||
LootTemplate const* Referenced = LootTemplates_Reference.GetLootFor(-i->mincountOrRef);
|
||||
|
||||
if (!Referenced)
|
||||
continue; // Error message already printed at loading stage
|
||||
{ continue; } // Error message already printed at loading stage
|
||||
|
||||
// Check condition
|
||||
if (i->conditionId && !sObjectMgr.IsPlayerMeetToCondition(i->conditionId, NULL, NULL, loot.GetLootTarget(), CONDITION_FROM_REFERING_LOOT))
|
||||
continue;
|
||||
{ continue; }
|
||||
|
||||
for (uint32 loop = 0; loop < i->maxcount; ++loop) // Ref multiplicator
|
||||
Referenced->Process(loot, store, rate, i->group);
|
||||
{ Referenced->Process(loot, store, rate, i->group); }
|
||||
}
|
||||
else // Plain entries (not a reference, not grouped)
|
||||
loot.AddItem(*i); // Chance is already checked, just add
|
||||
{ loot.AddItem(*i); } // Chance is already checked, just add
|
||||
}
|
||||
|
||||
// Now processing groups
|
||||
for (LootGroups::const_iterator i = Groups.begin() ; i != Groups.end() ; ++i)
|
||||
i->Process(loot);
|
||||
{ i->Process(loot); }
|
||||
}
|
||||
|
||||
// True if template includes at least 1 quest drop entry
|
||||
|
|
@ -1178,7 +1178,7 @@ bool LootTemplate::HasQuestDrop(LootTemplateMap const& store, uint8 groupId) con
|
|||
if (groupId) // Group reference
|
||||
{
|
||||
if (groupId > Groups.size())
|
||||
return false; // Error message [should be] already printed at loading stage
|
||||
{ return false; } // Error message [should be] already printed at loading stage
|
||||
return Groups[groupId - 1].HasQuestDrop();
|
||||
}
|
||||
|
||||
|
|
@ -1188,18 +1188,18 @@ bool LootTemplate::HasQuestDrop(LootTemplateMap const& store, uint8 groupId) con
|
|||
{
|
||||
LootTemplateMap::const_iterator Referenced = store.find(-i->mincountOrRef);
|
||||
if (Referenced == store.end())
|
||||
continue; // Error message [should be] already printed at loading stage
|
||||
{ continue; } // Error message [should be] already printed at loading stage
|
||||
if (Referenced->second->HasQuestDrop(store, i->group))
|
||||
return true;
|
||||
{ return true; }
|
||||
}
|
||||
else if (i->needs_quest)
|
||||
return true; // quest drop found
|
||||
{ return true; } // quest drop found
|
||||
}
|
||||
|
||||
// Now processing groups
|
||||
for (LootGroups::const_iterator i = Groups.begin() ; i != Groups.end() ; ++i)
|
||||
if (i->HasQuestDrop())
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1210,7 +1210,7 @@ bool LootTemplate::HasQuestDropForPlayer(LootTemplateMap const& store, Player co
|
|||
if (groupId) // Group reference
|
||||
{
|
||||
if (groupId > Groups.size())
|
||||
return false; // Error message already printed at loading stage
|
||||
{ return false; } // Error message already printed at loading stage
|
||||
return Groups[groupId - 1].HasQuestDropForPlayer(player);
|
||||
}
|
||||
|
||||
|
|
@ -1221,18 +1221,18 @@ bool LootTemplate::HasQuestDropForPlayer(LootTemplateMap const& store, Player co
|
|||
{
|
||||
LootTemplateMap::const_iterator Referenced = store.find(-i->mincountOrRef);
|
||||
if (Referenced == store.end())
|
||||
continue; // Error message already printed at loading stage
|
||||
{ continue; } // Error message already printed at loading stage
|
||||
if (Referenced->second->HasQuestDropForPlayer(store, player, i->group))
|
||||
return true;
|
||||
{ return true; }
|
||||
}
|
||||
else if (player->HasQuestForItem(i->itemid))
|
||||
return true; // active quest drop found
|
||||
{ return true; } // active quest drop found
|
||||
}
|
||||
|
||||
// Now checking groups
|
||||
for (LootGroups::const_iterator i = Groups.begin(); i != Groups.end(); ++i)
|
||||
if (i->HasQuestDropForPlayer(player))
|
||||
return true;
|
||||
{ return true; }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1242,7 +1242,7 @@ void LootTemplate::Verify(LootStore const& lootstore, uint32 id) const
|
|||
{
|
||||
// Checking group chances
|
||||
for (uint32 i = 0; i < Groups.size(); ++i)
|
||||
Groups[i].Verify(lootstore, id, i + 1);
|
||||
{ Groups[i].Verify(lootstore, id, i + 1); }
|
||||
|
||||
// TODO: References validity checks
|
||||
}
|
||||
|
|
@ -1254,14 +1254,14 @@ void LootTemplate::CheckLootRefs(LootIdSet* ref_set) const
|
|||
if (ieItr->mincountOrRef < 0)
|
||||
{
|
||||
if (!LootTemplates_Reference.GetLootFor(-ieItr->mincountOrRef))
|
||||
LootTemplates_Reference.ReportNotExistedId(-ieItr->mincountOrRef);
|
||||
{ LootTemplates_Reference.ReportNotExistedId(-ieItr->mincountOrRef); }
|
||||
else if (ref_set)
|
||||
ref_set->erase(-ieItr->mincountOrRef);
|
||||
{ ref_set->erase(-ieItr->mincountOrRef); }
|
||||
}
|
||||
}
|
||||
|
||||
for (LootGroups::const_iterator grItr = Groups.begin(); grItr != Groups.end(); ++grItr)
|
||||
grItr->CheckLootRefs(ref_set);
|
||||
{ grItr->CheckLootRefs(ref_set); }
|
||||
}
|
||||
|
||||
void LoadLootTemplates_Creature()
|
||||
|
|
@ -1284,7 +1284,7 @@ void LoadLootTemplates_Creature()
|
|||
}
|
||||
}
|
||||
for (LootIdSet::const_iterator itr = ids_setUsed.begin(); itr != ids_setUsed.end(); ++itr)
|
||||
ids_set.erase(*itr);
|
||||
{ ids_set.erase(*itr); }
|
||||
|
||||
// for alterac valley we've defined Player-loot inside creature_loot_template id=0
|
||||
// this hack is used, so that we won't need to create an extra table player_loot_template for just one case
|
||||
|
|
@ -1314,7 +1314,7 @@ void LoadLootTemplates_Disenchant()
|
|||
}
|
||||
}
|
||||
for (LootIdSet::const_iterator itr = ids_setUsed.begin(); itr != ids_setUsed.end(); ++itr)
|
||||
ids_set.erase(*itr);
|
||||
{ ids_set.erase(*itr); }
|
||||
// output error for any still listed (not referenced from appropriate table) ids
|
||||
LootTemplates_Disenchant.ReportUnusedIds(ids_set);
|
||||
}
|
||||
|
|
@ -1329,7 +1329,7 @@ void LoadLootTemplates_Fishing()
|
|||
{
|
||||
if (AreaTableEntry const* areaEntry = sAreaStore.LookupEntry(i))
|
||||
if (ids_set.find(areaEntry->ID) != ids_set.end())
|
||||
ids_set.erase(areaEntry->ID);
|
||||
{ ids_set.erase(areaEntry->ID); }
|
||||
}
|
||||
|
||||
// by default (look config options) fishing at fail provide junk loot, entry 0 use for store this loot
|
||||
|
|
@ -1356,7 +1356,7 @@ void LoadLootTemplates_Gameobject()
|
|||
}
|
||||
}
|
||||
for (LootIdSet::const_iterator itr = ids_setUsed.begin(); itr != ids_setUsed.end(); ++itr)
|
||||
ids_set.erase(*itr);
|
||||
{ ids_set.erase(*itr); }
|
||||
|
||||
// output error for any still listed (not referenced from appropriate table) ids
|
||||
LootTemplates_Gameobject.ReportUnusedIds(ids_set);
|
||||
|
|
@ -1373,13 +1373,13 @@ void LoadLootTemplates_Item()
|
|||
if (ItemPrototype const* proto = sItemStorage.LookupEntry<ItemPrototype>(i))
|
||||
{
|
||||
if (!(proto->Flags & ITEM_FLAG_LOOTABLE))
|
||||
continue;
|
||||
{ continue; }
|
||||
|
||||
if (ids_set.find(proto->ItemId) != ids_set.end() || proto->MaxMoneyLoot > 0)
|
||||
ids_set.erase(proto->ItemId);
|
||||
{ ids_set.erase(proto->ItemId); }
|
||||
// wdb have wrong data cases, so skip by default
|
||||
else if (!sLog.HasLogFilter(LOG_FILTER_DB_STRICTED_CHECK))
|
||||
LootTemplates_Item.ReportNotExistedId(proto->ItemId);
|
||||
{ LootTemplates_Item.ReportNotExistedId(proto->ItemId); }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1432,7 +1432,7 @@ void LoadLootTemplates_Pickpocketing()
|
|||
}
|
||||
}
|
||||
for (LootIdSet::const_iterator itr = ids_setUsed.begin(); itr != ids_setUsed.end(); ++itr)
|
||||
ids_set.erase(*itr);
|
||||
{ ids_set.erase(*itr); }
|
||||
|
||||
// output error for any still listed (not referenced from appropriate table) ids
|
||||
LootTemplates_Pickpocketing.ReportUnusedIds(ids_set);
|
||||
|
|
@ -1472,7 +1472,7 @@ void LoadLootTemplates_Mail()
|
|||
for (uint32 i = 1; i < sMailTemplateStore.GetNumRows(); ++i)
|
||||
if (sMailTemplateStore.LookupEntry(i))
|
||||
if (ids_set.find(i) != ids_set.end())
|
||||
ids_set.erase(i);
|
||||
{ ids_set.erase(i); }
|
||||
|
||||
// output error for any still listed (not referenced from appropriate table) ids
|
||||
LootTemplates_Mail.ReportUnusedIds(ids_set);
|
||||
|
|
@ -1498,7 +1498,7 @@ void LoadLootTemplates_Skinning()
|
|||
}
|
||||
}
|
||||
for (LootIdSet::const_iterator itr = ids_setUsed.begin(); itr != ids_setUsed.end(); ++itr)
|
||||
ids_set.erase(*itr);
|
||||
{ ids_set.erase(*itr); }
|
||||
|
||||
// output error for any still listed (not referenced from appropriate table) ids
|
||||
LootTemplates_Skinning.ReportUnusedIds(ids_set);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class LootStore;
|
|||
class WorldObject;
|
||||
|
||||
#define MAX_NR_LOOT_ITEMS 16
|
||||
// note: the client cannot show more than 16 items total
|
||||
// note: the client can not show more than 16 items total
|
||||
#define MAX_NR_QUEST_ITEMS 32
|
||||
// unrelated to the number of quest items shown, just for reserve
|
||||
|
||||
|
|
@ -196,7 +196,7 @@ class LootStore
|
|||
|
||||
class LootTemplate
|
||||
{
|
||||
class LootGroup; // A set of loot definitions for items (refs are not allowed inside)
|
||||
class LootGroup; // A set of loot definitions for items (refs are not allowed inside)
|
||||
typedef std::vector<LootGroup> LootGroups;
|
||||
|
||||
public:
|
||||
|
|
@ -281,15 +281,15 @@ struct Loot
|
|||
m_playerCurrencies.clear();
|
||||
|
||||
for (QuestItemMap::const_iterator itr = m_playerQuestItems.begin(); itr != m_playerQuestItems.end(); ++itr)
|
||||
delete itr->second;
|
||||
{ delete itr->second; }
|
||||
m_playerQuestItems.clear();
|
||||
|
||||
for (QuestItemMap::const_iterator itr = m_playerFFAItems.begin(); itr != m_playerFFAItems.end(); ++itr)
|
||||
delete itr->second;
|
||||
{ delete itr->second; }
|
||||
m_playerFFAItems.clear();
|
||||
|
||||
for (QuestItemMap::const_iterator itr = m_playerNonQuestNonFFANonCurrencyConditionalItems.begin(); itr != m_playerNonQuestNonFFANonCurrencyConditionalItems.end(); ++itr)
|
||||
delete itr->second;
|
||||
{ delete itr->second; }
|
||||
m_playerNonQuestNonFFANonCurrencyConditionalItems.clear();
|
||||
|
||||
m_playersLooting.clear();
|
||||
|
|
|
|||
|
|
@ -133,14 +133,14 @@ void Object::SendForcedObjectUpdate()
|
|||
void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const
|
||||
{
|
||||
if (!target)
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
uint8 updatetype = UPDATETYPE_CREATE_OBJECT;
|
||||
uint16 updateFlags = m_updateFlag;
|
||||
|
||||
/** lower flag1 **/
|
||||
if (target == this) // building packet for yourself
|
||||
updateFlags |= UPDATEFLAG_SELF;
|
||||
{ updateFlags |= UPDATEFLAG_SELF; }
|
||||
|
||||
if (m_itsNewObject)
|
||||
{
|
||||
|
|
@ -1493,7 +1493,7 @@ void WorldObject::UpdateGroundPositionZ(float x, float y, float& z) const
|
|||
void WorldObject::UpdateAllowedPositionZ(float x, float y, float& z, Map* atMap /*=NULL*/) const
|
||||
{
|
||||
if (!atMap)
|
||||
atMap = GetMap();
|
||||
{ atMap = GetMap(); }
|
||||
|
||||
switch (GetTypeId())
|
||||
{
|
||||
|
|
@ -1511,16 +1511,16 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float& z, Map* atMap
|
|||
if (max_z > INVALID_HEIGHT)
|
||||
{
|
||||
if (z > max_z)
|
||||
z = max_z;
|
||||
{ z = max_z; }
|
||||
else if (z < ground_z)
|
||||
z = ground_z;
|
||||
{ z = ground_z; }
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
float ground_z = atMap->GetHeight(GetPhaseMask(), x, y, z);
|
||||
if (z < ground_z)
|
||||
z = ground_z;
|
||||
{ z = ground_z; }
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -1534,9 +1534,9 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float& z, Map* atMap
|
|||
if (max_z > INVALID_HEIGHT)
|
||||
{
|
||||
if (z > max_z)
|
||||
z = max_z;
|
||||
{ z = max_z; }
|
||||
else if (z < ground_z)
|
||||
z = ground_z;
|
||||
{ z = ground_z; }
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1551,7 +1551,7 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float& z, Map* atMap
|
|||
{
|
||||
float ground_z = atMap->GetHeight(GetPhaseMask(), x, y, z);
|
||||
if (ground_z > INVALID_HEIGHT)
|
||||
z = ground_z;
|
||||
{ z = ground_z; }
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1566,7 +1566,7 @@ void WorldObject::MonsterSay(const char* text, uint32 language, Unit const* targ
|
|||
{
|
||||
WorldPacket data(SMSG_MESSAGECHAT, 200);
|
||||
ChatHandler::BuildChatPacket(data, CHAT_MSG_MONSTER_SAY, text, LANG_UNIVERSAL, CHAT_TAG_NONE, GetObjectGuid(), GetName(),
|
||||
target ? target->GetObjectGuid() : ObjectGuid(), target ? target->GetName() : "");
|
||||
target ? target->GetObjectGuid() : ObjectGuid(), target ? target->GetName() : "");
|
||||
SendMessageToSetInRange(&data, sWorld.getConfig(CONFIG_FLOAT_LISTEN_RANGE_SAY), true);
|
||||
}
|
||||
|
||||
|
|
@ -1574,7 +1574,7 @@ void WorldObject::MonsterYell(const char* text, uint32 language, Unit const* tar
|
|||
{
|
||||
WorldPacket data(SMSG_MESSAGECHAT, 200);
|
||||
ChatHandler::BuildChatPacket(data, CHAT_MSG_MONSTER_YELL, text, LANG_UNIVERSAL, CHAT_TAG_NONE, GetObjectGuid(), GetName(),
|
||||
target ? target->GetObjectGuid() : ObjectGuid(), target ? target->GetName() : "");
|
||||
target ? target->GetObjectGuid() : ObjectGuid(), target ? target->GetName() : "");
|
||||
SendMessageToSetInRange(&data, sWorld.getConfig(CONFIG_FLOAT_LISTEN_RANGE_YELL), true);
|
||||
}
|
||||
|
||||
|
|
@ -1582,7 +1582,7 @@ void WorldObject::MonsterTextEmote(const char* text, Unit const* target, bool Is
|
|||
{
|
||||
WorldPacket data(SMSG_MESSAGECHAT, 200);
|
||||
ChatHandler::BuildChatPacket(data, IsBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, text, LANG_UNIVERSAL, CHAT_TAG_NONE, GetObjectGuid(), GetName(),
|
||||
target ? target->GetObjectGuid() : ObjectGuid(), target ? target->GetName() : "");
|
||||
target ? target->GetObjectGuid() : ObjectGuid(), target ? target->GetName() : "");
|
||||
SendMessageToSetInRange(&data, sWorld.getConfig(IsBossEmote ? CONFIG_FLOAT_LISTEN_RANGE_YELL : CONFIG_FLOAT_LISTEN_RANGE_TEXTEMOTE), true);
|
||||
}
|
||||
|
||||
|
|
@ -1593,7 +1593,7 @@ void WorldObject::MonsterWhisper(const char* text, Unit const* target, bool IsBo
|
|||
|
||||
WorldPacket data(SMSG_MESSAGECHAT, 200);
|
||||
ChatHandler::BuildChatPacket(data, IsBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, text, LANG_UNIVERSAL, CHAT_TAG_NONE, GetObjectGuid(), GetName(),
|
||||
target->GetObjectGuid(), target->GetName());
|
||||
target->GetObjectGuid(), target->GetName());
|
||||
((Player*)target)->GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
||||
|
|
@ -1601,19 +1601,19 @@ namespace MaNGOS
|
|||
{
|
||||
class MonsterChatBuilder
|
||||
{
|
||||
public:
|
||||
public:
|
||||
MonsterChatBuilder(WorldObject const& obj, ChatMsg msgtype, MangosStringLocale const* textData, Language language, Unit const* target)
|
||||
: i_object(obj), i_msgtype(msgtype), i_textData(textData), i_language(language), i_target(target) {}
|
||||
void operator()(WorldPacket& data, int32 loc_idx)
|
||||
{
|
||||
char const* text = NULL;
|
||||
if ((int32)i_textData->Content.size() > loc_idx + 1 && !i_textData->Content[loc_idx + 1].empty())
|
||||
text = i_textData->Content[loc_idx + 1].c_str();
|
||||
{ text = i_textData->Content[loc_idx + 1].c_str(); }
|
||||
else
|
||||
text = i_textData->Content[0].c_str();
|
||||
{ text = i_textData->Content[0].c_str(); }
|
||||
|
||||
ChatHandler::BuildChatPacket(data, i_msgtype, text, i_language, CHAT_TAG_NONE, i_object.GetObjectGuid(), i_object.GetNameForLocaleIdx(loc_idx),
|
||||
i_target ? i_target->GetObjectGuid() : ObjectGuid(), i_target ? i_target->GetNameForLocaleIdx(loc_idx) : "");
|
||||
i_target ? i_target->GetObjectGuid() : ObjectGuid(), i_target ? i_target->GetNameForLocaleIdx(loc_idx) : "");
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -1656,7 +1656,7 @@ void WorldObject::MonsterText(MangosStringLocale const* textData, Unit const* ta
|
|||
case CHAT_TYPE_WHISPER:
|
||||
{
|
||||
if (!target || target->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
{ return; }
|
||||
MaNGOS::MonsterChatBuilder say_build(*this, CHAT_MSG_MONSTER_WHISPER, textData, LANG_UNIVERSAL, target);
|
||||
MaNGOS::LocalizedPacketDo<MaNGOS::MonsterChatBuilder> say_do(say_build);
|
||||
say_do((Player*)target);
|
||||
|
|
@ -1665,7 +1665,7 @@ void WorldObject::MonsterText(MangosStringLocale const* textData, Unit const* ta
|
|||
case CHAT_TYPE_BOSS_WHISPER:
|
||||
{
|
||||
if (!target || target->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
{ return; }
|
||||
MaNGOS::MonsterChatBuilder say_build(*this, CHAT_MSG_RAID_BOSS_WHISPER, textData, LANG_UNIVERSAL, target);
|
||||
MaNGOS::LocalizedPacketDo<MaNGOS::MonsterChatBuilder> say_do(say_build);
|
||||
say_do((Player*)target);
|
||||
|
|
@ -1679,7 +1679,7 @@ void WorldObject::MonsterText(MangosStringLocale const* textData, Unit const* ta
|
|||
Map::PlayerList const& pList = GetMap()->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr)
|
||||
if (itr->getSource()->GetZoneId() == zoneid)
|
||||
say_do(itr->getSource());
|
||||
{ say_do(itr->getSource()); }
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1771,12 +1771,12 @@ Creature* WorldObject::SummonCreature(uint32 id, float x, float y, float z, floa
|
|||
|
||||
Team team = TEAM_NONE;
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
team = ((Player*)this)->GetTeam();
|
||||
{ team = ((Player*)this)->GetTeam(); }
|
||||
|
||||
CreatureCreatePos pos(GetMap(), x, y, z, ang, GetPhaseMask());
|
||||
|
||||
if (x == 0.0f && y == 0.0f && z == 0.0f)
|
||||
pos = CreatureCreatePos(this, GetOrientation(), CONTACT_DISTANCE, ang);
|
||||
{ pos = CreatureCreatePos(this, GetOrientation(), CONTACT_DISTANCE, ang); }
|
||||
|
||||
if (!pCreature->Create(GetMap()->GenerateLocalLowGuid(cinfo->GetHighGuid()), pos, cinfo, team))
|
||||
{
|
||||
|
|
@ -1795,7 +1795,7 @@ Creature* WorldObject::SummonCreature(uint32 id, float x, float y, float z, floa
|
|||
pCreature->Summon(spwtype, despwtime); // Also initializes the AI and MMGen
|
||||
|
||||
if (GetTypeId() == TYPEID_UNIT && ((Creature*)this)->AI())
|
||||
((Creature*)this)->AI()->JustSummoned(pCreature);
|
||||
{ ((Creature*)this)->AI()->JustSummoned(pCreature); }
|
||||
|
||||
#ifdef ENABLE_ELUNA
|
||||
if (Unit* summoner = ToUnit())
|
||||
|
|
@ -1804,7 +1804,7 @@ Creature* WorldObject::SummonCreature(uint32 id, float x, float y, float z, floa
|
|||
|
||||
// Creature Linking, Initial load is handled like respawn
|
||||
if (pCreature->IsLinkingEventTrigger())
|
||||
GetMap()->GetCreatureLinkingHolder()->DoCreatureLinkingEvent(LINKING_EVENT_RESPAWN, pCreature);
|
||||
{ GetMap()->GetCreatureLinkingHolder()->DoCreatureLinkingEvent(LINKING_EVENT_RESPAWN, pCreature); }
|
||||
|
||||
// return the creature therewith the summoner has access to it
|
||||
return pCreature;
|
||||
|
|
@ -1816,7 +1816,7 @@ GameObject* WorldObject::SummonGameObject(uint32 id, float x, float y, float z,
|
|||
|
||||
Map *map = GetMap();
|
||||
|
||||
if(!map)
|
||||
if (!map)
|
||||
return NULL;
|
||||
|
||||
if (!pGameObj->Create(map->GenerateLocalLowGuid(HIGHGUID_GAMEOBJECT), id, map, GetPhaseMask(), x, y, z, angle))
|
||||
|
|
@ -1934,9 +1934,9 @@ void WorldObject::GetNearPoint(WorldObject const* searcher, float& x, float& y,
|
|||
if (!sWorld.getConfig(CONFIG_BOOL_DETECT_POS_COLLISION))
|
||||
{
|
||||
if (searcher)
|
||||
searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); // update to LOS height if available
|
||||
{ searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); } // update to LOS height if available
|
||||
else
|
||||
UpdateGroundPositionZ(x, y, z);
|
||||
{ UpdateGroundPositionZ(x, y, z); }
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1962,12 +1962,12 @@ void WorldObject::GetNearPoint(WorldObject const* searcher, float& x, float& y,
|
|||
if (selector.CheckOriginalAngle())
|
||||
{
|
||||
if (searcher)
|
||||
searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); // update to LOS height if available
|
||||
{ searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); } // update to LOS height if available
|
||||
else
|
||||
UpdateGroundPositionZ(x, y, z);
|
||||
{ UpdateGroundPositionZ(x, y, z); }
|
||||
|
||||
if (fabs(init_z - z) < dist && IsWithinLOS(x, y, z))
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
first_los_conflict = true; // first point have LOS problems
|
||||
}
|
||||
|
|
@ -1984,12 +1984,12 @@ void WorldObject::GetNearPoint(WorldObject const* searcher, float& x, float& y,
|
|||
z = GetPositionZ();
|
||||
|
||||
if (searcher)
|
||||
searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); // update to LOS height if available
|
||||
{ searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); } // update to LOS height if available
|
||||
else
|
||||
UpdateGroundPositionZ(x, y, z);
|
||||
{ UpdateGroundPositionZ(x, y, z); }
|
||||
|
||||
if (fabs(init_z - z) < dist && IsWithinLOS(x, y, z))
|
||||
return;
|
||||
{ return; }
|
||||
}
|
||||
|
||||
// BAD NEWS: not free pos (or used or have LOS problems)
|
||||
|
|
@ -2000,9 +2000,9 @@ void WorldObject::GetNearPoint(WorldObject const* searcher, float& x, float& y,
|
|||
y = first_y;
|
||||
|
||||
if (searcher)
|
||||
searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); // update to LOS height if available
|
||||
{ searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); } // update to LOS height if available
|
||||
else
|
||||
UpdateGroundPositionZ(x, y, z);
|
||||
{ UpdateGroundPositionZ(x, y, z); }
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2016,12 +2016,12 @@ void WorldObject::GetNearPoint(WorldObject const* searcher, float& x, float& y,
|
|||
z = GetPositionZ();
|
||||
|
||||
if (searcher)
|
||||
searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); // update to LOS height if available
|
||||
{ searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); } // update to LOS height if available
|
||||
else
|
||||
UpdateGroundPositionZ(x, y, z);
|
||||
{ UpdateGroundPositionZ(x, y, z); }
|
||||
|
||||
if (fabs(init_z - z) < dist && IsWithinLOS(x, y, z))
|
||||
return;
|
||||
{ return; }
|
||||
}
|
||||
|
||||
// BAD BAD NEWS: all found pos (free and used) have LOS problem :(
|
||||
|
|
@ -2029,9 +2029,9 @@ void WorldObject::GetNearPoint(WorldObject const* searcher, float& x, float& y,
|
|||
y = first_y;
|
||||
|
||||
if (searcher)
|
||||
searcher->UpdateAllowedPositionZ(x, y, z, GetMap());// update to LOS height if available
|
||||
{ searcher->UpdateAllowedPositionZ(x, y, z, GetMap()); } // update to LOS height if available
|
||||
else
|
||||
UpdateGroundPositionZ(x, y, z);
|
||||
{ UpdateGroundPositionZ(x, y, z); }
|
||||
}
|
||||
|
||||
void WorldObject::SetPhaseMask(uint32 newPhaseMask, bool update)
|
||||
|
|
@ -2060,9 +2060,9 @@ void WorldObject::PlayDirectSound(uint32 sound_id, Player const* target /*= NULL
|
|||
data << uint32(sound_id);
|
||||
data << ObjectGuid();
|
||||
if (target)
|
||||
target->SendDirectMessage(&data);
|
||||
{ target->SendDirectMessage(&data); }
|
||||
else
|
||||
SendMessageToSet(&data, true);
|
||||
{ SendMessageToSet(&data, true); }
|
||||
}
|
||||
|
||||
void WorldObject::PlayMusic(uint32 sound_id, Player const* target /*= NULL*/) const
|
||||
|
|
@ -2166,9 +2166,9 @@ void WorldObject::SetActiveObjectState(bool active)
|
|||
// player's update implemented in a different from other active worldobject's way
|
||||
// it's considired to use generic way in future
|
||||
{
|
||||
if (isActiveObject() && !active)
|
||||
if (IsActiveObject() && !active)
|
||||
{ GetMap()->RemoveFromActive(this); }
|
||||
else if (!isActiveObject() && active)
|
||||
else if (!IsActiveObject() && active)
|
||||
{ GetMap()->AddToActive(this); }
|
||||
}
|
||||
m_isActiveObject = active;
|
||||
|
|
|
|||
|
|
@ -41,10 +41,10 @@
|
|||
#define ATTACK_DISTANCE 5.0f
|
||||
#define INSPECT_DISTANCE 28.0f
|
||||
#define TRADE_DISTANCE 11.11f
|
||||
#define MAX_VISIBILITY_DISTANCE 333.0f // max distance for visible object show, limited in 333 yards
|
||||
#define DEFAULT_VISIBILITY_DISTANCE 90.0f // default visible distance, 90 yards on continents
|
||||
#define DEFAULT_VISIBILITY_INSTANCE 120.0f // default visible distance in instances, 120 yards
|
||||
#define DEFAULT_VISIBILITY_BGARENAS 180.0f // default visible distance in BG/Arenas, 180 yards
|
||||
#define MAX_VISIBILITY_DISTANCE 333.0f // max distance for visible object show, limited in 333 yards
|
||||
#define DEFAULT_VISIBILITY_DISTANCE 90.0f // default visible distance, 90 yards on continents
|
||||
#define DEFAULT_VISIBILITY_INSTANCE 120.0f // default visible distance in instances, 120 yards
|
||||
#define DEFAULT_VISIBILITY_BGARENAS 180.0f // default visible distance in BG/Arenas, 180 yards
|
||||
|
||||
#define DEFAULT_WORLD_OBJECT_SIZE 0.388999998569489f // currently used (correctly?) for any non Unit world objects. This is actually the bounding_radius, like player/creature from creature_model_data
|
||||
#define DEFAULT_OBJECT_SCALE 1.0f // player/item scale as default, npc/go from database, pets from dbc
|
||||
|
|
@ -658,7 +658,7 @@ class WorldObject : public Object
|
|||
Creature* SummonCreature(uint32 id, float x, float y, float z, float ang, TempSummonType spwtype, uint32 despwtime, bool asActiveObject = false, bool setRun = false);
|
||||
GameObject* SummonGameObject(uint32 id, float x, float y, float z, float angle, uint32 despwtime);
|
||||
|
||||
bool isActiveObject() const { return m_isActiveObject || m_viewPoint.hasViewers(); }
|
||||
bool IsActiveObject() const { return m_isActiveObject || m_viewPoint.hasViewers(); }
|
||||
void SetActiveObjectState(bool active);
|
||||
|
||||
ViewPoint& GetViewPoint() { return m_viewPoint; }
|
||||
|
|
@ -667,6 +667,7 @@ class WorldObject : public Object
|
|||
bool PrintCoordinatesError(float x, float y, float z, char const* descr) const;
|
||||
|
||||
virtual void StartGroupLoot(Group* /*group*/, uint32 /*timer*/) { }
|
||||
|
||||
#ifdef ENABLE_ELUNA
|
||||
ElunaEventProcessor* elunaEvents;
|
||||
#endif /* ENABLE_ELUNA */
|
||||
|
|
|
|||
|
|
@ -59,13 +59,13 @@ Unit*
|
|||
ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid guid)
|
||||
{
|
||||
if (!guid)
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
if (guid.IsPlayer())
|
||||
return FindPlayer(guid);
|
||||
{ return FindPlayer(guid); }
|
||||
|
||||
if (!u.IsInWorld())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return u.GetMap()->GetAnyTypeCreature(guid);
|
||||
}
|
||||
|
|
@ -74,9 +74,9 @@ Corpse* ObjectAccessor::GetCorpseInMap(ObjectGuid guid, uint32 mapid)
|
|||
{
|
||||
Corpse* ret = HashMapHolder<Corpse>::Find(guid);
|
||||
if (!ret)
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
if (ret->GetMapId() != mapid)
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -84,11 +84,11 @@ Corpse* ObjectAccessor::GetCorpseInMap(ObjectGuid guid, uint32 mapid)
|
|||
Player* ObjectAccessor::FindPlayer(ObjectGuid guid, bool inWorld /*= true*/)
|
||||
{
|
||||
if (!guid)
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
Player* plr = HashMapHolder<Player>::Find(guid);
|
||||
if (!plr || (!plr->IsInWorld() && inWorld))
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return plr;
|
||||
}
|
||||
|
|
@ -99,8 +99,7 @@ Player* ObjectAccessor::FindPlayerByName(const char* name)
|
|||
HashMapHolder<Player>::MapType& m = sObjectAccessor.GetPlayers();
|
||||
for (HashMapHolder<Player>::MapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
if (iter->second->IsInWorld() && (::strcmp(name, iter->second->GetName()) == 0))
|
||||
return iter->second;
|
||||
|
||||
{ return iter->second; }
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -129,11 +128,11 @@ ObjectAccessor::GetCorpseForPlayerGUID(ObjectGuid guid)
|
|||
Guard guard(i_corpseGuard);
|
||||
|
||||
Player2CorpsesMapType::iterator iter = i_player2corpse.find(guid);
|
||||
|
||||
if (iter == i_player2corpse.end())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
MANGOS_ASSERT(iter->second->GetType() != CORPSE_BONES);
|
||||
|
||||
return iter->second;
|
||||
}
|
||||
|
||||
|
|
@ -143,9 +142,10 @@ ObjectAccessor::RemoveCorpse(Corpse* corpse)
|
|||
MANGOS_ASSERT(corpse && corpse->GetType() != CORPSE_BONES);
|
||||
|
||||
Guard guard(i_corpseGuard);
|
||||
|
||||
Player2CorpsesMapType::iterator iter = i_player2corpse.find(corpse->GetOwnerGuid());
|
||||
if (iter == i_player2corpse.end())
|
||||
return;
|
||||
{ return; }
|
||||
|
||||
// build mapid*cellid -> guid_set map
|
||||
CellPair cell_pair = MaNGOS::ComputeCellPair(corpse->GetPositionX(), corpse->GetPositionY());
|
||||
|
|
@ -163,6 +163,7 @@ ObjectAccessor::AddCorpse(Corpse* corpse)
|
|||
MANGOS_ASSERT(corpse && corpse->GetType() != CORPSE_BONES);
|
||||
|
||||
Guard guard(i_corpseGuard);
|
||||
|
||||
MANGOS_ASSERT(i_player2corpse.find(corpse->GetOwnerGuid()) == i_player2corpse.end());
|
||||
i_player2corpse[corpse->GetOwnerGuid()] = corpse;
|
||||
|
||||
|
|
@ -177,22 +178,23 @@ void
|
|||
ObjectAccessor::AddCorpsesToGrid(GridPair const& gridpair, GridType& grid, Map* map)
|
||||
{
|
||||
Guard guard(i_corpseGuard);
|
||||
|
||||
for (Player2CorpsesMapType::iterator iter = i_player2corpse.begin(); iter != i_player2corpse.end(); ++iter)
|
||||
if (iter->second->GetGrid() == gridpair)
|
||||
{
|
||||
// verify, if the corpse in our instance (add only corpses which are)
|
||||
if (map->Instanceable())
|
||||
{
|
||||
if (iter->second->GetInstanceId() == map->GetInstanceId())
|
||||
{
|
||||
grid.AddWorldObject(iter->second);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
grid.AddWorldObject(iter->second);
|
||||
}
|
||||
}
|
||||
if (iter->second->GetGrid() == gridpair)
|
||||
{
|
||||
// verify, if the corpse in our instance (add only corpses which are)
|
||||
if (map->Instanceable())
|
||||
{
|
||||
if (iter->second->GetInstanceId() == map->GetInstanceId())
|
||||
{
|
||||
grid.AddWorldObject(iter->second);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
grid.AddWorldObject(iter->second);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Corpse*
|
||||
|
|
@ -216,7 +218,7 @@ ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia)
|
|||
// do not load the map if it's not loaded
|
||||
Map* map = sMapMgr.FindMap(corpse->GetMapId(), corpse->GetInstanceId());
|
||||
if (map)
|
||||
map->Remove(corpse, false);
|
||||
{ map->Remove(corpse, false); }
|
||||
|
||||
// remove corpse from DB
|
||||
corpse->DeleteFromDB();
|
||||
|
|
@ -226,14 +228,14 @@ ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia)
|
|||
// ignore bones creating option in case insignia
|
||||
if (map && (insignia ||
|
||||
(map->IsBattleGroundOrArena() ? sWorld.getConfig(CONFIG_BOOL_DEATH_BONES_BG_OR_ARENA) : sWorld.getConfig(CONFIG_BOOL_DEATH_BONES_WORLD))) &&
|
||||
!map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY()))
|
||||
!map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY()))
|
||||
{
|
||||
// Create bones, don't change Corpse
|
||||
bones = new Corpse;
|
||||
bones->Create(corpse->GetGUIDLow());
|
||||
|
||||
for (int i = 3; i < CORPSE_END; ++i) // don't overwrite guid and object type
|
||||
bones->SetUInt32Value(i, corpse->GetUInt32Value(i));
|
||||
{ bones->SetUInt32Value(i, corpse->GetUInt32Value(i)); }
|
||||
|
||||
bones->SetGrid(corpse->GetGrid());
|
||||
// bones->m_time = m_time; // don't overwrite time
|
||||
|
|
@ -248,7 +250,7 @@ ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia)
|
|||
for (int i = 0; i < EQUIPMENT_SLOT_END; ++i)
|
||||
{
|
||||
if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i))
|
||||
bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0);
|
||||
{ bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0); }
|
||||
}
|
||||
|
||||
// add bones in grid store if grid loaded where corpse placed
|
||||
|
|
@ -271,7 +273,7 @@ void ObjectAccessor::RemoveOldCorpses()
|
|||
++next;
|
||||
|
||||
if (!itr->second->IsExpired(now))
|
||||
continue;
|
||||
{ continue; }
|
||||
|
||||
ConvertCorpseForPlayer(itr->first);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ char const* ObjectGuid::GetTypeName(HighGuid high)
|
|||
case HIGHGUID_UNIT: return "Creature";
|
||||
case HIGHGUID_PET: return "Pet";
|
||||
case HIGHGUID_VEHICLE: return "Vehicle";
|
||||
case HIGHGUID_DYNAMICOBJECT:return "DynObject";
|
||||
case HIGHGUID_DYNAMICOBJECT: return "DynObject";
|
||||
case HIGHGUID_CORPSE: return "Corpse";
|
||||
case HIGHGUID_MO_TRANSPORT: return "MoTransport";
|
||||
case HIGHGUID_INSTANCE: return "InstanceID";
|
||||
|
|
@ -60,12 +60,12 @@ std::string ObjectGuid::GetString() const
|
|||
{
|
||||
std::string name;
|
||||
if (sObjectMgr.GetPlayerNameByGUID(*this, name))
|
||||
str << " " << name;
|
||||
{ str << " " << name; }
|
||||
}
|
||||
|
||||
str << " (";
|
||||
if (HasEntry())
|
||||
str << (IsPet() ? "Petnumber: " : "Entry: ") << GetEntry() << " ";
|
||||
{ str << (IsPet() ? "Petnumber: " : "Entry: ") << GetEntry() << " "; }
|
||||
str << "Guid: " << GetCounter() << ")";
|
||||
return str.str();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ struct PackedGuidReader
|
|||
|
||||
#define NUM_GUID_BYTES sizeof(uint64)
|
||||
|
||||
class ObjectGuid
|
||||
class ObjectGuid
|
||||
{
|
||||
public: // constructors
|
||||
ObjectGuid() : m_guid(0) {}
|
||||
|
|
@ -171,7 +171,7 @@ class ObjectGuid
|
|||
case HIGHGUID_PET: return TYPEID_UNIT;
|
||||
case HIGHGUID_PLAYER: return TYPEID_PLAYER;
|
||||
case HIGHGUID_GAMEOBJECT: return TYPEID_GAMEOBJECT;
|
||||
case HIGHGUID_DYNAMICOBJECT:return TYPEID_DYNAMICOBJECT;
|
||||
case HIGHGUID_DYNAMICOBJECT: return TYPEID_DYNAMICOBJECT;
|
||||
case HIGHGUID_CORPSE: return TYPEID_CORPSE;
|
||||
case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT;
|
||||
case HIGHGUID_VEHICLE: return TYPEID_UNIT;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -216,8 +216,10 @@ typedef std::pair<QuestRelationsMap::const_iterator, QuestRelationsMap::const_it
|
|||
|
||||
struct PetLevelInfo
|
||||
{
|
||||
PetLevelInfo() : health(0), mana(0), armor(0)
|
||||
{ for (int i = 0; i < MAX_STATS; ++i) stats[i] = 0; }
|
||||
PetLevelInfo() : health(0), mana(0)
|
||||
{
|
||||
for (int i = 0; i < MAX_STATS; ++i) stats[i] = 0;
|
||||
}
|
||||
|
||||
uint16 stats[MAX_STATS];
|
||||
uint16 health;
|
||||
|
|
@ -476,7 +478,10 @@ class PlayerCondition
|
|||
: m_entry(_entry), m_condition(ConditionType(_condition)), m_value1(_value1), m_value2(_value2) {}
|
||||
|
||||
// Checks correctness of values
|
||||
bool IsValid() const { return IsValid(m_entry, m_condition, m_value1, m_value2); }
|
||||
bool IsValid() const
|
||||
{
|
||||
return IsValid(m_entry, m_condition, m_value1, m_value2);
|
||||
}
|
||||
static bool IsValid(uint16 entry, ConditionType condition, uint32 value1, uint32 value2);
|
||||
|
||||
static bool CanBeUsedWithoutPlayer(uint16 entry);
|
||||
|
|
@ -546,11 +551,17 @@ class IdGenerator
|
|||
explicit IdGenerator(char const* _name) : m_name(_name), m_nextGuid(1) {}
|
||||
|
||||
public: // modifiers
|
||||
void Set(T val) { m_nextGuid = val; }
|
||||
void Set(T val)
|
||||
{
|
||||
m_nextGuid = val;
|
||||
}
|
||||
T Generate();
|
||||
|
||||
public: // accessors
|
||||
T GetNextAfterMaxUsed() const { return m_nextGuid; }
|
||||
T GetNextAfterMaxUsed() const
|
||||
{
|
||||
return m_nextGuid;
|
||||
}
|
||||
|
||||
private: // fields
|
||||
char const* m_name;
|
||||
|
|
@ -606,10 +617,10 @@ class ObjectMgr
|
|||
|
||||
PlayerInfo const* GetPlayerInfo(uint32 race, uint32 class_) const
|
||||
{
|
||||
if (race >= MAX_RACES) return NULL;
|
||||
if (class_ >= MAX_CLASSES) return NULL;
|
||||
if (race >= MAX_RACES) { return NULL; }
|
||||
if (class_ >= MAX_CLASSES) { return NULL; }
|
||||
PlayerInfo const* info = &playerInfo[race][class_];
|
||||
if (info->displayId_m == 0 || info->displayId_f == 0) return NULL;
|
||||
if (info->displayId_m == 0 || info->displayId_f == 0) { return NULL; }
|
||||
return info;
|
||||
}
|
||||
void GetPlayerLevelInfo(uint32 race, uint32 class_, uint32 level, PlayerLevelInfo* info) const;
|
||||
|
|
@ -629,13 +640,16 @@ class ObjectMgr
|
|||
QuestMap::const_iterator itr = mQuestTemplates.find(quest_id);
|
||||
return itr != mQuestTemplates.end() ? itr->second : NULL;
|
||||
}
|
||||
QuestMap const& GetQuestTemplates() const { return mQuestTemplates; }
|
||||
QuestMap const& GetQuestTemplates() const
|
||||
{
|
||||
return mQuestTemplates;
|
||||
}
|
||||
|
||||
uint32 GetQuestForAreaTrigger(uint32 Trigger_ID) const
|
||||
{
|
||||
QuestAreaTriggerMap::const_iterator itr = mQuestAreaTriggerMap.find(Trigger_ID);
|
||||
if (itr != mQuestAreaTriggerMap.end())
|
||||
return itr->second;
|
||||
{ return itr->second; }
|
||||
return 0;
|
||||
}
|
||||
bool IsTavernAreaTrigger(uint32 Trigger_ID) const
|
||||
|
|
@ -660,7 +674,7 @@ class ObjectMgr
|
|||
{
|
||||
AreaTriggerMap::const_iterator itr = mAreaTriggers.find(trigger);
|
||||
if (itr != mAreaTriggers.end())
|
||||
return &itr->second;
|
||||
{ return &itr->second; }
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -671,7 +685,7 @@ class ObjectMgr
|
|||
{
|
||||
RepRewardRateMap::const_iterator itr = m_RepRewardRateMap.find(factionId);
|
||||
if (itr != m_RepRewardRateMap.end())
|
||||
return &itr->second;
|
||||
{ return &itr->second; }
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -680,7 +694,7 @@ class ObjectMgr
|
|||
{
|
||||
RepOnKillMap::const_iterator itr = mRepOnKill.find(id);
|
||||
if (itr != mRepOnKill.end())
|
||||
return &itr->second;
|
||||
{ return &itr->second; }
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -688,7 +702,7 @@ class ObjectMgr
|
|||
{
|
||||
RepSpilloverTemplateMap::const_iterator itr = m_RepSpilloverTemplateMap.find(factionId);
|
||||
if (itr != m_RepSpilloverTemplateMap.end())
|
||||
return &itr->second;
|
||||
{ return &itr->second; }
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -697,7 +711,7 @@ class ObjectMgr
|
|||
{
|
||||
PointOfInterestMap::const_iterator itr = mPointsOfInterest.find(id);
|
||||
if (itr != mPointsOfInterest.end())
|
||||
return &itr->second;
|
||||
{ return &itr->second; }
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -721,9 +735,7 @@ class ObjectMgr
|
|||
{
|
||||
DungeonFinderRewardsMap::const_iterator itr = mDungeonFinderRewardsMap.find(level);
|
||||
if (itr != mDungeonFinderRewardsMap.end())
|
||||
{
|
||||
return &itr->second;
|
||||
}
|
||||
{ return &itr->second; }
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -761,7 +773,10 @@ class ObjectMgr
|
|||
void LoadCreatureInvolvedRelations();
|
||||
|
||||
bool LoadMangosStrings(DatabaseType& db, char const* table, int32 min_value, int32 max_value, bool extra_content);
|
||||
bool LoadMangosStrings() { return LoadMangosStrings(WorldDatabase, "mangos_string", MIN_MANGOS_STRING_ID, MAX_MANGOS_STRING_ID, false); }
|
||||
bool LoadMangosStrings()
|
||||
{
|
||||
return LoadMangosStrings(WorldDatabase, "mangos_string", MIN_MANGOS_STRING_ID, MAX_MANGOS_STRING_ID, false);
|
||||
}
|
||||
void LoadCreatureLocales();
|
||||
void LoadCreatureTemplates();
|
||||
void LoadCreatures();
|
||||
|
|
@ -826,10 +841,15 @@ class ObjectMgr
|
|||
void LoadGossipMenus();
|
||||
|
||||
void LoadVendorTemplates();
|
||||
void LoadVendors() { LoadVendors("npc_vendor", false); }
|
||||
void LoadVendors()
|
||||
{
|
||||
LoadVendors("npc_vendor", false);
|
||||
}
|
||||
void LoadTrainerTemplates();
|
||||
void LoadTrainers() { LoadTrainers("npc_trainer", false); }
|
||||
|
||||
void LoadTrainers()
|
||||
{
|
||||
LoadTrainers("npc_trainer", false);
|
||||
}
|
||||
/// @param _map Map* of the map for which to load active entities. If NULL active entities on continents are loaded
|
||||
void LoadActiveEntities(Map* _map);
|
||||
|
||||
|
|
@ -851,26 +871,63 @@ class ObjectMgr
|
|||
void SetHighestGuids();
|
||||
|
||||
// used for set initial guid counter for map local guids
|
||||
uint32 GetFirstTemporaryCreatureLowGuid() const { return m_FirstTemporaryCreatureGuid; }
|
||||
uint32 GetFirstTemporaryGameObjectLowGuid() const { return m_FirstTemporaryGameObjectGuid; }
|
||||
uint32 GetFirstTemporaryCreatureLowGuid() const
|
||||
{
|
||||
return m_FirstTemporaryCreatureGuid;
|
||||
}
|
||||
uint32 GetFirstTemporaryGameObjectLowGuid() const
|
||||
{
|
||||
return m_FirstTemporaryGameObjectGuid;
|
||||
}
|
||||
|
||||
// used in .npc add/.gobject add commands for adding static spawns
|
||||
uint32 GenerateStaticCreatureLowGuid() { if (m_StaticCreatureGuids.GetNextAfterMaxUsed() >= m_FirstTemporaryCreatureGuid) return 0; return m_StaticCreatureGuids.Generate(); }
|
||||
uint32 GenerateStaticGameObjectLowGuid() { if (m_StaticGameObjectGuids.GetNextAfterMaxUsed() >= m_FirstTemporaryGameObjectGuid) return 0; return m_StaticGameObjectGuids.Generate(); }
|
||||
uint32 GenerateStaticCreatureLowGuid()
|
||||
{
|
||||
if (m_StaticCreatureGuids.GetNextAfterMaxUsed() >= m_FirstTemporaryCreatureGuid)
|
||||
{ return 0; }
|
||||
return m_StaticCreatureGuids.Generate();
|
||||
}
|
||||
uint32 GenerateStaticGameObjectLowGuid()
|
||||
{
|
||||
if (m_StaticGameObjectGuids.GetNextAfterMaxUsed() >= m_FirstTemporaryGameObjectGuid)
|
||||
{ return 0; }
|
||||
return m_StaticGameObjectGuids.Generate();
|
||||
}
|
||||
|
||||
uint32 GeneratePlayerLowGuid() { return m_CharGuids.Generate(); }
|
||||
uint32 GenerateItemLowGuid() { return m_ItemGuids.Generate(); }
|
||||
uint32 GenerateCorpseLowGuid() { return m_CorpseGuids.Generate(); }
|
||||
uint32 GeneratePlayerLowGuid()
|
||||
{
|
||||
return m_CharGuids.Generate();
|
||||
}
|
||||
uint32 GenerateItemLowGuid()
|
||||
{
|
||||
return m_ItemGuids.Generate();
|
||||
}
|
||||
uint32 GenerateCorpseLowGuid()
|
||||
{
|
||||
return m_CorpseGuids.Generate();
|
||||
}
|
||||
uint32 GenerateInstanceLowGuid() { return m_InstanceGuids.Generate(); }
|
||||
uint32 GenerateGroupLowGuid() { return m_GroupGuids.Generate(); }
|
||||
|
||||
uint32 GenerateArenaTeamId() { return m_ArenaTeamIds.Generate(); }
|
||||
uint32 GenerateAuctionID() { return m_AuctionIds.Generate(); }
|
||||
uint32 GenerateAuctionID()
|
||||
{
|
||||
return m_AuctionIds.Generate();
|
||||
}
|
||||
uint64 GenerateEquipmentSetGuid() { return m_EquipmentSetIds.Generate(); }
|
||||
uint32 GenerateGuildId() { return m_GuildIds.Generate(); }
|
||||
uint32 GenerateGuildId()
|
||||
{
|
||||
return m_GuildIds.Generate();
|
||||
}
|
||||
// uint32 GenerateItemTextID() { return m_ItemGuids.Generate(); }
|
||||
uint32 GenerateMailID() { return m_MailIds.Generate(); }
|
||||
uint32 GeneratePetNumber() { return m_PetNumbers.Generate(); }
|
||||
uint32 GenerateMailID()
|
||||
{
|
||||
return m_MailIds.Generate();
|
||||
}
|
||||
uint32 GeneratePetNumber()
|
||||
{
|
||||
return m_PetNumbers.Generate();
|
||||
}
|
||||
|
||||
MailLevelReward const* GetMailLevelReward(uint32 level, uint32 raceMask)
|
||||
{
|
||||
|
|
@ -888,7 +945,7 @@ class ObjectMgr
|
|||
CreatureDataPair const* GetCreatureDataPair(uint32 guid) const
|
||||
{
|
||||
CreatureDataMap::const_iterator itr = mCreatureDataMap.find(guid);
|
||||
if (itr == mCreatureDataMap.end()) return NULL;
|
||||
if (itr == mCreatureDataMap.end()) { return NULL; }
|
||||
return &*itr;
|
||||
}
|
||||
|
||||
|
|
@ -898,7 +955,10 @@ class ObjectMgr
|
|||
return dataPair ? &dataPair->second : NULL;
|
||||
}
|
||||
|
||||
CreatureData& NewOrExistCreatureData(uint32 guid) { return mCreatureDataMap[guid]; }
|
||||
CreatureData& NewOrExistCreatureData(uint32 guid)
|
||||
{
|
||||
return mCreatureDataMap[guid];
|
||||
}
|
||||
void DeleteCreatureData(uint32 guid);
|
||||
|
||||
template<typename Worker>
|
||||
|
|
@ -906,13 +966,13 @@ class ObjectMgr
|
|||
{
|
||||
for (CreatureDataMap::const_iterator itr = mCreatureDataMap.begin(); itr != mCreatureDataMap.end(); ++itr)
|
||||
if (worker(*itr))
|
||||
break;
|
||||
{ break; }
|
||||
}
|
||||
|
||||
CreatureLocale const* GetCreatureLocale(uint32 entry) const
|
||||
{
|
||||
CreatureLocaleMap::const_iterator itr = mCreatureLocaleMap.find(entry);
|
||||
if (itr == mCreatureLocaleMap.end()) return NULL;
|
||||
if (itr == mCreatureLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
|
|
@ -921,14 +981,14 @@ class ObjectMgr
|
|||
GameObjectLocale const* GetGameObjectLocale(uint32 entry) const
|
||||
{
|
||||
GameObjectLocaleMap::const_iterator itr = mGameObjectLocaleMap.find(entry);
|
||||
if (itr == mGameObjectLocaleMap.end()) return NULL;
|
||||
if (itr == mGameObjectLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
ItemLocale const* GetItemLocale(uint32 entry) const
|
||||
{
|
||||
ItemLocaleMap::const_iterator itr = mItemLocaleMap.find(entry);
|
||||
if (itr == mItemLocaleMap.end()) return NULL;
|
||||
if (itr == mItemLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
|
|
@ -937,7 +997,7 @@ class ObjectMgr
|
|||
QuestLocale const* GetQuestLocale(uint32 entry) const
|
||||
{
|
||||
QuestLocaleMap::const_iterator itr = mQuestLocaleMap.find(entry);
|
||||
if (itr == mQuestLocaleMap.end()) return NULL;
|
||||
if (itr == mQuestLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
|
|
@ -946,39 +1006,39 @@ class ObjectMgr
|
|||
NpcTextLocale const* GetNpcTextLocale(uint32 entry) const
|
||||
{
|
||||
NpcTextLocaleMap::const_iterator itr = mNpcTextLocaleMap.find(entry);
|
||||
if (itr == mNpcTextLocaleMap.end()) return NULL;
|
||||
if (itr == mNpcTextLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
typedef std::string NpcTextArray[MAX_GOSSIP_TEXT_OPTIONS];
|
||||
void GetNpcTextLocaleStringsAll(uint32 entry, int32 loc_idx, NpcTextArray* text0_Ptr, NpcTextArray* text1_Ptr) const;
|
||||
void GetNpcTextLocaleStringsAll(uint32 entry, int32 loc_idx, NpcTextArray *text0_Ptr, NpcTextArray* text1_Ptr) const;
|
||||
void GetNpcTextLocaleStrings0(uint32 entry, int32 loc_idx, std::string* text0_0_Ptr, std::string* text1_0_Ptr) const;
|
||||
|
||||
PageTextLocale const* GetPageTextLocale(uint32 entry) const
|
||||
{
|
||||
PageTextLocaleMap::const_iterator itr = mPageTextLocaleMap.find(entry);
|
||||
if (itr == mPageTextLocaleMap.end()) return NULL;
|
||||
if (itr == mPageTextLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
GossipMenuItemsLocale const* GetGossipMenuItemsLocale(uint32 entry) const
|
||||
{
|
||||
GossipMenuItemsLocaleMap::const_iterator itr = mGossipMenuItemsLocaleMap.find(entry);
|
||||
if (itr == mGossipMenuItemsLocaleMap.end()) return NULL;
|
||||
if (itr == mGossipMenuItemsLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
PointOfInterestLocale const* GetPointOfInterestLocale(uint32 poi_id) const
|
||||
{
|
||||
PointOfInterestLocaleMap::const_iterator itr = mPointOfInterestLocaleMap.find(poi_id);
|
||||
if (itr == mPointOfInterestLocaleMap.end()) return NULL;
|
||||
if (itr == mPointOfInterestLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
GameObjectDataPair const* GetGODataPair(uint32 guid) const
|
||||
{
|
||||
GameObjectDataMap::const_iterator itr = mGameObjectDataMap.find(guid);
|
||||
if (itr == mGameObjectDataMap.end()) return NULL;
|
||||
if (itr == mGameObjectDataMap.end()) { return NULL; }
|
||||
return &*itr;
|
||||
}
|
||||
|
||||
|
|
@ -988,7 +1048,10 @@ class ObjectMgr
|
|||
return dataPair ? &dataPair->second : NULL;
|
||||
}
|
||||
|
||||
GameObjectData& NewGOData(uint32 guid) { return mGameObjectDataMap[guid]; }
|
||||
GameObjectData& NewGOData(uint32 guid)
|
||||
{
|
||||
return mGameObjectDataMap[guid];
|
||||
}
|
||||
void DeleteGOData(uint32 guid);
|
||||
|
||||
template<typename Worker>
|
||||
|
|
@ -996,21 +1059,20 @@ class ObjectMgr
|
|||
{
|
||||
for (GameObjectDataMap::const_iterator itr = mGameObjectDataMap.begin(); itr != mGameObjectDataMap.end(); ++itr)
|
||||
if (worker(*itr)) // arg = GameObjectDataPair
|
||||
break;
|
||||
{ break; }
|
||||
}
|
||||
|
||||
MangosStringLocale const* GetMangosStringLocale(int32 entry) const
|
||||
{
|
||||
MangosStringLocaleMap::const_iterator itr = mMangosStringLocaleMap.find(entry);
|
||||
if (itr == mMangosStringLocaleMap.end()) return NULL;
|
||||
if (itr == mMangosStringLocaleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
uint32 GetLoadedStringsCount(int32 minEntry) const
|
||||
{
|
||||
std::map<int32, uint32>::const_iterator itr = m_loadedStringCount.find(minEntry);
|
||||
if (itr != m_loadedStringCount.end())
|
||||
return itr->second;
|
||||
{ return itr->second; }
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1056,12 +1118,15 @@ class ObjectMgr
|
|||
GameTele const* GetGameTele(uint32 id) const
|
||||
{
|
||||
GameTeleMap::const_iterator itr = m_GameTeleMap.find(id);
|
||||
if (itr == m_GameTeleMap.end()) return NULL;
|
||||
if (itr == m_GameTeleMap.end()) { return NULL; }
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
GameTele const* GetGameTele(const std::string& name) const;
|
||||
GameTeleMap const& GetGameTeleMap() const { return m_GameTeleMap; }
|
||||
GameTeleMap const& GetGameTeleMap() const
|
||||
{
|
||||
return m_GameTeleMap;
|
||||
}
|
||||
bool AddGameTele(GameTele& data);
|
||||
bool DeleteGameTele(const std::string& name);
|
||||
|
||||
|
|
@ -1069,7 +1134,7 @@ class ObjectMgr
|
|||
{
|
||||
CacheNpcTextIdMap::const_iterator iter = m_mCacheNpcTextIdMap.find(entry);
|
||||
if (iter == m_mCacheNpcTextIdMap.end())
|
||||
return 0;
|
||||
{ return 0; }
|
||||
|
||||
return iter->second;
|
||||
}
|
||||
|
|
@ -1078,7 +1143,7 @@ class ObjectMgr
|
|||
{
|
||||
CacheTrainerSpellMap::const_iterator iter = m_mCacheTrainerSpellMap.find(entry);
|
||||
if (iter == m_mCacheTrainerSpellMap.end())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return &iter->second;
|
||||
}
|
||||
|
|
@ -1087,7 +1152,7 @@ class ObjectMgr
|
|||
{
|
||||
CacheTrainerSpellMap::const_iterator iter = m_mCacheTrainerTemplateSpellMap.find(entry);
|
||||
if (iter == m_mCacheTrainerTemplateSpellMap.end())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return &iter->second;
|
||||
}
|
||||
|
|
@ -1096,7 +1161,7 @@ class ObjectMgr
|
|||
{
|
||||
CacheVendorItemMap::const_iterator iter = m_mCacheVendorItemMap.find(entry);
|
||||
if (iter == m_mCacheVendorItemMap.end())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return &iter->second;
|
||||
}
|
||||
|
|
@ -1105,7 +1170,7 @@ class ObjectMgr
|
|||
{
|
||||
CacheVendorItemMap::const_iterator iter = m_mCacheVendorTemplateItemMap.find(entry);
|
||||
if (iter == m_mCacheVendorTemplateItemMap.end())
|
||||
return NULL;
|
||||
{ return NULL; }
|
||||
|
||||
return &iter->second;
|
||||
}
|
||||
|
|
@ -1190,14 +1255,16 @@ class ObjectMgr
|
|||
return m_GOQuestInvolvedRelations.equal_range(entry);
|
||||
}
|
||||
|
||||
QuestRelationsMap& GetCreatureQuestRelationsMap() { return m_CreatureQuestRelations; }
|
||||
|
||||
QuestRelationsMap& GetCreatureQuestRelationsMap()
|
||||
{
|
||||
return m_CreatureQuestRelations;
|
||||
}
|
||||
uint32 GetModelForRace(uint32 sourceModelId, uint32 racemask);
|
||||
/**
|
||||
* \brief: Data returned is used to compute health, mana, armor, damage of creatures. May be NULL.
|
||||
* \param uint32 level creature level
|
||||
* \param uint32 unitClass creature class, related to CLASSMASK_ALL_CREATURES
|
||||
* \param uint32 expansion creature expansion (we could have creature exp = 0 for wotlk as well as exp = 1 or exp = 2)
|
||||
* \param uint32 expansion creature expansion (we could have creature exp = 0 for vanilla, exp = 1 for tbc, exp = 2 for wotlk)
|
||||
* \return: CreatureClassLvlStats const* or NULL
|
||||
*
|
||||
* Description: GetCreatureClassLvlStats give fast access to creature stats data.
|
||||
|
|
@ -1358,7 +1425,7 @@ class ObjectMgr
|
|||
NpcTextLocaleMap mNpcTextLocaleMap;
|
||||
PageTextLocaleMap mPageTextLocaleMap;
|
||||
MangosStringLocaleMap mMangosStringLocaleMap;
|
||||
std::map<int32 /*minEntryOfBracket*/, uint32 /*count*/> m_loadedStringCount;
|
||||
std::map < int32 /*minEntryOfBracket*/, uint32 /*count*/ > m_loadedStringCount;
|
||||
GossipMenuItemsLocaleMap mGossipMenuItemsLocaleMap;
|
||||
PointOfInterestLocaleMap mPointOfInterestLocaleMap;
|
||||
DungeonEncounterMap m_DungeonEncounters;
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@ Map::Add(T* obj)
|
|||
obj->SetMap(this);
|
||||
|
||||
Cell cell(p);
|
||||
if (obj->isActiveObject())
|
||||
if (obj->IsActiveObject())
|
||||
{ EnsureGridLoadedAtEnter(cell); }
|
||||
else
|
||||
{ EnsureGridCreated(GridPair(cell.GridX(), cell.GridY())); }
|
||||
|
|
@ -369,7 +369,7 @@ Map::Add(T* obj)
|
|||
AddToGrid(obj, grid, cell);
|
||||
obj->AddToWorld();
|
||||
|
||||
if (obj->isActiveObject())
|
||||
if (obj->IsActiveObject())
|
||||
{ AddToActive(obj); }
|
||||
|
||||
DEBUG_LOG("%s enters grid[%u,%u]", obj->GetGuidStr().c_str(), cell.GridX(), cell.GridY());
|
||||
|
|
@ -685,7 +685,7 @@ Map::Remove(T* obj, bool remove)
|
|||
NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
|
||||
MANGOS_ASSERT(grid != NULL);
|
||||
|
||||
if (obj->isActiveObject())
|
||||
if (obj->IsActiveObject())
|
||||
{ RemoveFromActive(obj); }
|
||||
|
||||
if (remove)
|
||||
|
|
@ -776,7 +776,7 @@ bool Map::CreatureCellRelocation(Creature* c, const Cell& new_cell)
|
|||
Cell const& old_cell = c->GetCurrentCell();
|
||||
if (old_cell.DiffGrid(new_cell))
|
||||
{
|
||||
if (!c->isActiveObject() && !loaded(new_cell.gridPair()))
|
||||
if (!c->IsActiveObject() && !loaded(new_cell.gridPair()))
|
||||
{
|
||||
DEBUG_FILTER_LOG(LOG_FILTER_CREATURE_MOVES, "Creature (GUID: %u Entry: %u) attempt move from grid[%u,%u]cell[%u,%u] to unloaded grid[%u,%u]cell[%u,%u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ void LoadHelper(CellGuidSet const& guid_set, CellPair& cell, GridRefManager<T>&
|
|||
addUnitState(obj, cell);
|
||||
obj->SetMap(map);
|
||||
obj->AddToWorld();
|
||||
if (obj->isActiveObject())
|
||||
if (obj->IsActiveObject())
|
||||
map->AddToActive(obj);
|
||||
|
||||
obj->GetViewPoint().Event_AddedToWorld(&grid);
|
||||
|
|
@ -167,7 +167,7 @@ void LoadHelper(CellCorpseSet const& cell_corpses, CellPair& cell, CorpseMapType
|
|||
addUnitState(obj, cell);
|
||||
obj->SetMap(map);
|
||||
obj->AddToWorld();
|
||||
if (obj->isActiveObject())
|
||||
if (obj->IsActiveObject())
|
||||
map->AddToActive(obj);
|
||||
|
||||
++count;
|
||||
|
|
|
|||
|
|
@ -68,10 +68,10 @@ namespace Movement
|
|||
if (transportInfo)
|
||||
transportInfo->GetLocalPosition(real_position.x, real_position.y, real_position.z, real_position.orientation);
|
||||
|
||||
// there is a big chane that current position is unknown if current state is not finalized, need compute it
|
||||
// there is a big chance that current position is unknown if current state is not finalized, need compute it
|
||||
// this also allows calculate spline position and update map position in much greater intervals
|
||||
if (!move_spline.Finalized() && !transportInfo)
|
||||
real_position = move_spline.ComputePosition();
|
||||
{ real_position = move_spline.ComputePosition(); }
|
||||
|
||||
if (args.path.empty())
|
||||
{
|
||||
|
|
@ -92,10 +92,10 @@ namespace Movement
|
|||
moveFlags |= MOVEFLAG_FORWARD;
|
||||
|
||||
if (args.velocity == 0.f)
|
||||
args.velocity = unit.GetSpeed(SelectSpeedType(moveFlags));
|
||||
{ args.velocity = unit.GetSpeed(SelectSpeedType(moveFlags)); }
|
||||
|
||||
if (!args.Validate(&unit))
|
||||
return 0;
|
||||
{ return 0; }
|
||||
|
||||
unit.m_movementInfo.SetMovementFlags((MovementFlags)moveFlags);
|
||||
move_spline.Initialize(args);
|
||||
|
|
@ -132,7 +132,7 @@ namespace Movement
|
|||
if (transportInfo)
|
||||
transportInfo->GetLocalPosition(real_position.x, real_position.y, real_position.z, real_position.orientation);
|
||||
|
||||
// there is a big chane that current position is unknown if current state is not finalized, need compute it
|
||||
// there is a big chance that current position is unknown if current state is not finalized, need compute it
|
||||
// this also allows calculate spline position and update map position in much greater intervals
|
||||
if (!move_spline.Finalized() && !transportInfo)
|
||||
real_position = move_spline.ComputePosition();
|
||||
|
|
@ -143,7 +143,7 @@ namespace Movement
|
|||
MoveTo(real_position);
|
||||
}
|
||||
|
||||
// corrent first vertex
|
||||
// current first vertex
|
||||
args.path[0] = real_position;
|
||||
|
||||
args.flags = MoveSplineFlag::Done;
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ namespace Movement
|
|||
* @brief Initializes and launches spline movement
|
||||
*
|
||||
*/
|
||||
class MANGOS_DLL_SPEC MoveSplineInit
|
||||
class MoveSplineInit
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -61,7 +61,10 @@ namespace Movement
|
|||
*/
|
||||
int32 Launch();
|
||||
|
||||
/* Stop any creature movement */
|
||||
/**
|
||||
* @brief Stop any creature movement
|
||||
*
|
||||
*/
|
||||
void Stop();
|
||||
|
||||
/* Adds movement by parabolic trajectory
|
||||
|
|
@ -75,7 +78,7 @@ namespace Movement
|
|||
*/
|
||||
void SetAnimation(AnimType anim);
|
||||
|
||||
/**
|
||||
/*
|
||||
* @brief Adds final facing animation
|
||||
* sets unit's facing to specified point/angle after all path done.
|
||||
* you can have only one final facing: previous will be overriden
|
||||
|
|
@ -170,7 +173,9 @@ namespace Movement
|
|||
/* Sets ExitVehicle flag
|
||||
*/
|
||||
void SetExitVehicle();
|
||||
|
||||
PointsArray& Path() { return args.path; }
|
||||
|
||||
protected:
|
||||
|
||||
MoveSplineInitArgs args; /**< TODO */
|
||||
|
|
|
|||
|
|
@ -80,6 +80,11 @@ namespace Movement
|
|||
*/
|
||||
struct MoveSplineInitArgs
|
||||
{
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param path_capacity
|
||||
*/
|
||||
MoveSplineInitArgs(size_t path_capacity = 16) : path_Idx_offset(0),
|
||||
velocity(0.f), parabolic_amplitude(0.f), time_perc(0.f), splineId(0), initialOrientation(0.f)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ namespace LuaGameObject
|
|||
*/
|
||||
int IsActive(lua_State* L, GameObject* go)
|
||||
{
|
||||
Eluna::Push(L, go->isActiveObject());
|
||||
Eluna::Push(L, go->IsActiveObject());
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue