if(money >= 1 && money <= 9999) { /* codigo */ }
stock EntreAB(menor, valor, maior) {
return (valor >= menor && valor <= maior) ? 1 : 0;
}
if(EntreAB(1, money, 9999)) {
GivePlayerMoney(playerid, money);
}
Muitas pessoas verificam, atй vбrias vezes no cуdigo, se o valor de uma variбvel estб entre 2 valores.
Exemplo: pawn Code:
pawn Code:
pawn Code:
Um dos sнtios onde ela iria ser bastante utilizada й, por exemplo, nos comandos para dar dinheiro aos jogadores(exemplo: /givecash <playerid> <valor>), e usamos o EntreAB para verificar se o valor introduzido(neste caso, o dinheiro) й vбlido ou nгo(exemplo: mнnimo de 1, mбximo de 9999). |
Transforma esse Stock para #define, ficaria melhor em diversos aspectos :P
|
#define EntreAB(%0,%1,%2) (%1 >= %0 && %1 <= %2)
Muitas pessoas verificam, atй vбrias vezes no cуdigo, se o valor de uma variбvel estб entre 2 valores.
Exemplo: pawn Code:
pawn Code:
pawn Code:
Um dos sнtios onde ela iria ser bastante utilizada й, por exemplo, nos comandos para dar dinheiro aos jogadores(exemplo: /givecash <playerid> <valor>), e usamos o EntreAB para verificar se o valor introduzido(neste caso, o dinheiro) й vбlido ou nгo(exemplo: mнnimo de 1, mбximo de 9999). |
if(1 >= money <= 9999) { /* codigo */ }
if (strcmp("/salario", cmdtext, true, 10) == 0)
{
SendClientMessage(playerid,0xFFB400FF, "[BpL] Todos player onlines receberam salбrio do mes ");
GivePlayerMoney(playerid, 5000);
new rand = random(sizeof(Cachorro));
new string[128];
format(string, sizeof(string),"[BpL] Todos player onlines receberam salбrio do mes ", Cachorro[rand]);
SendClientMessage(playerid, 0xFFB400FF,string);
return 1;
}
return 0;
}
CMD:resetmoney(playerid,params[]) {
ResetPlayerMoney(playerid);
new id=strval(params);
if(!strlen(params) || !IsNumeric(params)) {
SendClientMessage(playerid,0xFFB400FF,"|INFO| /resetmoney [playerid]");
}
else if(!IsPlayerConnected(id))
{
return SendClientMessage(playerid,0xFFB400FF,"Esse player nгo й um ativo");
}
else if(IsPlayerConnected(id)){
printf("ID: %d",id);
}
return 0;
}
COMANDO /salario APENAS PARA ADMIN SO COLOCAR SUA VARIAVEL
pawn Code:
pawn Code:
|
format(string, sizeof(string),"[BpL] Todos player onlines receberam salбrio do mes ", Cachorro[rand]);
SendClientMessage(playerid, 0xFFB400FF,string);
Na verdade, eu nгo usei "otimizar" no sentido de fluides, eu usei no sentido de nгo precisar escrever "forward" e nem "public", me expressei mal, desculpe!
Sobre as variбveis, obrigado, nem tinha reparado, arrumado |
E o que tem a ver com isso com otimizaзгo? й muito melhor utilizar um macro do que ficar utilizando forward, public, eu mesmo utilizo FUNCAO:: em vez de ficar declarando.
|
@PT, quando ele diz otimizar, ele diz no sentido de nгo precisar "escrever forward, public" e etc.
|
//
// FilterScript - Arco Iris nos Nomes
// Desenvolvida por Heisen/Biel
//
#include <a_samp>
new CoresDoNome[] =
{
0xFF0000FF,
0xFF1500FF,
0xFF3000FF,
0xFF4500FF,
0xFF6000FF,
0xFF7500FF,
0xFF9000FF,
0xFFA500FF,
0xFFC000FF,
0xFFD500FF,
0xFFFF00FF,
0xD5FF00FF,
0xC0FF00FF,
0xA5FF00FF,
0x90FF00FF,
0x75FF00FF,
0x60FF00FF,
0x45FF00FF,
0x30FF00FF,
0x15FF00FF,
0x00FF00FF,
0x00FF15FF,
0x00FF30FF,
0x00FF45FF,
0x00FF60FF,
0x00FF75FF,
0x00FF90FF,
0x00FFA5FF,
0x00FFC0FF,
0x00FFD5FF,
0x00FFFFFF,
0x00D5FFFF,
0x00C0FFFF,
0x00A5FFFF,
0x0090FFFF,
0x0075FFFF,
0x0060FFFF,
0x0045FFFF,
0x0030FFFF,
0x0015FFFF,
0x0000FFFF
};
public OnPlayerConnect(playerid)
{
if(playerid>123)
{
SetPlayerColor(playerid,CoresDoNome[playerid-123]);
}
else if(playerid>82)
{
SetPlayerColor(playerid,CoresDoNome[playerid-82]);
}
else if(playerid>41)
{
SetPlayerColor(playerid,CoresDoNome[playerid-41]);
}
else
{
SetPlayerColor(playerid,CoresDoNome[playerid]);
}
return 1;
}
· Sistema Bбsico de Arco iris nos nomes dos players E aн galera, criei uma codigo para deixar os player com o nick colorido no formato de arco iris ele funciona assim, quando alguйm player logar ela vai setar uma cor para ele com o determinado id dele quanto mais players mais cores vejam o exemplo abaixo. Exemplo: Joгo Taнs Marcelo Lucas Marcos Jonas Alberto Acho que essa FilterScript й um pouco gay. pawn Код:
|
public OnPlayerConnect(playerid)
{
SetPlayerColor(playerid,CoresDoNome[playerid]);
return 1;
}
if(strcmp("/renderse", cmd, true) == 0)
{
SetPlayerSpecialAction(playerid, 10);
return 1;
}
if(strcmp("/ligar", cmd, true) == 0)
{
SetPlayerSpecialAction(playerid, 11);
return 1;
}
if(strcmp("/desligar", cmd, true) == 0)
{
SetPlayerSpecialAction(playerid, 13);
return 1;
}
if(strcmp("/bebado", cmd, true) == 0)
{
ApplyAnimation(playerid, "PED", "WALK_DRUNK", 4.0, 1, 1, 1, 1, 0);
return 1;
}
if(strcmp("/bomba", cmd, true) == 0)
{
ClearAnimations(playerid);
ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/apontar", cmd, true) == 0)
{
ApplyAnimation(playerid, "ped", "ARRESTgun", 4.0, 0, 1, 1, 1, -1);
return 1;
}
if(strcmp("/merda", cmd, true) == 0)
{
ApplyAnimation(playerid, "RAPPING", "Laugh_01", 4.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/mascararse", cmd, true) == 0)
{
ApplyAnimation(playerid, "SHOP", "ROB_Shifty", 4.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/roubar", cmd, true) == 0)
{
ApplyAnimation(playerid, "SHOP", "ROB_Loop_Threat", 4.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/cruzarb", cmd, true) == 0)
{
ApplyAnimation(playerid, "COP_AMBIENT", "Coplook_loop", 4.0, 0, 1, 1, 1, -1);
return 1;
}
if(strcmp("/deitar", cmd, true) == 0)
{
ApplyAnimation(playerid, "BEACH", "bather", 4.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/abaixar", cmd, true) == 0)
{
ApplyAnimation(playerid, "ped", "cower", 3.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/vomitar", cmd, true) == 0)
{
ApplyAnimation(playerid, "FOOD", "EAT_Vomit_P", 3.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/comer", cmd, true) == 0)
{
ApplyAnimation(playerid, "FOOD", "EAT_Burger", 3.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/rap", cmd, true) == 0)
{
ApplyAnimation(playerid, "ON_LOOKERS", "wave_loop", 4.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/passaramao", cmd, true) == 0)
{
ApplyAnimation(playerid, "SWEET", "sweet_ass_slap", 4.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/cobrar", cmd, true) == 0)
{
ApplyAnimation(playerid, "DEALER", "DEALER_DEAL", 4.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/overdose", cmd, true) == 0)
{
ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/fumar", cmd, true) == 0)
{
ApplyAnimation(playerid, "SMOKING", "M_smklean_loop", 4.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/fumar2", cmd, true) == 0)
{
ApplyAnimation(playerid, "SMOKING", "F_smklean_loop", 4.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/sentar", cmd, true) == 0)
{
ApplyAnimation(playerid, "BEACH", "ParkSit_M_loop", 4.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/conversar", cmd, true) == 0)
{
ApplyAnimation(playerid, "PED", "IDLE_CHAT", 4.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/fodase", cmd, true) == 0)
{
ApplyAnimation(playerid, "PED", "****u", 4.0, 0, 0, 0, 0, 0);
return 1;
}
if(strcmp("/taichi", cmd, true) == 0)
{
ApplyAnimation(playerid, "PARK", "Tai_Chi_Loop", 4.0, 1, 0, 0, 0, 0);
return 1;
}
if(strcmp("/observar", cmd, true) == 0)
{
ApplyAnimation(playerid, "BAR", "dnk_stndF_loop", 4.0, 1, 0, 0, 0, 0);
return 1;
}
//---------------------Lista Animaзхes------------------------------------
if(strcmp("/animes", cmd, true) == 0)
{
SendClientMessage(playerid, ADMINFS_MESSAGE_COLOR, "Lista de Animes :");
SendClientMessage(playerid, ADMINFS_MESSAGE_COLOR, "/renderse /ligar /desligar /bebado /bomba /apontar /merda /mascararse");
SendClientMessage(playerid, ADMINFS_MESSAGE_COLOR, "/roubar /cruzarb /deitar /abaixar /vomitar /comer /rap /passaramao");
SendClientMessage(playerid, ADMINFS_MESSAGE_COLOR, "/cobrar /overdose /fumar /fumar2 /sentar /conversar /fodase /taichi");
SendClientMessage(playerid, ADMINFS_MESSAGE_COLOR, "/observar ");
return 1;
}
stock GetTypeValueArray(array[], type, mValues) {
new tempValue = array[0];
for(new i; i < mValues; i++) {
switch(type) {
case 0: {
if(tempValue < array[i]) {
tempValue = array[i];
}
}
case 1: {
if(tempValue > array[i]) {
tempValue = array[i];
}
}
}
} return tempValue;
}
new n_array[4] = {-1, 0, 1, 2};
main() {
printf("%i", GetTypeValueArray(n_array, 1, 4)); // Type 1 = Pegue o menor valor da array.
printf("%i", GetTypeValueArray(n_array, 0, 4)); // Type 2 = Pegue o maior valor da array.
// OUTPUT: -1, 2.
}
enum drInfo
{
Nome[32],
Float:Porta[6],
Interior[2]
// Adicione нcones do mapa, modelos da pickup, virtual world, se quiser.
}
new const
PortasPreDefinidas[3][drInfo] = {
{{"Banco"}, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {0, 3}},
{{"Prefeitura"}, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {0, 8}},
{{"Hotel"}, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {0, 14}}
// Vou explicar um pouquinho sobre isso que estб acima:
/*
{
{
"Hotel" // NOME QUE APARECERБ NO 3DTEXTLABEL DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
},
{
0.0, // COORDENADA X DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
0.0, // COORDENADA Y DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
0.0, // COORDENADA Z DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
0.0, // COORDENADA X DA SAНDA (ONDE /SAIR SERБ DIGITADO)
0.0, // COORDENADA Y DA SAНDA (ONDE /SAIR SERБ DIGITADO)
0.0 // COORDENADA Z DA SAНDA (ONDE /SAIR SERБ DIGITADO)
},
{
0, // INTERIOR DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
14 // INTERIOR DA SAНDA (ONDE /SAIR SERБ DIGITADO)
}
}
*/
};
public OnGameModeInit()
{
for(new i = 0; i < sizeof(PortasPreDefinidas); ++i)
{
// ENTRADA
AddStaticPickup(1318, 1, PortasPreDefinidas[j][Porta][0], PortasPreDefinidas[j][Porta][1], PortasPreDefinidas[j][Porta][2]);
CreateDynamic3DTextLabel(PortasPreDefinidas[j][Nome], 0x00FF00FF, PortasPreDefinidas[j][Porta][0], PortasPreDefinidas[j][Porta][1], PortasPreDefinidas[j][Porta][2] + 1, 10);
// SAНDA
AddStaticPickup(1318, 1, PortasPreDefinidas[j][Porta][3], PortasPreDefinidas[j][Porta][4], PortasPreDefinidas[j][Porta][5]);
CreateDynamic3DTextLabel("Saнda", 0xFF0000FF, PortasPreDefinidas[j][Porta][3], PortasPreDefinidas[j][Porta][4], PortasPreDefinidas[j][Porta][5] + 1, 10);
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp("/entrar", cmdtext, true))
{
for(new i = 0; i < sizeof(PortasPreDefinidas); ++i)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, PortasPreDefinidas[i][Porta][0], PortasPreDefinidas[i][Porta][1], PortasPreDefinidas[i][Porta][2]))
{
SetPlayerPos(playerid, PortasPreDefinidas[i][Porta][3], PortasPreDefinidas[i][Porta][4], PortasPreDefinidas[i][Porta][5]);
SetPlayerInterior(playerid, PortasPreDefinidas[i][Interior][1]);
break;
}
}
}
else if(!strcmp("/sair", cmdtext, true))
{
for(new i = 0; i < sizeof(PortasPreDefinidas); ++i)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, PortasPreDefinidas[i][Porta][3], PortasPreDefinidas[i][Porta][4], PortasPreDefinidas[i][Porta][5]))
{
SetPlayerPos(playerid, PortasPreDefinidas[i][Porta][0], PortasPreDefinidas[i][Porta][1], PortasPreDefinidas[i][Porta][2]);
SetPlayerInterior(playerid, PortasPreDefinidas[i][Interior][0]);
break;
}
}
}
return 1;
}
stock CellsNull(array[], size = sizeof(array))
{
for(new i; i < size; i++)
{
if(array[i] == '\0')
{
printf("Estas desperdiзando %d cйlulas", size-i);
break;
}
}
}
new string[50];
string = "бgua";
CellsNull(string);
string[0] = 'a';
string[5] = 'b';
pawn Код:
|
O certo seria criar uma rand para escolher cores aleatуrias independente do ID da pessoa ou da ordem das cores. Apenas um comentбrio.
|
public OnPlayerConnect(playerid)
{
SetPlayerColor(playerid, ConvertToColor(random(99),random(99),random(99),255) );
return 1;
}
stock ConvertToColor(RR,GG,BB,AA) return (RR*16777216)+(GG*65536)+(BB*256)+AA;
//Sistema AFK By: MatheusSpohr
new bool:AFK[MAX_PLAYERS], TaAFK[300], NaoTaAFK[300], Nome[24], MotivoAFK[30], PlayersAFK[128], Text3D:label[MAX_PLAYERS], texto3d[70];
CMD:afk(playerid, params[])
{
if(sscanf(params, "s[30]", MotivoAFK)) return SendClientMessage(playerid, Branco, "{FFFF00}[INFO]:{FF0000} Use: /AFK [Motivo]");
if(AFK[playerid] == true) return SendClientMessage(playerid, Branco, "{FFFF00}[INFO]:{FF0000} Vocк Jб Estб AFK, Use: /SairAFK");
//if(APlayerData[playerid][JobStarted] == true) return SendClientMessage(playerid, Branco, "{FFFF00}[INFO]:{FF0000} Vocк Nгo Pode Utilizar Este Comando Enquanto Estiver Realizando Um Trabalho.");
AFK[playerid] = true;
TogglePlayerControllable(playerid, 0);
GetPlayerName(playerid, Nome, sizeof(Nome));
SendAdminText(playerid, "/Afk", params);
format(TaAFK, sizeof(TaAFK), "{FFFF00}[Sistema AFK]: {FF1493}O Jogador {FFFFFF}%s [ID:%d] {FF1493}Estб Ausente.(Razгo:%s)", Nome, playerid, MotivoAFK);
SendClientMessageToAll(Branco, TaAFK);
format(texto3d, sizeof(texto3d),"{00FFFF}%s [ID:%d] Esta AFK\nMotivo: %s",Nome, playerid, MotivoAFK);
label[playerid] = Create3DTextLabel(texto3d, 0xFFFFFFFF, 30.0, 40.0, 50.0, 40.0, 0);
Attach3DTextLabelToPlayer(label[playerid], playerid, 0.0, 0.0, 0.7);
return 1;
}
CMD:sairafk(playerid, params[])
{
if(AFK[playerid] == false) return SendClientMessage(playerid, Branco, "{FFFF00}[INFO]:{FF0000} Vocк Nгo Estб AFK!");
AFK[playerid] = false;
TogglePlayerControllable(playerid, 1);
GetPlayerName(playerid, Nome, sizeof(Nome));
SendAdminText(playerid, "/SairAfk", params);
format(NaoTaAFK, sizeof(NaoTaAFK), "{FFFF00}[Sistema AFK]: {FF1493}O Jogador {FFFFFF}%s [ID:%d] {FF1493}Voltou Ao Jogo.", Nome, playerid);
GameTextForPlayer(playerid, "~W~Voce Saiu Do Modo AFK!", 5000, 1);
SendClientMessageToAll(Branco, NaoTaAFK);
Delete3DTextLabel(label[playerid]);
return 1;
}
CMD:playersafk(playerid, params[])
{
SendAdminText(playerid, "/PlayersAfk", params);
SendClientMessage(playerid, Branco, "{FFFF00}[Sistema AFK]: {FF1493} Players AFK:");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if((AFK[i] == true))
{
GetPlayerName(i, Nome, sizeof(Nome));
GameTextForPlayer(playerid, "~w~Players AFK:", 5000, 5);
format(PlayersAFK, 128, "{FFFF00}[AFK]:{FFFFFF} %s {FF1493}(Razгo:%s)", Nome, MotivoAFK);
SendClientMessage(playerid, Branco, PlayersAFK);
}
}
}
return 1;
}
//Sistema AFK By: MatheusSpohr
if(APlayerData[playerid][JobStarted] == true) return SendClientMessage(playerid, Branco, "{FFFF00}[INFO]:{FF0000} Vocк Nгo Pode Utilizar Este Comando Enquanto Estiver Realizando Um Trabalho.");
/*
ipsLuan - http://forum.sa-mp.com/member.php?u=194873
*/
stock Ler(name[], playerid)
{
new nomes[255];
new File:archive;
archive = fopen(name, io_read);
while(fread(archive, nomes))
SendClientMessage(playerid, 0xFFFFFFFF, nomes);
fclose(archive);
}
stock Escrever(name[], text[])
{
new string[128];
format(string, sizeof(string), "%s\r\n", text);
new File:archive;
archive = fopen(name, io_append);
fwrite(archive, string);
fclose(archive);
}
for(new i = 0; i < 6; i++)
Escrever("admins.cfg", "Luan_Argolo");
Ler("admins.cfg", playerid);
#define ETAPAS_TUTORIAL 5
forward Tutorial(playerid, etapa);
new const
tempoTutorial[ETAPAS_TUTORIAL] = {
1000, // duraзгo da etapa 1
2000, // duraзгo da etapa 2
3000, // duraзгo da etapa 3
4000, // duraзгo da etapa 4
5000 // duraзгo da etapa 5
};
public Tutorial(playerid, etapa) {
if(etapa < 0 || etapa > ETAPAS_TUTORIAL) {
return 1;
}
if(etapa == ETAPAS_TUTORIAL) {
// Fim do tutorial
return 1;
}
switch(etapa) {
case 0: {
// etapa 1
}
case 1: {
// etapa 2
}
case 2: {
// etapa 3
}
case 3: {
// etapa 4
}
case 4: {
// etapa 5
}
}
return SetTimerEx("Tutorial", tempoTutorial[etapa], 0, "ii", playerid, (etapa + 1));
}