[FilterScript] Detectar Car mass spawn!
#1

ATUALIZADO!
Olб pessoal, bom jб existe varios tipos de detectar esse script proibido que permite vocк puxar todos os veiculos de um determinado local para sua posiзгo assim causando lag ao local/servidor, e a alguns casos servidores sendo derrubados.. enfim decidi fazer algo contra, nгo sei se a minha lуgica estб correta provavelmente sim. Foi testado e aprovado! use e abuse do cуdigo -q.

Cуdigo:
PHP код:
public OnPlayerUpdate(playerid) {
    new
        
iVehicle GetPlayerVehicleID(playerid)
    ;
    if(
GetPlayerVehicleSeat(playerid) != 0) {
        if(
GetPVarInt(playerid#lastvehicle) != iVehicle) {
            
SetPVarInt(playerid#lastvehicle, iVehicle);
            
if(GetVehicleModel(iVehicle)) {
                @
ChangeVehicles(playeridPLAYER_STATE_DRIVERiVehicle);
            }
        }
    }
    return 
true;
}
forward @ChangeVehicles(playeridnewstatevehicleid);
public @
ChangeVehicles(playeridnewstatevehicleid) {
    if(
newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER && GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) {
        if((
gettime() - GetPVarInt(playerid#gettick)) < 2) {
            //Reason!
            
Kick(playerid);
         }
         
SetPVarInt(playerid#gettick, gettime());
    
}
    return 
true;

Qualquer bug me contate por MP ou no prуprio topico!

Creditos:
RoacH` - Criador
[FeK]DraKiNs - Algumas lуgicas
SA-MP TEAM - For all
Reply
#2

Muito boa ideia! Vou usar no gamemode que estou desenvolvendo tava precisando, +rep
Reply
#3

Parabens.. utilizarei...

#edit
Jб coloquei em meu RP apenas modifiquei! e como de costume:


PHP код:
            ShowPlayerDialog(playerid,9999,DIALOG_STYLE_MSGBOX,"{FF1493}Creditos do Servidor","{7FFF00}Brasil {FFD700}RPG\n {00BFFF}Criado apartir do 0 por: Gustavo_Guerino!.\n {00BFFF}Sistemas de Seguranзa: RoacH`!.","Sair","Sair"); 
Reply
#4

Bom projeto, mas.

Entro no veнculo 1, em dois segundos saio e entro no veнculo 2 logo ao lado. Pronto, fui banido.

pawn Код:
if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
A sincronia do sa:mp й besta, se um carro estб ao lado do outro, logo que vocк sair do veнculo 1 e ser eficiente dando F e entrando no veiculo dois ambos states serгo PLAYER_STATE_DRIVER, criando efeito pular de um veнculo ao outro.

Outra coisa, caso vocк der PutPlayerInVehicle quando ele jб esta dentro de um veнculo ele farб o efeito pular de um carro ao outro (*pular; entrar*). Isto faz o mesmo efeito do mod, logo poderia falhar nestas ocasiхes. Cuidado ao usar (diminua os segundos tambйm)

EDIT 2:
Observando melhor seu filterscript notei que:

pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_ONFOOT)
    {
        if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
        {
            iCount[playerid] ++;
            SetPVarInt(playerid, "EnterVehicle", gettime());
//  Okay. Jogador saiu do veiculo e foi setado EnterVehicle para 5 segundos
        }
    }
    return true;
}

public OnPlayerUpdate(playerid)
{
// OnPlayerUpdate й chamado de 10 a 100 ms. Isto й. SEMPRE o tempo passado deste que o jogador saiu vai ficar em torno disto. Pela lуgica. Banindo sempre o jogador. rsrsrs
    if((gettime() - GetPVarInt(playerid, "EnterVehicle") < 5 && iCount[playerid] > 0))
    {
        // - Basta editar a seu gosto! lembre-se de reseta a var "iCount" antes de kickar, banir ou algo do genero!
        return iCount[playerid] = 0, BanEx(playerid, "CLEO 4");
    }
    return true;
}

Eu tentaria algo assim.
pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if((newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) && oldstate != PLAYER_STATE_SPECTATING) {
        if((gettime() - GetPVarInt(playerid, "EnterVehicle") < 3) {
            BanEx(playerid, "CLEO 4");
        }
        SetPVarInt(playerid, "EnterVehicle", gettime());
    }
    return true;
}
Mas nгo posso afirmar se funciona pois nгo estudei direito o mod, mas comparando com sua lуgica, deveria funcionar.
Reply
#5

Nгo sendo estraga prazeres.

Conclusгo 1:
Este filterscript vai banir todos jogadores que sairem de um veнculo. QUALQUER Jogador que sai do veнculo, independente de qual veнculo ou se o cara estб usando o cheater ou nгo.

Nгo aconselho usarem isto e acho que o filterscript nгo foi testado nгo. Com todo respeito ..

Conclusгo 2:

Este esboзo que fiz funciona O problema й que nгo й preciso, isto porque nгo usei GetTickCount. O real problema й que se usar GetTickCount o valor de cellmax serб atingido em poucos dias apуs o servidor ter ligado. Bugando o cуdigo apуs uns 25 dias. Logo usei gettime():

pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if((newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) && oldstate != PLAYER_STATE_SPECTATING) {
        if((gettime() - GetPVarInt(playerid, "EnterVehicle")) < 2) {
            // antes de banir. Cheque se nгo usaste PutPlayerInVehicle em seu servidor.
            BanEx(playerid, "CLEO 4");
        }
        SetPVarInt(playerid, "EnterVehicle", gettime());
    }
    return true;
}
Nгo й preciso, mas funciona Podem ser fazer com Timers de 100 em 100 milisegundos.

Achei um script que faz exatamente o mesmo do meu cуdigo:
https://sampforum.blast.hk/showthread.php?tid=303796

Com trechos mais especнficos. Este eu aconselho.
Reply
#6

bela iniciativa gostei
Reply
#7

Testa cheguei a testa.. apenas com script, nгo cheguei a entrar e sair em veiculos.. atualizei o topico e fiz o mais 'preciso' possivel, agora foi testado de diversas maneiras e nгo ocorreu nenhum tipo de bug!
Reply
#8

Quote:
Originally Posted by RoacH`
Посмотреть сообщение
Testa cheguei a testa.. apenas com script, nгo cheguei a entrar e sair em veiculos.. atualizei o topico e fiz o mais 'preciso' possivel, agora foi testado de diversas maneiras e nгo ocorreu nenhum tipo de bug!
Agora sim. Nгo esquece de atualizar o tуpico dizendo que foi atualizado .. Mas seu cуdigo ainda й vulnerбvel a PutPlayerVehicle.


Este й otimizado e eficiente :P
pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if((newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) && oldstate != PLAYER_STATE_SPECTATING) {
        if((gettime() - GetPVarInt(playerid, "EnterVehicle")) < 2) {

            // antes de banir. Cheque se o jogador nгo usou algo com PutPlayerInVehicle em seu servidor (tipo flood de /criarcarros).

            SendClientMessage(playerid, -1, "[Info] Banido por usar spawnerr mass");
            BanEx(playerid, "CLEO 4");
        }
        SetPVarInt(playerid, "registerOnState", 1);
        SetPVarInt(playerid, "EnterVehicle", gettime());
    }
    return true;
}

public OnPlayerUpdate(playerid) {

    static
        varVeh
    ;
    if((varVeh = GetPlayerVehicleID(playerid))) {

        if(varVeh != GetPVarInt(playerid, "prevVeh")) {

            if(!GetPVarInt(playerid, #registerOnState)) {
                OnPlayerStateChange(playerid, PLAYER_STATE_DRIVER, INVALID_PLAYER_ID);
            }

            SetPVarInt(playerid, #registerOnState, 0);
            SetPVarInt(playerid,"prevVeh", varVeh);
        }
    }
    return true;
}
Testei seu cуdigo atualizado, agora realmente funcionou, mas tipo demorou uns 10 segundos para banir. Este meu cуdigo baniu apуs poucos milissegundos.

Eu usei OnPlayerUpdate pois quando o jogador troca de um carro para o outro sem sair, o OnPlayerState nгo serб chamado .. Isto porque nгo haverб mudanзa de estado.

Logo eu fiz o OnPlayerUpdate checar se houve mudanзa de carro e chamar forзar a OnPlayerState ..


Quote:
Originally Posted by dPlaYer_
Посмотреть сообщение
Acho o do gamer-z melhor e concordo com o drakins !
Nice!
Mortos nгo falam (se й que me entende ) brinks
Reply
#9

Atualizado novamente! agora estб bem preciso, player й banido em millesseconds.. atй mais rapido do que o do Drakins -q
Reply
#10

Quote:
Originally Posted by RoacH`
Посмотреть сообщение
Atualizado novamente! agora estб bem preciso, player й banido em millesseconds.. atй mais rapido do que o do Drakins -q
Quero meus crйditos por ter usado minha lуgica de uma chamada adicional em OnState

Ediзгo:
Como vocк nгo usou OnPlayerStateChange isto irб dar errado. Isto й, vai banir todos jogadores que trocarem de carro

Vocк tem que checar se o cara TROCOU DE CARRO e o STATE CHANGE nгo foi chamado (registerOnState). Foi isto que eu fiz.

pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if((newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) && oldstate != PLAYER_STATE_SPECTATING) {
        if((gettime() - GetPVarInt(playerid, "EnterVehicle")) < 2) {

            // antes de banir. Cheque se o jogador nгo usou algo com PutPlayerInVehicle em seu servidor (tipo flood de /criarcarros).

            SendClientMessage(playerid, -1, "[Info] Banido por usar spawnerr mass");
            BanEx(playerid, "CLEO 4");
        }
        SetPVarInt(playerid, "registerOnState", 1);
        SetPVarInt(playerid, "EnterVehicle", gettime());
    }
    return true;
}

public OnPlayerUpdate(playerid) {

    static
        varVeh
    ;
    if((varVeh = GetPlayerVehicleID(playerid))) {

        if(varVeh != GetPVarInt(playerid, "prevVeh")) {

            if(!GetPVarInt(playerid, #registerOnState)) {
                OnPlayerStateChange(playerid, PLAYER_STATE_DRIVER, INVALID_PLAYER_ID);
            }

            SetPVarInt(playerid, #registerOnState, 0);
            SetPVarInt(playerid,"prevVeh", varVeh);
        }
    }
    return true;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)