public static string ForceAttack(Player attacker, bool strongAttackerAlerts = false, Random rand = null) { if (attacker.TimesAttackingThisUpdate >= PvPStatics.MaxAttacksPerUpdate) { return(null); } if (attacker.GameMode != (int)GameModeStatics.GameModes.PvP) { return(null); } rand = rand ?? new Random(); var candidates = JokeShopProcedures.ActivePlayersInJokeShopApartFrom(attacker) .Where(p => p.GameMode == (int)GameModeStatics.GameModes.PvP && JokeShopProcedures.PlayerHasBeenWarned(p)).ToList(); if (candidates == null || candidates.IsEmpty()) { return(null); } var victim = candidates[rand.Next(candidates.Count())]; var spells = SkillProcedures.AvailableSkills(attacker, victim, true); if (spells == null || spells.IsEmpty()) { return(null); } var spellList = spells.ToArray(); var spell = spellList[rand.Next(spellList.Count())]; var message = $"You are compelled to attack {victim.GetFullName()}!"; PlayerLogProcedures.AddPlayerLog(attacker.Id, message, strongAttackerAlerts); PlayerLogProcedures.AddPlayerLog(victim.Id, $"{attacker.GetFullName()} is compelled to attack you!", true); LocationLogProcedures.AddLocationLog(attacker.dbLocationName, $"{attacker.GetFullName()} is compelled to attack {victim.GetFullName()}!"); // Note we do not apply the full gamut of preconditions of a manual attack present in the controller var attack = AttackProcedures.AttackSequence(attacker, victim, spell, false); if (strongAttackerAlerts) { PlayerLogProcedures.AddPlayerLog(attacker.Id, attack, true); } return($"{message}<br />{attack}"); }
public static string Incite(Player player, Random rand = null) { rand = rand ?? new Random(); var candidates = JokeShopProcedures.ActivePlayersInJokeShopApartFrom(player) .Where(p => p.GameMode == (int)GameModeStatics.GameModes.PvP && JokeShopProcedures.PlayerHasBeenWarned(p)).ToList(); if (candidates == null || candidates.IsEmpty()) { return(null); } var attacker = candidates[rand.Next(candidates.Count())]; if (ForceAttack(attacker, true, rand) == null) { return(null); } return($"You incite {attacker.GetFullName()} to attack another player!"); }