aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp4
-rwxr-xr-xsrc/server/game/Chat/Chat.cpp3
-rw-r--r--src/server/game/Chat/Chat.h2
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.h7
-rwxr-xr-xsrc/server/game/Miscellaneous/Formulas.h7
-rwxr-xr-xsrc/server/game/Miscellaneous/SharedDefines.h5
-rwxr-xr-xsrc/server/game/Movement/MotionMaster.h4
-rw-r--r--src/server/game/Server/WorldSession.cpp33
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp3
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp7
-rw-r--r--src/server/game/Spells/SpellInfo.cpp3
-rw-r--r--src/server/game/Spells/SpellInfo.h2
-rw-r--r--src/server/game/Spells/SpellMgr.cpp1
-rw-r--r--src/server/game/World/World.cpp6
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp48
15 files changed, 86 insertions, 49 deletions
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index f1a2e22b34b..f6b3d133cb9 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -408,13 +408,17 @@ void Battlefield::PlayerAcceptInviteToWar(Player* player)
void Battlefield::TeamCastSpell(TeamId team, int32 spellId)
{
if (spellId > 0)
+ {
for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
if (Player* player = sObjectAccessor->FindPlayer(*itr))
player->CastSpell(player, uint32(spellId), true);
+ }
else
+ {
for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
if (Player* player = sObjectAccessor->FindPlayer(*itr))
player->RemoveAuraFromStack(uint32(-spellId));
+ }
}
void Battlefield::BroadcastPacketToZone(WorldPacket& data) const
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index b120cd5e978..4571f261587 100755
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -63,7 +63,7 @@ ChatCommand* ChatHandler::getCommandTable()
// cache for commands, needed because some commands are loaded dynamically through ScriptMgr
// cache is never freed and will show as a memory leak in diagnostic tools
// can't use vector as vector storage is implementation-dependent, eg, there can be alignment gaps between elements
- static ChatCommand* commandTableCache = 0;
+ static ChatCommand* commandTableCache = NULL;
if (LoadCommandTable())
{
@@ -96,7 +96,6 @@ ChatCommand* ChatHandler::getCommandTable()
std::string name = fields[0].GetString();
SetDataForCommandInTable(commandTableCache, name.c_str(), fields[1].GetUInt8(), fields[2].GetString(), name);
-
}
while (result->NextRow());
}
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index b583d749301..0597ab216ec 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -115,7 +115,7 @@ class ChatHandler
bool extractPlayerTarget(char* args, Player** player, uint64* player_guid = NULL, std::string* player_name = NULL);
std::string playerLink(std::string const& name) const { return m_session ? "|cffffffff|Hplayer:"+name+"|h["+name+"]|h|r" : name; }
- std::string GetNameLink(Player* chr) const { return playerLink(chr->GetName()); }
+ std::string GetNameLink(Player const* chr) const { return playerLink(chr->GetName()); }
GameObject* GetNearbyGameObject();
GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid, uint32 entry);
diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h
index 4ad8663a17a..3f1567c74ee 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.h
+++ b/src/server/game/Entities/Vehicle/Vehicle.h
@@ -20,9 +20,11 @@
#define __TRINITY_VEHICLE_H
#include "ObjectDefines.h"
+#include "Object.h"
#include "VehicleDefines.h"
struct VehicleEntry;
+
class Unit;
typedef std::set<uint64> GuidSet;
@@ -58,6 +60,9 @@ class Vehicle : public TransportBase
void TeleportVehicle(float x, float y, float z, float ang);
bool IsVehicleInUse() { return Seats.begin() != Seats.end(); }
+ void SetLastShootPos(Position const& pos) { m_lastShootPos.Relocate(pos); }
+ Position GetLastShootPos() { return m_lastShootPos; }
+
SeatMap Seats;
VehicleSeatEntry const* GetSeatForPassenger(Unit* passenger);
@@ -77,5 +82,7 @@ class Vehicle : public TransportBase
GuidSet vehiclePlayers;
uint32 _usableSeatNum; // Number of seats that match VehicleSeatEntry::UsableByPlayer, used for proper display flags
uint32 _creatureEntry; // Can be different than me->GetBase()->GetEntry() in case of players
+
+ Position m_lastShootPos;
};
#endif
diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
index 212c391d186..3cf4b1f96b7 100755
--- a/src/server/game/Miscellaneous/Formulas.h
+++ b/src/server/game/Miscellaneous/Formulas.h
@@ -38,7 +38,8 @@ namespace Trinity
{
return uint32(ceil(hk_honor_at_level_f(level, multiplier)));
}
- }
+ } // namespace Trinity::Honor
+
namespace XP
{
inline uint8 GetGrayLevel(uint8 pl_level)
@@ -221,7 +222,7 @@ namespace Trinity
sScriptMgr->OnGroupRateCalculation(rate, count, isRaid);
return rate;
}
- }
-}
+ } // namespace Trinity::XP
+} // namespace Trinity
#endif
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 908cfe41404..b5b7bb4a6cf 100755
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -594,7 +594,7 @@ enum SpellAttr8
SPELL_ATTR8_RAID_MARKER = 0x04000000, // 26 probably spell no need learn to cast
SPELL_ATTR8_UNK27 = 0x08000000, // 27
SPELL_ATTR8_NOT_IN_BG_OR_ARENA = 0x10000000, // 28 not allow to cast or deactivate currently active effect, not sure about Fast Track
- SPELL_ATTR8_MASTERY = 0x20000000, // 29
+ SPELL_ATTR8_MASTERY_SPECIALIZATION = 0x20000000, // 29
SPELL_ATTR8_UNK30 = 0x40000000, // 30
SPELL_ATTR8_UNK31 = 0x80000000 // 31
};
@@ -3436,7 +3436,8 @@ enum SummonType
enum EventId
{
- EVENT_CHARGE = 1003
+ EVENT_CHARGE = 1003,
+ EVENT_JUMP = 1004
};
enum ResponseCodes
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 8d7fdee7ad2..7037d1316f1 100755
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -163,7 +163,9 @@ class MotionMaster //: private std::stack<MovementGenerator *>
void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE);
void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ);
void MoveJumpTo(float angle, float speedXY, float speedZ);
- void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = 0);
+ void MoveJump(Position const& pos, float speedXY, float speedZ, uint32 id = EVENT_JUMP)
+ { MoveJump(pos.m_positionX, pos.m_positionY, pos.m_positionZ, speedXY, speedZ, id); };
+ void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = EVENT_JUMP);
void MoveFall(uint32 id = 0);
void MoveSeekAssistance(float x, float y, float z);
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 3bdd8e54fc0..72e1a472c06 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -98,18 +98,29 @@ bool WorldSessionFilter::Process(WorldPacket* packet)
/// WorldSession constructor
WorldSession::WorldSession(uint32 id, WorldSocket* sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
-m_muteTime(mute_time), m_timeOutTime(0), _player(NULL), m_Socket(sock),
-_security(sec), _accountId(id), m_expansion(expansion), _logoutTime(0),
-m_inQueue(false), m_playerLoading(false), m_playerLogout(false),
-m_playerRecentlyLogout(false), m_playerSave(false),
-m_sessionDbcLocale(sWorld->GetAvailableDbcLocale(locale)),
-m_sessionDbLocaleIndex(locale),
-m_latency(0), m_TutorialsChanged(false), recruiterId(recruiter),
-isRecruiter(isARecruiter), timeLastWhoCommand(0)
+ m_muteTime(mute_time),
+ m_timeOutTime(0),
+ _player(NULL),
+ m_Socket(sock),
+ _security(sec),
+ _accountId(id),
+ m_expansion(expansion),
+ _warden(NULL),
+ _logoutTime(0),
+ m_inQueue(false),
+ m_playerLoading(false),
+ m_playerLogout(false),
+ m_playerRecentlyLogout(false),
+ m_playerSave(false),
+ m_sessionDbcLocale(sWorld->GetAvailableDbcLocale(locale)),
+ m_sessionDbLocaleIndex(locale),
+ m_latency(0),
+ m_TutorialsChanged(false),
+ _filterAddonMessages(false),
+ recruiterId(recruiter),
+ isRecruiter(isARecruiter),
+ timeLastWhoCommand(0)
{
- _warden = NULL;
- _filterAddonMessages = false;
-
if (sock)
{
m_Address = sock->GetRemoteAddress();
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 6a282d15241..1c41f1fb2ff 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -470,9 +470,8 @@ void AuraEffect::GetApplicationList(std::list<AuraApplication*> & applicationLis
int32 AuraEffect::CalculateAmount(Unit* caster)
{
- int32 amount;
// default amount calculation
- amount = m_spellInfo->Effects[m_effIndex].CalcValue(caster, &m_baseAmount, GetBase()->GetOwner()->ToUnit());
+ int32 amount = m_spellInfo->Effects[m_effIndex].CalcValue(caster, &m_baseAmount, GetBase()->GetOwner()->ToUnit());
// check item enchant aura cast
if (!amount && caster)
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 5beaa49c050..d66d60fece9 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1725,6 +1725,9 @@ void Spell::SelectImplicitTrajTargets()
trajDst.Relocate(x, y, z, m_caster->GetOrientation());
m_targets.ModDst(trajDst);
}
+
+ if (Vehicle * veh = m_caster->GetVehicleKit())
+ veh->SetLastShootPos(*m_targets.GetDstPos());
}
void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex)
@@ -2795,11 +2798,15 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint8 effMask)
// trigger linked auras remove/apply
// TODO: remove/cleanup this, as this table is not documented and people are doing stupid things with it
if (std::vector<int32> const* spellTriggered = sSpellMgr->GetSpellLinked(m_spellInfo->Id + SPELL_LINK_HIT))
+ {
for (std::vector<int32>::const_iterator i = spellTriggered->begin(); i != spellTriggered->end(); ++i)
+ {
if (*i < 0)
unit->RemoveAurasDueToSpell(-(*i));
else
unit->CastSpell(unit, *i, true, 0, 0, m_caster->GetGUID());
+ }
+ }
}
void Spell::DoAllEffectOnTarget(GOTargetInfo* target)
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 7054d866e6f..9faf9a1f850 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -15,12 +15,13 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "SpellAuraDefines.h"
#include "SpellInfo.h"
+#include "SpellAuraDefines.h"
#include "SpellMgr.h"
#include "Spell.h"
#include "DBCStores.h"
#include "ConditionMgr.h"
+#include "Object.h"
uint32 GetTargetFlagMask(SpellTargetObjectTypes objType)
{
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index d8115569f25..636ef607e2b 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -21,13 +21,13 @@
#include "SharedDefines.h"
#include "Util.h"
#include "DBCStructure.h"
-#include "Object.h"
class Unit;
class Player;
class Item;
class Spell;
class SpellInfo;
+class WorldObject;
struct SpellChainNode;
struct SpellTargetPosition;
struct SpellDurationEntry;
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index a596d4bf076..600b9dc65a3 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -1292,6 +1292,7 @@ void SpellMgr::LoadSpellRanks()
mSpellInfoMap[addedSpell]->ChainEntry = &mSpellChains[addedSpell];
prevRank = addedSpell;
++itr;
+
if (itr == rankChain.end())
{
mSpellChains[addedSpell].next = NULL;
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index e2cc4ff2c43..e301367ce43 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -223,7 +223,7 @@ void World::AddSession(WorldSession* s)
void World::AddSession_(WorldSession* s)
{
- ASSERT (s);
+ ASSERT(s);
//NOTE - Still there is race condition in WorldSession* being used in the Sockets
@@ -258,7 +258,7 @@ void World::AddSession_(WorldSession* s)
uint32 Sessions = GetActiveAndQueuedSessionCount();
uint32 pLimit = GetPlayerAmountLimit();
- uint32 QueueSize = GetQueuedSessionCount(); //number of players in the queue
+ uint32 QueueSize = GetQueuedSessionCount(); //number of players in the queue
//so we don't count the user trying to
//login as a session and queue the socket that we are using
@@ -267,7 +267,7 @@ void World::AddSession_(WorldSession* s)
if (pLimit > 0 && Sessions >= pLimit && AccountMgr::IsPlayerAccount(s->GetSecurity()) && !HasRecentlyDisconnected(s))
{
- AddQueuedPlayer (s);
+ AddQueuedPlayer(s);
UpdateMaxSessionCounters();
sLog->outInfo(LOG_FILTER_GENERAL, "PlayerQueue: Account id %u is in Queue Position (%u).", s->GetAccountId(), ++QueueSize);
return;
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index 5bc84bed28a..259845d82ae 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -239,40 +239,44 @@ public:
if (!target)
{
- handler->PSendSysMessage("%s%s|r", "|cff33ffff", "You must select target.");
+ handler->PSendSysMessage("%s%s|r", "|cff33ffff", "You must select a target.");
return true;
}
- uint32 guildLow = target->GetDBTableGUIDLow();
+ uint32 guidLow = target->GetDBTableGUIDLow();
+ if (guidLow == 0)
+ {
+ handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target is not saved to DB.");
+ return true;
+ }
- if (target->GetCreatureAddon())
+ CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(guidLow);
+ if (!addon || addon->path_id == 0)
{
- if (target->GetCreatureAddon()->path_id != 0)
- {
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
+ handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target does not have a loaded path.");
+ return true;
+ }
- stmt->setUInt32(0, guildLow);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
- WorldDatabase.Execute(stmt);
+ stmt->setUInt32(0, guidLow);
+
+ WorldDatabase.Execute(stmt);
- target->UpdateWaypointID(0);
+ target->UpdateWaypointID(0);
- stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
- stmt->setUInt8(0, uint8(IDLE_MOTION_TYPE));
- stmt->setUInt32(1, guildLow);
+ stmt->setUInt8(0, uint8(IDLE_MOTION_TYPE));
+ stmt->setUInt32(1, guidLow);
- WorldDatabase.Execute(stmt);
+ WorldDatabase.Execute(stmt);
- target->LoadPath(0);
- target->SetDefaultMovementType(IDLE_MOTION_TYPE);
- target->GetMotionMaster()->MoveTargetedHome();
- target->GetMotionMaster()->Initialize();
- target->MonsterSay("Path unloaded.", 0, 0);
- return true;
- }
- handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target have no loaded path.");
- }
+ target->LoadPath(0);
+ target->SetDefaultMovementType(IDLE_MOTION_TYPE);
+ target->GetMotionMaster()->MoveTargetedHome();
+ target->GetMotionMaster()->Initialize();
+ target->MonsterSay("Path unloaded.", 0, 0);
return true;
}