aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRat <gmstreetrat@gmail.com>2012-01-23 22:40:38 -0800
committerRat <gmstreetrat@gmail.com>2012-01-23 22:40:38 -0800
commitdad75019d46efa46237ea466385ee127922814a6 (patch)
tree36aa8f364c6770178e2f3cf5648ea3485f99ce66
parent47909d916a3d15c22a50d53b06a321e675e63d25 (diff)
parentb56d9c5e96c9526643045eeaef59366549dffca5 (diff)
Merge pull request #4934 from DrakeFish/4x_2
4.x - Added most spline speed changes. (and others)
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp209
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp83
2 files changed, 271 insertions, 21 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index b11772e7b20..35b337f5a15 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12661,25 +12661,153 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
data << float(GetSpeed(mtype));
break;
case MOVE_RUN_BACK:
- data.Initialize(SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
+ data.Initialize(SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED, 1 + 8 + 4);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[2]);
+
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[2]);
+
+ data << float(GetSpeed(mtype));
break;
case MOVE_SWIM:
- data.Initialize(SMSG_MOVE_SPLINE_SET_SWIM_SPEED, 8+4+2+4+4+4+4+4+4+4);
+ data.Initialize(SMSG_MOVE_SPLINE_SET_SWIM_SPEED, 1 + 8 + 4);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[6]);
+
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[7]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[5]);
break;
case MOVE_SWIM_BACK:
- data.Initialize(SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
+ data.Initialize(SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED, 1 + 8 + 4);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[7]);
+
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[2]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[5]);
break;
case MOVE_TURN_RATE:
- data.Initialize(SMSG_MOVE_SPLINE_SET_TURN_RATE, 8+4+2+4+4+4+4+4+4+4);
+ data.Initialize(SMSG_MOVE_SPLINE_SET_TURN_RATE, 1 + 8 + 4);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[2]);
+
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[0]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[3]);
break;
case MOVE_FLIGHT:
- data.Initialize(SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED, 8+4+2+4+4+4+4+4+4+4);
+ data.Initialize(SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED, 1 + 8 + 4);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[1]);
+
+ data << float(GetSpeed(mtype));
+
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[4]);
break;
case MOVE_FLIGHT_BACK:
- data.Initialize(SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
+ data.Initialize(SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED, 1 + 8 + 4);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[3]);
+
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[7]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[3]);
break;
case MOVE_PITCH_RATE:
- data.Initialize(SMSG_MOVE_SPLINE_SET_PITCH_RATE, 8+4+2+4+4+4+4+4+4+4);
+ data.Initialize(SMSG_MOVE_SPLINE_SET_PITCH_RATE, 1 + 8 + 4);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[1]);
+
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[4]);
+ data << float(GetSpeed(mtype));
break;
default:
sLog->outError("Unit::SetSpeed: Unsupported move type (%d), data not sent to client.", mtype);
@@ -16842,13 +16970,33 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ)
float vcos, vsin;
GetSinCos(x, y, vsin, vcos);
- WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8+4+4+4+4+4));
- data.append(GetPackGUID());
- data << uint32(0); // counter
- data << float(vcos); // x direction
- data << float(vsin); // y direction
- data << float(speedXY); // Horizontal speed
- data << float(-speedZ); // Z Movement speed (vertical)
+ WorldPacket data(SMSG_MOVE_KNOCK_BACK, (1+8+4+4+4+4+4));
+ uint64 guid = GetGUID();
+ uint8* bytes = (uint8*)&guid;
+
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[7]);
+
+ data.WriteByteSeq(bytes[0]);
+ data << float(speedXY);
+ data << uint32(0);
+ data << float(-speedZ);
+ data.WriteByteSeq(bytes[6]);
+ data << float(vcos);
+ data << float(vsin);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[5]);
player->GetSession()->SendPacket(&data);
}
@@ -17162,13 +17310,32 @@ void Unit::JumpTo(float speedXY, float speedZ, bool forward)
float vcos = cos(angle+GetOrientation());
float vsin = sin(angle+GetOrientation());
- WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8+4+4+4+4+4));
- data.append(GetPackGUID());
- data << uint32(0); // Sequence
- data << float(vcos); // x direction
- data << float(vsin); // y direction
- data << float(speedXY); // Horizontal speed
- data << float(-speedZ); // Z Movement speed (vertical)
+ WorldPacket data(SMSG_MOVE_KNOCK_BACK, (1+8+4+4+4+4+4));
+ uint64 guid = GetGUID();
+ uint8* bytes = (uint8*)&guid;
+
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[7]);
+
+ data.WriteByteSeq(bytes[0]);
+ data << float(speedXY);
+ data << uint32(0);
+ data << float(-speedZ);
+ data.WriteByteSeq(bytes[6]);
+ data << float(vcos);
+ data << float(vsin);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[5]);
ToPlayer()->GetSession()->SendPacket(&data);
}
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index 9fc220e600a..00832aa4d59 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -60,6 +60,7 @@ public:
{ "morph", SEC_GAMEMASTER, false, &HandleModifyMorphCommand, "", NULL },
{ "phase", SEC_ADMINISTRATOR, false, &HandleModifyPhaseCommand, "", NULL },
{ "gender", SEC_GAMEMASTER, false, &HandleModifyGenderCommand, "", NULL },
+ { "collision", SEC_GAMEMASTER, false, &HandleModifyCollisionCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
@@ -1374,6 +1375,88 @@ public:
return true;
}
+
+ static bool HandleModifyCollisionCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* target = handler->getSelectedPlayer();
+
+ if (!target)
+ {
+ handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ std::string param = (char*)args;
+
+ if (param == "on")
+ {
+ // enable collision
+ WorldPacket data;
+ uint64 guid = target->GetGUID();
+ uint8* bytes = (uint8*)&guid;
+
+ data.Initialize(SMSG_MOVE_SPLINE_ENABLE_COLLISION, 1 + 8);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[3]);
+
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[0]);
+
+ target->SendMessageToSet(&data, true);
+ handler->SendSysMessage("Enabled Collision");
+ return true;
+ }
+
+ if (param == "off")
+ {
+ // disable collision
+ WorldPacket data;
+ uint64 guid = target->GetGUID();
+ uint8* bytes = (uint8*)&guid;
+
+ data.Initialize(SMSG_MOVE_SPLINE_DISABLE_COLLISION, 1 + 8);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[0]);
+
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[2]);
+
+ target->SendMessageToSet(&data, true);
+ handler->SendSysMessage("Disabled Collision");
+ return true;
+ }
+
+ return false;
+ }
+
};
void AddSC_modify_commandscript()