/// <summary>
        /// creates a lifestone directly in fron of the player's position provided
        /// </summary>
        public static ImmutableWorldObject CreateLifestone(ushort weenieClassId, Position newPosition, LifestoneType lifestoneType)
        {
            var weenie = WeenieHeaderFlag.Usable | WeenieHeaderFlag.BlipColour | WeenieHeaderFlag.Radar | WeenieHeaderFlag.UseRadius;
            ImmutableWorldObject wo = new ImmutableWorldObject(ObjectType.LifeStone, new ObjectGuid(CommonObjectFactory.DynamicObjectId, GuidType.None), "Life Stone", weenieClassId, ObjectDescriptionFlag.LifeStone, weenie, newPosition);

            // model id 0x000026 is one of several lifestone IDs
            wo.PhysicsData.MTableResourceId = 0x09000026u;
            wo.PhysicsData.Stable           = 0x20000014u;
            wo.PhysicsData.CSetup           = (uint)lifestoneType;

            wo.PhysicsData.PhysicsDescriptionFlag = PhysicsDescriptionFlag.CSetup | PhysicsDescriptionFlag.MTable | PhysicsDescriptionFlag.Stable | PhysicsDescriptionFlag.Position;

            wo.PhysicsData.PhysicsState = PhysicsState.IgnoreCollision | PhysicsState.Gravity;

            // game data min required flags;
            // wo.GameData.Type = (ushort)0x1355;
            // wo.GameData.Icon = (ushort)0x1036;

            wo.GameData.Usable        = Usable.UsableRemote;
            wo.GameData.RadarColour   = RadarColor.Blue;
            wo.GameData.RadarBehavior = RadarBehavior.ShowAlways;
            wo.GameData.UseRadius     = 4f;

            return(wo);
        }
Exemplo n.º 2
0
        /// <summary>
        /// creates a lifesone 3 units (just in front of) the player.
        /// </summary>
        public GameMessageCreateLifestone(Player player) : base(GameMessageOpcode.ObjectCreate, GameMessageGroup.Group0A)
        {
            float qw = player.Position.Facing.W; // north
            float qz = player.Position.Facing.Z; // south

            double x = 2 * qw * qz;
            double y = 1 - 2 * qz * qz;

            var    heading = Math.Atan2(x, y);
            double scalar  = 3.0f;
            var    dx      = -1 * Convert.ToSingle(Math.Sin(heading) * scalar);
            var    dy      = Convert.ToSingle(Math.Cos(heading) * scalar);

            Position newPosition = new Position(player.Position.LandblockId.Raw, player.Position.Offset.X + dx, player.Position.Offset.Y + dy, player.Position.Offset.Z + 0.5f, 0f, 0f, 0f, 0f);

            var weenie = WeenieHeaderFlag.Usable | WeenieHeaderFlag.BlipColour | WeenieHeaderFlag.Radar | WeenieHeaderFlag.UseRadius;
            ImmutableWorldObject wo = new ImmutableWorldObject(ObjectType.LifeStone, new ObjectGuid(GuidManager.NewStaticObjectGuid()), "Life Stone", 1, ObjectDescriptionFlag.LifeStone, weenie, newPosition);

            wo.PhysicsData.MTableResourceId = 0x09000026u;
            wo.PhysicsData.Stable           = 0x20000014u;
            wo.PhysicsData.CSetup           = (uint)0x020002EEu;

            wo.PhysicsData.PhysicsDescriptionFlag = PhysicsDescriptionFlag.CSetup | PhysicsDescriptionFlag.MTable | PhysicsDescriptionFlag.Stable | PhysicsDescriptionFlag.Position;

            //game data min required flags;
            wo.GameData.Type = (ushort)0x1355;
            wo.GameData.Icon = (ushort)0x1036;

            wo.GameData.Usable        = Usable.UsableRemote;
            wo.GameData.RadarColour   = RadarColor.LifeStone;
            wo.GameData.RadarBehavior = RadarBehavior.ShowAlways;
            wo.GameData.UseRadius     = 4f;

            wo.SerializeCreateObject(Writer);
        }
Exemplo n.º 3
0
        /// <summary>
        /// creates a portal at the position provided
        /// </summary>
        public static ImmutableWorldObject CreatePortal(ushort weenieClassId, Position newPosition, string portalTitle, PortalType portalType)
        {
            var weenie = WeenieHeaderFlag.Usable | WeenieHeaderFlag.BlipColour | WeenieHeaderFlag.Radar | WeenieHeaderFlag.UseRadius;
            ImmutableWorldObject wo = new ImmutableWorldObject(ObjectType.Portal, new ObjectGuid(CommonObjectFactory.DynamicObjectId, GuidType.None), portalTitle, weenieClassId, ObjectDescriptionFlag.Portal, weenie, newPosition);

            wo.PhysicsData.MTableResourceId = 0x09000003u;
            wo.PhysicsData.CSetup           = (uint)portalType;

            wo.PhysicsData.PhysicsDescriptionFlag = PhysicsDescriptionFlag.CSetup | PhysicsDescriptionFlag.MTable | PhysicsDescriptionFlag.Stable | PhysicsDescriptionFlag.Position;

            wo.PhysicsData.PhysicsState = PhysicsState.Ethereal | PhysicsState.ReportCollision | PhysicsState.LightingOn | PhysicsState.Gravity;

            // game data min required flags;
            // wo.GameData.Type = (ushort)0x82D;
            // wo.GameData.Icon = (ushort)0x106B;

            wo.GameData.Usable        = Usable.UsableRemote;
            wo.GameData.RadarColour   = RadarColor.Portal;
            wo.GameData.RadarBehavior = RadarBehavior.ShowAlways;
            wo.GameData.UseRadius     = 4f;

            return(wo);
        }