1: Opennos.GameObject.Packet.CommandPacket
Code:
using OpenNos.Core; using OpenNos.Domain; namespace OpenNos.GameObject.CommandPackets { [PacketHeader("$Bot", PassNonParseablePacket = true, Authorities = new AuthorityType[]{ AuthorityType.User })] public class BotPacket : PacketDefinition { [PacketIndex(0)] public short Identificator { get; set; } #region Methods public static string ReturnHelp() { return "$Bot"; } #endregion } }
Code:
public void BotPacket(BotPacket packet) { if (Session.Character.AntiBotIdentificator == -1) { return; } if (packet.Identificator != Session.Character.AntiBotIdentificator && Session.Character.AntiBotCount > 0) { Session.Character.AntiBotCount--; if (Session.Character.AntiBotCount == 0) { LogHelper.Instance.InsertAntiBotLog(Session, false); Session?.Disconnect(); CommunicationServiceClient.Instance.KickSession(Session.Account.AccountId, Session.SessionId); return; } Session.SendPacket(Session.Character.GenerateSay($"Les codes d'identification ne correspondent pas ! {Session.Character.AntiBotCount} essais restants !", 11)); return; } Session.SendPacket($"evnt 3 1 1800 1800"); Session.SendPacket(Session.Character.GenerateSay($"Vous pouvez continuer à jouer normalement", 12)); Session.Character.AntiBotIdentificator = -1; Session.Character.AntiBotCount = ServerManager.Instance.MaxCodeAttempts; Session.Character.AntiBotMessageInterval?.Dispose(); Session.Character.AntiBotObservable?.Dispose(); }
Code:
if (Session.Account.Authority < AuthorityType.Administrator && ServerManager.Instance.Configuration.AntiBotEnabled) { Session.Character.AntiBotCount = ServerManager.Instance.Configuration.MaxCodeAttempts; Observable.Interval(TimeSpan.FromHours(ServerManager.Instance.Configuration.AutoKickInterval)).Subscribe(s => { Session.Character.AntiBotIdentificator = (short)ServerManager.RandomNumber(1000, 10000); Session.SendPacket($"evnt 3 0 {ServerManager.Instance.Configuration.TimeBeforeAutoKick * 600} {ServerManager.Instance.Configuration.TimeBeforeAutoKick * 600}"); Session.SendPacket($"say 1 0 10 Entrez $Bot {Session.Character.AntiBotIdentificator} pour continuer à jouer."); Session.SendPacket($"msg 2 Entrez $Bot {Session.Character.AntiBotIdentificator} pour continuer à jouer."); Session.Character.AntiBotMessageInterval = Observable.Interval(TimeSpan.FromHours(1)).Subscribe(token => { Session.SendPacket($"say 1 0 10 Entrez $Bot pour continuer à jouer."); Session.SendPacket($"msg 2 Entrez $Bot pour continuer à jouer."); }); Session.Character.AntiBotObservable = Observable.Timer(TimeSpan.FromMinutes(ServerManager.Instance.Configuration.TimeBeforeAutoKick)).Subscribe(ValueTuple => { Session.Character.AntiBotMessageInterval?.Dispose(); Session?.Disconnect(); CommunicationServiceClient.Instance.KickSession(Session.Account.AccountId, Session.SessionId); }); }); }
Code:
<!-- maximum de tentative antibot --> <add key="MaxCodeAttempts" value="5" /> <!-- Intervalles d'apparition antibot --> <add key="AutoKickInterval" value="1" /> <!-- Temps avant d'être kick antibot --> <add key="TimeBeforeAutoKick" value="10" /> <!-- activé ou désactivé antibot --> <add key="AntiBotEnabled" value="true" />
Code:
TimeBeforeAutoKick = byte.Parse(ConfigurationManager.AppSettings["TimeBeforeAutoKick"]), AutoKickInterval = byte.Parse(ConfigurationManager.AppSettings["AutoKickInterval"]), MaxCodeAttempts = byte.Parse(ConfigurationManager.AppSettings["MaxCodeAttempts"]), AntiBotEnabled = bool.Parse(ConfigurationManager.AppSettings["AntiBotEnabled"])