SA-MP Forums Archive
[ATT]: Experienced Scripters [Need My Work Looked At] - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: [ATT]: Experienced Scripters [Need My Work Looked At] (/showthread.php?tid=225106)



[ATT]: Experienced Scripters [Need My Work Looked At] - YungGee - 13.02.2011

I have created(Tried to create) my first simple "Anti-Weapon-Hacks" script just using my knowledge i have so far.

May i ask for some answers on how i can better my code more efficiently while keeping in mind it has not been tested.

Its a simple code im sure works but id like to be shown how to make it "Better" or faster please.

pawn Код:
//Anti-Weapon-Hax Test
#include <a_samp>

#define FILTERSCRIPT

new bool:Banable[MAX_PLAYERS];

forward BanHacker();
forward SearchForWeaponHackers();

public OnFilterScriptInit()
{
    SetTimer("SearchForWeaponHackers",2000,true);
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    Banable[playerid] = false;
    return 1;
}


public SearchForWeaponHackers()
{
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if (GetPlayerWeapon(i) == 9 || GetPlayerWeapon(i) == 16 || GetPlayerWeapon(i) == 18 || GetPlayerWeapon(i) == 35  || GetPlayerWeapon(i) == 36 || GetPlayerWeapon(i) == 37 || GetPlayerWeapon(i) == 38)
        {
            new pName[24];
            new string[128];
            GetPlayerName(i, pName, sizeof(pName));
            format(string, sizeof(string), ">> %s [%d] Has Been Banned From The Server! Reason: Weapon Hacks", pName,i);
            SendClientMessageToAll(0xFF0000AA,string);
            SetTimer("BanWeaponHacker",200,false);
            Banable[i] = true;
        }
        else
        {
            Banable[i] = false;
        }
    }
}

public BanHacker()
{
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if(Banable[i] == true)
        {
            BanEx(i,"Weapon Hacks");
        }
    }
}

Thank you,


Re: [ATT]: Experienced Scripters [Need My Work Looked At] - MMiz - 13.02.2011

I dont think you need to use the public function for "bannable" just the timer each 20 secs or so to check if someone has x type of weapon, also it should be useful for you to makeit so it wont ban admins, depending on which admin system you got too, or created, well, i would delete the public function BanHacker and just do if they got the weapons, they'll get banned.


Re: [ATT]: Experienced Scripters [Need My Work Looked At] - YungGee - 13.02.2011

Please show me in code...I have no idea what your on about...

And yes i didnt think anyone will pick that but yes i will add my levels to BanHacker() to prevent that xD


Re: [ATT]: Experienced Scripters [Need My Work Looked At] - Rocketeer - 13.02.2011

Okay, here is what i am using.

Top of the script.
PHP код:
new anticheattimer
Now let's create a timer to see how often player will use this or that weapon... Btw, it also bans player for using a Jetpack if you need that
Under a public OnGameModeInit().
PHP код:
anticheattimer SetTimer("AntiCheat"10001
Last part.
PHP код:
forward AntiCheat( );
public 
AntiCheat()
{
    for(new 
0MAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
 
                if(
GetPlayerWeapon(i) == 38)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if(
GetPlayerWeapon(i) == 35)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if(
GetPlayerWeapon(i) == 36)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if(
GetPlayerWeapon(i) == 37)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if(
GetPlayerWeapon(i) == 39)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if(
GetPlayerWeapon(i) == 40)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if(
GetPlayerWeapon(i) == 18)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if(
GetPlayerWeapon(i) == 44)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if(
GetPlayerWeapon(i) == 45)
                {
                
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                
PVar[i][pBan] = 1;
                
BanEx(i,"Weapon Cheat.");
                }
                if (
GetPlayerSpecialAction(i) == SPECIAL_ACTION_USEJETPACK)
                {
                    
SendClientMessage(iCOLOR_RED"(Server) Looks like you've used some cheats.");
                    
PVar[i][pBan] = 1;
                    
BanEx(i,"Jetpack Cheat.");
                }
        }
    }
    return 
1;

Thats it, a quality anti-cheat haha jk, i'm a scripter begginer.
Edit, don't forget to kill timer.


Re: [ATT]: Experienced Scripters [Need My Work Looked At] - Unknown123 - 13.02.2011

Quote:
Originally Posted by Rocketeer
Посмотреть сообщение
Okay, here is what i am using.
Edit, don't forget to kill timer.
Killing the timers is like at it have no function anymore...
So when a player get banned by the anti-cheat and the timer gets killed, then the anti-cheat wont work untill you restart your server.
Correct me if im wrong


I would do something like:
pawn Код:
public OnGameModeInit()
{
    SetTimer("SearchForWeaponHackers",2000,true);
    return 1;
}

forward SearchForWeaponHackers();
public SearchForWeaponHackers()
{
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerAdmin(i) && IsPlayerConnected(i)) //"!IsPlayerAdmin" It allows admins to use those Banned weapons
        {
            if (GetPlayerWeapon(i) == 9 || GetPlayerWeapon(i) == 16 || GetPlayerWeapon(i) == 18 || GetPlayerWeapon(i) == 35  || GetPlayerWeapon(i) == 36 || GetPlayerWeapon(i) == 37 || GetPlayerWeapon(i) == 38)
            {
                new pName[24], string[128];
                GetPlayerName(i, pName, sizeof(pName));
                format(string, sizeof(string), ">> %s [%d] Has Been Banned From The Server! Reason: Weapon Hacks", pName,i);
                SendClientMessageToAll(0xFF0000AA,string);
                BanEx(i, "Anti-Cheat: Weapon Hacker");
                return 1;
            }
        }
    }
}



Re: [ATT]: Experienced Scripters [Need My Work Looked At] - Rocketeer - 13.02.2011

PHP код:
public OnGameModeExit()
{
    
KillTimer(anticheattimer);
    return 
1;

Here.