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"])






