/// <summary> /// This method is used to get anything in our posession. Inventory in main or any packs, /// as well as wielded items. If we have it, this will return it. /// </summary> /// <param name="objectGuid"></param> /// <returns></returns> public virtual WorldObject GetInventoryItem(ObjectGuid objectGuid) { WorldObject inventoryItem; if (InventoryObjects.TryGetValue(objectGuid, out inventoryItem)) { return(inventoryItem); } WorldObject item = null; var containers = InventoryObjects.Where(wo => wo.Value.WeenieType == WeenieType.Container).ToList(); foreach (var container in containers) { if (container.Value.InventoryObjects.TryGetValue(objectGuid, out item)) { break; } } // It is not in inventory - main pack or container - last check the wielded items. if (item == null) { WieldedObjects.TryGetValue(objectGuid, out item); } return(item); }
public void HandleSwitchToMissileCombatMode(ActionChain combatModeChain) { HeldItem mEquipedMissile = Children.Find(s => s.EquipMask == EquipMask.MissileWeapon); if (mEquipedMissile?.Guid != null) { WorldObject missileWeapon = GetInventoryItem(new ObjectGuid(mEquipedMissile.Guid)); if (missileWeapon == null) { log.InfoFormat("Changing combat mode for {0} - could not locate wielded weapon {1}", Guid, mEquipedMissile.Guid); return; } var mEquipedAmmo = WieldedObjects.First(s => s.Value.CurrentWieldedLocation == EquipMask.MissileAmmo).Value; MotionStance ms; if (missileWeapon.DefaultCombatStyle != null) { ms = (MotionStance)missileWeapon.DefaultCombatStyle; } else { log.InfoFormat("Changing combat mode for {0} - wielded item {1} has not be assigned a default combat style", Guid, mEquipedMissile.Guid); return; } UniversalMotion mm = new UniversalMotion(ms); mm.MovementData.CurrentStyle = (ushort)ms; if (mEquipedAmmo == null) { CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectRange, new GameMessageUpdatePosition(this)); SetMotionState(this, mm); } else { CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectRange, new GameMessageUpdatePosition(this)); SetMotionState(this, mm); mm.MovementData.ForwardCommand = (uint)MotionCommand.Reload; SetMotionState(this, mm); CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectRange, new GameMessageUpdatePosition(this)); // FIXME: (Og II)<this is a hack for now to be removed. Need to pull delay from dat file combatModeChain.AddDelaySeconds(0.25); // System.Threading.Thread.Sleep(250); // used for debugging mm.MovementData.ForwardCommand = (ushort)MotionCommand.Invalid; SetMotionState(this, mm); // FIXME: (Og II)<this is a hack for now to be removed. Need to pull delay from dat file combatModeChain.AddDelaySeconds(0.40); combatModeChain.AddAction(this, () => CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectRange, new GameMessageParentEvent(this, mEquipedAmmo, 1, 1))); // CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectRange, new GameMessageParentEvent(this, ammo, 1, 1)); // used for debugging } CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectRange, new GameMessagePrivateUpdatePropertyInt(Sequences, PropertyInt.CombatMode, (uint)CombatMode.Missile)); } }
public bool HasItem(ObjectGuid itemGuid) { bool foundItem = InventoryObjects.ContainsKey(itemGuid) || WieldedObjects.ContainsKey(itemGuid); if (foundItem) { return(true); } var containers = InventoryObjects.Where(wo => wo.Value.WeenieType == WeenieType.Container).ToList(); return(containers.Any(cnt => (cnt.Value).InventoryObjects.ContainsKey(itemGuid))); }
/// <summary> /// GetWilded Items /// </summary> public virtual WorldObject GetWieldedItem(ObjectGuid objectGuid) { // check wielded objects WorldObject inventoryItem; if (WieldedObjects.ContainsKey(objectGuid)) { if (WieldedObjects.TryGetValue(objectGuid, out inventoryItem)) { return(inventoryItem); } } return(null); }
/// <summary> /// This method sets us into peace mode. It checks our current state to see if we have missle ammo equipped /// it will make the call to hid the "ammo" as we switch to peace mode. It will then send the message switch our stance. Og II /// </summary> /// <param name="oldCombatMode"></param> /// <param name="isAutonomous"></param> public void HandleSwitchToPeaceMode(CombatMode oldCombatMode, bool isAutonomous = false) { HandleUnloadMissileAmmo(oldCombatMode); // FIXME: (Og II)<this is a hack for now to be removed.> Placement has an issue we have not figured out. It has to do with animation frame. Og II PositionFlag &= ~UpdatePositionFlag.Placement; // End hack CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectRange, new GameMessageUpdatePosition(this)); UniversalMotion mm = new UniversalMotion(MotionStance.Standing); mm.MovementData.CurrentStyle = (uint)MotionStance.Standing; SetMotionState(this, mm); var mEquipedAmmo = WieldedObjects.FirstOrDefault(s => s.Value.CurrentWieldedLocation == EquipMask.MissileAmmo).Value; CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectRange, new GameMessagePrivateUpdatePropertyInt(Sequences, PropertyInt.CombatMode, (uint)CombatMode.NonCombat)); if (mEquipedAmmo != null) { CurrentLandblock.EnqueueBroadcast(Location, Landblock.MaxObjectGhostRange, new GameMessagePickupEvent(mEquipedAmmo)); } }