Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }