Cуdigos Ъteis #1

ґ Anti-Spam "Simples", code ъteis..

Code:
public OnPlayerText(playerid, text[])
{
     if(SPAM_PLAYERID(text))
     {
          printf("DEBUG: SPAM_PLAYERID(const VOLUE[]) chamada com sucesso!"); /* O debug mostrar se a Callback estб funcionando corretamente, e verifica se foi chamada na hora da divulgaзгo */
	  /* Aqui vocк pode acrescentar mensagem do tipo global, ou nгo global. Caso nгo queira por nenhuma mensagem, apenas ignore */
	  Kick(playerid); /* Funзгo que leva o player ser kikado do servidor, caso queira efetuar o banimento, utilize a callback do seu sistema, ou efetueo banimento por client-server "Ban(playerid); " */
	  return false; /* A funзгo Anti-SPAM retornara sempre falsa, e tambйm irб verificar a Callback SPAM_PLAYERID(const VOLUE[]) se foi chamada dentro dos params, mantenham o retorno sempre falso nesta opзгo */
     }
     retun false; /* Retorno falso para a Callback OnPlayerText e outros script, nгo й necessбrio alterar o mesmo */
}
Code:
SPAM_PLAYERID(const VOLUE[])
{
     new 
	SPAM_DIGITS, 
	VOLUE_DIGITS
     ;

     for(new PARAMS_DIGIT, PARAMS_DIGITS, PLAYERIP[16], LEN = strlen(VOLUE); PARAMS_DIGIT < LEN; PARAMS_DIGIT ++)
     {
          if('0' <= VOLUE[PARAMS_DIGIT] <= '9')
          {
               PARAMS_DIGITS = PARAMS_DIGIT + 1;
	       while('0' <= VOLUE[PARAMS_DIGITS] <= '9') PARAMS_DIGITS ++;
	       strmid(PLAYERIP, VOLUE, PARAMS_DIGIT, PARAMS_DIGITS);
	       if(0 <= strval(PLAYERIP) <= 255) SPAM_DIGITS ++; PARAMS_DIGIT = PARAMS_DIGITS - 1;
	       else if(SPAM_DIGITS >= 1) VOLUE_DIGITS ++; SPAM_DIGITS = 0;
          }
     }

     if(SPAM_DIGITS >= 1) VOLUE_DIGITS ++;
     if(VOLUE_DIGITS >= 4) return true;
     return false;
}
Script-Download: https://ghostbin.com/paste/oax3r
Reply

Bom, eu estava precisando um sistema de chaves, nem que for ''pelomenos'' para os veнculos de profissхes, que sгo os mais importantes.

Pessoal, use o comando: /comandos para vocкs verem os comandos que fiz para teste.

PHP Code:
/* Chaves Veнculos */

#include <a_samp>
#include <ZCMD>
#include <sscanf2>

enum pInfo
{
    
KeyProfissao,
}
new 
PlayerData[MAX_PLAYERS][pInfo];

CMD:pegarchaves(playeridparams[])
{
    if(
IsPlayerInRangeOfPoint(playerid3.00.00.00.0)) return 1// Estб no lugar de pegar as chaves
    
    
new vehicleid;
    
    if(
sscanf(params"d"vehicleid))
        return 
SendClientMessage(playerid, -1"Uso: /pegarchaves [vehicleid] - veja o id do veiculo no /dl");

    if(
vehicleid || vehicleid MAX_VEHICLES)
        return 
SendClientMessage(playerid, -1"Valor de Chave invбlido.");
    
    if(
ChaveEmUso(vehicleid))
        return 
SendClientMessage(playerid, -1"Essa chave jб estб sendo usado por outra pessoa.");
    
    new 
Float:cPos[3];
    
    
GetVehiclePos(vehicleidcPos[0], cPos[1], cPos[2]);
    
    if(
cPos[0] == 0.000)
        return 
SendClientMessage(playerid, -1"Esse veнculo nгo existe.");

    
PlayerData[playerid][KeyProfissao] = vehicleid;
    
SendClientMessage(playerid, -1"Vocк pegou a chave desse carro/caminhгo.");
    return 
1;
}

CMD:deixarchave(playerid)
{
    if(
PlayerData[playerid][KeyProfissao] == 0)
        return 
SendClientMessage(playerid, -1"Vocк nгo tem nenhuma chave nas mгos!");
        
    
PlayerData[playerid][KeyProfissao] = 0;
    
SendClientMessage(playerid, -1"Vocк deixou as chaves do veнculo aqui.");
    return 
1;
}

CMD:motor(playerid)
{
    if(!
IsPlayerInAnyVehicle(playerid))
        return  
SendClientMessage(playerid, -1"Vocк nгo estб em um veнculo para ligar o motor.");
    
    new 
vehicleid GetPlayerVehicleID(playerid);
    
    if(
PlayerData[playerid][KeyProfissao] == vehicleid)
    {
        
// Liberado para digirir.");
    
}
    else 
SendClientMessage(playerid, -1"Vocк nгo tem as chaves desse veнculo.");
    return 
1;
}

CMD:darchave(playeridparams[])
{
    new
        
idchave;
    
    if(
sscanf(params"ud"idchave))
        return 
SendClientMessage(playerid, -1"Digite: /darchave [id player] [chave id]");
        
    if(
PlayerData[playerid][KeyProfissao] == 0)
        return 
SendClientMessage(playerid, -1"Vocк nгo tem uma chave para dar para esse jogador.");
        
    if(
PlayerData[id][KeyProfissao] > 0)
        return  
SendClientMessage(playerid, -1"Esse jogador jб tem uma chave.");
        
    
SendClientMessage(playerid, -1"Vocк deu a sua chave para esse jogador.");
    
SendClientMessage(id, -1"Um jogador te deu uma chave de um carro.");
    
    
PlayerData[id][KeyProfissao] = PlayerData[playerid][KeyProfissao];
    
PlayerData[playerid][KeyProfissao] = 0;
    return 
1;
}

CMD:abrircarro(playerid// Comando para abrir o carro, para abrir as portas, й claro.
{
    if(
PlayerData[playerid][KeyProfissao] == 0)
        return 
SendClientMessage(playerid, -1"Vocк nгo tem a chave de um carro para abrir o mesmo.");

    if(
IsPlayerNearTheVehicle(playeridPlayerData[playerid][KeyProfissao]))
    {
        
SendClientMessage(playerid, -1"Seu carro foi aberto.");
        
//Cуdigo abaixo
    
}
    else 
SendClientMessage(playerid, -1"Vocк nгo estб perto do seu carro.");
    return 
1;
}

CMD:comandos(playerid)
{
    
SendClientMessage(playerid, -1"/pegarchaves [veiculoid] • /deixarchave • /motor • /darchave [playerid] [chaveid]");
    return 
1;
}

stock IsPlayerNearTheVehicle(playeridvehicleidFloatRadius 3.0)
{
    new 
Float:vPos[3];
    
    
GetVehiclePos(vehicleidvPos[0], vPos[1], vPos[2]);

    if(
IsPlayerInRangeOfPoint(playeridRadiusvPos[0], vPos[1], vPos[2])) return true;
    else return 
false;
}
stock ChaveEmUso(chaveid)
{
    for(new 
iMAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
            if(
PlayerData[i][KeyProfissao] == chaveid) return true;
            else return 
false;
        }
    }
    return -
1;
}

public 
OnPlayerDisconnect(playeridreason)
{
    
PlayerData[playerid][KeyProfissao] = 0;
    return 
1;

Alguma coisa errada, me corrigem.
Reply

PHP Code:
// Em seu sistema de salvamento, adcione: pVida, pColete
// Em OnPlayerSpawn ou no seu sistema de carregamento de dados adcione:
SetPlayerHealth(playeridPlayerDados[playerid][pVida]);
SetPlayerArmour(playeridPlayerDados[playerid][pColete]);
// E vamos ao cуdigo!
CMD:setarvida(playeridparams[]) {
    new 
String[128], IdPlayerVida;
    if(!
IsPlayerAdmin(playerid)) return 0;
    if(
sscanf(params"ud"IdPlayerVida)) return SendClientMessage(playerid0x00FFFFAA"[Comando]{CFCFCF} Use: /SetarVida [IdPlayer][Vida]");
    if(!
IsPlayerConected(IdPlayer)) {
    
SetPlayerHealth(IdPlayerVida);
    
format(Stringsizeof(String), "O(a) staff:{FF0000} %s{CFCFCF} setou sua vida!", -VARIAVEL DE PEGAR NOME-);
    
SendClientMessage(IdPlayer0xCFCFCFAAString);
    }
    return 
1;
}
CMD:setarcolete(playeridparams[]) {
    new 
String2[128], IdPlayer2Colete;
    if(!
IsPlayerAdmin(playerid)) return 0;
    if(
sscanf(params"ud"IdPlayer2Colete)) return SendClientMessage(playerid0x00FFFFAA"[Comando]{CFCFCF} Use: /SetarColete [IdPlayer][Colete]");
    if(!
IsPlayerConected(IdPlayer2)) {
    
SetPlayerArmour(IdPlayer2Colete);
    
format(String2sizeof(String2), "O(a) staff:{FF0000} %s{CFCFCF} setou seu colete!", -VARIAVEL DE PEGAR NOME-);
    
SendClientMessage(IdPlayer20xCFCFCFAAString);
    }
    return 
1;

Reply

Quote:
Originally Posted by Kuatro
View Post
PHP Code:
// Em seu sistema de salvamento, adcione: pVida, pColete
// Em OnPlayerSpawn ou no seu sistema de carregamento de dados adcione:
SetPlayerHealth(playeridPlayerDados[playerid][pVida]);
SetPlayerArmour(playeridPlayerDados[playerid][pColete]);
// E vamos ao cуdigo!
CMD:setarvida(playeridparams[]) {
    new 
String[128], IdPlayerVida;
    if(!
IsPlayerAdmin(playerid)) return 0;
    if(
sscanf(params"ud"IdPlayerVida)) return SendClientMessage(playerid0x00FFFFAA"[Comando]{CFCFCF} Use: /SetarVida [IdPlayer][Vida]");
    if(!
IsPlayerConected(IdPlayer)) {
    
SetPlayerHealth(IdPlayerVida);
    
format(Stringsizeof(String), "O(a) staff:{FF0000} %s{CFCFCF} setou sua vida!", -VARIAVEL DE PEGAR NOME-);
    
SendClientMessage(IdPlayer0xCFCFCFAAString);
    }
    return 
1;
}
CMD:setarcolete(playeridparams[]) {
    new 
String2[128], IdPlayer2Colete;
    if(!
IsPlayerAdmin(playerid)) return 0;
    if(
sscanf(params"ud"IdPlayer2Colete)) return SendClientMessage(playerid0x00FFFFAA"[Comando]{CFCFCF} Use: /SetarColete [IdPlayer][Colete]");
    if(!
IsPlayerConected(IdPlayer2)) {
    
SetPlayerArmour(IdPlayer2Colete);
    
format(String2sizeof(String2), "O(a) staff:{FF0000} %s{CFCFCF} setou seu colete!", -VARIAVEL DE PEGAR NOME-);
    
SendClientMessage(IdPlayer20xCFCFCFAAString);
    }
    return 
1;

Nao poste parte de gms aquн isso nao vai funcionar
Reply

Quote:
Originally Posted by PT
View Post
Nao poste parte de gms aquн isso nao vai funcionar
Nгo й parte de GM! Eu que criei na hora '-'!
Olha direito o cуdigo fih!
Reply

PHP Code:
// topo gm
new SoundTimer[MAX_PLAYERS];
CMD:teste(playerid){
    
/*
        playerid,
        1165: soundid,
        1166: soundstop,
        15: quantidade de vezes que serб repitido o som,
        3: tempo que o som serб chamado novamente, vocк capta isso ouvindo e ve quanto tempo demora pra acabar.
    */ 
    
PlaySoundLoop(playerid11651166153);
    return 
1;
}
/*
    tempo = 1: padrгo pra sempre 1s
    loop = 1: padrгo para loop ficar rodando para sempre.
*/
PlaySoundLoop(playeridsoundidsoundidstopquantidadetempo 1loop 1){
    
SoundTimer[playerid] = SetTimerEx("PlaySoundPlayer"1000*tempoloop"dddd"playeridsoundidsoundidstopquantidade);
    return 
1;
}
forward PlaySoundPlayer(playeridsoundidsoundidstopquantidadeparar);
public 
PlaySoundPlayer(playeridsoundidsoundidstopquantidadeparar){
    
PlayerPlaySound(playeridsoundid0.00.00.0);
    if(++
parar quantidade){ 
        
parar 0;
        
// debugs
        
printf("%d - %d - %d - %d - %d"playeridsoundidsoundidstopquantidadeparar);
        
PlayerPlaySound(playeridsoundidstop0.00.00.0);
        
KillTimer(SoundTimer[playerid]);
    }
    
// debugs
    
printf("%d/%d"pararquantidade);
    return 
1;

Sу testei em sons que possui um start e um stop definidos.
> https://sampwiki.blast.hk/wiki/SoundID
Reply

Para o pessoal que quer manipular variбveis strings com strcmp.

PHP Code:
function CriarChaves(casaid)
{
    
/*
        This function will create the house key.
        
        Paramters:
        casaid - From Iterator:House
    */
    
new FileChaves[50];
    
    
format(FileChavessizeof(FileChaves), PASTA_CHAVESCASASInfoCasa[casaid][ID]);
    
dini_Create(FileChaves);
    
    
// ------------------------------------------------------------------------------- //
    
new aString[MAX_NAME_PLAYER];
    for(new 
0MAX_CHAVES_POR_CASA; ++ i)
    {
        
format(ChavesCasas[casaid][i], MAX_NAME_PLAYER"Ninguem");
    
        
format(aStringsizeof(aString), "Chave%d"i);
        
dini_Set(FileChavesaString"Ninguem");
    }
}
// ----------------------------------------------------------------------------------------------------------------------------------- //
function InserirChaveCasa(playeridcasaid)
{
    
/*
        This function will enter a home key for a player.
        
        Paramters:
        playerid - The player
        casaid - From Iterator:House
    */
    
new FileChaves[50];
    
format(FileChavessizeof(FileChaves), PASTA_CHAVESCASASInfoCasa[casaid][ID]);
    
    
// ------------------------------------------------------------------------------- //
    
new aString[MAX_NAME_PLAYER];
    for(new 
0MAX_CHAVES_POR_CASA; ++ i)
    {
        if(!
strcmp(ChavesCasas[casaid][i], "Ninguem"false))
        {
            
format(aStringsizeof(aString), "Chave%d"i);
            
dini_Set(FileChavesaStringpNome(playerid));
            return 
i;
        }
    }
    return -
1;
}
// ----------------------------------------------------------------------------------------------------------------------------------- //
function ContarChavesPlayer(playeridcasaid)
{
    
/*
        This function will return how many keys a player has
        from a certain house.
        
        Paramters:
        playerid - The Player
        casaid - The house ID
    */
    
    
new Contar;
    for(new 
0MAX_CHAVES_POR_CASA; ++ i)
    {
        if(!
strcmp(ChavesCasas[casaid][i], pNome(playerid), false))
        {
            
Contar ++;
        }
    }
    return 
Contar;
}
// ----------------------------------------------------------------------------------------------------------------------------------- //
function CarregarChavesCasas()
{
    
/*
        This function will load all keys of a given house.
        
        Paramters:
        no Paramters
    */
    
new FileChaves[50], aString[50];
    foreach(new 
House)
    {
        
format(FileChavessizeof(FileChaves), PASTA_CHAVESCASASInfoCasa[c][ID]);
        for(new 
0MAX_CHAVES_POR_CASA; ++ i)
        {
            
format(ChavesCasas[c][i], MAX_NAME_PLAYER"Ninguem");
        
            
// ------------------------------------------------------------ //
            
            
format(aStringsizeof(aString), "Chave%d"i);
        
            if(
strcmp(dini_Get(FileChavesaString), "Ninguem"false))
            {
                
format(ChavesCasas[c][i], MAX_NAME_PLAYERdini_Get(FileChavesaString));
            }
        }
    }
}
// ----------------------------------------------------------------------------------------------------------------------------------- //
function SalvarCasasChaves(casaid)
{
    
/*
        This function will save all keys of a particular house.
        Paramters:
        casaid - The House ID
    */
    
    
new FileChaves[50], aString[15];
    
format(FileChavessizeof(FileChaves), PASTA_CHAVESCASASInfoCasa[casaid][ID]);
    for(new 
0MAX_CHAVES_POR_CASA; ++ i)
    {
        if(
strcmp(ChavesCasas[casaid][i], "Ninguem"false))
        {
            
format(aStringsizeof(aString), "Chave%d"i);
            
dini_Set(FileChavesaStringChavesCasas[casaid][i]);
        }
    }
}
// ----------------------------------------------------------------------------------------------------------------------------------- //
function DarChaves(playerididcasaid)
{
    
/*
        This function will hand one of your keys to a
        house to another player.
        Paramters:
        playerid - The Player ID
        id - The player receiving the key
        casaid - The Casa ID
    */
    
for(new 0MAX_CHAVES_POR_CASA; ++ i)
    {
         if(!
strcmp(ChavesCasas[casaid][i], pNome(playerid), false))
         {
            
format(ChavesCasas[casaid][i], pNome(id));
            return 
i;
         }
    }
    
    
// ------------------------------------------------------------------------------- //
    
    
SCMEx(playerid0xFF8D1CFF"[ Chaves ]: Vocк deu uma chave da Casa ID: %d para o(a) jogador(a) %s."casaidpNome(id));
    
SCMEx(id0xFF8D1CFF"[ Chaves ]: Vocк recebeu uma chave da Casa ID: %d do(a) jogador(a) %s."casaidpNome(playerid));
    
    
SalvarCasasChaves(casaid);

Reply

Par ou нmpar?

PHP Code:
//Par ou нmpar?
#include a_samp
main () {}
new 
numberChosen 120;
stock evenOrOdd(number) {
    
number number 2;
    if(
number == 0)
        print(
"Par");
    else
        print(
"Нmpar");
    return 
1;
}
public 
OnGameModeInit() {
    
evenOrOdd(numberChosen);
    return 
1;

Listando todos os nъmeros pares e нmpares de uma quantidade escolhida
PHP Code:
//Listando nъmeros pares e нmpares atй uma quantidade.
#include a_samp
main () {}
new 
numberChosen 10;
public 
OnGameModeInit() {
    new 
contNumber 0number;
    while(
contNumber numberChosen) {
        
contNumber++;
        
number contNumber 2;
        if(
number == 0printf("%d й par."contNumber);
        else 
printf("%d й нmpar."contNumber);
    }
    return 
1;

Listando apenas nъmeros pares
PHP Code:
//Listando nъmeros pares
#include a_samp
main () {}
new 
numberChosen 10;
public 
OnGameModeInit() {
    new 
contNumber 0number;
    while(
contNumber numberChosen) {
        
contNumber++;
        
number contNumber 2;
        if(
number == 0printf("%d й par."contNumber);
    }
    return 
1;

Listando apenas nъmeros нmpares
PHP Code:
//Listando nъmeros нmpares
#include a_samp
main () {}
new 
numberChosen 10;
public 
OnGameModeInit() {
    new 
contNumber 0number;
    while(
contNumber numberChosen) {
        
contNumber++;
        
number contNumber 2;
        if(
number != 0printf("%d й нmpar."contNumber);
    }
    return 
1;

Reply

Anti Team Tire Popping

Este cуdigo, usando Pawn.Raknet, impede motoristas de receberem tiros de aliados (SetPlayerTeam), evitando que os pneus do veнculo sejam perfurados.

Por que nгo apenas retornar 0 na OnPlayerWeaponShot? Porque, se houver um jogador de outra equipe no banco do passageiro, este tambйm nгo receberб os tiros e nгo poderб ser morto. Claro, vocк poderia impedir jogadores de equipes diferentes estarem no mesmo veнculo, mas hб casos em que isso nгo й viбvel.

PHP Code:
const BULLET_SYNC 206;
OPacket:BULLET_SYNC(playeridBitStream:bs)
{
    if(
GetPlayerTeam(playerid) != NO_TEAM && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
         static 
fromhittypehitid;
        
BS_IgnoreBits(bs8);
        
BS_ReadValue(
            
bs,
             
PR_UINT16from,
            
PR_UINT8hittype,
            
PR_UINT16hitid
        
);
        
        
//BS_SetReadOffset(bs, 0); //se houver outra filtragem do mesmo pacote
        
if(hittype == BULLET_HIT_TYPE_VEHICLE && hitid == GetPlayerVehicleID(playerid))
        {
            if(
GetPlayerTeam(playerid) == GetPlayerTeam(from))
            {
                return 
0;
            }
        }
    }
    return 
1;

Reply

ґ LOG DE DADOS

Estou disponibilizando este Cуdigo Ъtil para aqueles que desejam monitorar Commands/Systems. Porйm o intuito deste cуdigo, й ajuda a identificar falhas em sistemas e problemas operacionais.. Tanto quanto pode salvar informaзхes geradas por usuбrios do seu servidor!

ґ Utilizando da seguinte forma como exemplo:

Code:
p_Log("Open Server", "O servidor foi iniciado!");

new v_Player[4] = "N/A";
p_Log("Open Server", v_Player);

public OnGameModeInit()
{
      p_Log("Open Server", "O servidor foi iniciado!");
      return true;
}
ґ Que irб Gerar o caractere 'O servidor foi iniciado!' e em seguida salva-los automaticamente na pasta 'logs_server'.

ґ Resultados:




ґ Caso use o Cуdigo Ъtil LEMBRE-SE de criar a seguinte pasta logs_server em scriptfiles localizado em seu gamemode..

Code:
enum DATA_TIMER
{
      t_Day,
      t_Year,
      t_Month,
      t_Second,
      t_Minute,
      t_Hour,
}
new s_Timer[DATA_TIMER];
Code:
stock p_Log(f_Log[], const catch[])
{
      new
            File: p_File, p_Path[256]
      ;
	
      getdate(s_Timer[t_Year], s_Timer[t_Month], s_Timer[t_Day]);
      gettime(s_Timer[t_Hour], s_Timer[t_Minute], s_Timer[t_Second]);
	
      format(p_Path, 256, "logs_server/%s.sys", f_Log);
      p_File = fopen(p_Path, io_append);
	
      format(String, 256, "< %02d/%02d/%d | %02d:%02d:%02d > %s\r\n", s_Timer[t_Day], s_Timer[t_Month], s_Timer[t_Year], s_Timer[t_Hour], s_Timer[t_Minute], s_Timer[t_Second], catch);
      fwrite(p_File, String), fclose(p_File);
	
      return true;
}
ґ Obs. Estou postando este CУDIGO ЪTIL aqui pelo seguinte fator: (Nгo consegui achar um que fosse adequado e organizado para meu Projeto atual). E com este, estб sendo minha grande precisгo e atй agora! Nгo apresentou nenhum problema.. Atualmente estб Gerando os Seguintes 'Log':

- Invasгo de Bases,
- Raio de proximidade,
- Spawn e Setagens.
Reply

Quote:
Originally Posted by Unsettled
View Post
ґ LOG DE DADOS

Estou disponibilizando este Cуdigo Ъtil para aqueles que desejam monitorar Commands/Systems. Porйm o intuito deste cуdigo, й ajuda a identificar falhas em sistemas e problemas operacionais.. Tanto quanto pode salvar informaзхes geradas por usuбrios do seu servidor!

ґ Utilizando da seguinte forma como exemplo:

Code:
p_Log("Open Server", "O servidor foi iniciado!");

new v_Player[4] = "N/A";
p_Log("Open Server", v_Player);

public OnGameModeInit()
{
      p_Log("Open Server", "O servidor foi iniciado!");
      return true;
}
ґ Que irб Gerar o caractere 'O servidor foi iniciado!' e em seguida salva-los automaticamente na pasta 'logs_server'.

ґ Resultados:




ґ Caso use o Cуdigo Ъtil LEMBRE-SE de criar a seguinte pasta logs_server em scriptfiles localizado em seu gamemode..

Code:
enum DATA_TIMER
{
      t_Day,
      t_Year,
      t_Month,
      t_Second,
      t_Minute,
      t_Hour,
}
new s_Timer[DATA_TIMER];
Code:
stock p_Log(f_Log[], const catch[])
{
      new
            File: p_File, p_Path[256]
      ;
	
      getdate(s_Timer[t_Year], s_Timer[t_Month], s_Timer[t_Day]);
      gettime(s_Timer[t_Hour], s_Timer[t_Minute], s_Timer[t_Second]);
	
      format(p_Path, 256, "logs_server/%s.sys", f_Log);
      p_File = fopen(p_Path, io_append);
	
      format(String, 256, "< %02d/%02d/%d | %02d:%02d:%02d > %s\r\n", s_Timer[t_Day], s_Timer[t_Month], s_Timer[t_Year], s_Timer[t_Hour], s_Timer[t_Minute], s_Timer[t_Second], catch);
      fwrite(p_File, String), fclose(p_File);
	
      return true;
}
ґ Obs. Estou postando este CУDIGO ЪTIL aqui pelo seguinte fator: (Nгo consegui achar um que fosse adequado e organizado para meu Projeto atual). E com este, estб sendo minha grande precisгo e atй agora! Nгo apresentou nenhum problema.. Atualmente estб Gerando os Seguintes 'Log':

- Invasгo de Bases,
- Raio de proximidade,
- Spawn e Setagens.
Sempre usei o 'losgs' e nunca tive problema.
Reply

Quote:
Originally Posted by ipsLuan
View Post
Par ou нmpar?

PHP Code:
//Par ou нmpar?
#include a_samp
main () {}
new 
numberChosen 120;
stock evenOrOdd(number) {
    
number number 2;
    if(
number == 0)
        print(
"Par");
    else
        print(
"Нmpar");
    return 
1;
}
public 
OnGameModeInit() {
    
evenOrOdd(numberChosen);
    return 
1;

Listando todos os nъmeros pares e нmpares de uma quantidade escolhida
PHP Code:
//Listando nъmeros pares e нmpares atй uma quantidade.
#include a_samp
main () {}
new 
numberChosen 10;
public 
OnGameModeInit() {
    new 
contNumber 0number;
    while(
contNumber numberChosen) {
        
contNumber++;
        
number contNumber 2;
        if(
number == 0printf("%d й par."contNumber);
        else 
printf("%d й нmpar."contNumber);
    }
    return 
1;

Listando apenas nъmeros pares
PHP Code:
//Listando nъmeros pares
#include a_samp
main () {}
new 
numberChosen 10;
public 
OnGameModeInit() {
    new 
contNumber 0number;
    while(
contNumber numberChosen) {
        
contNumber++;
        
number contNumber 2;
        if(
number == 0printf("%d й par."contNumber);
    }
    return 
1;

Listando apenas nъmeros нmpares
PHP Code:
//Listando nъmeros нmpares
#include a_samp
main () {}
new 
numberChosen 10;
public 
OnGameModeInit() {
    new 
contNumber 0number;
    while(
contNumber numberChosen) {
        
contNumber++;
        
number contNumber 2;
        if(
number != 0printf("%d й нmpar."contNumber);
    }
    return 
1;

ґ Interessante e desnecessбrio..
Reply

@Removido
Reply

Quote:
Originally Posted by CALENZ021
View Post
Cуdigo

Este cуdigo eu uso para que o player nгo logue com a mesma conta duas ou mais vezes,
evitando assim o bug de duplicar, triplicar,... os dados da conta.

Variбveis:

Armazena o que o player digitou no login
pawn Code:
pPlayerInfo[playerid][pNome]
Armazena o se o player estб logado ou nгo
pawn Code:
PlayerInfo[playerid][Logado]
Armazena o nome do player
pawn Code:
PlayerInfo[playerid][Nome]
Verificar se a conta jб estб logada
pawn Code:
if(AccountIsLoggedIn(playerid))
{
    Kick(playerid);
    SendClientMessage(playerid, Erro, "| ERRO | Essa conta jб estб logado no servidor!");
    return 1;
}
Stock que verificar se a conta jб estб logada
pawn Code:
AccountIsLoggedIn(playerid)
{
    for(new i=0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(playerid) && IsPlayerConnected(i))
        {
            if(PlayerInfo[playerid][Logado] == false && PlayerInfo[i][Logado] == true)
            {
                if(strcmp(pPlayerInfo[playerid][pNome], PlayerInfo[i][Nome], true)==0) // Se o nome que o player digitou jб estiver logado...
                {
                    return true;
                }
            }
        }
    }
    return false;
}
By: Eu / Henrique Calenzo ( Se me mostrarem que nгo й ъtil eu removo ).
Amigo, se vocк entrar com um nickname que jб estб logado, o prуprio SA-MP impede o login. Ou seja, o cуdigo acaba sendo desnecessбrio.
Reply

Quote:
Originally Posted by CALENZ021
View Post
Impede nгo. Jб vi muita gente bugando dinheiro por causa disso.
O prуprio SA-MP bloqueia, sim.
Aparece aquele erro de nickname inaceitбvel (A-Z / 0-9) e bloqueia o acesso imediatamente atй a saнda do jogador com o mesmo nome.
Reply

Quote:
Originally Posted by CALENZ021
View Post
Ele bloqueia sу pra quem usa o nick no Launcher do sa-mp, mas e pros servidores que usam tela de login em TextDraws( Pedindo nome e senha... ) ? ai que ocorre o bug.
Cara, a conexгo do player й rejeitada. Simples assim.
Reply

Respondendo:

Quote:
Originally Posted by Locky_
View Post
Amigo, se vocк entrar com um nickname que jб estб logado, o prуprio SA-MP impede o login. Ou seja, o cуdigo acaba sendo desnecessбrio.
Quote:
Originally Posted by ipsLuan
View Post
O prуprio SA-MP bloqueia, sim.
Aparece aquele erro de nickname inaceitбvel (A-Z / 0-9) e bloqueia o acesso imediatamente atй a saнda do jogador com o mesmo nome.
Quote:
Originally Posted by Ermanhaut
View Post
Cara, a conexгo do player й rejeitada. Simples assim.
Nгo impede o login. Por que? porque o player loga no launcher do sa-mp com nicks diferentes. mas na tela de login й usado SetPlayerName e dai o player resolve entrar com a mesma conta, assim duplicando os dados.

Pode nгo fazer login mas duplica os dados sim, mas vou retirar meu poste.
Reply

Quote:
Originally Posted by CALENZ021
View Post
Respondendo:
Nгo impede o login. Por que? porque o player loga no launcher do sa-mp com nicks diferentes. mas na tela de login й usado SetPlayerName e dai o player resolve entrar com a mesma conta, assim duplicando os dados.
Testa vocк mesmo aн entгo. Abre qualquer servidor BR e veja algum nome na lista de players. Troque seu nome para qualquer um logado e tente entrar. Seu conexгo vai ser rejeitada.

Se o sistema trocar o nome do jogador, ele deve ter um login e uma senha. Se vocк colocar o nome do personagem de algum player logado, sua conexгo vai ser rejeitada. Se vocк colocar o login dele, vai pra tela de login e vocк terб que ter a senha dele. Por acaso, se vocк acertar a senha dele e seu nome for trocado, SetPlayerName nгo funcionarб porque tem um player logado com o nome que vocк ia setar.

Code:
1 The name was changed successfully
0 The name is already in use (including by this player at the moment) or the player specified is not connected
-1 The name can not be changed (too long or has invalid characters)
Nгo tem como ter dois players com o mesmo nome.
Reply

Sei que e simples, pra quem tem criatividade vai saber usar muito bem .

Cуdigo base para ATM.
pawn Code:
#include     a_samp
#include     zcmd

#define         MAX_ATM  2

new Text3D:TexATM[MAX_ATM];
enum infoatm
{
    cID,
    Float:cPosX,
    Float:cPosY,
    Float:cPosZ,
    Float:cPosA,
    cMax,
    cInt
}
new CaixaInfo[MAX_ATM][infoatm] = {
{19324, 1507.66602, -1755.56201, 13.13839, 180.96274, 25000, 1},
{19324, 1507.66602, -1755.56201, 13.13839, 180.96274, 25000, 1}
};

public OnGameModeInit()
{
    static atm;
    do {
        CreateDynamicObject(CaixaInfo[atm][cID], CaixaInfo[atm][cPosX],CaixaInfo[atm][cPosY],CaixaInfo[atm][cPosZ], 0.00000, 0.00000,CaixaInfo[atm][cPosA]);
        TexATM[atm] = Create3DTextLabel("  >> ATM << \n" , -1,CaixaInfo[atm][cPosX],CaixaInfo[atm][cPosY],CaixaInfo[atm][cPosZ], 10.0, 0, 0);
        atm++;
    }
    while(atm < MAX_ATM);
    return 1;
}

public OnGameModeExit()
{
    return 1;
}
command(atm, playerid, params[])
{
    static atm , var[100];
    do {
        if(IsPlayerInRangeOfPoint(playerid, 1.0, CaixaInfo[atm][cPosX],CaixaInfo[atm][cPosY],CaixaInfo[atm][cPosZ]))
        {
            format(var, sizeof(var), "O Caixa Possui R$ %i de dinheiro disponivel para transferencia.",CaixaInfo[atm][cMax]);
            SendClientMessage(playerid, -1, var);
        }
        atm++;
    }
    while(atm < MAX_ATM);
    return 1;
}
OBS: Foi testado esta funcionando .

O cInt Fica da criatividade de cada um , pode utilizar ele para alguma coisa , no meu caso fiz para que seja verificado que foi explodido .
Reply

vou deixar aqui o meu cуdigo in(ъtil) kkkkkkkkkkkkkkk

Code:
CMD:recuperarv(playerid){
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Vocк nгo tem permissгo para usar este comando!");
SetPlayerHealth(playerid, 100);
SetPlayerArmour(playerid, 100);
SendClientMessage(playerid, -1,"Vocк recuperou sua vida e colete com sucesso!");
return 1;}
consiste em um comando para recuperar vida e colete so para admins logado na rcon й claro, mais se pode mudar pra variavel da sua gm por exemplo
Reply


Forum Jump:


Users browsing this thread: 12 Guest(s)