/// <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)); }
public CachedMob(GameInstance gameInstance, int mobId) { MobId = mobId; if (mobId == -1) { return; } MobInfo = gameInstance.MobManager.MobInfos[mobId]; MobInstance = gameInstance.State.MobInstances[mobId]; }
public MobInstance DeepCopy() { var copy = new MobInstance(Id) { Coord = Coord, Hp = Hp, Ap = Ap, Buff = Buff }; return(copy); }
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(); } }
public bool Equals(MobInstance other) { return(Id == other.Id && Coord.Equals(other.Coord) && Hp == other.Hp && Ap == other.Ap && Buff.Equals(other.Buff)); }
public MobItem(MobInstance mobInstance, IDXObject frame0) : base(frame0, mobInstance.Flip) { this.mobInstance = mobInstance; }
public MobItem(MobInstance mobInstance, List <IDXObject> frames) : base(frames, mobInstance.Flip) { this.mobInstance = mobInstance; }
/// <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."); } }