mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[10653] Implemented MSG_MOVE_KNOCK_BACK opcode
* Player's knockback movement now smooth and doesn't looks like teleporting * Cleanup WorldSession::HandleMovementOpcodes, separated opcode specific and generic movement handlers code * Handle Feign Death aura interrupting into more appropriate place
This commit is contained in:
parent
81d3368e29
commit
1871cf977f
6 changed files with 159 additions and 123 deletions
|
|
@ -241,125 +241,27 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
||||||
recv_data >> movementInfo;
|
recv_data >> movementInfo;
|
||||||
/*----------------*/
|
/*----------------*/
|
||||||
|
|
||||||
// ignore wrong guid (player attempt cheating own session for not own guid possible...)
|
if (!VerifyMovementInfo(movementInfo,guid,mover))
|
||||||
if (guid != mover->GetObjectGuid())
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!MaNGOS::IsValidMapCoord(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o))
|
|
||||||
{
|
|
||||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* handle special cases */
|
|
||||||
if (movementInfo.HasMovementFlag(MOVEFLAG_ONTRANSPORT))
|
|
||||||
{
|
|
||||||
// transports size limited
|
|
||||||
// (also received at zeppelin/lift leave by some reason with t_* as absolute in continent coordinates, can be safely skipped)
|
|
||||||
if( movementInfo.GetTransportPos()->x > 50 || movementInfo.GetTransportPos()->y > 50 || movementInfo.GetTransportPos()->z > 100 )
|
|
||||||
{
|
|
||||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !MaNGOS::IsValidMapCoord(movementInfo.GetPos()->x + movementInfo.GetTransportPos()->x, movementInfo.GetPos()->y + movementInfo.GetTransportPos()->y,
|
|
||||||
movementInfo.GetPos()->z + movementInfo.GetTransportPos()->z, movementInfo.GetPos()->o + movementInfo.GetTransportPos()->o) )
|
|
||||||
{
|
|
||||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we boarded a transport, add us to it
|
|
||||||
if (plMover && !plMover->m_transport)
|
|
||||||
{
|
|
||||||
// elevators also cause the client to send MOVEFLAG_ONTRANSPORT - just unmount if the guid can be found in the transport list
|
|
||||||
for (MapManager::TransportSet::const_iterator iter = sMapMgr.m_Transports.begin(); iter != sMapMgr.m_Transports.end(); ++iter)
|
|
||||||
{
|
|
||||||
if ((*iter)->GetObjectGuid() == movementInfo.GetTransportGuid())
|
|
||||||
{
|
|
||||||
plMover->m_transport = (*iter);
|
|
||||||
(*iter)->AddPassenger(plMover);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (plMover && plMover->m_transport) // if we were on a transport, leave
|
|
||||||
{
|
|
||||||
plMover->m_transport->RemovePassenger(plMover);
|
|
||||||
plMover->m_transport = NULL;
|
|
||||||
movementInfo.ClearTransportData();
|
|
||||||
}
|
|
||||||
|
|
||||||
// fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map).
|
// fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map).
|
||||||
if (opcode == MSG_MOVE_FALL_LAND && plMover && !plMover->IsTaxiFlying())
|
if (opcode == MSG_MOVE_FALL_LAND && plMover && !plMover->IsTaxiFlying())
|
||||||
plMover->HandleFall(movementInfo);
|
plMover->HandleFall(movementInfo);
|
||||||
|
|
||||||
if (plMover && (movementInfo.HasMovementFlag(MOVEFLAG_SWIMMING) != plMover->IsInWater()))
|
|
||||||
{
|
|
||||||
// now client not include swimming flag in case jumping under water
|
|
||||||
plMover->SetInWater( !plMover->IsInWater() || plMover->GetBaseMap()->IsUnderWater(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------*/
|
|
||||||
|
|
||||||
/* process position-change */
|
/* process position-change */
|
||||||
movementInfo.UpdateTime(getMSTime());
|
HandleMoverRelocation(movementInfo,mover,plMover);
|
||||||
|
|
||||||
WorldPacket data(opcode, recv_data.size());
|
if (plMover)
|
||||||
data.appendPackGUID(mover->GetGUID()); // write guid
|
|
||||||
movementInfo.Write(data); // write data
|
|
||||||
mover->SendMessageToSetExcept(&data, _player);
|
|
||||||
|
|
||||||
if(plMover) // nothing is charmed, or player charmed
|
|
||||||
{
|
|
||||||
plMover->SetPosition(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o);
|
|
||||||
plMover->m_movementInfo = movementInfo;
|
|
||||||
plMover->UpdateFallInformationIfNeed(movementInfo, opcode);
|
plMover->UpdateFallInformationIfNeed(movementInfo, opcode);
|
||||||
|
|
||||||
// after move info set
|
// after move info set
|
||||||
if ((opcode == MSG_MOVE_SET_WALK_MODE || opcode == MSG_MOVE_SET_RUN_MODE))
|
if (opcode == MSG_MOVE_SET_WALK_MODE || opcode == MSG_MOVE_SET_RUN_MODE)
|
||||||
plMover->UpdateWalkMode(plMover, false);
|
mover->UpdateWalkMode(mover, false);
|
||||||
|
|
||||||
if(plMover->isMovingOrTurning())
|
WorldPacket data(opcode, recv_data.size());
|
||||||
plMover->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
|
data << mover->GetPackGUID(); // write guid
|
||||||
|
movementInfo.Write(data); // write data
|
||||||
if(movementInfo.GetPos()->z < -500.0f)
|
mover->SendMessageToSetExcept(&data, _player);
|
||||||
{
|
|
||||||
if(plMover->InBattleGround()
|
|
||||||
&& plMover->GetBattleGround()
|
|
||||||
&& plMover->GetBattleGround()->HandlePlayerUnderMap(_player))
|
|
||||||
{
|
|
||||||
// do nothing, the handle already did if returned true
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// NOTE: this is actually called many times while falling
|
|
||||||
// even after the player has been teleported away
|
|
||||||
// TODO: discard movement packets after the player is rooted
|
|
||||||
if(plMover->isAlive())
|
|
||||||
{
|
|
||||||
plMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, plMover->GetMaxHealth());
|
|
||||||
// pl can be alive if GM/etc
|
|
||||||
if(!plMover->isAlive())
|
|
||||||
{
|
|
||||||
// change the death state to CORPSE to prevent the death timer from
|
|
||||||
// starting in the next player update
|
|
||||||
plMover->KillPlayer();
|
|
||||||
plMover->BuildPlayerRepop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// cancel the death timer here if started
|
|
||||||
plMover->RepopAtGraveyard();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // creature charmed
|
|
||||||
{
|
|
||||||
if(mover->IsInWorld())
|
|
||||||
mover->GetMap()->CreatureRelocation((Creature*)mover, movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleForceSpeedChangeAckOpcodes(WorldPacket &recv_data)
|
void WorldSession::HandleForceSpeedChangeAckOpcodes(WorldPacket &recv_data)
|
||||||
|
|
@ -513,12 +415,36 @@ void WorldSession::HandleMoveKnockBackAck( WorldPacket & recv_data )
|
||||||
{
|
{
|
||||||
DEBUG_LOG("CMSG_MOVE_KNOCK_BACK_ACK");
|
DEBUG_LOG("CMSG_MOVE_KNOCK_BACK_ACK");
|
||||||
|
|
||||||
ObjectGuid guid; // guid - unused
|
Unit *mover = _player->GetMover();
|
||||||
|
Player *plMover = mover->GetTypeId() == TYPEID_PLAYER ? (Player*)mover : NULL;
|
||||||
|
|
||||||
|
// ignore, waiting processing in WorldSession::HandleMoveWorldportAckOpcode and WorldSession::HandleMoveTeleportAck
|
||||||
|
if(plMover && plMover->IsBeingTeleported())
|
||||||
|
{
|
||||||
|
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectGuid guid;
|
||||||
MovementInfo movementInfo;
|
MovementInfo movementInfo;
|
||||||
|
|
||||||
recv_data >> guid.ReadAsPacked();
|
recv_data >> guid.ReadAsPacked();
|
||||||
recv_data >> Unused<uint32>(); // unk
|
recv_data >> Unused<uint32>(); // knockback packets counter
|
||||||
recv_data >> movementInfo;
|
recv_data >> movementInfo;
|
||||||
|
|
||||||
|
if (!VerifyMovementInfo(movementInfo,guid,mover))
|
||||||
|
return;
|
||||||
|
|
||||||
|
HandleMoverRelocation(movementInfo, mover, plMover);
|
||||||
|
|
||||||
|
WorldPacket data(MSG_MOVE_KNOCK_BACK, recv_data.size() + 15);
|
||||||
|
data << mover->GetPackGUID();
|
||||||
|
data << movementInfo;
|
||||||
|
data << movementInfo.GetJumpInfo().sinAngle;
|
||||||
|
data << movementInfo.GetJumpInfo().cosAngle;
|
||||||
|
data << movementInfo.GetJumpInfo().xyspeed;
|
||||||
|
data << movementInfo.GetJumpInfo().velocity;
|
||||||
|
mover->SendMessageToSetExcept(&data, _player);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleMoveHoverAck( WorldPacket& recv_data )
|
void WorldSession::HandleMoveHoverAck( WorldPacket& recv_data )
|
||||||
|
|
@ -559,3 +485,102 @@ void WorldSession::HandleSummonResponseOpcode(WorldPacket& recv_data)
|
||||||
|
|
||||||
_player->SummonIfPossible(agree);
|
_player->SummonIfPossible(agree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WorldSession::VerifyMovementInfo(MovementInfo& movementInfo, ObjectGuid& guid, Unit* mover) const
|
||||||
|
{
|
||||||
|
// ignore wrong guid (player attempt cheating own session for not own guid possible...)
|
||||||
|
if (guid != mover->GetObjectGuid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!MaNGOS::IsValidMapCoord(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (movementInfo.HasMovementFlag(MOVEFLAG_ONTRANSPORT))
|
||||||
|
{
|
||||||
|
// transports size limited
|
||||||
|
// (also received at zeppelin/lift leave by some reason with t_* as absolute in continent coordinates, can be safely skipped)
|
||||||
|
if( movementInfo.GetTransportPos()->x > 50 || movementInfo.GetTransportPos()->y > 50 || movementInfo.GetTransportPos()->z > 100 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if( !MaNGOS::IsValidMapCoord(movementInfo.GetPos()->x + movementInfo.GetTransportPos()->x, movementInfo.GetPos()->y + movementInfo.GetTransportPos()->y,
|
||||||
|
movementInfo.GetPos()->z + movementInfo.GetTransportPos()->z, movementInfo.GetPos()->o + movementInfo.GetTransportPos()->o) )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WorldSession::HandleMoverRelocation(MovementInfo& movementInfo, Unit* mover, Player* plMover)
|
||||||
|
{
|
||||||
|
movementInfo.UpdateTime(getMSTime());
|
||||||
|
|
||||||
|
if (plMover)
|
||||||
|
{
|
||||||
|
if (movementInfo.HasMovementFlag(MOVEFLAG_ONTRANSPORT) && !plMover->m_transport)
|
||||||
|
{
|
||||||
|
// elevators also cause the client to send MOVEFLAG_ONTRANSPORT - just unmount if the guid can be found in the transport list
|
||||||
|
for (MapManager::TransportSet::const_iterator iter = sMapMgr.m_Transports.begin(); iter != sMapMgr.m_Transports.end(); ++iter)
|
||||||
|
{
|
||||||
|
if ((*iter)->GetObjectGuid() == movementInfo.GetTransportGuid())
|
||||||
|
{
|
||||||
|
plMover->m_transport = (*iter);
|
||||||
|
(*iter)->AddPassenger(plMover);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (plMover->m_transport) // if we were on a transport, leave
|
||||||
|
{
|
||||||
|
plMover->m_transport->RemovePassenger(plMover);
|
||||||
|
plMover->m_transport = NULL;
|
||||||
|
movementInfo.ClearTransportData();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (movementInfo.HasMovementFlag(MOVEFLAG_SWIMMING) != plMover->IsInWater())
|
||||||
|
{
|
||||||
|
// now client not include swimming flag in case jumping under water
|
||||||
|
plMover->SetInWater( !plMover->IsInWater() || plMover->GetBaseMap()->IsUnderWater(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z) );
|
||||||
|
}
|
||||||
|
|
||||||
|
plMover->SetPosition(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o);
|
||||||
|
plMover->m_movementInfo = movementInfo;
|
||||||
|
|
||||||
|
if(movementInfo.GetPos()->z < -500.0f)
|
||||||
|
{
|
||||||
|
if(plMover->InBattleGround()
|
||||||
|
&& plMover->GetBattleGround()
|
||||||
|
&& plMover->GetBattleGround()->HandlePlayerUnderMap(_player))
|
||||||
|
{
|
||||||
|
// do nothing, the handle already did if returned true
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// NOTE: this is actually called many times while falling
|
||||||
|
// even after the player has been teleported away
|
||||||
|
// TODO: discard movement packets after the player is rooted
|
||||||
|
if(plMover->isAlive())
|
||||||
|
{
|
||||||
|
plMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, plMover->GetMaxHealth());
|
||||||
|
// pl can be alive if GM/etc
|
||||||
|
if(!plMover->isAlive())
|
||||||
|
{
|
||||||
|
// change the death state to CORPSE to prevent the death timer from
|
||||||
|
// starting in the next player update
|
||||||
|
plMover->KillPlayer();
|
||||||
|
plMover->BuildPlayerRepop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// cancel the death timer here if started
|
||||||
|
plMover->RepopAtGraveyard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // creature charmed
|
||||||
|
{
|
||||||
|
if (mover->IsInWorld())
|
||||||
|
mover->GetMap()->CreatureRelocation((Creature*)mover, movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -6042,6 +6042,8 @@ bool Player::SetPosition(float x, float y, float z, float orientation, bool tele
|
||||||
else
|
else
|
||||||
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
|
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
|
||||||
|
|
||||||
|
RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
|
||||||
|
|
||||||
// move and update visible state if need
|
// move and update visible state if need
|
||||||
m->PlayerRelocation(this, x, y, z, orientation);
|
m->PlayerRelocation(this, x, y, z, orientation);
|
||||||
|
|
||||||
|
|
@ -6056,7 +6058,7 @@ bool Player::SetPosition(float x, float y, float z, float orientation, bool tele
|
||||||
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
|
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
|
||||||
|
|
||||||
if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE))
|
if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE))
|
||||||
GetSession()->SendCancelTrade(); // will clode both side trade windows
|
GetSession()->SendCancelTrade(); // will close both side trade windows
|
||||||
}
|
}
|
||||||
|
|
||||||
// code block for underwater state update
|
// code block for underwater state update
|
||||||
|
|
|
||||||
|
|
@ -101,10 +101,10 @@ void MovementInfo::Read(ByteBuffer &data)
|
||||||
|
|
||||||
if(HasMovementFlag(MOVEFLAG_FALLING))
|
if(HasMovementFlag(MOVEFLAG_FALLING))
|
||||||
{
|
{
|
||||||
data >> j_velocity;
|
data >> jump.velocity;
|
||||||
data >> j_sinAngle;
|
data >> jump.sinAngle;
|
||||||
data >> j_cosAngle;
|
data >> jump.cosAngle;
|
||||||
data >> j_xyspeed;
|
data >> jump.xyspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(HasMovementFlag(MOVEFLAG_SPLINE_ELEVATION))
|
if(HasMovementFlag(MOVEFLAG_SPLINE_ELEVATION))
|
||||||
|
|
@ -146,10 +146,10 @@ void MovementInfo::Write(ByteBuffer &data) const
|
||||||
|
|
||||||
if(HasMovementFlag(MOVEFLAG_FALLING))
|
if(HasMovementFlag(MOVEFLAG_FALLING))
|
||||||
{
|
{
|
||||||
data << j_velocity;
|
data << jump.velocity;
|
||||||
data << j_sinAngle;
|
data << jump.sinAngle;
|
||||||
data << j_cosAngle;
|
data << jump.cosAngle;
|
||||||
data << j_xyspeed;
|
data << jump.xyspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(HasMovementFlag(MOVEFLAG_SPLINE_ELEVATION))
|
if(HasMovementFlag(MOVEFLAG_SPLINE_ELEVATION))
|
||||||
|
|
|
||||||
|
|
@ -750,8 +750,7 @@ class MovementInfo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MovementInfo() : moveFlags(MOVEFLAG_NONE), moveFlags2(MOVEFLAG2_NONE), time(0),
|
MovementInfo() : moveFlags(MOVEFLAG_NONE), moveFlags2(MOVEFLAG2_NONE), time(0),
|
||||||
t_time(0), t_seat(-1), t_time2(0), s_pitch(0.0f), fallTime(0), j_velocity(0.0f), j_sinAngle(0.0f),
|
t_time(0), t_seat(-1), t_time2(0), s_pitch(0.0f), fallTime(0), u_unk1(0.0f) {}
|
||||||
j_cosAngle(0.0f), j_xyspeed(0.0f), u_unk1(0.0f) {}
|
|
||||||
|
|
||||||
// Read/Write methods
|
// Read/Write methods
|
||||||
void Read(ByteBuffer &data);
|
void Read(ByteBuffer &data);
|
||||||
|
|
@ -795,6 +794,13 @@ class MovementInfo
|
||||||
void ChangePosition(float x, float y, float z, float o) { pos.x = x; pos.y = y; pos.z = z; pos.o = o; }
|
void ChangePosition(float x, float y, float z, float o) { pos.x = x; pos.y = y; pos.z = z; pos.o = o; }
|
||||||
void UpdateTime(uint32 _time) { time = _time; }
|
void UpdateTime(uint32 _time) { time = _time; }
|
||||||
|
|
||||||
|
struct JumpInfo
|
||||||
|
{
|
||||||
|
JumpInfo() : velocity(0.f), sinAngle(0.f), cosAngle(0.f), xyspeed(0.f) {}
|
||||||
|
float velocity, sinAngle, cosAngle, xyspeed;
|
||||||
|
};
|
||||||
|
|
||||||
|
JumpInfo const& GetJumpInfo() const { return jump; }
|
||||||
private:
|
private:
|
||||||
// common
|
// common
|
||||||
uint32 moveFlags; // see enum MovementFlags
|
uint32 moveFlags; // see enum MovementFlags
|
||||||
|
|
@ -812,7 +818,7 @@ class MovementInfo
|
||||||
// last fall time
|
// last fall time
|
||||||
uint32 fallTime;
|
uint32 fallTime;
|
||||||
// jumping
|
// jumping
|
||||||
float j_velocity, j_sinAngle, j_cosAngle, j_xyspeed;
|
JumpInfo jump;
|
||||||
// spline
|
// spline
|
||||||
float u_unk1;
|
float u_unk1;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ class QueryResult;
|
||||||
class LoginQueryHolder;
|
class LoginQueryHolder;
|
||||||
class CharacterHandler;
|
class CharacterHandler;
|
||||||
class GMTicket;
|
class GMTicket;
|
||||||
|
class MovementInfo;
|
||||||
|
|
||||||
struct OpcodeHandler;
|
struct OpcodeHandler;
|
||||||
|
|
||||||
|
|
@ -777,6 +778,8 @@ class MANGOS_DLL_SPEC WorldSession
|
||||||
private:
|
private:
|
||||||
// private trade methods
|
// private trade methods
|
||||||
void moveItems(Item* myItems[], Item* hisItems[]);
|
void moveItems(Item* myItems[], Item* hisItems[]);
|
||||||
|
bool VerifyMovementInfo(MovementInfo&,ObjectGuid&, Unit*) const;
|
||||||
|
void HandleMoverRelocation(MovementInfo&, Unit*, Player*);
|
||||||
|
|
||||||
void ExecuteOpcode( OpcodeHandler const& opHandle, WorldPacket* packet );
|
void ExecuteOpcode( OpcodeHandler const& opHandle, WorldPacket* packet );
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "10652"
|
#define REVISION_NR "10653"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue