* 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:
parent
9e5c1fdd30
commit
7882f809d3
@ -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\
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
};
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -33,28 +33,33 @@ enum MovementFlags
|
||||
MOVEMENTFLAG_BACKWARD = 0x00000002,
|
||||
MOVEMENTFLAG_STRAFE_LEFT = 0x00000004,
|
||||
MOVEMENTFLAG_STRAFE_RIGHT = 0x00000008,
|
||||
MOVEMENTFLAG_LEFT = 0x00000010,
|
||||
MOVEMENTFLAG_RIGHT = 0x00000020,
|
||||
MOVEMENTFLAG_TURN_LEFT = 0x00000010,
|
||||
MOVEMENTFLAG_TURN_RIGHT = 0x00000020,
|
||||
MOVEMENTFLAG_PITCH_UP = 0x00000040,
|
||||
MOVEMENTFLAG_PITCH_DOWN = 0x00000080,
|
||||
MOVEMENTFLAG_WALK = 0x00000100,
|
||||
MOVEMENTFLAG_WALK_MODE = 0x00000100, // Walking
|
||||
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_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_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_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_UNK3 = 0x40000000
|
||||
MOVEMENTFLAG_HOVER = 0x40000000
|
||||
};
|
||||
|
||||
struct MovementInfo
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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,"/");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user