[Tutorial] Proibindo Armas
#1

Fala Aew Galera

Vou ensinar aqui pra voces "novatos" como proibir algumas armas que dao vantagem no seu servidor
Bora la

Primeiramente vamos definir Umas Cores que vai servir apenas para usarmos umas menssagens

No topo de seu GameMode


Код:
#define Amarelo          											 0xFFFF00FF
#define Vermelho        										     0xFF0000FF
#define Cinza           											 0x6E7B8BFF
#define Laranja         											 0xFF9900FF
Pronto Cores definidas que usaremos daqui a pouco, agora vamos ao codigo, procure no seu GameMode (CTRL+F)

Код:
public OnPlayerUpdate(playerid)
{
Aqui vamos Colocar o codigo..
Код:
    if(GetPlayerWeapon(playerid) == 35 && !IsPlayerAdmin(playerid)){
    new string [128];
    new nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Bazuca].", nome);
    SendClientMessageToAll(Cinza, string);
    SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
    Kick(playerid);
    }

Explicaзao:


Verificar a arma que o player esta usando
Код:
GetPlayerWeapon(playerid) == 35// Nesse caso й uma bazuca
Verificar o Nome do player
Код:
GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
Mandar Menssagem apenas ao player responsavel pela arma
Код:
SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
Mandar a Menssagem a todos online
Код:
format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Bazuca].", nome);
SendClientMessageToAll(Cinza, string);
Da o kick ao player que usou a arma proibida ou seja a arma id 35 (bazuca)
Код:
Kick(playerid);// Caso queira Banir o player mude Kick Para Ban
Nao kickar administradores com armas proibidas
Код:
!IsPlayerAdmin(playerid))
Aqui eu coloquei pra nao kickar adminsitradores rcon, mais caso voce queira mudar basta colocar o level do admin ali, ficando assim
Код:
(PlayerInfo[playerid][Admin] >= 2)// Usei o exemplo do meu FS admin
Caso queira proibir mais armas siga o memso processo, veja
Код:
    if(GetPlayerWeapon(playerid) == 38 && !IsPlayerAdmin(playerid)){
    new string [128];
    new nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Bazuca].", nome);
    SendClientMessageToAll(Cinza, string);
    SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
    Kick(playerid);
    }
mude apenas o id da arma e o nome da arma na menssagem, no caso eu proibir outra arma (minigun id 3
Siga o mesmo processo a cada vez que for proibir nova arma

Nao ahei bom postar em FS por que poderia banir os jogadores nas arenas!

mais pra nao correr o risco de algum comentar dizendo que era melhor em FS , ta aew tambem
Код:
#include <a_samp>


#define Amarelo          											 0xFFFF00FF
#define Vermelho        										     0xFF0000FF
#define Cinza           											 0x6E7B8BFF
#define Laranja         											 0xFF9900FF

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Sistema De Proibir Armas by [eDl]Andre_Pawno");
	print("--------------------------------------\n");
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

public OnPlayerUpdate(playerid)
{
    if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK && !IsPlayerAdmin(playerid)){
    	new string [128];
   	new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar Jetpack.", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);
	}
    if(GetPlayerWeapon(playerid) == 35 && !IsPlayerAdmin(playerid)){
    	new string [128];
   	new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Bazuca].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);
	}
    else if(GetPlayerWeapon(playerid) == 37 && !IsPlayerAdmin(playerid)){
    	new string [128];
   	new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Flamethrower].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Laranja,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!, da proxima ser banido!");
        Kick(playerid);
    }
    else if(GetPlayerWeapon(playerid) == 38 && !IsPlayerAdmin(playerid)){
        new string [128];
   	new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Minigun].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);

    }
    else if(GetPlayerWeapon(playerid) == 39 && !IsPlayerAdmin(playerid)){
        new string [128];
   	new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Satchel Charge].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);
    }
    else if(GetPlayerWeapon(playerid) == 40 && !IsPlayerAdmin(playerid)){
        new string [128];
   		new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Detonador].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);

    }
    else if(GetPlayerWeapon(playerid) == 16 && !IsPlayerAdmin(playerid)){
        new string [128];
   		new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Granada].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);

    }
    else if(GetPlayerWeapon(playerid) == 17 && !IsPlayerAdmin(playerid)){
        new string [128];
   		new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Tear Gas].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);

    }
    else if(GetPlayerWeapon(playerid) == 18 && !IsPlayerAdmin(playerid)){
        new string [128];
   		new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Molotov Cocktail].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);

    }
    else if(GetPlayerWeapon(playerid) == 44 && !IsPlayerAdmin(playerid)){
        new string [128];
   		new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Night Vis Goggles]", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);

    }
    else if(GetPlayerWeapon(playerid) == 45 && !IsPlayerAdmin(playerid)){
        new string [128];
   		new nome[MAX_PLAYER_NAME];
    	GetPlayerName(playerid, nome, MAX_PLAYER_NAME);
    	format(string, sizeof(string), "[ANTI-CHEAT]: %s foi kickado pelo [EdL]Andre_Pawno por usar arma proibida [Thermal Goggles].", nome);
    	SendClientMessageToAll(Cinza, string);
        SendClientMessage(playerid,Vermelho,"[WARNING]: Voce foi kickado pelo [EdL]Andre_Pawno por usar hack, da proxima sera banido!");
        Kick(playerid);

    }

	return 1;
}
Ajudei? ou nao

Creditos:
[eDl]Andre_Pawno
Reply
#2

Ficaria melhor se tive-se criado uma outra CallBack com um settimer, porque a OnPlayerUpdate й chama no minimo 10 vezes em um segundo.
Reply
#3


Muito Bom.
Se vocк planeja usar OnPlayerUpdate tenta otimizar o cуdigo e que nгo cria lag.
Reply
#4

OnPlayerUpdate. Parei de ler aн.

Existem formas mais otimizadas de detectar weapon hack, sem usar timers.

Uma boa forma й utilizar arrays + OnPlayerGive/TakeDamage.
Reply
#5

Pra mim isso й cуdigo ъtil, melhor fazer desta forma
pawn Код:
forward checkWeapon(playerid);

public OnGameModeInit() {
    SetTimer("checkWeapon", 1000, true);
    return true;
}

public checkWeapon(playerid) {
    new weapon = GetPlayerWeapon(playerid);
    if(weapon == 38) {
        ResetPlayerWeapons(playerid);
        SendClientMessage(playerid, 0xFF0000FF ,"Arma proibida! Resetado automaticamente.");
    }
    return true;
}
Reply
#6

Quote:
Originally Posted by Miqueias Barros
Посмотреть сообщение
Pra mim isso й cуdigo ъtil, melhor fazer desta forma
pawn Код:
forward checkWeapon(playerid);

public OnGameModeInit() {
    SetTimer("checkWeapon", 1000, true);
    return true;
}

public checkWeapon(playerid) {
    new weapon = GetPlayerWeapon(playerid);
    if(weapon == 38) {
        ResetPlayerWeapons(playerid);
        SendClientMessage(playerid, 0xFF0000FF ,"Arma proibida! Resetado automaticamente.");
    }
    return true;
}
Acho que nгo...
Reply
#7

Nem sempre os maiores codes, sгo os melhores...
Reply
#8

Quote:
Originally Posted by DannielCooper
Посмотреть сообщение
Nem sempre os maiores codes, sгo os melhores...
Verdade.

@Topic: OnPlayerUpdate й uma Boa Opзгo sim. Checkagem sem Usar Timers. Possivel Tbm.
Hб Varias CallBacks que Podem ser Utilizadas. Como ja falaram neste topico.

Bom.
Reply
#9

Quote:
Originally Posted by Jason`
Посмотреть сообщение
Acho que nгo...

bigsmoker
Reply
#10

Quote:
Originally Posted by Miqueias Barros
Посмотреть сообщение

bigsmoker
Vocк utilizou SetTimer, sendo que a callback que vocк estб chamando no script contйm um parвmetro (playerid).
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)