Chat



Mostrando postagens com marcador Códigos úteis. Mostrar todas as postagens
Mostrando postagens com marcador Códigos úteis. Mostrar todas as postagens

[Código útil] IsVehicleInRangeOfPoint

27 de nov. de 2011

Postado por: Progressão Pawn
0
Olá, um usuário postou uma duvida no fórum samp que retratava a situação onde era necessário verificar se um veículo estava em um raio de distância de uma certa coordenada, semelhante ao IsPlayerInRangeOfPoint usado para verificar players.
Diante disto, adaptei o código que havia postado à alguns dias atrás aqui no blog pra fazer essa verificação, é um simples teorema de pitágonas, não cheguei à testar mas é provável que funcione.

Código


IsVehicleInRangeOfPoint(Float:Raio, Float:xb, Float:yb, Float:zb, Float:X2b, Float:Y2b, Float:Z2b)
{
new Float:resultadodist = floatsqroot(((xb - X2b) * (xb - X2b)) + ((yb - Y2b) * (yb - Y2b)) + ((zb - Z2b) * (zb - Z2b)));
return ((resultadodist <= Raio) ? true : false); }


Exemplo de uso:


new Float:J[3];
GetVehiclePos(IDDoVeiculo, J[0], J[1], J[2]);
if(GetarDistancia1(J[0], J[1], J[2], CoordX, CoordY, CoordZ)) //Coloque nos três últimos parâmetros suas coordenadas.
{
//Execute aqui o que quiser caso esteja na coordenada.
}

[Código útil] strcmp com comparação true | false

4 de nov. de 2011

Postado por: Progressão Pawn
0
Olá, ontem um programador veio até mim com a hipótese de usar o strcmp para comparar se as strings (não são) iguais, depois de algumas tentativas chegamos à conclusão de que o strcmp não tem muita lógica, diante disso, criei uma função semelhante ao strcmp padrão porem, com a opção de verificar se as strings são compatíveis ou não.

 PP_strcomp(stringA[], stringB[], maxcell, bool: index)
{
new PP = -1; //-1 usado para que o operador incremental possa ser usado no próprio laço do loop
if(index == true) //Caso as duas strings sejam compativeis
{
new bool: compativel = true; //Seta para true, caso compatível passará pelo loop e ainda será true
while(++PP < maxcell)
{
if(strlen(stringA[PP]) != strlen(stringB[PP])) { compativel = false; } //Torna false caso incompatível
}
if(compativel == false) return false; //Se não for compatível retornará à false
if(compativel == true) return true; //Se ainda for compatível retornará à true
}
else if(index == false) //Caso as duas strings sejam incompativeis
{
new bool: compativel = true; //Seta para true, caso compatível passará pelo loop e ainda será true
while(++PP < maxcell)
{
if(strlen(stringA[PP]) != strlen(stringB[PP])) { compativel = false; } //Torna false caso incompatível
}
if(compativel == false) return true; //Se não for compatível retornará à true
if(compativel == true) return false; //Se ainda for compatível retornará à false
}
return false;
}


O código abaixo usei com intuito de testar a função, chame ela no OnGameModeInit e veja o resultado na tela do console.


CallBack::TestarSTRCMP()
{
if(PP_strcomp("Josma", "Josma", 5, true)) //true para verificar se as strings SÃO iguais.
{
print("Josma é igual Josma");
}
if(PP_strcomp("Josma", "Progressao", 5, false)) //false para comparar se as strings NÃO SÃO iguais.
{
print("Josma não é igual Progressao");
}
//***********[ Teste de bug ]**************
if(PP_strcomp("Josma", "Josma", 5, false)) //false para comparar se as strings NÃO SÃO iguais.
{
print("Josma não é igual Josma");
}
if(PP_strcomp("Josma", "Progressao", 5, true)) //true para verificar se as strings SÃO iguais.
{
print("Josma é igual Progressao");
}
return true;
}
Resultado:


Créditos: Josma_CMD

[Código útil] Distância entre pontos.

29 de out. de 2011

Postado por: Progressão Pawn
0

Olá, fiz esta callback com o objetivo de getar a distância entre dois pontos com 6 frações de entrada e 1 de saída sendo o resultado do mesmo, as 6 frações de entradas são X, Y e Z da primeira coordenada e X, Y e Z da segunda coordenada, como já devem saber, X é relativo à longitude = norte sul Y é igual à latitude = leste oeste e Z igual à altitude = cima baixo.
Esta callback é semelhante à criada pelo samp team, a maior diferença é o uso de operadores aritméticos no lugar das funções floatmul, floatadd, floatdiv dentre outras, este código pode ser adaptado pra getar qual player do servidor está mais próximo de um certo ponto(Verificando todos os players) como também pra verificar qual dos dois players estão mais próximos. Pretendo aperfeiçoar este código dando-lhe mais opções à ele e lançando como include ou plugin. Espero que gostem.


CallBack::Float:GetarDistancia(Float:xb, Float:yb, Float:zb, Float:X2b, Float:Y2b, Float:Z2b)
{
return floatsqroot(((xb - X2b) * (xb - X2b)) + ((yb - Y2b) * (yb - Y2b)) + ((zb - Z2b) * (zb - Z2b)));
}



Agradecimento: SlashPT pela força com o código e Samp Team.

About This Blog