[Include] rWeapon: Weapon Hack Protection
#1

rWeapon Hack Protect


Simples Include que irб monitorar as armas de todos os jogadores para saber se possui hack ou nгo, vamos ao que interessa.

Sempre que usada as Funзхes nativas do SA-MP , ex: GivePlayerWeapon, irб registrar a mudanзa no sistema, autorizando o uso.

Funзхes Adicionadas:

rCheckWeapon(playerid);
Checa se a arma atual do jogador estб autorizada pelo sistema.

rCheckWeaponEx(playerid);
Checa se todas as armas do jogador estгo autorizadas pelo sistema.

Callbacks Adicionadas:

public OnPlayerWeaponHack(playerid,weaponid,ammo)
Chamada ao detectar o jogador com arma nгo autorizada(hack).

public OnPlayerGiveWeapon(playerid,weaponid,ammo)
Chamada quando o jogador ganhar uma nova arma pelo servidor.

OBS: Caso Utilize outros scripts (filterscripts), que utilize funзхes nativas do SA-MP como GivePlayerWeapon, utilize este cуdigo na filterscript para funcionar corretamente.
pawn Код:
#define GivePlayerWeapon(%1,%2,%3)\
    CallRemoteFunction("rGivePlayerWeapon","ddd",%1,%2,%3)
#define ResetPlayerWeapons(%1)\
    CallRemoteFunction("rResetPlayerWeapons","d",%1)

Simples Cуdigo para exemplo de uso.
pawn Код:
public OnPlayerSpawn(playerid)
{
    GivePlayerWeapon(playerid,24,999);//entrega uma arma ao jogador e autoriza o uso.
    return true;
}

public OnPlayerUpdate(playerid)
{
    rWeaponCheck(playerid);//checa se a arma atual estб autorizada
    //rWeaponCheckEx(playerid);//checa se todas as armas estгo autorizadas
    return true;
}

public OnPlayerWeaponHack(playerid,weaponid,ammo)
{
    SendClientMessage(playerid,-1,"HACKER DE MERDA!!!");
    //BanEx(playerid,"WeaponHack");
    return true;
}
Vнdeo usando o cуdigo acima:
http://*********/AKrvqM0f_k8

Cуdigo fonte da Include:
pawn Код:
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////                                                                                           /////////////
/////////////                              rWEAPON HACK PROTECT 0.1                      /////////////
/////////////                                                                                           /////////////
/////////////                   Desenvolvido por [iPs]Ivanzicco / [JD]BlackFire          /////////////
/////////////                                                                                           /////////////
/////////////                               http://www.rocksbrasil.com.br                             /////////////
/////////////                             http://www.ips-team.forumeiros.com                      /////////////
/////////////                                                                                           /////////////
/////////////                                                                                           /////////////
/////////////                                                                                           /////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
#define GivePlayerWeapon(%1,%2,%3)\
    rGivePlayerWeapon(%1,%2,%3)
#define ResetPlayerWeapons(%1)\
    rResetPlayerWeapons(%1)
forward OnPlayerGiveWeapon(playerid,weaponid,ammo);
forward OnPlayerWeaponHack(playerid,weaponid,ammo);
new rWeapon[MAX_PLAYERS][13];
new rAmmo[MAX_PLAYERS][13];
stock rGivePlayerWeapon(playerid,weaponid,ammo)
{
    if(rWeapon[playerid][WeaponSlot(weaponid)] == weaponid){
        rAmmo[playerid][WeaponSlot(weaponid)] += ammo;
    }else{
        rWeapon[playerid][WeaponSlot(weaponid)] = weaponid;
        rAmmo[playerid][WeaponSlot(weaponid)] = ammo;
    }

    #undef GivePlayerWeapon
    GivePlayerWeapon(playerid,weaponid,ammo);
    #define GivePlayerWeapon(%1,%2,%3)\
        rGivePlayerWeapon(%1,%2,%3)

    CallLocalFunction("OnPlayerGiveWeapon","ddd",playerid,weaponid,ammo);
    return true;
}
stock rWeaponCheck(playerid)
{
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)){
        new ammo,weaponid = GetPlayerWeapon(playerid);
        GetPlayerWeaponData(playerid,WeaponSlot(weaponid),weaponid,ammo);
        if((weaponid != 0) && ammo > rAmmo[playerid][WeaponSlot(weaponid)] || weaponid != rWeapon[playerid][WeaponSlot(weaponid)]){
            CallLocalFunction("OnPlayerWeaponHack","ddd",playerid,weaponid,ammo);
            new string[100];
            format(string,100,"--WeaponHack: '%s', Arma:%d , Muniзгo:%d",rPlayerName(playerid),weaponid,ammo);
            print(string);
            rLOG(string);
        }
        rWeapon[playerid][WeaponSlot(weaponid)] = weaponid;
        rAmmo[playerid][WeaponSlot(weaponid)] = ammo;
    }
    return true;
}
stock rWeaponCheckEx(playerid)
{
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)){
        for(new i;i<=12;i++){
            new ammo,weaponid;
            GetPlayerWeaponData(playerid,i,weaponid,ammo);
            if((weaponid != 0) && ammo > rAmmo[playerid][WeaponSlot(weaponid)] || weaponid != rWeapon[playerid][WeaponSlot(weaponid)]){
                CallLocalFunction("OnPlayerWeaponHack","ddd",playerid,weaponid,ammo);
                new string[100];
                format(string,100,"--WeaponHack: '%s', Arma:%d , Muniзгo:%d",rPlayerName(playerid),weaponid,ammo);
                print(string);
                rLOG(string);
            }
            rWeapon[playerid][WeaponSlot(weaponid)] = weaponid;
            rAmmo[playerid][WeaponSlot(weaponid)] = ammo;
        }
    }
}
stock rResetPlayerWeapons(playerid)
{
    for(new i; i<=12; i++)
    {
        rWeapon[playerid][i] = 0;
        rAmmo[playerid][i] = 0;
    }
    #undef ResetPlayerWeapons
    ResetPlayerWeapons(playerid);
    #define ResetPlayerWeapons(%1)\
        rResetPlayerWeapons(%1)
}
stock WeaponSlot(weaponid)
{
    if(weaponid == 0){return 0;}
    else if(weaponid == 1){return 0;}
    else if(weaponid == 2){return 1;}
    else if(weaponid == 3){return 1;}
    else if(weaponid == 4){return 1;}
    else if(weaponid == 5){return 1;}
    else if(weaponid == 6){return 1;}
    else if(weaponid == 7){return 1;}
    else if(weaponid == 8){return 1;}
    else if(weaponid == 9){return 1;}
    else if(weaponid == 10){return 10;}
    else if(weaponid == 11){return 10;}
    else if(weaponid == 12){return 10;}
    else if(weaponid == 13){return 10;}
    else if(weaponid == 14){return 10;}
    else if(weaponid == 15){return 10;}
    else if(weaponid == 16){return 8;}
    else if(weaponid == 17){return 8;}
    else if(weaponid == 18){return 8;}
    else if(weaponid == 22){return 2;}
    else if(weaponid == 23){return 2;}
    else if(weaponid == 24){return 2;}
    else if(weaponid == 25){return 3;}
    else if(weaponid == 26){return 3;}
    else if(weaponid == 27){return 3;}
    else if(weaponid == 28){return 4;}
    else if(weaponid == 29){return 4;}
    else if(weaponid == 30){return 5;}
    else if(weaponid == 31){return 5;}
    else if(weaponid == 32){return 4;}
    else if(weaponid == 33){return 6;}
    else if(weaponid == 34){return 6;}
    else if(weaponid == 35){return 7;}
    else if(weaponid == 36){return 7;}
    else if(weaponid == 37){return 7;}
    else if(weaponid == 38){return 7;}
    else if(weaponid == 39){return 8;}
    else if(weaponid == 40){return 12;}
    else if(weaponid == 41){return 9;}
    else if(weaponid == 42){return 9;}
    else if(weaponid == 43){return 9;}
    else if(weaponid == 44){return 11;}
    else if(weaponid == 45){return 11;}
    else if(weaponid == 46){return 11;}
    else {return false;}
}
stock rLOG(log[])
{
    new File:file=fopen("rWeapon.log", io_append);
    if(file && strlen(log) > 1)
    {
        new dia,mes,ano,hora,minuto,segundo;
        getdate(ano,mes,dia);
        gettime(hora,minuto,segundo);
        format(log,1000,"[%02d/%02d/%04d - %02d:%02d:%02d] %s\r\n",dia,mes,ano,hora,minuto,segundo,log);
        fwrite(file,log);
    }
    fclose(file);
}
stock rPlayerName(playerid)
{
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    return name;
}
Crйditos:
Grupo RocksBrasil e iPs Team
[iPs]Ivanzicco / [JD]BlackCoder
Reply
#2

Esse WeaponSlot poderia ser feito com um switch nгo? ..

Bom.
Reply
#3

Nгo testado, mais parece funcional..

vou testaar

@first

@edit

segundo ¬¬'
Reply
#4

Legal. Parabйns.
Reply
#5

Isso vai dar erros:

pawn Код:
#undef ResetPlayerWeapons
ResetPlayerWeapons(playerid);
#define ResetPlayerWeapons(%1)\
rResetPlayerWeapons(%1)
Bem legal sua logica, Parece bem funcional, REP += 5.
Reply
#6

Quote:
Originally Posted by paulor
Посмотреть сообщение
Isso vai dar erros:

pawn Код:
#undef ResetPlayerWeapons
ResetPlayerWeapons(playerid);
#define ResetPlayerWeapons(%1)\
rResetPlayerWeapons(%1)
Bem legal sua logica, Parece bem funcional, REP += 5.
funciona, apenas ficou se a cor azul no fуrum.
Reply
#7

Quote:
Originally Posted by [JD]BlackFire
Посмотреть сообщение
funciona, apenas ficou se a cor azul no fуrum.
A sim, nгo vi a parte superior da include:

pawn Код:
#define ResetPlayerWeapons(%1)\
    rResetPlayerWeapons(%1)
Reply
#8

Jб vi lуgicas anteriores jб lanзadas. Mais o seu pareзe estar sem nenhum bug.
Reply
#9

sim, o principal objetivo era nгo precisar fazer grandes modificaзхes no GameMode.
Reply
#10

Parece ser bem funcional irei testar =)
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)