466 lines
14 KiB
C#
466 lines
14 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System;
|
|||
|
|
|
|||
|
|
public class PacketManager
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
private static byte[] outStreamBuffer;
|
|||
|
|
|
|||
|
|
//packet id 1
|
|||
|
|
//sends player update
|
|||
|
|
public static void sendPlayerUpdatePacket(float x, float y, float z, float rotationY, float lookAngle, float animX, float animZ, float magnitude, byte flag)
|
|||
|
|
{
|
|||
|
|
//Debug.LogWarning("Send Player Packet " + playerId + ", x " + x + " y " + y + " z " + z);
|
|||
|
|
byte packetSize = 34;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
WriteByte(43, ref bufferPosition);
|
|||
|
|
WriteFloat(x, ref bufferPosition);
|
|||
|
|
WriteFloat(y, ref bufferPosition);
|
|||
|
|
WriteFloat(z, ref bufferPosition);
|
|||
|
|
WriteFloat(rotationY, ref bufferPosition);
|
|||
|
|
WriteFloat(lookAngle, ref bufferPosition);
|
|||
|
|
WriteFloat(animX, ref bufferPosition);
|
|||
|
|
WriteFloat(animZ, ref bufferPosition);
|
|||
|
|
WriteFloat(magnitude, ref bufferPosition);
|
|||
|
|
WriteByte(flag, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendLogoutPacket()
|
|||
|
|
{
|
|||
|
|
byte packetSize = 1;
|
|||
|
|
const byte packetId = 2;
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//packet id 3 send chat message
|
|||
|
|
public static void sendChatMessage(string message)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 2 + message.Length;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
const byte packetId = 3;
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteString(message, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//packet id 4 send player shot
|
|||
|
|
public static void sendPlayerShot(Vector3 origin, Vector3 direction, int[] hitFlag, Vector3[] impact, string[] gameObjectHit, int[] entityId, int [] hitSheild)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
//int packetSize = 33;
|
|||
|
|
//packetSize += 25;
|
|||
|
|
int packetSize = 26;
|
|||
|
|
for (int i = 0; i < hitFlag.Length; i++)
|
|||
|
|
{
|
|||
|
|
//packetSize += 4 + 1 + 12 + gameObjectHit[i].Length + 1 + 4;
|
|||
|
|
packetSize += 25 + gameObjectHit[i].Length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
const byte packetId = 54;
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
|
|||
|
|
WriteFloat(origin.x, ref bufferPosition);
|
|||
|
|
WriteFloat(origin.y, ref bufferPosition);
|
|||
|
|
WriteFloat(origin.z, ref bufferPosition);
|
|||
|
|
|
|||
|
|
WriteFloat(direction.x, ref bufferPosition);
|
|||
|
|
WriteFloat(direction.y, ref bufferPosition);
|
|||
|
|
WriteFloat(direction.z, ref bufferPosition);
|
|||
|
|
|
|||
|
|
WriteByte((byte)hitFlag.Length, ref bufferPosition);
|
|||
|
|
|
|||
|
|
for (int i = 0; i < hitFlag.Length; i++)
|
|||
|
|
{
|
|||
|
|
WriteInt(hitFlag[i], ref bufferPosition);
|
|||
|
|
|
|||
|
|
WriteFloat(impact[i].x, ref bufferPosition);
|
|||
|
|
WriteFloat(impact[i].y, ref bufferPosition);
|
|||
|
|
WriteFloat(impact[i].z, ref bufferPosition);
|
|||
|
|
WriteString(gameObjectHit[i], ref bufferPosition);
|
|||
|
|
WriteInt(entityId[i], ref bufferPosition);
|
|||
|
|
WriteInt(hitSheild[i], ref bufferPosition);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//packet id 5 - login request
|
|||
|
|
public static void sendLoginRequest(string username, string password)
|
|||
|
|
{
|
|||
|
|
String macAddress = Client.Instance.getMacAddress();
|
|||
|
|
GISocket.Instance.clearOutStream();
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
const byte packetId = 55;
|
|||
|
|
int packetSize = 9 + Config.CLIENT_VERSION.Length + username.Length + password.Length + macAddress.Length;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteInt(1, ref bufferPosition);
|
|||
|
|
WriteString(Config.CLIENT_VERSION, ref bufferPosition);
|
|||
|
|
WriteString(username, ref bufferPosition);
|
|||
|
|
WriteString(password, ref bufferPosition);
|
|||
|
|
WriteString(macAddress, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
//clear the outstream
|
|||
|
|
|
|||
|
|
GISocket.Instance.pushOutStream();
|
|||
|
|
|
|||
|
|
//print message
|
|||
|
|
// Debug.Log("Sending login request " + username + " " + password);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//packet id 6 send chat message
|
|||
|
|
public static void sendButtonClick(string buttonName)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = buttonName.Length + 4 + 1;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
const byte packetId = 6;
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteLongString(buttonName, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//packet 8 click object
|
|||
|
|
public static void sendObjectClick(string objectName, int x, int y)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = objectName.Length + 10;
|
|||
|
|
const byte packetId = 41;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteString(objectName, ref bufferPosition);
|
|||
|
|
WriteInt(x, ref bufferPosition);
|
|||
|
|
WriteInt(y, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//packet 9 drop item
|
|||
|
|
public static void sendDropItem(int itemId, int slot)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 9;
|
|||
|
|
const byte packetId = 42;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteInt(itemId, ref bufferPosition);
|
|||
|
|
WriteInt(slot, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//packet 10 move item in inventory
|
|||
|
|
public static void sendMoveItem(int from, int to, int inventoryOrBank)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 13;
|
|||
|
|
const byte packetId = 44;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteInt(from, ref bufferPosition);
|
|||
|
|
WriteInt(to, ref bufferPosition);
|
|||
|
|
WriteInt(inventoryOrBank, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendClickItem(int itemId, int slot)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 9;
|
|||
|
|
const byte packetId = 45;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteInt(itemId, ref bufferPosition);
|
|||
|
|
WriteInt(slot, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendPickupItem(int itemId, int x, int y)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 13;
|
|||
|
|
const byte packetId = 46;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteInt(itemId, ref bufferPosition);
|
|||
|
|
WriteInt(x, ref bufferPosition);
|
|||
|
|
WriteInt(y, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendUnequipItem(int slot)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 2;
|
|||
|
|
const byte packetId = 47;
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteByte((byte)slot, ref bufferPosition);
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendPing(float x, float y, float z, String parent)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 14 + parent.Length;
|
|||
|
|
const byte packetId = 48;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteFloat(x, ref bufferPosition);
|
|||
|
|
WriteFloat(y, ref bufferPosition);
|
|||
|
|
WriteFloat(z, ref bufferPosition);
|
|||
|
|
WriteString(parent, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendMeleeAttack(int hitFlag, int npcId)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 9;
|
|||
|
|
const byte packetId = 49;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteInt(hitFlag, ref bufferPosition);
|
|||
|
|
WriteInt(npcId, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendThrowItem(float dX, float dY, float dZ)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 13;
|
|||
|
|
const byte packetId = 50;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteFloat(dX, ref bufferPosition);
|
|||
|
|
WriteFloat(dY, ref bufferPosition);
|
|||
|
|
WriteFloat(dZ, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendThrowableExplosion(float x, float y, float z)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 13;
|
|||
|
|
const byte packetId = 51;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteFloat(x, ref bufferPosition);
|
|||
|
|
WriteFloat(y, ref bufferPosition);
|
|||
|
|
WriteFloat(z, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendWithdrawBankOrForgeItem(int slotID, int bankOrForge)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 9;
|
|||
|
|
const byte packetId = 18;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteInt(slotID, ref bufferPosition);
|
|||
|
|
WriteInt(bankOrForge, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendVoiceChatID(string voiceID)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetsize = 2 + voiceID.Length;
|
|||
|
|
const byte packetId = 19;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetsize];
|
|||
|
|
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteString(voiceID, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendFractionalCryptoCollection(int collectedPlayerID, int dropType)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 9;
|
|||
|
|
const byte packetId = 20;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetId, ref bufferPosition);
|
|||
|
|
WriteInt(collectedPlayerID, ref bufferPosition);
|
|||
|
|
WriteInt(dropType, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendForgeWeaponTrackers(int itemID)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 5;
|
|||
|
|
const byte packetID = 21;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetID, ref bufferPosition);
|
|||
|
|
WriteInt(itemID, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendNPCAttack(int type)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 5;
|
|||
|
|
const byte packetID = 23;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetID, ref bufferPosition);
|
|||
|
|
WriteInt(type, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendProjecctileHit(string projectile)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 2 + projectile.Length;
|
|||
|
|
const byte packetID = 22;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetID, ref bufferPosition);
|
|||
|
|
WriteString(projectile, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendPlaceItem(int itemID, float x, float y, float z, float rotY)
|
|||
|
|
{
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 21;
|
|||
|
|
const byte packetID = 52;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetID, ref bufferPosition);
|
|||
|
|
WriteInt(itemID, ref bufferPosition);
|
|||
|
|
WriteFloat(x, ref bufferPosition);
|
|||
|
|
WriteFloat(y, ref bufferPosition);
|
|||
|
|
WriteFloat(z, ref bufferPosition);
|
|||
|
|
WriteFloat(rotY, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void sendMineRock(int rockId) {
|
|||
|
|
int bufferPosition = 0;
|
|||
|
|
int packetSize = 5;
|
|||
|
|
const byte packetID = 53;
|
|||
|
|
|
|||
|
|
outStreamBuffer = new byte[packetSize];
|
|||
|
|
|
|||
|
|
WriteByte(packetID, ref bufferPosition);
|
|||
|
|
WriteInt(rockId, ref bufferPosition);
|
|||
|
|
|
|||
|
|
GISocket.Instance.addToOutStream(outStreamBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//write a byte to the oustream buffer
|
|||
|
|
private static void WriteByte(byte data, ref int position)
|
|||
|
|
{
|
|||
|
|
if (position < outStreamBuffer.Length)
|
|||
|
|
outStreamBuffer[position] = data;
|
|||
|
|
position += 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//write a short to the oustream buffer
|
|||
|
|
private static void WriteShort(short data, ref int position)
|
|||
|
|
{
|
|||
|
|
outStreamBuffer[position] = (byte)(data >> 8);
|
|||
|
|
outStreamBuffer[position + 1] = (byte)data;
|
|||
|
|
position += 2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//write an int to the outstream buffer
|
|||
|
|
private static void WriteInt(int data, ref int position)
|
|||
|
|
{
|
|||
|
|
outStreamBuffer[position] = (byte)(data >> 24);
|
|||
|
|
outStreamBuffer[position + 1] = (byte)(data >> 16);
|
|||
|
|
outStreamBuffer[position + 2] = (byte)(data >> 8);
|
|||
|
|
outStreamBuffer[position + 3] = (byte)(data);
|
|||
|
|
position += 4;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//write a string to the outstream buffer
|
|||
|
|
//must be less than 254 characters
|
|||
|
|
private static void WriteString(string data, ref int position)
|
|||
|
|
{
|
|||
|
|
if (data.Length > 254)
|
|||
|
|
{
|
|||
|
|
Debug.Log("Error: String length more than 255");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
//write lenngth
|
|||
|
|
outStreamBuffer[position] = (byte)data.Length;
|
|||
|
|
position += 1;
|
|||
|
|
|
|||
|
|
//write string to buffer
|
|||
|
|
for (int i = 0; i < data.Length; i++)
|
|||
|
|
{
|
|||
|
|
outStreamBuffer[position + i] = (byte)data[i];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
position += data.Length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//write a string to the outstream buffer
|
|||
|
|
//must be less than 254 characters
|
|||
|
|
private static void WriteLongString(string data, ref int position)
|
|||
|
|
{
|
|||
|
|
//write lenngth
|
|||
|
|
WriteInt(data.Length, ref position);
|
|||
|
|
|
|||
|
|
//write string to buffer
|
|||
|
|
for (int i = 0; i < data.Length; i++)
|
|||
|
|
{
|
|||
|
|
outStreamBuffer[position + i] = (byte)data[i];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
position += data.Length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static void WriteFloat(float f, ref int position)
|
|||
|
|
{
|
|||
|
|
//string data = f.ToString("#.##");
|
|||
|
|
//WriteString(data, ref position);
|
|||
|
|
float data = f * 100;
|
|||
|
|
WriteInt((int)data, ref position);
|
|||
|
|
}
|
|||
|
|
}
|