示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="texturePool"></param>
        /// <param name="mobInstance"></param>
        /// <param name="device"></param>
        /// <param name="usedProps"></param>
        /// <returns></returns>
        public static MobItem CreateMobFromProperty(TexturePool texturePool, MobInstance mobInstance, GraphicsDevice device, ref List <WzObject> usedProps)
        {
            MobInfo mobInfo = (MobInfo)mobInstance.BaseInfo;
            WzImage source  = mobInfo.LinkedWzImage;

            List <IDXObject> frames = new List <IDXObject>(); // All frames "stand", "speak" "blink" "hair", "angry", "wink" etc

            foreach (WzImageProperty childProperty in source.WzProperties)
            {
                if (childProperty is WzSubProperty mobStateProperty) // issue with 867119250, Eluna map mobs
                {
                    switch (mobStateProperty.Name)
                    {
                    case "info":     // info/speak/0 WzStringProperty
                    {
                        break;
                    }

                    default:
                    {
                        frames.AddRange(LoadFrames(texturePool, mobStateProperty, mobInstance.X, mobInstance.Y, device, ref usedProps));
                        break;
                    }
                    }
                }
            }
            return(new MobItem(mobInstance, frames));
        }
示例#2
0
        public CachedMob(GameInstance gameInstance, int mobId)
        {
            MobId = mobId;

            if (mobId == -1)
            {
                return;
            }
            MobInfo     = gameInstance.MobManager.MobInfos[mobId];
            MobInstance = gameInstance.State.MobInstances[mobId];
        }
示例#3
0
        public MobInstance DeepCopy()
        {
            var copy = new MobInstance(Id)
            {
                Coord = Coord,
                Hp    = Hp,
                Ap    = Ap,
                Buff  = Buff
            };

            return(copy);
        }
示例#4
0
    public static void Clear()
    {
        List <Tile> Branches = new List <Tile>();

        foreach (KeyValuePair <Tuple <int, int>, ChunkClass> Chunk in Chunks)
        {
            foreach (Tile Branch in Chunk.Value.Tiles)
            {
                Branches.Add(Branch);
            }
        }
        foreach (Tile Branch in Branches)
        {
            Branch.Remove(Force: true);
        }

        DroppedItem[] RemovingItems = new DroppedItem[ItemList.Count];
        ItemList.CopyTo(RemovingItems);
        foreach (DroppedItem Item in RemovingItems)
        {
            Item.Remove();
        }

        foreach (Node Entity in EntitiesRoot.GetChildren())
        {
            Entity.QueueFree();
        }

        foreach (Node MobInstance in MobsRoot.GetChildren())
        {
            MobInstance.QueueFree();
        }

        Pathfinder.Clear();
        Chunks.Clear();
        Grid.Clear();

        foreach (KeyValuePair <int, List <Tuple <int, int> > > Pair in RemoteLoadedChunks)
        {
            RemoteLoadedChunks[Pair.Key].Clear();
        }
    }
示例#5
0
 public bool Equals(MobInstance other)
 {
     return(Id == other.Id && Coord.Equals(other.Coord) && Hp == other.Hp && Ap == other.Ap &&
            Buff.Equals(other.Buff));
 }
示例#6
0
 public MobItem(MobInstance mobInstance, IDXObject frame0)
     : base(frame0, mobInstance.Flip)
 {
     this.mobInstance = mobInstance;
 }
示例#7
0
 public MobItem(MobInstance mobInstance, List <IDXObject> frames)
     : base(frames, mobInstance.Flip)
 {
     this.mobInstance = mobInstance;
 }
示例#8
0
        /// <summary>
        /// Looks at a given object
        /// </summary>
        /// <param name="oUser"></param>
        /// <param name="location"></param>
        /// <param name="obj"></param>
        private void LookObject(Character oUser, Entity location, string obj)
        {
            if (!oUser.canSee(null))
            {
                CommandManager.instance.report(MessageScope.CHAR, "#look_dark#", oUser);
                return;
            }

            // Find the target somewhere
            int validLocs =
                (int)EntityLocationType.LOC_ROOM |
                (int)EntityLocationType.LOC_INVENTORY |
                (int)EntityLocationType.LOC_EQUIPMENT |
                (int)EntityLocationType.LOC_CONTAINER |
                (int)EntityLocationType.LOC_SHOP |
                (int)EntityLocationType.LOC_NPC_INVENTORY |
                (int)EntityLocationType.LOC_NPC_EQUIPMENT |
                (int)EntityLocationType.LOC_RECIPES;
            TargetResult result = TargetLocation.findTargetEntity(oUser, obj, validLocs);

            if (null == result._foundEntity)
            {
                CommandManager.instance.report(MessageScope.CHAR, "#nothing_here#", oUser);
                return;
            }
            Entity entity = result._foundEntity;

            if (entity == oUser)
            {
                CommandManager.instance.report(MessageScope.CHAR, "#cant_do_that#", oUser);
                return;
            }

            #region Looking at a Player/Mob
            if (entity.Is(EntityType.BIOTA))
            {
                if (entity.Is(EntityType.PLAYER))
                {
                    CommandManager.instance.report(MessageScope.CHAR, "#looks_at_you#", oUser, entity);
                }

                Biota         biote = null;
                StringBuilder sb    = new StringBuilder();
                if (entity.Is(EntityType.PLAYER))
                {
                    Character user = entity as Character;
                    sb.Append("#you_look_at#");
                    sb.Append(Environment.NewLine);
                    sb.Append(user.description);
                    sb.Append(Environment.NewLine);
                    biote = user;
                }
                else
                {
                    MobInstance mob = entity as MobInstance;
                    sb.Append("#you_look_at#");
                    sb.Append(Environment.NewLine);
                    sb.Append(mob.description);
                    sb.Append(Environment.NewLine);
                    biote = (MobInstance)entity;
                }

                if (biote.isNaked)
                {
                    sb.Append(Environment.NewLine);
                    sb.Append(" #nothing#");
                    CommandManager.instance.report(MessageScope.CHAR, sb.ToString(), oUser, biote);
                }
                else
                {
                    IEnumerable equipment = biote.getEquipment();
                    foreach (DictionaryEntry entry in equipment)
                    {
                        ItemInstance instance = (ItemInstance)entry.Value;
                        WearLocation loc      = instance.getWearLocation(1);

                        sb.Append(Environment.NewLine);
                        sb.AppendFormat(" {0}", loc.longName.PadRight(30, '.'));

                        if (oUser.HasFlag("Admin") || oUser.HasFlag("Builder") || oUser.HasFlag("Wizard"))
                        {
                            sb.Append(Server.Client.MXP_TAG("Item"));
                            sb.Append(instance.Name);
                            sb.Append(Server.Client.MXP_TAG("/Item"));
                            sb.Append(Server.Client.MXP_TAG("Id"));
                            sb.Append(" (#");
                            sb.Append(Server.Client.MXP_TAG("WizItem '" + instance.ID + "'"));
                            sb.Append(instance.ID);
                            sb.Append(instance.GetFlags());
                            sb.Append(Server.Client.MXP_TAG("/WizItem"));
                            sb.Append(")");
                            sb.Append(Server.Client.MXP_TAG("/Id"));
                        }
                        else
                        {
                            sb.Append(Server.Client.MXP_TAG("Item"));
                            sb.Append(instance.Name);
                            sb.Append(Server.Client.MXP_TAG("/Item"));
                        }
                    }

                    CommandManager.instance.report(MessageScope.CHAR, sb.ToString(), oUser, biote);
                }
            }
            #endregion

            #region Looking at an Item
            else if (entity.Is(EntityType.ITEM))
            {
                StringBuilder sb = new StringBuilder();
                if (result._foundEntityLocationType == EntityLocationType.LOC_NPC_INVENTORY ||
                    result._foundEntityLocationType == EntityLocationType.LOC_NPC_EQUIPMENT)
                {
                    // Item is on a NPC's Inventory/Equipment
                    ItemInstance instance = entity as ItemInstance;
                    MobInstance  mob      = result._foundEntityLocation as MobInstance;

                    sb.Append("#look_npc_item_self#");
                    sb.Append(Environment.NewLine);
                    sb.Append(this.LookItem(oUser, instance));
                    sb.Append(Environment.NewLine);

                    CommandManager.instance.report(MessageScope.CHAR, sb.ToString(), oUser, mob, instance);
                    CommandManager.instance.report(MessageScope.ROOM_LIMITED, "#look_npc_item_other#", oUser, mob, instance);
                }
                else if (result._foundEntityLocationType == EntityLocationType.LOC_SHOP)
                {
                    // Item is in a Shop
                    ShopkeeperMobInstance mob = result._foundEntityLocation as ShopkeeperMobInstance;

                    sb.Append("#look_item_shop#");
                    sb.Append(Environment.NewLine);
                    // @TODO: Finish looking at items in shops
                }

                else if (result._foundEntityLocationType == EntityLocationType.LOC_RECIPES)
                {
                    // Item is memorized as a recipe
                    FormulaItemTemplate formula = result._foundEntity as FormulaItemTemplate;

                    string msg = "#look_item_formula#";

                    ItemTemplate product = EntityManager.instance.getTemplateByID(formula.product) as ItemTemplate;
                    msg += Environment.NewLine + "  Product: " + product.Name;
                    if (oUser.HasFlag("Admin") || oUser.HasFlag("Builder") || oUser.HasFlag("Wizard"))
                    {
                        msg += Server.Client.MXP_TAG("Id") + " (#" + Server.Client.MXP_TAG("WizItem '" + product.ID + "'");
                        msg += product.ID + product.GetFlags() + Server.Client.MXP_TAG("/WizItem") + ")" + Server.Client.MXP_TAG("/Id");
                    }

                    msg += Environment.NewLine + "  Skill: " + formula.skill.Name + " (" + formula.skillValue + ")";
                    if (oUser.HasFlag("Admin") || oUser.HasFlag("Builder") || oUser.HasFlag("Wizard"))
                    {
                        msg += Server.Client.MXP_TAG("Id") + " (#" + formula.skill.ID + ")" + Server.Client.MXP_TAG("/Id");
                    }

                    ItemTemplate machine = EntityManager.instance.getTemplateByID(formula.machine) as ItemTemplate;
                    msg += Environment.NewLine + "  Machine: " + EntityManager.instance.getTemplateByID(formula.machine).Name;
                    if (oUser.HasFlag("Admin") || oUser.HasFlag("Builder") || oUser.HasFlag("Wizard"))
                    {
                        msg += Server.Client.MXP_TAG("Id") + " (#" + Server.Client.MXP_TAG("WizItem '" + machine.ID + "'");
                        msg += machine.ID + machine.GetFlags() + Server.Client.MXP_TAG("/WizItem") + ")" + Server.Client.MXP_TAG("/Id");
                    }

                    ItemTemplate tool = EntityManager.instance.getTemplateByID(formula.tool) as ItemTemplate;
                    msg += Environment.NewLine + "  Tool: " + EntityManager.instance.getTemplateByID(formula.tool).Name;
                    if (oUser.HasFlag("Admin") || oUser.HasFlag("Builder") || oUser.HasFlag("Wizard"))
                    {
                        msg += Server.Client.MXP_TAG("Id") + " (#" + Server.Client.MXP_TAG("WizItem '" + tool.ID + "'");
                        msg += tool.ID + tool.GetFlags() + Server.Client.MXP_TAG("/WizItem") + ")" + Server.Client.MXP_TAG("/Id");
                    }

                    msg += Environment.NewLine + "  Resources:";
                    foreach (int resourceId in formula.resourceKeys)
                    {
                        ResourceItemTemplate resource = EntityManager.instance.getTemplateByID(resourceId) as ResourceItemTemplate;
                        msg += Environment.NewLine + "   " + resource.Name + " (x" + formula.getResource(resourceId) + ")";
                        if (oUser.HasFlag("Admin") || oUser.HasFlag("Builder") || oUser.HasFlag("Wizard"))
                        {
                            msg += Server.Client.MXP_TAG("Id") + " (#" + Server.Client.MXP_TAG("WizItem '" + resource.ID + "'");
                            msg += resource.ID + resource.GetFlags() + Server.Client.MXP_TAG("/WizItem") + ")" + Server.Client.MXP_TAG("/Id");
                        }
                    }

                    CommandManager.instance.report(MessageScope.CHAR, msg, oUser, null, formula);
                }

                else
                {
                    ItemInstance instance = entity as ItemInstance;
                    sb.Append("#look_item_self#");
                    sb.Append(Environment.NewLine);
                    sb.Append(this.LookItem(oUser, instance));
                    sb.Append(Environment.NewLine);

                    CommandManager.instance.report(MessageScope.CHAR, sb.ToString(), oUser, null, instance);
                    CommandManager.instance.report(MessageScope.ROOM_LIMITED, "#look_item_other#", oUser, null, instance);
                }
            }
            #endregion

            else
            {
                this.LogError("LookObject", "User[" + oUser.ID + "], Object[" + entity.ID + "] had no known type.");
            }
        }