private bool TryHandleEntityAction(HMessage current, HMessage previous) { if (!current.CanReadString(16)) { return(false); } int position = 16; string z = current.ReadString(ref position); if (position + 8 >= current.Length) { return(false); } int d1 = current.ReadInteger(ref position); int d2 = current.ReadInteger(ref position); if (d1 < 0 || d2 < 0) { return(false); } if (d1 > 7 || d2 > 7) { return(false); } if (!current.CanReadString(position)) { return(false); } string action = current.ReadString(ref position); if ((position + 2) == current.Length) { InDetected[current.Header] = RaiseOnEntityAction; return(true); } else { return(false); } }
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); } }
private bool TryHandleHostNavigateRoom(HMessage current, HMessage previous) { if (previous.Length >= 12 && current.CanReadString(0) && current.ReadString() == "Navigation") { current.ReadString(); if (current.ReadString() != "go.official") { return(false); } if (previous.ReadInteger(0).ToString() == current.ReadString()) { OutgoingDetected.NavigateRoom = previous.Header; OutDetected[previous.Header] = RaiseOnHostNavigateRoom; return(true); } } return(false); }
private bool TryHandleAvatarMenuClick(HMessage current, HMessage previous) { if (!previous.CanReadString(22)) { return(false); } switch (previous.ReadString(22)) { case "sit": case "stand": { OutgoingDetected.UpdateStance = current.Header; OutDetected[current.Header] = RaiseOnHostUpdateStance; return(true); } case "dance_stop": case "dance_start": { OutgoingDetected.Dance = current.Header; OutDetected[current.Header] = RaiseOnHostDance; return(true); } case "wave": case "idle": case "laugh": case "blow_kiss": { OutgoingDetected.Gesture = current.Header; OutDetected[current.Header] = RaiseOnHostGesture; 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); }