aboutsummaryrefslogtreecommitdiff
path: root/src/game/Player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r--src/game/Player.cpp132
1 files changed, 38 insertions, 94 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 9f28c399c1f..54441fa1a16 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -746,14 +746,14 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8
switch(iProto->Spells[0].SpellCategory)
{
case 11: // food
- if(iProto->Stackable > 4)
- count = 4;
+ count = getClass()==CLASS_DEATH_KNIGHT ? 10 : 4;
break;
case 59: // drink
- if(iProto->Stackable > 2)
- count = 2;
+ count = 2;
break;
}
+ if(iProto->Stackable < count)
+ count = iProto->Stackable;
}
StoreNewItemInBestSlots(item_id, count);
@@ -15172,7 +15172,7 @@ void Player::_LoadAuras(QueryResult *result, uint32 timediff)
delete result;
}
- if(getClass() == CLASS_WARRIOR)
+ if(getClass() == CLASS_WARRIOR && !HasAuraType(SPELL_AURA_MOD_SHAPESHIFT))
CastSpell(this,SPELL_ID_PASSIVE_BATTLE_STANCE,true);
}
@@ -16064,26 +16064,9 @@ void Player::SaveToDB()
// first save/honor gain after midnight will also update the player's honor fields
UpdateHonorFields();
- uint32 is_save_resting = HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0;
- //save, far from tavern/city
- //save, but in tavern/city
sLog.outDebug("The value of player %s at save: ", m_name.c_str());
outDebugValues();
- // save state (after auras removing), if aura remove some flags then it must set it back by self)
- uint32 tmp_bytes = GetUInt32Value(UNIT_FIELD_BYTES_1);
- uint32 tmp_bytes2 = GetUInt32Value(UNIT_FIELD_BYTES_2);
- uint32 tmp_flags = GetUInt32Value(UNIT_FIELD_FLAGS);
- uint32 tmp_pflags = GetUInt32Value(PLAYER_FLAGS);
- uint32 tmp_displayid = GetDisplayId();
-
- // Set player sit state to standing on save, also stealth and shifted form
- SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_STAND);
- SetByteValue(UNIT_FIELD_BYTES_2, 3, 0); // shapeshift
- RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
-
- bool inworld = IsInWorld();
-
CharacterDatabase.BeginTransaction();
CharacterDatabase.PExecute("DELETE FROM characters WHERE guid = '%u'",GetGUIDLow());
@@ -16140,69 +16123,48 @@ void Player::SaveToDB()
ss << "', ";
- ss << m_taxi; // string with TaxiMaskSize numbers
+ ss << m_taxi << ", "; // string with TaxiMaskSize numbers
- ss << ", ";
- ss << (inworld ? 1 : 0);
+ ss << (IsInWorld() ? 1 : 0) << ", ";
- ss << ", ";
- ss << m_cinematic;
+ ss << m_cinematic << ", ";
- ss << ", ";
- ss << m_Played_time[PLAYED_TIME_TOTAL];
- ss << ", ";
- ss << m_Played_time[PLAYED_TIME_LEVEL];
+ ss << m_Played_time[PLAYED_TIME_TOTAL] << ", ";
+ ss << m_Played_time[PLAYED_TIME_LEVEL] << ", ";
- ss << ", ";
- ss << finiteAlways(m_rest_bonus);
- ss << ", ";
- ss << (uint64)time(NULL);
- ss << ", ";
- ss << is_save_resting;
- ss << ", ";
- ss << m_resetTalentsCost;
- ss << ", ";
- ss << (uint64)m_resetTalentsTime;
+ ss << finiteAlways(m_rest_bonus) << ", ";
+ ss << (uint64)time(NULL) << ", ";
+ ss << (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0) << ", ";
+ //save, far from tavern/city
+ //save, but in tavern/city
+ ss << m_resetTalentsCost << ", ";
+ ss << (uint64)m_resetTalentsTime << ", ";
- ss << ", ";
- ss << finiteAlways(m_movementInfo.t_x);
- ss << ", ";
- ss << finiteAlways(m_movementInfo.t_y);
- ss << ", ";
- ss << finiteAlways(m_movementInfo.t_z);
- ss << ", ";
- ss << finiteAlways(m_movementInfo.t_o);
- ss << ", ";
+ ss << finiteAlways(m_movementInfo.t_x) << ", ";
+ ss << finiteAlways(m_movementInfo.t_y) << ", ";
+ ss << finiteAlways(m_movementInfo.t_z) << ", ";
+ ss << finiteAlways(m_movementInfo.t_o) << ", ";
if (m_transport)
ss << m_transport->GetGUIDLow();
else
ss << "0";
-
ss << ", ";
- ss << m_ExtraFlags;
- ss << ", ";
- ss << uint32(m_stableSlots); // to prevent save uint8 as char
+ ss << m_ExtraFlags << ", ";
- ss << ", ";
- ss << uint32(m_atLoginFlags);
+ ss << uint32(m_stableSlots) << ", "; // to prevent save uint8 as char
- ss << ", ";
- ss << GetZoneId();
+ ss << uint32(m_atLoginFlags) << ", ";
- ss << ", ";
- ss << (uint64)m_deathExpireTime;
+ ss << GetZoneId() << ", ";
- ss << ", '";
- ss << m_taxi.SaveTaxiDestinationsToString();
+ ss << (uint64)m_deathExpireTime << ", '";
- ss << "', '0', ";
- ss << GetSession()->GetLatency();
- ss << ", ";
- ss << GetBattleGroundId();
- ss << ", ";
- ss << GetBGTeam();
- ss << ", ";
+ ss << m_taxi.SaveTaxiDestinationsToString() << "', ";
+ ss << "'0', "; // arena_pending_points
+ ss << GetSession()->GetLatency() << ", ";
+ ss << GetBattleGroundId() << ", ";
+ ss << GetBGTeam() << ", ";
ss << m_bgEntryPoint.mapid << ", "
<< finiteAlways(m_bgEntryPoint.coord_x) << ", "
<< finiteAlways(m_bgEntryPoint.coord_y) << ", "
@@ -16229,12 +16191,6 @@ void Player::SaveToDB()
CharacterDatabase.CommitTransaction();
- // restore state (before aura apply, if aura remove flag then aura must set it ack by self)
- SetUInt32Value(UNIT_FIELD_BYTES_1, tmp_bytes);
- SetUInt32Value(UNIT_FIELD_BYTES_2, tmp_bytes2);
- SetUInt32Value(UNIT_FIELD_FLAGS, tmp_flags);
- SetUInt32Value(PLAYER_FLAGS, tmp_pflags);
-
// save pet (hunter pet level and experience and all type pets health/mana).
if(Pet* pet = GetPet())
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
@@ -16291,12 +16247,10 @@ void Player::_SaveAuras()
// skip:
// area auras or single cast auras casted by other unit
// passive auras and stances
- if (itr->second->IsPassive()
- || itr->second->IsAuraType(SPELL_AURA_MOD_SHAPESHIFT)
- || itr->second->IsRemovedOnShapeLost())
+ if (itr->second->IsPassive())
continue;
- bool isCaster = itr->second->GetCasterGUID() == GetGUID();
- if (!isCaster)
+
+ if (itr->second->GetCasterGUID() != GetGUID())
if (IsSingleTargetSpell(itr->second->GetSpellProto())
|| itr->second->IsAreaAura())
continue;
@@ -19918,13 +19872,6 @@ void Player::SetClientControl(Unit* target, uint8 allowMove)
void Player::UpdateZoneDependentAuras( uint32 newZone )
{
- // remove new continent flight forms
- if( !IsAllowUseFlyMountsHere() )
- {
- RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
- RemoveAurasByType(SPELL_AURA_FLY);
- }
-
// Some spells applied at enter into zone (with subzones), aura removed in UpdateAreaDependentAuras that called always at zone->area update
SpellAreaForAreaMapBounds saBounds = spellmgr.GetSpellAreaForAreaMapBounds(newZone);
for(SpellAreaForAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr)
@@ -20531,14 +20478,11 @@ uint32 Player::CalculateTalentsPoints() const
return uint32(talentPointsForLevel * sWorld.getRate(RATE_TALENT));
}
-bool Player::IsAllowUseFlyMountsHere() const
+bool Player::IsKnowHowFlyIn(uint32 mapid, uint32 zone) const
{
- if (isGameMaster())
- return true;
-
- uint32 zoneId = GetZoneId();
- uint32 v_map = GetVirtualMapForMapAndZone(GetMapId(), zoneId);
- return v_map == 530 || v_map == 571 && HasSpell(54197) && zoneId != 4197;
+ // continent checked in SpellMgr::GetSpellAllowedInLocationError at cast and area update
+ uint32 v_map = GetVirtualMapForMapAndZone(mapid, zone);
+ return v_map != 571 || HasSpell(54197) && zone != 4197; // Cold Weather Flying
}
void Player::learnSpellHighRank(uint32 spellid)