--HG--
branch : trunk
This commit is contained in:
tartalo
2009-11-01 00:07:18 +01:00
8 changed files with 106 additions and 105 deletions
+2 -1
View File
@@ -528,9 +528,10 @@ void AuctionHouseObject::Update()
} while (result->NextRow()); } while (result->NextRow());
delete result; delete result;
vector<uint32>::iterator iter = expiredAuctions.begin();
while (!expiredAuctions.empty()) while (!expiredAuctions.empty())
{ {
vector<uint32>::iterator iter = expiredAuctions.begin();
// from auctionhousehandler.cpp, creates auction pointer & player pointer // from auctionhousehandler.cpp, creates auction pointer & player pointer
AuctionEntry* auction = GetAuction(*iter); AuctionEntry* auction = GetAuction(*iter);
+32 -32
View File
@@ -703,7 +703,7 @@ void Map::Update(const uint32 &t_diff)
plr->Update(t_diff); plr->Update(t_diff);
m_notifyTimer.Update(t_diff); m_notifyTimer.Update(t_diff);
if(m_notifyTimer.Passed()) if (m_notifyTimer.Passed())
{ {
m_notifyTimer.Reset(); m_notifyTimer.Reset();
RelocationNotify(); RelocationNotify();
@@ -799,7 +799,7 @@ void Map::Update(const uint32 &t_diff)
// marked cells are those that have been visited // marked cells are those that have been visited
// don't visit the same cell twice // don't visit the same cell twice
uint32 cell_id = (y * TOTAL_NUMBER_OF_CELLS_PER_MAP) + x; uint32 cell_id = (y * TOTAL_NUMBER_OF_CELLS_PER_MAP) + x;
if(!isCellMarked(cell_id)) if (!isCellMarked(cell_id))
{ {
markCell(cell_id); markCell(cell_id);
CellPair pair(x,y); CellPair pair(x,y);
@@ -837,7 +837,7 @@ void Map::Remove(Player *player, bool remove)
else else
{ {
Cell cell(p); Cell cell(p);
if( !getNGrid(cell.data.Part.grid_x, cell.data.Part.grid_y) ) if (!getNGrid(cell.data.Part.grid_x, cell.data.Part.grid_y))
sLog.outError("Map::Remove() i_grids was NULL x:%d, y:%d",cell.data.Part.grid_x,cell.data.Part.grid_y); sLog.outError("Map::Remove() i_grids was NULL x:%d, y:%d",cell.data.Part.grid_x,cell.data.Part.grid_y);
else else
{ {
@@ -850,7 +850,7 @@ void Map::Remove(Player *player, bool remove)
} }
} }
if( remove ) if (remove)
DeleteFromWorld(player); DeleteFromWorld(player);
} }
@@ -859,7 +859,7 @@ bool Map::RemoveBones(uint64 guid, float x, float y)
if (IsRemovalGrid(x, y)) if (IsRemovalGrid(x, y))
{ {
Corpse * corpse = ObjectAccessor::Instance().GetObjectInWorld(GetId(), x, y, guid, (Corpse*)NULL); Corpse * corpse = ObjectAccessor::Instance().GetObjectInWorld(GetId(), x, y, guid, (Corpse*)NULL);
if(corpse && corpse->GetTypeId() == TYPEID_CORPSE && corpse->GetType() == CORPSE_BONES) if (corpse && corpse->GetTypeId() == TYPEID_CORPSE && corpse->GetType() == CORPSE_BONES)
corpse->DeleteBonesFromWorld(); corpse->DeleteBonesFromWorld();
else else
return false; return false;
@@ -872,20 +872,20 @@ void
Map::Remove(T *obj, bool remove) Map::Remove(T *obj, bool remove)
{ {
obj->RemoveFromWorld(); obj->RemoveFromWorld();
if(obj->isActiveObject()) if (obj->isActiveObject())
RemoveFromActive(obj); RemoveFromActive(obj);
CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY()); CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
if(p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP ) if (p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
sLog.outError("Map::Remove: Object " I64FMT " have invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord); sLog.outError("Map::Remove: Object " I64FMT " have invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord);
else else
{ {
Cell cell(p); Cell cell(p);
if(loaded(GridPair(cell.data.Part.grid_x, cell.data.Part.grid_y))) if (loaded(GridPair(cell.data.Part.grid_x, cell.data.Part.grid_y)))
{ {
DEBUG_LOG("Remove object " I64FMT " from grid[%u,%u]", obj->GetGUID(), cell.data.Part.grid_x, cell.data.Part.grid_y); DEBUG_LOG("Remove object " I64FMT " from grid[%u,%u]", obj->GetGUID(), cell.data.Part.grid_x, cell.data.Part.grid_y);
NGridType *grid = getNGrid(cell.GridX(), cell.GridY()); NGridType *grid = getNGrid(cell.GridX(), cell.GridY());
assert( grid != NULL ); assert(grid != NULL);
RemoveFromGrid(obj,grid,cell); RemoveFromGrid(obj,grid,cell);
UpdateObjectVisibility(obj,cell,p); UpdateObjectVisibility(obj,cell,p);
@@ -894,7 +894,7 @@ Map::Remove(T *obj, bool remove)
obj->ResetMap(); obj->ResetMap();
if( remove ) if (remove)
{ {
// if option set then object already saved at this moment // if option set then object already saved at this moment
if(!sWorld.getConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY)) if(!sWorld.getConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
@@ -918,17 +918,17 @@ Map::PlayerRelocation(Player *player, float x, float y, float z, float orientati
player->Relocate(x, y, z, orientation); player->Relocate(x, y, z, orientation);
if( old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell) ) if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
{ {
DEBUG_LOG("Player %s relocation grid[%u,%u]cell[%u,%u]->grid[%u,%u]cell[%u,%u]", player->GetName(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); DEBUG_LOG("Player %s relocation grid[%u,%u]cell[%u,%u]->grid[%u,%u]cell[%u,%u]", player->GetName(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
// update player position for group at taxi flight // update player position for group at taxi flight
if(player->GetGroup() && player->isInFlight()) if (player->GetGroup() && player->isInFlight())
player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION); player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
NGridType* oldGrid = getNGrid(old_cell.GridX(), old_cell.GridY()); NGridType* oldGrid = getNGrid(old_cell.GridX(), old_cell.GridY());
RemoveFromGrid(player, oldGrid,old_cell); RemoveFromGrid(player, oldGrid,old_cell);
if( !old_cell.DiffGrid(new_cell) ) if (!old_cell.DiffGrid(new_cell))
AddToGrid(player, oldGrid,new_cell); AddToGrid(player, oldGrid,new_cell);
else else
EnsureGridLoadedAtEnter(new_cell, player); EnsureGridLoadedAtEnter(new_cell, player);
@@ -937,7 +937,7 @@ Map::PlayerRelocation(Player *player, float x, float y, float z, float orientati
AddUnitToNotify(player); AddUnitToNotify(player);
NGridType* newGrid = getNGrid(new_cell.GridX(), new_cell.GridY()); NGridType* newGrid = getNGrid(new_cell.GridX(), new_cell.GridY());
if( !same_cell && newGrid->GetGridState()!= GRID_STATE_ACTIVE ) if (!same_cell && newGrid->GetGridState()!= GRID_STATE_ACTIVE)
{ {
ResetGridExpiry(*newGrid, 0.1f); ResetGridExpiry(*newGrid, 0.1f);
newGrid->SetGridState(GRID_STATE_ACTIVE); newGrid->SetGridState(GRID_STATE_ACTIVE);
@@ -955,13 +955,13 @@ Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang
Cell new_cell(new_val); Cell new_cell(new_val);
// delay creature move for grid/cell to grid/cell moves // delay creature move for grid/cell to grid/cell moves
if( old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell) ) if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
{ {
#ifdef TRINITY_DEBUG #ifdef TRINITY_DEBUG
if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES)==0) if ((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES) == 0)
sLog.outDebug("Creature (GUID: %u Entry: %u) added to moving list from grid[%u,%u]cell[%u,%u] to grid[%u,%u]cell[%u,%u].", creature->GetGUIDLow(), creature->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()); sLog.outDebug("Creature (GUID: %u Entry: %u) added to moving list from grid[%u,%u]cell[%u,%u] to grid[%u,%u]cell[%u,%u].", creature->GetGUIDLow(), creature->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());
#endif #endif
AddCreatureToMoveList(creature,x,y,z,ang); AddCreatureToMoveList(creature, x, y, z, ang);
// in diffcell/diffgrid case notifiers called at finishing move creature in Map::MoveAllCreaturesInMoveList // in diffcell/diffgrid case notifiers called at finishing move creature in Map::MoveAllCreaturesInMoveList
} }
else else
@@ -970,12 +970,12 @@ Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang
AddUnitToNotify(creature); AddUnitToNotify(creature);
} }
if(creature->IsVehicle()) if (creature->IsVehicle())
{ {
for (SeatMap::iterator itr = creature->GetVehicleKit()->m_Seats.begin(); itr != creature->GetVehicleKit()->m_Seats.end(); ++itr) for (SeatMap::iterator itr = creature->GetVehicleKit()->m_Seats.begin(); itr != creature->GetVehicleKit()->m_Seats.end(); ++itr)
if(Unit *passenger = itr->second.passenger) if (Unit *passenger = itr->second.passenger)
{ {
if(passenger->GetTypeId() == TYPEID_PLAYER) if (passenger->GetTypeId() == TYPEID_PLAYER)
PlayerRelocation((Player*)passenger, PlayerRelocation((Player*)passenger,
x + passenger->m_movementInfo.t_x, x + passenger->m_movementInfo.t_x,
y + passenger->m_movementInfo.t_y, y + passenger->m_movementInfo.t_y,
@@ -995,15 +995,15 @@ Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang
void Map::AddCreatureToMoveList(Creature *c, float x, float y, float z, float ang) void Map::AddCreatureToMoveList(Creature *c, float x, float y, float z, float ang)
{ {
if(!c) if (!c)
return; return;
i_creaturesToMove[c] = CreatureMover(x,y,z,ang); i_creaturesToMove[c] = CreatureMover(x, y, z, ang);
} }
void Map::MoveAllCreaturesInMoveList() void Map::MoveAllCreaturesInMoveList()
{ {
while(!i_creaturesToMove.empty()) while (!i_creaturesToMove.empty())
{ {
// get data and remove element; // get data and remove element;
CreatureMoveList::iterator iter = i_creaturesToMove.begin(); CreatureMoveList::iterator iter = i_creaturesToMove.begin();
@@ -1016,7 +1016,7 @@ void Map::MoveAllCreaturesInMoveList()
Cell new_cell(new_val); Cell new_cell(new_val);
// do move or do move to respawn or remove creature if previous all fail // do move or do move to respawn or remove creature if previous all fail
if(CreatureCellRelocation(c,new_cell)) if (CreatureCellRelocation(c,new_cell))
{ {
// update pos // update pos
c->Relocate(cm.x, cm.y, cm.z, cm.ang); c->Relocate(cm.x, cm.y, cm.z, cm.ang);
@@ -1027,12 +1027,12 @@ void Map::MoveAllCreaturesInMoveList()
{ {
// if creature can't be move in new cell/grid (not loaded) move it to repawn cell/grid // if creature can't be move in new cell/grid (not loaded) move it to repawn cell/grid
// creature coordinates will be updated and notifiers send // creature coordinates will be updated and notifiers send
if(!CreatureRespawnRelocation(c)) if (!CreatureRespawnRelocation(c))
{ {
// ... or unload (if respawn grid also not loaded) // ... or unload (if respawn grid also not loaded)
#ifdef TRINITY_DEBUG #ifdef TRINITY_DEBUG
if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES)==0) if ((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES) == 0)
sLog.outDebug("Creature (GUID: %u Entry: %u ) can't be move to unloaded respawn grid.",c->GetGUIDLow(),c->GetEntry()); sLog.outDebug("Creature (GUID: %u Entry: %u) can't be move to unloaded respawn grid.",c->GetGUIDLow(),c->GetEntry());
#endif #endif
AddObjectToRemoveList(c); AddObjectToRemoveList(c);
} }
@@ -1043,10 +1043,10 @@ void Map::MoveAllCreaturesInMoveList()
bool Map::CreatureCellRelocation(Creature *c, Cell new_cell) bool Map::CreatureCellRelocation(Creature *c, Cell new_cell)
{ {
Cell const& old_cell = c->GetCurrentCell(); Cell const& old_cell = c->GetCurrentCell();
if(!old_cell.DiffGrid(new_cell) ) // in same grid if (!old_cell.DiffGrid(new_cell)) // in same grid
{ {
// if in same cell then none do // if in same cell then none do
if(old_cell.DiffCell(new_cell)) if (old_cell.DiffCell(new_cell))
{ {
#ifdef TRINITY_DEBUG #ifdef TRINITY_DEBUG
if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES)==0) if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES)==0)
@@ -1068,7 +1068,7 @@ bool Map::CreatureCellRelocation(Creature *c, Cell new_cell)
} }
// in diff. grids but active creature // in diff. grids but active creature
if(c->isActiveObject()) if (c->isActiveObject())
{ {
EnsureGridLoadedAtEnter(new_cell); EnsureGridLoadedAtEnter(new_cell);
@@ -1084,7 +1084,7 @@ bool Map::CreatureCellRelocation(Creature *c, Cell new_cell)
} }
// in diff. loaded grid normal creature // in diff. loaded grid normal creature
if(loaded(GridPair(new_cell.GridX(), new_cell.GridY()))) if (loaded(GridPair(new_cell.GridX(), new_cell.GridY())))
{ {
#ifdef TRINITY_DEBUG #ifdef TRINITY_DEBUG
if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES)==0) if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES)==0)
@@ -1100,7 +1100,7 @@ bool Map::CreatureCellRelocation(Creature *c, Cell new_cell)
// fail to move: normal creature attempt move to unloaded grid // fail to move: normal creature attempt move to unloaded grid
#ifdef TRINITY_DEBUG #ifdef TRINITY_DEBUG
if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES)==0) if ((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES) == 0)
sLog.outDebug("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()); sLog.outDebug("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());
#endif #endif
return false; return false;
+4 -4
View File
@@ -293,15 +293,15 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj
//function for setting up visibility distance for maps on per-type/per-Id basis //function for setting up visibility distance for maps on per-type/per-Id basis
virtual void InitVisibilityDistance(); virtual void InitVisibilityDistance();
void PlayerRelocation(Player *, float x, float y, float z, float angl); void PlayerRelocation(Player *, float x, float y, float z, float orientation);
void CreatureRelocation(Creature *creature, float x, float y, float, float); void CreatureRelocation(Creature *creature, float x, float y, float z, float ang);
template<class LOCK_TYPE, class T, class CONTAINER> void Visit(const CellLock<LOCK_TYPE> &cell, TypeContainerVisitor<T, CONTAINER> &visitor); template<class LOCK_TYPE, class T, class CONTAINER> void Visit(const CellLock<LOCK_TYPE> &cell, TypeContainerVisitor<T, CONTAINER> &visitor);
bool IsRemovalGrid(float x, float y) const bool IsRemovalGrid(float x, float y) const
{ {
GridPair p = Trinity::ComputeGridPair(x, y); GridPair p = Trinity::ComputeGridPair(x, y);
return( !getNGrid(p.x_coord, p.y_coord) || getNGrid(p.x_coord, p.y_coord)->GetGridState() == GRID_STATE_REMOVAL ); return !getNGrid(p.x_coord, p.y_coord) || getNGrid(p.x_coord, p.y_coord)->GetGridState() == GRID_STATE_REMOVAL;
} }
bool GetUnloadLock(const GridPair &p) const { return getNGrid(p.x_coord, p.y_coord)->getUnloadLock(); } bool GetUnloadLock(const GridPair &p) const { return getNGrid(p.x_coord, p.y_coord)->getUnloadLock(); }
@@ -312,7 +312,7 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj
void ResetGridExpiry(NGridType &grid, float factor = 1) const void ResetGridExpiry(NGridType &grid, float factor = 1) const
{ {
grid.ResetTimeTracker((time_t)((float)i_gridExpiry*factor)); grid.ResetTimeTracker(time_t(float(i_gridExpiry)*factor));
} }
time_t GetGridExpiry(void) const { return i_gridExpiry; } time_t GetGridExpiry(void) const { return i_gridExpiry; }
+1 -1
View File
@@ -1468,7 +1468,7 @@ void WorldObject::SendPlaySound(uint32 Sound, bool OnlySelf)
{ {
WorldPacket data(SMSG_PLAY_SOUND, 4); WorldPacket data(SMSG_PLAY_SOUND, 4);
data << Sound; data << Sound;
if (OnlySelf && GetTypeId() == TYPEID_PLAYER ) if (OnlySelf && GetTypeId() == TYPEID_PLAYER)
((Player*)this)->GetSession()->SendPacket( &data ); ((Player*)this)->GetSession()->SendPacket( &data );
else else
SendMessageToSet( &data, true ); // ToSelf ignored in this case SendMessageToSet( &data, true ); // ToSelf ignored in this case
+3 -3
View File
@@ -1252,7 +1252,7 @@ void Player::Update( uint32 p_time )
else else
{ {
// prevent base and off attack in same time, delay attack at 0.2 sec // prevent base and off attack in same time, delay attack at 0.2 sec
if(getAttackTimer(BASE_ATTACK) < ATTACK_DISPLAY_DELAY) if (getAttackTimer(BASE_ATTACK) < ATTACK_DISPLAY_DELAY)
setAttackTimer(BASE_ATTACK,ATTACK_DISPLAY_DELAY); setAttackTimer(BASE_ATTACK,ATTACK_DISPLAY_DELAY);
// do attack // do attack
@@ -1372,9 +1372,9 @@ void Player::Update( uint32 p_time )
} }
// not auto-free ghost from body in instances // not auto-free ghost from body in instances
#pragma omp critical(UpdateThreadSafety)
if(m_deathTimer > 0 && !GetBaseMap()->Instanceable()) if(m_deathTimer > 0 && !GetBaseMap()->Instanceable())
{ {
#pragma omp critical(UpdateThreadSafety)
if(p_time >= m_deathTimer) if(p_time >= m_deathTimer)
{ {
m_deathTimer = 0; m_deathTimer = 0;
@@ -1392,7 +1392,7 @@ void Player::Update( uint32 p_time )
SendUpdateToOutOfRangeGroupMembers(); SendUpdateToOutOfRangeGroupMembers();
Pet* pet = GetPet(); Pet* pet = GetPet();
if(pet && !IsWithinDistInMap(pet, OWNER_MAX_DISTANCE) && !pet->isPossessed()) if (pet && !IsWithinDistInMap(pet, OWNER_MAX_DISTANCE) && !pet->isPossessed())
//if(pet && !IsWithinDistInMap(pet, OWNER_MAX_DISTANCE) && (GetCharmGUID() && (pet->GetGUID() != GetCharmGUID()))) //if(pet && !IsWithinDistInMap(pet, OWNER_MAX_DISTANCE) && (GetCharmGUID() && (pet->GetGUID() != GetCharmGUID())))
RemovePet(pet, PET_SAVE_NOT_IN_SLOT, true); RemovePet(pet, PET_SAVE_NOT_IN_SLOT, true);
+29 -31
View File
@@ -850,10 +850,10 @@ void Spell::CleanupTargetList()
void Spell::AddUnitTarget(Unit* pVictim, uint32 effIndex) void Spell::AddUnitTarget(Unit* pVictim, uint32 effIndex)
{ {
if( m_spellInfo->Effect[effIndex] == 0 ) if (m_spellInfo->Effect[effIndex] == 0)
return; return;
if(!CheckTarget(pVictim, effIndex)) if (!CheckTarget(pVictim, effIndex))
return; return;
// Check for effect immune skip if immuned // Check for effect immune skip if immuned
@@ -898,7 +898,7 @@ void Spell::AddUnitTarget(Unit* pVictim, uint32 effIndex)
} }
// Calculate hit result // Calculate hit result
if(m_originalCaster) if (m_originalCaster)
{ {
target.missCondition = m_originalCaster->SpellHitResult(pVictim, m_spellInfo, m_canReflect); target.missCondition = m_originalCaster->SpellHitResult(pVictim, m_spellInfo, m_canReflect);
if(m_skipCheck && target.missCondition != SPELL_MISS_IMMUNE) if(m_skipCheck && target.missCondition != SPELL_MISS_IMMUNE)
@@ -945,8 +945,7 @@ void Spell::AddUnitTarget(Unit* pVictim, uint32 effIndex)
void Spell::AddUnitTarget(uint64 unitGUID, uint32 effIndex) void Spell::AddUnitTarget(uint64 unitGUID, uint32 effIndex)
{ {
Unit* unit = m_caster->GetGUID() == unitGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, unitGUID); if (Unit* unit = m_caster->GetGUID() == unitGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, unitGUID))
if (unit)
AddUnitTarget(unit, effIndex); AddUnitTarget(unit, effIndex);
} }
@@ -2128,25 +2127,25 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
case TARGET_TYPE_CHANNEL: case TARGET_TYPE_CHANNEL:
{ {
if(!m_originalCaster || !m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)) if (!m_originalCaster || !m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
{ {
sLog.outError( "SPELL: no current channeled spell for spell ID %u", m_spellInfo->Id ); sLog.outError( "SPELL: no current channeled spell for spell ID %u", m_spellInfo->Id );
break; break;
} }
switch(cur) switch (cur)
{ {
case TARGET_UNIT_CHANNEL: case TARGET_UNIT_CHANNEL:
// in some cases unittarget is invalid and crash. do not know why it happens. // in some cases unittarget is invalid and crash. do not know why it happens.
if(Unit* target = Unit::GetUnit(*m_caster, m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_targets.getUnitTargetGUID())) if (Unit* target = Unit::GetUnit(*m_caster, m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_targets.getUnitTargetGUID()))
AddUnitTarget(target, i); AddUnitTarget(target, i);
else else
sLog.outError( "SPELL: cannot find channel spell target for spell ID %u", m_spellInfo->Id ); sLog.outError( "SPELL: cannot find channel spell target for spell ID %u", m_spellInfo->Id );
break; break;
case TARGET_DEST_CHANNEL: case TARGET_DEST_CHANNEL:
if(m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_targets.HasDst()) if (m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_targets.HasDst())
m_targets = m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_targets; m_targets = m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_targets;
else if(Unit* target = Unit::GetUnit(*m_caster, m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_targets.getUnitTargetGUID())) else if (Unit* target = Unit::GetUnit(*m_caster, m_originalCaster->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_targets.getUnitTargetGUID()))
m_targets.setDst(target); m_targets.setDst(target);
else else
sLog.outError( "SPELL: cannot find channel spell destination for spell ID %u", m_spellInfo->Id ); sLog.outError( "SPELL: cannot find channel spell destination for spell ID %u", m_spellInfo->Id );
@@ -2157,7 +2156,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
default: default:
{ {
switch(cur) switch (cur)
{ {
case TARGET_GAMEOBJECT: case TARGET_GAMEOBJECT:
case TARGET_OBJECT_USE: case TARGET_OBJECT_USE:
@@ -2165,9 +2164,9 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
AddGOTarget(m_targets.getGOTarget(), i); AddGOTarget(m_targets.getGOTarget(), i);
break; break;
case TARGET_GAMEOBJECT_ITEM: case TARGET_GAMEOBJECT_ITEM:
if(m_targets.getGOTargetGUID()) if (m_targets.getGOTargetGUID())
AddGOTarget(m_targets.getGOTarget(), i); AddGOTarget(m_targets.getGOTarget(), i);
else if(m_targets.getItemTarget()) else if (m_targets.getItemTarget())
AddItemTarget(m_targets.getItemTarget(), i); AddItemTarget(m_targets.getItemTarget(), i);
break; break;
default: default:
@@ -2178,10 +2177,10 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
} }
} }
if(pushType == PUSH_CHAIN) // Chain if (pushType == PUSH_CHAIN) // Chain
{ {
Unit *target = m_targets.getUnitTarget(); Unit *target = m_targets.getUnitTarget();
if(!target) if (!target)
{ {
sLog.outError("SPELL: no chain unit target for spell ID %u", m_spellInfo->Id); sLog.outError("SPELL: no chain unit target for spell ID %u", m_spellInfo->Id);
return; return;
@@ -2189,10 +2188,10 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
//Chain: 2, 6, 22, 25, 45, 77 //Chain: 2, 6, 22, 25, 45, 77
uint32 maxTargets = m_spellInfo->EffectChainTarget[i]; uint32 maxTargets = m_spellInfo->EffectChainTarget[i];
if(modOwner) if (modOwner)
modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_JUMP_TARGETS, maxTargets, this); modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_JUMP_TARGETS, maxTargets, this);
if(maxTargets > 1) if (maxTargets > 1)
{ {
//otherwise, this multiplier is used for something else //otherwise, this multiplier is used for something else
m_damageMultipliers[i] = 1.0f; m_damageMultipliers[i] = 1.0f;
@@ -2201,13 +2200,13 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
float range; float range;
std::list<Unit*> unitList; std::list<Unit*> unitList;
switch(cur) switch (cur)
{ {
case TARGET_UNIT_NEARBY_ENEMY: case TARGET_UNIT_NEARBY_ENEMY:
case TARGET_UNIT_TARGET_ENEMY: case TARGET_UNIT_TARGET_ENEMY:
case TARGET_UNIT_NEARBY_ENTRY: // fix me case TARGET_UNIT_NEARBY_ENTRY: // fix me
range = GetSpellMaxRange(m_spellInfo, false); range = GetSpellMaxRange(m_spellInfo, false);
if(modOwner) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, range, this); if (modOwner) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, range, this);
SearchChainTarget(unitList, range, maxTargets, SPELL_TARGETS_ENEMY); SearchChainTarget(unitList, range, maxTargets, SPELL_TARGETS_ENEMY);
break; break;
case TARGET_UNIT_CHAINHEAL: case TARGET_UNIT_CHAINHEAL:
@@ -2215,7 +2214,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
case TARGET_UNIT_NEARBY_ALLY_UNK: case TARGET_UNIT_NEARBY_ALLY_UNK:
case TARGET_UNIT_NEARBY_RAID: case TARGET_UNIT_NEARBY_RAID:
range = GetSpellMaxRange(m_spellInfo, true); range = GetSpellMaxRange(m_spellInfo, true);
if(modOwner) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, range, this); if (modOwner) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, range, this);
SearchChainTarget(unitList, range, maxTargets, SPELL_TARGETS_CHAINHEAL); SearchChainTarget(unitList, range, maxTargets, SPELL_TARGETS_CHAINHEAL);
break; break;
} }
@@ -2226,7 +2225,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
else else
AddUnitTarget(target, i); AddUnitTarget(target, i);
} }
else if(pushType) else if (pushType)
{ {
// Dummy, just for client // Dummy, just for client
if(EffectTargetType[m_spellInfo->Effect[i]] != SPELL_REQUIRE_UNIT) if(EffectTargetType[m_spellInfo->Effect[i]] != SPELL_REQUIRE_UNIT)
@@ -2270,7 +2269,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
if(targetType == SPELL_TARGETS_ENTRY) if(targetType == SPELL_TARGETS_ENTRY)
{ {
SpellScriptTargetBounds bounds = spellmgr.GetSpellScriptTargetBounds(m_spellInfo->Id); SpellScriptTargetBounds bounds = spellmgr.GetSpellScriptTargetBounds(m_spellInfo->Id);
if(bounds.first==bounds.second) if(bounds.first == bounds.second)
{ {
// Custom entries // Custom entries
// TODO: move these to sql // TODO: move these to sql
@@ -2279,8 +2278,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
case 46584: // Raise Dead case 46584: // Raise Dead
{ {
m_targets.m_targetMask &= ~TARGET_FLAG_DEST_LOCATION; m_targets.m_targetMask &= ~TARGET_FLAG_DEST_LOCATION;
WorldObject* result = FindCorpseUsing<MaNGOS::RaiseDeadObjectCheck> (); if (WorldObject* result = FindCorpseUsing<MaNGOS::RaiseDeadObjectCheck> ())
if(result)
{ {
switch(result->GetTypeId()) switch(result->GetTypeId())
{ {
@@ -2309,9 +2307,9 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
WorldObject* result = FindCorpseUsing <Trinity::ExplodeCorpseObjectCheck> (); WorldObject* result = FindCorpseUsing <Trinity::ExplodeCorpseObjectCheck> ();
if(result) if (result)
{ {
switch(result->GetTypeId()) switch (result->GetTypeId())
{ {
case TYPEID_UNIT: case TYPEID_UNIT:
case TYPEID_PLAYER: case TYPEID_PLAYER:
@@ -2357,11 +2355,11 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
} }
} }
} }
else if(targetType) else if (targetType)
SearchAreaTarget(unitList, radius, pushType, targetType); SearchAreaTarget(unitList, radius, pushType, targetType);
else else
{ {
switch(cur) switch (cur)
{ {
case TARGET_UNIT_AREA_PARTY_SRC: case TARGET_UNIT_AREA_PARTY_SRC:
case TARGET_UNIT_AREA_PARTY_DST: case TARGET_UNIT_AREA_PARTY_DST:
@@ -4292,11 +4290,11 @@ void Spell::HandleThreatSpells(uint32 spellId)
void Spell::HandleEffects(Unit *pUnitTarget,Item *pItemTarget,GameObject *pGOTarget,uint32 i) void Spell::HandleEffects(Unit *pUnitTarget,Item *pItemTarget,GameObject *pGOTarget,uint32 i)
{ {
if(!Script->OnSpellCast(pUnitTarget,pItemTarget,pGOTarget,i,m_spellInfo)) if (!Script->OnSpellCast(pUnitTarget,pItemTarget,pGOTarget,i,m_spellInfo))
return; return;
//effect has been handled, skip it //effect has been handled, skip it
if(m_effectMask & (1<<i)) if (m_effectMask & (1<<i))
return; return;
unitTarget = pUnitTarget; unitTarget = pUnitTarget;
@@ -4310,7 +4308,7 @@ void Spell::HandleEffects(Unit *pUnitTarget,Item *pItemTarget,GameObject *pGOTar
//we do not need DamageMultiplier here. //we do not need DamageMultiplier here.
damage = CalculateDamage(i, NULL); damage = CalculateDamage(i, NULL);
if(eff<TOTAL_SPELL_EFFECTS) if(eff < TOTAL_SPELL_EFFECTS)
{ {
//sLog.outDebug( "WORLD: Spell FX %d < TOTAL_SPELL_EFFECTS ", eff); //sLog.outDebug( "WORLD: Spell FX %d < TOTAL_SPELL_EFFECTS ", eff);
(this->*SpellEffects[eff])(i); (this->*SpellEffects[eff])(i);
+19 -17
View File
@@ -1715,6 +1715,8 @@ void Spell::EffectDummy(uint32 i)
if (m_spellInfo->SpellFamilyFlags[1] & 0x20000 && i == 1) if (m_spellInfo->SpellFamilyFlags[1] & 0x20000 && i == 1)
{ {
int32 dmg = m_damage * damage / 100; int32 dmg = m_damage * damage / 100;
if (!unitTarget)
unitTarget = m_caster;
m_caster->CastCustomSpell(unitTarget, 54171, &dmg, 0, 0, true); m_caster->CastCustomSpell(unitTarget, 54171, &dmg, 0, 0, true);
return; return;
} }
@@ -1722,7 +1724,7 @@ void Spell::EffectDummy(uint32 i)
{ {
case 156: // Holy Shock case 156: // Holy Shock
{ {
if(!unitTarget) if (!unitTarget)
return; return;
int hurt = 0; int hurt = 0;
@@ -1742,7 +1744,7 @@ void Spell::EffectDummy(uint32 i)
return; return;
} }
if(m_caster->IsFriendlyTo(unitTarget)) if (m_caster->IsFriendlyTo(unitTarget))
m_caster->CastSpell(unitTarget, heal, true, 0); m_caster->CastSpell(unitTarget, heal, true, 0);
else else
m_caster->CastSpell(unitTarget, hurt, true, 0); m_caster->CastSpell(unitTarget, hurt, true, 0);
@@ -1759,11 +1761,11 @@ void Spell::EffectDummy(uint32 i)
} }
case 20425: // Judgement of command case 20425: // Judgement of command
{ {
if(!unitTarget) if (!unitTarget)
return; return;
SpellEntry const* spell_proto = sSpellStore.LookupEntry(damage); SpellEntry const* spell_proto = sSpellStore.LookupEntry(damage);
if(!spell_proto) if (!spell_proto)
return; return;
m_caster->CastSpell(unitTarget, spell_proto, true, NULL); m_caster->CastSpell(unitTarget, spell_proto, true, NULL);
@@ -1776,7 +1778,7 @@ void Spell::EffectDummy(uint32 i)
// non-standard cast requirement check // non-standard cast requirement check
if (!unitTarget || unitTarget->getAttackers().empty()) if (!unitTarget || unitTarget->getAttackers().empty())
{ {
if(m_caster->GetTypeId() == TYPEID_PLAYER) if (m_caster->GetTypeId() == TYPEID_PLAYER)
((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id,true); ((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id,true);
SendCastResult(SPELL_FAILED_TARGET_AFFECTING_COMBAT); SendCastResult(SPELL_FAILED_TARGET_AFFECTING_COMBAT);
return; return;
@@ -1784,7 +1786,7 @@ void Spell::EffectDummy(uint32 i)
// Righteous Defense (step 2) (in old version 31980 dummy effect) // Righteous Defense (step 2) (in old version 31980 dummy effect)
// Clear targets for eff 1 // Clear targets for eff 1
for (std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) for (std::list<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
ihit->effectMask &= ~(1<<1); ihit->effectMask &= ~(1<<1);
// not empty (checked) // not empty (checked)
@@ -1795,7 +1797,7 @@ void Spell::EffectDummy(uint32 i)
uint32 count = 0; uint32 count = 0;
for (Unit::AttackerSet::const_iterator aItr = attackers.begin(); aItr != attackers.end() && count < 3; ++aItr) for (Unit::AttackerSet::const_iterator aItr = attackers.begin(); aItr != attackers.end() && count < 3; ++aItr)
{ {
if(!roll_chance_f(chance)) if (!roll_chance_f(chance))
continue; continue;
++count; ++count;
AddUnitTarget((*aItr), 1); AddUnitTarget((*aItr), 1);
@@ -1806,7 +1808,7 @@ void Spell::EffectDummy(uint32 i)
} }
case 37877: // Blessing of Faith case 37877: // Blessing of Faith
{ {
if(!unitTarget) if (!unitTarget)
return; return;
uint32 spell_id = 0; uint32 spell_id = 0;
@@ -1831,7 +1833,7 @@ void Spell::EffectDummy(uint32 i)
// TODO: use expect spell for enchant (if exist talent) // TODO: use expect spell for enchant (if exist talent)
// In 3.0.3 no mods present for rockbiter // In 3.0.3 no mods present for rockbiter
uint32 spell_id = 0; uint32 spell_id = 0;
switch(m_spellInfo->Id) switch (m_spellInfo->Id)
{ {
case 8017: spell_id = 36494; break; // Rank 1 case 8017: spell_id = 36494; break; // Rank 1
case 8018: spell_id = 36750; break; // Rank 2 case 8018: spell_id = 36750; break; // Rank 2
@@ -1844,20 +1846,20 @@ void Spell::EffectDummy(uint32 i)
SpellEntry const *spellInfo = sSpellStore.LookupEntry( spell_id ); SpellEntry const *spellInfo = sSpellStore.LookupEntry( spell_id );
if(!spellInfo) if (!spellInfo)
{ {
sLog.outError("WORLD: unknown spell id %i", spell_id); sLog.outError("WORLD: unknown spell id %i", spell_id);
return; return;
} }
if(m_caster->GetTypeId() != TYPEID_PLAYER) if (m_caster->GetTypeId() != TYPEID_PLAYER)
return; return;
for (uint8 j = BASE_ATTACK; j <= OFF_ATTACK; ++j) for (uint8 j = BASE_ATTACK; j <= OFF_ATTACK; ++j)
{ {
if(Item* item = ((Player*)m_caster)->GetWeaponForAttack(WeaponAttackType(j))) if (Item* item = ((Player*)m_caster)->GetWeaponForAttack(WeaponAttackType(j)))
{ {
if(item->IsFitToSpellRequirements(m_spellInfo)) if (item->IsFitToSpellRequirements(m_spellInfo))
{ {
Spell *spell = new Spell(m_caster, spellInfo, true); Spell *spell = new Spell(m_caster, spellInfo, true);
@@ -1867,7 +1869,7 @@ void Spell::EffectDummy(uint32 i)
spell->m_currentBasePoints[1] = damage-1; spell->m_currentBasePoints[1] = damage-1;
SpellCastTargets targets; SpellCastTargets targets;
targets.setItemTarget( item ); targets.setItemTarget(item);
spell->prepare(&targets); spell->prepare(&targets);
} }
} }
@@ -1875,7 +1877,7 @@ void Spell::EffectDummy(uint32 i)
return; return;
} }
// Cleansing Totem Pulse // Cleansing Totem Pulse
if(m_spellInfo->SpellFamilyFlags[0] & 0x04000000 && m_spellInfo->SpellIconID==1673) if (m_spellInfo->SpellFamilyFlags[0] & 0x04000000 && m_spellInfo->SpellIconID==1673)
{ {
int32 bp1 = 1; int32 bp1 = 1;
// Cleansing Totem Effect // Cleansing Totem Effect
@@ -1889,9 +1891,9 @@ void Spell::EffectDummy(uint32 i)
return; return;
} }
// Mana Spring Totem // Mana Spring Totem
if(m_spellInfo->SpellFamilyFlags[0] & 0x4000) if (m_spellInfo->SpellFamilyFlags[0] & 0x4000)
{ {
if(unitTarget->getPowerType()!=POWER_MANA) if (unitTarget->getPowerType()!=POWER_MANA)
return; return;
m_caster->CastCustomSpell(unitTarget, 52032, &damage, 0, 0, true, 0, 0, m_originalCasterGUID); m_caster->CastCustomSpell(unitTarget, 52032, &damage, 0, 0, true, 0, 0, m_originalCasterGUID);
return; return;
+10 -10
View File
@@ -255,16 +255,16 @@ void Unit::Update( uint32 p_time )
//not implemented before 3.0.2 //not implemented before 3.0.2
//if(!hasUnitState(UNIT_STAT_CASTING)) //if(!hasUnitState(UNIT_STAT_CASTING))
{ {
if(uint32 base_att = getAttackTimer(BASE_ATTACK)) if (uint32 base_att = getAttackTimer(BASE_ATTACK))
setAttackTimer(BASE_ATTACK, (p_time >= base_att ? 0 : base_att - p_time)); setAttackTimer(BASE_ATTACK, (p_time >= base_att ? 0 : base_att - p_time));
if(uint32 ranged_att = getAttackTimer(RANGED_ATTACK)) if (uint32 ranged_att = getAttackTimer(RANGED_ATTACK))
setAttackTimer(RANGED_ATTACK, (p_time >= ranged_att ? 0 : ranged_att - p_time)); setAttackTimer(RANGED_ATTACK, (p_time >= ranged_att ? 0 : ranged_att - p_time));
if(uint32 off_att = getAttackTimer(OFF_ATTACK)) if (uint32 off_att = getAttackTimer(OFF_ATTACK))
setAttackTimer(OFF_ATTACK, (p_time >= off_att ? 0 : off_att - p_time)); setAttackTimer(OFF_ATTACK, (p_time >= off_att ? 0 : off_att - p_time));
} }
// update abilities available only for fraction of time // update abilities available only for fraction of time
UpdateReactives( p_time ); UpdateReactives(p_time);
ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, GetHealth() < GetMaxHealth()*0.20f); ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, GetHealth() < GetMaxHealth()*0.20f);
ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, GetHealth() < GetMaxHealth()*0.35f); ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, GetHealth() < GetMaxHealth()*0.35f);
@@ -14880,16 +14880,16 @@ void Unit::ExitVehicle()
void Unit::BuildMovementPacket(ByteBuffer *data) const void Unit::BuildMovementPacket(ByteBuffer *data) const
{ {
switch(GetTypeId()) switch (GetTypeId())
{ {
case TYPEID_UNIT: case TYPEID_UNIT:
if(canFly()) if (canFly())
const_cast<Unit*>(this)->AddUnitMovementFlag(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_LEVITATING); const_cast<Unit*>(this)->AddUnitMovementFlag(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_LEVITATING);
break; break;
case TYPEID_PLAYER: case TYPEID_PLAYER:
// remove unknown, unused etc flags for now // remove unknown, unused etc flags for now
const_cast<Unit*>(this)->RemoveUnitMovementFlag(MOVEMENTFLAG_SPLINE2); const_cast<Unit*>(this)->RemoveUnitMovementFlag(MOVEMENTFLAG_SPLINE2);
if(isInFlight()) if (isInFlight())
{ {
WPAssert(const_cast<Unit*>(this)->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE); WPAssert(const_cast<Unit*>(this)->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE);
const_cast<Unit*>(this)->AddUnitMovementFlag(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_SPLINE2); const_cast<Unit*>(this)->AddUnitMovementFlag(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_SPLINE2);
@@ -14906,11 +14906,11 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const
*data << GetOrientation(); *data << GetOrientation();
// 0x00000200 // 0x00000200
if(GetUnitMovementFlags() & MOVEMENTFLAG_ONTRANSPORT) if (GetUnitMovementFlags() & MOVEMENTFLAG_ONTRANSPORT)
{ {
if(m_vehicle) if (m_vehicle)
data->append(m_vehicle->GetBase()->GetPackGUID()); data->append(m_vehicle->GetBase()->GetPackGUID());
else if(GetTransport()) else if (GetTransport())
data->append(GetTransport()->GetPackGUID()); data->append(GetTransport()->GetPackGUID());
else else
{ {