From 2719ae2efa428b28efaf2dab3aaa617545ca0be2 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Fri, 26 Jun 2009 04:01:31 +0400 Subject: [PATCH] [8078] Fixed typos in character data loading after recently added new field. * Really use race/class/gender fields instead `data` field values. * Load extra flags (gm mode onm gm fly mode, gm invisibility and etc) from proper field. NOTE: recommedned reset characters.extra_flags field to 0 for all characters. It can be corrupted in time login/logout before this fix. --- src/game/Player.cpp | 17 ++++++++++++----- src/game/Player.h | 1 + src/shared/revision_nr.h | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 22e94d137..0124177f7 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -13942,9 +13942,11 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) // overwrite some data fields uint32 bytes0 = GetUInt32Value(UNIT_FIELD_BYTES_0) & 0xFF000000; - bytes0 |= fields[4].GetUInt8(); - bytes0 |= fields[5].GetUInt8() << 8; - bytes0 |= fields[6].GetUInt8() << 16; + bytes0 |= fields[4].GetUInt8(); // race + bytes0 |= fields[5].GetUInt8() << 8; // class + bytes0 |= fields[6].GetUInt8() << 16; // gender + SetUInt32Value(UNIT_FIELD_BYTES_0, bytes0); + SetUInt32Value(UNIT_FIELD_LEVEL, fields[7].GetUInt8()); SetUInt32Value(PLAYER_XP, fields[8].GetUInt32()); SetUInt32Value(PLAYER_FIELD_COINAGE, fields[9].GetUInt32()); @@ -14205,7 +14207,7 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) //speed collect rest bonus in offline, in logout, in tavern, city (section/in hour) float bubble1 = 0.125; - if((int32)fields[23].GetUInt32() > 0) + if(time_diff > 0) { float bubble = fields[24].GetUInt32() > 0 ? bubble1*sWorld.getRate(RATE_REST_OFFLINE_IN_TAVERN_OR_CITY) @@ -14229,7 +14231,7 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) m_taxi.LoadTaxiMask( fields[18].GetString() ); // must be before InitTaxiNodesForLevel - uint32 extraflags = fields[25].GetUInt32(); + uint32 extraflags = fields[32].GetUInt32(); m_stableSlots = fields[33].GetUInt32(); if(m_stableSlots > MAX_PET_STABLES) @@ -20332,4 +20334,9 @@ void Player::BuildTeleportAckMsg( WorldPacket *data, float x, float y, float z, *data << z; *data << ang; *data << uint32(0); +} + +bool Player::HasMovementFlag( MovementFlags f ) const +{ + return m_movementInfo.HasMovementFlag(f); } \ No newline at end of file diff --git a/src/game/Player.h b/src/game/Player.h index af441a59f..8222060a3 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1970,6 +1970,7 @@ class MANGOS_DLL_SPEC Player : public Unit /*** VARIOUS SYSTEMS ***/ /*********************************************************/ MovementInfo m_movementInfo; + bool HasMovementFlag(MovementFlags f) const; // for script access to m_movementInfo.HasMovementFlag void UpdateFallInformationIfNeed(MovementInfo const& minfo,uint16 opcode); Unit *m_mover; void SetFallInformation(uint32 time, float z) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 97c16489c..714dddb03 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8077" + #define REVISION_NR "8078" #endif // __REVISION_NR_H__