public HostMutePlayerEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Id = packet.ReadInteger(); RoomId = packet.ReadInteger(); Minutes = packet.ReadInteger(); }
public HostMoveFurnitureEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Id = packet.ReadInteger(); Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger()); Direction = (HDirection)packet.ReadInteger(); }
public HostBanPlayerEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Id = packet.ReadInteger(); RoomId = packet.ReadInteger(); Ban = SKore.ToBan(packet.ReadString()); }
public HostShoutEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Message = packet.ReadString(); // TODO: Find the chunks before OwnerId and read them. Theme = (HTheme)packet.ReadInteger(packet.Length - 6); }
public PlayerUpdateEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Index = packet.ReadInteger(); FigureId = packet.ReadString(); Gender = SKore.ToGender(packet.ReadString()); Motto = packet.ReadString(); }
public void WriteStructureLog(HMessage packet, ASClass messageClass) { if (_invalidStructures.Contains(packet.Header)) { return; } int position = 0; string structureLog = $"{{l}}{{u:{packet.Header}}}"; ASMethod msgCtor = messageClass.Instance.Constructor; foreach (ASParameter parameter in msgCtor.Parameters) { switch (parameter.Type.Name.ToLower()) { case "string": if (!packet.CanReadString(position)) { continue; } structureLog += ($"{{s:{packet.ReadString(ref position)}}}"); break; case "boolean": if (packet.ReadableAt(position) < 1) { continue; } structureLog += ($"{{b:{packet.ReadBoolean(ref position)}}}"); break; case "int": if (packet.ReadableAt(position) < 4) { continue; } structureLog += ($"{{i:{packet.ReadInteger(ref position)}}}"); break; } } if (packet.ReadableAt(position) == 0) { WriteHighlight(structureLog + "\r\n", StructureHighlight); } else { _invalidStructures.Add(packet.Header); } }
public HFurniture(HMessage packet) { Id = packet.ReadInteger(); TypeId = packet.ReadInteger(); Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger()); Facing = (HDirection)packet.ReadInteger(); Tile.Z = double.Parse(packet.ReadString(), CultureInfo.InvariantCulture); var loc1 = packet.ReadString(); var loc3 = packet.ReadInteger(); Category = packet.ReadInteger(); Stuff = ReadData(packet, Category); var loc4 = packet.ReadInteger(); var loc5 = packet.ReadInteger(); OwnerId = packet.ReadInteger(); if (TypeId < 0) { var loc6 = packet.ReadString(); } }
public void init(HMessage message) { Id = message.ReadInteger(); Catalogname = message.ReadString(); message.ReadBoolean(); CreditCost = message.ReadInteger(); SpecialCost = message.ReadInteger(); SpecialType = message.ReadInteger(); AllowGift = message.ReadBoolean(); int ccount = message.ReadInteger(); for (int p = 0; p < ccount; p++) { string type = message.ReadString(); if (type == "b") { Badge = message.ReadString(); } else { sprite_id = message.ReadInteger(); SpecialData = message.ReadString(); Amount = message.ReadInteger(); Limited = message.ReadBoolean(); if (Limited) { message.ReadInteger(); message.ReadInteger(); } } } message.ReadInteger(); message.ReadBoolean(); message.ReadBoolean(); message.ReadString(); }
public FurnitureMoveEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Id = packet.ReadInteger(); TypeId = packet.ReadInteger(); int x = packet.ReadInteger(); int y = packet.ReadInteger(); Direction = (HDirection)packet.ReadInteger(); Tile = new HPoint(x, y, double.Parse(packet.ReadString())); // TODO: Find the chunks before OwnerId and read them. OwnerId = packet.ReadInteger(packet.Length - 6); }
private bool TryHandleHostNavigateRoom(HMessage current, HMessage previous) { if (previous.Length >= 12 && current.CanRead <string>(0) && current.ReadString() == "Navigation") { current.ReadString(); if (current.ReadString() != "go.official") { return(false); } if (previous.ReadInteger(0).ToString() == current.ReadString()) { OutgoingHeaders.NavigateRoom = previous.Header; _outLocked[previous.Header] = RaiseOnHostNavigateRoom; return(true); } } return(false); }
private bool TryHandleHostRaiseSign(HMessage current, HMessage previous) { if (previous.Length != 6) { return(false); } if (previous.ReadInteger(0) > 18) { return(false); } if (!current.CanReadString(22)) { return(false); } if (current.ReadString(22) != "sign") { return(false); } OutgoingDetected.RaiseSign = previous.Header; OutDetected[previous.Header] = RaiseOnHostRaiseSign; return(true); }
public HCatalogOffer(HMessage packet) { Id = packet.ReadInteger(); DisplayName = packet.ReadString(); IsRentable = packet.ReadBoolean(); CreditCost = packet.ReadInteger(); OtherCurrencyCost = packet.ReadInteger(); OtherCurrencyType = packet.ReadInteger(); CanGift = packet.ReadBoolean(); Products = new HCatalogProduct[packet.ReadInteger()]; for (int i = 0; i < Products.Length; i++) { Products[i] = new HCatalogProduct(packet); } ClubLevel = packet.ReadInteger(); IsPet = packet.ReadBoolean(); AllowBundle = packet.ReadBoolean(); PreviewImage = packet.ReadString(); }
public HostClickPlayerEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Id = packet.ReadInteger(); Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger()); }
private void Connected(object sender, ConnectedEventArgs e) { if (InvokeRequired) { Invoke(_connected, sender, e); return; } HMessage remoteEndPointPkt = Connection.Local.ReceivePacketAsync().Result; e.HotelServer = ConnectionPg.HotelServer = HotelEndPoint.Parse(remoteEndPointPkt.ReadString().Split('\0')[0], remoteEndPointPkt.ReadInteger()); e.IsFakingPolicyRequest = (e.HotelServer.Hotel == HHotel.Unknown); ConnectionPg.IsReceiving = true; Text = $"Tanji ~ Connected[{e.HotelServer}]"; TopMost = PacketLoggerUI.TopMost; PacketLoggerUI.RevisionTxt.Text = ("Revision: " + Game.Revision); PacketLoggerUI.Show(); PacketLoggerUI.WindowState = FormWindowState.Normal; BringToFront(); }
public static void ReadStuffData(int category, HMessage packet) { switch (category & 0xff) { case 0: { packet.ReadString(); break; } case 1: /* MapStuffData */ { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadString(); packet.ReadString(); } break; } case 2: /* StringArrayStuffData */ { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadString(); } break; } case 3: { packet.ReadString(); packet.ReadInteger(); break; } case 5: /* IntArrayStuffData */ { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadInteger(); } break; } case 6: /* HighScoreStuffData */ { packet.ReadString(); packet.ReadInteger(); packet.ReadInteger(); int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { int score = packet.ReadInteger(); int subCount = packet.ReadInteger(); for (int k = 0; k < subCount; k++) { packet.ReadString(); } } break; } case 7: { packet.ReadString(); packet.ReadInteger(); packet.ReadInteger(); break; } } }
public HostTradeEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Index = packet.ReadInteger(); }
public HostRaiseSignEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Sign = (HSign)packet.ReadInteger(); }
public static IReadOnlyList<HFurniture> Parse(HMessage packet) { int ownersCount = packet.ReadInteger(); var owners = new Dictionary<int, string>(ownersCount); for (int i = 0; i < ownersCount; i++) { int ownerId = packet.ReadInteger(); string ownerName = packet.ReadString(); owners.Add(ownerId, ownerName); } int furnitureCount = packet.ReadInteger(); var furnitureList = new List<HFurniture>(furnitureCount); for (int i = 0; i < furnitureList.Capacity; i++) { int id = packet.ReadInteger(); int typeId = packet.ReadInteger(); int x = packet.ReadInteger(); int y = packet.ReadInteger(); var direction = (HDirection)packet.ReadInteger(); double z = double.Parse(packet.ReadString()); packet.ReadString(); packet.ReadInteger(); int categoryId = (packet.ReadInteger() & 0xFF); #region Switch Statement: categoryId switch (categoryId) { case 0: { packet.ReadString(); break; } case 1: { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadString(); packet.ReadString(); } break; } case 2: { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadString(); } break; } case 3: { packet.ReadString(); packet.ReadInteger(); break; } case 5: { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadInteger(); } break; } case 6: { packet.ReadString(); packet.ReadInteger(); packet.ReadInteger(); int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { int subCount = packet.ReadInteger(); for (int k = 0; k < subCount; k++) { packet.ReadString(); } } break; } case 7: { packet.ReadString(); packet.ReadInteger(); packet.ReadInteger(); break; } } #endregion packet.ReadInteger(); packet.ReadInteger(); int ownerId = packet.ReadInteger(); if (typeId < 0) packet.ReadString(); var furniture = new HFurniture(id, typeId, ownerId, owners[ownerId], new HPoint(x, y, z), direction); furnitureList.Add(furniture); } return furnitureList; }
/// <summary> /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntity"/> found in the <see cref="HMessage"/>. /// </summary> /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntity"/> data to parse.</param> /// <returns></returns> public static IReadOnlyList<HEntity> Parse(HMessage packet) { int entityCount = packet.ReadInteger(); var entityList = new List<HEntity>(entityCount); for (int i = 0; i < entityList.Capacity; i++) { int id = packet.ReadInteger(); string name = packet.ReadString(); string motto = packet.ReadString(); string figureId = packet.ReadString(); int index = packet.ReadInteger(); int x = packet.ReadInteger(); int y = packet.ReadInteger(); double z = double.Parse(packet.ReadString()); packet.ReadInteger(); int type = packet.ReadInteger(); HGender gender = HGender.Unknown; string favoriteGroup = string.Empty; #region Switch Statement: type switch (type) { case 1: { gender = SKore.ToGender(packet.ReadString()); packet.ReadInteger(); packet.ReadInteger(); favoriteGroup = packet.ReadString(); packet.ReadString(); packet.ReadInteger(); packet.ReadBoolean(); break; } case 2: { packet.ReadInteger(); packet.ReadInteger(); packet.ReadString(); packet.ReadInteger(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadInteger(); packet.ReadString(); break; } case 4: { packet.ReadString(); packet.ReadInteger(); packet.ReadString(); for (int j = packet.ReadInteger(); j > 0; j--) packet.ReadShort(); break; } } #endregion var entity = new HEntity(id, index, name, new HPoint(x, y, z), motto, gender, figureId, favoriteGroup); entityList.Add(entity); } return entityList; }
public HEntity(HMessage packet) { Id = packet.ReadInteger(); Name = packet.ReadString(); Motto = packet.ReadString(); FigureId = packet.ReadString(); Index = packet.ReadInteger(); Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger(), double.Parse(packet.ReadString(), CultureInfo.InvariantCulture)); packet.ReadInteger(); int type = packet.ReadInteger(); switch (type) { case 1: { Gender = SKore.ToGender(packet.ReadString()); packet.ReadInteger(); packet.ReadInteger(); FavoriteGroup = packet.ReadString(); packet.ReadString(); packet.ReadInteger(); packet.ReadBoolean(); break; } case 2: { packet.ReadInteger(); packet.ReadInteger(); packet.ReadString(); packet.ReadInteger(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadInteger(); packet.ReadString(); break; } case 4: { packet.ReadString(); packet.ReadInteger(); packet.ReadString(); for (int j = packet.ReadInteger(); j > 0; j--) { packet.ReadShort(); } break; } } }
public HostRaiseSignEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Sign = (HSign)packet.ReadInteger(); }
public static IReadOnlyList <HItem> Parse(HMessage packet) { packet.ReadInteger(); packet.ReadInteger(); int itemCount = packet.ReadInteger(); var itemList = new List <HItem>(itemCount); for (int i = 0; i < itemList.Capacity; i++) { packet.ReadInteger(); string s1 = packet.ReadString(); int id = packet.ReadInteger(); int typeId = packet.ReadInteger(); packet.ReadInteger(); int category = packet.ReadInteger(); HStuffData.ReadStuffData(category, packet); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); int secondsToExpiration = packet.ReadInteger(); bool hasRentPeriodStarted = packet.ReadBoolean(); int roomId = packet.ReadInteger(); var item = new HItem(id, typeId, category, secondsToExpiration, hasRentPeriodStarted, roomId); if (s1 == "S") { item.SlotId = packet.ReadString(); packet.ReadInteger(); } itemList.Add(item); } return(itemList); }
public static void AppendPacketStructure(StringBuilder sb, HMessage packet, StructureType[] structure) { int originalPosition = packet.Position; try { packet.Position = 0; for (int i = 0; i < structure.Length; i++) { sb.Append(" "); switch (structure[i]) { case StructureType.Boolean: sb.Append(packet.ReadBoolean() ? "true" : "false"); break; case StructureType.Byte: sb.Append($"b:{packet.ReadBytes(1)[0]}"); break; case StructureType.Short: sb.Append($"s:{(short)packet.ReadShort()}"); break; case StructureType.Integer: sb.Append($"{packet.ReadInteger()}"); break; case StructureType.String: sb.Append($"\"{EscapeString(packet.ReadString())}\""); break; case StructureType.ByteArray: int len = packet.ReadInteger(); byte[] bytes = packet.ReadBytes(len); sb.Append("a:["); for (int j = 0; j < bytes.Length; j++) { if (j > 0) { sb.Append(" "); } sb.Append(bytes[j].ToString("x2")); } sb.Append("]"); break; default: throw new Exception($"Unknown/unsupported structure type: {structure[i]}"); } } if (packet.Readable > 0) { byte[] extra = packet.ReadBytes(packet.Readable); sb.Append(" ["); for (int i = 0; i < extra.Length; i++) { if (i > 0) { sb.Append(" "); } sb.Append(extra[i].ToString("x2")); } sb.Append("]"); } } finally { packet.Position = originalPosition; } }
public HostPrivateMessageEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Id = packet.ReadInteger(); Message = packet.ReadString(); }
public HostGestureEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Gesture = (HGesture)packet.ReadInteger(); }
public HostPrivateMessageEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Id = packet.ReadInteger(); Message = packet.ReadString(); }
public HostGestureEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Gesture = (HGesture)packet.ReadInteger(); }
public static IReadOnlyList <HFurniture> Parse(HMessage packet) { int ownersCount = packet.ReadInteger(); var owners = new Dictionary <int, string>(ownersCount); for (int i = 0; i < ownersCount; i++) { int ownerId = packet.ReadInteger(); string ownerName = packet.ReadString(); owners.Add(ownerId, ownerName); } int furnitureCount = packet.ReadInteger(); var furnitureList = new List <HFurniture>(furnitureCount); for (int i = 0; i < furnitureList.Capacity; i++) { int id = packet.ReadInteger(); int typeId = packet.ReadInteger(); int x = packet.ReadInteger(); int y = packet.ReadInteger(); var direction = (HDirection)packet.ReadInteger(); double z = double.Parse(packet.ReadString()); packet.ReadString(); packet.ReadInteger(); int categoryId = (packet.ReadInteger() & 0xFF); #region Switch Statement: categoryId switch (categoryId) { case 0: { packet.ReadString(); break; } case 1: { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadString(); packet.ReadString(); } break; } case 2: { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadString(); } break; } case 3: { packet.ReadString(); packet.ReadInteger(); break; } case 5: { int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { packet.ReadInteger(); } break; } case 6: { packet.ReadString(); packet.ReadInteger(); packet.ReadInteger(); int count = packet.ReadInteger(); for (int j = 0; j < count; j++) { int subCount = packet.ReadInteger(); for (int k = 0; k < subCount; k++) { packet.ReadString(); } } break; } case 7: { packet.ReadString(); packet.ReadInteger(); packet.ReadInteger(); break; } } #endregion packet.ReadInteger(); packet.ReadInteger(); int ownerId = packet.ReadInteger(); if (typeId < 0) { packet.ReadString(); } var furniture = new HFurniture(id, typeId, ownerId, owners[ownerId], new HPoint(x, y, z), direction); furnitureList.Add(furniture); } return(furnitureList); }
public HostDanceEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Dance = (HDance)packet.ReadInteger(); }
public HEntityUpdate(HMessage packet) { Index = packet.ReadInteger(); Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger(), double.Parse(packet.ReadString(), CultureInfo.InvariantCulture)); HeadFacing = (HDirection)packet.ReadInteger(); BodyFacing = (HDirection)packet.ReadInteger(); string action = packet.ReadString(); string[] actionData = action.Split( new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); foreach (string actionInfo in actionData) { string[] actionValues = actionInfo.Split(' '); if (actionValues.Length < 2) { continue; } if (string.IsNullOrWhiteSpace(actionValues[0])) { continue; } switch (actionValues[0]) { case "flatctrl": { IsController = true; break; } case "mv": { string[] values = actionValues[1].Split(','); if (values.Length >= 3) { MovingTo = new HPoint(int.Parse(values[0]), int.Parse(values[1]), double.Parse(values[2], CultureInfo.InvariantCulture)); } Action = HAction.Move; break; } case "sit": { Action = HAction.Sit; Stance = HStance.Sit; break; } case "lay": { Action = HAction.Lay; Stance = HStance.Lay; break; } case "sign": { Sign = (HSign)int.Parse(actionValues[1]); Action = HAction.Sign; break; } } } }
public HostWalkEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Tile = new HPoint(packet.ReadInteger(0), packet.ReadInteger(4)); }
private async Task ReceiveRemoteModuleDataAsync() { try { HMessage packet = await RemoteModule.ReceivePacketAsync().ConfigureAwait(false); if (packet == null) { DataAwaiters.Values.ToList().ForEach(awaiter => { if (awaiter != null) { awaiter.SetResult(null); } }); RemoteModule = null; Task grabRemoteModuleTask = GrabRemoteModuleAsync(); return; } var response = new HMessage(packet.Header); #region Switch: packet.Header switch (packet.Header) { default: response = null; break; case 0: { response.WriteShort((ushort)Hotel); break; } case 1: { response.WriteString(Game?.Location); if (!string.IsNullOrWhiteSpace(Game?.Location)) { response.WriteString(Path.GetFullPath("Hashes.ini")); } break; } case 2: { response.WriteString(GameData.Source); break; } case 3: { response.WriteShort(Connection.Port); response.WriteString(Connection.Host); response.WriteString(Connection.Address); break; } case 4: { if (Connection != null) { int dataLength = packet.ReadInteger(); byte[] data = packet.ReadBytes(dataLength); await Connection.SendToClientAsync( data).ConfigureAwait(false); response = null; } break; } case 5: { if (Connection != null) { int dataLength = packet.ReadInteger(); byte[] data = packet.ReadBytes(dataLength); await Connection.SendToServerAsync( data).ConfigureAwait(false); response = null; } break; } case 6: case 7: { string stamp = packet.ReadString(); if (DataAwaiters.ContainsKey(stamp)) { var destination = (HDestination)(packet.Header - 6); int step = packet.ReadInteger(); bool isBlocked = packet.ReadBoolean(); int dataLength = packet.ReadInteger(); byte[] data = packet.ReadBytes(dataLength); var interPacket = new HMessage(data, destination); var args = new DataInterceptedEventArgs(interPacket, step, (destination == HDestination.Server)); args.IsBlocked = isBlocked; DataAwaiters[stamp].SetResult(args); response = null; } break; } } #endregion if (response != null) { await RemoteModule.SendPacketAsync(response).ConfigureAwait(false); } } finally { if (RemoteModule != null) { Task receiveRemModuDataTask = ReceiveRemoteModuleDataAsync(); } } }
public PlayerGestureEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Index = packet.ReadInteger(); Gesture = (HGesture)packet.ReadInteger(); }
/// <summary> /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntityAction"/> found in the <see cref="HMessage"/>. /// </summary> /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntityAction"/> data to parse.</param> /// <returns></returns> public static IReadOnlyList <HEntityAction> Parse(HMessage packet) { int entityActionCount = packet.ReadInteger(); var entityActionList = new List <HEntityAction>(entityActionCount); for (int i = 0; i < entityActionList.Capacity; i++) { int index = packet.ReadInteger(); int x = packet.ReadInteger(); int y = packet.ReadInteger(); var z = double.Parse(packet.ReadString(), CultureInfo.InvariantCulture); var headDirection = (HDirection)packet.ReadInteger(); var bodyDirection = (HDirection)packet.ReadInteger(); string actionString = packet.ReadString(); string[] actionData = actionString.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); HSign sign = HSign.One; HAction action = HAction.None; HStance stance = HStance.Stand; double movingToZ = 0.0; bool isEmpowered = false; int movingToX = 0, movingToY = 0; foreach (string actionInfo in actionData) { string[] actionValues = actionInfo.Split(' '); if (actionValues.Length < 2) { continue; } if (string.IsNullOrWhiteSpace(actionValues[0])) { continue; } #region Switch Statement: actionValues[] switch (actionValues[0]) { case "flatctrl": { isEmpowered = true; break; } case "mv": { string[] movingToValues = actionValues[1].Split(','); if (movingToValues.Length >= 3) { movingToX = int.Parse(movingToValues[0]); movingToY = int.Parse(movingToValues[1]); movingToZ = double.Parse(movingToValues[2], CultureInfo.InvariantCulture); } action = HAction.Move; break; } case "sit": { action = HAction.Sit; stance = HStance.Sit; break; } case "lay": { action = HAction.Lay; stance = HStance.Lay; break; } case "sign": { sign = (HSign)int.Parse(actionValues[1]); action = HAction.Sign; break; } } #endregion } var entityAction = new HEntityAction(isEmpowered, index, new HPoint(x, y, z), new HPoint(movingToX, movingToY, movingToZ), sign, stance, headDirection, bodyDirection, action); entityActionList.Add(entityAction); } return(entityActionList); }
/// <summary> /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntityAction"/> found in the <see cref="HMessage"/>. /// </summary> /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntityAction"/> data to parse.</param> /// <returns></returns> public static IReadOnlyList<HEntityAction> Parse(HMessage packet) { int entityActionCount = packet.ReadInteger(); var entityActionList = new List<HEntityAction>(entityActionCount); for (int i = 0; i < entityActionList.Capacity; i++) { int index = packet.ReadInteger(); int x = packet.ReadInteger(); int y = packet.ReadInteger(); double z = double.Parse(packet.ReadString()); var headDirection = (HDirection)packet.ReadInteger(); var bodyDirection = (HDirection)packet.ReadInteger(); string actionString = packet.ReadString(); string[] actionData = actionString.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); HSign sign = HSign.One; HAction action = HAction.None; HStance stance = HStance.Stand; double movingToZ = 0.0; bool isEmpowered = false; int movingToX = 0, movingToY = 0; foreach (string actionInfo in actionData) { string[] actionValues = actionInfo.Split(' '); if (actionValues.Length < 2 || string.IsNullOrWhiteSpace(actionValues[0])) continue; #region Switch Statement: actionValues[] switch (actionValues[0]) { case "flatctrl": { isEmpowered = true; break; } case "mv": { string[] movingToValues = actionValues[1].Split(','); if (movingToValues.Length >= 3) { movingToX = int.Parse(movingToValues[0]); movingToY = int.Parse(movingToValues[1]); movingToZ = double.Parse(movingToValues[2]); } action = HAction.Move; break; } case "sit": { action = HAction.Sit; stance = HStance.Sit; break; } case "lay": { action = HAction.Lay; stance = HStance.Lay; break; } case "sign": { sign = (HSign)int.Parse(actionValues[1]); action = HAction.Sign; break; } } #endregion } var entityAction = new HEntityAction(isEmpowered, index, new HPoint(x, y, z), new HPoint(movingToX, movingToY, movingToZ), sign, stance, headDirection, bodyDirection, action); entityActionList.Add(entityAction); } return entityActionList; }
public static IReadOnlyList <HFurniture> Parse(HMessage packet) { int ownersCount = packet.ReadInteger(); var owners = new Dictionary <int, string>(ownersCount); for (int i = 0; i < ownersCount; i++) { int ownerId = packet.ReadInteger(); string ownerName = packet.ReadString(); owners.Add(ownerId, ownerName); } int furnitureCount = packet.ReadInteger(); var furnitureList = new List <HFurniture>(furnitureCount); for (int i = 0; i < furnitureList.Capacity; i++) { int id = packet.ReadInteger(); int typeId = packet.ReadInteger(); int x = packet.ReadInteger(); int y = packet.ReadInteger(); var direction = (HDirection)packet.ReadInteger(); var z = double.Parse(packet.ReadString(), CultureInfo.InvariantCulture); packet.ReadString(); packet.ReadInteger(); int category = packet.ReadInteger(); HStuffData.ReadStuffData(category, packet); packet.ReadInteger(); packet.ReadInteger(); int ownerId = packet.ReadInteger(); if (typeId < 0) { packet.ReadString(); } var furniture = new HFurniture(id, typeId, ownerId, owners[ownerId], new HPoint(x, y, z), direction); furnitureList.Add(furniture); } return(furnitureList); }
private bool TryHandleHostExitRoom(HMessage current, HMessage previous) { if (previous.Length != 2 || current.ReadInteger(0) != -1) return false; OutgoingHeaders.HostExitRoom = previous.Header; _outLocked[previous.Header] = RaiseOnHostExitRoom; return true; }
public HostNavigateRoomEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { RoomId = packet.ReadInteger(); Password = packet.ReadString(); }
private bool TryHandlePlayerKickHost(HMessage current, HMessage previous) { bool isPlayerKickHost = (current.ReadInteger(0) == 4008); if (isPlayerKickHost) { IncomingHeaders.PlayerKickHost = current.Header; _inLocked[current.Header] = RaiseOnPlayerKickHost; } return isPlayerKickHost; }
protected object[] ReadData(HMessage packet, int category) { var values = new List <object>(); switch (category & 0xFF) { case 0: { values.Add(packet.ReadString()); break; } case 1: /* MapStuffData */ { int count = packet.ReadInteger(); values.Add(count); for (int j = 0; j < count; j++) { values.Add(packet.ReadString()); values.Add(packet.ReadString()); } break; } case 2: /* StringArrayStuffData */ { int count = packet.ReadInteger(); values.Add(count); for (int j = 0; j < count; j++) { values.Add(packet.ReadString()); } break; } case 3: { values.Add(packet.ReadString()); values.Add(packet.ReadInteger()); break; } case 5: /* IntArrayStuffData */ { int count = packet.ReadInteger(); values.Add(count); for (int j = 0; j < count; j++) { values.Add(packet.ReadInteger()); } break; } case 6: /* HighScoreStuffData */ { values.Add(packet.ReadString()); values.Add(packet.ReadInteger()); values.Add(packet.ReadInteger()); int count = packet.ReadInteger(); values.Add(count); for (int j = 0; j < count; j++) { int score = packet.ReadInteger(); values.Add(score); int subCount = packet.ReadInteger(); values.Add(subCount); for (int k = 0; k < subCount; k++) { values.Add(packet.ReadString()); } } break; } case 7: { values.Add(packet.ReadString()); values.Add(packet.ReadInteger()); values.Add(packet.ReadInteger()); break; } } if (((category & 0xFF00) & 0x100) > 0) { values.Add(packet.ReadInteger()); values.Add(packet.ReadInteger()); } return(values.ToArray()); }
private bool TryHandleHostNavigateRoom(HMessage current, HMessage previous) { if (previous.Length >= 12 && current.CanRead<string>(0) && current.ReadString() == "Navigation") { current.ReadString(); if (current.ReadString() != "go.official") return false; if (previous.ReadInteger(0).ToString() == current.ReadString()) { OutgoingHeaders.NavigateRoom = previous.Header; _outLocked[previous.Header] = RaiseOnHostNavigateRoom; return true; } } return false; }
public HostKickPlayerEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Id = packet.ReadInteger(); }
public HostWalkEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Tile = new HPoint(packet.ReadInteger(0), packet.ReadInteger(4)); }
public PlayerDanceEventArgs(Func <Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Index = packet.ReadInteger(); Dance = (HDance)packet.ReadInteger(); }
private async Task ReceiveRemoteContractorDataAsync() { try { HMessage packet = await _remoteContractor.ReceivePacketAsync().ConfigureAwait(false); if (packet == null) { Environment.Exit(0); } #region Switch: packet.Header switch (packet.Header) { case 0: { _initStep++; _hotel = (HHotel)packet.ReadShort(); break; } case 1: { _initStep++; _in = new Incoming(); _out = new Outgoing(); string location = packet.ReadString(); if (!string.IsNullOrWhiteSpace(location)) { _game = new HGame(location); _game.Disassemble(); _game.GenerateMessageHashes(); if (packet.Readable > 0) { string hashesPath = packet.ReadString(); _in.Load(_game, hashesPath); _out.Load(_game, hashesPath); } _module.ModifyGame(_game); } break; } case 2: { _initStep++; _gameData = new HGameData(packet.ReadString()); _module.ModifyGameData(_gameData); break; } case 3: { _initStep++; var connection = (ContractorProxy)_connection; connection.Port = packet.ReadShort(); connection.Host = packet.ReadString(); connection.Address = packet.ReadString(); break; } case 4: case 5: { var destination = (HDestination)(packet.Header - 4); string stamp = packet.ReadString(); int step = packet.ReadInteger(); bool isBlocked = packet.ReadBoolean(); int dataLength = packet.ReadInteger(); byte[] data = packet.ReadBytes(dataLength); var interPacket = new HMessage(data, destination); var args = new DataInterceptedEventArgs(interPacket, step, (destination == HDestination.Server)); try { if (destination == HDestination.Server) { _module.HandleOutgoing(args); } else { _module.HandleIncoming(args); } } finally { await SendInterceptedDataResponseAsync( stamp, args).ConfigureAwait(false); } break; } } #endregion if (_initStep == 4) { _initializationSource?.SetResult(true); } } finally { Task receiveRemContDataTask = ReceiveRemoteContractorDataAsync(); } }
public HostDanceEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Dance = (HDance)packet.ReadInteger(); }
/// <summary> /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntity"/> found in the <see cref="HMessage"/>. /// </summary> /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntity"/> data to parse.</param> /// <returns></returns> public static IReadOnlyList <HEntity> Parse(HMessage packet) { int entityCount = packet.ReadInteger(); var entityList = new List <HEntity>(entityCount); for (int i = 0; i < entityList.Capacity; i++) { int id = packet.ReadInteger(); string name = packet.ReadString(); string motto = packet.ReadString(); string figureId = packet.ReadString(); int index = packet.ReadInteger(); int x = packet.ReadInteger(); int y = packet.ReadInteger(); double z = double.Parse(packet.ReadString()); packet.ReadInteger(); int type = packet.ReadInteger(); HGender gender = HGender.Unknown; string favoriteGroup = string.Empty; #region Switch Statement: type switch (type) { case 1: { gender = SKore.ToGender(packet.ReadString()); packet.ReadInteger(); packet.ReadInteger(); favoriteGroup = packet.ReadString(); packet.ReadString(); packet.ReadInteger(); packet.ReadBoolean(); break; } case 2: { packet.ReadInteger(); packet.ReadInteger(); packet.ReadString(); packet.ReadInteger(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadBoolean(); packet.ReadInteger(); packet.ReadString(); break; } case 4: { packet.ReadString(); packet.ReadInteger(); packet.ReadString(); for (int j = packet.ReadInteger(); j > 0; j--) { packet.ReadShort(); } break; } } #endregion var entity = new HEntity(id, index, name, new HPoint(x, y, z), motto, gender, figureId, favoriteGroup); entityList.Add(entity); } return(entityList); }
public HostTradeEventArgs(Func<Task> continuation, int step, HMessage packet) : base(continuation, step, packet) { Index = packet.ReadInteger(); }
public HRoomEntry(HMessage packet) { Id = packet.ReadInteger(); Name = packet.ReadString(); OwnerId = packet.ReadInteger(); OwnerName = packet.ReadString(); DoorMode = packet.ReadInteger(); UserCount = packet.ReadInteger(); MaxUserCount = packet.ReadInteger(); Description = packet.ReadString(); TradeMode = packet.ReadInteger(); Ranking = packet.ReadInteger(); Category = packet.ReadInteger(); Stars = packet.ReadInteger(); Tags = new string[packet.ReadInteger()]; for (int i = 0; i < Tags.Length; i++) { Tags[i] = packet.ReadString(); } var roomEntryBitmask = (HRoomFlags)packet.ReadInteger(); if (roomEntryBitmask.HasFlag(HRoomFlags.HasCustomThumbnail)) { ThumbnailUrl = packet.ReadString(); } if (roomEntryBitmask.HasFlag(HRoomFlags.HasGroup)) { GroupId = packet.ReadInteger(); GroupName = packet.ReadString(); GroupBadgeCode = packet.ReadString(); } if (roomEntryBitmask.HasFlag(HRoomFlags.HasAdvertisement)) { AdName = packet.ReadString(); AdDescription = packet.ReadString(); AdExpiresInMinutes = packet.ReadInteger(); } ShowOwner = roomEntryBitmask.HasFlag(HRoomFlags.ShowOwner); AllowPets = roomEntryBitmask.HasFlag(HRoomFlags.AllowPets); ShowEntryAd = roomEntryBitmask.HasFlag(HRoomFlags.ShowRoomAd); }