public override bool IsAllowedToAttack(GameLiving attacker, GameLiving defender, bool quiet) { if (!base.IsAllowedToAttack(attacker, defender, quiet)) { return(false); } // if controlled NPC - do checks for owner instead if (attacker is GameNPC npc) { if (npc.Brain is IControlledBrain controlled) { attacker = controlled.GetLivingOwner(); quiet = true; // silence all attacks by controlled npc } } if (defender is GameNPC gameNpc) { if (gameNpc.Brain is IControlledBrain controlled) { defender = controlled.GetLivingOwner(); } } // "You can't attack yourself!" if (attacker == defender) { if (quiet == false) { MessageToLiving(attacker, "You can't attack yourself!"); } return(false); } // Don't allow attacks on same realm members on Normal Servers if (attacker.Realm == defender.Realm && !(attacker is GamePlayer && ((GamePlayer)attacker).DuelTarget == defender)) { // allow confused mobs to attack same realm if (attacker is GameNPC && (attacker as GameNPC).IsConfused) { return(true); } if (attacker.Realm == 0) { return(FactionMgr.CanLivingAttack(attacker, defender)); } if (quiet == false) { MessageToLiving(attacker, "You can't attack a member of your realm!"); } return(false); } return(true); }
public override bool IsAllowedToAttack(GameLiving attacker, GameLiving defender, bool quiet) { if (!base.IsAllowedToAttack(attacker, defender, quiet)) { return(false); } // if controlled NPC - do checks for owner instead if (attacker is GameNPC) { IControlledBrain controlled = ((GameNPC)attacker).Brain as IControlledBrain; if (controlled != null) { attacker = controlled.GetLivingOwner(); quiet = true; // silence all attacks by controlled npc } } if (defender is GameNPC) { IControlledBrain controlled = ((GameNPC)defender).Brain as IControlledBrain; if (controlled != null) { defender = controlled.GetLivingOwner(); } } // can't attack self if (attacker == defender) { if (quiet == false) { MessageToLiving(attacker, "You can't attack yourself!"); } return(false); } //ogre: sometimes other players shouldn't be attackable GamePlayer playerAttacker = attacker as GamePlayer; GamePlayer playerDefender = defender as GamePlayer; if (playerAttacker != null && playerDefender != null) { //check group if (playerAttacker.Group != null && playerAttacker.Group.IsInTheGroup(playerDefender)) { if (!quiet) { MessageToLiving(playerAttacker, "You can't attack your group members."); } return(false); } if (playerAttacker.DuelTarget != defender) { //check guild if (playerAttacker.Guild != null && playerAttacker.Guild == playerDefender.Guild) { if (!quiet) { MessageToLiving(playerAttacker, "You can't attack your guild members."); } return(false); } // Player can't hit other members of the same BattleGroup BattleGroup mybattlegroup = (BattleGroup)playerAttacker.TempProperties.getProperty <object>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup != null && mybattlegroup.IsInTheBattleGroup(playerDefender)) { if (!quiet) { MessageToLiving(playerAttacker, "You can't attack a member of your battlegroup."); } return(false); } // Safe regions if (m_safeRegions != null) { foreach (int reg in m_safeRegions) { if (playerAttacker.CurrentRegionID == reg) { if (quiet == false) { MessageToLiving(playerAttacker, "You're currently in a safe zone, you can't attack other players here."); } return(false); } } } // Players with safety flag can not attack other players if (playerAttacker.Level < m_safetyLevel && playerAttacker.SafetyFlag) { if (quiet == false) { MessageToLiving(attacker, "Your PvP safety flag is ON."); } return(false); } // Players with safety flag can not be attacked in safe regions if (playerDefender.Level < m_safetyLevel && playerDefender.SafetyFlag) { bool unsafeRegion = false; foreach (int regionID in m_unsafeRegions) { if (regionID == playerDefender.CurrentRegionID) { unsafeRegion = true; break; } } if (unsafeRegion == false) { //"PLAYER has his safety flag on and is in a safe area, you can't attack him here." if (quiet == false) { MessageToLiving(attacker, playerDefender.Name + " has " + playerDefender.GetPronoun(1, false) + " safety flag on and is in a safe area, you can't attack " + playerDefender.GetPronoun(2, false) + " here."); } return(false); } } } } if (attacker.Realm == 0 && defender.Realm == 0) { return(FactionMgr.CanLivingAttack(attacker, defender)); } //allow confused mobs to attack same realm if (attacker is GameNPC && (attacker as GameNPC).IsConfused && attacker.Realm == defender.Realm) { return(true); } // "friendly" NPCs can't attack "friendly" players if (defender is GameNPC && defender.Realm != 0 && attacker.Realm != 0 && defender is GameKeepGuard == false && defender is GameFont == false) { if (quiet == false) { MessageToLiving(attacker, "You can't attack a friendly NPC!"); } return(false); } // "friendly" NPCs can't be attacked by "friendly" players if (attacker is GameNPC && attacker.Realm != 0 && defender.Realm != 0 && attacker is GameKeepGuard == false) { return(false); } #region Keep Guards //guard vs guard / npc if (attacker is GameKeepGuard) { if (defender is GameKeepGuard) { return(false); } if (defender is GameNPC && (defender as GameNPC).Brain is IControlledBrain == false) { return(false); } } //player vs guard if (defender is GameKeepGuard && attacker is GamePlayer && GameServer.KeepManager.IsEnemy(defender as GameKeepGuard, attacker as GamePlayer) == false) { if (quiet == false) { MessageToLiving(attacker, "You can't attack a friendly NPC!"); } return(false); } //guard vs player if (attacker is GameKeepGuard && defender is GamePlayer && GameServer.KeepManager.IsEnemy(attacker as GameKeepGuard, defender as GamePlayer) == false) { return(false); } #endregion return(true); }
public override bool IsAllowedToAttack(GameLiving attacker, GameLiving defender, bool quiet) { if (!base.IsAllowedToAttack(attacker, defender, quiet)) { return(false); } // if controlled NPC - do checks for owner instead if (attacker is GameNPC) { IControlledBrain controlled = ((GameNPC)attacker).Brain as IControlledBrain; if (controlled != null) { attacker = controlled.GetPlayerOwner(); quiet = true; // silence all attacks by controlled npc } } if (defender is GameNPC) { IControlledBrain controlled = ((GameNPC)defender).Brain as IControlledBrain; if (controlled != null) { defender = controlled.GetPlayerOwner(); } } //"You can't attack yourself!" if (attacker == defender) { if (quiet == false) { MessageToLiving(attacker, "You can't attack yourself!"); } return(false); } // Pet release might cause one of these to be null if (attacker == null || defender == null) { return(false); } if (attacker.Realm != eRealm.None && defender.Realm != eRealm.None) { if (attacker is GamePlayer && ((GamePlayer)attacker).DuelTarget == defender) { return(true); } if (quiet == false) { MessageToLiving(attacker, "You can not attack other players on this server!"); } return(false); } //allow attacks on same realm only under the following circumstances if (attacker.Realm == defender.Realm) { //allow confused mobs to attack same realm if (attacker is GameNPC && (attacker as GameNPC).IsConfused) { return(true); } // else, don't allow mobs to attack mobs if (attacker.Realm == eRealm.None) { return(FactionMgr.CanLivingAttack(attacker, defender)); } if (quiet == false) { MessageToLiving(attacker, "You can't attack a member of your realm!"); } return(false); } return(true); }