コード例 #1
0
        public GamePiece(AceObject aceO)
            : base(aceO)
        {
            Stuck = true; Attackable = true;

            SetObjectDescriptionBools();
        }
コード例 #2
0
 protected override void LoadIntoObject(AceObject aceObject)
 {
     base.LoadIntoObject(aceObject);
     aceObject.GeneratorLinks    = GetAceObjectGeneratorLinks(aceObject.AceObjectId);
     aceObject.GeneratorProfiles = GetAceObjectGeneratorProfiles(aceObject.AceObjectId);
     aceObject.CreateList        = GetAceObjectInventory(aceObject.AceObjectId);
 }
コード例 #3
0
        public static WorldObject CreateWorldObject(uint weenieId, ObjectGuid guid, int palette = 0, float shade = 0, int stackSize = 1)
        {
            try
            {
                AceObject aceObject = (AceObject)DatabaseManager.World.GetAceObjectByWeenie(weenieId).Clone(guid.Full);

                if (palette > 0)
                {
                    aceObject.PaletteTemplate = palette;
                }
                if (shade > 0)
                {
                    aceObject.Shade = shade;
                }
                if (aceObject.StackSize.HasValue && aceObject.MaxStackSize.HasValue)
                {
                    if (stackSize > 1)
                    {
                        aceObject.StackSize = (ushort)stackSize;
                    }
                    if (aceObject.StackSize > aceObject.MaxStackSize)
                    {
                        aceObject.StackSize = aceObject.MaxStackSize;
                    }
                }

                return(CreateWorldObject(aceObject));
            }
            catch (NullReferenceException)
            {
                return(null);
            }
        }
コード例 #4
0
 public Monster(AceObject aceO)
     : base(aceO)
 {
     Guid    = GuidManager.NewNonStaticGuid();
     IsAlive = true;
     SetupVitals();
 }
コード例 #5
0
        public Clothing(AceObject aceObject)
            : base(aceObject)
        {
            Attackable = true;

            SetObjectDescriptionBools();
        }
コード例 #6
0
        public GenericObject(AceObject aceObject)
            : base(aceObject)
        {
            Stuck = true; Attackable = true;

            SetObjectDescriptionBools();
        }
コード例 #7
0
        public Portal(AceObject aceO)
            : base(aceO)
        {
            Portal = true;
            Stuck  = true; Attackable = true;

            SetObjectDescriptionBools();

            var weenie = Database.DatabaseManager.World.GetAceObjectByWeenie(AceObject.WeenieClassId);

            // check to see if this ace object has a destination.  if so, defer to it.
            if (aceO.Destination != null)
            {
                Destination = aceO.Destination;
            }
            else
            {
                // but if not, portals roll up to the weenie
                Destination = weenie.Destination;
            }

            MinimumLevel = weenie.MinLevel ?? 0;
            MaximumLevel = weenie.MaxLevel ?? 0;
            IsTieable    = ((weenie.PortalBitmask ?? 0) & (uint)PortalBitmask.NoRecall) == 0;
            IsSummonable = ((weenie.PortalBitmask ?? 0) & (uint)PortalBitmask.NoSummon) == 0;
            AppraisalPortalDestination = weenie.AppraisalPortalDestination;
            PortalShowDestination      = weenie.PortalShowDestination ?? false;
        }
コード例 #8
0
        public List <AceObject> GetWeenieInstancesByLandblock(ushort landblock)
        {
            var criteria = new Dictionary <string, object> {
                { "landblock", landblock }
            };
            var instances        = ExecuteConstructedGetListStatement <WorldPreparedStatement, WeenieObjectInstance>(WorldPreparedStatement.GetWeenieInstancesByLandblock, criteria);
            List <AceObject> ret = new List <AceObject>();

            instances.ForEach(instance =>
            {
                // Create a new AceObject from Weenie.
                AceObject ao = GetObject(instance.WeenieClassId);

                // Set the object's current location for this instance.
                ao.Location = new Position(instance.LandblockRaw, instance.PositionX, instance.PositionY, instance.PositionZ, instance.RotationX, instance.RotationY, instance.RotationZ, instance.RotationW);

                // Use the guid recorded by the PCAP.
                // This step could eventually be removed if we want to let the GuidManager handle assigning guids for static objects, ignoring the recorded guids.
                string cmsClone = ao.CurrentMotionState;            // Make a copy of the CurrentMotionState for cloning
                ao = (AceObject)ao.Clone(instance.PreassignedGuid); // Clone AceObject and assign the recorded Guid
                ao.CurrentMotionState = cmsClone;                   // Restore CurrentMotionState from original weenie

                ret.Add(ao);
            });
            return(ret);
        }
コード例 #9
0
        public static Container CreateTestContainerObject(Player player, uint weenieId)
        {
            AceObject aceObject = DatabaseManager.World.GetAceObjectByWeenie(weenieId);
            Container wo        = new Container(aceObject);

            player.Session.Network.EnqueueSend(new GameEventViewContents(player.Session, wo.Guid.Full));
            return(wo);
        }
コード例 #10
0
ファイル: Vendor.cs プロジェクト: RogerFromAmericanDad/ACE
        // todo : SO : Turning to player movement states  - looks at @og
        public Vendor(AceObject aceO)
            : base(aceO)
        {
            Vendor = true;
            Stuck  = true; Attackable = true;

            SetObjectDescriptionBools();
        }
コード例 #11
0
        public bool SaveObject(AceObject weenie)
        {
            if (_weenieCache.ContainsKey(weenie.WeenieClassId))
            {
                _weenieCache[weenie.WeenieClassId] = weenie;
            }

            return(_wrappedDatabase.SaveObject(weenie));
        }
コード例 #12
0
ファイル: WorldObjectFactory.cs プロジェクト: ValidusAC/ACE
        public static WorldObject CreateWorldObject(AceObject aceO)
        {
            WeenieType objWeenieType = (WeenieType?)aceO.WeenieType ?? WeenieType.Generic;

            switch (objWeenieType)
            {
            case WeenieType.LifeStone:
                return(new Lifestone(aceO));

            case WeenieType.Door:
                return(new Door(aceO));

            case WeenieType.Portal:
                return(new Portal(aceO));

            case WeenieType.Book:
                return(new Book(aceO));

            // case WeenieType.PKModifier:
            //    return new PKModifier(aceO);
            case WeenieType.Cow:
                return(new Cow(aceO));

            case WeenieType.Creature:
                return(new Creature(aceO));

            case WeenieType.Container:
                return(new Container(aceO));

            case WeenieType.Scroll:
                return(new Scroll(aceO));

            case WeenieType.Vendor:
                return(new Vendor(aceO));

            case WeenieType.Coin:
                return(new Coin(aceO));

            case WeenieType.Key:
                return(new Key(aceO));

            case WeenieType.Food:
                return(new Food(aceO));

            case WeenieType.Gem:
                return(new Gem(aceO));

            case WeenieType.Game:
                return(new Game(aceO));

            case WeenieType.GamePiece:
                return(new GamePiece(aceO));

            default:
                return(new GenericObject(aceO));
            }
        }
コード例 #13
0
        public bool ReplaceObject(AceObject aceObject)
        {
            if (_weenieCache.ContainsKey(aceObject.WeenieClassId))
            {
                _weenieCache[aceObject.WeenieClassId] = aceObject;
            }

            return(_wrappedDatabase.ReplaceObject(aceObject));
        }
コード例 #14
0
        public void UpdateWeenie(AceObject weenie)
        {
            if (_weenieCache.ContainsKey(weenie.WeenieClassId))
            {
                _weenieCache[weenie.WeenieClassId] = weenie;
            }

            _wrappedDatabase.UpdateWeenie(weenie);
        }
コード例 #15
0
ファイル: Game.cs プロジェクト: RogerFromAmericanDad/ACE
        public Game(AceObject aceO)
            : base(aceO)
        {
            Stuck = true; Attackable = true;

            SetObjectDescriptionBools();

            // Setup game variables...
            // TODO: so much more than what's here now.
        }
コード例 #16
0
ファイル: Bindstone.cs プロジェクト: RogerFromAmericanDad/ACE
        public Bindstone(AceObject aceObject)
            : base(aceObject)
        {
            Stuck = true; Attackable = true;

            SetObjectDescriptionBools();

            RadarBehavior = global::ACE.Entity.Enum.RadarBehavior.ShowAlways;
            RadarColor    = global::ACE.Entity.Enum.RadarColor.LifeStone;
        }
コード例 #17
0
ファイル: Lifestone.cs プロジェクト: RogerFromAmericanDad/ACE
        public Lifestone(AceObject aceO)
            : base(aceO)
        {
            LifeStone = true;
            Stuck     = true; Attackable = true;

            SetObjectDescriptionBools();

            RadarColor = global::ACE.Entity.Enum.RadarColor.LifeStone;
        }
コード例 #18
0
ファイル: Key.cs プロジェクト: RogerFromAmericanDad/ACE
        public Key(AceObject aceO)
            : base(aceO)
        {
            Attackable = true;

            SetObjectDescriptionBools();

            KeyCode   = AceObject.KeyCode ?? "";
            Structure = AceObject.Structure ?? AceObject.MaxStructure;
        }
コード例 #19
0
        public static WorldObject CreateTestWorldObject(Player player, uint weenieId)
        {
            AceObject aceObject = DatabaseManager.World.GetAceObjectByWeenie(weenieId);

            if (aceObject.ItemsCapacity >= 1)
            {
                return(CreateTestContainerObject(player, weenieId));
            }
            return(new GenericObject(aceObject));
        }
コード例 #20
0
ファイル: Cow.cs プロジェクト: RogerFromAmericanDad/ACE
        public Cow(AceObject aceO)
            : base(aceO)
        {
            Stuck = true; Attackable = true;

            SetObjectDescriptionBools();

            UseRadius = 1;
            IsAlive   = true;
            SetupVitals();
        }
コード例 #21
0
ファイル: WeenieController.cs プロジェクト: fantoms/ACE
 public HttpResponseMessage Create([FromBody] AceObject request)
 {
     if (WorldDb.SaveObject(request))
     {
         return(Request.CreateResponse(HttpStatusCode.OK, new { message = "changes saved." }));
     }
     else
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, new { message = "Unable to save changes." }));
     }
 }
コード例 #22
0
ファイル: Book.cs プロジェクト: RogerFromAmericanDad/ACE
        public Book(AceObject aceO)
            : base(aceO)
        {
            Book       = true;
            Attackable = true;

            SetObjectDescriptionBools();

            Pages    = PropertiesBook.Count; // Set correct Page Count for appraisal based on data actually in database.
            MaxPages = MaxPages ?? 1;        // If null, set MaxPages to 1.
        }
コード例 #23
0
        public bool DeleteObject(AceObject aceObject)
        {
            AceObject weenie;

            if (_weenieCache.ContainsKey(aceObject.WeenieClassId))
            {
                _weenieCache.TryRemove(aceObject.WeenieClassId, out weenie);
            }

            return(_wrappedDatabase.DeleteObject(aceObject));
        }
コード例 #24
0
 public void SaveObject(AceObject aceObject, Action <bool> callback)
 {
     _queue.Add(new Task(() =>
     {
         var result = _wrappedDatabase.SaveObject(aceObject);
         if (callback != null)
         {
             callback.Invoke(result);
         }
     }));
 }
コード例 #25
0
        /// <summary>
        /// Create a new monster at the specified position
        /// </summary>
        public static Monster SpawnMonster(AceObject aceO, Position position)
        {
            Monster newMonster = new Monster(aceO);

            newMonster.Location    = position;
            newMonster.GeneratorId = aceO.GeneratorIID;

            // newMonster.PhysicsData.DefaultScript = aceO.PhysicsScript;
            // newMonster.DefaultScript = (uint)Network.Enum.PlayScript.Create;

            return(newMonster);
        }
コード例 #26
0
ファイル: WorldDatabase.cs プロジェクト: Thwargle/ACE
        public AceObject GetWorldObject(uint objId)
        {
            AceObject ret      = new AceObject();
            var       criteria = new Dictionary <string, object> {
                { "aceObjectId", objId }
            };
            bool success = ExecuteConstructedGetStatement <AceObject, WorldPreparedStatement>(WorldPreparedStatement.GetAceObject, criteria, ret);

            if (!success)
            {
                return(null);
            }
            return(ret);
        }
コード例 #27
0
ファイル: WeenieController.cs プロジェクト: fantoms/ACE
        public HttpResponseMessage Update([FromBody] AceObject request)
        {
            // force this to true, as we're explicitly doing an update
            request.HasEverBeenSavedToDatabase = true;

            if (WorldDb.ReplaceObject(request))
            {
                return(Request.CreateResponse(HttpStatusCode.OK, new { message = "changes saved." }));
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, new { message = "Unable to save changes." }));
            }
        }
コード例 #28
0
        public Door(AceObject aceO)
            : base(aceO)
        {
            Door  = true;
            Stuck = true; Attackable = true;

            SetObjectDescriptionBools();

            // This likely will change to be based on reading a dat file to determine if this exists...
            HasPhysicsBsp = true;

            if (!DefaultOpen)
            {
                CurrentMotionState = motionStateClosed;
                IsOpen             = false;
                Ethereal           = false;
            }
            else
            {
                CurrentMotionState = motionStateOpen;
                IsOpen             = true;
                Ethereal           = true;
            }

            IsLocked       = AceObject.Locked ?? false;
            ResetInterval  = AceObject.ResetInterval ?? 30.0f;
            ResistLockpick = AceObject.ResistLockpick ?? 0;
            LockCode       = AceObject.LockCode ?? "";

            // If we had the base weenies this would be the way to go
            ////if (DefaultLocked)
            ////    IsLocked = true;
            ////else
            ////    IsLocked = false;

            // But since we don't know what doors were DefaultLocked, let's assume for now that any door that starts Locked should default as such.
            if (IsLocked)
            {
                DefaultLocked = true;
            }

            movementOpen.ForwardCommand   = (uint)MotionCommand.On;
            movementClosed.ForwardCommand = (uint)MotionCommand.Off;

            if (UseRadius < 2)
            {
                UseRadius = 2;
            }
        }
コード例 #29
0
        private void byIDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string weenieId = Interaction.InputBox("Enter the Weenie ID", "ACE");
            uint   id;

            if (uint.TryParse(weenieId, out id))
            {
                var db     = new WorldDatabase();
                var config = WeenieEditorConfig.Load();
                db.Initialize(config.ServerIp, uint.Parse(config.ServerPort), config.RootUsername, config.RootPassword, config.WorldDatabaseName);

                _weenie = db.GetWeenie(id);
                LoadWeenie();
            }
        }
コード例 #30
0
ファイル: WorldDatabase.cs プロジェクト: Thwargle/ACE
        public List <AceObject> GetWeenieInstancesByLandblock(ushort landblock)
        {
            var criteria = new Dictionary <string, object> {
                { "landblock", landblock }
            };
            var instances        = ExecuteConstructedGetListStatement <WorldPreparedStatement, WeenieObjectInstance>(WorldPreparedStatement.GetWeenieInstancesByLandblock, criteria);
            List <AceObject> ret = new List <AceObject>();

            instances.ForEach(instance =>
            {
                // Create a new AceObject from Weenie.
                AceObject ao = GetWorldObject(instance.WeenieClassId);

                // Load in the object's properties from the weenie.
                ao.DataIdProperties             = GetAceObjectPropertiesDid(ao.AceObjectId);
                ao.InstanceIdProperties         = GetAceObjectPropertiesIid(ao.AceObjectId);
                ao.IntProperties                = GetAceObjectPropertiesInt(ao.AceObjectId);
                ao.Int64Properties              = GetAceObjectPropertiesBigInt(ao.AceObjectId);
                ao.BoolProperties               = GetAceObjectPropertiesBool(ao.AceObjectId);
                ao.DoubleProperties             = GetAceObjectPropertiesDouble(ao.AceObjectId);
                ao.StringProperties             = GetAceObjectPropertiesString(ao.AceObjectId);
                ao.TextureOverrides             = GetAceObjectTextureMaps(ao.AceObjectId);
                ao.AnimationOverrides           = GetAceObjectAnimations(ao.AceObjectId);
                ao.PaletteOverrides             = GetAceObjectPalettes(ao.AceObjectId);
                ao.SpellIdProperties            = GetAceObjectPropertiesSpell(ao.AceObjectId);
                ao.GeneratorLinks               = GetAceObjectGeneratorLinks(ao.AceObjectId);
                ao.AceObjectPropertiesPositions = GetAceObjectPositions(ao.AceObjectId).ToDictionary(x => (PositionType)x.DbPositionType, x => new Position(x));
                ao.BookProperties               = GetAceObjectPropertiesBook(ao.AceObjectId).ToDictionary(x => x.Page);

                // Set the object's current location for this instance.
                ao.Location = new Position(instance.LandblockRaw,
                                           instance.PositionX, instance.PositionY, instance.PositionZ,
                                           instance.RotationX, instance.RotationY, instance.RotationZ, instance.RotationW);

                // Use the guid recorded by the PCAP.
                // This step could eventually be removed if we want to let the GuidManager handle assigning guids for static objects, ignoring the recorded guids.
                string cmsClone = ao.CurrentMotionState;            // Make a copy of the CurrentMotionState for cloning
                ao = (AceObject)ao.Clone(instance.PreassignedGuid); // Clone AceObject and assign the recorded Guid
                ao.CurrentMotionState = cmsClone;                   // Restore CurrentMotionState from original weenie

                ret.Add(ao);
            });
            return(ret);
        }