* Fixed make install (irrlicht now does not try to install)

* Updated SysDefs to work better on 64bit systems, please report problems on 32bit systems
* Various x64 related fixes
* Updated movementflags to recent mangos version
* ... and fixed movement packets. not sure if that is the best way...
This commit is contained in:
shlainn 2010-03-04 19:32:33 +00:00
parent 9e5c1fdd30
commit 7882f809d3
10 changed files with 85 additions and 61 deletions

View File

@ -1,5 +1,5 @@
## Process this file with automake to produce Makefile.in
AM_CPPFLAGS = -I$(top_builddir)/src/Client -I$(top_builddir)/src/shared -I$(top_builddir)/src/Client/DefScript -I$(top_builddir)/src/Client/World -I$(top_builddir)/src/Client/Realm -I$(top_builddir)/src/dep/include -Wall -D_DEBUG
AM_CPPFLAGS = -I$(top_builddir)/src/Client -I$(top_builddir)/src/shared -I$(top_builddir)/src/Client/DefScript -I$(top_builddir)/src/Client/World -I$(top_builddir)/src/Client/Realm -I$(top_builddir)/src/dep/include -Wall
## Build pseuwow
noinst_LIBRARIES = libgui.a
libgui_a_SOURCES =CCursorController.cpp DrawObject.cpp MInput.h Scene.h SImage.h\

View File

@ -32,9 +32,10 @@ void MovementMgr::SetInstance(PseuInstance *inst)
void MovementMgr::_BuildPacket(uint16 opcode)
{
WorldPacket *wp = new WorldPacket(opcode,4+1+4+12); // it can be larger, if we are jumping, on transport or swimming
WorldPacket *wp = new WorldPacket(opcode,4+2+4+16); // it can be larger, if we are jumping, on transport or swimming
wp->appendPackGUID(_mychar->GetGUID());
*wp << _moveFlags;
*wp << (uint16)0; // unk
*wp << (uint16)0; // flags2 , safe to set 0 for now (shlainn)
*wp << getMSTime();
*wp << _mychar->GetPosition();
// TODO: transport not yet handled/done
@ -50,7 +51,7 @@ void MovementMgr::_BuildPacket(uint16 opcode)
*wp << (float)0; // angle; 1.55=looking up, -1.55=looking down, 0=looking forward
}
*wp << (uint32)0; // last fall time (also used when jumping)
if(_moveFlags & MOVEMENTFLAG_JUMPING)
if(_moveFlags & MOVEMENTFLAG_PENDINGSTOP)
{
*wp << (float)0; //unk value, or as mangos calls it: j_unk ^^
*wp << sin(_mychar->GetO()+ (M_PI/2));
@ -165,7 +166,7 @@ void MovementMgr::MoveStop(void)
{
if(!(_moveFlags & (MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD)))
return;
_moveFlags &= ~(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_WALK);
_moveFlags &= ~(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_WALK_MODE);
Update(true);
_BuildPacket(MSG_MOVE_STOP);
}
@ -184,7 +185,7 @@ void MovementMgr::MoveStartBackward(void)
{
if(_moveFlags & MOVEMENTFLAG_BACKWARD)
return;
_moveFlags |= (MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_WALK); // backward walk is always slow; flag must be set, otherwise causing weird movement in other client
_moveFlags |= (MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_WALK_MODE); // backward walk is always slow; flag must be set, otherwise causing weird movement in other client
_moveFlags &= ~MOVEMENTFLAG_FORWARD;
Update(true);
_BuildPacket(MSG_MOVE_START_BACKWARD);
@ -222,29 +223,29 @@ void MovementMgr::MoveStopStrafe(void)
void MovementMgr::MoveStartTurnLeft(void)
{
if(_moveFlags & MOVEMENTFLAG_LEFT)
if(_moveFlags & MOVEMENTFLAG_TURN_LEFT)
return;
_moveFlags |= MOVEMENTFLAG_LEFT;
_moveFlags &= ~MOVEMENTFLAG_RIGHT;
_moveFlags |= MOVEMENTFLAG_TURN_LEFT;
_moveFlags &= ~MOVEMENTFLAG_TURN_RIGHT;
Update(true);
_BuildPacket(MSG_MOVE_START_TURN_LEFT);
}
void MovementMgr::MoveStartTurnRight(void)
{
if(_moveFlags & MOVEMENTFLAG_RIGHT)
if(_moveFlags & MOVEMENTFLAG_TURN_RIGHT)
return;
_moveFlags |= MOVEMENTFLAG_RIGHT;
_moveFlags &= ~MOVEMENTFLAG_LEFT;
_moveFlags |= MOVEMENTFLAG_TURN_RIGHT;
_moveFlags &= ~MOVEMENTFLAG_TURN_LEFT;
Update(true);
_BuildPacket(MSG_MOVE_START_TURN_RIGHT);
}
void MovementMgr::MoveStopTurn(void)
{
if(!(_moveFlags & (MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT)))
if(!(_moveFlags & (MOVEMENTFLAG_TURN_LEFT | MOVEMENTFLAG_TURN_RIGHT)))
return;
_moveFlags &= ~(MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT);
_moveFlags &= ~(MOVEMENTFLAG_TURN_LEFT | MOVEMENTFLAG_TURN_RIGHT);
Update(true);
_BuildPacket(MSG_MOVE_STOP_TURN);
}
@ -257,9 +258,9 @@ void MovementMgr::MoveSetFacing(void)
void MovementMgr::MoveJump(void)
{
if(!(_moveFlags & (MOVEMENTFLAG_JUMPING | MOVEMENTFLAG_FALLING)))
if(!(_moveFlags & (MOVEMENTFLAG_FALLING | MOVEMENTFLAG_PENDINGSTOP)))
return;
_moveFlags |= MOVEMENTFLAG_JUMPING;
_moveFlags |= MOVEMENTFLAG_FALLING;
Update(true);
_BuildPacket(MSG_MOVE_JUMP);
}
@ -271,7 +272,7 @@ bool MovementMgr::IsMoving(void)
bool MovementMgr::IsTurning(void)
{
return _moveFlags & (MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT);
return _moveFlags & (MOVEMENTFLAG_TURN_LEFT | MOVEMENTFLAG_TURN_RIGHT);
}
bool MovementMgr::IsWalking(void)

View File

@ -15,7 +15,7 @@ enum MovementFlagsEx
{
// custom flags
MOVEMENTFLAG_ANY_MOVE = (MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT
| MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT),
| MOVEMENTFLAG_TURN_LEFT | MOVEMENTFLAG_TURN_RIGHT),
MOVEMENTFLAG_ANY_MOVE_NOT_TURNING = (MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT)
};

View File

@ -277,22 +277,22 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
logdev("TRANSPORT @ mi.flags: guid="I64FMT" x=%f y=%f z=%f o=%f", mi.t_guid, mi.t_x, mi.t_y, mi.t_z, mi.t_o);
}
if((mi.flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_UNK5)) || (mi.unkFlags & 0x20))
if((mi.flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (mi.unkFlags & 0x20)) //The last one is MOVEFLAG2_ALLOW_PITCHING in MaNGOS
{
recvPacket >> mi.s_angle;
logdev("MovementUpdate: MOVEMENTFLAG_SWIMMING is set, angle = %f!", mi.s_angle);
logdev("MovementUpdate: MOVEMENTFLAG_SWIMMING or FLYING is set, angle = %f!", mi.s_angle);
}
recvPacket >> mi.fallTime;
logdev("MovementUpdate: FallTime = %u", mi.fallTime);
if(mi.flags & MOVEMENTFLAG_JUMPING)
if(mi.flags & MOVEMENTFLAG_FALLING)
{
recvPacket >> mi.j_unk >> mi.j_sinAngle >> mi.j_cosAngle >> mi.j_xyspeed;
logdev("MovementUpdate: MOVEMENTFLAG_JUMPING is set, unk=%f sinA=%f cosA=%f xyspeed=%f = %u", mi.j_unk, mi.j_sinAngle, mi.j_cosAngle, mi.j_xyspeed);
logdev("MovementUpdate: MOVEMENTFLAG_FALLING is set, unk=%f sinA=%f cosA=%f xyspeed=%f = %u", mi.j_unk, mi.j_sinAngle, mi.j_cosAngle, mi.j_xyspeed);
}
if(mi.flags & MOVEMENTFLAG_SPLINE)
if(mi.flags & MOVEMENTFLAG_SPLINE_ELEVATION)
{
recvPacket >> mi.u_unk1;
logdev("MovementUpdate: MOVEMENTFLAG_SPLINE is set, got %u", mi.u_unk1);
@ -317,7 +317,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
}
// TODO: correct this one as soon as its meaning is known OR if it appears often and needs to be fixed
if(mi.flags & MOVEMENTFLAG_SPLINE2)
if(mi.flags & MOVEMENTFLAG_SPLINE_ENABLED)
{
logerror("MovementUpdate: MOVEMENTFLAG_SPLINE2 is set, if you see this message please report it!");
return;

View File

@ -28,33 +28,38 @@ enum OBJECT_UPDATE_FLAGS
enum MovementFlags
{
MOVEMENTFLAG_NONE = 0x00000000,
MOVEMENTFLAG_FORWARD = 0x00000001,
MOVEMENTFLAG_BACKWARD = 0x00000002,
MOVEMENTFLAG_STRAFE_LEFT = 0x00000004,
MOVEMENTFLAG_STRAFE_RIGHT = 0x00000008,
MOVEMENTFLAG_LEFT = 0x00000010,
MOVEMENTFLAG_RIGHT = 0x00000020,
MOVEMENTFLAG_PITCH_UP = 0x00000040,
MOVEMENTFLAG_PITCH_DOWN = 0x00000080,
MOVEMENTFLAG_WALK = 0x00000100,
MOVEMENTFLAG_ONTRANSPORT = 0x00000200,
MOVEMENTFLAG_UNK1 = 0x00000400,
MOVEMENTFLAG_FLY_UNK1 = 0x00000800,
MOVEMENTFLAG_JUMPING = 0x00001000,
MOVEMENTFLAG_UNK4 = 0x00002000,
MOVEMENTFLAG_FALLING = 0x00004000,
// 0x8000, 0x10000, 0x20000, 0x40000, 0x80000, 0x100000
MOVEMENTFLAG_SWIMMING = 0x00200000, // appears with fly flag also
MOVEMENTFLAG_FLY_UP = 0x00400000,
MOVEMENTFLAG_CAN_FLY = 0x00800000,
MOVEMENTFLAG_FLYING = 0x01000000,
MOVEMENTFLAG_UNK5 = 0x02000000,
MOVEMENTFLAG_SPLINE = 0x04000000, // probably wrong name
MOVEMENTFLAG_SPLINE2 = 0x08000000,
MOVEMENTFLAG_WATERWALKING = 0x10000000,
MOVEMENTFLAG_SAFE_FALL = 0x20000000, // active rogue safe fall spell (passive)
MOVEMENTFLAG_UNK3 = 0x40000000
MOVEMENTFLAG_NONE = 0x00000000,
MOVEMENTFLAG_FORWARD = 0x00000001,
MOVEMENTFLAG_BACKWARD = 0x00000002,
MOVEMENTFLAG_STRAFE_LEFT = 0x00000004,
MOVEMENTFLAG_STRAFE_RIGHT = 0x00000008,
MOVEMENTFLAG_TURN_LEFT = 0x00000010,
MOVEMENTFLAG_TURN_RIGHT = 0x00000020,
MOVEMENTFLAG_PITCH_UP = 0x00000040,
MOVEMENTFLAG_PITCH_DOWN = 0x00000080,
MOVEMENTFLAG_WALK_MODE = 0x00000100, // Walking
MOVEMENTFLAG_ONTRANSPORT = 0x00000200,
MOVEMENTFLAG_LEVITATING = 0x00000400,
MOVEMENTFLAG_ROOT = 0x00000800,
MOVEMENTFLAG_FALLING = 0x00001000,
MOVEMENTFLAG_FALLINGFAR = 0x00002000,
MOVEMENTFLAG_PENDINGSTOP = 0x00004000,
MOVEMENTFLAG_PENDINGSTRAFESTOP = 0x00008000,
MOVEMENTFLAG_PENDINGFORWARD = 0x00010000,
MOVEMENTFLAG_PENDINGBACKWARD = 0x00020000,
MOVEMENTFLAG_PENDINGSTRAFELEFT = 0x00040000,
MOVEMENTFLAG_PENDINGSTRAFERIGHT = 0x00080000,
MOVEMENTFLAG_PENDINGROOT = 0x00100000,
MOVEMENTFLAG_SWIMMING = 0x00200000, // appears with fly flag also
MOVEMENTFLAG_ASCENDING = 0x00400000, // swim up also
MOVEMENTFLAG_DESCENDING = 0x00800000, // swim down also
MOVEMENTFLAG_CAN_FLY = 0x01000000, // can fly in 3.3?
MOVEMENTFLAG_FLYING = 0x02000000, // Actual flying mode
MOVEMENTFLAG_SPLINE_ELEVATION = 0x04000000, // used for flight paths
MOVEMENTFLAG_SPLINE_ENABLED = 0x08000000, // used for flight paths
MOVEMENTFLAG_WATERWALKING = 0x10000000, // prevent unit from falling through water
MOVEMENTFLAG_SAFE_FALL = 0x20000000, // active rogue safe fall spell (passive)
MOVEMENTFLAG_HOVER = 0x40000000
};
struct MovementInfo

View File

@ -183,7 +183,6 @@ void WorldSession::HandleWorldPacket(WorldPacket *packet)
bool known = false;
uint16 hpos;
logdebug("Handling packet with opcode %u",packet->GetOpcode());
for (hpos = 0; table[hpos].handler != NULL; hpos++)
{
if (table[hpos].opcode == packet->GetOpcode())
@ -1068,9 +1067,9 @@ void WorldSession::_HandleMovementOpcode(WorldPacket& recvPacket)
uint32 flags, time, unk32;
float x, y, z, o;
uint64 guid;
uint16 unk16;
uint16 flags2;
guid = recvPacket.GetPackedGuid();
recvPacket >> flags >> unk16 >> time >> x >> y >> z >> o >> unk32;
recvPacket >> flags >> flags2 >> time >> x >> y >> z >> o >> unk32;
DEBUG(logdebug("MOVE: "I64FMT" -> time=%u flags=0x%X x=%.4f y=%.4f z=%.4f o=%.4f",guid,time,flags,x,y,z,o));
Object *obj = objmgr.GetObj(guid);
if(obj && obj->IsWorldObject())

View File

@ -126,9 +126,9 @@ sharedlib_osx: $(LINKOBJ)
# Installs Irrlicht if it was created as shared lib
install:
cp $(LIB_PATH)/$(SHARED_LIB).$(VERSION) $(INSTALL_DIR)
cd $(INSTALL_DIR) && ln -s libIrrlicht.so.$(VERSION) $(SHARED_LIB)
ldconfig -n $(INSTALL_DIR)
# cp $(LIB_PATH)/$(SHARED_LIB).$(VERSION) $(INSTALL_DIR)
# cd $(INSTALL_DIR) && ln -s libIrrlicht.so.$(VERSION) $(SHARED_LIB)
# ldconfig -n $(INSTALL_DIR)
install_osx:
cp $(LIB_PATH)/$(SHARED_LIB).$(VERSION) $(INSTALL_DIR)

View File

@ -272,6 +272,25 @@ class ByteBuffer
if(buffer.size()) append(buffer.contents(),buffer.size());
}
void appendPackGUID(uint64 guid)
{
if (_storage.size() < _wpos + sizeof(guid) + 1)
_storage.resize(_wpos + sizeof(guid) + 1);
size_t mask_position = wpos();
*this << uint8(0);
for(uint8 i = 0; i < 8; ++i)
{
if(guid & 0xFF)
{
_storage[mask_position] |= uint8(1 << i);
*this << uint8(guid & 0xFF);
}
guid >>= 8;
}
}
void put(size_t pos, const uint8 *src, size_t cnt)
{
memcpy(&_storage[pos], src, cnt);

View File

@ -75,11 +75,11 @@
#define I64FMTD "%llu"
#define SI64FMTD "%lld"
typedef long long int64;
typedef long int32;
typedef int int32;
typedef short int16;
typedef char int8;
typedef unsigned long long uint64;
typedef unsigned long uint32;
typedef unsigned int uint32;
typedef unsigned short uint16;
typedef unsigned char uint8;
typedef unsigned short WORD;

View File

@ -240,7 +240,7 @@ void _FixFileName(std::string& str)
// extracts the file name from a given path
std::string _PathToFileName(std::string str)
{
uint32 pathend = str.find_last_of("/\\");
size_t pathend = str.find_last_of("/\\");
if(pathend != std::string::npos)
{
return str.substr(pathend+1);
@ -250,7 +250,7 @@ std::string _PathToFileName(std::string str)
std::string NormalizeFilename(std::string s)
{
uint32 p;
size_t p;
while( (p = s.find('\\')) != std::string::npos)//Replace \ by /
{
s.replace(p,1,"/");