Chat



[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.
}

[Designer] Avatar CMD

14 de nov. de 2011

Postado por: Progressão Pawn
0

Olá, fiz este avatar pra usar em fóruns e estou postando. Levei cerca de 20 minutos pra fazer mesmo sendo tão simples. Sou um pouco perfeccionista.

[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

[Designer] Banners para blogs

Postado por: Progressão Pawn
0
Olá, à alguns dias, pra ser mais exato dia 31/10/2011 eu baixei o adobe photoshop cs4 e comecei atacar de designer por assim dizer. Eu já montava algumas imagens nada muito impressionante usando o gimp, mas fiz umas imagens deste dia pra cá e achei que não ficaram tão ruins.
Vou postar esses dois banners que fiz pra dois blogs, o (Projetos Josma_CMD) e o (GTA Mods Downloads)


[FilterScript] Sistema de pontos

2 de nov. de 2011

Postado por: Progressão Pawn
0

Este sistema foi criado dia 18/04/11, é um contador de pontos(Pra mortes).

Como funciona:
Quando o player mata alguém é acrescentado 1 ponto.
Quanto o player morre pra alguém é retirado 1 ponto.

Sobre o código:

No OnPlayerDeath
Acrescenta 1 Morte e retira 1 Ponto de quem morreu.
Acrescenta 1 Matou e 1 Ponto de quem matou.
ao matar ou morrer é setado o string do TextDraw com a nova pontuação do player.
ao matar ou morrer é setado o Score exibido no TAB com a pontuação do player.

No OnPlayerConnect
É criado o TextDraw dos pontos, cada player tem seu TextDraw com o [MAX_PLAYERS] pra evitar que um player veja os pontos de outros no lugar do seu.
é calculado quanto o player matou -(menos) quanto ele morreu e setado no string do TextDraw o resultado.

No OnFilterScriptExit
é destruído todos os textdraw's pra evitar que ainda vejam os pontos após o FS ser descarregado.

Salvamento e Carregamento
Tem 2 publics, uma carrega e outra salva as informações(matou, morreu), é salvo quando o player desconecta e carregado ao conectar.
mas atenção, se você esquecer de criar a pasta PontosInfo não será salvo as informações.

Observações:
é preferencial para o uso em servidores de DM.
é Permitido que postem em blogs(se quiserem) desde que não retirem os créditos =).
é necessário criar a pasta (PontosInfo) na scriptfiles do seu servidor pra que os pontos sejam salvos.

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.

[Tutorial] sobre Switch

26 de out. de 2011

Postado por: Progressão Pawn
0
O que é o switch?
Switch é um comparador de resultados semelhante às estruturas if e else if porem, ele trabalha com uma mecânica um pouco diferente dessas citadas; funciona como um loop que verifica todos os possiveis resultados do primeiro ao último case ou default.


Qual a diferença entre o else if e o switch?
Switch além de mais organizado é mais prático economizando e muito o uso de operadores relacionais além de ser de fácil compreensão, porem, em alguns códigos é mais aconselhável o uso do if para empregar estruturas não indicadas no switch.

Este é um exemplo de uma das formas de se fazer um /admins em if, elseif e em switch.


if (strcmp(cmdtext, "/admins", true) == 0)
{
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) == 1 && PlayerInfo[i][pAdmin] > 0)
{
if(PlayerInfo[i][pTrampo] == 1)
{
GetPlayerName(i, sendername, sizeof(sendername));
if(PlayerInfo[i][pAdmin] == 1)
{
format(string, sizeof(string), "Nome: %s [Moderador] (Trabalhando)", sendername);
SendClientMessage(playerid, COR_ADMINS, string);
}
if(PlayerInfo[i][pAdmin] == 2)
{
format(string, sizeof(string), "Nome: %s [Administração Nível 2] (Trabalhando)", sendername);
SendClientMessage(playerid, COR_ADMINS, string);
}
if(PlayerInfo[i][pAdmin] == 3)
{
format(string, sizeof(string), "Nome: %s [ Administração Nível 3] (Trabalhando)", sendername);
SendClientMessage(playerid, COR_ADMINS, string);
}
}
}
}
return 1;
}


O exemplo acima mostra como seria um /admins usando else if, veja como ficaria este comando usando switch abaixo

if(strcmp(cmdtext, "/admins", true) == 0)
{
for(new i, PP = GetMaxPlayers(); i < PP; i++)
{
switch(PlayerInfo[i][pAdmin])//Função a ser verificada
{
case 1: format(string, 256, "Nome: %s [Moderador] (Trabalhando)", sendername), SendClientMessage(playerid, COR_ADMINS, string); //Se a função verificada for igual a 1
case 2: format(string, 256, "Nome: %s [Administrador nível 2] (Trabalhando)", sendername), SendClientMessage(playerid, COR_ADMINS, string); //Se a função verificada for igual a 2
case 3: format(string, 256, "Nome: %s [Administrador nível 3] (Trabalhando)", sendername), SendClientMessage(playerid, COR_ADMINS, string); //Se a função verificada for igual a 3
default: /*Aqui a função a ser execultada caso nada se iguale aos resultados acima.*/
}
}
return 1;
}


Criando o seu switch:
Crie seu switch com a função a ser verificada que quiser, mas siga este formato abaixo:

switch (Função) //Coloque por exemplo um PlayerInfo[player][info] ou qualquer outra coisa
{
case 1: O que deve ser executado caso seja igual a 1
case 2: O que deve ser executado caso seja igual a 2
case 3: O que deve ser executado caso seja igual a 3
default: O que deve ser executado caso não seja igual aos exemplos acima //Não obrigatório
}


Você pode também modificar a sequencia de case's para que ele possa procurar resultados diferentes pra executar a mesma ação.

case 1, 2, 3: //O que deve ser executado caso seja igual a 1, 2 ou 3


Veja um exemplo do mesmo código abaixo usado com if

if(Função == 1 || Função == 2 || Função == 3)
{
//O que deve ser executado caso a função seja igual a 1, 2 ou 3
return 1;
}


Você pode também verificar resultados de um numero à outro, como no exemplo abaixo.

case 1 .. 10: //O que deve ser executado caso o resultado se enquadre entre 1 e 10


Em if ficaria assim

if(Função >= 1 && Função <= 3)
{
//O que deve ser executado caso a Função se enquadre entre ou igual 1 ou 4
return 1;
}


Abaixo um exemplo bem distinto dos cases:

if (strcmp(cmdtext, "/org", true) == 0)
{
switch (PlayerInfo[playerid][pMembro])
{
case 1 .. 3:
{
SendClientMessage(playerid, Cor, "Você pertence a uma org igual ou entre 1 e 3");
}
case 7, 8, 10:
{
SendClientMessage(playerid, Cor, "Você pertence a org 7, 8 ou 10");
}
case 4:
{
SendClientMessage(playerid, Cor, "Você pertence a org 4");
}
default:
{
SendClientMessage(playerid, Cor, "Você pertence a uma org que não é 1, 2, 3, 4, 7, 8 ou 10");
}
}
return 1:
}

[FilterScript] Carro louco

Postado por: Progressão Pawn
0

Fiz este FilterScript no começo de 2011, com ele, é possível escolher duas cores que serão setadas em um intervalo de tempo dando uma impressão de que o veículo está piscando ou algo assim.
O resultado é semelhante à este mostrado acima.


Créditos: Josma_CMD

Perfil Josma_CMD

Postado por: Progressão Pawn
0

Olá à todos leitores do blog(Que não são muitos) rsrs. Venho contar um pouco sobre mim, isso poderia tornar o blog uma coisa mais pessoal ou algo parecido mas farei mesmo assim, na verdade decidi fazer este post pra ter algo para aplicar ao tag alt.

Não tenho muito o que dizer, ao menos não muito que não torne a postagem algo repetitivo, rotineiro e cansativo, mas vamos lá. Meu nome é Josma, eu programo desde 2006, comecei com Pawn, a linguagem em que sou mais fluente apesar de não saber exatamente tudo(Inclusive por falta de experiencia em demais linguagens). Conheci o mundo da programação ao me deparar com a necessidade de criar um servidor de GTA San Andreas Multiplayer para não ver os amigos do meu clã de um servidor se afastarem após o servidor ter sido fechado por consequência de brigas entre os donos e líderes. Meio que sem saber o que estava fazendo procurei um GameMode pra lançar um servidor com o nome de CMD(Que por ventura veio à fazer parte do meu nick virtual). Foi bem difícil conseguir colocar o servidor online, e após consegui me senti em um pais onde ninguém falava minha língua, os códigos eram completamente estranhos mas percebi que se não aprendesse meu servidor faliria como seu antecessor, logo comecei editando mensagens, textos, posteriormente coordenadas dentre outras coisas, até então eu não fazia ideia do que era programação, apenas editava códigos já prontos, a maioria inclusive feitos de maneira incorreta. Decidi começar fazer meus projetos, mas leigo, me deparei com vários erros, e ao pedir ajuda aos que considerava mais "experientes" fui chamado de noob muitas vezes, isso me gerou uma raiva e então prometi à mim mesmo que me aperfeiçoaria na linguagem pra não ter que pedir ajuda à ninguém, codei meu próprio GM de Drift que veio à ser eleito por um blog como melhor do Brasil e em uma segunda votação o melhor da América Latina, parei com o samp, voltei após algum tempo porem, como player, apenas jogando e em uma nova categoria de servidor. RPG, nele, descobri uma equipe de scripters chamada FusioN na qual me inscrevi como scripter/mapper, fui aceito no 1° Regimento, tinha a esperança de que voltasse à codar e voltasse melhor do que codava antes, não foi bem como eu esperava, ensinei mais do que aprendi e continuei sendo subestimado, após sustentar como administrador o servidor desta equipe por meses, mantendo players e tudo mais acabei saindo do servidor por problemas com a liderança(Que nem valem apena ser citados), entrei na Vision, que posteriormente acabei saindo pelo mesmo problema e que acabou falindo dias depois.
Continuei codando, desta vez individualmente, até que dei uma ideia ao Lincon(Chainksain) de criarmos uma micro-empresa na internet destinada à dar aulas para scripters iniciantes em Pawn, a ideia foi bem aceita, criamos o Progressão Pawn, houve muito preconceito muitos diziam ser injusto cobrar por uma coisa que as pessoas poderiam aprender gratuitamente, não entendiam que o que importa não é a pessoa poder aprender sozinha, o que importa é o auxilio que ela teria pra aprender com um curso, assim como alguém aprende falar Inglês em anos assistindo filmes e ouvindo dialogos ele poderá aprender em meses com um curso. Mesmo com esse certo preconceito, foi uma ideia que deu certo, apareceram muitos alunos, meu antigo sócio saiu do PP por problemas pessoais. Percebendo que o tempo estava curto para dar aulas e eu não queria acabar com o Progressão criei uma nova divisão destinada à codar contratos, scripts como GM, FS, Includes dentre outras coisas, foi um sucesso, apareceram diversos contratos, mais até do que esperava-mos, atualmente tem contratos à espera de scripters pois todos já estão com contratos em mãos. Bom, voltando à algum tempo atrás... Conheci o fórum samp, o qual eu entrei, passei meses sem fazer postagens apenas observando o conteúdo dos tópicos até que resolvi passar à postar.(Isto no tempo que estava na FusioN), passei à postar duvidas bem simples, comecei à ler tutoriais de diversas áreas, aprendi lógica de programação, o significado de cada objeto, logo após li apostilas sobre Pawn, consegui uma fluência muito grande na linguagem, hoje em dia posso dizer que consigo fazer 95% das coisas que posso imaginar no Pawn. Não sou o melhor nem estou tentando ser, o prazer de manipular os códigos conforme o meu gosto é o que me motiva à continuar programando. Há algum tempo conheci o VB no qual hoje estou criando alguns programas e me especializando assim como no Pawn, já programei outras linguagens como C, C#, C++, JavaScript, HTML, Pascal entre outras mas nada me chamou tanta atenção como Pawn e VB.
Atualmente, ajudo o pessoal no fórum samp quase que diariamente, independente de terem me recusado ajuda quando comecei, vejo que é melhor uma pessoa lembrar de mim quando tiver aprendido como alguém que o ensinou e/ou ajudou do que como alguém que lhe xingou e menosprezou. Inclusive, hoje em dia aqueles que me recusaram ajuda me pedem ajuda constantemente, e eu os ajudo, é bom saber que eles tem a consciência de que de que foram superados de certa maneira.
Também codo contratos do Progressão Pawn, auxilio todos os outros scripters do PP em suas duvidas e tudo mais. Estou planejando algumas estruturas pra voltar à dar aulas e agora também estou levando este blog que espero ter proveito aos leitores.

Bem-vindo ao blog.

25 de out. de 2011

Postado por: Progressão Pawn
0
Olá, bem-vindo ao blog.
Este blog foi criado com a intenção de publicar os projetos feitos por mim. Josma_CMD e também por outros programadores da área. Este, não é um blog de download de códigos prontos ou algo relacionado. Este blog servirá como um meio de comunicação entre scripters/programadores. Serão postados tutoriais, vídeos, códigos, sugestões, utilidades, programas, estruturas alternativas dentre muitas outras coisas.
Claro, aqui você também encontrará downloads de projetos como de costume em blogs sobre o assunto porem o objetivo é mesmo o compartilhamento de pontos de vista e conhecimento.
Esperamos que este blog lhe seja útil. Bom proveito e bem vindo ao blog.

About This Blog