public BuyBackInventory(PlayerInventory baseInventory) : base(baseInventory) { }
public KeyRingInventory(PlayerInventory baseInventory) : base(baseInventory) { }
public EquippedContainerInventory(PlayerInventory baseInventory) : base(baseInventory) { }
public BankBagInventory(PlayerInventory baseInventory) : base(baseInventory) { }
protected PartialInventory(PlayerInventory baseInventory) { m_inventory = baseInventory; }
public EquipmentInventory(PlayerInventory baseInventory) : base(baseInventory) { }
public SpellFailedReason CheckItemRestrictions(Item usedItem, PlayerInventory inv) { if (RequiredItemClass != ItemClass.None) { if (EquipmentSlot != EquipmentSlot.End) { usedItem = inv[EquipmentSlot]; } if (usedItem == null) { return SpellFailedReason.EquippedItem; } if (RequiredItemClass > 0) { if (usedItem.Template.Class != RequiredItemClass) { return SpellFailedReason.EquippedItemClass; } if (RequiredItemSubClassMask > 0 && !usedItem.Template.SubClassMask.HasAnyFlag(RequiredItemSubClassMask)) { return SpellFailedReason.EquippedItemClass; } } } if (RequiredItemInventorySlotMask != InventorySlotTypeMask.None) { if (usedItem != null && (usedItem.Template.InventorySlotMask & RequiredItemInventorySlotMask) == 0) // don't use Enum.HasFlag! { return SpellFailedReason.EquippedItemClass; } } // check for special tools if (RequiredTools != null) { foreach (var tool in RequiredTools) { if (!inv.Contains(tool.Id, 1, false)) { return SpellFailedReason.ItemNotFound; } } } if (RequiredTotemCategories.Length > 0) { // Required totem category refers to tools that are required during the spell if (!inv.CheckTotemCategories(RequiredTotemCategories)) { return SpellFailedReason.TotemCategory; } } // check for whether items must be equipped if (EquipmentSlot != EquipmentSlot.End) { var item = inv[EquipmentSlot]; if (item == null) { return SpellFailedReason.EquippedItem; } if (AttributesExC.HasFlag(SpellAttributesExC.RequiresWand) && item.Template.SubClass != ItemSubClass.WeaponWand) { return SpellFailedReason.EquippedItem; } if (AttributesExC.HasFlag(SpellAttributesExC.ShootRangedWeapon) && !item.Template.IsRangedWeapon) { return SpellFailedReason.EquippedItem; } } return SpellFailedReason.Ok; }
/// <summary> /// Creates a new character and loads all required character data from the database /// </summary> /// <param name="acc">The account the character is associated with</param> /// <param name="record">The name of the character to load</param> /// <param name="client">The client to associate with this character</param> internal protected void Create(RealmAccount acc, CharacterRecord record, IRealmClient client) { client.ActiveCharacter = this; acc.ActiveCharacter = this; Type |= ObjectTypes.Player; ChatChannels = new List<ChatChannel>(5); m_logoutTimer = new TimerEntry(0, DefaultLogoutDelayMillis, totalTime => FinishLogout()); Account = acc; m_client = client; m_record = record; EntityId = EntityId.GetPlayerId(m_record.EntityLowId); m_name = m_record.Name; Archetype = ArchetypeMgr.GetArchetype(record.Race, record.Class); MainWeapon = GenericWeapon.Fists; PowerType = m_archetype.Class.DefaultPowerType; StandState = StandState.Sit; Money = (uint) m_record.Money; Outfit = m_record.Outfit; //ScaleX = m_archetype.Race.Scale; ScaleX = 1; Gender = m_record.Gender; Skin = m_record.Skin; Facial = m_record.Face; HairStyle = m_record.HairStyle; HairColor = m_record.HairColor; FacialHair = m_record.FacialHair; UnitFlags = UnitFlags.PlayerControlled; Experience = m_record.Xp; RestXp = m_record.RestXp; SetInt32(UnitFields.LEVEL, m_record.Level); // cannot use Level property, since it will trigger certain events that we don't want triggered NextLevelXP = XpGenerator.GetXpForlevel(m_record.Level + 1); MaxLevel = RealmServerConfiguration.MaxCharacterLevel; RestState = RestState.Normal; Orientation = m_record.Orientation; m_bindLocation = new WorldZoneLocation( m_record.BindMap, new Vector3(m_record.BindX, m_record.BindY, m_record.BindZ), m_record.BindZone); PvPRank = 1; YieldsXpOrHonor = true; foreach (var school in WCellDef.AllDamageSchools) { SetFloat(PlayerFields.MOD_DAMAGE_DONE_PCT + (int) school, 1); } SetFloat(PlayerFields.DODGE_PERCENTAGE, 1.0f); // Auras m_auras = new PlayerAuraCollection(this); // spells m_spells = PlayerSpellCollection.Obtain(this); // factions WatchedFaction = m_record.WatchedFaction; Faction = FactionMgr.ByRace[(uint) record.Race]; m_reputations = new ReputationCollection(this); // skills m_skills = new SkillCollection(this); // talents m_talents = new PlayerTalentCollection(this); // achievements m_achievements = new AchievementCollection(this); // Items m_inventory = new PlayerInventory(this); m_mailAccount = new MailAccount(this); m_questLog = new QuestLog(this); // tutorial flags TutorialFlags = new TutorialFlags(m_record.TutorialFlags); // Make sure client and internal state is updated with combat base values UnitUpdates.UpdateSpellCritChance(this); // Mask of activated TaxiNodes m_taxiNodeMask = new TaxiNodeMask(); PowerCostMultiplier = 1f; m_lastPlayTimeUpdate = DateTime.Now; MoveControl.Mover = this; MoveControl.CanControl = true; CanMelee = true; SpeedFactor = DefaultSpeedFactor; // basic setup if (record.JustCreated) { ModStatsForLevel(m_record.Level); BasePower = RegenerationFormulas.GetPowerForLevel(this); } else { BaseHealth = m_record.BaseHealth; SetBasePowerDontUpdate(m_record.BasePower); SetBaseStat(StatType.Strength, m_record.BaseStrength); SetBaseStat(StatType.Stamina, m_record.BaseStamina); SetBaseStat(StatType.Spirit, m_record.BaseSpirit); SetBaseStat(StatType.Intellect, m_record.BaseIntellect); SetBaseStat(StatType.Agility, m_record.BaseAgility); Power = m_record.Power; SetInt32(UnitFields.HEALTH, m_record.Health); } }
/// <summary> /// Creates a new character and loads all required character data from the database /// </summary> /// <param name="acc">The account the character is associated with</param> /// <param name="record">The name of the character to load</param> /// <param name="client">The client to associate with this character</param> internal protected void Create(RealmAccount acc, CharacterRecord record, IRealmClient client) { client.ActiveCharacter = this; acc.ActiveCharacter = this; Type |= ObjectTypes.Player; ChatChannels = new List<ChatChannel>(); m_logoutTimer = new TimerEntry(0.0f, DefaultLogoutDelay, totalTime => FinishLogout()); Account = acc; m_client = client; m_record = record; EntityId = EntityId.GetPlayerId(m_record.EntityLowId); m_name = m_record.Name; Archetype = ArchetypeMgr.GetArchetype(record.Race, record.Class); MainWeapon = GenericWeapon.Fists; PowerType = m_archetype.Class.PowerType; StandState = StandState.Sit; Money = (uint)m_record.Money; Outfit = m_record.Outfit; //ScaleX = m_archetype.Race.Scale; ScaleX = 1; Gender = m_record.Gender; Skin = m_record.Skin; Facial = m_record.Face; HairStyle = m_record.HairStyle; HairColor = m_record.HairColor; FacialHair = m_record.FacialHair; UnitFlags = UnitFlags.PlayerControlled; XP = m_record.Xp; RestXp = m_record.RestXp; Level = m_record.Level; NextLevelXP = XpGenerator.GetXpForlevel(m_record.Level + 1); MaxLevel = RealmServerConfiguration.MaxCharacterLevel; RestState = RestState.Normal; Orientation = m_record.Orientation; m_bindLocation = new ZoneWorldLocation( m_record.BindRegion, new Vector3(m_record.BindX, m_record.BindY, m_record.BindZ), m_record.BindZone); PvPRank = 1; YieldsXpOrHonor = true; foreach (var school in WCellDef.AllDamageSchools) { SetInt32(PlayerFields.MOD_DAMAGE_DONE_PCT + (int)school, 1); } SetFloat(PlayerFields.DODGE_PERCENTAGE, 1.0f); // Auras m_auras = new PlayerAuraCollection(this); // spells PlayerSpellCollection spells; if (!record.JustCreated && SpellHandler.PlayerSpellCollections.TryGetValue(EntityId.Low, out spells)) { SpellHandler.PlayerSpellCollections.Remove(EntityId.Low); m_spells = spells; ((PlayerSpellCollection)m_spells).OnReconnectOwner(this); } else { m_spells = new PlayerSpellCollection(this); } // factions WatchedFaction = m_record.WatchedFaction; Faction = FactionMgr.ByRace[(uint)record.Race]; m_reputations = new ReputationCollection(this); // skills m_skills = new SkillCollection(this); // talents m_talents = new TalentCollection(this); // Items m_inventory = new PlayerInventory(this); m_mailAccount = new MailAccount(this); m_questLog = new QuestLog(this); // Talents m_record.SpecProfile = SpecProfile.NewSpecProfile(this); FreeTalentPoints = m_record.FreeTalentPoints; // tutorial flags TutorialFlags = new TutorialFlags(m_record.TutorialFlags); // Make sure client and internal state is updated with combat base values UnitUpdates.UpdateSpellCritChance(this); // Mask of activated TaxiNodes m_taxiNodeMask = new TaxiNodeMask(); PowerCostMultiplier = 1f; m_lastPlayTimeUpdate = DateTime.Now; MoveControl.Mover = this; MoveControl.CanControl = true; BaseHealth = m_record.BaseHealth; SetBasePowerDontUpdate(m_record.BasePower); SetBaseStat(StatType.Strength, m_record.BaseStrength); SetBaseStat(StatType.Stamina, m_record.BaseStamina); SetBaseStat(StatType.Spirit, m_record.BaseSpirit); SetBaseStat(StatType.Intellect, m_record.BaseIntellect); SetBaseStat(StatType.Agility, m_record.BaseAgility); CanMelee = true; // basic setup if (record.JustCreated) { Power = PowerType == PowerType.Rage ? 0 : MaxPower; SetInt32(UnitFields.HEALTH, MaxHealth); } else { Power = m_record.Power; SetInt32(UnitFields.HEALTH, m_record.Health); } }
public SpellFailedReason CheckGeneralItemRestrictions(PlayerInventory inv) { // check for special tools if (RequiredTools != null) { foreach (var tool in RequiredTools) { if (!inv.Contains(tool.Id, 1, false)) { return SpellFailedReason.ItemNotFound; } } } if (RequiredTotemCategories.Length > 0) { // Required totem category refers to tools that are required during the spell if (!inv.CheckTotemCategories(RequiredTotemCategories)) { return SpellFailedReason.TotemCategory; } } // check for whether items must be equipped if (EquipmentSlot != EquipmentSlot.End) { var item = inv[EquipmentSlot]; if (item == null) { return SpellFailedReason.EquippedItem; } if (AttributesExC.HasFlag(SpellAttributesExC.RequiresWand) && item.Template.SubClass != ItemSubClass.WeaponWand) { return SpellFailedReason.EquippedItem; } if (AttributesExC.HasFlag(SpellAttributesExC.ShootRangedWeapon) && !item.Template.IsRangedWeapon) { return SpellFailedReason.EquippedItem; } } return SpellFailedReason.Ok; }
/// <summary> /// Checks whether the given inventory satisfies this Spell's item restrictions /// </summary> public SpellFailedReason CheckItemRestrictionsWithout(PlayerInventory inv, Item exclude) { if (RequiredItemClass == ItemClass.Armor || RequiredItemClass == ItemClass.Weapon) { Item item; if (EquipmentSlot != EquipmentSlot.End) { item = inv[EquipmentSlot]; if (item == null || item == exclude) { return SpellFailedReason.EquippedItem; } if (!CheckItemRestriction(item)) { return SpellFailedReason.EquippedItemClass; } } else { if (inv.Iterate(ItemMgr.EquippableInvSlotsByClass[(int)RequiredItemClass], i => i == exclude || !CheckItemRestriction(i))) { return SpellFailedReason.EquippedItemClass; } } } if (RequiredItemInventorySlotMask != InventorySlotTypeMask.None) { if (inv.Iterate(RequiredItemInventorySlotMask, item => item == exclude || (item.Template.InventorySlotMask & RequiredItemInventorySlotMask) == 0 )) { // iterated over all matching items and did not find the right one return SpellFailedReason.EquippedItemClass; } } return CheckGeneralItemRestrictions(inv); }
/// <summary> /// Checks whether the given inventory satisfies this Spell's item restrictions /// </summary> public SpellFailedReason CheckItemRestrictions(PlayerInventory inv) { return CheckItemRestrictionsWithout(inv, null); }
public SpellFailedReason CheckItemRestrictions(Item usedItem, PlayerInventory inv) { if (RequiredItemClass != ItemClass.None) { if (EquipmentSlot != EquipmentSlot.End) { usedItem = inv[EquipmentSlot]; } if (usedItem == null) { return SpellFailedReason.EquippedItem; } if (RequiredItemClass > 0) { if (usedItem.Template.Class != RequiredItemClass) { return SpellFailedReason.EquippedItemClass; } if (RequiredItemSubClassMask > 0 && !usedItem.Template.SubClassMask.HasAnyFlag(RequiredItemSubClassMask)) { return SpellFailedReason.EquippedItemClass; } } } if (RequiredItemInventorySlotMask != InventorySlotTypeMask.None) { if (usedItem != null && (usedItem.Template.InventorySlotMask & RequiredItemInventorySlotMask) == 0) // don't use Enum.HasFlag! { return SpellFailedReason.EquippedItemClass; } } return CheckGeneralItemRestrictions(inv); }