PDA

View Full Version : [Ajuda] Dúvidas Curtas #1


Pages : 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Shadoww5
06/06/2011, 09:50 PM
É necessário colocar todos estes parâmetros:

AddPlayerClass(skin, Float:x, Float:y, Float:z, Float:Angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)

Fonte: http://wiki.sa-mp.com/wiki/AddPlayerClass

generaka
07/06/2011, 02:09 AM
tinha esquecido de colocar isso no meu game mod:

public OnPlayerRequestClass(playerid, classid) // Onde Irá ir Para Escolher os Bonecos
{
SetPlayerPos(playerid,1025.5751,-2140.7637,39.2032); // PLAYER
SetPlayerCameraPos(playerid,1019.7552,-2141.0266,37.7274); // CAMERA
SetPlayerCameraLookAt(playerid,1021.9974,-2140.9907,38.3012); // CAMERA
SetPlayerFacingAngle(playerid, 82.6125); // ANGULO
ApplyAnimation(playerid, "PARK", "Tai_Chi_Loop", 4.0, 1, 0, 0, 0, 0); // Animação No Inicio =D
return 1;
}

Obrigado do mesmo jeito!.

[R] ousenber [K]
07/06/2011, 05:02 PM
Qual a melhor forma de se usar "isso" ( é porque nao sei o nome ¬¬' )

Com o isso eu quero disser isso:

if(DylanInfo[playerid][dAdmin] >= 0)// o > com o = ou
if(DylanInfo[playerid][dAdmin] > 0)// o > sozinho sem o =

Porque sei que , se eu usar o ">=" quem for nivel de admin 0 Nao vai poder usar , so do 1 pra cima, mais se eu usar o ">" de nivel 0 pra cima podera usar , so que quero saber se algum desses e melhor q o outro ou e tudo igual ..

Shadoww5
07/06/2011, 05:09 PM
if(A == 2) --> Se A for igual à 2. A deve ser 2.

if(A != 2) --> Se A for diferente de 2. A poderia ser -1, 0, 1, 3, 4, ...

if(A > 2) --> Se A for maior que 2. A poderia ser 3, 4, 5, ...

if(A >= 2) --> Se A for maior ou igual à 2. A poderia ser 2, 3, 4, ...

if(A < 2) --> Se A for menor que 2. A poderia ser 1, 0, -1, ...

if(A <= 2) --> Se A for menor ou igual à 2. A poderia ser 2, 1, 0, ...

[R] ousenber [K]
07/06/2011, 05:15 PM
shadoww n e ao contrario no ">=" e no ">" não? aq se eu uso if( B >= 1) So nivel 2+ pode agora , se for if( B > 1) nv 1+ usa, mais vc ainda n tirou a duvida(pq isso eu sabia ;d)

Shadoww5
07/06/2011, 05:28 PM
O que eu postei acima está correto, sim.

..., so que quero saber se algum desses e melhor q o outro ou e tudo igual ..

Depende do que você quer fazer pois como você viu acima, cada sinal tem significados diferentes ... Caso seja essa duvida, essa é minha resposta. Caso não, peço que explique-a melhor.

[R] ousenber [K]
07/06/2011, 05:42 PM
Não , nem e duvida , e mais saber qual é melhor , Mais os dois sao praticamente Iguais, pelo que vi, Então eu esta me confundindo , Obrigado mais uma vez ;d

Bleed_Out
08/06/2011, 12:01 PM
#include <a_samp>
#include <cps>

Alguem poderia me passar o download da include <cps> Por favor?

[R] ousenber [K]
08/06/2011, 12:37 PM
http://forum.sa-mp.com/showthread.php?t=46782

SEARCH OWNED, uso search? pq achei de primeira ..

Bleed_Out
08/06/2011, 02:06 PM
O link de download de la esta quebrado ¬¬ '-' por isso vim aqui,Desde de ja agradeço :D

Bleed_Out
08/06/2011, 02:08 PM
http://forum.sa-mp.com/showthread.php?t=46782

SEARCH OWNED, uso search? pq achei de primeira ..

O link de download de la esta quebrado ¬¬ '-' por isso vim aqui,Desde de ja agradeço :D

Bleed_Out
08/06/2011, 02:11 PM
Mals pelo triple post '-' minha net e zuada desculpa emsmo

[R] ousenber [K]
08/06/2011, 02:14 PM
kkkk, tiple e fodz, mais jaé e so vc procurar no google então , achei esse topico la, procura no 4shared google sei la '--'

Shadoww5
08/06/2011, 05:02 PM
Seria a include cpstream.inc ?

//////////////////////////////////////////////////
//////////////////////////////////////////////////
/// Matraka's Checkpoint Streamer ///
/// ///
/// Author: [MPA]matraka_IDG ///
/// Contact: msn_matraka@gtabrasil.net ///
/// ///
/// ---===Infernus Development Group===--- ///
//////////////////////////////////////////////////
//////////////////////////////////////////////////

#include <a_samp>

//Natives
native CPS_AddCheckpoint(Float:X,Float:Y,Float:Z,Float:si ze,Float:spawn_dist);
native CPS_IsPlayerInCheckpoint(playerid,cpid);
native CPS_IsPlayerInAnyCheckpoint(playerid,cpid);
native CPS_RemoveCheckpoint(cpid);
native CPS_GetPlayerCheckpoint(playerid);

#define MAX_CHECKPOINTS 500

forward CPSERVICE_Handler();
enum cpinfo
{
Float:cpX,
Float:cpY,
Float:cpZ,
Float:cpsz,
cpsd,
};
new CPSERVICE_active;
new Checkpoints[MAX_CHECKPOINTS][cpinfo];
new UsedCPSlot[MAX_CHECKPOINTS];
new CPSERVICE_actualcp[MAX_PLAYERS];

stock CPS_AddCheckpoint(Float:X,Float:Y,Float:Z,Float:si ze,spawn_dist)
{
new cpid=1;
while(UsedCPSlot[cpid] == 1) cpid++;
if(CPSERVICE_active == 0){
SetTimer("CPSERVICE_Handler",500,true);
CPSERVICE_active=1;
}
UsedCPSlot[cpid]=1;
Checkpoints[cpid][cpX]=X;
Checkpoints[cpid][cpY]=Y;
Checkpoints[cpid][cpZ]=Z;
Checkpoints[cpid][cpsz]=size;
Checkpoints[cpid][cpsd]=spawn_dist;
return cpid;
}

stock CPS_IsPlayerInCheckpoint(playerid,cpid)
{
if(!IsPlayerInCheckpoint(playerid)) return 0;
if(CPSERVICE_actualcp[playerid] == cpid) return 1;
else return 0;
}

stock CPS_IsPlayerInAnyCheckpoint(playerid)
{
if(!IsPlayerInCheckpoint(playerid)) return 0;
if(CPSERVICE_actualcp[playerid] == 0) return 0;
else return 1;
}

stock CPS_GetPlayerCheckpoint(playerid) if(!IsPlayerInCheckpoint(playerid)) return 0; else return CPSERVICE_actualcp[playerid];

stock CPS_RemoveCheckpoint(cpid)
{
if(cpid == 0 || UsedCPSlot[cpid] == 0) return 0;
UsedCPSlot[cpid]=0;
return 1;
}

public CPSERVICE_Handler()
{
for(new i; i<MAX_PLAYERS; i++){
new Float:prevdist = 100000.000;
new prevcp;
for(new cpid=1; cpid < MAX_CHECKPOINTS; cpid++){
if(UsedCPSlot[cpid]) {
new Float:dist;
dist = CPSERVICE_getdist(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ]);
if(dist < prevdist){
prevdist = dist;
prevcp = cpid;
}
}
}
new cpid=prevcp;
if(CPSERVICE_getdist(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ]) < Checkpoints[cpid][cpsd]) {
if(CPSERVICE_actualcp[i] != cpid){
SetPlayerCheckpoint(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ],Checkpoints[cpid][cpsz]);
CPSERVICE_actualcp[i] = cpid;
}
} else {
if(CPSERVICE_actualcp[i] != 0){
CPSERVICE_actualcp[i] = 0;
DisablePlayerCheckpoint(i);
}
}
}
return 1;
}

stock CPSERVICE_getdist(playerid,Float:x2,Float:y2,Float :z2)
{
new Float:x1,Float:y1,Float:z1;
new Float:tmpdis;
GetPlayerPos(playerid,x1,y1,z1);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2 )+floatpower(floatabs(floatsub(y2,y1)),2)+floatpow er(floatabs(floatsub(z2,z1)),2));
return floatround(tmpdis);
}

Caso seja esta include, copie todo este codigo, crie um arquivo .txt, cole este codigo lá e entoa renomeie o arquivo.txt para cpstream.inc.

OBS: A include deve ser colocada na pasta do pawno no diretório include.

Shadoww5
11/06/2011, 11:29 AM
Alguem poderia me explicar como funciona este codigo abaixo ?

new findsub,subzeropos,subzero[50],sz[128];
format(sz,128,"%s",text);
while(subzeropos<=strlen(sz))
{
for(new d=0;d<MAX_PALAVRAS_SZ;d++)
{
findsub=strfind(sz,PPalavras[d],true,subzeropos);
if(findsub!=-1&&findsub==subzeropos)
{
strdel(sz,findsub,findsub+strlen(PPalavras[d]));
for(new h=0;h<strlen(PPalavras[d]);h++)
{
strcat(subzero,"*");
}
strins(sz,subzero,findsub,256);
strdel(subzero,0,strlen(subzero));
}
}
subzeropos++;
}

Sei que serve para substituir as palavras digitadas pelo jogador por "**", caso elas sejam proibidas. Mas queria entender esse codigo =D

Thanks in advance

rjjj
11/06/2011, 04:18 PM
@Shadoww5


Isto deve resolver o seu problema :mrgreen:.


Expliquei as linhas, poderia ter sido mais específico, mas faltaram informações como algumas variáveis :p.



new findsub,subzeropos,subzero[50],sz[128];//Cria variáveis
format(sz,128,"%s",text);//Iguala a variável text (padrão do OnPlayerText, representa o texto digitado pelo jogador), á variável sz (criada antes).
while(subzeropos<=strlen(sz))//Começa um Loop, que vai rodar enquanto a variável subzeropos for menor que a quantidade de caracteres (letras/numeros) da variável sz (que é o texto digitado pelo jogador, lembra ? (linha anterior))
{
for(new d=0;d<MAX_PALAVRAS_SZ;d++)//Começa um Loop dentro de outro loop, que vai rodar x vezes, sendo x o valor de "MAX_PALAVRAS_SZ"
{
findsub=strfind(sz,PPalavras[d],true,subzeropos);//Iguala a variável findsub ao número que representa a posição de um caractere (que é o PPalavras[d]) dentro do texto contido na variável sz (lembra dela xD ?).
if(findsub!=-1&&findsub==subzeropos)//Se a variável findsub(posição do caractere "PPalavras[d]") for diferente de -1 (ou seja, se o caractere estiver mesmo dentro do texto) e for igual á posição de início da "procura" dentro do texto em busca do caractere....
{
//... vai ser processado isto aqui :D
strdel(sz,findsub,findsub+strlen(PPalavras[d]));//Vai deletar parte da string (que está dentro da variável sz), para poder depois adicionar á essa parte os caracteres "***"
for(new h=0;h<strlen(PPalavras[d]);h++)
{
strcat(subzero,"*");//Armazena na variável subzero (que não tinha sido usada até agora), o seguinte texto: "****" (número de asteriscos vai variar dependendo do caractere em questão)
}
strins(sz,subzero,findsub,256);//Junta a sz (que teve uma parte deletada) com a subzero (que são os asteriscos, como dito antes).
strdel(subzero,0,strlen(subzero));//Limpa a variável subzero, de modo que o conteúdo dela seja apagado para que a mesma possa ser usada em outro giro do loop.
}
}
subzeropos++;//Acréscimo na variável subzero para que o loop não seja infinito, ou seja, prossiga.
}



Espero ter ajudado :p.

Shadoww5
11/06/2011, 04:45 PM
Valeu por tirar minha duvida =D

[R] ousenber [K]
12/06/2011, 05:29 PM
tenho 2 duvidas :D

1º : Como fazo pro ZCMD ter 2 comandos no mesmo Comando? Tipo tem no normal do SA-MP, /atender e /at(que é a mesma coisa) como fazo isso so que com ZCMD.

2º Como fazo pra tirar akeles nigoso Que fica amarelo nos interiores , que sai no lugar onde eles sao no GTA-OFF..

Espero que alguem tire as minhas duvidas '--'

Bleed_Out
12/06/2011, 05:35 PM
2º Como fazo pra tirar akeles nigoso Que fica amarelo nos interiores , que sai no lugar onde eles sao no GTA-OFF..

Espero que alguem tire as minhas duvidas '--'
Tenho essa mesma duvida ._.

Shadoww5
12/06/2011, 05:52 PM
2º Como fazo pra tirar akeles nigoso Que fica amarelo nos interiores , que sai no lugar onde eles sao no GTA-OFF...

public OnGameModeInit()
{
DisableInteriorEnterExits();
return 1;
}

ApolloRJ
14/06/2011, 09:11 PM
ai Shadoww5 bem que vc poderia me ajudar aqui hem.... hehe ou outra pessoa...


public OnPlayerDeath(playerid, killerid, reason)
{
Recompensa[killerid]++;
SetPlayerWantedLevel(killerid,GetPlayerWantedLevel (killerid) +1); //ESSE AQUI VAI MUDAR O NIVEL DE PROCURADO
SetPlayerScore(killerid,GetPlayerScore(killerid)+1 );
SendDeathMessage(killerid, playerid, reason);
new grana = Recompensa[playerid]*1000;
if(Recompensa[playerid] > 0)
{
AddReal(killerid,grana); //SE JOGADOR JA TIVER MATADO 3 PESSOAS E FOR MORTO, O ATUAL ASSASSINO GANHARÁ 3000
Recompensa[playerid] = 0;
return 1;
}
return 1;
}



public OnPlayerUpdate(playerid)
{
if(Recompensa[playerid] > 0)
{
new s[128];
format(s,sizeof(s),"Recompensa: R$ %d",Recompensa[playerid]);
Rec[playerid] = Create3DTextLabel(s,0xFFFF00AA,10.0,40.0,10.0,20.0 ,0);
Attach3DTextLabelToPlayer(Rec[playerid], playerid, 0.0, 0.0, 0.4);
return 1;
}
return 1;
}


funciona certinho porem não mostra o

SendDeathMessage(killerid, playerid, reason);


e depois que morro n apaga o texto em cima... com o valor do prémio... e tb.... não mostra 1000 mostra 1 ... cade os zeros... hehe.... será que alguém ajuda? desde ja Garadeço....

Shadoww5
15/06/2011, 10:04 PM
Seguindo a forma do codigo abaixo, seria necessário usar todos este "return 1;" ?

Caso não, quando que devo usar os "return" ?

public Exemplo(playerid)
{
if(GetPlayerMoney(playerid) > 1000)
{
if(GetPlayerScore(playerid) >= 5)
{
if(IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, -1, "EXEMPLO EXEMPLO EXEMPLO");
Variavel[playerid] = 1;
return 1;
}
return 1;
}
return 1;
}
return 1;
}

ScripterTroll
16/06/2011, 10:03 PM
Alguem poderia me explicar como funciona este codigo abaixo ?

new findsub,subzeropos,subzero[50],sz[128];
format(sz,128,"%s",text);
while(subzeropos<=strlen(sz))
{
for(new d=0;d<MAX_PALAVRAS_SZ;d++)
{
findsub=strfind(sz,PPalavras[d],true,subzeropos);
if(findsub!=-1&&findsub==subzeropos)
{
strdel(sz,findsub,findsub+strlen(PPalavras[d]));
for(new h=0;h<strlen(PPalavras[d]);h++)
{
strcat(subzero,"*");
}
strins(sz,subzero,findsub,256);
strdel(subzero,0,strlen(subzero));
}
}
subzeropos++;
}

Sei que serve para substituir as palavras digitadas pelo jogador por "**", caso elas sejam proibidas. Mas queria entender esse codigo =D

Thanks in advance

Isto está meio mal arrumado ._.


//
new f = strfind("palavreado",procurar,true);
if(f != -1)
{
for(new i = f , j = strlen("palavreado"); i < f; i++)
{
procurar[i] = '*';
}
}


De qualquer forma bom código, parabéns subzero !

Seguindo a forma do codigo abaixo, seria necessário usar todos este "return 1;" ?

Caso não, quando que devo usar os "return" ?

public Exemplo(playerid)
{
if(GetPlayerMoney(playerid) > 1000)
{
if(GetPlayerScore(playerid) >= 5)
{
if(IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, -1, "EXEMPLO EXEMPLO EXEMPLO");
Variavel[playerid] = 1;
}
}
}
return 1;
}

Retornar irá parar a callback atual e irá retorna para quem está lendo a mesma, portanto apenas use return quando queira retornar uma valor especifico ou parar o código atual.

Em Loops use break

Nake01
17/06/2011, 12:46 PM
Como boto o Numero Maximo de Slots Nessas Public.

public OnPlayerConnect(playerid)
{
GivePlayerMoney(playerid, 100000); //a quantidade de dinheiro que o player começa
GivePlayerWeapon(playerid, 5,1);
GivePlayerWeapon(playerid, 1,1);
TextDrawShowForPlayer(playerid, Textdraw0);
TextDrawShowForPlayer(playerid, Textdraw1);
new pName[ 30 ], string[ 256 ];
GetPlayerName(playerid, pName, 30);
format(string, 256, "{00C1E1}<{FF0000}+{00C1E1}> {000000}• {00C1E1}%s [ID:%d] {FF8080}Conectou ao servidor. [PlayersOnline/MaximoSlots]", pName, playerid);
SendClientMessageToAll(COLOR_BLUE,string);
UsePlayerPedAnims();
SetPlayerColor(playerid, COLOR_WHITE);


return 1;
}
//--------------------------------------------------------------------------------------------------------------------------------------------

public OnPlayerDisconnect(playerid, reason)
{
new PlayerName[MAX_PLAYER_NAME];
new string[56];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
switch(reason)
{
case 0: format(string, sizeof(string), "{00C1E1}<{FF0000}-{00C1E1}> {000000}• {00C1E1} %s {FF8080}saiu do servidor. [PlayersOnline/MaximoSlots] (Crash/Conexão)", PlayerName,);
case 1: format(string, sizeof(string), "{00C1E1}<{FF0000}-{00C1E1}> {000000}• {00C1E1} %s {FF8080}saiu do servidor. [PlayersOnline/MaximoSlots] (Conta própria)", PlayerName);
case 2: format(string, sizeof(string), "{00C1E1}<{FF0000}-{00C1E1}> {000000}• {00C1E1} %s {FF8080}saiu do servidor. [PlayersOnline/MaximoSlots] (Kickado/Banido)", PlayerName);
}
SendClientMessageToAll(0xEAA25AAA, string);
return 1;
}

Shadoww5
17/06/2011, 01:38 PM
Han ? '-'

Nake01
17/06/2011, 02:56 PM
Quero botar pra quando o cara sair aparecer assim "O Jogando %s Saiu do Servidor [NumeroDePlayersOnline/MaximosDeSlots.

The Knight
17/06/2011, 04:12 PM
Topo:

new kJ[ MAX_PLAYER_NAME ];
new kPlayers = 0;
new sStr[ 218 ];
new kOnline;

public OnPlayerDisconnect:

public OnPlayerDisconnect( playerid, reason )
{
kPlayers--;
GetPlayerName( playerid, kJ, sizeof( kJ ) );
if( reason == 0 ) return format( sStr, sizeof( sStr ), "%s saiu do servidor (Crash)! [%d/%d]", kJ, kJogadores(), GetMaxPlayers() );
if( reason == 0 ) return format( sStr, sizeof( sStr ), "%s saiu do servidor (Vontade Própria)! [%d/%d]", kJ, kJogadores(), GetMaxPlayers() );
if( reason == 0 ) return format( sStr, sizeof( sStr ), "%s saiu do servidor (Kickado/Banido)! [%d/%d]", kJ, kJogadores(), GetMaxPlayers() );
SendClientMessageToAll( Branco, sStr );
return true;
}

public OnPlayerConnect:
public OnPlayerConnect( playerid ) return kPlayers++;

stock kJogadores:

stock kJogadores()
{
for( new i = 0; i < MAX_PLAYERS; i++ )
{
if( IsPlayerConnected( i ) )
{
kPlayers++;
}
}
return kPlayers;
}

TheGarfield
17/06/2011, 06:44 PM
stock gConnected()
{
static interatorir;
for(new i; i < MAX_PLAYERS; ++i)
{
if(IsPlayerConnected(i))
{
interatorir++;
}
}
return interatorir--;
}



No OnPlayerDisconnected



[pawn]
static string[100], n[24];
format(string, sizeof(string),"[INFO]: %s saiu do servidor, ficando: %d/%d",GetPlayerName(playerid, n, 24), gConnected(), GetMaxPlayers());
SendClientMessageToAll(-1, string);



mais rápido ...
(em minha lógica).

Ricop522
17/06/2011, 07:47 PM
stock GetConnectedPlayers() {
static i;
while (i < MAX_PLAYERS)
{
if( IsPlayerConnected(i) ) i++;
}
return i;


Acho que isso funciona, hm

The Knight
17/06/2011, 07:53 PM
stock GetConnectedPlayers() {
static i;
while (i < MAX_PLAYERS)
{
if( IsPlayerConnected(i) ) i++;
}
return i;


Acho que isso funciona, hm

Não precisa de usar static, pode ser new mesmo.
Mas sim, penso que funcione também.

ApolloRJ
18/06/2011, 11:45 AM
como faço um IF tipo esse aqui ..

if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> Você não é um administrador!");

so que com isso ........


if(PlayerVip[playerid] == 1)
{
//Função
}


eu queria por numa linha so... para retornar caso o cara n seja vip.....

2) um.... if... quem for carona... não poder usar o comando...... eu reparei que o carona.. faz um teleporte.. de veiculo... ele estando no carona... ai.. pensei que com um If.. poderia impedir dele fazer... o comando.... quando estiver em carona.. somente o piloto.....


alguém pode ajudar nesses 2 comando? desde já agradeço!!

By ApolloRJ

The Knight
18/06/2011, 12:02 PM
if( PlayerVip[ playerid ] != 1 ) return SendClientMessage( playerid, RED, "<!> Você não é um membro Vip!" );
if( !strcmp( cmdtext, "/kTele", true ) )
{
new kState = GetPlayerState( playerid );
if( kState == PLAYER_STATE_DRIVER )
{
//Funções
}
else SendClientMessage( playerid, -1, "<!> Só pode usar este comando se estiver a dirigir!" );
return true;
}

Se quiser que quando ele não estiver em veiculo também não possa usar o comando, coloca este:
if( !strcmp( cmdtext, "/kTele", true ) )
{
new kState = GetPlayerState( playerid );
if( !IsPlayerInAnyVehicle( playerid ) ) return SendClientMessage( playerid, -1, "<!> Você só pode teleportar-se se estiver em um veiculo!" );
if( kState == PLAYER_STATE_DRIVER )
{
//Funções
}
else SendClientMessage( playerid, -1, "<!> Só pode usar este comando se estiver a dirigir!" );
return true;
}

ApolloRJ
18/06/2011, 12:55 PM
n sei se vc me entendeu..... eu queria so um if... uma unica linha... de comando.. para quem tiver como passageiro... não usar o comando.. teleporte ou /tune ou etc..... e possivel.. ou so com esse esquema ai seu.... outra coisa... obrigado pela if.. playervip funciona perfeitamente quebrei a cabeça tentando faze isso hehe....

The Knight
18/06/2011, 01:02 PM
Coloque isto por baixo do public OnPlayerCommandText, e por cima do primeiro comando que tiver:
public OnPlayerCommandText( playerid, cmdtext[] )
{
new kState = GetPlayerState( playerid );
if( kState == PLAYER_STATE_PASSENGER ) return SendClientMessage( playerid, -1, "Você não pode usar NENHUM comando se estiver como passageiro!" );
// Aqui em baixo coloque os seus comandos
return true;
}

ScripterTroll
18/06/2011, 03:43 PM
Não precisa de usar static, pode ser new mesmo.
Mas sim, penso que funcione também.

Sim, não precisa, até porque static fará com que não funcione ..


GetConnectedPlayers()
{
new i;
while (i < MAX_PLAYERS)
{
if(IsPlayerConnected(i)) i++;
}
return i;
}

The Knight
18/06/2011, 05:39 PM
Sim, não precisa, até porque static fará com que não funcione ..


GetConnectedPlayers()
{
new i;
while (i < MAX_PLAYERS)
{
if(IsPlayerConnected(i)) i++;
}
return i;
}


Eu ia fazer da mesma forma que você fez, mas achei mais prático fazer da forma como fiz para ele perceber melhor.
Até pensei no caso de ele não saber o que significa "while", mais um motivo para fazer diferente.

Ricop522
18/06/2011, 09:30 PM
Eu usei static porque eu peguei o código do Garfield e ajeitei.

ScripterTroll
18/06/2011, 10:02 PM
Ajeitou mas mesmo assim deixou o código ainda correto, digamos, o static ficará com último valor setado na variável, isto faz com que funcione apenas 1 vez.

Atenciosamente

ApolloRJ
19/06/2011, 06:20 PM
ai alguém sabe o que e isso mo meu console do serve.. desconfio q e uma invasão raquer.. ou algo do género.. olha o ip do cidadão....


[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85
[15:13:42] BAD RCON ATTEMPT BY: 201.95.222.85


tive q ate fechar o server... alguém tem uma ideia o que e isso?? e como evitar isso??

olhando no admin... vi o nome do cara.. e o ip la bate.... 201.95.222.85=Artur_aaaa


Edit :

Ninguém Sabe o que e isso não?

ScripterTroll
21/06/2011, 12:30 AM
O único jeito é desativar a rcon, apenas coloque isto na inicialização do servidor.

SendRconCommand("rcon 0");

Tanto main, como FilterscriptInit ou GameModeInit

Abraços

Shadoww5
21/06/2011, 01:08 AM
Codigo 1:
if(strcmp(cmd, "/chat", true) == 0 || strcmp(cmd, "/c", true) == 0)
{
if(Admin[playerid] < 1) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você não está autorizado a usar este comando.");
if(AFK[playerid] == 1) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você está AFK.");
new string[256], n[24];
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, -1, "USO: /chat [TEXTO]");
GetPlayerName(playerid, n, sizeof(n));
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(Admin[i] > 0)
{
format(string, sizeof(string), "{FCF405}[CHAT ADM]{FFFFFF} %s: %s", n, result);
SendClientMessage(i, -1, string);
}
}
return 1;
}
Codigo 2:
if(strcmp(cmd, "/chat", true) == 0 || strcmp(cmd, "/c", true) == 0)
{
if(Admin[playerid] < 1) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você não está autorizado a usar este comando.");
if(AFK[playerid] == 1) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você está AFK.");
new string[256], n[24], texto[256];
texto = strtok(cmdtext, idx);
if(!strlen(texto)) return SendClientMessage(playerid, -1, "USO: /chat [TEXTO]");
GetPlayerName(playerid, n, sizeof(n));
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(Admin[i] > 0)
{
format(string, sizeof(string), "{FCF405}[CHAT ADM]{FFFFFF} %s: %s", n, texto);
SendClientMessage(i, -1, string);
}
}
return 1;
}

Se eu usar o codigo 1 tudo o que eu digitar após o comando será mostrado aos administradores.

Contudo, se o codigo a ser usado for o 2 só será possivel ver a primeira palavra.

Por que ?

SuB_ZeRo0_
21/06/2011, 02:15 AM
Codigo 1:
if(strcmp(cmd, "/chat", true) == 0 || strcmp(cmd, "/c", true) == 0)
{
if(Admin[playerid] < 1) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você não está autorizado a usar este comando.");
if(AFK[playerid] == 1) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você está AFK.");
new string[256], n[24];
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, -1, "USO: /chat [TEXTO]");
GetPlayerName(playerid, n, sizeof(n));
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(Admin[i] > 0)
{
format(string, sizeof(string), "{FCF405}[CHAT ADM]{FFFFFF} %s: %s", n, result);
SendClientMessage(i, -1, string);
}
}
return 1;
}
Codigo 2:
if(strcmp(cmd, "/chat", true) == 0 || strcmp(cmd, "/c", true) == 0)
{
if(Admin[playerid] < 1) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você não está autorizado a usar este comando.");
if(AFK[playerid] == 1) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você está AFK.");
new string[256], n[24], texto[256];
texto = strtok(cmdtext, idx);
if(!strlen(texto)) return SendClientMessage(playerid, -1, "USO: /chat [TEXTO]");
GetPlayerName(playerid, n, sizeof(n));
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(Admin[i] > 0)
{
format(string, sizeof(string), "{FCF405}[CHAT ADM]{FFFFFF} %s: %s", n, texto);
SendClientMessage(i, -1, string);
}
}
return 1;
}

Se eu usar o codigo 1 tudo o que eu digitar após o comando será mostrado aos administradores.

Contudo, se o codigo a ser usado for o 2 só será possivel ver a primeira palavra.

Por que ?

Pois o strtok pega apenas a próxima palavra pelo que eu saiba, ele não pode adivinhar se é para pegar tudo ou apenas uma palavra, ai ele só pega a próxima depois do espaço.

Shadoww5
21/06/2011, 08:46 AM
Mas não tem nenhuma outra forma de mandar todo o conteudo da frase sem ser com este codigo todo ?

Dá pra fazer isso com o proprio strtok ?

SuB_ZeRo0_
21/06/2011, 04:42 PM
Mas não tem nenhuma outra forma de mandar todo o conteudo da frase sem ser com este codigo todo ?

Dá pra fazer isso com o proprio strtok ?

Pelo que eu saiba, com strtok não.

Shadoww5
21/06/2011, 05:27 PM
Ah ok =D

steki.
21/06/2011, 06:46 PM
Parece que vocês vivem em um mundo subaquatico sem sscanf.

Alem de ser melhor, é bem mais fácil

Shadoww5
21/06/2011, 06:49 PM
Pra usar o sscanf tem que colocar somente a stock no GM ou tem que colocar mais coisa ?

steki.
21/06/2011, 06:57 PM
COmo assim?

A unica função do sscanf é separar uma string. Exemplo:

sscanf( cmdtext, "{s[7]}u", player );

Isso separa o que o player digitou no comando. tipo /silenc player

Falcon.
21/06/2011, 09:43 PM
Pra usar o sscanf tem que colocar somente a stock no GM ou tem que colocar mais coisa ?

Basta adicionar isto em seu script

native sscanf(const data[], const format[], {Float,_}:...);
native unformat(const data[], const format[], {Float,_}:...) = sscanf;
E utilizar o plugin sscanf.

Comando ZCMD + sscanf:


CMD:veiculo(playerid, params[])
{
static veiculoid, cor1, cor2, veiculocriado;
if(sscanf(params, "ddd", veiculoid, cor1, cor2)) return SendClientMessage(playerid, CorBranco, "Use: /veiculo [id] [cor1] [cor2]");

static Float:PosX, Float:PosY, Float:PosZ, Float:Angulo;
GetPlayerFacingAngle(playerid, Angulo);
GetPlayerPos(playerid, PosX, PosY, PosZ);
veiculocriado = CreateVehicle(veiculoid, PosX, PosY, PosZ, Angulo, cor1, cor2, 0);
return true;
}



COmo assim?

A unica função do sscanf é separar uma string. Exemplo:

sscanf( cmdtext, "{s[7]}u", player );

Isso separa o que o player digitou no comando. tipo /silenc player

Não, esta não é a única função.
você também pode comparar valores inseridos em um dialog, verificando se são numeros ou strings, entre várias outras coisas.


Atenciosamente,
Falcon.

steki.
21/06/2011, 11:53 PM
Enfim, un separador de strings. É o que ele faz. Tem várias outras ultilidades PROVENIENTES da separação de strings (:

ApolloRJ
24/06/2011, 07:24 PM
Basta adicionar isto em seu script

native sscanf(const data[], const format[], {Float,_}:...);
native unformat(const data[], const format[], {Float,_}:...) = sscanf;
E utilizar o plugin sscanf.

Comando ZCMD + sscanf:


CMD:veiculo(playerid, params[])
{
static veiculoid, cor1, cor2, veiculocriado;
if(sscanf(params, "ddd", veiculoid, cor1, cor2)) return SendClientMessage(playerid, CorBranco, "Use: /veiculo [id] [cor1] [cor2]");

static Float:PosX, Float:PosY, Float:PosZ, Float:Angulo;
GetPlayerFacingAngle(playerid, Angulo);
GetPlayerPos(playerid, PosX, PosY, PosZ);
veiculocriado = CreateVehicle(veiculoid, PosX, PosY, PosZ, Angulo, cor1, cor2, 0);
return true;
}





Não, esta não é a única função.
você também pode comparar valores inseridos em um dialog, verificando se são numeros ou strings, entre várias outras coisas.


Atenciosamente,
Falcon.

gostei do comando.. como faço isso quando repetir o comando o carro criado anterior.. ser apagado??

errro:


C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(7407) : warning 204: symbol is assigned a value that is never used: "veiculocriado"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

[S]trong
24/06/2011, 07:32 PM
new Vehicle[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
Vehicle[playerid] = -1;
return true;
}

CMD:veiculo(playerid, params[])
{
static veiculoid, cor1, cor2, veiculocriado;
if(sscanf(params, "ddd", veiculoid, cor1, cor2))
return SendClientMessage(playerid, CorBranco, "Use: /veiculo [id] [cor1] [cor2]");
static Float:PosX, Float:PosY, Float:PosZ, Float:Angulo;
GetPlayerFacingAngle(playerid, Angulo);
GetPlayerPos(playerid, PosX, PosY, PosZ);
if(Vehicle[playerid] != -1)
{
DestroyVehicle(Vehicle[playerid]);
}
Vehicle[playerid] = CreateVehicle(veiculoid, PosX, PosY, PosZ, Angulo, cor1, cor2, 0);
return true;
}

Shadoww5
25/06/2011, 06:20 PM
Eu estava vendo o FilterScript Lasanha Admin System (http://forum.sa-mp.com/showthread.php?t=218353) e percebi que, apesar de ter feito os comandos em zcmd, o FS não usa a include zcmd.

E na pasta include não tem esta include também.

Então eu queria saber como que ele fez isso para, assim, eu não precisar usar a include.

rjjj
25/06/2011, 06:48 PM
Eu estava vendo o FilterScript Lasanha Admin System (http://forum.sa-mp.com/showthread.php?t=218353) e percebi que, apesar de ter feito os comandos em zcmd, o FS não usa a include zcmd.

E na pasta include não tem esta include também.

Então eu queria saber como que ele fez isso para, assim, eu não precisar usar a include.


Bem, pelo que vi o autor do Filterscript utilizou sim as funções do zcmd, entretanto, colocou as includes em forma de comentário :p:


#include a_samp
#include Dini
//#include Zcmd



Como ele utilizou as funções do Zcmd, mas sem defini-las (pois elas estão na include, que não foi incluída :mrgreen:) o FS gera vários warnings ao compilar :mrgreen:.


Não há como utilizar as funções do Zcmd sem definir a include, portanto, deve-se transformar o comentário em código antes de compilar :p.






Mas, e por que que o error undefined symbol não foi gerado devido aos códigos não definidos :p?



Resposta:



Por que no zcmd, o formato dos códigos dos comandos coincide com uma das formas de se definir uma função em Pawn, que é essa :mrgreen::




LoL(playerid)
{
print("LOL ! :D");
return 1;
}



Além dessa, há outras formas mais conhecidas, ou seja, usando stock, public, static, entre outras :p.



Veja este comando do Filterscript citado por você, feito em zcmd, por exemplo:



CMD:setadmin(playerid, params[])
return cmd_setlevel(playerid, params);



O compilador, na ausência de uma definição do símbolo CMD: lê o comando como se fosse uma função:




stock CMD:setadmin(playerid, params[])
return cmd_setlevel(playerid, params);




Claro, que a criação com stock tem suas particularidades, mas acho que deu pra entender :mrgreen:.



Espero ter ajudado :p.

Shadoww5
25/06/2011, 07:32 PM
Valeu ae ! Deu pra entender, sim.

[FTC]Scorpion
30/06/2011, 11:46 PM
Então. Eu dei uma pesquisada meio básica no fórum, e não achei exatamente o que eu queria.

Eu queria criar um comando pra mudar o Skin do player, por exemplo, /MeuSkin [ID] . E nele, eu queria bloquear alguns skins apenas para Administradores logados na rcon.

Existe algum jeito de fazer isso?

Sou novato, e não criei um tópico no fórum, porque eu tenho um pouco de medo, sei lá... :sad:

Shadoww5
30/06/2011, 11:51 PM
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/meuskin", true) == 0)
{
new s[256];
s = strtok(cmdtext, idx);
if(!strlen(s)) return SendClientMessage(playerid, 0xFF0000FF, "Uso: /meuskin [skin]");
new skin = strval(s);
if(skin == 217 || skin == 211)
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "As skins 217 e 211 só podem ser usadas por administradores logados na RCON.");
}
return 1;
}
return 0;
}

[FTC]Scorpion
30/06/2011, 11:59 PM
Bom, eu sou bem novato mesmo... Deram 2 erros e 1 aviso.

Seguem:

C:\Users\Casa\Desktop\SAMP\gamemodes\[PSA].pwn(954) : error: 017: undefined symbol "strtok"
C:\Users\Casa\Desktop\SAMP\gamemodes\[PSA].pwn(954 -- 955) : error: 033: array must be indexed (variable "s")
C:\Users\Casa\Desktop\SAMP\gamemodes\[PSA].pwn(954 -- 955) : warning: 215: expression has no effect

Falcon.
01/07/2011, 12:14 AM
Olá [FTC]Scorpion.

Adicione a stock strtok em seu script.


strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}

new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}

Atenciosamente,
[Y]Falcon.

[FTC]Scorpion
01/07/2011, 12:25 AM
Não fique bravo, :S

C:\Users\Casa\Desktop\SAMP\gamemodes\[PSA].pwn(952) : error: 017: undefined symbol "idx"

:S

Falcon.
01/07/2011, 12:33 AM
Olá [FTC]Scorpion.

Logo no começo de sua public OnPlayerCommandText, crie a variavel que corresponde ao erro.


public OnPlayerCommandText(playerid, cmdtext[])
{
new idx;
//Seus comandos abaixo...
return 0;
}

Atenciosamente,
[Y]Falcon.

[FTC]Scorpion
01/07/2011, 12:58 AM
Estranho, não funcionou. Aliás, quando eu consegui arrumar, e compilar, quando eu entrava no servidor, e digitava o comando, não aparecia nada, nem a mensagem de comando inválido. Então, eu tentei fazer isso em um GM novo, e fiz a mesma coisa que tinha colocado no outro GM. Quando eu fui compilar, o compilador parou de funcionar, e precisou ser fechado. o_O

Deixa pra lá, acho que não vou conseguir isso, :(

Obrigado mesmo assim, ^^

Shadoww5
01/07/2011, 01:10 AM
Isso acontece às vezes ... Tente assim:

public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256], idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/meuskin", true) == 0)
{
new s[256];
s = strtok(cmdtext, idx);
if(!strlen(s)) return SendClientMessage(playerid, 0xFF0000FF, "Uso: /meuskin [skin]");
new skin = strval(s);
if(skin == 217 || skin == 211)
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "As skins 217 e 211 só podem ser usadas por administradores logados na RCON.");
}
return 1;
}
return 0;
}

Falcon.
01/07/2011, 01:19 AM
Olá [FTC]Scorpion.

caso não conssiga ou deseje algo melhor, utilize ZCMD com sscanf.

[Include] [INC] zcmd 0.3.1 | Fast & Simple Command Processor (updated 30/10/2009) (http://forum.sa-mp.com/showthread.php?t=91354)

[Plugin] sscanf 2.0 (http://forum.sa-mp.com/showthread.php?t=120356)


Aprenda utilizar lendo este tutorial:

[Tutorial] Usar ZCMD com SSCANF (http://forum.sa-mp.com/showthread.php?t=204856)


abaixo um simples comando utilizando os sistemas acima:

CMD:kickar(playerid, params[])
{
static PlayerID, Motivo[30];
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000AA, "Comando reservado somente para administradores.");
if(sscanf(params, "ds[30]", PlayerID, Motivo)) return SendClientMessage(playerid, 0xFFFFFFAA, "Use: /kickar [playerid] [motivo]");
if(!IsPlayerConnected(PlayerID)) return SendClientMessage(playerid, 0xFF0000AA, "Este jogador não está conectado.");

static string[93], PlayerName[24];
GetPlayerName(PlayerID, PlayerName, 24);
format(string, sizeof(string), "[KICK] %s foi kickado do servidor || Motivo: %s", PlayerName, Motivo);
SendClientMessageToAll(0xFFFFFFAA, string);
Kick(PlayerID);
return true;
}


Atenciosamente,
[Y]Falcon.

[FTC]Scorpion
01/07/2011, 01:20 AM
Puts, mals por enxer o saco...

Então, eu digitei /MeuSkin. Aí apareceu "Uso: /MeuSkin [Skin]", normal.
Aí eu digito /MeuSkin 26 (por exemplo), e não acontece nada. É como se o comando fosse só pra aparecer "Uso: /MeuSkin [skin]"

õ.O
_
@ EDIT

Ok, vou ler sobre o zcmd.

Obrigado desde já.

crush_
01/07/2011, 01:41 AM
Scorpion;1270011']Puts, mals por enxer o saco...

Então, eu digitei /MeuSkin. Aí apareceu "Uso: /MeuSkin [Skin]", normal.
Aí eu digito /MeuSkin 26 (por exemplo), e não acontece nada. É como se o comando fosse só pra aparecer "Uso: /MeuSkin [skin]"

õ.O
_
@ EDIT

Ok, vou ler sobre o zcmd.

Obrigado desde já.

Já está usando o 'zcmd' como o falcon disse?

Caso sim:


CMD:meuskin(playerid, params[])
{
static IDSkin;
if(!params[0]) return SendClientMessage(playerid, -1, "Use: /meuskin [ID DA SKIN]");
SetPlayerSkin(playerid, IDSkin);
return 1;
}

Shadoww5
01/07/2011, 01:45 AM
stock Float:floatrand(Float:min, Float:max) //By Alex "Y_Less" Cole
{
new imin = floatround(min);
return floatdiv(float(random((floatround(max)-imin)*100)+(imin*100)),100.0);
}


Para que serve o floatrand ?

SuB_ZeRo0_
01/07/2011, 01:46 AM
Já está usando o 'zcmd' como o falcon disse?

Caso sim:


CMD:meuskin(playerid, params[])
{
static IDSkin;
if(!params[0]) return SendClientMessage(playerid, -1, "Use: /meuskin [ID DA SKIN]");
SetPlayerSkin(playerid, IDSkin);
return 1;
}


Você não definiu IDSkin, assim retornará 0 e a skin sempre será do CJ.

Falcon.
01/07/2011, 01:47 AM
Para que serve o floatrand ?


http://wiki.sa-mp.com/wiki/Useful_Functions#floatrand

[R] ousenber [K]
01/07/2011, 08:57 PM
Qual a diferença deu usar esse if assim(abaixo) e o outro(abaixo do abaixo :D )

if(Assim1[playerid][Lider] == 1 || Assim1[playerid][Membro] == 1)

//Agora a outra maneira

if(Assim2[playerid][Lider] == 1 && Assim2[playerid][Membro] == 1)

O que que muda? ou da na mesma?

Shadoww5
01/07/2011, 09:02 PM
No primeiro caso para a função ser efetuada o jogador deve ser lider 1 OU membro 1.

Já no outro, ele deve ser lider 1 E membro 1.

[FTC]Scorpion
01/07/2011, 11:06 PM
Seguinte, eu fiz um comando de pegar um pacote de armas, tudo certinho ... Só que eu queria que quando o jogador pegasse o pacote, descontasse dinheiro dele. Porém, se ele está sem grana, ao invés de bloquear, ele deixa o saldo do cara negativo... Eu queria que bloqueasse...

Segue o comando...

if (strcmp("/PAW", cmdtext, true, 10) == 0) // Pacote de Armas Walking
{
SendClientMessage(playerid,ROSA,"~> Você pegou armas Walking!");
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid,24,9999);
GivePlayerWeapon(playerid,25,9999);
GivePlayerWeapon(playerid,34,9999);
SetPlayerArmour(playerid, 100.0);
SetPlayerHealth(playerid, 100.0);
GivePlayerMoney(playerid, -2500);

return 1;
}

Grato desde já.

crush_
01/07/2011, 11:58 PM
if (strcmp("/PAW", cmdtext, true, 10) == 0) // Pacote de Armas Walking
{
if(GetPlayerMoney(playerid) < 2500)
{
SendClientMessage(playerid, ROSA, "Você não tem dinheiro suficiente!");
}
else
{
SendClientMessage(playerid, ROSA, "~> Você pegou armas Walking!");
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid,24,9999);
GivePlayerWeapon(playerid,25,9999);
GivePlayerWeapon(playerid,34,9999);
SetPlayerArmour(playerid, 100.0);
SetPlayerHealth(playerid, 100.0);
GivePlayerMoney(playerid, -2500);
}
return 1;
}

[FTC]Scorpion
02/07/2011, 12:16 AM
Valeu aí, Crush!

Abraço!

Transferencia
02/07/2011, 02:32 AM
if (strcmp("/paw", cmdtext, true, 4) == 0) // Pacote de Armas Walking
{
if( GetPlayerMoney( playerid ) < 2500 ) return SendClientMessage( playerid, 0xFFF000AA, "Não tem dinheiro suficiente!" );
SendClientMessage(playerid,ROSA,"~> Você pegou armas Walking!");
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid,24,9999);
GivePlayerWeapon(playerid,25,9999);
GivePlayerWeapon(playerid,34,9999);
SetPlayerArmour(playerid, 100.0);
SetPlayerHealth(playerid, 100.0);
GivePlayerMoney(playerid, -2500);
}
return 1;
}

[FTC]Scorpion
02/07/2011, 08:09 AM
uahauha valeu pra vocês, também, ;D

Shadoww5
02/07/2011, 03:58 PM
Qual a diferença entre new e static ?

Ricop522
02/07/2011, 04:08 PM
I think I'll clarify a bit here, as those definitions were a little bit off. In a script you have global memory and stack/heap memory. The global memory is where all your global variables are stored, as they're not different in different functions. This memory is actually included into the .amx, which is why a tiny .pwn can produce a huge .amx. The stack and heap are allocated when you execute the script and store function local variables, this is because a function can call itself, so you need two copies of the same variable - if they were global they would be the same variable.

Local static variables are essentially global variables, but you can only use them in one function. If you decompile a .amx with static locals you will see them listed as globals - them being limited to one function is purely a compiler restriction, there's actually nothing in the VM itself to enforce this.

A const variable is not variable, it is just like a macro in that it always has the same value - it's just useful for defining things.

A global static variable is limited to only being used in the file in which it's declared (technically section, a file can have multiple sections, but a section can't have multiple files and the default is one section per file). These are used extensively through YSI to hide implementation details from people and stop them breaking things. But again, this is purely a compiler restriction.

Edit: You said you've been told 201 times, but it's clearly not sunk in yet, so I'm telling you a 202nd time: Don't use 256 for command variables, it's entirely pointless and a waste, the effects of which you are clearly seeing in your code or you wouldn't be getting heap space overflows when you compile.

I'm also going to tell you to use zcmd and sscanf - you say that you use those variables in almost every command, you'll use them in next to none if you bother to code properly, plus your code will be faster and more secure.

PT-BR


Acho que vou esclarecer um pouco aqui, como essas definições foram um pouco off. Em um script você tem memória global e pilha / memória heap. A memória global é o lugar onde todas as suas variáveis ​​globais são armazenadas, como eles não são diferentes em diferentes funções. Esta memória é realmente incluído no amx., Razão pela qual uma pequena. Próprias podem produzir uma enorme. Amx. Pilha e heap são alocados quando você executar o script e variáveis ​​loja local da função, porque esta é uma função pode chamar a si mesma, então você precisa de duas cópias de uma mesma variável - se fossem globais seriam a mesma variável.

Variáveis ​​locais estáticas são essencialmente variáveis ​​globais, mas você só pode usá-los em uma função. . Se você descompilar um amx com os habitantes locais estáticos que você vai vê-los listados como globals - los limitando-se a uma função é puramente uma restrição compilador, não há realmente nada no VM própria para fazer cumprir este.

Uma variável const não é variável, é apenas como uma macro na medida em que sempre tem o mesmo valor - é apenas útil para definir as coisas.

Uma variável global estática é limitada a apenas sendo usado no arquivo em que é declarado (tecnicamente seção, um arquivo pode ter várias seções, mas uma seção não pode ter vários arquivos eo padrão é uma secção por arquivo). Estes são usados ​​extensivamente através YSI para esconder detalhes de implementação das pessoas e detê-los quebrando coisas. Mas, novamente, isso é puramente uma restrição do compilador.

Edit: Você disse que já foi dito 201 vezes, mas claramente não é afundado no entanto, assim que eu estou dizendo a você um tempo 202: Não use 256 para as variáveis ​​de comando, é inteiramente inútil e um desperdício, cujos efeitos você está vendo claramente em seu código ou você não estaria recebendo transborda espaço de pilha quando você compilar.

Eu também estou indo dizer-lhe para usar zcmd e sscanf - você diz que usar essas variáveis ​​em quase todos os comandos, você vai usá-las em nenhum lado se você se incomoda ao código corretamente, além de seu código será mais rápido e mais seguro.


Static = não é aconselhável

Shadoww5
02/07/2011, 04:20 PM
Pode me dar um exemplo do uso de static ?

crush_
02/07/2011, 04:41 PM
Pode me dar um exemplo do uso de static ?


static Jogador;
if(!IsPlayerConnected(Jogador)) return SendClientMessage(playerid, -1, "Jogador não encontrado");

TheGarfield
02/07/2011, 05:49 PM
PT-BR


Static = não é aconselhável
depende do caso,
se você souber usar ai sim, caso não você verá desgraça de um mal código.



static Jogador;
if(!IsPlayerConnected(Jogador)) return SendClientMessage(playerid, -1, "Jogador não encontrado");


este vai mandar somente se o id 0 não tiver conectado.

Pode me dar um exemplo do uso de static ?

public OnPlayerConnect(playerid)
{
static
MELNAME[124]; GetPlayerName(playerid, MELNAME, 24);
format(MELNAME, 100,"%s é meu nome, sabia ?",MELNAME);
return SendClientMessage(playerid, -1, MELNAME);
}

...

crush_
02/07/2011, 05:52 PM
este vai mandar somente se o id 0 não tiver conectado.


Eu sei, mas ele só pediu um exemplo, gato gordo

ProcessFail
03/07/2011, 01:28 AM
To com uma duvida, é possivel adicionar a policia do GTA offline no online? tipos os bots?

E eu estou tendo problemas em setar o local onde o player nasce...

ja fui em OnPlayerSpawn / SetplayerPos e mudei as coordenadas...mas mesmo assim nasce no mesmo local

[FTC]Scorpion
03/07/2011, 05:21 AM
Bom, eu criei um comando de ADM com base no KcmD, e tal.

Aí, beleza. Eu digito o comando, sem estar logado na RCON, e aparece que só ADMs podem usar o comando, certinho. Aí, eu logo na RCON, e digito o comando, e ele é executado perfeitamente, porém, aparece a mensagem de Comando Inválido, o_O

Por que será?
Não é o primeiro comando que aparece isso, o /JetPack também é assim.

Seguem:

if(strcmp("/Matar", cmdtext, true, 4) == 0) // Comando de Matar o Jogador
if(!IsPlayerAdmin(playerid) == false)
{
new Vazio[256];
Vazio = KcmD(1, cmdtext);
if(!strlen(Vazio))
{
SendClientMessage(playerid, 0xFFFFFFFF, "USO: /Matar [id]");
return 1;
}
SetPlayerHealth(strval(Vazio),0);
} else {
SendClientMessage(playerid,GOLD,"[ERRO] Você não é Administrador!");
return 1;
}

E

if(strcmp(cmdtext, "/jetpack", true) == 0x0) // PEGAR JETPACK
if(!IsPlayerAdmin(playerid) == false)
{
SetPlayerSpecialAction(playerid, 0x2);
}
else{
SendClientMessage(playerid,GOLD,"[ERRO] Você não é Administrador!");
return 1;
}

Grato desde já.

Att.
Scorpion

Shadoww5
03/07/2011, 12:15 PM
if(strcmp("/Matar", cmdtext, true) == 0) // Comando de Matar o Jogador
{
if(!IsPlayerAdmin(playerid))) return SendClientMessage(playerid,GOLD,"[ERRO] Você não é Administrador!");
new Vazio[256];
Vazio = KcmD(1, cmdtext);
if(!strlen(Vazio))
{
SendClientMessage(playerid, 0xFFFFFFFF, "USO: /Matar [id]");
return 1;
}
SetPlayerHealth(strval(Vazio),0);
return 1;
}

if(strcmp(cmdtext, "/jetpack", true) == 0) // PEGAR JETPACK
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,GOLD,"[ERRO] Você não é Administrador!");
SetPlayerSpecialAction(playerid, 0x2);
return 1;
}

Dark.Angel
03/07/2011, 03:18 PM
Opa, boa tarde...entao galera, gostaria de saber qual a diferente entre:
format(string,256,"ID: %i",playerid);
para:
format(string,sizeof(string),"ID: %i",playerid);

Falcon.
03/07/2011, 03:55 PM
Olá Dark.Angel.


Não há diferença alguma, os dois modos funcionam da mesma forma.
veja os parametros da função format:


format(output[], len, const format[], {Float, _}:...);



output: o nome da variavel que vai receber todo o format.


len: O tamanho do format, ai tem um problema, você está derperdiçando células pois está utilizando 256, sendo que não é necesário.


const format[]: Aqui vai acontecer a formatação da variavel, onde você poderá atribuir vários "valores = (%s - %d - %f...)"


{Float, _}:... e por fim temos a parte onde vai ser inserido todos os parametros para preencher os valores inseridos no const format.


Então tanto faz usar:

format(string, 10,"ID: %i",playerid);

como

format(string, sizeof(string),"ID: %i",playerid);



Atenciosamente,
Falcon.

Dark.Angel
03/07/2011, 04:16 PM
Obrigado Falcon, me ajudou muito =D

Falcon.
03/07/2011, 04:21 PM
De nada :p

dê um clique na estrela abaixo do meu avatar, entre o meu status onlne e reportar o post...e me ajude também.
:D


Atenciosamente,
Falcon.

Shadoww5
03/07/2011, 05:55 PM
Encontrar Fatorial


stock fatorial(x)
{
if(x == 0)return true;
return x*fatorial(x-1);
}

O que é fatorial e para que isto serve ?

Falcon.
03/07/2011, 06:08 PM
O que é fatorial e para que isto serve ?


Olá Shadoww5.


"Fatorial" vem da matemática, "Fatorial de um número natural"


Ele pega seu valor e se multiplica pelos seus antecessores para obter um valor x.


por exemplo:


5! = 5x 4 x 3 x 2 x 1 = 120


O fatorial corresponde à seguinte fórmula:

n! = n x (n-1) x (n-2) x (n-3) x (n-4) x (n-5)!


Atenciosamente,
Falcon.

Shadoww5
03/07/2011, 06:10 PM
Ah, ok !

Sabe algum caso em que isto é usado ?

rjjj
03/07/2011, 06:10 PM
O que é fatorial e para que isto serve ?


Respondendo sua dúvida :mrgreen:.


Fatorial é um número usando em fórmulas de uma parte da matemática chamada Análise Combinatória :p.


Essa parte da matemática tem, entre outros objetivos, estudar o número de combinações possíveis de um sistema matemático :mrgreen::


Ex: Em um Sultan de 4 bancos, de quantas maneiras diferentes 4 jogadores podem se sentar ? :mrgreen::




Resposta:


Basta usar uma permutação simples :mrgreen: para chegar ao resultado :p:



Obs: !n (o fatorial de um número n) = (n).(n-1).(n-2).....1.



P = !4 = 4.3.2.1 = 24 vezes.




Espero ter ajudado :p.

Falcon.
03/07/2011, 06:15 PM
Ah, ok !

Sabe algum caso em que isto é usado ?

Dentro do SA-MP eu sinceramente não vejo muita utilidade,
más você pode utilizar ele para desenvolver códigos que como o rjjj disse acima
precise calcular um valor possivel de algo

tirando isso acredito que para mais nada.


Atenciosamente,
Falcon.



======================
estou rindo ken. kkkkkkkkkkkk

[FTC]Scorpion
04/07/2011, 06:53 AM
Estou tentando fazer um comando, mas não consegui, tá dando um erro louco.

Segue:

Erro:
C:\Users\Gabriel\Desktop\SAMP\gamemodes\[PSA].pwn(650) : error: 035: argument type mismatch (argument 1)

Comando:
if(strcmp("/Gravidade", cmdtext, true, 4) == 0) // Mudar a Gravidade
if(!IsPlayerAdmin(playerid) == false)
{
new Gravity[256];
Gravity = KcmD(1, cmdtext);
if(!strlen(Gravity))
{
SendClientMessage(playerid, 0xFFFFFFFF, "USO: /Gravidade [G]");
return 1;
}
SetGravity(Gravity); // linha do erro

return 1;
} else {
SendClientMessage(playerid,GOLD,"[ERRO] Você não é Administrador!");
return 1;
}


O que está errado? D:

_

Aproveitando, queria tirar outra dúvida, fora do SAMP.

Dá pra mudar o nick no fórum? Se sim, como?

Grato desde já,
Scorpion.

crush_
04/07/2011, 07:07 AM
Scorpion;1274880']Estou tentando fazer um comando, mas não consegui, tá dando um erro louco.

Segue:

Erro:
C:\Users\Gabriel\Desktop\SAMP\gamemodes\[PSA].pwn(650) : error: 035: argument type mismatch (argument 1)

Comando:
if(strcmp("/Gravidade", cmdtext, true, 4) == 0) // Mudar a Gravidade
if(!IsPlayerAdmin(playerid) == false)
{
new Gravity[256];
Gravity = KcmD(1, cmdtext);
if(!strlen(Gravity))
{
SendClientMessage(playerid, 0xFFFFFFFF, "USO: /Gravidade [G]");
return 1;
}
SetGravity(Gravity); // linha do erro

return 1;
} else {
SendClientMessage(playerid,GOLD,"[ERRO] Você não é Administrador!");
return 1;
}


O que está errado? D:

_

Aproveitando, queria tirar outra dúvida, fora do SAMP.

Dá pra mudar o nick no fórum? Se sim, como?

Grato desde já,
Scorpion.

Isto ocorre pelo fato de que SetGravity só aceita variavel do tipo Float.

Troque a variavei Gravity[256], por Float:Gravity;

Falcon.
04/07/2011, 12:45 PM
Scorpion;1274880']
Aproveitando, queria tirar outra dúvida, fora do SAMP.

Dá pra mudar o nick no fórum? Se sim, como?

Grato desde já,
Scorpion.


Olá [FTC]Scorpion.


Para fazer a alteração, você deverá solicitar à um moderador global. Entretanto acredito que não estão mais fazendo a alteração já tem um tempo, más não custa nada solicitar :p


Abaixo está o link que você poderá ver os moderadores globais(beta tester)

>>> Grupos fórum SA-MP <<< (http://forum.sa-mp.com/showgroups.php)



Aproveitei também e dei uma melhorada em seu código :D



if(!strcmp(cmdtext, "/gravidade", true))
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, GOLD, "[ERRO] Você não é administrador.");
new Float:Gravity[256];
Gravity = KcmD(1, cmdtext);
if(!strlen(Gravity)) return SendClientMessage(playerid, 0xFFFFFFAA, "Use: /gravidade [G]");

SetGravity(Gravity);
SendClientMessage(playerid, 0xFFFFFFAA, "Você alterou a gravidade.)";
return 0x1;
}


Atenciosamente,
Falcon.

ApolloRJ
04/07/2011, 04:49 PM
quem pode me ajudar aqui e um comando pra puxar geral.. para quem fizer o comando.. dando armas e setando a vida.. queria puxar geral.. para fazer evento... no server..




CMD:get(playerid, params[])
{
if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");
new Player;
if (sscanf(params, "u", Player)) return SendClientMessage(playerid, 0x0000FFAA, "[INFO] {FFFFFF}Use: /ir [PlayerID]");
else if (Player == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xC9170EFF, "[ERROR]{FFFFFF} : ID INVÁLIDO !");
else
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
SetPlayerInterior(Player,GetPlayerInterior(playeri d));

SetPlayerVirtualWorld(Player,GetPlayerVirtualWorld (playerid));
SetPlayerPos(Player,x+2,y,z+4);
ResetPlayerWeapons(Player);
GivePlayerWeapon(Player,24,5800);
GivePlayerWeapon(Player,29,5800);
GivePlayerWeapon(Player,30,5800);
SetPlayerHealth(Player,99);
SetPlayerArmour(Player,99);
}
return true;
}


tentei isso + isso so serve pra puxar 1 pessoa... queria puxar geral... nesse esquema ai.. quem puder ajudar agradeço muito...

By ApolloRJ

Dark.Angel
04/07/2011, 06:04 PM
ApolloRJ tenta ai:
CMD:get(playerid, params[])
{
if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");

new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
new interior = GetPlayerInterior(playerid);
new vw = GetPlayerVirtualWorld(playerid);
for(new i=0; i<MAX_PLAYERS; i++)
{
SetPlayerInterior(i,interior);

SetPlayerVirtualWorld(i,playerid);
SetPlayerPos(i,x+2,y,z+4);
ResetPlayerWeapons(i);
GivePlayerWeapon(i,24,5800);
GivePlayerWeapon(i,29,5800);
GivePlayerWeapon(i,30,5800);
SetPlayerHealth(i,99);
SetPlayerArmour(i,99);
}
SendClientMessageToAll(COR,"[INFO] O Administrador puxou todos jogdores");
}
return true;
}

ApolloRJ
04/07/2011, 11:06 PM
infelizmente não funciono compila.. + quando fui tentar puxar n vem 1... hehe, sera que alguem poderia me ajudar?

Transferencia
04/07/2011, 11:12 PM
CMD:get(playerid, params[])
{
new Player;
if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");
if (sscanf(params, "u", Player)) return SendClientMessage(playerid, 0x0000FFAA, "[INFO] {FFFFFF}Use: /get");
else
{
for(new i=0; i<MAX_PLAYERS; i++)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(i,x,y,z);
SetPlayerInterior(i,GetPlayerInterior(i));
SetPlayerVirtualWorld(i,GetPlayerVirtualWorld(i));
SetPlayerPos(i,x+2,y,z+4);
ResetPlayerWeapons(i);
GivePlayerWeapon(i,24,5800);
GivePlayerWeapon(i,29,5800);
GivePlayerWeapon(i,30,5800);
SetPlayerHealth(i,99);
SetPlayerArmour(i,99);
}
SendClientMessageToAll(0x0000FFAA,"[INFO] O Administrador puxou todos jogdores");
}
return true;
}

Dark.Angel
05/07/2011, 12:08 AM
Eu achei que vc qria um pra puxar todos players *.*

Tenta esse aqui agora só vai puxar 1 player..
CMD:get(playerid,params[])
{
new Player;
if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");
if(sscanf(params,"u",Player)) return SendClientMessage(playerid, 0x0000FFAA, "[INFO] {FFFFFF}Use: /get [PlayerID]");
if(!IsPlayerConnected(Player)) return SendClientMessage(playerid, 0xC9170EFF, "[ERROR]{FFFFFF} : ID INVÁLIDO !");

new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
SetPlayerInterior(Player,GetPlayerInterior(playeri d));
SetPlayerVirtualWorld(Player,GetPlayerVirtualWorld (playerid));

SetPlayerPos(Player,x+2,y+2,z+4);
ResetPlayerWeapons(Player);
GivePlayerWeapon(Player,24,5800);
GivePlayerWeapon(Player,29,5800);
GivePlayerWeapon(Player,30,5800);
SetPlayerHealth(Player,99);
SetPlayerArmour(Player,99);
return true;
}

ProcessFail
05/07/2011, 01:04 AM
To com uma duvida, é possivel adicionar a policia do GTA offline no online? tipos os bots?

E eu estou tendo problemas em setar o local onde o player nasce...

ja fui em OnPlayerSpawn / SetplayerPos e mudei as coordenadas...mas mesmo assim nasce no mesmo local


Alguem pode só me dar uma luz?

//outra duvida tem como trocar o comando "/rcon login" por outro tipo "/logar rcon" ?

Transferencia
05/07/2011, 01:06 AM
Sobre a policia do Gta Off: voce pode adicionar Bots,mais os Bots andam so pelo Lugar definido por voce,e nao seguem tal pessoa

e sobre a rcon,nao tem,pois /Rcon e o comando Original Sa-mp,e o comando para usar a Rcon...

Falcon.
05/07/2011, 01:46 AM
Olá ApolloRJ.


vendo que o seu pedido não foi atendido como desejado, fiz um código para você.
puxa todos do servidor para a sua posição, e caso um jogador esteja em um veiculo ele é removido e logo após setado na posição :p


Aqui está:



CMD:get(playerid, params[])
{
if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");

static Float:P_Pos[3];
GetPlayerPos(playerid, P_Pos[0], P_Pos[1], P_Pos[2]);

new F_p;
SendClientMessageToAll(0xFFFFFFAA, "[EVENTO] Um administrador puxou todos do servidor para realizar um evento");
do
{
F_p ++;
if(!IsPlayerConnected(F_p)) continue;

if(IsPlayerInAnyVehicle(F_p)) RemovePlayerFromVehicle(F_p);
SetPlayerPos(F_p, P_Pos[0], P_Pos[1], P_Pos[2]);
SetPlayerInterior(F_p, GetPlayerInterior(playerid));
SetPlayerVirtualWorld(F_p, GetPlayerVirtualWorld(playerid));

ResetPlayerWeapons(F_p);
GivePlayerWeapon(F_p,24,5800);
GivePlayerWeapon(F_p,29,5800);
GivePlayerWeapon(F_p,30,5800);
SetPlayerHealth(F_p,99);
SetPlayerArmour(F_p,99);
}
while(F_p < MAX_PLAYERS);
return 0x1;
}


Transferencia:

Bots são capazes de "seguir" uma pessoa.
Eu entrei uma vez em um servidor onde tinha vários bots andando pela rua e a policia lhe seguia, caso feito algo errado.

e também existe aqueles bots zumbis que vai atras de você :D


Atenciosamente,
Falcon.

ProcessFail
05/07/2011, 01:50 AM
sim, é isso que eu quero tentar fazer no meu servidor, por policia como bot para deixar o servidor mais animado.

Vi isso em um video de servidor do GTA IV e pensei se não tinha algo parecido para o SAMP.

e sobre o local onde nasce os players? tem algum outro local que pode ser?

Vlw

ApolloRJ
05/07/2011, 02:15 AM
e puxar todos sim.. + so esta dando a arma.. puxando a galera não vai nem a pau... so da as armas... quem poderia me ajudar???

Dark.Angel
05/07/2011, 02:21 AM
ApolloRJ eu editei o meu outro post (o 1º) pra puxar todos jogadores... tenta ele ai...

CMD:get(playerid, params[])
{
if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");

new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
new interior = GetPlayerInterior(playerid);
new vw = GetPlayerVirtualWorld(playerid);
for(new i=0; i<MAX_PLAYERS; i++)
{
SetPlayerInterior(i,interior);

SetPlayerVirtualWorld(i,playerid);
SetPlayerPos(i,x+2,y,z+4);
ResetPlayerWeapons(i);
GivePlayerWeapon(i,24,5800);
GivePlayerWeapon(i,29,5800);
GivePlayerWeapon(i,30,5800);
SetPlayerHealth(i,99);
SetPlayerArmour(i,99);
}
SendClientMessageToAll(COR,"[INFO] O Administrador puxou todos jogdores");
}
return true;
}

Falcon.
05/07/2011, 03:11 AM
Olá ApolloRJ.


Você tentou com o código postado por mim ?


CMD:get(playerid, params[])
{
if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");

static Float:P_Pos[3];
GetPlayerPos(playerid, P_Pos[0], P_Pos[1], P_Pos[2]);

new F_p;
SendClientMessageToAll(0xFFFFFFAA, "[EVENTO] Um administrador puxou todos do servidor para realizar um evento");
do
{
F_p ++;
if(!IsPlayerConnected(F_p)) continue;

if(IsPlayerInAnyVehicle(F_p)) RemovePlayerFromVehicle(F_p);
SetPlayerPos(F_p, P_Pos[0], P_Pos[1], P_Pos[2]);
SetPlayerInterior(F_p, GetPlayerInterior(playerid));
SetPlayerVirtualWorld(F_p, GetPlayerVirtualWorld(playerid));

ResetPlayerWeapons(F_p);
GivePlayerWeapon(F_p,24,5800);
GivePlayerWeapon(F_p,29,5800);
GivePlayerWeapon(F_p,30,5800);
SetPlayerHealth(F_p,99);
SetPlayerArmour(F_p,99);
}
while(F_p < MAX_PLAYERS);
return 0x1;
}



============


Caso tenha testado e não funcionando tente com este:


CMD:get(playerid, params[])
{
if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");

static Float:P_Pos[3];
GetPlayerPos(playerid, P_Pos[0], P_Pos[1], P_Pos[2]);

SendClientMessageToAll(0xFFFFFFAA, "[EVENTO] Um administrador puxou todos do servidor para realizar um evento");
for(new F_p; F_p < MAX_PLAYERS; F_p ++);
{
if(!IsPlayerConnected(F_p)) continue;

if(IsPlayerInAnyVehicle(F_p)) RemovePlayerFromVehicle(F_p);
SetPlayerPos(F_p, P_Pos[0], P_Pos[1], P_Pos[2]);
SetPlayerInterior(F_p, GetPlayerInterior(playerid));
SetPlayerVirtualWorld(F_p, GetPlayerVirtualWorld(playerid));

ResetPlayerWeapons(F_p);
GivePlayerWeapon(F_p,24,5800);
GivePlayerWeapon(F_p,29,5800);
GivePlayerWeapon(F_p,30,5800);
SetPlayerHealth(F_p,99);
SetPlayerArmour(F_p,99);
}
return 0x1;
}


Foi testado e está funcionando corretamente.


Dark.Angel:

Seu código não irá funcionar...


Atenciosamente,
Falcon.

vinih1344
05/07/2011, 07:41 PM
Como faço para mandar aquelas mensagens que aparece no centro da tela ?Que todos vejam. só q só disponível a admin logado na /RCon.
Muito obg agradeço desde já.

Shadoww5
05/07/2011, 09:48 PM
public OnPlayerCommandText(playerid, cmdtext[])
{
new idx, cmd[256];
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/anunciar", true) == 0)
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, ADMIN_RED, "[ERRO] Você não está autorizado a usar este comando.");
new string[256], n[24], tipo, tmp[256];
tmp = strtok(cmdtext, idx);
tipo = strval(tmp);
if(!strlen(tmp)) return SendClientMessage(playerid, -1, "USO: /anunciar [TIPO] [TEXTO]");
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, -1, "USO: /anunciar [TIPO] [TEXTO]");
if(tipo == 2) { tipo = 1; }
GetPlayerName(playerid, n, sizeof(n));
format(string, sizeof(string), "%s: %s", n, result);
GameTextForAll(string, 5000, tipo);
return 1;
}
return 0;
}

ApolloRJ
06/07/2011, 12:31 AM
opa desculpa não responder antes.. Falcon.Sixe.. pois não tinha testado... muito obrigado o primeiro que vc fez.. deu certo só o do Dark.Angel que não funciono + msm assim obrigado aos 2.. e mau pela demora =p

edit:

opa deu erro no segundo que vc fez....


C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8739) : error 036: empty statement
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8741) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8741) : error 024: "break" or "continue" is out of context
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8743) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8743) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8744) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8745) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8746) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8748) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8749) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8750) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8751) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8752) : error 017: undefined symbol "F_p"
C:\ABA Programas\SA-MP 0.3c R2 Windows Server\gamemodes\GangFinal.pwn(8753) : error 017: undefined symbol "F_p"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



By ApolloRJ

Falcon.
06/07/2011, 12:58 AM
Olá ApolloRJ.

Desculpe-me, não percebi um erro no código,
aqui está:


CMD:get(playerid, params[])
{
//if(!IsPlayerLuxAdminLevel(playerid,5)) return SendClientMessage(playerid,0xC9170EFF,"[ERROR]{FFFFFF} : Você não é Um Administrador");

static Float:P_Pos[3];
GetPlayerPos(playerid, P_Pos[0], P_Pos[1], P_Pos[2]);

SendClientMessageToAll(0xFFFFFFAA, "[EVENTO] Um administrador puxou todos do servidor para realizar um evento");
for(new F_p; F_p < MAX_PLAYERS; F_p++)
{
if(!IsPlayerConnected(F_p)) continue;

if(IsPlayerInAnyVehicle(F_p)) RemovePlayerFromVehicle(F_p);
SetPlayerPos(F_p, P_Pos[0], P_Pos[1], P_Pos[2]);
SetPlayerInterior(F_p, GetPlayerInterior(playerid));
SetPlayerVirtualWorld(F_p, GetPlayerVirtualWorld(playerid));

ResetPlayerWeapons(F_p);
GivePlayerWeapon(F_p,24,5800);
GivePlayerWeapon(F_p,29,5800);
GivePlayerWeapon(F_p,30,5800);
SetPlayerHealth(F_p,99);
SetPlayerArmour(F_p,99);
}
return 0x1;
}


Atenciosamente,
Falcon.

vinih1344
06/07/2011, 08:33 PM
Muito Obg Shadoww5.
Vai me ajudar :D

kNOWW
06/07/2011, 08:58 PM
Quando vou a compilar um [FS] de um mapa editado no mta aparece me estes erros

C:\Users\Rafael\Desktop\admin.pwn(49) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(49) : error 004: function "OnFilterScriptInit" is not implemented
C:\Users\Rafael\Desktop\admin.pwn(288) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(288) : warning 217: loose indentation
C:\Users\Rafael\Desktop\admin.pwn(288) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(288) : error 004: function "OnFilterScriptExit" is not implemented
C:\Users\Rafael\Desktop\admin.pwn(293) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(293) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(293) : error 017: undefined symbol "playerid"
C:\Users\Rafael\Desktop\admin.pwn(298) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(298) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(298) : error 017: undefined symbol "playerid"
C:\Users\Rafael\Desktop\admin.pwn(303) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(303) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(303) : error 017: undefined symbol "playerid"
C:\Users\Rafael\Desktop\admin.pwn(308) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(308) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(308) : error 017: undefined symbol "playerid"
C:\Users\Rafael\Desktop\admin.pwn(313) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(313) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(313) : error 017: undefined symbol "vehicleid"
C:\Users\Rafael\Desktop\admin.pwn(318) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(318) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(318) : error 017: undefined symbol "vehicleid"
C:\Users\Rafael\Desktop\admin.pwn(323) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(323) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(323) : error 017: undefined symbol "playerid"
C:\Users\Rafael\Desktop\admin.pwn(328) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(328) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(328) : error 017: undefined symbol "playerid"
C:\Users\Rafael\Desktop\admin.pwn(330) : error 017: undefined symbol "cmdtext"
C:\Users\Rafael\Desktop\admin.pwn(338) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(338) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(338) : error 017: undefined symbol "playerid"
C:\Users\Rafael\Desktop\admin.pwn(343) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(343) : error 029: invalid expression, assumed zero
C:\Users\Rafael\Desktop\admin.pwn(343) : error 017: undefined symbol "playerid"
C:\Users\Rafael\Desktop\admin.pwn(348) : warning 225: unreachable code
C:\Users\Rafael\Desktop\admin.pwn(348) : error 029: invalid expression, assumed zero

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


26 Errors.

Como resolvo ?

RockFire
06/07/2011, 10:48 PM
é falta de uma chave { ou }

Shadoww5
07/07/2011, 12:04 AM
#define LoopVeiculos(%0) for(new %0 = 0; GetVehicleModel(%0); %0++)


Isto é um simples loop em todos veículos de forma rápida e eficiente:


LoopVeiculos(i)
{
printf("O Carro %d esta criado", i);
}


Por qual motivo foi usado GetVehicleModel(%0) no loop ?

Nake01
07/07/2011, 12:25 AM
Quero botar pra quando o cara sair aparecer assim

"<-> %s Entrou no Server [NumeroDePlayersOnline/MaximosDeSlots]"

e Quando Logar

"<+> %s Entrou no Server [NumeroDePlayersOnline/MaximosDeSlots]"

Shadoww5
07/07/2011, 12:34 AM
public OnPlayerConnect(playerid)
{
new string[60];
GetPlayerName(playerid, string, 24);
format(string, sizeof string , "<+> %s Entrou no Server [%d / %d]", Check(), GetMaxPlayers());
SendClientMessageToAll(0xFFFF00FF, string);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
new string[60];
GetPlayerName(playerid, string, 24);
format(string, sizeof string , "<-> %s Saiu do Server [%d / %d]", Check(), GetMaxPlayers());
SendClientMessageToAll(0xFFFF00FF, string);
return 1;
}

stock Check()
{
new players;
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(IsPlayerConnected(i)) players++;
}
return players;
}

TheGarfield
07/07/2011, 12:39 AM
Por qual motivo foi usado GetVehicleModel(%0) no loop ?
você sabe como funciona um loop ?

for(new i; i= 50; ++i)

Se i ( 0 ) for diferente de 50 ele fica loopando.


Quero botar pra quando o cara sair aparecer assim

"<-> %s Entrou no Server [NumeroDePlayersOnline/MaximosDeSlots]"

e Quando Logar

"<+> %s Entrou no Server [NumeroDePlayersOnline/MaximosDeSlots]"


new SV;
stock GetSeverVr()
{
for(new i; i < MAX_PLAYERS; ++i)
{
if(IsPlayerConnected(i))
{
SV++;
}
}
return SEV;
}


USO:

#include <a_samp>


public OnPlayerConnect(playerid)
{
new string[100];
format(string, 100,"Algum player entrou no servidor [%d/%d", GetSeverVr(), GetMaxPlayers());
SendClientMessageToAll(-1, string);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SV --;
new string[100];
format(string, 100,"Algum player desconectou do servidor [%d/%d", GetSeverVr(), GetMaxPlayers());
SendClientMessageToAll(-1, string);
return 1;
}

Oddie
07/07/2011, 12:42 AM
Por qual motivo foi usado GetVehicleModel(%0) no loop ?

O código faz algo do tipo

Número não-zero ele continua o loop, mas como eu fiz está lógica?

Simples, olhando a wiki, notei que se caso o GetVehicleModel retornar zero, o carro não existe, então como os carros são feito de id 0,1,2,3,4 .. eu apenas fiz a função, começando do número zero, até o carro válido, totalmente otimizado sem checar outras coisas, ou percorrer o MAX_VEHICLE inteiro.

Enquanto GetVehiclemodel for diferente de zero, continuar o loop, pois o carro é válido, caso for zero, parar o loop

Olhe isto:
http://wiki.sa-mp.com/wiki/GetVehicleModel

Returns The vehicle model ID, or 0 if the vehicle doesn't exist.


Para você entender melhor, seria a mesma coisa que:

#define LoopVeiculos(%0) for(new %0 = 0; GetVehicleModel(%0) != 0; %0++)



Pesquise da próxima vez :p

Shadoww5
07/07/2011, 01:08 AM
TheGarfield, o correto seria:

new SV;
stock GetSeverVr()
{
for(new i; i < MAX_PLAYERS; ++i)
{
if(IsPlayerConnected(i))
{
SV++;
}
}
return SV;
}

O código faz algo do tipo

Número não-zero ele continua o loop, mas como eu fiz está lógica?

Simples, olhando a wiki, notei que se caso o GetVehicleModel retornar zero, o carro não existe, então como os carros são feito de id 0,1,2,3,4 .. eu apenas fiz a função, começando do número zero, até o carro válido, totalmente otimizado sem checar outras coisas, ou percorrer o MAX_VEHICLE inteiro.



Olhe isto:
http://wiki.sa-mp.com/wiki/GetVehicleModel



Para você entender melhor, seria a mesma coisa que:

#define LoopVeiculos(%0) for(new %0 = 0; GetVehicleModel(%0) != 0; %0++)



Pesquise da próxima vez :p

Ok, valeu pelos esclarescimentos.

Mas não seria necessário colocar GetVehicleModel(%0) != 0 no loop ?

Em caso negativo, por que não ?

Oddie
07/07/2011, 01:10 AM
if(!Var)
//e
if(Var == 0)

//Ambos fazem a mesma coisa
//Assim como

if(Var)
//e
if(Var != 0) //ou < 1, não lembro


Aliás, GetVehicleModel nunca irá retornar negativo.

Shadoww5
07/07/2011, 01:19 AM
if(!Var)
//e
if(Var == 0)

//Ambos fazem a mesma coisa
//Assim como

if(Var)
//e
if(Var != 0) //ou < 1, não lembro


Aliás, GetVehicleModel nunca irá retornar negativo.

Quando eu falei em caso negativo, eu quis dizer que se o não fosse necessário colocar aquilo no loop, qual o motivo disto ?

Mas, por exemplo, o veiculo de id 1 é o 520. Então, GetVehicleModel(1) retornaria 520, correto ?

Então o loop não seguiria uma linha: 1, 2, 3 ...

Ricop522
07/07/2011, 02:50 AM
stock GetServerPlayers() {
new server;
for(new i; i < MAX_PLAYERS; ++i) {
if(!IsPlayerConnected(i)) continue;
++server;
}
return server;
}


Garfield banido para parar de ser arrogante;)


LoopVeiculos(i)
{
printf("O Carro %d esta criado", i);
}

Acho que você exemplificou de forma errada, creio eu que como é um Loop o correto seria usar:


#define LoopVeiculo(%0) for(new %0 = 0x0; GetVehicleModel(%0); ++%0)

LoopVeiculo(1) //
{
print("O Carro 1 esta criado");
}
else print("O carro 1 não está criado.");



Acho que seria assim né?
:D

steki.
07/07/2011, 09:52 AM
Ou um Iterator com <foreach>

Shadoww5
07/07/2011, 12:58 PM
Ou um Iterator com <foreach>

Iterator ? '-'

Oddie
07/07/2011, 01:28 PM
stock GetServerPlayers() {
new server;
for(new i; i < MAX_PLAYERS; ++i) {
if(!IsPlayerConnected(i)) continue;
++server;
}
return server;
}


Garfield banido para parar de ser arrogante;)


LoopVeiculos(i)
{
printf("O Carro %d esta criado", i);
}

Acho que você exemplificou de forma errada, creio eu que como é um Loop o correto seria usar:


#define LoopVeiculo(%0) for(new %0 = 0x0; GetVehicleModel(%0); ++%0)

LoopVeiculo(1) //
{
print("O Carro 1 esta criado");
}
else print("O carro 1 não está criado.");



Acho que seria assim né?
:D

Meu código está correto, eu não exemplifiquei de forma errada.
Não seria assim, você está errado.

Shadow:
Iterator é a parte de uma array.
Digamos que eu crie:

new a;
// A variável a terá apenas uma parte, por isto não é array e não contém iterator

new a[500];
//Agora a array a terá 500 partes, que podem acessar cada uma da seguinte forma
//a[0]
//a[1]
//a[499]
//Sendo chamadas iterador, que podem ser acessadas por foreach de y_less ou um Gerenciador de Arrays do drakins

RockFire
07/07/2011, 05:11 PM
Fiz de uma outra forma mas funciona da mesma forma do code do garfield e ricop
stock GetServerPlayers() {
new p[3];
p[0] = GetMaxPlayers();
while(p[1] != p[0]) {
if(IsPlayerConnected(p[1])) p[2]++;
p[1]++;
}
return p[2];
}

Nake01
08/07/2011, 12:17 PM
public OnPlayerConnect(playerid)
{
new string[60];
GetPlayerName(playerid, string, 24);
format(string, , "<+> %s Entrou no Server [%d / %d]", Check, GetMaxPlayers());
SendClientMessageToAll(0xFFFF00FF, string);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
new string[60];
GetPlayerName(playerid, string, 24);
format(string, , "<-> %s Saiu do Server [%d / %d]", Check, GetMaxPlayers());
SendClientMessageToAll(0xFFFF00FF, string);
return 1;
}

stock Check()
{
new players;
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(IsPlayerConnected(i)) players++;
}
return players;
}

ta dando esses erros

C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1390) : error 029: invalid expression, assumed zero
C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1390) : warning 215: expression has no effect
C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1390) : error 076: syntax error in the expression, or invalid function call
C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1390) : error 029: invalid expression, assumed zero
C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1390) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.

Na Linha

format(string, , "<+> %s Entrou no Server [%d / %d]", Check, GetMaxPlayers());

BlueRider
08/07/2011, 12:30 PM
Correto:
format(string, sizeof(string), "<+> %s Entrou no Server [%d / %d]", Check, GetMaxPlayers());



Outra forma:
stock Check()
{
new bPlayers = 0;
for( new i = 0; i <= MAX_PLAYERS; i++ )
{
if( IsPlayerConnected( i ) && !IsPlayerNPC( i ) )
{
bPlayers++;
}
}
return bPlayers;
}

Nake01
08/07/2011, 12:34 PM
Continua o error !

Ricop522
08/07/2011, 12:37 PM
public OnPlayerConnect(playerid)
{
new string[60], nome[MAX_PLAYER_NAME]; GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof(string), "<+> %s entrou no server [%i/%i]", nome, GetPlayers(), GetMaxPlayers());
SendClientMessageToAll(0xFFFF00FF, string);
return 0x01;
}

public OnPlayerDisconnect(playerid, reason)
{
new string[60], nome[MAX_PLAYER_NAME]; GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof(string), "<-> %s saiu do server [%i/%i]", nome, GetPlayers(), GetMaxPlayers());
SendClientMessageToAll(0xFFFF00FF, string);
return 1;
}

stock
GetPlayers()
{
new jogadores, p;
for( ; p < MAX_PLAYERS; ++p) if(IsPlayerConnected(p) && !IsPlayerNPC(p)) ++jogadores;
return jogadores;
}


Fixado.
O código estava todo errado, não estava getando o nome da pessoa.

[R] ousenber [K]
08/07/2011, 01:43 PM
ae , quando entra no GTA usando UsePlayerPedAnims(); , ele anda igual CJ e corre tambem, so q como mudo pra ele anda diferente do CJ? mais sem ser akele jeito que quando nao tem o UsePlayerPedAnims(); , de outra maneira ?



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples (http://forum.sa-mp.com/showthread.php?t=260244)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png

[Ass] Assinatura feita por JORGE_HARD


http://img716.imageshack.us/img716/8462/rgsamp2.jpg

BlueRider
08/07/2011, 01:49 PM
UsePlayerPedAnims();
Faz com que ele caminhe normal, se retirar isso ele caminhará todo torto (riariaria).

Nake01
08/07/2011, 01:51 PM
Foi mais tem um bug no code, ex: tem 3 pessoas quando 1 dos três sai aparece que o server fica com 3 players ai se algum dos dois que sair sair do server apareçe que tem 2 on '-'

@EDIT

Mais quando ta logando ta de boa só quando sai que ta dando isso '-' se tem 3 sai um diz q tem 3 e se sai +1 diz q 2 online mais só tendo 1 '-'

[R] ousenber [K]
08/07/2011, 02:08 PM
UsePlayerPedAnims();
Faz com que ele caminhe normal, se retirar isso ele caminhará todo torto (riariaria).

sim sim, isso eu sei , so q como faz ele andar sem ser desses 2 jeitos?



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples (http://forum.sa-mp.com/showthread.php?t=260244)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png

[Ass] Assinatura feita por JORGE_HARD


http://img716.imageshack.us/img716/8462/rgsamp2.jpg

BlueRider
08/07/2011, 02:08 PM
Não precisa de complicar tanto as funções, isto basta:
new
bName[ MAX_PLAYER_NAME ],
bPlayers = 1,
sStr[ 128 ];

public OnPlayerConnect( playerid )
{
GetPlayerName( playerid, bName, sizeof( bName ) );
format( sStr, sizeof( sStr ), "%s entrou no servidor! [%d/%d]", bName, bPlayers, GetMaxPlayers() );
SendClientMessageToAll( 0XFFF000AA, sStr );
bPlayers++;
return true;
}

public OnPlayerDisconnect( playerid, reason )
{
return bPlayers--;
}

Falcon.
08/07/2011, 02:12 PM
Olá Nake01.

Tente desta forma, no começo de seu script:

new _JC;


public OnPlayerConnect(playerid)
{
_JC ++;
static nome[24], string[72];
GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof(string), "%s entrou no servidor || Jogadores no server: %d", nome, _JC);
SendClientMessageToAll(-1, string);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
_JC --;
static nome[24], string[72];
GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof(string), "%s saiu do servidor || Jogadores no server: %d", nome, _JC);
SendClientMessageToAll(-1, string);
return 1;
}


Atenciosamente,
Falcon.

BlueRider
08/07/2011, 02:22 PM
Olá Nake01.

Tente desta forma, no começo de seu script:

new _JC;


public OnPlayerConnect(playerid)
{
_JC ++;
static nome[24], string[72];
GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof(string), "%s entrou no servidor || Jogadores no server: %d", nome, _JC);
SendClientMessageToAll(-1, string);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
_JC --;
static nome[24], string[72];
GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof(string), "%s saiu do servidor || Jogadores no server: %d", nome, _JC);
SendClientMessageToAll(-1, string);
return 1;
}


Atenciosamente,
Falcon.

Ou este do Falcon ou o que eu postei acima, você pode usar porque estão corretos.

Não percebi porque muitas pessoas usaram stocks desnecessários, sendo que uma array poderia resolver tudo apenas nos publics (OnPlayerConnect & OnPlayerDisconnect).

Nake01
08/07/2011, 02:32 PM
FAIL isso dai ta mostrando que entro + 1 no server e ta mostrando que ta saindo mais um num ta dizendo ao todo quantos players tem ex: tinha 20 on eu entrei ai tem que aparecer assim [21/100] tendeu '-'

BlueRider
08/07/2011, 02:40 PM
É só colocar, coisa fácil:
new _JC;

public OnPlayerConnect(playerid)
{
_JC ++;
static nome[24], string[72];
GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof(string), "%s entrou no servidor || Jogadores no server: %d/%d", nome, _JC, GetMaxPlayers());
SendClientMessageToAll(-1, string);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
_JC --;
static nome[24], string[72];
GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof(string), "%s saiu do servidor || Jogadores no server: %d/%d", nome, _JC, GetMaxPlayers());
SendClientMessageToAll(-1, string);
return 1;
}

Nake01
08/07/2011, 02:48 PM
eu coloquei --' só que quando o cara sai aparece -1 envez de a quantidade de players que ficaram on --'

BlueRider
08/07/2011, 02:56 PM
new
bName[ MAX_PLAYER_NAME ],
bPlayers = 1,
sStr[ 128 ];

public OnPlayerConnect( playerid )
{
GetPlayerName( playerid, bName, sizeof( bName ) );
format( sStr, sizeof( sStr ), "%s entrou no servidor! [%d/%d]", bName, bPlayers, GetMaxPlayers() );
SendClientMessageToAll( 0XFFF000AA, sStr );
bPlayers++;
return true;
}

public OnPlayerDisconnect( playerid, reason )
{
return bPlayers--;
}

Shadoww5
08/07/2011, 03:04 PM
O codigo que eu postei nao estava errado.

Só esqueci o length no format e além disso, ele estava sim pegando o nome do jogador, mas armazenando-o em uma string que, posteriormente, seria usada em outra frase.

Código corrigido:

http://forum.sa-mp.com/showpost.php?p=1279775&postcount=1373

[R] ousenber [K]
08/07/2011, 03:04 PM
ja que ninguem me repondi e so respondi o nake01 :( vou perguntar denovo .. quando entra no GTA usando UsePlayerPedAnims(); , ele anda igual CJ e corre tambem, so q como mudo pra ele anda diferente do CJ? mais sem ser akele jeito que quando nao tem o UsePlayerPedAnims(); , de outra maneira ?



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples (http://forum.sa-mp.com/showthread.php?t=260244)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

[Ass] Assinatura feita por JORGE_HARD


http://img716.imageshack.us/img716/8462/rgsamp2.jpg

BlueRider
08/07/2011, 03:10 PM
ja que ninguem me repondi e so respondi o nake01 :( vou perguntar denovo .. quando entra no GTA usando UsePlayerPedAnims(); , ele anda igual CJ e corre tambem, so q como mudo pra ele anda diferente do CJ? mais sem ser akele jeito que quando nao tem o UsePlayerPedAnims(); , de outra maneira ?


Aprenda a ler: http://forum.sa-mp.com/showpost.php?p=1282340&postcount=1386

Nake01
08/07/2011, 03:12 PM
C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1412) : error 076: syntax error in the expression, or invalid function call
C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1422) : error 076: syntax error in the expression, or invalid function call
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

Na linha

format(string, sizeof string , "<+> %s Entrou no Server [%d / %d]", Check, GetMaxPlayers());
format(string, sizeof string , "<-> %s Saiu do Server [%d / %d]", Check, GetMaxPlayers());

[R] ousenber [K]
08/07/2011, 03:13 PM
http://forum.sa-mp.com/showpost.php?p=1282359&postcount=1388

Aprenda a ler você :mad:



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples (http://forum.sa-mp.com/showthread.php?t=260244)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

[Ass] Assinatura feita por JORGE_HARD


http://img716.imageshack.us/img716/8462/rgsamp2.jpg

Josma_cmd
08/07/2011, 04:06 PM
C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1412) : error 076: syntax error in the expression, or invalid function call
C:\Users\WEEEEEN\Server Faccao\gamemodes\GM.pwn(1422) : error 076: syntax error in the expression, or invalid function call
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

Na linha

format(string, sizeof string , "<+> %s Entrou no Server [%d / %d]", Check, GetMaxPlayers());
format(string, sizeof string , "<-> %s Saiu do Server [%d / %d]", Check, GetMaxPlayers());
Faltou a variável com o nome do player, que subistituirá %s, você pode usar desta forma:

new nome[MAX_PLAYER_NAME];
GetPlayerName(playerid, nome, sizeof(nome));
format(string, sizeof string , "<+> %s Entrou no Server [%d / %d]", nome, Check, GetMaxPlayers());
format(string, sizeof string , "<-> %s Saiu do Server [%d / %d]", nome, Check, GetMaxPlayers());

Ou então usar alguma stock que você possivelmente tenha pra getar nomes...

Shadoww5
08/07/2011, 04:30 PM
Malz ai .. ;D

public OnPlayerConnect(playerid)
{
new string[60];
GetPlayerName(playerid, string, 24);
format(string, sizeof string , "<+> %s Entrou no Server [%d / %d]", string, Check(), GetMaxPlayers());
SendClientMessageToAll(0xFFFF00FF, string);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
new string[60];
GetPlayerName(playerid, string, 24);
format(string, sizeof string , "<-> %s Saiu do Server [%d / %d]", string, Check(), GetMaxPlayers());
SendClientMessageToAll(0xFFFF00FF, string);
return 1;
}

stock Check()
{
new players;
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(IsPlayerConnected(i)) players++;
}
return players;
}

#EDIT

Ufa ! Pelo menos agora tá correto ;D

BlueRider
08/07/2011, 04:33 PM
@Shadoww5
Continua errado, repare bem nas linhas:
format(string, sizeof string , "<+> %s Entrou no Server [%d / %d]", Check(), GetMaxPlayers());
e
format(string, sizeof string , "<-> %s Saiu do Server [%d / %d]", Check(), GetMaxPlayers());

RockFire
08/07/2011, 05:02 PM
public OnPlayerConnect(playerid) {
new nome[24];
GetPlayerName(playerid,nome,sizeof(nome));
format(string,sizeof(string),"<+> %s entrou no servidor [%i/%i]",nome,TotalPlayers(),GetMaxPlayers());
SendClientMessageToAll(-1,str);
return true;
}

public OnPlayerDisconnect(playerid,reason) {
new nome[24];
GetPlayerName(playerid,nome,sizeof(nome));
format(string,sizeof(string),"<-> %s saiu do servidor [%i/%i]",nome,TotalPlayers(),GetMaxPlayers());
SendClientMessageToAll(-1,str);
return true;
}

stock TotalPlayers() {
new count = 0,i = 0, j = GetMaxPlayers();
while(i != j) {
if(IsPlayerConnected(i)) count++;
i++;
}
return (count);
}

[R] ousenber [K]
08/07/2011, 05:06 PM
tenho uma outra duvida ¬¬' ou não sei se é erro... criei 1 Pickup seguido dum Create3DTextLabel
até ai ok , era pra passar dentro do pickup aparecer numa certa pos , so que quando chego no pickup acontece nada , e criei um pra ver se era so com pos que não ta dando, criei um dialog e coloquei no outro pickup e nada tambem alguem ajuda?

CODE:
new Prefeitura;

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == Prefeitura) {
SetPlayerInterior(playerid, 3);
GameTextForPlayer(playerid, "~y~Prefeitura de Los Santos", 5000, 1);
SetPlayerPos(playerid,388.8977,173.7054,1008.3828) ;
SetPlayerFacingAngle(playerid,81.7687);
return 1;
}
return true;
}
//gamemodeinit
Create3DTextLabel("Prefeitura", Amarelo, 1952.241088, 1343.016601, 15.374607, 20,0);
Prefeitura = CreateDynamicPickup(1318, 23, 1952.241088, 1343.016601, 15.374607,0);

Josma_cmd
08/07/2011, 05:09 PM
Não sei se você percebeu mas você colocou o Create3DTextLabel fora da public OnPlayerPickUpPickup...
No primeiro return você volta ao pickup no segundo você volta a public...

RockFire
08/07/2011, 05:18 PM
Fiz um comando pra você pegar a posição in-game e já salvar tudo as posições em suas funções...
if(!strcmp(cmdtext,"/textlabel",true)) {
new str[128],a[128],b[128],Float:f[3],index;
GetPlayerPos(playerid,f[0],f[1],f[2]);
new File:Ficheiro = fopen("textlabel.txt",io_append);
format(str,sizeof(str),"Create3DTextLabel(%s,0xFFFFFF,%0.5f,%0.5f,%0.5f,20 ,0);\r\nCreateDynamicPickup(1318,23%0.5f,%0.5f,%0. 5f);\r\n\r\n",cmdtext[12],f[0],f[1],f[2],f[0],f[1],f[2]);
fwrite(Ficheiro,str);
fclose(Ficheiro);
return true;
}

[R] ousenber [K]
08/07/2011, 05:30 PM
eu tenho um comando igual a este qui eu fiz felipe ^^ mais obrigado ...

Josma, mais nao coloca o 3dtextlabel e o pickup no OnGameModeInit??



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples (http://forum.sa-mp.com/showthread.php?t=260244)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

[Ass] Assinatura feita por JORGE_HARD


http://img716.imageshack.us/img716/8462/rgsamp2.jpg

Josma_cmd
08/07/2011, 05:36 PM
Rsrs, erro meu não prestei atenção na sua duvida, enfim, já tentou trocar CreateDynamicPickup por CreatePickup? talvez funcione...

[R] ousenber [K]
08/07/2011, 05:53 PM
jaé josma vlw funfo certo agora ^^



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples (http://forum.sa-mp.com/showthread.php?t=260244)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

[Ass] Assinatura feita por JORGE_HARD


http://img716.imageshack.us/img716/8462/rgsamp2.jpg

Shadoww5
09/07/2011, 01:18 AM
trong;1282100']Bem, fiz uma function para pegar o dia da semana, super simples usando a lógica do getdate.

stock GetWeekDay()
{
new week = getdate()+5,day,Str[20];
day = week-week/7*7;
switch(day)
{
case 0: Str = "Domingo";
case 1: Str = "Segunda-Feira";
case 2: Str = "Terça-Feira";
case 3: Str = "Quarta-Feira";
case 4: Str = "Quinta-Feira";
case 5: Str = "Sexta-Feira";
case 6: Str = "Sábado";
}
return Str;
}
Simples, funcional. Bom proveito a todos.

[S]trong, desculpa a inconveniência, mas como chegaste a tal conclusão ?

Tipo queria saber como que você conseguiu associar uma função à outra e então criar este codigo.

Se puder explicar, agradeço.

[S]trong
09/07/2011, 01:31 AM
getdate pega o dia do ano cara. O resto é simples. (Só vai funcionar este ano depois preciso fazer umas alterações, nada muito dificil só mudar o valor do +5 ali para outro que seja o necessário do ano^^)

Ricop522
09/07/2011, 01:38 AM
stock GetWeekDay(day = 0x0, month = 0x0, year = 0x0) {
if ( !day ) getdate(year, month, day); new jstr[0x3C], j, e;
if (month <= 2) month += 12; --year;
j = year % 100; e = year / 100;
switch ((day + (month+1)*26/10 + j + j/4 + e/4 - 2*e) % 7) {
case 0: str = "Sabado";
case 1: str = " Domingo";
case 2: str = " Segunda";
case 3: str = " Terca";
case 4: str = "Quarta";
case 5: str = "Quinta";
case 6: str = " Sexta";
}
return jstr;
}


Créditos: não sei | editado: me

[S]trong
09/07/2011, 01:39 AM
O meu funciona perfeitamente e não gasta tantos recursos como diz o slash. Mas este que você postou também é um bom código rs.

Shadoww5
09/07/2011, 03:49 AM
day = week-week/7*7;

2 divido por 7, vezes 7 é igual à 2.

Então pra que fazer esta divisão e multiplicação ? '-'

[S]trong
09/07/2011, 04:05 AM
Por que é isto que vai fazer o número retornar a 0 ao chegar a 7. Aprende um pouco matemática cara, presta atenção maluco n-n/7*7. Eu uso isso para quando um minuto chegar a 60 sec, retornar a 0. -.-

rjjj
09/07/2011, 04:19 AM
day = week-week/7*7;

2 divido por 7, vezes 7 é igual à 2.

Então pra que fazer esta divisão e multiplicação ? '-'




@EDIT



O método de resolver a operação que postei anteriormente não se aplicava a este caso, pois expliquei-a como se fosse uma operação normal, o que não podia ser feito, pois o valor não-definido da variável poderia ter causado uma divisão não-exata :p, o que resultaria em um valor arredondado para baixo (propriedade do Pawn, devido á ausência da Tag Float:), que por sua vez mudaria toda a operação :p.




Fiz alguns testes nessa operação matemática recentemente, e na verdade o que ocorre é isto :p:





day = week-week/7*7;




Se week é 2 por exemplo:




day = 2-2/7*7;


day = 2 - 2/7 * 7



day = 2 - 0 * 7



O quociente da divisão 2/7, devido á fatores que listarei no final deste post, acabou sendo arrendondado para 0.



Como vários números eram multiplicados pelo quociente, eles acabaram sendo cancelados devido á multiplicação por 0, o que provocou uma mudança drástica no resultado final :p (que não teria acontecido se o valor não tivesse sido arredondado) :mrgreen:.




E mesmo em divisões como 6/7 (que deveriam ser arredondados para 1, por terem valor aproxidamamente igual á 0,85), o quociente acaba sendo arredondado para 0 :p.




Após esse ocorrido, elaborei algumas regras para a divisão em Pawn, quando o resultado da mesma for armazenado em uma variável sem a tag Float:, e não for exata:



Propriedades da divisão em Pawn:




Sendo a divisão: x/y e sendo a, o resto da divisão.


- Se x = y, o quociente será 1.
- Se x < y, o quociente será 0.
- Se x > y e a = 0, o quociente será o resultado normal da divisão.
- Se x > y e a != 0, o valor de x será mudado para um valor menor que ele (e o mais próximo dele possível) que realize uma divisão exata com y (ou seja, de resto igual á 0).





Espero ter ajudado :p.

[S]trong
09/07/2011, 04:31 AM
Obrigado rjj, tenho de avisar isto é realmente útil em muitas coisas^^.

steki.
09/07/2011, 11:22 AM
Prefro usar ( brackets aritméticas ) ^^

Shadoww5
09/07/2011, 03:30 PM
Sinceramente, não entendi.

Como que chegaste à isto rjjj:

day = 48*week/49; ?

rjjj
09/07/2011, 04:05 PM
Sinceramente, não entendi.

Como que chegaste à isto rjjj:

day = 48*week/49; ?


Bem, vou explicar passo a passo como o processador vai ler a operação, olha o que vai acontecer :mrgreen:.



day = week-week/7*7;



Imagine agora, que você vai está com os olhos tapados pelas mãos (:mrgreen:) e não sabe quais números nem quais sinais há nesta operação :p.


Agora você vai começar a tirar as mãos dos olhos (pouco a pouco :p) e começar a ler a operação símbolo por símbolo, seguindo da direita para a esquerda :mrgreen:.


Vamos mostrar a ordem de símbolos que você verá nesse procedimento :p:


1º símbolo:


;


Já sabe que tem um ponto e vírgula no final :mrgreen:.


2º símbolo:


7


Já sabe que tem um 7 antes do ponto e vírgula :p.


3º símbolo:


*


Um sinal de multiplicação agora :mrgreen:.


4º símbolo:


7



PAROU ! :mrgreen:.

Veja só o que você descobriu já (na ordem :mrgreen:) :p:


; 7 * 7


Mas....ali em cima tem 7*7 certo ? :mrgreen:, então podemos multiplicar :p:



; 49



Agora vamos descobrir o resto dos símbolos:


5º símbolo:


/


6º símbolo:


week


7º símbolo:

-

8º símbolo:

week


Finalmente, temos a expressão:


; 49 \ week - week



Como 49 é o denominador (perceba que coloquei a barra invertida, pois estamos lendo tudo ao contrário) e o week (do outro lado da barra) é o numerador, e logo depois há um week negativo aplica-se a resolução de número misto (ou M.M.C) e chega-se á esta expressão abaixo :mrgreen::



; 48*week/49


Obs: o ponto e vírgula não participa do processamento da operação, coloquei ele apenas para você entender sobre a ordem que o processador lê a expressão matemática :p.



Espero ter ajudado :p.

steki.
10/07/2011, 11:56 AM
Então você diz que o ';' é o começo da instrução e não o final?

Sendo assim, como que eles vão passar as varáveis para o objeto no 'fim' da instrução?
Tipo que ele segura até identificar o objeto como var, stock, etc?

rjjj
10/07/2011, 02:30 PM
Então você diz que o ';' é o começo da instrução e não o final?

Sendo assim, como que eles vão passar as varáveis para o objeto no 'fim' da instrução?
Tipo que ele segura até identificar o objeto como var, stock, etc?



Nesse caso específico a operação iniciará por onde está o ; (que é o Final da operação :mrgreen:) sim, por haver uma multiplicação no Final (que ocorre primeiro) e por não haver a presença da Tag Float: na variável, para permitir o armazenamento/processamento de valores fracionários (perceba que isso era necessário, pois em uma parte da expressão aconteceu uma divisão não exata) :mrgreen:.



Para fazer tudo ser interpretado como Shadoww disse, teria como você disse, que haver uso dos "brackets ariméticos", ou simplesmente encaixar a Tag Float: :p.



Percebi que usei o advérbio "sempre" para designar a frequência que esse tipo de processamento ocorre, em outro post, desculpa por isso, editei lá :p.



O Armazenamento dos valores, nesse caso, ocorrerá normalmente como qualquer outro, ou seja, após a operação ser totalmente realizada, o resultado final é armazenado dentro da variável :mrgreen:.



Espero ter ajudado :p.

GuikBretas
11/07/2011, 11:41 PM
Como eu uso as coordenadas para ver se o usuário está dentro do ponto?
-2189,96, -822,1804, -992,5281, 546,7222 ~ As coordenadas são essas, ao redor do aeroporto de SF

Josma_cmd
11/07/2011, 11:43 PM
Como eu uso as coordenadas para ver se o usuário está dentro do ponto?
-2189,96, -822,1804, -992,5281, 546,7222 ~ As coordenadas são essas, ao redor do aeroporto de SF


if(IsPlayerInRangeOfPoint(playerid, raio, -2189,96, -822,1804, -992,5281, 546,7222))
{
//Ações
return 1;
}
OBS: O raio é um Float, tipo 5.0, 9.0 e assim por diante.

Ricop522
12/07/2011, 12:01 AM
if(IsPlayerInRangeOfPoint(playerid, raio, -2189.96, -822.1804, -992.5281))
{
//Ações
return 1;
}

Código errado

Josma_cmd
12/07/2011, 12:21 AM
if(IsPlayerInRangeOfPoint(playerid, raio, -2189.96, -822.1804, -992.5281))
{
//Ações
return 1;
}

Código errado

Faça algo de útil e aponte o erro e como conserta-lo.

Ricop522
12/07/2011, 12:43 AM
Faça algo de útil e aponte o erro e como conserta-lo.

if(IsPlayerInRangeOfPoint(playerid, raio, -2189.96, -822.1804, -992.5281))


if(IsPlayerInRangeOfPoint(playerid, raio, -2189,96, -822,1804, -992,5281, 546,7222))



Você errou o codigo, primeiro porque contém o ângulo .
O correto é X, Y, Z
-2189,96, -822,1804, -992,5281, 546,7222
X: -2189,96
Y: -822,1804
Z: -992,5281
Â: 546,7222

Porém, existe uma vírgula, o correto é:

X: -2189,96 ~ > X: -2189.96
E assim por diante.

Shadoww5
12/07/2011, 01:00 AM
Tenho a ligeira impressão que ele estava procurando por isto: http://wiki.sa-mp.com/wiki/Areacheck

Função IsPlayerInArea:

stock IsPlayerInArea(playerid, Float:Xmin, Float:Ymin, Float:Xmax, Float:Ymax)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(x <= Xmin && y <= Ymin && x >= Xmax && y >= Ymax) return 1;
return 0;
}

Float:Xmin = Coordenada X menor
Float:Ymin = Coordenada Y menor
Float:Xmax = Coordenada X maior
Float:Ymax = Coordenada Y maior

[BEP]AcerPilot
12/07/2011, 01:19 AM
if(IsPlayerInRangeOfPoint(playerid, raio, -2189.96, -822.1804, -992.5281))


if(IsPlayerInRangeOfPoint(playerid, raio, -2189,96, -822,1804, -992,5281, 546,7222))



Você errou o codigo, primeiro porque contém o ângulo .
O correto é X, Y, Z
-2189,96, -822,1804, -992,5281, 546,7222
X: -2189,96
Y: -822,1804
Z: -992,5281
Â: 546,7222

Porém, existe uma vírgula, o correto é:

X: -2189,96 ~ > X: -2189.96
E assim por diante.

Está completamente errado amigo, decimais se separam por pontos e não por vírgulas, o que se separa por vírgulas são termos, também chamados de parâmetros das funções, public, stocks etc, além da IsPlayerInRangeOfPoint não pedir ângulo. O código dele estava certo e você deixou-o errado.

Ricop522
12/07/2011, 01:28 AM
AcerPilot;1287778']Está completamente errado amigo, decimais se separam por pontos e não por vírgulas, o que se separa por vírgulas são termos, também chamados de parâmetros das funções, public, stocks etc, além da IsPlayerInRangeOfPoint não pedir ângulo. O código dele estava certo e você deixou-o errado.

Eu que arrumei o código dele, primeiro presta atenção nos dois códigos antes de vir falar algo aqui.
IsPlayerInRangeOfPoint(playerid, range, X, Y, Z);
Josma_CMD colocou
IsPlayerInRangeOfPoint(playerid, range, X, Y, Z, A);
Eu apenas expliquei alí que o que se usa é apenas o X,Y,Z e não A.
E float's por exemplo:

222,3
Não é 222,3 e sim
222.3

[BEP]AcerPilot
12/07/2011, 01:45 AM
Bem, ele postou o IsPlayerInRangeOfPoint certo e você, depois, postou o certo e o errado em baixo. Deu a entender que você corrigiu o dele com o código errado. Enfim, já sabe-se qual o jeito certo e desculpe por qualquer mal entendido.

Josma_cmd
12/07/2011, 03:47 AM
AcerPilot;1287793']Bem, ele postou o IsPlayerInRangeOfPoint certo e você, depois, postou o certo e o errado em baixo. Deu a entender que você corrigiu o dele com o código errado. Enfim, já sabe-se qual o jeito certo e desculpe por qualquer mal entendido.

Na verdade o erro foi meu, por pura preguiça, copiei as coordenadas já prontas que o autor da duvida postou e colei na sintaxe do IsPlayerInRangeOfPoint sem me ligar nas coordenadas e nos Floats.
Consequencia do maldito ctrl + c ctrl + v nas coords.

Shadoww5
13/07/2011, 01:45 AM
Fiz alguns testes com ESTE codigo do [S]trong (http://forum.sa-mp.com/showpost.php?p=1288526&postcount=577) para tentar entendê-lo.

new day = ((gettime()+259200));
printf("%d", day/86400); // 1
printf("%d", day/86400-day/86400); // 2
printf("%d", day/86400-day/86400/7); // 3
printf("%d", day/86400-day/86400*7); // 4
printf("%d", day/86400-day/86400/7*7); // 5

Resultados:

1 - 15171
2 - 0
3 - 13004: Pela forma como eu entendi, deveria dar 0.
4 - -91026: Este também seria 0.
5 - 2, ou seja, terça-feira (com o codigo consertado): E este também, todavia estes calculos resultam em numeros impensaveis, para mim.

Alguém poderia explicar por qual motivo os calculos acima têm tais resultados ?

OBS¹: Testes feitos às 12/07/2011 22:42
OBS²: Eu li o post do rjjj (http://forum.sa-mp.com/showpost.php?p=1283467&postcount=1417), mas não consegui entender como ele chegou a isto:

day = 48*week/49;

rjjj
13/07/2011, 04:17 AM
Fiz alguns testes com ESTE codigo do [S]trong (http://forum.sa-mp.com/showpost.php?p=1288526&postcount=577) para tentar entendê-lo.

new day = ((gettime()+259200));
printf("%d", day/86400); // 1
printf("%d", day/86400-day/86400); // 2
printf("%d", day/86400-day/86400/7); // 3
printf("%d", day/86400-day/86400*7); // 4
printf("%d", day/86400-day/86400/7*7); // 5

Resultados:

1 - 15171
2 - 0
3 - 13004: Pela forma como eu entendi, deveria dar 0.
4 - -91026: Este também seria 0.
5 - 2, ou seja, terça-feira (com o codigo consertado): E este também, todavia estes calculos resultam em numeros impensaveis, para mim.

Alguém poderia explicar por qual motivo os calculos acima têm tais resultados ?

OBS¹: Testes feitos às 12/07/2011 22:42
OBS²: Eu li o post do rjjj (http://forum.sa-mp.com/showpost.php?p=1283467&postcount=1417), mas não consegui entender como ele chegou a isto:

day = 48*week/49;




Nesse post que você citou, expliquei sobre o rumo que a operação matemática tomaria :p.



Mas, talvez você não tenha entendido devido á uma outra interpretação da relação que cada número tem com o outro, na operação matemática :mrgreen:.



Isso pode estar sendo motivo de confusão :p, explicarei, veja este código:




new lol;
lol = 1+4/2;




Há 2 maneiras de se interpretar essa última linha, veja:




lol = (1+4)/2;

Ou:


lol = 1+(4/2);




Perceba que na primeira maneira, o numerador da divisão ( o "1+4") é diferente do numerador da segunda (o "4"), essa e outras interpretações do programador que são o motivo de toda essa confusão.




A "segunda maneira de interpretar o código" é a que equivale, para o processador, ao código inicial, ou seja, este: :mrgreen:.



lol = 1+4/2;




Mas por que ? Por que na Matemática, as divisões/multiplicações ocorrem sempre antes das somas/subtrações nesse tipo de expressão, quando não há a presença de parênteses (ou "brackets") :mrgreen:.



Opa, mas e nos exemplos que você deu, que são mais complexos ? :p, vamos analisar o Teste 3:




printf("%d", day/86400-day/86400/7); // 3



Na verdade, ele é:



printf("%d", day/86400-(day/86400)/7); // 3



E não:



printf("%d", (day/86400-day/86400)/7); //3




Que é o resultado que você deve ter pensado que teria que dar, pois esse resulta em 0 :p.




Mas, como saber que tem que fazer nessa ordem ? :mrgreen:.



Basta realizar primeiro todas as multiplicações/divisões antes das somas/subtrações, e levar sempre em conta a ordem dos termos da esquerda pra direita (que intencionalmente coincide com a direção na qual o programador digitas os números) :p, exemplo:




printf("%d", day/86400 - day/86400/7); //Primeiro, separa-se as divisões (que serão realizadas primeiro)




printf("%d", day/86400 - day/86400/7); //Depois, resolve-se os termos separadamente. Vamos resolver o day/86400/7



Resolvendo:




day/86400/7 //Primeiro divide-se "day" por "86400" e depois, o resultado disso que será dividido por "7".





Espero ter ajudado :p.

arakuta
13/07/2011, 04:33 AM
Nossa Rjjj, deu uma aula de matemática agora. Só falto dizer que 1+2/4, o 1+2 viria primeiro se fosse junto por parenteses... (1+2)/4

[S]trong
13/07/2011, 04:41 AM
Eu não sei ensinar. Bom pelo menos não explicar da forma que o rjj explicou, se não conseguiu entender nem como ele explicou, se mata.

RockFire
13/07/2011, 10:53 AM
rjjj explicou de uma forma que até o mais novato poderia entender, ganhou reputation ^^

Shadoww5
13/07/2011, 01:08 PM
Agora sim ;D Valeu ai

Consegui achar o meu problema.

Ao dividir day/86400/7, o resultado é 2166,8571... Mas o pawn arredonda os valores e então a multiplicação é entre 7 e 2166 e não entre 7 e 2166,8571.

Assim, chegamos a um resultado diferente =D

Shadoww5
13/07/2011, 10:45 PM
A seção Codigos Uteis deve ser usada para a postagem de codigos e, por isto, irei continuar a discussão aqui:

...

você não itendeu.


por exemplo, se ele gera o número id 560, isto não daria para exibir, porque só existe 500 stlots.
então ele pega o int random e tira 500, fica um resultado, neste caso 60.

Conclusão
pegará o nome do id 60.


caso não entendeu, se mate.

Estou prestes a me matar.

E se ele pegar 490 ? 490 - 500 = -10 !

[R] ousenber [K]
13/07/2011, 11:26 PM
Ai criei esse CODE, não sei se ta certo...

stock SetPlayerPosAngIntVW(playerid, Float:posX, Float:posY, Float:posZ, ANG, INT = 0, VW = 0)
{
SetPlayerPos(playerid, posX, posY, posZ), SetPlayerFacingAngle(playerid, ANG), SetPlayerInterior(playerid,INT), SetPlayerVirtualWorld(playerid, VW);
return true;
}

Ele funciona certinho, so que da Warning :
C:\Users\Washington\Desktop\testes\gamemodes\bare. pwn(1295) : warning 213: tag mismatch
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

E sei qual é esse warning so que nao sei como resolver nesse code '-' , pq ta tudo certim ..

Da uma ajuda? :D

Já ia me eskecendo a linha do warning :

SetPlayerPosAngIntVW(playerid, 2324.5447, -1147.2544, 1050.7101, 359.8319, 12, 1);
A Linha ta no OnPlayerPickUpPickup , que eu coloquei pra testa num pickup q eu fiz ...



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

[Ass] Assinatura feita por JORGE_HARD


http://img716.imageshack.us/img716/8462/rgsamp2.jpg

steki.
13/07/2011, 11:45 PM
Usa _: pra dar parse.

RockFire
13/07/2011, 11:51 PM
...
stock SetPlayerPosAngIntVW(playerid, Float:posX, Float:posY, Float:posZ, Float:ANG, INT = 0, VW = 0)
{
SetPlayerPos(playerid, posX, posY, posZ), SetPlayerFacingAngle(playerid, ANG), SetPlayerInterior(playerid,INT), SetPlayerVirtualWorld(playerid, VW);
return true;
}

[R] ousenber [K]
13/07/2011, 11:55 PM
deu agora feliperch vlw ....



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

[Ass] Assinatura feita por JORGE_HARD


http://img716.imageshack.us/img716/8462/rgsamp2.jpg

ShadowParowski
14/07/2011, 12:06 AM
Alguem poderia me informar como cria casa no Law and crime porque o comando /criarcasa escreve o codigo no ficheiro casas.pwn eu copio e coloco no ficheiro property.cfg mais no server quando entra nada acontece Obrigado desde já


DESCULPEM PELO OUTRO TÓPICO ESTAVA CHATEADO POR CAUSA DO GAMEMODE

RockFire
14/07/2011, 12:10 AM
manda o código /criarcasa ._.

ShadowParowski
14/07/2011, 12:11 AM
if(strcmp(cmd,"/criarcasa",true)==0)
{
if (PlayerInfo[playerid][pAdmin] < 1341)
{
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "USE: /criarcasa [Numero da Casa]");
SendClientMessage(playerid, COLOR_GRAD1, "| 1: Casa Level 5");
SendClientMessage(playerid, COLOR_GRAD1, "| 2: Casa Level 7");
SendClientMessage(playerid, COLOR_GRAD1, "| 3: Casa Level 9");
SendClientMessage(playerid, COLOR_GRAD1, "| 4: Casa Level 12");
SendClientMessage(playerid, COLOR_GRAD1, "| 5: Casa Level 15");
SendClientMessage(playerid, COLOR_GRAD1, "| 6: Casa VIP Bronze");
SendClientMessage(playerid, COLOR_GRAD1, "| 7: Casa VIP Prata");
SendClientMessage(playerid, COLOR_GRAD1, "| 8: Casa VIP Ouro");
return 1;
}
new casa = strval(tmp);
if(casa < 1 || casa > 8)
{
SendClientMessage(playerid, COLOR_GRAD1, "Numero da Casa Invalido!");
return 1;
}
new Float:CX,Float:CY,Float:CZ;
GetPlayerPos(playerid, CX, CY, CZ);
new File:arquivo=fopen("casas.pwn", io_append);
new casastring[356];
if(casa == 1)
{
format(string, sizeof(string), "Casa LV 5 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,-42.510101,1406.101928,1084.429687,0,0,0,0,0,0,By_K uRiNgA,Poderosa Casa,300000,1,0,8,1,1,0,1000,1,3045,589,-1,-1,263,5,VW\n", CX, CY, CZ);
}
if(casa == 2)
{
format(string, sizeof(string), "Casa LV 7 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,2468.186767,-1698.214355,1013.507812,0,0,0,0,0,0,The State,Poderosa Casa,500000,0,0,2,1,0,0,1000,1,2045,589,-1,-1,262,7,VW\n", CX, CY, CZ);
}
if(casa == 3)
{
format(string, sizeof(string), "Casa LV 9 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,295.059509,1472.734985,1080.257812,0,0,0, 0,0,0,The State,Poderosa Casa,700000,0,0,15,1,0,0,1000,1,8045,589,-1,-1,155,9,VW\n", CX, CY, CZ);
}
if(casa == 4)
{
format(string, sizeof(string), "Casa LV 12 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,295.059509,1472.734985,1080.257812,0,0,0, 0,0,0,The State,Poderosa Casa,700000,0,0,15,1,0,0,1000,1,2045,589,-1,-1,155,12,VW\n", CX, CY, CZ);
}
if(casa == 5)
{
format(string, sizeof(string), "Casa LV 15 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,226.889404,1114.381347,1080.995971,0,0,0, 0,0,0,The State,Poderosa Casa,1500000,0,0,5,1,0,0,1000,1,2045,589,-1,-1,155,15,VW\n", CX, CY, CZ);
}
if(casa == 6)
{
format(string, sizeof(string), "Casa Vip Bronze Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,2324.530517,-1149.146362,1050.710083,0,0,0,0,0,0,Law and Crime,VIP BRONZE,1,0,0,12,1,0,0,1000,1,2045,506,-1,-1,155,50,VW\n", CX, CY, CZ);
}
if(casa == 7)
{
format(string, sizeof(string), "Casa Vip Prata Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,140.188003,1366.523559,1083.859375,0,0,0, 0,0,0,Law and Crime,VIP PRATA,1,0,0,5,1,0,0,1000,1,2045,451,-1,-1,155,50,VW\n", CX, CY, CZ);
}
if(casa == 8)
{
format(string, sizeof(string), "Casa Vip Ouro Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,140.188003,1366.523559,1083.859375,0,0,0, 0,0,0,Law and Crime,VIP OURO,1,0,0,5,1,0,0,1000,1,2045,541,-1,-1,155,50,VW\n", CX, CY, CZ);
}
fwrite(arquivo, casastring);
fclose(arquivo);
SendClientMessage(playerid, COLOR_WHITE, string);
return 1;
}

Shadoww5
14/07/2011, 12:16 AM
Usa _: pra dar parse.

Como assim ? o.O'

RockFire
14/07/2011, 12:19 AM
if(strcmp(cmd,"/criarcasa",true)==0)
{
if (PlayerInfo[playerid][pAdmin] < 1341) return 1;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "USE: /criarcasa [Numero da Casa]");
SendClientMessage(playerid, COLOR_GRAD1, "| 1: Casa Level 5");
SendClientMessage(playerid, COLOR_GRAD1, "| 2: Casa Level 7");
SendClientMessage(playerid, COLOR_GRAD1, "| 3: Casa Level 9");
SendClientMessage(playerid, COLOR_GRAD1, "| 4: Casa Level 12");
SendClientMessage(playerid, COLOR_GRAD1, "| 5: Casa Level 15");
SendClientMessage(playerid, COLOR_GRAD1, "| 6: Casa VIP Bronze");
SendClientMessage(playerid, COLOR_GRAD1, "| 7: Casa VIP Prata");
SendClientMessage(playerid, COLOR_GRAD1, "| 8: Casa VIP Ouro");
return 1;
}
new casa = strval(tmp);
new Float:CX,Float:CY,Float:CZ;
GetPlayerPos(playerid, CX, CY, CZ);
new File:arquivo = fopen("casas.pwn", io_append);
new casastring[356];
switch(casa)
{
case 1:
{
format(string, sizeof(string), "Casa LV 5 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,-42.510101,1406.101928,1084.429687,0,0,0,0,0,0,By_K uRiNgA,Poderosa Casa,300000,1,0,8,1,1,0,1000,1,3045,589,-1,-1,263,5,0\r\n", CX, CY, CZ);
}
case 2:
{
format(string, sizeof(string), "Casa LV 7 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,2468.186767,-1698.214355,1013.507812,0,0,0,0,0,0,The State,Poderosa Casa,500000,0,0,2,1,0,0,1000,1,2045,589,-1,-1,262,7,0\r\n", CX, CY, CZ);
}
case 3:
{
format(string, sizeof(string), "Casa LV 9 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,295.059509,1472.734985,1080.257812,0,0,0 ,0,0,0,The State,Poderosa Casa,700000,0,0,15,1,0,0,1000,1,8045,589,-1,-1,155,9,0\r\n", CX, CY, CZ);
}
case 4:
{
format(string, sizeof(string), "Casa LV 12 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,295.059509,1472.734985,1080.257812,0,0,0 ,0,0,0,The State,Poderosa Casa,700000,0,0,15,1,0,0,1000,1,2045,589,-1,-1,155,12,0\r\n", CX, CY, CZ);
}
case 5:
{
format(string, sizeof(string), "Casa LV 15 Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,226.889404,1114.381347,1080.995971,0,0,0 ,0,0,0,The State,Poderosa Casa,1500000,0,0,5,1,0,0,1000,1,2045,589,-1,-1,155,15,0\n", CX, CY, CZ);
}
case 6:
{
format(string, sizeof(string), "Casa Vip Bronze Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,2324.530517,-1149.146362,1050.710083,0,0,0,0,0,0,Law and Crime,VIP BRONZE,1,0,0,12,1,0,0,1000,1,2045,506,-1,-1,155,50,0\n", CX, CY, CZ);
}
case 7:
{
format(string, sizeof(string), "Casa Vip Prata Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,140.188003,1366.523559,1083.859375,0,0,0 ,0,0,0,Law and Crime,VIP PRATA,1,0,0,5,1,0,0,1000,1,2045,451,-1,-1,155,50,0\n", CX, CY, CZ);
}
case 8:
{
format(string, sizeof(string), "Casa Vip Ouro Criada com sucesso! [Nº%d] ",casa);
format(casastring, sizeof(casastring), "%f,%f,%f,140.188003,1366.523559,1083.859375,0,0,0 ,0,0,0,Law and Crime,VIP OURO,1,0,0,5,1,0,0,1000,1,2045,541,-1,-1,155,50,0\n", CX, CY, CZ);
}
default:
{
SendClientMessage(playerid,-1,"ERRO: Casa inválida");
return true;
}
}
fwrite(arquivo, casastring);
fclose(arquivo);
SendClientMessage(playerid, COLOR_WHITE, string);
return true;
}

ShadowParowski
14/07/2011, 12:20 AM
com isso vai criar as casas direitinho no ficheiro pwn amigo?

RockFire
14/07/2011, 12:21 AM
Sim se quiser por direto no properties.cfg só mudar o Casas.pwn pra properties.cfg

ShadowParowski
14/07/2011, 12:23 AM
Valeu obrigadão e desculpa por tudo

RockFire
14/07/2011, 12:25 AM
thanks ^^

ShadowParowski
14/07/2011, 12:29 AM
Amigo pode nao acreditar mais não aparece a casa fiz tudo direitinho e reiniciei o server e as casas não aparecerem

Dark.Angel
15/07/2011, 07:21 PM
Boa tarde a todos :D
Bom, eu estou criando um GM e gostaria de saber tudo que pode lagar o server, e como evitar isso :D

Obrigado pela atenção.

RockFire
15/07/2011, 07:37 PM
Muitos timers... Arrays com muitas células... E pra quem tem pc xuxa muitos veículos e objetos no mesmo lugar da lag

Shadoww5
15/07/2011, 07:37 PM
Boa tarde a todos :D
Bom, eu estou criando um GM e gostaria de saber tudo que pode lagar o server, e como evitar isso :D

Obrigado pela atenção.

Tem gente que pede demais, mas agora você superou todos eles.

#TOPIC

Alguem poderia responder minha duvida ?

http://forum.sa-mp.com/showthread.php?p=1291348#post1291348

Ricop522
15/07/2011, 08:11 PM
Boa tarde a todos :D
Bom, eu estou criando um GM e gostaria de saber tudo que pode lagar o server, e como evitar isso :D

Obrigado pela atenção.

Não ultilize a public OnPlayerUpdate; ela irá causar muito lag no seu servidor.
That is a problem. There are 1000ms in a second, assuming 20 players and 20 updates per second gives 400 calls to OnPlayerUpdate a second. If each one of those takes 3ms that's 1200ms of processing every 1000ms - I'm sure you can see where the issue is here!

Não use PVARS. Use apenas em casos isolados.


Faça testes constantes em seu script.

#define DEBUG_PREFORMANCE_WARNING_THRESOLD 1 //by slice

#define PERFORMANCE_CHECK_START(%0); \
new \
iStartTick = GetTickCount( ) \
;

#define PERFORMANCE_CHECK_FINISH(%0); \
iStartTick = GetTickCount( ) - iStartTick; \
\
if ( iStartTick >= DEBUG_PREFORMANCE_WARNING_THRESOLD ) \
{ \
printf( "PERFORMANCE WARNING: " %0 " was executed in %d ms.", iStartTick ); \
}

//Exemplo de uso
public OnPlayerSpawn( playerid )
{
PERFORMANCE_CHECK_START( );

// do stuff ..

PERFORMANCE_CHECK_FINISH( "OnPlayerSpawn" );
}



http://forum.sa-mp.com/showthread.php?t=61322#msg552116

Faça upgrades no seu loop.



#if defined MAX_PLAYERS
#undef MAX_PLAYERS
#define MAX_PLAYERS 100
#endif
new jTick, i ; //obrigado pelo RyDeR pelo teste
for(i = 0, jTick = GetTickCount(); i < 1000000; ++i)
{
for(new j, k = GetMaxPlayers(); j < k; ++j)
{
}
}
printf("1: %d ms", GetTickCount() - jTick);

for(i = 0, jTick = GetTickCount(); i < 1000000; ++i)
{
for(new j; j < GetMaxPlayers(); ++j)
{
}
}
printf("2: %d ms", GetTickCount() - jTick);

for(i = 0, jTick = GetTickCount(); i < 1000000; ++i)
{
new a;
for( ; a < MAX_PLAYERS; ++a)
{
}
}
printf("3: %d ms", GetTickCount() - jTick);

for(i = 0, jTick = GetTickCount(); i < 1000000; ++i)
{
foreach(Player, p)
{
}
}
printf("4: %d ms", GetTickCount() - jTick);


( Teste de loop acima.
Resultado:
1: 2226ms
2: 35203ms
3: 3008ms
4: 75ms )
E lembre-se, tenha sempre um bom sistema de salvamento, eu recomendo para você:
SII para carregamento;

fwrite( sim, aquele do sa-mp ) para salvar.

Combinando isso, você terá uma performance 'awesome' .^^
Texto by Me


Se eu te ajudei; me de um reputation ^^

steki.
15/07/2011, 08:16 PM
Mereceu. De fato, um bom uso do foreach do Y_Less, criando iterators específicos e prestando atenção a cada detalhe do script, fará o seu o melhor de todos.

[R] ousenber [K]
15/07/2011, 09:05 PM
Ai gente, peço ajuda nesse CODE , era pra quando o player tivesse nv 1 precisasse de 3 Exp e nv 2 precisasse 6 Exp e nv 3 precisasse 9 Exp e assim vai , de 3 em 3 , so que não da , alguem da uam força? '--'
CMD:adquirirlevel(playerid, params[])
{
if(DylanInfo[playerid][dExp] <= 2) return SendClientMessage(playerid, Vermelho,"Você tem poucos minutos jogados, Jogue mais!");
new string[50];
if(DylanInfo[playerid][dExp] >= (DylanInfo[playerid][dExp] * 3))
{
DylanInfo[playerid][dExp] = 0;
SendClientMessage(playerid, Azul_Marinho, "Parabens você upou de level!");
SetPlayerScore(playerid ,GetPlayerScore(playerid) +1);
format(string, sizeof(string), "~y~Você foi para o level: ~g~%i, Parabens!",GetPlayerScore(playerid));
GameTextForPlayer(playerid,string, 3000, 5);
}
return true;
}



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples v0.3 (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

http://xspblog.files.wordpress.com/2008/05/dramaticchipmunk.gif
Estou de Olho em você !

[Ass] Assinatura feita por JORGE_HARD

http://img716.imageshack.us/img716/8462/rgsamp2.jpg

Ricop522
15/07/2011, 09:20 PM
Nesse caso você teria que criar o sistema de level.
Ficaria assim:




CMD:adquirirlevel(playerid, params[])
{
new string[128];
new expatual = DylanInfo[playerid][dExp];
if(expatual != requerirExp(playerid)) return format(string, 128, "Você precisa de %iEXP! você só tem %i.", requerirExp(playerid), expatual), SendClientMessage(playerid, Vermelho,string);
DylanInfo[playerid][dExp] = 0;
DylanInfo[playerid][dLevel]++;
SetPlayerScore(playerid, DylanInfo[playerid][dLevel]);
SendClientMessage(playerid, Azul_Marinho, "Parabens você upou de level!");
SetPlayerScore(playerid ,GetPlayerScore(playerid) +1);
format(string, sizeof(string), "~y~Você foi para o level: ~g~%i, Parabens!",GetPlayerScore(playerid));
GameTextForPlayer(playerid,string, 3000, 5);
return 0x01;
}


stock requerirExp(playerid)
{
new expRequerida;
if(DylanInfo[playerid][dLevel] == 1) expRequerida = (8);
if(DylanInfo[playerid][dLevel] == 2) expRequerida = (16);
if(DylanInfo[playerid][dLevel] == 3) expRequerida = (24);
if(DylanInfo[playerid][dLevel] == 4) expRequerida = (32);
if(DylanInfo[playerid][dLevel] == 5) expRequerida = (40);
if(DylanInfo[playerid][dLevel] == 6) expRequerida = (48);
if(DylanInfo[playerid][dLevel] == 7) expRequerida = (56);
if(DylanInfo[playerid][dLevel] == 8) expRequerida = (64);
return expRequerida;
}



Espero ter ajudado ^^

Se ajudei < ~ me de um reputation

Shadoww5
15/07/2011, 09:26 PM
Nesse caso você teria que criar o sistema de level.
Ficaria assim:




CMD:adquirirlevel(playerid, params[])
{
new string[128];
new expatual = DylanInfo[playerid][dExp];
if(expatual != requerirExp(playerid)) return format(string, 128, "Você precisa de %iEXP! você só tem %i.", requerirExp(playerid), expatual), SendClientMessage(playerid, Vermelho,string);
DylanInfo[playerid][dExp] = 0;
DylanInfo[playerid][dLevel]++;
SetPlayerScore(playerid, DylanInfo[playerid][dLevel]);
SendClientMessage(playerid, Azul_Marinho, "Parabens você upou de level!");
SetPlayerScore(playerid ,GetPlayerScore(playerid) +1);
format(string, sizeof(string), "~y~Você foi para o level: ~g~%i, Parabens!",GetPlayerScore(playerid));
GameTextForPlayer(playerid,string, 3000, 5);
return 0x01;
}


stock requerirExp(playerid)
{
new expRequerida;
if(DylanInfo[playerid][dLevel] == 1) expRequerida = (8);
if(DylanInfo[playerid][dLevel] == 2) expRequerida = (16);
if(DylanInfo[playerid][dLevel] == 3) expRequerida = (24);
if(DylanInfo[playerid][dLevel] == 4) expRequerida = (32);
if(DylanInfo[playerid][dLevel] == 5) expRequerida = (40);
if(DylanInfo[playerid][dLevel] == 6) expRequerida = (48);
if(DylanInfo[playerid][dLevel] == 7) expRequerida = (56);
if(DylanInfo[playerid][dLevel] == 8) expRequerida = (64);
return expRequerida;
}



Espero ter ajudado ^^

Se ajudei < ~ me de um reputation

Mais pratico e inacabável:

stock requerirExp(playerid) return (DylanInfo[playerid][dLevel]*8);

[R] ousenber [K]
15/07/2011, 09:31 PM
Ai Mano deu certinho vlw msm , Reputation Owns :D



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples v0.3 (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

http://xspblog.files.wordpress.com/2008/05/dramaticchipmunk.gif
Estou de Olho em você !

[Ass] Assinatura feita por JORGE_HARD

http://img716.imageshack.us/img716/8462/rgsamp2.jpg

Ricop522
15/07/2011, 09:33 PM
Eu coloquei assim porque eu pensei "Ele pode querer não em intervalos de 8, mais pode querer de 8, depois de 5, depois de 10, e assim sucessivamente.."

Porém se for assim, podemos;

#define requerirExp(%0, %1) (DylanInfo[%0][dLevel] == %1) ? (true) : (false)
requerirExp(level, exp)
Acho que assim funcionaria..

Mas o código está ai, para ele quiser,

bjuxX

[R] ousenber [K]
16/07/2011, 01:10 AM
Outro duvida é qual a diferença deu usar :

new bool:Teste[MAX_PLAYERS];

De:

new Teste[MAX_PLAYERS];



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples v0.3 (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

http://xspblog.files.wordpress.com/2008/05/dramaticchipmunk.gif
Estou de Olho em você !

[Ass] Assinatura feita por JORGE_HARD

http://img716.imageshack.us/img716/8462/rgsamp2.jpg

RockFire
16/07/2011, 01:11 AM
bool é para valores true/false


new bool:oi = false;
if(oi == false) print("oi");

[R] ousenber [K]
16/07/2011, 01:14 AM
mais posso usar 1/0 ou não?



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples v0.3 (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

http://xspblog.files.wordpress.com/2008/05/dramaticchipmunk.gif
Estou de Olho em você !

[Ass] Assinatura feita por JORGE_HARD

http://img716.imageshack.us/img716/8462/rgsamp2.jpg

Transferencia
16/07/2011, 01:14 AM
Sim,Booleans sao para verificar se um Valor e Falso(False) ou Verdadeiro(True).

RockFire
16/07/2011, 01:16 AM
Não usando bool não
new bool:PQP = true;
if(PQP == true)
{
print("oi");
}

se fizer

new bool:PQP = true;
if(PQP == 1)
{
print("oi");
}

o pawno gerará um warning

warning 213: tag mismatch

Ricop522
16/07/2011, 01:22 AM
Nãoo.

Porque ?


Bom, ao criar você definiu esse valor 'oi' como sendo true ou false;
Mesmo 1 sendo true, e false sendo 0, você não pode fazer isso em uma bool.

ex:

new bool:Oi = 1; //NÃO!

new bool:Oi = true; // SIM!



if(Oi == 1 ) ? ( false ) : ( true) //ERRO!

if(Oi == true ) ? ( false ) : ( true) //CORRETO!

Transferencia
16/07/2011, 01:26 AM
Pois eh,Bolleans trabalha apenas com True e False...

[R] ousenber [K]
16/07/2011, 01:29 AM
Hum, sempre tive essa duvida, mais so muda isso? no true e no false?



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples v0.3 (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

http://xspblog.files.wordpress.com/2008/05/dramaticchipmunk.gif
Estou de Olho em você !

[Ass] Assinatura feita por JORGE_HARD

http://img716.imageshack.us/img716/8462/rgsamp2.jpg

RockFire
16/07/2011, 01:30 AM
if em operador ternário ? não seria

Oi == 1 ? (true) : (false)

?

:B

Transferencia
16/07/2011, 01:34 AM
em Operador Ternário seria:

Oi == 1

Em Bolleans seria:

Oi == True

steki.
16/07/2011, 01:52 AM
É tipo

new _int = ( a > 9 ) ? 9 : 3;

Shadoww5
16/07/2011, 06:53 PM
RetirarArma:



Código para retirar uma arma específica de determinado jogador :mrgreen:.




stock RetirarArma(playerid, weaponid)
{
new Armas[13], Balas[13], y = 12;
for(new x = 0; x != 13; x++) GetPlayerWeaponData(playerid, x, Armas[x], Balas[x]);
ResetPlayerWeapons(playerid);
while(~y)
{
if(Armas[y] == weaponid) goto skip;
GivePlayerWeapon(playerid,Armas[y], Balas[y]);
skip: y--;
}
return true;
}



Modo de uso:


RetirarArma(1, 24);//Retirará do jogador de ID 1, a arma de ID 24 (Eagle), isto é, se ele tiver :D


O que significa isto:

while(~y)

?

LINK2012
17/07/2011, 02:52 AM
Como funciona enums?
Ainda não entendi ele

Josma_cmd
17/07/2011, 02:58 AM
Como funciona enums?
Ainda não entendi ele

Enum vem de Enumerados ou Enuméricos e cria uma sequencia de variáveis, pra evitar vários news e você pode usar essa sequencia em algo. Exemplo:

enum Profissoes
{
médicos,
bombeiros,
FãsdoJosma,
Mendigos
};
//Você pode usar por exemplo nessa variável todos as variáveis dessa enum:
new PlayerInfo[MAX_PLAYERS][Profissoes];

//Ficando com uso assim por exemplo:
if(PlayerInfo[playerid][FãsdoJosma] > 1)

Pra criar outra variável é só colocar virgula, nome da próxima... não é obrigatório usar virgula na ultima variável.

Ricop522
17/07/2011, 03:01 AM
enum armazena varias variaveis em uma new
ex

enum sexo_xd
{
sexoplayer,
sexomamae,
sexopapai,
}
//tudo isso vai ser um
new Sexo[sexo_xd];


para usar so basta

Sexo[sexopapai]

assim por diante

RockFire
17/07/2011, 03:11 AM
enum armazena varias variaveis em uma new
ex

enum sexo_xd
{
sexoplayer,
sexomamae,
sexopapai,
}
//tudo isso vai ser um
new Sexo[sexo_xd];


para usar so basta

Sexo[sexopapai]

assim por diante

Ele define arrays dentro de uma array

enum oi
{
t1[2],
Float:t2
};
new tchau[oi];

main()
{
tchau[t1][0] = 24;
tchau[t1][1] = 69;
tchau[t2] = 24.69;
printf("%i, %i- %0.2f",tchau[t1][0],tchau[t1][1],tchau[t2]);
}

Shadoww5
17/07/2011, 01:53 PM
1 - Alguem me responde ? *-*

O que significa isto:

while(~y)

?

2 - Eu estava dando uma olhada no manual do pawno (pagina 108) e encontrei isto:

Predefined tag names


bool: For “true/false” flags. The predefined constants true and false have this tag.
Fixed: Rational numbers have this tag when fixed point support is enabled (page 123).
Float: Rational numbers have this tag when floating point support is enabled (page 123).


As tags bool e Float: eu já conheço, mas e a Fixed: para que serve ?

steki.
17/07/2011, 01:54 PM
São números racionais. Não sei direito como usar em pawn, mas http://pt.wikipedia.org/wiki/N%C3%BAmero_racional

Shadoww5
17/07/2011, 01:56 PM
Alguem sabe em quais casos essa tag pode ser usada ? '-'

-------------------------------

O que significa isto ?

while(~y)

steki.
17/07/2011, 01:59 PM
http://www.compuphase.com/pawn/Fixed_Point_Support.pdf

[FTC]Scorpion
18/07/2011, 03:28 PM
Esqueci como que eu faço pra 2 comandos significarem a mesma coisa...

Tipo, eu digito /mycommand e /meucomando , e aparece a mesma coisa...

Alguém pode me explicar? \õ/

RockFire
18/07/2011, 03:37 PM
if(!strcmp(cmdtext,"/oi",true) || !strcmp(cmdtext,"/tchau",true))

|| é "ou"
&& é "e"

[FTC]Scorpion
18/07/2011, 03:39 PM
Aeee, valeu \õ/

reputation!

[R] ousenber [K]
18/07/2011, 07:31 PM
Humm... To testando um CODE dum cara ai( não sei o nome ) num GM q tenho aqui, so que fica dando warning...

//Warning :
C:\Users\Washington\Desktop\testes\gamemodes\teste .pwn(656) : warning 201: redefinition of constant/macro (symbol "OnPlayerKeyStateChange")
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.


//Linha :

#define OnPlayerKeyStateChange Walk_OnPlayerKeyStateChange

//Abaixo desse define ta o OnPlayerKeyStateChange

Sei o que é o Warning eu acho...mais fiz uma coisa e deu erro...



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples v0.3 (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

http://xspblog.files.wordpress.com/2008/05/dramaticchipmunk.gif
Estou de Olho em você !

[Ass] Assinatura feita por JORGE_HARD

http://img716.imageshack.us/img716/8462/rgsamp2.jpg

steki.
18/07/2011, 07:33 PM
Significa que já foi #define'ida.

[R] ousenber [K]
18/07/2011, 07:44 PM
Ok, consegui concerta so que não funciona , não sei se alguem pode ajudar nesse CODE quem me ajudar blz se nao poderem blz (:

No code o modo de andar não muda quando do /mudarstilo ....

/*
seif_walk - Walking styles by Seif
*/
/*x---------------------------------Important-------------------------------------x*/
//**INCLUDES**//
#include <a_samp>
#include <sscanf2>
#include <ZCMD>
/*x---------------------------------Defining-------------------------------------x*/
//**DEFINES**//
#define WALK_DEFAULT 0
#define WALK_NORMAL 1
#define WALK_PED 2
#define WALK_GANGSTA 3
#define WALK_GANGSTA2 4
#define WALK_OLD 5
#define WALK_FAT_OLD 6
#define WALK_FAT 7
#define WALK_LADY 8
#define WALK_LADY2 9
#define WALK_WHORE 10
#define WALK_WHORE2 11
#define WALK_DRUNK 12
#define WALK_BLIND 13
//**VARIABLES**//
new walktime[MAX_PLAYERS];
new WalkStyle[MAX_PLAYERS];
//**NATIVES**//
/*
native SetPlayerWalkingStyle(playerid, style)
native GetPlayerWalkingStyle(playerid)
*/
/*x---------------------------------CallBacks-------------------------------------x*/
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (((newkeys & KEY_WALK && newkeys & KEY_UP) || (newkeys & KEY_WALK && newkeys & KEY_DOWN) || (newkeys & KEY_WALK && newkeys & KEY_LEFT) || (newkeys & KEY_WALK && newkeys & KEY_RIGHT))
|| ((oldkeys & KEY_WALK && newkeys & KEY_UP) || (oldkeys & KEY_WALK && newkeys & KEY_DOWN) || (oldkeys & KEY_WALK && newkeys & KEY_LEFT) || (oldkeys & KEY_WALK && newkeys & KEY_RIGHT))
|| ((newkeys & KEY_WALK && oldkeys & KEY_UP) || (newkeys & KEY_WALK && oldkeys & KEY_DOWN) || (newkeys & KEY_WALK && oldkeys & KEY_LEFT) || (newkeys & KEY_WALK && oldkeys & KEY_RIGHT))
&& GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
return Walk_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
}


forward Walk_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);

#define OnPlayerKeyStateChange Walk_OnPlayerKeyStateChange

public Walk_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
new keys, updown, leftright;
GetPlayerKeys(playerid,keys,updown,leftright);
if (GetPlayerWalkingStyle(playerid) == WALK_NORMAL) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WALK_player",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WALK_player",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_PED) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WALK_civi",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WALK_civi",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_GANGSTA) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WALK_gang1",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WALK_gang1",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_GANGSTA2) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WALK_gang2",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WALK_gang2",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_OLD) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WALK_old",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WALK_old",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_FAT_OLD) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WALK_fatold",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WALK_fatold",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_FAT) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WALK_fat",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WALK_fat",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_LADY) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WOMAN_walknorm",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WOMAN_walknorm",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_LADY2) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WOMAN_walkbusy",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WOMAN_walkbusy",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_WHORE) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WOMAN_walkpro",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WOMAN_walkpro",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_WHORE2) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WOMAN_walksexy",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WOMAN_walksexy",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_DRUNK) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","WALK_drunk",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","WALK_drunk",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
else if (GetPlayerWalkingStyle(playerid) == WALK_BLIND) {
if ((keys & KEY_WALK && updown & KEY_UP) || (keys & KEY_WALK && updown & KEY_DOWN) || (keys & KEY_WALK && leftright & KEY_LEFT) || (keys & KEY_WALK && leftright & KEY_RIGHT)) {
KillTimer(walktime[playerid]);
ApplyAnimation(playerid,"PED","Walk_Wuzi",4.1,1,1,1,1,1);
walktime[playerid] = SetTimerEx("WalkAnim",200,0,"d",playerid);
}
else ApplyAnimation(playerid,"PED","Walk_Wuzi",4.0,0,0,0,0,1), KillTimer(walktime[playerid]);
}
return 1;
}


CMD:mudarstilo(playerid, params[])
{
new stile;
if(sscanf(params, "d", stile)) return SendClientMessage(playerid, -1, "Use: /mudarstilo [Stilo]");
SetPlayerWalkingStyle(playerid, stile);
return true;
}


stock SetPlayerWalkingStyle(playerid, style)
{
WalkStyle[playerid] = style;
}


stock GetPlayerWalkingStyle(playerid)
{
return WalkStyle[playerid];
}



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples v0.3 (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

http://xspblog.files.wordpress.com/2008/05/dramaticchipmunk.gif
Estou de Olho em você !

[Ass] Assinatura feita por JORGE_HARD

http://img716.imageshack.us/img716/8462/rgsamp2.jpg

Josma_cmd
18/07/2011, 09:47 PM
Dylan, não sei se é só comigo, mas percebi que muitas animações na 0.3c não funcionam, só as principais como Handsup entre outras, testei +/- 250 animações e nenhuma delas funcionou.

[FTC]Scorpion
18/07/2011, 10:07 PM
Queria saber se tem como bloquear alguns veículos no comando /car, pois vou liberar ele pros jogadores...

Segue:

if(strcmp(cmd, "/car", true) == 0) {
new tmp[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, VERMELHO, "USE: /car [carroid] [cor1] [cor2]");
return 1;
}
new car;
car = strval(tmp);
if(car < 400 || car > 611) {
SendClientMessage(playerid, VERMELHO, "Crie veículos dos IDs 400 até 611");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, VERMELHO, "USE: /veiculo [carroid] [cor1] [cor2]");
return 1;
}
new color1;
color1 = strval(tmp);
if(color1 < 0 || color1 > 900) {
SendClientMessage(playerid, VERMELHO, "Escolha uma cor de 0 a 300");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, VERMELHO, "USE: /veiculo [carroid] [cor1] [cor2]");
return 1;
}
new color2;
color2 = strval(tmp);
if(color2 < 0 || color2 > 900) {
SendClientMessage(playerid, VERMELHO, "Escolha uma cor de 0 a 300");
return 1;
}
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid, X,Y,Z);
TodosOsVeiculos[++total] = CreateVehicle(car, X, Y, Z, 0.0, color1, color2, 60000); // this
return 1;
}

[R] ousenber [K]
18/07/2011, 10:13 PM
Dylan, não sei se é só comigo, mas percebi que muitas animações na 0.3c não funcionam, só as principais como Handsup entre outras, testei +/- 250 animações e nenhuma delas funcionou.

Comigo tambem muitas não funcionam ... estranho '-'

if(strcmp(cmd, "/car", true) == 0) {
new tmp[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, VERMELHO, "USE: /car [carroid] [cor1] [cor2]");
return 1;
}
new car;
car = strval(tmp);
if(car < 400 || car > 611) {
SendClientMessage(playerid, VERMELHO, "Crie veículos dos IDs 400 até 611");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, VERMELHO, "USE: /veiculo [carroid] [cor1] [cor2]");
return 1;
}
new color1;
color1 = strval(tmp);
if(color1 < 0 || color1 > 900) {
SendClientMessage(playerid, VERMELHO, "Escolha uma cor de 0 a 300");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, VERMELHO, "USE: /veiculo [carroid] [cor1] [cor2]");
return 1;
}
new color2;
color2 = strval(tmp);
if(color2 < 0 || color2 > 900) {
SendClientMessage(playerid, VERMELHO, "Escolha uma cor de 0 a 300");
return 1;
}
if(car == 432) return SendClientMessage(playerid, VERMELHO, "Esse não pode Manolo!");
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid, X,Y,Z);
TodosOsVeiculos[++total] = CreateVehicle(car, X, Y, Z, 0.0, color1, color2, 60000); // this
return 1;
}

Não sei se funfa, se funfar não é pra deixar criar o Rhino...



__________________________________________

...Meus Trabalhos...
[FisterScripts]
Sistema de Admin e Helper Simples v0.3 (http://forum.sa-mp.com/showthread.php?t=260244)
Sistema de Viagem v0.5 (http://forum.sa-mp.com/showthread.php?t=267558)

[Includes]
Nenhum...

[GameModes]
Nenhum...

[Tutoriais]
Nenhum...

[Maps]
W.D.A. ( Water Dylan Airport ) (http://forum.sa-mp.com/showthread.php?p=1279380)

Se meu post lhe ajudou , lhe deixou confuso Clique nesta imagem >> http://img219.imageshack.us/img219/3541/reputations.png<< abaixo do meu avatar

http://xspblog.files.wordpress.com/2008/05/dramaticchipmunk.gif
Estou de Olho em você !

[Ass] Assinatura feita por JORGE_HARD

http://img716.imageshack.us/img716/8462/rgsamp2.jpg


http://www.shareyouraim.com/at_7688679.png

[FTC]Scorpion
19/07/2011, 12:14 AM
Deu certinho, Dylan! Valeu aí! \õ/

Reputation =]

ASDF
20/07/2011, 02:56 AM
Galera, gostaria de saber se tem como salvar SetTimerEx em dini? Se tem, alguém poderia me explicar somente uma base de como fazer? Agradeço desde já.

Falcon.
20/07/2011, 03:26 AM
Olá ASDF.


Não tem como salvar o tempo em sí...

O que você pode fazer e criar uma variável para armazenar este tempo, e então salva-la.

Exemplo:


new SegundosPassados;

if(!strcmp(cmdtext, "/iniciartimer", true))
{
SetTimerEx("MeuTimerEx", 1000, true, "d", playerid);
SendClientMessage(playerid, -1, "Você deu início ao timer...");
return 0x1;
}

if(!strcmp(cmdtext, "/salvartimer", true))
{
if(!dini_Exists("MeuTimer.ini")) dini_Create("MeuTimer.ini");
dini_IntSet("MeuTimer.ini", "SegundosPassados", SegundosPassados);
SendClientMessage(playerid, -1, "Você salvou o tempo do timer...");
return 0x1;
}

forward MeuTimerEx(playerid);
public MeuTimerEx(playerid)
{
SegundosPassados ++;
SendClientMessage(playerid, -1, "Mais um segundo se passou...");
return 1;
}

caso não queira utilizar o timer de um em um segundo poderá está utilizando em por exemplo '5 segundos'..
ficando desta forma:


if(!strcmp(cmdtext, "/iniciartimer", true))
{
SetTimerEx("MeuTimerEx", 5000, true, "d", playerid);
SendClientMessage(playerid, -1, "Você deu início ao timer...");
return 0x1;
}

forward MeuTimerEx(playerid);
public MeuTimerEx(playerid)
{
SegundosPassados += 5;
SendClientMessage(playerid, -1, "Mais cinco segundos se passaram...");
return 1;
}


Atenciosamente,
Falcon.

Shadoww5
21/07/2011, 01:00 AM
Alguém me explica como funciona isto aqui ?

#define LoopVeiculos(%0) for(new i = 1; GetVehicleModel( i ) ; i++)

Consigo entender todo o loop, exceto o GetVehicleModel. Não sei por qual motivo o loop pára quando o modelo é invalido.

rjjj
21/07/2011, 03:34 AM
Alguém me explica como funciona isto aqui ?

#define LoopVeiculos(%0) for(new i = 1; GetVehicleModel( i ) ; i++)

Consigo entender todo o loop, exceto o GetVehicleModel. Não sei por qual motivo o loop pára quando o modelo é invalido.


Bem, primeiro vamos ver o código de outra forma :mrgreen::



for(new i = 1; GetVehicleModel( i ) != 0 ; i++)



A expressão acima é a mesma que você citou, mas declarada de outra forma :p.


Nela, GetVehicleModel( i ) != 0 é a condição para que o loop prossiga, portanto o loop vai funcionar enquanto o valor retornado por GetVehicleModel for diferente de 0 :p.


Agora, digamos que temos 2 veículos, um Turismo(Modelo 451) e um Sultan(Modelo 560), de IDs 1 e 2 respectivamente :mrgreen::


Nos 2 primeiros ciclos do loop (quando i representa os IDs 1 e 2 (que são dos carros que citei antes)), a condição para que o loop prossiga ficará assim:



GetVehicleModel( 1 ) != 0 //Condição no primeiro ciclo
GetVehicleModel( 2 ) != 0 //Condição no segundo ciclo



Que é o mesmo que:


451 != 0 //Condição no primeiro ciclo
560 != 0 //Condição no segundo ciclo



Como realmente 451 é diferente de 0 :mrgreen: a condição para que o loop prossiga é válida no primeiro ciclo, fazendo com que o segundo possa ser iniciado.

O mesmo ocorre com o segundo, em relação ao terceiro :p.


Entretanto, quando i assumir o valor de um ID de um veículo que não existe (que vai ser um número maior que cada um dos IDs dos veículos existentes), o loop vai parar, pois GetVehicleModel retorna 0 quando o veículo não existe, fazendo a condição para que o loop prossiga ficar assim:


0 != 0



Como 0 não é diferente de 0 (pois eles são iguais :mrgreen:) a condição para que o loop prossiga é processada como inválida, consequentemente, o loop para :mrgreen:.



Espero ter ajudado :p.

Shadoww5
21/07/2011, 08:45 AM
Ok, mas, por exemplo, já que o GetVehicleModel seria a condicional do loop, porque que eu não poderia colocar somente MAX_PLAYERS e não i < MAX_PLAYERS?

rjjj
21/07/2011, 12:23 PM
Ok, mas, por exemplo, já que o GetVehicleModel seria a condicional do loop, porque que eu não poderia colocar somente MAX_PLAYERS e não i < MAX_PLAYERS?



Se fosse somente MAX_PLAYERS, seria o mesmo que MAX_PLAYERS != 0 :mrgreen:.


Como o valor de MAX_PLAYERS é diferente de 0, mas é constante, a condição para que o loop prossiga ficaria sempre assim:


MAX_PLAYERS != 0

Que seria o mesmo que:


500 != 0


Já que 500 é diferente de 0 :mrgreen:, e o valor de MAX_PLAYERS não muda a cada ciclo do loop, a condição para que o loop prossiga é sempre válida, o que faz o loop ficar infinito :p.


Em suma, o que faz o loop "parar" após um certo número de repetições é justamente o fato da condição mudar com o acréscimo da variável (no caso do i), que é o que ocorre neste caso que você citou, veja :mrgreen::



i < MAX_PLAYERS


Nesse caso, uma hora a variável i (após crescer muito) acaba ficando igual á 500, fazendo a condição ficar inválida, e o loop parar :mrgreen:.



Espero ter ajudado :p.

Tymer
21/07/2011, 01:06 PM
Alguém Aí Me Passa Link´s De FS Login Box´s