public override Spell GetRandomBuffSpell() { int mana = m_Mobile.Mana; int select = 1; if (mana >= 15) { select = 3; } if (mana >= 20 && !EnemyOfOneSpell.UnderEffect(m_Mobile)) { select = 4; } switch (Utility.Random(select)) { case 0: return(new RemoveCurseSpell(m_Mobile, null)); case 1: return(new DivineFurySpell(m_Mobile, null)); case 2: return(new ConsecrateWeaponSpell(m_Mobile, null)); case 3: return(new EnemyOfOneSpell(m_Mobile, null)); } return(new ConsecrateWeaponSpell(m_Mobile, null)); }
public static int MobileNotoriety(Mobile source, IDamageable damageable) { if (damageable is PublicMoongate) { return(Notoriety.Innocent); } var target = damageable as Mobile; if (target == null) { return(Notoriety.CanBeAttacked); } if (Core.AOS) { if (target.Blessed) { return(Notoriety.Invulnerable); } if (target is BaseVendor && ((BaseVendor)target).IsInvulnerable) { return(Notoriety.Invulnerable); } if (target is PlayerVendor || target is TownCrier) { return(Notoriety.Invulnerable); } } var context = EnemyOfOneSpell.GetContext(source); if (context != null && context.IsEnemy(target)) { return(Notoriety.Enemy); } if (PVPArenaSystem.IsEnemy(source, target)) { return(Notoriety.Enemy); } if (PVPArenaSystem.IsFriendly(source, target)) { return(Notoriety.Ally); } if (target.IsStaff()) { return(Notoriety.CanBeAttacked); } if (source.Player && target is BaseCreature) { var bc = (BaseCreature)target; var master = bc.GetMaster(); if (master != null && master.IsStaff()) { return(Notoriety.CanBeAttacked); } master = bc.ControlMaster; if (Core.ML && master != null && !bc.ForceNotoriety) { if (source == master && CheckAggressor(target.Aggressors, source)) { return(Notoriety.CanBeAttacked); } if (CheckAggressor(source.Aggressors, bc)) { return(Notoriety.CanBeAttacked); } return(MobileNotoriety(source, master)); } } if (target.Murderer) { return(Notoriety.Murderer); } if (target.Body.IsMonster && IsSummoned(target as BaseCreature)) { if (!(target is BaseFamiliar) && !(target is ArcaneFey) && !(target is Golem)) { return(Notoriety.Murderer); } } if (target is BaseCreature) { if (((BaseCreature)target).AlwaysMurderer || ((BaseCreature)target).IsAnimatedDead) { return(Notoriety.Murderer); } } #region Mondain's Legacy if (target is Gregorio) { if (Gregorio.IsMurderer(source)) { return(Notoriety.Murderer); } return(Notoriety.Innocent); } if (source.Player && target is BaseEscort) { return(Notoriety.Innocent); } #endregion if (target.Criminal) { return(Notoriety.Criminal); } var sourceGuild = GetGuildFor(source.Guild as Guild, source); var targetGuild = GetGuildFor(target.Guild as Guild, target); if (sourceGuild != null && targetGuild != null) { if (sourceGuild == targetGuild) { return(Notoriety.Ally); } if (sourceGuild.IsAlly(targetGuild)) { return(Notoriety.Ally); } if (sourceGuild.IsEnemy(targetGuild)) { return(Notoriety.Enemy); } } if (Settings.Enabled) { var srcFaction = Faction.Find(source, true, true); var trgFaction = Faction.Find(target, true, true); if (srcFaction != null && trgFaction != null && srcFaction != trgFaction && source.Map == Faction.Facet) { return(Notoriety.Enemy); } } if (ViceVsVirtueSystem.Enabled && ViceVsVirtueSystem.IsEnemy(source, damageable) && source.Map == Faction.Facet) { return(Notoriety.Enemy); } if (Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).PermaFlags.Contains(source)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature && ((BaseCreature)target).AlwaysAttackable) { return(Notoriety.CanBeAttacked); } if (CheckHouseFlag(source, target, target.Location, target.Map)) { return(Notoriety.CanBeAttacked); } //If Target is NOT A baseCreature, OR it's a BC and the BC is initial innocent... if (!(target is BaseCreature && ((BaseCreature)target).InitialInnocent)) { if (!target.Body.IsHuman && !target.Body.IsGhost && !IsPet(target as BaseCreature) && !(target is PlayerMobile)) { return(Notoriety.CanBeAttacked); } if (!Core.ML && !target.CanBeginAction(typeof(PolymorphSpell))) { return(Notoriety.CanBeAttacked); } } if (CheckAggressor(source.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (source is PlayerMobile && CheckPetAggressor((PlayerMobile)source, target)) { return(Notoriety.CanBeAttacked); } if (CheckAggressed(source.Aggressed, target)) { return(Notoriety.CanBeAttacked); } if (source is PlayerMobile && CheckPetAggressed((PlayerMobile)source, target)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature) { var bc = (BaseCreature)target; if (bc.Controlled && bc.ControlOrder == OrderType.Guard && bc.ControlTarget == source) { return(Notoriety.CanBeAttacked); } } if (source is BaseCreature) { var bc = (BaseCreature)source; var master = bc.GetMaster(); if (master != null) { if (CheckAggressor(master.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (MobileNotoriety(master, target) == Notoriety.CanBeAttacked) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature) { return(Notoriety.CanBeAttacked); } } } return(Notoriety.Innocent); }
public static int MobileNotoriety(Mobile source, Mobile target) { if (target is Clone) { return(Notoriety.Compute(source, ((Clone)target).Caster)); } if (target is BaseCreature && !(target is Engines.Quests.BaseEscort)) { BaseCreature bc = target as BaseCreature; if (bc.ControlMaster != null) { return(PetMobileNotoriety(source, bc)); } if (!bc.Summoned && !bc.Controlled) { var context = EnemyOfOneSpell.GetContext(source); if (context != null && context.TargetType == target.GetType()) { return(Notoriety.Enemy); } } } if ((target.Blessed || (target is BaseVendor && ((BaseVendor)target).IsInvulnerable) || target is PlayerVendor || target is TownCrier)) { return(Notoriety.Invulnerable); } if (target.AccessLevel > AccessLevel.Player) { return(Notoriety.Invulnerable); } Guild sourceGuild = GetGuildFor(source.Guild as Guild, source); Guild targetGuild = GetGuildFor(target.Guild as Guild, target); if (sourceGuild != null && targetGuild != null && sourceGuild.IsEnemy(targetGuild)) { return(Notoriety.Enemy); } Faction srcFaction = Faction.Find(source, true, true); Faction trgFaction = Faction.Find(target, true, true); if (srcFaction != null && trgFaction != null && srcFaction != trgFaction && source.Map == Faction.Facet) { return(Notoriety.Enemy); } if (target.Kills >= 5) { return(Notoriety.Murderer); } if (target.Body.IsMonster && IsSummoned(target as BaseCreature) && !(target is BaseFamiliar) && !(target is Golem) && !(target is LesserFey)) { return(Notoriety.Murderer); } if ((target is BaseCreature && (((BaseCreature)target).AlwaysMurderer || ((BaseCreature)target).IsAnimatedDead))) { return(Notoriety.Murderer); } if (target.Criminal) { return(Notoriety.Criminal); } if (sourceGuild != null && targetGuild != null && (sourceGuild == targetGuild || sourceGuild.IsAlly(targetGuild))) { return(Notoriety.Ally); } if (Factions.Faction.IsInnocentAttackingFactioner(target, Factions.Faction.Find(source, true))) { return(Notoriety.CanBeAttacked); } if (SkillHandlers.Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).PermaFlags.Contains(source)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature && ((BaseCreature)target).AlwaysAttackable) { return(Notoriety.CanBeAttacked); } if (CheckHouseFlag(source, target, target.Location, target.Map)) { return(Notoriety.CanBeAttacked); } if (!(target is BaseCreature && ((BaseCreature)target).InitialInnocent)) { if (!target.Body.IsHuman && !target.Body.IsGhost && !IsPet(target as BaseCreature) && !Server.Spells.Necromancy.TransformationSpell.UnderTransformation(target) && !Server.Spells.Ninjitsu.AnimalForm.UnderTransformation(target) && target.Race != Race.Elf) { return(Notoriety.CanBeAttacked); } } if (CheckAggressor(source.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (CheckAggressed(source.Aggressed, target)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature) { BaseCreature bc = (BaseCreature)target; if (bc.Controlled && bc.ControlOrder == OrderType.Guard && bc.ControlTarget == source) { return(Notoriety.CanBeAttacked); } } if (source is BaseCreature) { BaseCreature bc = (BaseCreature)source; Mobile master = bc.GetMaster(); if (master != null && CheckAggressor(master.Aggressors, target)) { return(Notoriety.CanBeAttacked); } } return(Notoriety.Innocent); }
public static int MobileNotoriety(Mobile source, IDamageable damageable) { Mobile target = damageable as Mobile; if (target == null) { return(Notoriety.CanBeAttacked); } if (target.Blessed) { return(Notoriety.Invulnerable); } if (target is BaseVendor vendor && vendor.IsInvulnerable) { return(Notoriety.Invulnerable); } if (target is PlayerVendor || target is TownCrier) { return(Notoriety.Invulnerable); } EnemyOfOneContext context = EnemyOfOneSpell.GetContext(source); if (context != null && context.IsEnemy(target)) { return(Notoriety.Enemy); } if (PVPArenaSystem.IsEnemy(source, target)) { return(Notoriety.Enemy); } if (PVPArenaSystem.IsFriendly(source, target)) { return(Notoriety.Ally); } if (target.IsStaff()) { return(Notoriety.CanBeAttacked); } var bc = target as BaseCreature; if (source.Player && bc != null) { Mobile master = bc.GetMaster(); if (master != null && master.IsStaff()) { return(Notoriety.CanBeAttacked); } master = bc.ControlMaster; if (master != null && !bc.ForceNotoriety) { if (source == master && CheckAggressor(target.Aggressors, source)) { return(Notoriety.CanBeAttacked); } if (CheckAggressor(source.Aggressors, bc)) { return(Notoriety.CanBeAttacked); } return(MobileNotoriety(source, master)); } } if (target.Murderer) { return(Notoriety.Murderer); } if (target.Body.IsMonster && IsSummoned(bc)) { if (!(target is BaseFamiliar) && !(target is ArcaneFey) && !(target is Golem)) { return(Notoriety.Murderer); } } if (bc != null && (bc.AlwaysMurderer || bc.IsAnimatedDead)) { return(Notoriety.Murderer); } if (target.Criminal) { return(Notoriety.Criminal); } Guild sourceGuild = GetGuildFor(source.Guild as Guild, source); Guild targetGuild = GetGuildFor(target.Guild as Guild, target); if (sourceGuild != null && targetGuild != null) { if (sourceGuild == targetGuild) { return(Notoriety.Ally); } if (sourceGuild.IsAlly(targetGuild)) { return(Notoriety.Ally); } if (sourceGuild.IsEnemy(targetGuild)) { return(Notoriety.Enemy); } } if (ViceVsVirtueSystem.Enabled && ViceVsVirtueSystem.IsEnemy(source, target) && (ViceVsVirtueSystem.EnhancedRules || source.Map == ViceVsVirtueSystem.Facet)) { return(Notoriety.Enemy); } if (Stealing.ClassicMode && target is PlayerMobile mobile && mobile.PermaFlags.Contains(source)) { return(Notoriety.CanBeAttacked); } if (bc != null && bc.AlwaysAttackable) { return(Notoriety.CanBeAttacked); } if (CheckHouseFlag(source, target, target.Location, target.Map)) { return(Notoriety.CanBeAttacked); } //If Target is NOT A baseCreature, OR it's a BC and the BC is initial innocent... if (!(bc != null && ((BaseCreature)target).InitialInnocent)) { if (!target.Body.IsHuman && !target.Body.IsGhost && !IsPet(target as BaseCreature) && !(target is PlayerMobile)) { return(Notoriety.CanBeAttacked); } } if (CheckAggressor(source.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (source is PlayerMobile pm && CheckPetAggressor(pm, target)) { return(Notoriety.CanBeAttacked); } if (CheckAggressed(source.Aggressed, target)) { return(Notoriety.CanBeAttacked); } if (source is PlayerMobile playerMobile && CheckPetAggressed(playerMobile, target)) { return(Notoriety.CanBeAttacked); } if (bc != null) { if (bc.AlwaysInnocent) { return(Notoriety.Innocent); } if (bc.Controlled && bc.ControlOrder == OrderType.Guard && bc.ControlTarget == source) { return(Notoriety.CanBeAttacked); } } if (source is BaseCreature creature) { Mobile master = creature.GetMaster(); if (master != null) { if (CheckAggressor(master.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (MobileNotoriety(master, target) == Notoriety.CanBeAttacked) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature) { return(Notoriety.CanBeAttacked); } } } return(Notoriety.Innocent); }
public static int MobileNotoriety(Mobile source, IDamageable damageable) { Mobile target = damageable as Mobile; if (target == null) { return(Notoriety.CanBeAttacked); } if (Core.AOS && (target.Blessed || (target is BaseVendor && ((BaseVendor)target).IsInvulnerable) || target is PlayerVendor || target is TownCrier)) { return(Notoriety.Invulnerable); } var context = EnemyOfOneSpell.GetContext(source); if (context != null && context.IsEnemy(target)) { return(Notoriety.Enemy); } #region Dueling if (source is PlayerMobile && target is PlayerMobile) { PlayerMobile pmFrom = (PlayerMobile)source; PlayerMobile pmTarg = (PlayerMobile)target; if (pmFrom.DuelContext != null && pmFrom.DuelContext.StartedBeginCountdown && !pmFrom.DuelContext.Finished && pmFrom.DuelContext == pmTarg.DuelContext) { return(pmFrom.DuelContext.IsAlly(pmFrom, pmTarg) ? Notoriety.Ally : Notoriety.Enemy); } } #endregion if (target.IsStaff()) { return(Notoriety.CanBeAttacked); } if (source.Player && !target.Player && source is PlayerMobile && target is BaseCreature) { BaseCreature bc = (BaseCreature)target; Mobile master = bc.GetMaster(); if (master != null && master.IsStaff()) { return(Notoriety.CanBeAttacked); } master = bc.ControlMaster; if (Core.ML && master != null && !bc.ForceNotoriety) { if ((source == master && CheckAggressor(target.Aggressors, source)) || (CheckAggressor(source.Aggressors, bc))) { return(Notoriety.CanBeAttacked); } else { return(MobileNotoriety(source, master)); } } } if (target.Murderer || (target.Body.IsMonster && IsSummoned(target as BaseCreature) && !(target is BaseFamiliar) && !(target is ArcaneFey) && !(target is Golem)) || (target is BaseCreature && (((BaseCreature)target).AlwaysMurderer || ((BaseCreature)target).IsAnimatedDead))) { return(Notoriety.Murderer); } #region Mondain's Legacy if (target is Gregorio) { Gregorio gregorio = (Gregorio)target; if (Gregorio.IsMurderer(source)) { return(Notoriety.Murderer); } return(Notoriety.Innocent); } else if (source.Player && target is Engines.Quests.BaseEscort) { return(Notoriety.Innocent); } #endregion if (target.Criminal) { return(Notoriety.Criminal); } if (XmlPoints.AreTeamMembers(source, target)) { return(Notoriety.Ally); } else if (XmlPoints.AreChallengers(source, target)) { return(Notoriety.Enemy); } Guild sourceGuild = GetGuildFor(source.Guild as Guild, source); Guild targetGuild = GetGuildFor(target.Guild as Guild, target); if (sourceGuild != null && targetGuild != null) { if (sourceGuild == targetGuild || sourceGuild.IsAlly(targetGuild)) { return(Notoriety.Ally); } else if (sourceGuild.IsEnemy(targetGuild)) { return(Notoriety.Enemy); } } if (Factions.Settings.Enabled) { Faction srcFaction = Faction.Find(source, true, true); Faction trgFaction = Faction.Find(target, true, true); if (srcFaction != null && trgFaction != null && srcFaction != trgFaction && source.Map == Faction.Facet) { return(Notoriety.Enemy); } } if (ViceVsVirtueSystem.Enabled && ViceVsVirtueSystem.IsEnemy(source, damageable) && source.Map == Faction.Facet) { return(Notoriety.Enemy); } if (SkillHandlers.Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).PermaFlags.Contains(source)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature && ((BaseCreature)target).AlwaysAttackable) { return(Notoriety.CanBeAttacked); } if (CheckHouseFlag(source, target, target.Location, target.Map)) { return(Notoriety.CanBeAttacked); } if (!(target is BaseCreature && ((BaseCreature)target).InitialInnocent)) //If Target is NOT A baseCreature, OR it's a BC and the BC is initial innocent... { if (!target.Body.IsHuman && !target.Body.IsGhost && !IsPet(target as BaseCreature) && !(target is PlayerMobile) || !Core.ML && !target.CanBeginAction(typeof(Server.Spells.Seventh.PolymorphSpell))) { return(Notoriety.CanBeAttacked); } } if (CheckAggressor(source.Aggressors, target)) { return(Notoriety.CanBeAttacked); } if (CheckAggressed(source.Aggressed, target)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature) { BaseCreature bc = (BaseCreature)target; if (bc.Controlled && bc.ControlOrder == OrderType.Guard && bc.ControlTarget == source) { return(Notoriety.CanBeAttacked); } } if (source is BaseCreature) { BaseCreature bc = (BaseCreature)source; Mobile master = bc.GetMaster(); if (master != null) { if (CheckAggressor(master.Aggressors, target) || MobileNotoriety(master, target) == Notoriety.CanBeAttacked || target is BaseCreature) { return(Notoriety.CanBeAttacked); } } } return(Notoriety.Innocent); }