
* Comentário
Essa include é uma include que visa o melhoramento de certas Funções/CallBack's que todos podem contribuir com ela, modificando funções existentes para melhora-las, esse projeto é meio que parecido com a Fixes, Creio eu que a muitas funções que deixam a desejar em seus parâmetros e então decidi cria-la para que todos que tenham funções editadas e deseja compartilhar ou até mesmo que tem a ideia e não consegue coloca-la em prática postarem no tópico que irei incluir na include!
*Como usar ?
pawn Code:
#include <a_samp> #include <FunctionEdit>
Sempre mude os parâmetros das funções editadas em seu GM para que não haja erro, Ex:
pawn Code:
public OnVehicleDamageStatusUpdate(vehicleid, playerid) { //Função original return 1; } public OnVehicleDamageStatusUpdate(vehicleid, playerid, Float:amount) { //Função editada return 1; }
Agora se você preferir pode desativar qualquer função que não queria usar, Basta fazer o seguinte!
pawn Code:
#define @FE_OnVehicleDamageStatusUpdate false // Caso for desativar alguma função coloque '@FE_NomeFunção' seguido do valor 'false' para desativa-la. #include <FunctionEdit> //Sempre utilize a include abaixo das definições que desativam certas funções para não haver erros.
Nome | Parâmetros | Autor | Post |
OnVehicleDamageStatusUpdate | (vehicleid, playerid, Float:amount) | Paulo_TerroR | |
GetPlayerHealth | (playerid, &Float: health = 0.0) | Los | Link |
GetPlayerArmour | (playerid, &Float: armour = 0.0) | Los | Link |
GetPlayerFacingAngle | (playerid, &Float: ang = 0.0) | Los | Link |
GetPlayerIp | (playerid, name[], len) | Los | Link |
GetPlayerName | (playerid, const name[], len) | Los | Link |
GetPlayerVersion | (playerid, version[], len) | Los | Link |
OnPlayerEnterVehicle | (playerid, vehicleid, ispassenger, veiculo) | Paulo_TerroR | |
OnPlayerStateChange | (playerid, newstate, oldstate, vehicleid, veiculo) | Paulo_TerroR | |
SetPlayerPos | (playerid, Float: x, Float: y, Float: z, Float: a) | ViniBorn | Link |
SetVehiclePos | (vehicleid, Float: x, Float: y, Float: z, Float: a) | ViniBorn | Link |
GetPlayerPos | (playerid, Float:FE_Pos[4]) | Paulo_TerroR | |
GetVehiclePos | (vehicleid, Float:FE_Pos[4]) | Paulo_TerroR | |
SendClientMessageEx | (playerid, color, const message[], {Float,_}:...) | Lucas_Alemao | Link |
SendClientMessageToAllEx | (color, const message[], {Float,_}:...) | Lucas_Alemao | Link |
OnPlayerDamage | (playerid, Float:amount) | Paulo_TerroR |
* Creditos
Paulo_TerroR - Criador
Equipe SA-MP(Passado\Presente\Futuro) - SAMP.
Hiuship - Ideias.
ViniBorn - Participação na Include.
Los - Participação na Include.
Lucas_Alemao - Participação na Include.
* Download
PasteBin
SitesGoogle
* Observação
Participem desse projeto, Poste suas funções ou suas ideias.
Qualquer BUG me contatar por MP ou pelo Post mesmo! Ficarei agradecido.
Rumo há Sticky!
Dúvidas sobre as funções, Pergunte no Post!
Bom jogo!
___________________________________________________________________________________________________
[Include] Bits Booleanos - O que são bits?
Resolvi criar um simples sistema de bits 1 e 0. Isto pode poupar sua memória e amx em até 32 vezes.
Qual melhora?
lvdm.amx sem BITS -> 4 mb
lvdm.amx com BITS -> 177kb
Código usado:
pawn Code:
// com bits new Bit:arr<5000000>; // sem bits new arr[5000000]
Só usa-se para arrays de true e false !!
Pode deixar a execução mais lenta. Isto é obvio e ocorre em qualquer sistema de bits, mas não muito. A propósito, este meu até que ficou rápido.
O que são bits? Como tiveram está ideia genial?
Primeiramente, vou explicar como funciona manipulação de alocação por Bits
Primeiramente, você deve saber que "Bits nada mais nada menos são "Binary Digits" ou "Digitos Binários"."
-
Atualmente no pawn, podemos ter o seguinte valor máximo em uma variável
pawn Code:
new var = cellmax;
Cellmax é o máximo valor que se pode ter em uma array/variável. Caso você tente
pawn Code:
new var = cellmax + 1;
Não dará certo! Isto retorna em notação cientifica pois pawn não tem suporte para números maiores que cellmax
Pois bem, o valor 2147483647 ou cellmax equivale ao seguinte em binário:
Quote:
1111111111111111111111111111111 |
Então foi aí, que alguém teve a idéia criativa de usar estes valores como uma array true e false
pawn Code:
new ab = 0b001
Em bits booleanos. Isto equivale a:
pawn Code:
new ab[3]; ab[0] = 0; ab[1] = 0; ab[2] = 1;
Note: 001 e 001
ou outro exemplo:
pawn Code:
new ab[3]; ab[0] = 1; ab[1] = 0; ab[2] = 1; // equivale a "new ab = 0b101" // "0b" indica que o número é binário
Logo. Uma única variável pode receber
pawn Code:
1111111111111111111111111111111
Sendo assim você não precisará de uma array de [32] partes. Mas sim apenas uma array de [1] parte. Viu a memória poupada?
Pois bem, existem varias formas de manipulação destes valores. Desde usar strings para manipular ou até mesmo cálculos (que é o mais aconselhável)
Include
PHP Code:
#define Bit_Lenght(%0) \
(sizeof(%0) * cellbits)
#define Bit:%0<%1> \
%0[(%1 +cellbits) / cellbits]
stock Bit_Get(bit[], pos, size = sizeof bit) {
new
index = (pos) / cellbits
;
return index > size || index < 0 ? false : (0 != (bit[index] & (1 << pos))) ;
}
stock Bit_Set(bit[], pos, bool:val, size = sizeof bit) {
new
index = (pos) / cellbits
;
return index > size || index < 0 ? 0 : (bit[index] = val ?(bit[index] | 1) << pos : bit[index] & ~(1 << pos)), 1;
}
Modo de uso e comparação
pawn Code:
new Bit:bites<MAX_PLAYERS>; printf("%d", Bit_Lenght(bites)); Bit_Set(bites, 499, true); for(new i = Bit_Lenght(bites)-1 ; i > -1; i--) { if(Bit_Get(bites, i)) { printf("%d -> true", i); } }
Isto deverá imprimir
499 -> true
Pois é o valor que usamos em set. O uso é simples:
Comparação:
Array normal: new var[32];
Array bit: new Bit:var<32>; // var[1]
Memória poupada em 32x
Colocando valor
Método normal-> var[499] = true;
Método Bits - > Bit_Set(var, 499, true);
Pegando valor
printf("metodo normal %d", var[499]);
printf("metodo bits %d", Bit_Get(var, 499));
-
-
-
É isto. Espero que tenham gostado
Criado por Bruno da Silva
___________________________________________________________________________________________________
Bini 4
Após algumas semanas de desenvolvimento da nova versão de Bini. Finalmente consigo acaba-la.
A nova versão de Bini não conta com muitas alterações, exceto a engine de manipulação de arquivos na memória. Desta vez utiliza memória cache mais avançada usando Setproperty e Getproperty!
Velocidade
Com esta nova engine, a velocidade foi bastante aprimorada. O que já era rápido ficou mais rápido ainda

Quote:
[09:59:37] Bini -> write 1827 ms - read 31 ms - read/write 1858 ms [09:59:37] Dof2 -> write 2746 ms - read 247 ms - read/write 2993 ms |
pawn Code:
public OnFilterScriptInit(){ DOF2_CreateFile("ipsBruno1"); DOF2_CreateFile("ipsBruno2"); new dof[3]; dof[0] = GetTickCount(); dof[2] = GetTickCount(); for(new i; i != 3000; i++) { DOF2_SetInt("ipsBruno1", "teste1", 1000); DOF2_SetInt("ipsBruno1", "teste2", 2000); DOF2_SetInt("ipsBruno1", "teste3", 3000); DOF2_SetInt("ipsBruno1", "teste4", 4000); DOF2_SetInt("ipsBruno1", "teste5", 5000); DOF2_SetInt("ipsBruno1", "teste6", 6000); DOF2_SetInt("ipsBruno1", "teste7", 7000); DOF2_SetInt("ipsBruno1", "teste8", 8000); DOF2_SetInt("ipsBruno1", "teste9", 9000); DOF2_SetInt("ipsBruno1", "teste10", 10000); DOF2_SetInt("ipsBruno1", "teste11", 11000); DOF2_SaveFile(); } dof[0] = GetTickCount() - dof[0]; dof[1] = GetTickCount(); for(new i; i != 3000; i++) { DOF2_GetInt("ipsBruno1", "teste1"); DOF2_GetInt("ipsBruno1", "teste2"); DOF2_GetInt("ipsBruno1", "teste3"); DOF2_GetInt("ipsBruno1", "teste4"); DOF2_GetInt("ipsBruno1", "teste5"); DOF2_GetInt("ipsBruno1", "teste6"); DOF2_GetInt("ipsBruno1", "teste7"); DOF2_GetInt("ipsBruno1", "teste8"); DOF2_GetInt("ipsBruno1", "teste9"); DOF2_GetInt("ipsBruno1", "teste10"); DOF2_GetInt("ipsBruno1", "teste11"); } dof[1] = GetTickCount() - dof[1]; dof[2] = GetTickCount() - dof[2]; // new bin[3]; bin[0] = GetTickCount(); bin[2] = GetTickCount(); for(new i; i != 3000; i++) { INI_WriteInt("ipsBruno2", "teste1", 1000); INI_WriteInt("ipsBruno2", "teste2", 2000); INI_WriteInt("ipsBruno2", "teste3", 3000); INI_WriteInt("ipsBruno2", "teste4", 4000); INI_WriteInt("ipsBruno2", "teste5", 5000); INI_WriteInt("ipsBruno2", "teste6", 6000); INI_WriteInt("ipsBruno2", "teste7", 7000); INI_WriteInt("ipsBruno2", "teste8", 8000); INI_WriteInt("ipsBruno2", "teste9", 9000); INI_WriteInt("ipsBruno2", "teste10", 10000); INI_WriteInt("ipsBruno2", "teste11", 11000); INI_Save(); } bin[0] = GetTickCount() - bin[0]; bin[1] = GetTickCount(); for(new i; i != 3000; i++) { INI_ReadInt("ipsBruno2", "teste1"); INI_ReadInt("ipsBruno2", "teste2"); INI_ReadInt("ipsBruno2", "teste3"); INI_ReadInt("ipsBruno2", "teste4"); INI_ReadInt("ipsBruno2", "teste5"); INI_ReadInt("ipsBruno2", "teste6"); INI_ReadInt("ipsBruno2", "teste7"); INI_ReadInt("ipsBruno2", "teste8"); INI_ReadInt("ipsBruno2", "teste9"); INI_ReadInt("ipsBruno2", "teste10"); INI_ReadInt("ipsBruno2", "teste11"); } bin[1] = GetTickCount() - bin[1]; bin[2] = GetTickCount() - bin[2]; printf("Bini -> write %d ms - read %d ms - read/write %d ms", bin[0], bin[1], bin[2]); printf("Dof2 -> write %d ms - read %d ms - read/write %d ms", dof[0], dof[1], dof[2]); return true; } public OnFilterScriptExit() { DOF2_Exit(); INI_Exit(); return true; }
NOVOS TESTES DE VELOCIDADES SERÃO ACEITOS.
Usando
Para usar Bini é bastante simples! Basta fazer o seguinte:
Escrevendo:
Números
pawn Code:
INI_WriteInt("arquivo.ini", "key", valor); INI_Save();
Textos:
pawn Code:
INI_WriteString("arquivo.ini", "key", "valor"); INI_Save();
Lendo valores:
Números
pawn Code:
INI_ReadInt("arquivo.ini", "key")
Textos
pawn Code:
INI_ReadString("arquivo.ini", "key")
Então sempre deixe:
pawn Code:
public OnFilterScriptExit() { INI_Exit(); return true; }
** Importante
- Se você tem arquivos escritos por DOF2 ou Y_Ini este sistema não será compatível pois meu sistema usa o método formal para escrita de escrita em arquivos ini, sem espaço entre as keys
Quote:
key=value |
Quote:
key = value |
Porém é TOTALMENTE compatível com Dini e outros sistemas conhecidos
Funções disponíveis:
pawn Code:
// Funções Atuais: // CallBack INI_WriteString("arquivo", "key", "valor") // CallBack INI_WriteFloat("arquivo"",key", valor) // CallBack INI_WriteInt("arquivo","key", valor) // CallBack INI_WriteBool("arquivo","key", bool:valor) // CallBack INI_ReadString("arquivo", "key") // CallBack INI_ReadInt("arquivo", "key") // CallBack INI_ReadFloat("arquivo","key") // CallBack INI_ReadBool("arquivo","key") // CallBack INI_Create("arquivo") // CallBack INI_Delete("arquivo") // CallBack INI_Open("arquivo")
Download
-> http://pastebin.com/gjEJMnH5
Com está velocidade é permitido que você possa colocar em até 50 escritas/leituras em OnPlayerUpdate

Salve em bini.inc por favor.
Introdução:
Olá galerinha.. bom como todos sabem existe alguns lammers que adoram infernizar os servidores com diversos tipos de flood, como, spam death, flood chat/comandos etc.. com esse script seus problemas acabaram! ele tem a finalidade de acabar com isso, você poderá adimistrar diversos tipos de flood com um toque de magica!. Basta apenas configura-lo ao seu gosto
.
Funções:
O script. Ele permite você administrar vários tipos de floods, e configura-lo ao seu gosto!
Exemplo:
Download:
Pastebin
Dúvidas, sugestões, bugs, Poste aqui!
ChangeLog:
Créditos:
RoacH` - Criador
SA-MP TEAM - For All
Olá galerinha.. bom como todos sabem existe alguns lammers que adoram infernizar os servidores com diversos tipos de flood, como, spam death, flood chat/comandos etc.. com esse script seus problemas acabaram! ele tem a finalidade de acabar com isso, você poderá adimistrar diversos tipos de flood com um toque de magica!. Basta apenas configura-lo ao seu gosto

Funções:
O script. Ele permite você administrar vários tipos de floods, e configura-lo ao seu gosto!

Nome | Parâmetros | Função |
FLOOD_CONTROL_DEATH | N/A | Flood death spam, fake kill |
FLOOD_CONTROL_BOOT | N/A | Flood boot |
FLOOD_CONTROL_VEHICLES | N/A | Flood vehicles(Car mass spawner) |
FLOOD_CONTROL_COMMAND | N/A | Flood command |
FLOOD_CONTROL_CHAT | N/A | Flood chat |
OnPlayerFloodControl | (playerid, config) | Painel de controle |
OnPlayerFloodChat@Command | (playerid, config, iCount, iTime) | Painel dos floods chat/comandos |
Exemplo:
pawn Code:
#include <a_samp> #include <FloodControl> public OnPlayerFloodControl(playerid, config) { if(config == FLOOD_CONTROL_DEATH) { SendClientMessage(playerid, 0xFFFFFFFF, "FloodControl: Você foi banido por flood death!"); Ban(playerid); } else if(config == FLOOD_CONTROL_BOOT) { SendClientMessage(playerid, 0xFFFFFFFF, "FloodControl: Você foi banido por flood boot!"); Ban(playerid); } else if(config == FLOOD_CONTROL_VEHICLES) { SendClientMessage(playerid, 0xFFFFFFFF, "FloodControl: Você foi banido por flood vehicle! (CAR MASS SPAWNER)"); Ban(playerid); } else if(config == FLOOD_CONTROL_CHAT || FLOOD_CONTROL_COMMAND) { SendClientMessage(playerid, 0xFFFFFFFF, "FloodControl: Você foi kickado por flood chat/comando!"); Kick(playerid); } return true; } public OnPlayerText(playerid, text[]) { /* -- Novos parametros -- OnPlayerFloodChat@Command(playerid, FLOOD_CONTROL_CHAT, iCount, iTime); Ex: OnPlayerFloodChat@Command(playerid, FLOOD_CONTROL_CHAT, 4, 2); Note: if((gettime() - GetPVarInt(playerid, "#lasttext")) < iTime && flood_stamp[playerid] > iCount) De acordo com o exemplo funcionara desta maneira, iCount(2) = Contagem de mensagens em menos do iTime(4). Então caso o player mande 2 mensagens em menos de 4 segundos a callback OnPlayerFloodControl é chamada! */ // -- Começa a contagem -- OnPlayerFloodChat@Command(playerid, FLOOD_CONTROL_CHAT, 4, 2); return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { /* -- Novos parametros -- OnPlayerFloodChat@Command(playerid, FLOOD_CONTROL_CHAT, iCount, iTime); Ex: OnPlayerFloodChat@Command(playerid, FLOOD_CONTROL_CHAT, 4, 2); Note: if((gettime() - GetPVarInt(playerid, "#lasttext")) < iTime && flood_stamp[playerid] > iCount) De acordo com o exemplo funcionara desta maneira, iCount(2) = Contagem de mensagens em menos do iTime(4). Então caso o player mande 2 mensagens em menos de 4 segundos a callback OnPlayerFloodControl é chamada! */ // -- Começa a contagem -- OnPlayerFloodChat@Command(playerid, FLOOD_CONTROL_COMMAND, 4, 2); if(!strcmp(cmdtext, "/floodcontrol", true)) { SendClientMessage(playerid, 0xFFFFFFFF, "FloodControl: Você será kickado por flood!"); return 1; } return 0; }
Pastebin
Dúvidas, sugestões, bugs, Poste aqui!
ChangeLog:
- 22/06/2012:
- Release inicial
- 23/06/2012:
- Adds:
- Novos parâmetros para a função: OnPlayerFloodChat@Command.
- (playerid, config, iCount, iTime)!
- Notes:
- A sintaxe. Foi mudada e adicionada mais dois parâmetros, isto é, será preciso trocar de acordo!
- Adds:
Créditos:
RoacH` - Criador
SA-MP TEAM - For All