(I accidentally clicked post before this was finished, oops...)
Hi! I've briefly looked at the code, and can see you really know what you're doing! Although, there are some things you should change. Also, this isn't that in-depth, so some things may be wrong.
Also, ignore any backslashes in this, skUnity automatically formats some things like :\P when it's undesired.
Lines like:
Code:
if {@IncludePingInAlerts} is true:
send "&c&lPython &8» &c%{_player}% &7[Ping: %{_player}'s ping%&7] attempted to %{_cheat}% &7[&c%{_proof}%&7]" to all players where [input has permission "{@AlertsPermission}"] if {_proof} is not "none"
send "&c&lPython &8» &c%{_player}% &7[Ping: %{_player}'s ping%&7] attempted to %{_cheat}%" to all players where [input has permission "{@AlertsPermission}"] if {_proof} is "none"
else:
send "&c&lPython &8» &c%{_player}% &7attempted to %{_cheat}% &7[&c%{_proof}%&7]" to all players where [input has permission "{@AlertsPermission}"] if {_proof} is not "none"
send "&c&lPython &8» &c%{_player}% &7attempted to %{_cheat}%" to all players where [input has permission "{@AlertsPermission}"] if {_proof} is "none"
Unnecessarily do 2 checks, when you could simple use
ternary or even just normal if-else blocks.
This isn't a biggie, but
Code:
loop {ip::%{_ip}%::*}:
add "%loop-value%" parsed as offlineplayer to {_alts::*}
you shouldn't add to a list, it's pretty performance-heavy. Rather,
Code:
add 1 to {_i}
set {_alts::%{_i}%} to loop-value # No need to parse it since you're just using it as a string right after
would be faster. The same goes for when you add
{_u} a few lines before, and for other lines similar to this.
There's also this line:
Code:
set {%player%::ip} to ip of player
Please
do not use a dynamic value as a
root. There's no way to clear that afterwards unless you loop all offline players...
This also goes for everything else,
use your own root list. Something like
{anticheat::, which I see you already use in other pieces of the script, but different for different uses. Stuff like
{anticheat::\persistent for persistent values, etc. This way you can just do delete {anticheat::\persistent::%player%::*} (pseudo-code, don't actually use).
There are a lot of lines like this:
Code:
send "" and "" and "" to {_player}
# ...
send "&8------------------------------", "&cPython Anticheat", "", "&7Developed by &cNolan_UwU" and "&7Python Version: &c1.2" and ""
send "&cFeatures" and "&7Alts, Autoclickers, Sneak, Flight, Speed, Killaura, Multiaura, Reach, Jesus, Nuker, Highjump, NoClip, Clickaura, Scaffold, Chest Steal, Offhand Crash, Anti Knockback, Nofall, Command Spam" and "&8------------------------------"
# ...
send "&8------------------------------" and "&cPython Anticheat" and "&7Help:"
send ""
send "&c/python &cinfo &7Shows info about Aqua Anticheat"
send "&c/python &ckick &7Toggles if the anticheat should kick players."
send "&c/python &ccps <player> &7Shows a player's highest cps."
send "&c/python &calts <player> &7Shows any known alts of a player."
send "&c/python &chelp &7Shows this message."
send "&8------------------------------"
This is good for readability, but there's no need for so many
send lines. That's not the part I'm worried about though, it's the excessive use of
and. Lists are best chained with commas. If you use
and so much, Skript sees each
%objects% and %objects% as a whole new list, hurting the parser and runtime speed as well (not that much for runtime speed, yes that much for the parser).
Use lists like
Code:
send "hi", "how are you", "today" and "sir?"
This goes for other times you excessively use
and too, not just for
send lines.