public static int MobileNotoriety(Mobile source, Mobile target) { if (Core.AOS && (target.Blessed || (target is BaseVendor && ((BaseVendor)target).IsInvulnerable) || target is PlayerVendor || target is TownCrier)) { return(Notoriety.Invulnerable); } if (target.AccessLevel > AccessLevel.Player) { return(Notoriety.CanBeAttacked); } // MODIFICATIONS FOR Capture the Flag / Double Dom games Server.Items.CTFTeam ft = Server.Items.CTFGame.FindTeamFor(source); if (ft != null) { Server.Items.CTFTeam tt = Server.Items.CTFGame.FindTeamFor(target); if (tt != null && ft.Game == tt.Game) { return(ft == tt ? Notoriety.Ally : Notoriety.Enemy); } } if (source.Player && !target.Player && source is PlayerMobile && target is BaseCreature) { BaseCreature bc = (BaseCreature)target; if (!bc.Summoned && !bc.Controled && ((PlayerMobile)source).EnemyOfOneType == target.GetType()) { return(Notoriety.Enemy); } } if (target.Kills >= 5 || (target.Body.IsMonster && IsSummoned(target as BaseCreature) && !(target is BaseFamiliar) && !(target is Golem)) || (target is BaseCreature && (((BaseCreature)target).AlwaysMurderer || ((BaseCreature)target).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 || sourceGuild.IsAlly(targetGuild)) { return(Notoriety.Ally); } else if (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 (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)) { 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.Controled && 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); } } //bounty system if (BountyBoard.Attackable(source, target)) { return(Notoriety.CanBeAttacked); } //end bounty system return(Notoriety.Innocent); }
public static void EventSink_PlayerDeath(PlayerDeathEventArgs e) { Mobile m = e.Mobile; List <Mobile> killers = new List <Mobile>(); List <Mobile> toGive = new List <Mobile>(); foreach (AggressorInfo ai in m.Aggressors) { if (ai.Attacker.Player && ai.CanReportMurder && !ai.Reported) { //bounty system edit // orig if ( ai.Attacker.Player && ai.CanReportMurder && !ai.Reported ) if (ai.Attacker.Player && ai.CanReportMurder && !ai.Reported && !BountyBoard.Attackable(ai.Attacker, e.Mobile) && !m.IsInEvent) // end bounty system edit { killers.Add(ai.Attacker); ai.Reported = true; ai.CanReportMurder = false; } } if (ai.Attacker.Player && (DateTime.Now - ai.LastCombatTime) < TimeSpan.FromSeconds(30.0) && !toGive.Contains(ai.Attacker)) { toGive.Add(ai.Attacker); } } foreach (AggressorInfo ai in m.Aggressed) { if (ai.Defender.Player && (DateTime.Now - ai.LastCombatTime) < TimeSpan.FromSeconds(30.0) && !toGive.Contains(ai.Defender)) { toGive.Add(ai.Defender); } } foreach (Mobile g in toGive) { /* Taran: Fame and Karma awards already exists in FameKillSystem.cs * int n = Notoriety.Compute( g, m ); * * int theirKarma = m.Karma, ourKarma = g.Karma; * bool innocent = ( n == Notoriety.Innocent ); * bool criminal = ( n == Notoriety.Criminal || n == Notoriety.Murderer ); * * int fameAward = m.Fame / 200; * int karmaAward = 0; * * if ( innocent ) * karmaAward = ( ourKarma > -2500 ? -850 : -110 - (m.Karma / 100) ); * else if ( criminal ) * karmaAward = 50; * * Titles.AwardFame( g, fameAward, false ); * Titles.AwardKarma(g, karmaAward, true) */ // modification to support XmlQuest Killtasks of players Items.XmlQuest.RegisterKill(m, g); } if (m is PlayerMobile && ((PlayerMobile)m).NpcGuild == NpcGuild.ThievesGuild) { return; } if (killers.Count > 0) { new GumpTimer(m, killers).Start(); } }
public static void EventSink_PlayerDeath(PlayerDeathEventArgs e) { Mobile m = e.Mobile; ArrayList killers = new ArrayList(); ArrayList toGive = new ArrayList(); foreach (AggressorInfo ai in m.Aggressors) { //bounty system edit // orig if ( ai.Attacker.Player && ai.CanReportMurder && !ai.Reported ) if (ai.Attacker.Player && ai.CanReportMurder && !ai.Reported && !BountyBoard.Attackable(ai.Attacker, e.Mobile)) // end bounty system edit { killers.Add(ai.Attacker); ai.Reported = true; } if (ai.Attacker.Player && (DateTime.Now - ai.LastCombatTime) < TimeSpan.FromSeconds(30.0) && !toGive.Contains(ai.Attacker)) { toGive.Add(ai.Attacker); } } foreach (AggressorInfo ai in m.Aggressed) { if (ai.Defender.Player && (DateTime.Now - ai.LastCombatTime) < TimeSpan.FromSeconds(30.0) && !toGive.Contains(ai.Defender)) { toGive.Add(ai.Defender); } } foreach (Mobile g in toGive) { int n = Notoriety.Compute(g, m); int theirKarma = m.Karma, ourKarma = g.Karma; bool innocent = (n == Notoriety.Innocent); bool criminal = (n == Notoriety.Criminal || n == Notoriety.Murderer); int fameAward = m.Fame / 200; int karmaAward = 0; if (innocent) { karmaAward = (ourKarma > -2500 ? -850 : -110 - (m.Karma / 100)); } else if (criminal) { karmaAward = 50; } Titles.AwardFame(g, fameAward, false); Titles.AwardKarma(g, karmaAward, true); } if (m is PlayerMobile && ((PlayerMobile)m).NpcGuild == NpcGuild.ThievesGuild) { return; } if (killers.Count > 0) { new GumpTimer(m, killers).Start(); } }
public static int MobileNotoriety(Mobile source, Mobile target) { CustomRegion cR = target.Region as CustomRegion; #region Event Notorieties //Check event prop first for better use of resources if ((source.IsInEvent && !target.IsInEvent) && (cR == null || cR.Controller.HasAttackPenalty)) { return(Notoriety.Invulnerable); } if ((!source.IsInEvent && target.IsInEvent) && (cR == null || cR.Controller.HasAttackPenalty)) { return(Notoriety.Invulnerable); } //Deathmatch if (Custom.PvpToolkit.PvpCore.IsInDeathmatch(source) && Custom.PvpToolkit.PvpCore.IsInDeathmatch(target)) { Custom.PvpToolkit.DMatch.Items.DMStone dm1 = Custom.PvpToolkit.PvpCore.GetPlayerStone(source); Custom.PvpToolkit.DMatch.Items.DMStone dm2 = Custom.PvpToolkit.PvpCore.GetPlayerStone(target); return(dm1 == dm2 ? Notoriety.Enemy : Notoriety.Invulnerable); } //Tournament if (Custom.PvpToolkit.Tournament.TournamentCore.IsInTournament(source) && Custom.PvpToolkit.Tournament.TournamentCore.IsInTournament(target)) { Custom.PvpToolkit.Tournament.TournamentStone stone1 = Custom.PvpToolkit.Tournament.TournamentCore.GetPlayerStone(source); Custom.PvpToolkit.Tournament.TournamentStone stone2 = Custom.PvpToolkit.Tournament.TournamentCore.GetPlayerStone(target); return(stone1 == stone2 ? Notoriety.Enemy : Notoriety.Invulnerable); } //Capture the Flag / Color Wars / Double Dom games if (source is PlayerMobile && target is PlayerMobile) { PlayerMobile src = source as PlayerMobile; PlayerMobile trg = target as PlayerMobile; BaseTeamGame srcevent = src.CurrentEvent as BaseTeamGame; BaseTeamGame trgevent = trg.CurrentEvent as BaseTeamGame; if (srcevent != null && trgevent != null) { BaseGameTeam srcteam = srcevent.GetTeam(source); if (srcteam != null) { BaseGameTeam trgteam = srcevent.GetTeam(target); if (trgteam != null) { return(srcteam == trgteam ? Notoriety.Ally : Notoriety.Enemy); } } } } #endregion if (Core.AOS && (target.Blessed || (target is BaseVendor && ((BaseVendor)target).IsInvulnerable) || target is PlayerVendor || target is TownCrier)) { return(Notoriety.Invulnerable); } if (target is BaseCreature && (((BaseCreature)target).AlwaysMurderer || ((BaseCreature)target).IsAnimatedDead)) { return(Notoriety.Murderer); } if (target is PlayerMobile && (((PlayerMobile)target).AlwaysMurderer)) { return(Notoriety.Murderer); } //All mobiles have same murder rules. if (target.Kills >= KILLS_FOR_MURDER) { return(Notoriety.Murderer); } //Target should be karma red before guild notoriety if (target is PlayerMobile) { if (target.Karma <= PLAYER_KARMA_RED) { return(Notoriety.Murderer); } } 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) || (sourceGuild.Type != GuildType.Regular && sourceGuild.Type == targetGuild.Type)) { return(Notoriety.Ally); } if (sourceGuild.IsEnemy(targetGuild)) { return(Notoriety.Enemy); } } if (cR != null && !cR.Controller.HasAttackPenalty) { return(Notoriety.CanBeAttacked); } if (target.AccessLevel > AccessLevel.Player) { return(Notoriety.CanBeAttacked); } if (target is PlayerMobile) //Player mobile notoriety hierarchy { if (target.Criminal) { return(Notoriety.Criminal); } if (target.Karma <= PLAYER_KARMA_GREY) { return(Notoriety.CanBeAttacked); } } else //Mobile notoriety hierarchy { if (target.Karma <= NPC_KARMA_RED) { return(Notoriety.Murderer); } if (target.Criminal) { return(Notoriety.Criminal); } if (target.Karma <= NPC_KARMA_GREY) { 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.AccessLevel > AccessLevel.Player) { return(Notoriety.CanBeAttacked); } if (!bc.Summoned && !bc.Controlled && ((PlayerMobile)source).EnemyOfOneType == target.GetType()) { return(Notoriety.Enemy); } if (bc.ControlMaster == source) { return(Notoriety.CanBeAttacked); } master = bc.ControlMaster; if (Core.ML && master != null) { if (source == master && CheckAggressor(target.Aggressors, source)) { return(Notoriety.CanBeAttacked); } return(MobileNotoriety(source, master)); } } 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 (Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).PermaFlags.Contains(source)) { return(Notoriety.CanBeAttacked); } if (target is BaseCreature && ((BaseCreature)target).AlwaysAttackable) { return(Notoriety.CanBeAttacked); } if (!IsGuardCandidate(target) && (target is BaseGuard)) { return(Notoriety.Innocent); } //Maka - Repo update, might mess stuff upp //Taran - Yeah it did, I had to uncomment it :P //if (!(target is BaseCreature && ((BaseCreature)target).InitialInnocent)) //{ // if( !target.Body.IsHuman && !target.Body.IsGhost && !IsPet( target as BaseCreature ) && !TransformationSpellHelper.UnderTransformation( target ) && !AnimalForm.UnderTransformation( target ) ) // 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); } } //bounty system if (BountyBoard.Attackable(source, target)) { return(Notoriety.CanBeAttacked); } //end bounty system return(Notoriety.Innocent); }