Volte Sempre !!! Duvidas deixe seu comentario radio-mundo-jovem.e-mf.net ou designmundojovem.e-mf.net Design Mundo Jovem
Mu STARK
A Evolução Humana

SAMP Tool Maker

SAMP TOOL MAKER

Samp Tool Maker é um aplicativo que facilita a vida de qualquer pessoa que está criando seu GameMode

ID Sons (ID dos sons do SAMP(Pode ajudar alguem))
ID Armas (ID das armas(Weapons) do SAMP (Pode ajudar alguem))
ID Pickups (ID das Pickups do SAMP(Pode ajudar alguem))
ID Icones (ID dos Icones do SAMP(Pode ajudar alguem))
Criador de Organizações (Facilita a vida de muita gente)
Gerador de Teleportes (Bom para mappers)
Color Picker (Gerador de Cores)
Criador de Dialog(Simples, mas vai ajudar algum novato)
Conversor de Milisegundos(Simples, mas vai ajudar algum novato)
Criador de Profissões (Simples, mas vai ajudar algum novato)
Conversor de Salvamento - Dini para DOF2 
Callbacks (Aprenda um pouco sobre callbacks(bom para novatos))
Perguntas Frequentes (Bom para novatos)
Dicas (Bom para novatos)
 Funções (Bom para novatos)






BTL EDITADO

UM GAMEMODE Pra VCS Ai Com 27 Orgs Funfando 2012

BY:Cleiton





Nossos Blogs

Um Site De Humor

www.a-evolucao-humana.blogspot.com.br


Site De Designer

www.tuningcreate.blogspot.com.br



SAMP B0Tz (0.3d)

SAMP BOTZ FUNFANDO



http://www.4shared.com/file/2SRKuSRW/SAMP_B0Tz__03d_.html

Includes


[Include] Southclaw's INI File Script


outhclaw's INI File Script



A cache ini based file system written by me (used [FeK]DraKins' script as a reference)
I've tested it quite a lot to get it to work perfectly [although bugs never die! post if you find one]


This is a cache system so you open the file, it saves the contents to variables.
You edit or retrieve the data you want from the file.
Then you close the file and the script writes the edited variables back into the file.


One feature that I wanted to include was support for Windows and Linux '\n' & '\r' line endings, information on this below:


Updates:



Update #5:

- New function set: file_dGetStr/Val/Float can be used to Directly get a single value without having to use 'file_Open' load the entire file into memory, then close the file with 'file_Close'.
Speed Tests: 100 iterations each

Code:
Open/Close: 3994ms
Direct: 1835ms
Full Test Script Here

Note this function is for getting One Single Value without having to use file_Open/file_Close not retrieving more than one.

Update #4:

- Thanks to Patrik356b for his method of checking operating system
pawn Code:
fclose(fopen("windows",io_write)); if(fexist("WINDOWS"))type=WINDOWS;
This check simply creates a file in lower-case, checks if it exists in upper-case, if the OS is windows then the file will appear to exist as windows doesn't care about different cases on file names, where as Linux does so it returns false.

Update #3:

- Added function: "file_RenameKey" Description below file_Remove

Update #2:

- Added support for spaces around the delimiter: 'key = value'

Update #1:

- Added file_SetFloat and file_GetFloat
- Added file_IncVal (see below for description)
- Added separators for the PAWNO function list [categorises functions, easier to find]


Functions:




- Managing Files


file_Create(filename[])
Creates a file called <filename> don't forget the file extension!
.txt .ini.cfg or whatever you want really!

file_Delete(filename[])
Deletes the file <filename> [pretty self explanatory]

- Open/Close


file_Open(filename[])
Opens the file <filename> and saves contents to memory [it won't read values without an '=' sign, so really you can treat values without '=' as comments but they won't be written back into the file, might add comments in an update]

Note: Don't open multiple files at once, use file_Close before opening another!

file_Save(filename[])
Writes data back into <filename> always use this after using the file_Set functions
But you don't have to if you just reading from the file [file_Get functions]
But after any action always use the next one!

file_Close()
Always use this when you've finished with your open file, if you don't close a file then when you try to open another one all the variables will end up in a big mess!

- Writing


file_SetStr(key[], value[])
Write a string to the key

file_SetVal(key[], value)
Write a integer to the key

file_SetFloat(key[], value)
Write a float to the key

file_IncVal(key[], amount)
Just a simple macro to save space when writing, Increments the value of <key> by <amount>

file_Remove(key[])
Removes a key and data line from the file and shifts every other record below it up one cell so the gap is filled.

file_RenameKey(key[], newname[])
Simple: gives the specified key a new name.

- Reading


file_GetStr(key[])
Returns the string read from the <key>

file_GetVal(key[])
Returns the integer value read from the <key>

Float:file_GetFloat(key[])
Returns the floating point value read from the <key>

file_IsKey(key[])
Checks if a key and it's data exist [must have an '=' sign with at least a key so "playerpassword=" is valid]

- Direct Reading
No file_Open or file_Close needed with these functions!


file_dGetStr(filename[], key[])
Returns the string read from the <key> directly from <filename>

file_dGetVal(filename[], key[])
Returns the integer value read from the <key> directly from <filename>

file_dGetFloat(filename[], key[])
Returns the floating point value read from the <key> directly from <filename>

- Other


file_PrintAll()
Print's the contents of the cache data from a file to the console

file_OS(type = LINUX or WINDOWS)
Use this to set the operating system type [use in OnGameModeInit ^like in the example up above^]


Planned Updates:


- Tag system (maybe)

  • Add tags in files
  • Have keys of the same name in different tags
  • Delete all entries under a tag
  • Write the contents of an array under a tag
- faster
- any suggestions given to me by users 
Download

Pastebin


Hope you like this script, any bugs please tell me and I will get to work fixing them 

Speed Test Results


Using This Code

Code:
Takes 3444 ms to Write Strings 50 times

Takes 3379 ms to Write Integers 50 times

Takes 3459 ms to Write Floats 50 times

Takes 1505 ms to read strings 50 times

Takes 1474 ms to read integers 50 times

Takes 1468 ms to read floats 50 times




[Include] hLoop - Sistema de Loops


• Introdução


Simples sistema de loops feito com macros, a idéia do hLoop é facilitar o uso de Loops nos códicos !


• Formas de uso


hLoopBot()




pawn Code:
hLoopBot(i) { Kick(i); } //Esse códico kickara todos npcs do servidor !


hLoop_Admin( , )


pawn Code:
hLoop_Admin(i, PlayerInfo[i][AdminLevel] >= 5) {     Kick(i); } //Esse códico kickara todos administradores de acima de level 5 do servidor ! //Outro exemplo: hLoop_Admin(i, IsPlayerAdmin) {     Kick(i); } //Esse códico kickara todos administradores na RCON !


hLoop_Player()


pawn Code:
hLoop_Player(i) {     Kick(i); } //Esse códico kickara todos jogadores do servidor ! Inclusive os npcs !


hLoop_Vehicle()


pawn Code:
hLoop_Vehicle(i) {     DestroyVehicle(i); } //Esse códico excluira todos veiculos do servidor !


hLoop_Multiple() ou hLoop_Function()


pawn Code:
hLoop_Multiple(5, i) {     printf("Print %d", i); } //Esse códico resultará em: [SERVERLOG] Print 0 Print 1 Print 2 Print 3 Print 4 Sem hLoop_Multiple: print("Print 0"); print("Print 1"); print("Print 2"); print("Print 3"); print("Print 4");


• Download


pawn Code:
#define hLoop_Bot(%1) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1) && IsPlayerNPC(%1)) #define hLoop_Admin(%1,%2) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1) && %2) #define hLoop_Player(%1) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1)) #define hLoop_Vehicle(%1) for (new %1 = 0; %1 < MAX_VEHICLES; %1++) #define hLoop_Multiple(%1,%2) for (new %2; %2 < %1; %2++) #define hLoop_Function(%1,%2) \             hLoop_Multiple(%1,%2)


• Créditos


Mr.Hardy(Eu) - Pela criação dos macros !
Los(Um doido !) - Ajudou á escolher o nome !



 

[Includes] Brasil Vila Online [RPG]


Essas includes, são usadas para compilar o [GameMode] Brasil Vila Online [RPG] que foi postado sem as devidas includes para compila-lo.

Além das includes necessárias para compilar o GameMode, contém um pacotão de includes com o total de 316 includes, que você pode usar para compilar qualquer GameMode.


Para compilar o GameMode, basta você Extrair todos os arquivos que contem no download, abra a pasta, clique em um aplicativo chamado "pawno", logo em seguida clique em na parte superior do aplicativo, clique em "File" e clique em "Open" ou simplesmente aperte CTRL + O. Selecione o .pwn do GameMode, que encontra-se dentro da pasta "gamemodes" na pasta do servidor/gamemode, e clique em uma setinha(>) azul, na barra superior, ou simplesmente aperte F5, e pronto, se seu GameMode, estiver sem erros aparecerá a mensagem "Pawn compiler 3.2.3664     Copyright (c) 1997-2006, ITB CompuPhase" que significa que o pawn compilou o arquivo com sucesso, é o arquivo .amx foi criado, se aparecer warnings, não se preocupe, se aparecer erros, peça ajuda no xat.
 




[Include] Simples gangCreator




#Sujeito a mudanças


http://pastebin.com/WTPKthsE


Criador de gangues auto explicativo com as funções adicionarGangue, carregarGangues, vizualizarGangues com lider e o nome da gangue, bem simples pra você editar do seu gosto. 






[Include] [INC]: OnPlayerMovedCamera - Somente 0.3e



Olá. 
eu estava estudando novas funções do sa-mp 0.3e 
e decidi postar um projeto, eu fiz uma include que chama uma public ao terminar de se mover a camera.

Oque faz ?
Chama uma public ao terminar de se mover a câmera,
ou seja, assim você pode criar sistemas de login legais.

Muito simples de utilizar.
Primeiramente coloque código que postarei abaixo no bloco de notas e salve na pasta includes com a extensão ".inc"
depois, é só desfrutar!

Créditos:
- DarkScripter

Include

pawn Code:
/*  *  * OnPlayerMovedCamera - Somente na versão 0.3e RC2 ou superior.  *  *  Créditos: DarkScripter  *  - Não retire os créditos.  *  * */ new bool:Chamed_Int[MAX_PLAYERS char] = false; forward _FinisOnPlayerMovedCamera(playerid); forward OnPlayerMovedCamera(playerid); public _FinisOnPlayerMovedCamera(playerid) {     Chamed_Int{playerid} = false;     CallLocalFunction("OnPlayerMovedCamera", "d", playerid); } stock InterpolateCameraLookAt_(p, Float:x, Float:y, Float:z, Float:x2, Float:y2, Float:z2, time, style) {     InterpolateCameraLookAt(p, Float:x, Float:y, Float:z, Float:x2, Float:y2, Float:z2, time, style);     return !Chamed_Int{p} ? (SetTimerEx("_FinisOnPlayerMovedCamera", time, false, "d", p), Chamed_Int{p} = true) : true; } stock InterpolateCameraPos_(p, Float:x, Float:y, Float:z, Float:x2, Float:y2, Float:z2, time, style) {     InterpolateCameraPos(p, Float:x, Float:y, Float:z, Float:x2, Float:y2, Float:z2, time, style);     return !Chamed_Int{p} ? (SetTimerEx("_FinisOnPlayerMovedCamera", time, false, "d", p), Chamed_Int{p} = true) : true; } #define InterpolateCameraLookAt         InterpolateCameraLookAt_ #define InterpolateCameraPos            InterpolateCameraPos_

Teste - Fiz em forma de FilterScript

pawn Code:
#include <a_samp> #define TIMER           ( 60000 * 1 ) // tempo para mover a câmera ( 1 minuto ) public OnPlayerCommandText(playerid, cmdtext[]) {     if(!strcmp(cmdtext,"/cam", true))     {         TogglePlayerSpectating(playerid, true);         InterpolateCameraLookAt(playerid, 2045.2523, 1689.3992,  10.3990 + 50, 1336.8778, -2271.4685, 13.1868 + 50, TIMER, CAMERA_MOVE);         InterpolateCameraPos(playerid,    2045.2523, 1689.3992,  10.3990 + 50, 1336.8778, -2271.4685, 13.1868 + 50, TIMER, CAMERA_MOVE);         return true;     }     if(!strcmp(cmdtext,"/b", true))     {         TogglePlayerSpectating(playerid, false);         SetCameraBehindPlayer(playerid);         return true;     }     return true; } public OnPlayerMovedCamera(playerid) {     SendClientMessage(playerid, -1,"Chegou ao seu destino.");     return 1; }

[Include] RocksFile: Sistema de Salvamento de Dados



Sistema de Salvamento de Dados

Olá hoje venho compartilhar com vocês um sistema que desenvolvi em função de ajudar no salvamento e carregamento de arquivos.
Um dos principais motivos por trabalhar nesta include foi pela velocidade muito baixa da Dini e também tive problemas com Fini de estar salvando nos arquivos errados, então decidi criar a minha própria.
O uso desta include é muito semelhante a Dini e Fini, até porque o sistema foi criado usando a facilidade da Dini e o sistema de Cache da Fini, ok vamos ver como usa-lá.

Funções:

pawn Code:
native RocksFile_Existe(diretorio[]); native RocksFile_Excluir(diretorio[]); native RocksFile_Criar(diretorio[]); native RocksFile_Carregar(nomearquivo[],diretorio[]); native RocksFile_Escrever(nomearquivo[],chave[],escrita[]); native RocksFile_EscreverInteiro(nomearquivo[],chave[],escrita[]); native RocksFile_EscreverFloat(nomearquivo[],chave[],escrita[]); native RocksFile_Ler(nomearquivo[],chave[]); native RocksFile_LerInteiro(nomearquivo[],chave[]); native RocksFile_LerFloat(nomearquivo[],chave[]); native RocksFile_Salvar(nomearquivo[]); native RocksFile_Fechar(nomearquivo[]);


pawn Code:
RocksFile_Existe(diretorio[])//É usada para verificar se um arquivo já é existente.
pawn Code:
RocksFile_Excluir(diretorio[])//É usada para excluir um arquivo de determinado diretório.
pawn Code:
RocksFile_Criar(diretorio[])//É usada para criar um arquivo em determinado diretório.
pawn Code:
RocksFile_Carregar(nomearquivo[],diretorio[])//carrega um arquivo. //em 'nomearquivo' será um nome dado para aquele carregamento. também pode se usar numeros como 'ids'. //e o diretório será o caminho para encontrar o arquivo á carregar. //OBS: Antes de escrever,ler,salvar e fechar você deverá carregar o arquivo usando esta função.
pawn Code:
RocksFile_Escrever(nomearquivo[],chave[],escrita[])//É usada para escrever uma frase no arquivo já carregado. //aqui temos uma novidade, em dini você colocaria o diretório para salvar, mas aqui voce colocará o nome que você usou para carregar o arquivo.
pawn Code:
RocksFile_EscreverInteiro(nomearquivo[],chave[],escrita[])//Escreve um número inteiro no arquivo(números sem casas decimais).
pawn Code:
RocksFile_EscreverFloat(nomearquivo[],chave[],escrita[])//Escreve um número 'flutuante' com casas decimais no arquivo.
pawn Code:
RocksFile_Ler(nomearquivo[],chave[])//Usada para pegar uma frase (string) do arquivo carregado.
pawn Code:
RocksFile_LerInteiro(nomearquivo[],chave[])//Usada para pegar um número inteiro de um arquivo carregado.
pawn Code:
RocksFile_LerFloat(nomearquivo[],chave[])//Usada para pegar um número com casas decimais de um arquivo carregado.
pawn Code:
RocksFile_Salvar(nomearquivo[])//Usada para atualizar um arquivo já carregado e suas escritas posteriores //OBS: você deve usar esta função para que o arquivo com os dados seja atualizado e que os dados sejam salvos.
pawn Code:
RocksFile_Fechar(nomearquivo[])//Usada para fechar um carregamento e limpar os dados do cache. //OBS: Use a função RocksFile_Salvar(nomearquivo[]) antes de fechar para nao perder os dados.

Exemplo das funções em prática:
Sistema de registro e login simples em dialog usando RocksFile:

pawn Code:
//topo do gamemode #include <RocksFile> new Nivel[MAX_PLAYERS];//cria a variavel nivel para salvar o nivel carregado dos arquivos dos jogadores //funções do script public OnPlayerConnect(playerid) {     new nome[30],file[50];//cria as variaveis nome e file     GetPlayerName(playerid,nome,30);//pega o nome do jogador e salva na variavel nome     format(file,50,"%s.ini",nome);//formata a variavel file para o destino das contas de usuario     if(RocksFile_Existe(file))//vai checar se já existe um registro com o nome deste jogador     {         //irá mostrar o dialog para logar         ShowPlayerDialog(playerid,999,DIALOG_STYLE_INPUT,"Login RocksFile","Digite abaixo sua senha para logar.","Logar","Sair");         return 1;     }else{         //irá mostrar o dialog para registrar         ShowPlayerDialog(playerid,998,DIALOG_STYLE_INPUT,"Registro RocksFile","Digite abaixo sua senha para registrar.","registrar","Sair");     }     return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {     if(dialogid == 999)//login     {         new nome[30],file[50];//cria as variaveis nome e file         GetPlayerName(playerid,nome,30);//pega o nome do jogador e salva na variavel nome         format(file,50,"%s.ini",nome);//formata a variavel file para o destino das contas de usuario         if(response)         {             RocksFile_Carregar(nome,file);//estaremos carregando o arquivo do jogador com o próprio nome dele e o diretorio do arquivo             if(!strcmp(RocksFile_Ler(nome,"Senha"),inputtext,true))//irá checar se a senha digitada é igual a que ele registrou             {                 RocksFile_Fechar(nome);//irá fechar o arquivo aberto                 CarregarJogador(playerid);//irá direcionar para esta função                 SpawnPlayer(playerid);                 return 1;             }             ShowPlayerDialog(playerid,999,DIALOG_STYLE_INPUT,"Login RocksFile","Digite abaixo sua senha para logar.","Logar","Sair");             RocksFile_Fechar(nome);//irá fechar o arquivo aberto         }else{//caso clique em sair             Kick(playerid);             RocksFile_Fechar(nome);//irá fechar o arquivo aberto         }     }     if(dialogid == 998) //registro     {         new nome[30],file[50];//cria as variaveis nome e file         GetPlayerName(playerid,nome,30);//pega o nome do jogador e salva na variavel nome         format(file,50,"%s.ini",nome);//formata a variavel file para o destino das contas de usuario         if(response)         {             if(strlen(inputtext) > 5)//checa se a senha digitada é maior que 5 digitos             {                 RegistrarJogador(playerid,inputtext);                 return 1;             }         }else{             Kick(playerid);         }     }     return 1; } stock CarregarJogador(playerid) {     new nome[30],file[50];//cria as variaveis nome e file     GetPlayerName(playerid,nome,30);//pega o nome do jogador e salva na variavel nome     format(file,50,"%s.ini",nome);//formata a variavel file para o destino das contas de usuario     if(!RocksFile_Existe(file))//vai checar se já existe um registro com o nome deste jogador     {         //irá mostrar o dialog para registrar         ShowPlayerDialog(playerid,998,DIALOG_STYLE_INPUT,"Registro RocksFile","Digite abaixo sua senha para registrar.","registrar","Sair");         return 1;     }     //hora de carregar as informações     RocksFile_Carregar(nome,file);//carrega o arquivo do jogador     Nivel[playerid] = RocksFile_LerInteiro(nome,"Nivel");//ira carregar o nivel que escrevemos no registro     SetPlayerScore(playerid,Nivel[playerid]);//ira setar o nivel do jogador co o nivel que carregou     SendClientMessage(playerid,-1,Nivel[playerid]);     return 1; } stock RegistrarJogador(playerid,senha[]) {     new nome[30],file[50];//cria as variaveis nome e file     GetPlayerName(playerid,nome,30);//pega o nome do jogador e salva na variavel nome     format(file,50,"%s.ini",nome);//formata a variavel file para o destino das contas de usuario     if(RocksFile_Existe(file))//vai checar se já existe um registro com o nome deste jogador     {         //irá mostrar o dialog para logar         ShowPlayerDialog(playerid,999,DIALOG_STYLE_INPUT,"Login RocksFile","Digite abaixo sua senha para logar.","Logar","Sair");         return 1;     }     else     {         //caso nao exista um registro irá registra-lo         RocksFile_Criar(file);//cria um arquivo         RocksFile_Carregar(nome,file);//carrega o arquivo criado acima         RocksFile_Escrever(nome,"Senha",senha);//ira escrever que a senha é a que o jogador digitou         RocksFile_EscreverInteiro(nome,"Nivel",0);//ira escrever que o nivel do jogador é 0         //voce pode escrever muitas outras coisas apenas seguindo o padrão acima         RocksFile_Salvar(nome);//irá salvar o registro e atualizar o arquivo criado         CarregarJogador(playerid);//vai carregar o jogador         SpawnPlayer(playerid);//irá spawna-lo para começar a jogar         return 1;     } } public OnPlayerDisconnect(playerid,reason) {     new nome[30],file[50];//cria as variaveis nome e file     GetPlayerName(playerid,nome,30);//pega o nome do jogador e salva na variavel nome     format(file,50,"%s.ini",nome);//formata a variavel file para o destino das contas de usuario     if(RocksFile_Existe(file))     {         new Float:x,Float:y,Float:z;         GetPlayerPos(playerid,x,y,z);         RocksFile_EscreverInteiro(nome,"Nivel",Nivel[playerid]); //irá atualizar o registro anterior         RocksFile_EscreverFloat(nome,"PosX",x);         RocksFile_EscreverFloat(nome,"PosX",y);         RocksFile_EscreverFloat(nome,"PosX",z);         //   ^^ salva a posição do jogador no arquivo que pode ser carregada depois usando RocksFile_LerFloat         RocksFile_Salvar(nome);//irá salvar e registrar no arquivo         RocksFile_Fechar(nome);//é muito importante fechar o arquivo quando não for mais utilizado         return 1;     }     return 1; }
Download:
Clique Aqui óóóóó
http://pastebin.com/sVpqyEA0


[Include] Logs Dinâmicos! [Losgs]



Olá. Estava pensando em criar alguma coisa dinâmica hoje e resolvi fazer isso.

Vantagens:

  • Feito em File Functions.
  • Já escreve com data e hora
  • Rápido e simples
  • Uso rápido e eficaz
  • Não há riscos de incompatibilidade
  • Funciona em 0.3c e 0.3d

Natives:

pawn Code:
native CriarLog(const File[]); native EscreverLog(const File[], string[]); native DeletarLog(const File[]); native LerLog(const File[]); native ChecarLog(const File[]);

Informações:

  • Para utilizar, coloque no topo:
    pawn Code:
    #include <losgs>

Exemplo de uso:

pawn Code:
#include <zcmd> #include <losgs> #include <sscanf> CMD:kickar(playerid, params[]) {     new string[100], kickarid, motivo, Nome[MAX_PLAYER_NAME], Nome2[MAX_PLAYER_NAME];     if(sscanf(params, "us[100]", kickarid, motivo)) return SendClientMessage(playerid, ErroCor, "USE: /kickar {00E5FF}[Player] [Motivo]");     format(string, sizeof(string), "{00D5FF}%s {FFFFFF}foi kickado por: {00D5FF}%s{FFFFFF}. || Motivo: {00FF1E}%s{FFFFFF}.", GetPlayerNameEx(kickarid), GetPlayerNameEx(playerid), motivo);     SendClientMessageToAll(-1, string);     new celulas[100];     Kick(kickarid);     GetPlayerName(kickarid, Nome, MAX_PLAYER_NAME);     GetPlayerName(playerid, Nome2, MAX_PLAYER_NAME);     if(!LogExistir("Kicks.log"))     {         CriarLog("Kicks.log");         format(celulas, sizeof(celulas), "%s foi kickado por %s. Motivo: %s", Nome, Nome2, motivo);         EscreverLog("Kicks.log", celulas);         return 1;     }     else     {         format(celulas, sizeof(celulas), "%s foi kickado por %s. Motivo: %s", Nome, Nome2, motivo);         EscreverLog("Kicks.log", celulas);         return 1;     }     return 1; } CMD:deletarkicks(playerid, params[]) {     DeletarLog("Kicks.log");     return 1; } CMD:lerkicks(playerid, params[]) {     LerLog("Kicks.log");     return 1; }

Download:

Pastebin



[INC] Protegendo servidor contra BOTS! (NIEX HAX)



Olá galera.. bom como todas pessoas andam sabendo tem um novo hack no SA-MP que coloca BOTS no servidor...
Bom então eu fiquei pesquisando sobre isto mais não achei nada que resolvesse este problema!
Então eu vi uma include do: "iPLEOMAX" sobre reconnect.. até postei ajuda sobre este assunto é o: StrondA conseguiu me ajudar também...

Mais enfim, se uma pessoa tentar colocar BOT que fica se reconectando, a include bane o IP da pessoa é se a pessoa que está colocando os BOTS estiver no servidor pode ser crashado ou perder a conexão é se tentar se conectar ao servidor ela estará banida!
 

Include feita por: iPLEOMAX é editado por: Skoolz.mk










Agora adicione este pequeno código em seu GAME-MODE!
TOPO DO GAME-MODE: 






ADICIONE NO ONPLAYERCONNECT:





ONPLAYERDISCONNECT:



http://4.bp.blogspot.com/-5Ns-SQSch0A/TxsVIlsSVLI/AAAAAAAAAbM/bwWNMcnFqBw/s1600/ha.png
http://4.bp.blogspot.com/-bU35c7Gjpss/TxsVOYymZsI/AAAAAAAAAbU/xa5aHhYRx2s/s1600/ha2.png 





Fini Cache File System (72x mais rápido que Dini!)




Introdução:
Este sistema trabalha com Cache estilo Y_ini ou SSI e outros sistemas parecidos.
Possuí sistema de Leitura e Escrita atualmente mais rápido!

Velocidade:
Fini
Escritas por segundo: 087269
Leituras por segundo: 499040
Funções por segundo: +300.000

Dini
Escritas por segundo: 221
Leituras por segundo: 6355
Funções por segundo: 72

Praticidade:
Para usar é igual ao sistema SII, porém claro é um pouco mais rápido!
Use da seguinte forma:

Abrimos o arquivo:


Escrevemos e fazemos a leitura:

Fechamos o arquivo:


Desta forma ficando o código:




Outras informações:
Base, caso queiram escrever os númeors deve formatar como string da seguinte forma

new str[3];
format(str,4,"%d",NUMERO_AQUI);
Fini_SetStr("Teste",str);


Assim escrevemos o número no arquivo:

Códigos:
Fini:

#define maxtag   (00244)
#define maxfile    (99999)
#define maxname (00064)
#define Fini_Exists             fexist
#define Fini_GetFloat(%0)       floatstr(Fini_GetStr(%0))
static
zNormal1,
zNormal2,
fStr[maxtag],
fTag[maxtag],
fFile[maxfile],
File:zFopenFile,
fName[maxname],
iSource
;
stock
Fini_OpenFile(fname[])
{
zFopenFile = fopen(fname,io_read);
while(fread(zFopenFile,fStr))
strins(fFile,fStr,strlen(fFile),maxfile);

fclose(zFopenFile);
format(fName,maxname,"%s",fname);
return true;
}
stock
Fini_SaveFile()
{
fremove(fName);
zFopenFile = fopen(fName,io_write)
fwrite(zFopenFile,fFile);
fclose(zFopenFile);
return true;
}
stock
Fini_CloseFile()
{
fFile[0] = '\0';
fName[0] = '\0';
return true;
}
stock
Fini_GetStr(ftag[])
{
zNormal1 = strfind(fFile,ftag,true);
zNormal2 = (zNormal1 + (strlen(ftag)));
strmid(fTag,fFile,zNormal2,(zNormal2  + maxtag),maxtag);
zNormal2 = strfind(fTag,"\n",true);
strmid(fStr,fTag,1,zNormal2 ,maxtag);
return fStr;
}
stock
Fini_SetStr(ftag[],fstr[])
{
format(fTag,maxtag,"%s=%s",ftag,Fini_GetStr(ftag));
zNormal1 = strfind(fFile,ftag,true);
if(zNormal1 != -1)
{
iSource = strlen( fTag ) ;
format(fStr,maxtag,"%s=%s",ftag,fstr);
strdel(fFile,zNormal1  ,(zNormal1 + iSource));
format(fStr,128,"%s",fStr);
strins(fFile,fStr,zNormal1 ,128);
}
else
{
format(fStr,maxtag,"%s=%s\r\n",ftag,fstr);
strins(fFile,fStr,strlen(fFile));
}
return true;
}
stock
Fini_Create(nFile[])
{
if (Fini_Exists(nFile)) return false;
new File:cFile = fopen(nFile,io_write);
return fclose(cFile);
}
stock
Fini_SetVal(ftag[],fval)
{
static Seting[24];
format(Seting,maxtag,"%d",fval);
Fini_SetStr(ftag,Seting);
return true;
}
stock
Fini_SetFloat(ftag[],Float:fval)
{
static Seting[24];
format(Seting,maxtag,"%f",fval);
Fini_SetStr(ftag,Seting);
return true;
}
stock
Fini_SetBool(ftag[],bool:fval)
{
static Seting[24];
format(Seting,maxtag,"%d",fval)
Fini_SetStr(ftag,Seting);
return true;
}
stock
Fini_IsSet(ftag[])
{
format(fTag,maxtag,"%s=%s",ftag,Fini_GetStr(ftag));
zNormal1 = strfind(fFile,ftag,true);
if(zNormal1 != -1)
return true;
return false;
}
stock Fini_GetBool(ftag[])
{
new Seting = strval(Fini_GetStr(ftag));
return Seting;}stock Fini_GetValue(ftag[])
{
new Seting = strval(Fini_GetStr(ftag));
return Seting;
}

Testes com dini:


public OnFilterScriptInit()
{
  dini_Create("Dini.txt");
  dini_Create("Fini.txt");
      new Fini = GetTickCount(),FiniValue;
      Fini_OpenFile("Fini.txt");
  while(GetTickCount() - Fini < 1000)
   {
       Fini_SetStr("Key1","Ok1");
       Fini_GetStr("Key1");
       FiniValue++;
   }
   Fini_SaveFile()
   Fini_CloseFile();
       printf("Fini: %d",FiniValue);
       new Dini = GetTickCount(),DiniValue;
       while(GetTickCount() - Dini < 1000)
   {
       dini_Set("Dini.txt","Key1","Ok1");
       dini_Get("Dini.txt","Key1");
       DiniValue++;
   }
   printf("Dini: %d",DiniValue);
       return true;
}
}

Testes com funções:


public OnFilterScriptInit()
{
   Fini_Create("Fini.txt");
   #define SEGUNDOS 1 //coloque aqui o número de segundos para teste de funcoes
   new
       Fini = GetTickCount(),
       FiniValue    ;
       if(!Fini_Exists("Fini.txt"))
       Fini_Create("Fini.txt");
           Fini_OpenFile("Fini.txt");
       while(GetTickCount() - Fini < (SEGUNDOS * 1000))
   {
           Fini_SetStr     ("DraKoN"   , "Kitties" );
           Fini_SetBool    ("Boolean"  , false     );
           Fini_SetFloat   ("Floating" , 1.8       );
           Fini_SetVal     ("SAMP"     , 199       );
           FiniValue++;
   }
   printf("String-%s",         Fini_GetStr  ("DraKoN"));
   printf("Boool - %d",        Fini_GetBool ("Boolean"));
   printf("Value - %i",        Fini_GetValue("SAMP"));
   printf("Float - %f",        Fini_GetFloat("Floating"));
       Fini_SaveFile();
   Fini_CloseFile();
       printf("Fini: %d Functions in %d Seconds",((FiniValue * 5) + 5) + 4,SEGUNDOS);
   return true;
}  


Versão atualizada:


http://dl.dropbox.com/u/25732524/Fini.rar








▲Topo