コード例 #1
0
ファイル: WorldObject.cs プロジェクト: mtahv3/ACE
        public ServerPacket BuildObjectCreate()
        {
            var player = Guid.IsPlayer() ? this as Player : null;

            var objectCreate         = new ServerPacket(0x18, PacketHeaderFlags.EncryptedChecksum);
            var objectCreateFragment = new ServerPacketFragment(0x0A, FragmentOpcode.ObjectCreate);

            objectCreateFragment.Payload.Write(Guid.Full);

            // TODO: model information
            objectCreateFragment.Payload.Write((byte)0x11);
            objectCreateFragment.Payload.Write((byte)0);
            objectCreateFragment.Payload.Write((byte)0);
            objectCreateFragment.Payload.Write((byte)0);

            objectCreateFragment.Payload.Align();

            PhysicsDescriptionFlag flags = PhysicsDescriptionFlag.CSetup | PhysicsDescriptionFlag.MTable | PhysicsDescriptionFlag.Stable | PhysicsDescriptionFlag.Petable | PhysicsDescriptionFlag.Position;

            objectCreateFragment.Payload.Write((uint)flags);
            objectCreateFragment.Payload.Write((uint)(PhysicsState.IgnoreCollision | PhysicsState.Gravity | PhysicsState.Hidden | PhysicsState.EdgeSlide));

            /*if ((flags & PhysicsDescriptionFlag.Movement) != 0)
             * {
             * }*/

            /*if ((flags & PhysicsDescriptionFlag.AnimationFrame) != 0)
             * {
             * }*/

            if ((flags & PhysicsDescriptionFlag.Position) != 0)
            {
                Position.Write(objectCreateFragment.Payload);
            }

            // TODO:
            if ((flags & PhysicsDescriptionFlag.MTable) != 0)
            {
                objectCreateFragment.Payload.Write(0x09000001u);
            }

            if ((flags & PhysicsDescriptionFlag.Stable) != 0)
            {
                objectCreateFragment.Payload.Write(0x20000001u);
            }

            if ((flags & PhysicsDescriptionFlag.Petable) != 0)
            {
                objectCreateFragment.Payload.Write(0x34000004u);
            }

            if ((flags & PhysicsDescriptionFlag.CSetup) != 0)
            {
                objectCreateFragment.Payload.Write(0x02000001u);
            }

            /*if ((flags & PhysicsDescriptionFlag.Parent) != 0)
             * {
             * }*/

            /*if ((flags & PhysicsDescriptionFlag.Children) != 0)
             * {
             * }*/

            if ((flags & PhysicsDescriptionFlag.ObjScale) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((flags & PhysicsDescriptionFlag.Friction) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((flags & PhysicsDescriptionFlag.Elastcity) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((flags & PhysicsDescriptionFlag.Translucency) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((flags & PhysicsDescriptionFlag.Velocity) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
                objectCreateFragment.Payload.Write(0.0f);
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((flags & PhysicsDescriptionFlag.Acceleration) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
                objectCreateFragment.Payload.Write(0.0f);
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((flags & PhysicsDescriptionFlag.Omega) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
                objectCreateFragment.Payload.Write(0.0f);
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((flags & PhysicsDescriptionFlag.DefaultScript) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((flags & PhysicsDescriptionFlag.DefaultScriptIntensity) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
            }

            objectCreateFragment.Payload.Write((ushort)MovementIndex);
            objectCreateFragment.Payload.Write((ushort)1);
            objectCreateFragment.Payload.Write((ushort)(player != null ? player.PortalIndex : 0));
            objectCreateFragment.Payload.Write((ushort)0);
            objectCreateFragment.Payload.Write((ushort)TeleportIndex);
            objectCreateFragment.Payload.Write((ushort)0);
            objectCreateFragment.Payload.Write((ushort)0);
            objectCreateFragment.Payload.Write((ushort)0);
            objectCreateFragment.Payload.Write((ushort)(player != null ? player.LoginIndex : 0));

            objectCreateFragment.Payload.Align();

            var weenieHeaderFlags = WeenieHeaderFlag.ItemCapacity | WeenieHeaderFlag.ContainerCapacity | WeenieHeaderFlag.Useability | WeenieHeaderFlag.BlipColour | WeenieHeaderFlag.Radar;

            objectCreateFragment.Payload.Write((uint)weenieHeaderFlags);
            objectCreateFragment.Payload.WriteString16L(Name);
            objectCreateFragment.Payload.Write((ushort)1);
            objectCreateFragment.Payload.Write((ushort)0x1036);
            objectCreateFragment.Payload.Write((uint)Type);
            objectCreateFragment.Payload.Write((uint)DescriptionFlags);

            if ((DescriptionFlags & ObjectDescriptionFlag.AdditionFlags) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.PuralName) != 0)
            {
                objectCreateFragment.Payload.WriteString16L("");
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.ItemCapacity) != 0)
            {
                objectCreateFragment.Payload.Write((byte)102);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.ContainerCapacity) != 0)
            {
                objectCreateFragment.Payload.Write((byte)7);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.AmmoType) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Value) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Useability) != 0)
            {
                objectCreateFragment.Payload.Write(1u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.UseRadius) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.TargetType) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.UiEffects) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.CombatUse) != 0)
            {
                objectCreateFragment.Payload.Write((byte)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Struture) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.MaxStructure) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.StackSize) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.MaxStackSize) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Container) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Wielder) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.ValidLocations) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Location) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Priority) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.BlipColour) != 0)
            {
                objectCreateFragment.Payload.Write((byte)9);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Radar) != 0)
            {
                objectCreateFragment.Payload.Write((byte)4);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Script) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Workmanship) != 0)
            {
                objectCreateFragment.Payload.Write(0.0f);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Burden) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Spell) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.HouseOwner) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            /*if ((weenieHeaderFlags & WeenieHeaderFlag.HouseRestrictions) != 0)
             * {
             * }*/

            if ((weenieHeaderFlags & WeenieHeaderFlag.HookItemTypes) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.Monarch) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.HookType) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            if ((weenieHeaderFlags & WeenieHeaderFlag.IconOverlay) != 0)
            {
                objectCreateFragment.Payload.Write((ushort)0);
            }

            /*if ((weenieHeaderFlags2 & WeenieHeaderFlag2.IconUnderlay) != 0)
             *  objectCreateFragment.Payload.Write((ushort)0);*/

            if ((weenieHeaderFlags & WeenieHeaderFlag.Material) != 0)
            {
                objectCreateFragment.Payload.Write(0u);
            }

            /*if ((weenieHeaderFlags2 & WeenieHeaderFlag2.Cooldown) != 0)
             *  objectCreateFragment.Payload.Write(0u);*/

            /*if ((weenieHeaderFlags2 & WeenieHeaderFlag2.CooldownDuration) != 0)
             *  objectCreateFragment.Payload.Write(0.0d);*/

            /*if ((weenieHeaderFlags2 & WeenieHeaderFlag2.PetOwner) != 0)
             *  objectCreateFragment.Payload.Write(0u);*/

            objectCreateFragment.Payload.Align();

            objectCreate.Fragments.Add(objectCreateFragment);
            return(objectCreate);
        }
コード例 #2
0
        public static void HandleDebugEchoFlags(Session session, params string[] parameters)
        {
            try
            {
                if (parameters?.Length == 2)
                {
                    var debugOutput = "";
                    switch (parameters[0].ToLower())
                    {
                    case "descriptionflags":
                        ObjectDescriptionFlag objectDescFlag = new ObjectDescriptionFlag();
                        objectDescFlag = (ObjectDescriptionFlag)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{objectDescFlag.GetType().Name} = {objectDescFlag.ToString()}" + " (" + (uint)objectDescFlag + ")";
                        break;

                    case "weenieflags":
                        WeenieHeaderFlag weenieHdr = new WeenieHeaderFlag();
                        weenieHdr = (WeenieHeaderFlag)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{weenieHdr.GetType().Name} = {weenieHdr.ToString()}" + " (" + (uint)weenieHdr + ")";
                        break;

                    case "weenieflags2":
                        WeenieHeaderFlag2 weenieHdr2 = new WeenieHeaderFlag2();
                        weenieHdr2 = (WeenieHeaderFlag2)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{weenieHdr2.GetType().Name} = {weenieHdr2.ToString()}" + " (" + (uint)weenieHdr2 + ")";
                        break;

                    case "positionflag":
                        UpdatePositionFlag posFlag = new UpdatePositionFlag();
                        posFlag = (UpdatePositionFlag)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{posFlag.GetType().Name} = {posFlag.ToString()}" + " (" + (uint)posFlag + ")";
                        break;

                    case "type":
                        ItemType objectType = new ItemType();
                        objectType = (ItemType)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{objectType.GetType().Name} = {objectType.ToString()}" + " (" + (uint)objectType + ")";
                        break;

                    case "containertype":
                        ContainerType contType = new ContainerType();
                        contType = (ContainerType)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{contType.GetType().Name} = {contType.ToString()}" + " (" + (uint)contType + ")";
                        break;

                    case "usable":
                        Usable usableType = new Usable();
                        usableType = (Usable)Convert.ToInt64(parameters[1]);

                        debugOutput = $"{usableType.GetType().Name} = {usableType.ToString()}" + " (" + (Int64)usableType + ")";
                        break;

                    case "radarbehavior":
                        RadarBehavior radarBeh = new RadarBehavior();
                        radarBeh = (RadarBehavior)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{radarBeh.GetType().Name} = {radarBeh.ToString()}" + " (" + (uint)radarBeh + ")";
                        break;

                    case "physicsdescriptionflags":
                        PhysicsDescriptionFlag physicsDescFlag = new PhysicsDescriptionFlag();
                        physicsDescFlag = (PhysicsDescriptionFlag)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{physicsDescFlag.GetType().Name} = {physicsDescFlag.ToString()}" + " (" + (uint)physicsDescFlag + ")";
                        break;

                    case "physicsstate":
                        PhysicsState physState = new PhysicsState();
                        physState = (PhysicsState)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{physState.GetType().Name} = {physState.ToString()}" + " (" + (uint)physState + ")";
                        break;

                    case "validlocations":
                        EquipMask locFlags = new EquipMask();
                        locFlags = (EquipMask)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{locFlags.GetType().Name} = {locFlags.ToString()}" + " (" + (uint)locFlags + ")";
                        break;

                    case "currentwieldedlocation":
                        EquipMask locFlags2 = new EquipMask();
                        locFlags2 = (EquipMask)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{locFlags2.GetType().Name} = {locFlags2.ToString()}" + " (" + (uint)locFlags2 + ")";
                        break;

                    case "priority":
                        CoverageMask covMask = new CoverageMask();
                        covMask = (CoverageMask)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{covMask.GetType().Name} = {covMask.ToString()}" + " (" + (uint)covMask + ")";
                        break;

                    case "radarcolor":
                        RadarColor radarBlipColor = new RadarColor();
                        radarBlipColor = (RadarColor)Convert.ToUInt32(parameters[1]);

                        debugOutput = $"{radarBlipColor.GetType().Name} = {radarBlipColor.ToString()}" + " (" + (uint)radarBlipColor + ")";
                        break;

                    default:
                        debugOutput = "No valid type to test";
                        break;
                    }

                    if (session == null)
                    {
                        Console.WriteLine(debugOutput.Replace(", ", " | "));
                    }
                    else
                    {
                        session.Network.EnqueueSend(new GameMessageSystemChat(debugOutput, ChatMessageType.System));
                    }
                }
            }
            catch (Exception)
            {
                string debugOutput = "Exception Error, check input and try again";
                if (session == null)
                {
                    Console.WriteLine(debugOutput.Replace(", ", " | "));
                }
                else
                {
                    session.Network.EnqueueSend(new GameMessageSystemChat(debugOutput, ChatMessageType.System));
                }
            }
        }
コード例 #3
0
ファイル: PhysicsData.cs プロジェクト: leclaist/ACE
        // todo: return bytes of data for network write ? ?
        public void Serialize(WorldObject wo, BinaryWriter writer)
        {
            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Velocity) > 0 && this.Velocity == null)
            {
                // velocity is null, but the flag wants to include it.  unset the flag.
                PhysicsDescriptionFlag ^= PhysicsDescriptionFlag.Velocity;
            }

            writer.Write((uint)PhysicsDescriptionFlag);

            writer.Write((uint)PhysicsState);

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Movement) != 0)
            {
                if (currentMotionState != null)
                {
                    var movementData = currentMotionState.GetPayload(wo.Guid, wo.Sequences);
                    writer.Write(movementData.Length); // number of bytes in movement object
                    writer.Write(movementData);
                    uint autonomous = currentMotionState.IsAutonomous ? (ushort)1 : (ushort)0;
                    writer.Write(autonomous);
                }
                else // create a new current motion state and send it.
                {
                    currentMotionState = new UniversalMotion(MotionStance.Standing);
                    var movementData = currentMotionState.GetPayload(wo.Guid, wo.Sequences);
                    writer.Write(movementData.Length);
                    writer.Write(movementData);
                    uint autonomous = currentMotionState.IsAutonomous ? (ushort)1 : (ushort)0;
                    writer.Write(autonomous);
                }
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.AnimationFrame) != 0)
            {
                writer.Write((uint)AnimationFrame);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Position) != 0)
            {
                Position.Serialize(writer);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.MTable) != 0)
            {
                writer.Write((uint)MTableResourceId);
            }

            // stable_id =  BYTE1(v12) & 8 )  =  8
            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Stable) != 0)
            {
                writer.Write((uint)Stable);
            }

            // setup id
            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Petable) != 0)
            {
                writer.Write((uint)Petable);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.CSetup) != 0)
            {
                writer.Write((uint)CSetup);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Children) != 0)
            {
                writer.Write((uint)ItemsEquipedCount);
                foreach (EquippedItem child in children)
                {
                    writer.Write((uint)child.Guid);
                    writer.Write((uint)child.EquipMask);
                }
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.ObjScale) != 0)
            {
                writer.Write(ObjScale);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Friction) != 0)
            {
                writer.Write(Friction);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Elasticity) != 0)
            {
                writer.Write(Elastcity);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Translucency) != 0)
            {
                writer.Write(Translucency);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Velocity) != 0)
            {
                Velocity.Serialize(writer);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Acceleration) != 0)
            {
                Acceleration.Serialize(writer);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.Omega) != 0)
            {
                Omega.Serialize(writer);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.DefaultScript) != 0)
            {
                writer.Write((uint)DefaultScript);
            }

            if ((PhysicsDescriptionFlag & PhysicsDescriptionFlag.DefaultScriptIntensity) != 0)
            {
                writer.Write((float)DefaultScriptIntensity);
            }

            // TODO: There are 9 of these - but we need to research the correct sequence.   I know that the last one is instance (totalLogins) Og II
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectPosition));
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectMovement));
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectState));
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectVector));
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectTeleport));
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectServerControl));
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectForcePosition));
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectVisualDesc));
            writer.Write(sequences.GetCurrentSequence(SequenceType.ObjectInstance));

            writer.Align();
        }