Eu fiz esse vídeo no meu momento de tédio em comemoração ao ano novo, espero que gostem:
E ai pessoal.
Instalei o GTA IV ontem e hoje fiz um vídeo mostrando como roda o GTA IV na seguinte configuração:
Configuração:
Video Mode: 1280x1024(75 Hz)
Texture Quality: High
Render Quality: Highest
Tudo no máximo
Meu PC:
GeForce 8800GT 512mb DDR3
Intel Core 2 Quad Q6600 2.4ghz
4gb DDR2
Asus P5W
FPS:
Dentro da cidade: 15~19
Na praia: 20~32
Usando patch de correção e commandline.txt
commandline.txt:
http://www.4shared.com/file/76615248/8d
Patch 1.0.1.0:
http://files.rockstarwatch.net/patches/
Hoje dia 9 de dezembro é o aniversário do Cr0Nos Blog!
Agradeço a todo que visitaram/visitam o blog e que em apenas 1 ano de vida já tenha crescido tanto.
Obrigado a todos.
Estou vendo que muitos estão me perguntando como baixar pelo 4shared. Aqui vai um tutorial:
Primeiro clique no botão DOWNLOAD que você encontra no post:Você vai parar no site do 4shared. Terá um botão escrito "Download Now", clique nele:
Você terá que esperar dez segundos para poder fazer o download:Depois disso clique em "Click here to download this file":
Ai é só aceitar o download e esperar terminar:Feito por: Cr0Nos
Segundo o site da IGN, o modo multiplayer de GTA IV versão PC terá capacidade de até 32 jogadores, sendo que nos consoles só tinha capacidade de até 16 jogadores.
Com exceção do modo Cops & Crooks que terá capacidade só para 16 jogadores.
Muitas pessoas vem perguntando se seu pc vai rodar GTA IV legal, mas para quem não sabe existe esse excelente site que verifica se seu pc roda os jogos que estão na lista. Vejam:
É muito simples fazer o teste, apenas escolha um jogo da lista(GTA IV incluso), clique no botão "Can You RUN It?" e espere o teste terminar para ver os resultados.
AVISO: Se pedir para instalar algo, instale! É necessario para poder realizar o teste.
Estava olhando uns videos feito pelo video editor, exclusivo do GTA IV para PC que foi lançado ontem(02/12/2008), e percebi que o logotipo do boliche do GTA IV é semelhante a um pênis. Vejam a screenshot:Olhe o que está atras do cara do lado esquero da imagem. Mais um easter eggs descoberto pessoal e ainda tem mais por vir!
Guerrilha Rock, novo parceiro do Cr0Nos Blog. Lá você encontra downloads de CDs, jogos e muito mais. Acesse:
http://guerriliarock.blogspot.com/
Site 100% seguro e aprovado.
Nesse artigo venho dar dicas para vocês de como começar na linguagem pawn para desenvolvimento de gamemodes(modos de jogo) e filterscripts(arquivos feitos em PAWN para adicionar certos comandos, coisas etc. ao servidor).
OBS: Pawn NÃO É uma linguagem SÓ para SA:MP.
Primeiramente, programar para sa-mp não se aprende da noite pro dia, não é batendo palmas e dando três pulinho que você vai aprender!
PESQUISE! Você está com uma dúvida e não consegue resolver sua dúvida com pesquisa? PERGUNTE! Mas não peça coisas absurdas, idiotas e impossiveis, alias, somos programadores e não mágicos e nem empregados de vocês! Não se esqueça que os programadores não ganham nada para te ajudar, por isso não reclame se ele não quiser te ajudar, pois enche o saco resolver a dúvida dos outros, por causa que é sempre gente te perguntando coisas idiotas e absurdas que torra o saco, assim fazendo o programador te xingar depois que você falar: "Ajuda eu tio?".
Perguntar coisas como: "Como faz sistema de casa?". PÔ! Quer um cafézinho também?!
Claro, nao é pesquisando no google "Como faz um sistema de casa em pawn para SA:MP - San Andreas Multiplayer ou GTA Online, por favor google ache algum maldito resultado!!!" que você vai achar o que você quer. Por isso estude a linguagem pawn e use um negócio que existe pelo menos em maior parte dos seres humanos chamado C-É-R-E-B-R-O em vez de pedir coisas idiotas!
Matemática ajuda muito, não gosta de matemática? Diga tchau pawn e as linguagens de programação existentes!
Você tem imaginação? Oi pawn!
Você não gosta de ler tutoriais, ler apostilas e pesquisar por que tem preguiça? Diga tchau pawn e as linguagens de programação existentes de novo!
Estude gamemodes, filterscripts, o que for, mas leia, releia, releia de novo até entender tudo o que você quer entender.
O segredo é ter força de vontade e querer aprender e não ficar querendo tudo na mão beijada.
Ser iniciante não é desculpa para pedir coisas idiotas!
Alguns sites bons para aprender pawn:
Fórum oficial do SA-MP: http://forum.sa-mp.com
Caso não consiga entrar no forum, entre no site www.youhide.com e cole o link do forum lá para poder acessa-lo.
Leia os tutoriais básicos do blog: http://cronosbr.blogspot.com/2008/10/tutoriais-bsicos-de-pawn.html
Leia os tutoriais do blog: http://cronosbr.blogspot.com/search/label/Tutoriais%20de%20PAWN
Tire suas duvidas na comunidade: http://www.orkut.com.br/Main#Community.aspx?cmm=38308205 (mas sem pedir coisas idiotas e absurdas)
Ótimo site para aprender as coisas: www.google.com.br
Só isso pessoal, até mais!
Feito por: Cr0Nos
Reuni todos os tutoriais básicos do blog para poder começar na linguagem pawn para SA:MP.
OBS: Pawn NÃO É uma linguagem SÓ para SA:MP.
Leia na ordem:
Criando servidor básico:
http://cronosbr.blogspot.com/2008/01/tutorial-criando-servidor-bsico.html
Guia para começar em pawn:
http://cronosbr.blogspot.com/2008/10/artigo-guia-para-comear-em-pawn-para-sa.html
Tutorial explicando o que é comentario e quando usa-lo:
http://cronosbr.blogspot.com/2008/09/tu
Tutorial que explica o que é o comparador if e como usa-lo:
http://cronosbr.blogspot.com/2008/09/tu
Tutorial que explica o que são operadores relacionais e quando usa-los:
http://cronosbr.blogspot.com/2008/09/tu
Artigo sobre o poder das arrays:
http://cronosbr.blogspot.com/2008/09/ar
Tutorial ensinando técnicas booleanas:
http://cronosbr.blogspot.com/2008/10/tu
Super tutorial explicando muitas coisas uteis de pawn:
http://cronosbr.blogspot.com/2008/05/tu
Tutorial que ensina a pegar coordenadas no jogo:
http://cronosbr.blogspot.com/2008/07/tu
Primeiramente leia sobre "Booleano" na página da Wikipédia para poder acompanhar esse tutorial:
http://pt.wikipedia.org/wiki/Booleano
Nesse tutorial ensinarei a usar uma técnica booleana, que é usado arrays.
Como viram na página da Wikipédia: "booleano é um tipo de dado primitivo que possui dois valores, que podem ser considerados como 1 ou 0, verdadeiro ou falso."
Vou dar um exemplo de como usar isso:
new UsouComando[MAX_PLAYERS]; //array para utilizar a técnica booleana
Agora vamos usar essa array utilizando o comparador If para verificar se o valor é verdadeiro ou falso:
if(UsouComando[playerid] ==/*igual*/ 1/*verdadeiro*/) // se a array UsouComando for igual a 1(verdadeiro/true)...
{
...
}
else if(UsouComando[playerid] ==/*igual*/ 0/*falso*/) // mais se a array UsouComando for igual a 0(falso/false)...
{
...
}
É isso pessoal, se o valor da array UsouComando for igual a 1(verdadeiro/true) vai executar tal função(função de sua escolha), mais se a array UsouComando for a 0(falso/false) vai executar tal comando e assim por diante.
Essa técnica é muito boa por que, no meu tempo de programador, eu tive que usar muito essa técnica e me ajudou MUITO! É só você ser esperto e saber quando usar e ter imaginação para poder fazer disso um processo divertido e produtivo.
Só isso pessoal, até o próximo tutorial.
Feito por: Cr0Nos
Bom este GameMode(GM) foi utilizado por um bom tempo no Server: Servidor BRASIL, então como fecharam o Servidor, Resolveram liberar o Gm para download.
Oque Ele tem de Bom?
R: Bom ele tem sistema de GangZonas(GZ's) Compraveis, Varios comandos para Stunts, comandos para race, 4FUn, Hora Real etc...
Ele Se passa em Las Venturas, e posso dizer que é um dos Melhores GM's Brasileiros apesar de Muitos não gostarem de Las Venturas Por achar Muito Repetitivo e tal...
Mais esse eu garanto que vale a pena BAixar, tudo que você pensa encontrar em um Server bom você encontrara nele.
Ele foi Desenvolvido Originalmente por:
Kaike
Devil
BnO
[Rockstar]Rell
[AP]BcO
IluSion
Link Para Download do Las Venturas BRASIL:
Nosso novo parceiro. Visite GTA BR Team e saiba tudo sobre GTA e suas curiosidades!
http://gtabrteam.blogspot.com/
Acesse!
Participe da nossa comunidade do orkut do blog:
http://www.orkut.com.br/Main#Community.aspx?cmm=50008538
Obrigado.
Anteriormente eu fiz um tutorial de doenças e agora vou criar um tutorial de farmacia.
Para poder acompanhar esse tutorial direitinho leia o de criação de doenças antes. Clique aqui para ve-lo.
Primeiro você precisa do include para criar Checkpoints muito mais facilmente.
*Tio Cr0Nos porque vamos usar um Cheackpoint?
Resposta: Para ficar mais real, vamos fazer um local onde você possa executar o comando de comprar o remédio. Na vida real não é só você imaginar o remédio em qualquer lugar e ele vai aparecer, não é mesmo?
Vamos criar uma array no topo do gamemode para representar o Checkpoint:
new CP_FARMACIA;
Agora no OnGameModeInit vamos fazer com que a variavel represente o Checkpoint:
CP_FARMACIA = CPS_AddCheckpoint(X,Y,Z,TAMANHO,DISTANCIA);
X: Coordenada X
Y: Coordenada Y
Z: Coordenada Z
TAMANHO: Tamanho do Checkpoint (Aconselhavel 2.0)
DISTANCIA Distancia para o Checkpoint aparecer
Agora vamos fazer com que quando alguem entre no Checkpoint apareça uma mensagem na tela. No OnPlayerEnterCheckpoint use o comparador If para ver se o player está no checkpoint da farmacia para aparecer a mensagem:
if(CPS_IsPlayerInCheckpoint(playerid,CP_FARMACIA))
{
GameTextForPlayer(playerid,"~n~~n~~r~FARMACIA~n~~w~/comprarremedio",TEMPO,ESTILO);
}
TEMPO: Tempo que a mensagem vai ficar na tela(Aconselhavel 10000 milesimos de segundos(10 segundos)).
ESTILO: Estilo do GameText (estilos de 1 à 6).
Agora vamos criar o comando de comprar remédio. No OnPlayerCommandText:
if(strcmp(cmd, "/comprarremedio", true) == 0)
{
if(IsPlayerInCheckpoint(playerid) == CP_FARMACIA) //se você estiver no checkpoint certo o comando será executado
{
if(GetPlayerMoney(playerid) >= 50) // se o dinheiro do player for maior ou igual a 50 ele poderá comprar o remédio
if(Gripe[playerid] > 0) // se a gripe for maior que zero ele poderá comprar o remédio
{
GivePlayerMoney(playerid, -50); //diminue $50 do player
Gripe[playerid] = 0; //seta a array da gripe para 0
SetPlayerHealth(playerid, 100.0); //seta a vida do player para 100%
}
else if(GetPlayerMoney(playerid) < 50) //mais se o dinheiro do player for menor que $50 o comando não é executado e um aviso aparecerá no chat
{
SendClientMessage(playerid, COR, "Você não tem $50 para comprar o remédio!"); //mensagem que aparecerá no chat
}
else if(Gripe[playerid] <= 0) //mais se a array Gripe for menor ou igual a 0 o comando não será executado e um aviso aparecerá no chat
{
SendClientMessage(playerid, COR, "Você não está gripado!"); //mensagem que aparecerá no chat
}
}
else if(CPS_GetPlayerCheckpoint(playerid) != CP_FARMACIA) //mais se o player estiver ou não em um Checkpoint que não seja da farmacia o comando não é executado e um aviso aparecerá no chat
{
SendClientMessage(playerid, COR, "Você não está no Checkpoint da farmacia!"); //mensagem que aparecerá no chat
}
return 1;
}
E está pronto nossa farmacia. Até logo pessoal.
Feito por: Cr0Nos
Você já precisou comentar algo em seu script para se lembrar de alguma coisa ou deixar explicações para as pessoas que irão mexer em seu script? Para isso servem os comentários nas linguagens de programação, todos os comentários são ingnorados pelo compilador, assim, não dando erro em seu script.
Para criar comentários é bem simples e existem dois jeitos para cria-los:
Comentários de uma linha só: Use duas barras ( // ) e tudo que estiver depois das duas barras,na mesma linha, ficaram da cor verde e serão transformados em comentários.
Comentários de várias linhas: Use uma barra e um asteristico ( /* ) e no final do comentário use um asteristico e uma barra ( */ ).
DICA: Você quer que o compilador ingnore um script/linha de código de seu gamemode/filterscript mas quer deixá-lo no lugar que está? Use o mesmo esquema para fazer comentários que o script/linha de código serão ingnorados pelo compilador sem precisar apagá-lo!
Feito por: Cr0Nos
No comparador If você usa os operadores relacionais(igual,diferente,maior,menor etc). Ai vai a lista de alguns operadores relacionais(os mais usados):
Igual: ==
Menor: <
Maior: >
Menor ou igual: <=
Maior ou igual: >=
Diferente de: !=
Operadores lógicos:
Ou = ||
And = &&
O operador lógico "ou" serve para que se uma ou mais condições (no nosso caso, essas condições estão no comparador if) forem verdadeiras, sejam executadas, caso alguma seja falsa mas a outra é verdadeira, é executado do mesmo jeito, caso todas sejam falsas nada é executado. Exemplo de uso do Ou ( || ):
if(Profissao[playerid] ==/*igual*/ POLICIAL ||/*ou*/ Profissao[playerid] ==/*igual*/SWAT)
{
...
}
E o operador lógico And ( && ) serve para que quando você impõe duas condições execute o código se duas ou mais condições forem verdadeiras, caso sejam falsas, nada é executado.
Espero que vocês tenham aprendido mais sobre pawn com esse tutorial. Até mais!
Feito por: Cr0Nos
Nesse tutorial vou ensinar a vocês sobre o comparador If, bastante util para seus scripts que use comparações.
If em português significa "Se" e serve para comparar dados.
Sintaxe:
if(PRIMEIRO_DADO + OPERADOR_RELACIONAL + SEGUNDO_DADO)
{ //chave para abrir código
// funções que você queira que sejam executadas ao processar a comparação concedida serão colocadas aqui
} //fecha código
Por exemplo:
new Mercadorias[MAX_PLAYERS] = 0; //criamos a array na qual vamos comparar com outro dado e setamos o valor dela para 0
if(Mercadorias[playerid] == 1) //se a array Mercadorias for igual a 1, que e falso, aparecera uma mensagem no console do servidor
{ //abre o codigo
Print("\nA array Mercadorias nao e igual a 1!\n"); //mensagem que aparece no console do servidor
} //fecha o codigo
Agora veremos o else if(significa "mais se"), ele impõe uma segunda comparação caso a primeira comparação dada seja falsa.
new Mercadorias[MAX_PLAYERS] = 0; //criamos a array na qual vamos comparar com outro dado e setamos o valor dela para 0
if(Mercadorias[playerid] == 1) //se a array Mercadorias for igual a 1, que e falso, aparecera uma mensagem no console do servidor
{ //abre o codigo
Print("\nA array Mercadorias nao e igual a 1!\n"); //mensagem que aparece no console do servidor
} //fecha o codigo
else if(Mercadorias[playerid] == 0) //mais se a array Mercadorias for igual a 0,que e verdadeiro, aparecera uma mensagem no console do servidor
{ //abre o cddigo
Print("\nA array Mercadorias e igual a 0!\n"); //mensagem que aparece no console do servidor
} //fecha o código
Só você ter imaginação e esperteza para saber quando você precisará usar If e Else If em seus scripts.
OBS: "\n" serve para pular linha no console do servidor, só funciona com a função "Print".
Feito por: Cr0Nos
Estava por ai zuando no GTA San Andreas, até que vi na ZIP em construção de San Fierro...
... marcas de pés brancas com manchas vermelhas nas madeiras da construção.
... Não pode ser tinta porque o prédio não tem nenhum lugar com cor vermelha, então só pode ser sangue! E tem isso em todas as madeiras da construção, mas o que deve ter acontecido lá? Briga? Assassinatos? Não se sabe...
Você tem dificuldade para fazer menu? Se confunde quando digita aquele monte de código para criar um menu? Seus problemas acabaram! O Menu Creator v0.2 veio nos salvar! Ele é fácil e rápido para fazer o menu, você digita tudo o que você quer que ele faça e ele gera o código em pawn. É em inglês.
Créditos não encontrados.
Olá a todos!
Venho hoje postar 4 vídeos do GTA IV.
Eles mostram muítissimos Easter Eggs e etc.
a seguir os links dos vídeos:
Grand Theft Auto 4 Secrets + Glitches + Easter Eggs: Part 1
Grand Theft Auto 4 Secrets + Glitches + Easter Eggs: Part 2
Grand Theft Auto 4 Secrets + Glitches + Easter Eggs: Part 3
Grand Theft Auto 4 Secrets + Glitches + Easter Eggs: Part 4
Créditos: GTA4EasterEggs
Quer aprender mais e discutir sobre Pawn? Então essa comunidade do orkut é a correta para você!
Vários colaboradores para responder suas dúvidas e vários gamemodes e filterscripts para você!
Acesse:
http://www.orkut.com.br/Community.aspx?cmm=38308205
E participe! ;-)
Nesse tutorial vou ensinar à vocês como fazer um sistema simples de level, excelente para RPG.
Primeiro crie uma array pro level no topo do seu gamemode:
new Level[MAX_PLAYERS];
Agora crie um forward para ganhar level:
forward GanharLevel(playerid);
Agora no final do seu gamemode coloque as funções que sua forward vai fazer:
public GanharLevel(playerid)
{
if(Level[playerid] < 100) //caso o level do player for menor que 100 ele ganha 1 level
{
}
if(Level[playerid] == 100) //se o level do player chegar a 100 ele para de ganhar level
{
SendClientMessage(playerid, COR, "Você chegou ao level máximo(100)!");
}// chave para fexar o if
return 1;
}//chave para fexar o public
Agora no OnGameModeInit vamos fazer com que a cada 20 minutos o player ganhe 1 level:
SetTimer("GanharLevel",1200000, true); //a cada 20 minutos o gamemode vai chamar a função GanharLevel, assim fazendo o player ganhar um level a cada 20 minutos
Prontinho! O seu sistema de level simples está pronto.
Feito por: Cr0Nos
E ai pessoal beleza? Nesse tutorial vou explicar como fazer um gang war bem simples, ou seja, não vai ter gang zones, nem sistema de salvar score e dinheiro, nem minigames, nem nada de muit avançado, só para todos terem uma base.
No topo do seu gamemode você precisa definir a gang e o id dela:
#define GROVE 1 // o id da gang GROVE vai ser 1
#define BALLAS 2
Ainda no topo do gamemode você precisa criar uma array para armazenar a gang no seu gamemode:
new Gang[MAX_PLAYERS];
No OnGameModeInit você precisa colocar todos os AddPlayerClass, vamos por como exemplo a skin da grove em primeiro:
AddPlayerClass(107,2478.2656,-1633.4364,13.4048,183.2906,24,120,25,150,28,999); //grove
Agora no OnPlayerRequestClass você precisa fazer com que a skin da grove seja da grove:
if(classid == 0) // como a primeira skin é da grove vamos colocar o numero zero aqui que significa que se você escolher a primeira skin você irá ser da gang da grove
{
Gang[playerid] = GROVE; //seta a gang, por isso criamos aquela array você pode usar o numero dela também que é 1
GameTextForPlayer(playerid,"grove",6000,6); // aparece o nome da gang quando você estiver na skin da grove
}
else if(classid == 1) //segunda skin dos AddPlayerClass
{
Gang[playerid] = BALLAS; //seta a gang ballas
GameTextForPlayer(playerid,"ballas",6000,6); nome da gang na tela
}
return 1;
}
Agora no OnPlayerRequestSpawn você precisa fazer com que cada gang tenha uma cor própria:
if(Gang[playerid] == GROVE)// se o time for grove a cor será verde
{
SetPlayerColor(playerid, 0x33AA33AA);//seta a cor verde em hexadecimal
}
else if(Gang[playerid] == BALLAS)//se o time for ballas a cor será roxo
{
SetPlayerColor(playerid, 0x9900FFAA);//seta a cor roxo em hexadecimal
}
Pronto já está criada suas gangs!
No topo do seu gamemode crie uma array para armazenar os assassinatos que o player fez:
new Kills[MAX_PLAYERS];
Agora para mortes:
new Mortes[MAX_PLAYERS];
Agora para Team Kills:
new TK[MAX_PLAYERS];
Agora vamos fazer o comando. No OnPlayerCommandText crie o comando que vai mostrar os status do player:
if (strcmp("/status", cmdtext, true, 10) == 0) // quando alguem digitar /status vai aparecer todos os status no chat
{
new stringkills[256]; //string para armazenar a mensagem de kills
new stringmortes[256]; //string para armazenar a mensagem de mortes
new stringtk[256]; //string para armazenar a mensagem de team kills
SendClientMessage(playerid,COR_VERDE,"Seus status:");
format(stringkills,sizeof(stringkills),"Kills: %d", Kills[playerid]); //no %d vai aparecer o numero de kills que você fez
SendClientMessage(playerid,0xFF9933AA, stringkills); // faz com que mostre no chat a mensagem que foi armazenada na string
format(stringmortes,sizeof(stringmortes),"Mortes: %d", Mortes[playerid]); // o mesmo que a mensagem anterior
SendClientMessage(playerid, 0xFF9933AA, stringmortes);// o mesmo que a mensagem anterior
format(stringtk,sizeof(stringtk),"Team Kills: %d", TK[playerid]);// o mesmo que a mensagem anterior
SendClientMessage(playerid, 0xFF9933AA, stringtk);// o mesmo que a mensagem anterior
return 1;
}
*OBS: Para aumentar o numero de kills, mortes e Team Kills, leia o 3º passo que estará explicando.
Como em todo gang war sempre tem o palhaço que mata alguem da própria gang. Agora veremos como fazer um sistema de Anti Team Kill que quando o jogador matar alguem da própria gang ele vai ser teleportado para prisão e ficará lá até ser morto por causa de tanta porrada que vai levar dos outros presos.
Agora no OnPlayerDeath precisamos criar o sistema:
Mortes[playerid]++; //se o player morrer os status de mortes dele aumenta +1
if(killerid == INVALID_PLAYER_ID) {
SendDeathMessage(INVALID_PLAYER_ID,playerid,reason); // aparece quem matou, com o que e quem morreu
}
else if(Gang[playerid] == Gang[playerid]) // verifica se quem morreu é da mesma gang, se for ele será preso
{
SendClientMessage(killerid, 0xFF0000AA, "Não mate pessoas da mesma time que você! Você vai ficar preso até morrer"); // mesagem que vai ser enviada para o assassino
SetPlayerPos(killerid, 263.7945,77.4532,1001.0391); //isso teleportará o assassino até uma cela fexada na prisão
SetPlayerScore(killerid,GetPlayerScore(killerid) -1); // o score dele diminue -1
GivePlayerMoney(killerid, -500); // ele perde -500 de dinheiro
TK[killerid]++; //os status de team kill do assassino aumenta +1
Mortes[playerid]++;//aumenta os status de mortes do player que morreu em +1
}
else if(Gang[playerid] != Gang[playerid]) // caso o player tenha matado outro player que NÃO seja da mesma gang que ele, ele ganhará +1 de score e $500
{
SetPlayerScore(killerid,GetPlayerScore(killerid) +1); // aumenta o score do assassino em +1
GivePlayerMoney(killerid, 500);//aumenta o dinheiro do assassimo em $500
Kills[killerid]++;// aumenta os status de assassinatos do assassino em +1
Mortes[playerid]++;//aumenta os status de mortes do player que morreu em +1
}
E está pronto nosso gang war simples! Espero que tenha ajudado muita gente.
LEMBRANDO: Esse tutorial explica como fazer um gang war simples, é apenas para dar uma base de como fazer um melhor ainda que esse!
Feito por: Cr0Nos
E ai pessoal blz? Nesse artigo espero explicar a todos vocês como entrar na onda da programação pawn e de outras linguagens do jeito certo!
Bom, quando eu comecei, eu comecei do jeito errado e por isso estou aqui para que não aconteça o mesmo com vocês.
Aposto q muitos quando tentaram entrar na onda da programação pawn pensaram em fazer gamemode com isso, gamemode com aquilo, criar um gamemode de RPG que seja melhor do Brasil... Mas não sabe nem o que é uma array e já quer criar um SUPER MEGA IPER LIPER EXTRAORDINARIO RPG!
Isso é muito legal sonhar assim mas muito dificil de tornar realidade.
Por isso vou dar umas dicas de como começar de um jeito certo na programação:
- Estude matemática. Ela pode ajudar MUITO na programação!
- Estude logíca de programação, quando eu comecei a ler uma apostila que meu professor do curso me passou isso já abriu minha mente para criar grupos de códigos de programação em pawn que eu nem sabia que sabia fazer, ou seja, minha imaginação funcionou ao maximo!
- Faça gamemodes simples que leve poucas horas ou minutos, não adianta fazer um super rpg no papel e não conseguir fazer no pawn.
- Tente entender para que aquele código que você viu em algum gamemode serve, se você apenas copiar e colar não vai ajudar em nada em seu aprendizado.
- Tente fazer as coisas você mesmo, pedir pros outros comandos de fazer tal coisa ou de setar uma profissão de rpg não te ensina nada, só te deixa mais preguiçoso.
- Você não vai aprender a programar da noite pro dia!
- Antes de criar um comando crie algoritmos(isso se aprende em lógica de programação) para o que vai acontecer quando alguem digitar tal comando.
- Raciocine bastante e eu sei que sempre que tiver um erro que você não consegui resolver e fica quebrando a cabeça por horas você vai se irritar e talvez até desistir, mas é assim mesmo vc tem que prestar atenção em todas linhas de códigos e em cada detalhe.
- No começo você vai boiar e não entender quase nada, mas depois você vai se indentificar com a linguagem.
Isso foi o basico.
OBS: eu programo a +/- 8 meses
Feito por: Cr0Nos
A Rockstar Games confirmou hoje(06/08/2008) que esse ano, praticamente dia 18 de novembro desse ano(EUA), será lançada GTA IV versão para computador. Isso é de agradar muito os fãs de GTA e a mim também! :D
Então vão preparando as configurações de seus PCs e espere até GTA IV sair nas lojas o Brasil.
E ai pessoa, blz? Nesse tutorial vou ensinar vocês a fazerem um sistema de doença simples e excelente para RPGs.
Primeiro defina as cores das mensagens:
#define COLOR_RED 0xFF0000AA
#define COR_VERDECLARO 0x9ACD32AA
Agora crie uma array e um forward no topo do seu gamemode com o nome da sua doença, no nosso exemplo a doença vai ser a gripe:
new Gripe[MAX_PLAYERS];
forward PegarGripe(playerid);
Agora crie um public no final do seu gamemode com o nome do forward que você criou:
public PegarGripe(playerid)
{
Gripe[playerid]++; //adiciona um valor na variavel da doença
SendClientMessage(playeri,COLOR_RED,"Você pegou gripe! Vá até uma famacia comprar remédio."); //mensagem que vai aparecer quando você pegar a doença
if(Gripe[playerid] == 100) //caso o valor da variavel da doença chegue a 100 você vai morrer
{
SetPlayerHealth(playerid,0.0);
SendClientMessage(playerid,COLOR_RED,"A gripe te matou! Quem mandou não comprar remédio...");
}
}
if(Gripe[playerid] == 100) //quando você morrer com o valor da variavel da doença com o valor 100 o valor da variavel será resetado
{
Gripe[playerid] = 0; //seta o valor da variavel da doença para zero
SendClientMessage(playerid,COR_VERDECLARO,"No hospital os médicos curaram sua gripe! Pode ficar tranquilo, por enquanto..."); //mensagem que vai aparecer quando o valor da variavel da doença for resetado
}
Agora no OnGameModeInit coloque:
SetTimer("PegarGripe", 1200000, true);//com isso os players pegaram a doença à cada 20 minutos +/-
Feito por: Cr0Nos
Um dos melhores vídeos do GTA IV!
Bem legal e engraçado :D
Mais uma vez a Rockstar Games quis dar uma de louca e colocou essas "luzes" zombando dos avistamento de luzes que se movimentavam no céu etc.
Em qualquer servidor vá no lugar desejado e digite no chat:
/save COMENTARIO QUE VOCÊ DESEJA
Depois disso vá na pasta do seu GTA San Andreas:
C:\Arquivos de programas\Rockstar Games\GTA San Andreas
Procure o arquivo chamado savedpositions.txt e abra ele.
Caso você tenha digitado o comando /save a pé vai estar assim:
AddPlayerClass(idskin, Float:x, Float:y, Float:z, Float:Angulo, arma1, arma1_municao, arma2, arma2_municao, arma3, arma3_municao); // comentario
Exemplo:
AddPlayerClass(0,2062.7371,-2628.7871,13.5514,89.9784,0,0,0,0); //skin do cj
Coordenada X: 2062.7371
Coordenada Y: -2628.7871
Coordenada Z: 13.5514
Caso você tenha digitado dentro de um carro vai estar assim:
AddStaticVehicle(idveiculo, Float:X, Float:Y, Float:Z, Float:Angulo, cor1, cor2); // comentario
Exemplo:
AddStaticVehicle(522,430.9840,-1167.0511,2261.7830,0.0069,6,25); // moto
Coordenada X: 430.9840
Coordenada Y: -1167.0511
Coordenada Z: 2261.7830
Pronto! Você pegou suas coordenadas.
Feito por: Cr0Nos
Primeiro precisa criar uma multi array com as coordenadas:
//no topo do seu gamemode
new Float:SpawnRandomico[2][3] = {
{coordenada X,coordenada Y,coordenada Z},
{coordenada X,coordenada Y,coordenada Z}
};
//Esse [2] por causa q temos duas coordenadas
//Esse [3] por causa q temos o eixo X, Y e Z
//no OnPlayerSpawn
new rand = random(sizeof(SpawnRandomico));
SetPlayerPos(playerid, SpawnRandomico[rand][0], SpawnRandomico[rand][1], SpawnRandomico[rand][2]);
*OBS: Você precisa ter todos os AddPlayersClass no OnGameModeInit para poder spawnar.
Caso não saiba como por ou o que é AddPlayerClass leia esse tutorial: Adicionando Skins
Feito por: Cr0Nos
Vídeo mostrando pedestres do GTA IV falando o português claro e xingando também.
Sátira do GTA IV em inglês mas com as expressões do Niko da pra entender um pouco.
Bom,um vídeo com um "boliche" que virou mania no X-Treme!
Feito por: ® © Zóio - The Green Eye © ®
Vídeo mostrando um bug louco que deu no server do KaE. Quem vê acha que é coisa do demo! O.o
Feito por: ® © Zóio - The Green Eye © ®
BioHazard Alert Beta 0.5 with Fix Patch;
CONTEUDO DO MOD:
Zombies que vagam pela cidade.
Cidade Fantasma
Outros Sobreviventes
Um contador de Zombies mortos
Novos efeitos mais realistas
Leon Kennedy no lugar do car opicional
Camera dO RE4
DOWNLOAD
http://www.moddb.com/mods/9169/gta-bioh
O MOD PESSA 50 MB
Link:
http://www.moddb.com/mods/9169/gta-bioh
ALEM DE DAR MAIS REALISMO AOS ZUMBIES DIMUNUE OS BUGS.
DOWNLOAD: http://www.moddb.com/mods/9169/gta-bioh
ATENÇÃO: PARA O MOD FUNCIONAR É PRECISO INSTALAR OS ARQUIVOS LEON.TXD E LEON.DFF DENTRO DO ARQUIVO GTA3.IMG QUE SE ENCONTRA NA PASTA DO SEU GTA SAN ANDREAS. PARA INSTALAR USE O IMG TOOL.
Visite também a comunidade do GTA Biohazard alert.
Visite também o blog do GTA Biogazard alert.
Modificação feita por: Pulga Maggots, Coin-god e toda a equipe que desenvolveu a modificação.
BRASIL ~ Stunt+dm+race+4fun
Gamemode de stunt+dm+race+4fun desenvolvido por mim e com ajuda de Kaike e Devil.
Comandos:
Para ajuda inicial digite: /ajuda
Para deixar seu veículo God Mode digite: /godc
Para se matar digite: /kill
Para ver todos os teleportes digite: /teleportes
Para entrar de passageiro no Hydra e Shamal tecle G no meio do avião e para sair tecle F
Para ver os comandos de hotcaffe digite /hotcaffe
Teleportes
Teleportes de Stunt:
Para ir até o Stunt Em Las Venturas digite: /lvstunt
Para ir até o Aero Stunt de LS digite: /aerostunt
Para ir ao Stunt digite: /stunt
Para ir ao Drop digite: /drop
Para ir ao Drop Explosivo digite: /dropexplosivo
Para ir ao Reino Perdido digite: /atlants
Para ir até a Montanha Russa digite: /montanharussa
Teleportes de DM:
Para ir até a Crazy Arena digite: /crazyarena
Para ir até a Arena x1 digite: /arenax1
Para ir até a Ship War digite: /shipwar
Para ir até a Arena Sangrenta digite: /arenasangrenta
Para ir até a Remote DM digite: /remotedm
Para ir até a Sniper DM digite: /sniperdm
Para ir até a Guerra de Rustler digite: /rustlerw
Teleportes de Race
Para ir ao Circuito Flat OUT digite: /flat
Para ir até a Race digite : /race
Para ir ao Drift digite: /drift
Para ir ao circuito 1 digite: /circuito1
Para ir ao circuito 2 digite: /circuito2
Para ir ao circuito 3 digite: /circuito3
Para ir ao circuito 4 digite: /circuito4
Teleportes de 4fun:
Para ir a cidade perdida de Atlants digite: /atlants
Para ir ao Estacionamento digite: /estacionamento
Para ir até Liberty City digite: /lc
Para ir a derby digite: /derby
Atrações principais:
Stunts no Aeroporto de LS: /aerostuntls
Super rampa: /drop
Super rampa com explosivos: /dropexplosivo
Estacionamento onde tem vários carros de vários tipos: /estacionamento
Uma montanharussa: /montanharussa
O gamemode tem 4141 objetos.
Feito por: Cr0nos, [__]Kaike e [SSR]Devil
Tino's Team DeathMatch v0.1 Beta
Gamemode de guerra de gangs em los santos, muito simples e em versão inicial, por isso, deverá haver alguns bugs.
Comandos:
/ajuda
/regras
/creditos ou /creditosgm
/kill
/flip
/duelo
/objetivo
/admins
/agua(apenas para administradores)
/nomansland(ilha na costa de san fierro)
/lchat(by [MPA]toribio_IDG)
/flip
8 Gangs:
Grove Street
Bad Girls
Ballas
Cops
Bikers
Crazy Boys
Los Aztecas
Los Vagos
Gamemode não muito sofisticado, mas ideal pra quem gosta de uma boa guerra de gangs.
Feito por: [BpM]Tinorks
Admins logados na rcon podem ver pms(private messages)
Por favor, não retire os créditos.
Descrição
O pessoal pediu, então eu postei!
Um pawno diferente: traduzido para o português, e com icones e imagens diferentes.
Nada demais, vejam algumas imagens...
Imagens
Menu:
Barra de Ferramentas (desativada):
Barra de Ferramentas (ativada):
Como instalar
Descompacte o arquivo que veio com o download.
Coloque o arquivo "pawno.exe" dentro da pasta "\seu server\pawno\".
Substitua o já existente, se quizer fazer backup do original, é por sua conta própria...
Feito por: Flavio Toribio
Programa que reune todas as ID's dos carros, sons, animações, cores etc.
Facilitará muito quando você precisar saber o ID de algum veículo que você quer colocar em seu gamemode!
Screen do programa ----> http://www.jatochnietdan.info/DDd.JPG
Feito por: JaTochNietDan
Todas as pixações do BULLY traduzidas logo a baixo:
Nobody likes =Ninguém gosta mais dos Ricos, Pirralhos estragados.
rich,spoiled
brats!!
My daddy is =Meu Papai é Rico, Mas Chupa!!
rich
but i suck
you're right =Tens Razão Retardados, Todo ódio você faz!
dorks
everyone ne does
Hate you!
Teachers, =Professores, animais esculhanbados.
Pet scum
Preppies =Preppies seus perdedores.
are Losers
I love it When =Eu adoro quando Todos nós se aconchegamos!!
We all huddle
Together!!
Grease =Graxa de Banha!!
Balis!!
Trust Fund =Funda responsabilidade, Perdedores!
losers!
Jocks =Jocks Idiotas.
Morons
I only rich people =Só pessoas ricas como meus pais estão no julgamento capitalista
cuz my parents are
judgemental
Capitalist scum!
Rich =Ricos esculhanbados!!
Scum!!
Tell Your =Informe o seu Terapista miúdo!
Therapist
Righkid!
We'ew coming For =Estamos próximos de você, você mesmo panaca!
you
You Dork
Crum!
Take a =Pega a Banheira Gorduroso.
Bath
Greasy!!
Get a Life! =Recebam a Vida! Chupam Nerds!
Nerds Suck!
Dork =Retardados Perdedores
Losers!
Cry, Dorks =Choram, retardados Choram
Cry
Money Does =Dinheiro não vai comprar a Classe!
Not Buy Class!
Athletes like =Atletas se acham comunal de sapatos.
Communal
Shomers
Its not rebelliou =A sua não Rebeliou, use um Casaco e um super cabelo.
to Wear a Leathef
Jacket and have
Dumbe Hair
I like Cars and =Eu gosto de carros e motos, mas não me envolvo com pessoas.
Bikes cuz i Can't
deal with
People!
Greasebag =Graxa Saco
Greasers =Chupam Greasers
Suck!!
Nerd =Nerds Retardados
scum!
Over-Educated, =Sobre-Educação, Chupam Otarios!!
dorks Suck!!
Take that crap =Tomara que cortem o seu Cabelo, você gorduroso Esculhambado!
out of your
hair you
Greasy scum!
Money's =Dinheiro dos Rapazes retardados!
boy Dorks!
Nice hair =Bonito Cabelo, Graxa sacos!
Greasebags!
I Play sports =Pratica esportes, mas não sabe ler!
cuz i can't
Read!
Why you =Porque vocês "graxa sacos" Grudam por 50 centavos????
Greaseballs
stuck in
The 50's????
Kesports cuz =Mas Praticam esporte.
Ave No Brain! =Ave sem cérebro!
Feito por: ††Licker††B.O.W ●Β.δ.ω - ŠqυăĐ●®™
E ai pessoal blz?
Estou aqui avisando que o blog passará por uma super reforma! Vamos mudar o visual, conteúdo, alguns sistemas novos e muito mais!
Algumas informações:
-Mudaremos o visual;
-Colocaremos alguns sistemas úteis para deixar seu acesso ao blog mais fácil;
-Agora o blog vai começar a ser sobre GTA e Bully;
-O blog será atualizado quase diariamente.
E muito mais!
Aguardem :D
SA-MP 0.2.2 RC3 Lançado!!!!!
Download:
http://www.4shared.com/file/51849789/6ffcc8ab/sa-mp-022-R3-testing1_8.html
Oque Muda:
Fixes currently imported in to the 0.2.2 R3 release. 0.2.2 R3 is compatible with all 0.2.2 servers.
0.2.2 R3 is currently in testing and release is expected soon.
- Removed all SAC code. This fixes a security vulnerability mentioned earlier.
- Fixed problem with clipboard text not copying externally.
- Fixed time/fog/lighting flickering when the passing of time is disabled.
- Fixed some vehicle audio problems (silent cars/planes/boats/helis).
- Fixed texture lag/streaming popups when many models were loaded.
- Vehicle model limits increased to 127 (although not recommended to exceed 70 for backward capability).
- Fixed some car mod shop crashes.
- Alternate siren for police vehicles is now synced.
- TextDraw code is completely rewritten. It now works in interiors and will disable with the HUD.
- Crashes caused by DestroyVehicle are fixed.
- Some extra smoothing/lag compensation code is added to the client. This is currently still in testing and will perform better with other R3 clients.
Testing1_7:
- Improved the onfoot sync so there wasn't as much sliding
- Removed hardcoded fps limit of 40
- Fixed players going through walls and below the ground
Testing1_8:
- Imported some of the 0.2.5 vehicle surfing code
- Added command /fpslimit to adjust the frame rate limiter. Valid /fpslimit values are 20-100.
- Removed the procedural plants/rocks again as they can desync the game.
- Fixed (hopefully) problem where there were sometimes vehicles without drivers (testing needed).
- Changed the ordering of the TextDraws. TextDraws are drawn in creation order 0-MAX_TEXT_DRAWS. Previously they were drawn in Show order.
The current testing version of 0.2.2 R3 is Testing 1
Fixes currently imported in to the 0.2.2 R3 release. 0.2.2 R3 is compatible with all 0.2.2 servers.
ANTES DE DIZEREM ISTO EH VIRUS TA A FONTE
http://forum.sa-mp.com/index.php?topic=62526.0
Traduzido:
Correções atualmente importados para a libertação 0.2.2 R3. 0.2.2 R3 é compatível com todos os servidores 0.2.2.
0.2.2 R3 está atualmente em fase de teste e a liberação é esperada em breve.
-- Removidos todos os códigos do SAC. Isso corrige uma vulnerabilidade de segurança que mencionei anteriormente.
-- Corrigido problema com o colar que nao estava funcionando.
--Consertado tempo / neblina / iluminação tremulação quando o passar do tempo está desativado.
-- Corrigidos alguns problemas de áudio veículo (sirena de carros / aviões / barcos / helis).
-- consertado a textura lag / streaming popups quando muitos modelos foram carregados.
-- O limite de modelos de veiculos foi alterado para 127 (embora não seja recomendado a ultrapassar 70 capacidade para trás).
-- Consertados alguns travamentos no mod shop .
-- A sirene para veículos da polícia está agora sincronizados.
-- TextDraw código é totalmente reescrito. Ela trabalha agora em interiores e irá desativar com o HUD.
-- Crashes causada por DestroyVehicle estao consertados.
-- Alguns extra nivelamento / lag compensação código é acrescentado para o cliente. Esta é atualmente ainda em fase de teste e terá desempenho melhor R3 com outros clientes.
Testing1_7:
-- Maior onfoot a sincronia não foi assim há tanto deslizamento
-- Removido codificados limite de 40 fps
-- Fixed jogadores a atravessar paredes e abaixo do solo
Testing1_8:
-- Importados alguns dos veículos 0.2.5 surf código
-- Adicionado comando / fpslimit para ajustar a taxa de frame limitador. Válida / fpslimit valores são 20-100.
-- Removido o processuais plantas / rochas novamente como eles podem desync o jogo.
-- Fixo (espero), onde havia problema vezes veículos sem condutor (ensaios necessários).
-- Mudada a possibilidade de ordenar a TextDraws. TextDraws são desenhadas na criação ordem 0-MAX_TEXT_DRAWS. Anteriormente eles foram tiradas no Show ordem.
A actual versão de teste 0.2.2 R3 for Testing 1
Ai um grande tutorial em vídeo.
Feito por [KaE]Cartman
Espero que ajude muita gente!
Falows!
Assistam, espero que gostem!
Ainda terá 2ª Parte com muito mais stunts!
Valeu!
pra voce que eh fa do seu madruga ai um mod que voce ira adorar (exclusivamente para gta san andreas )CLIKE AKI para baixar ou CLIKE AKI em baixo
bom galera mais um mod feito pela minha equipe gtaracers bom ta ai se quiser testar CLIKE AKI
ele vem com fotos DO casseta e planeta vem com fotos DO galvao bueno bom tah ai esse eh mais um lasamento da minha equipe:em parceria com O cronos blog
A terceira versão de um mod ja conhecido por muitos amantes de Drift do gta Por ser de fácil instalação e ser bem leve o mod não trás consigo um grande desafio e não chega a ser uma das melhores pistas de Drift mas é bem divertExistem locais na pista onde se pode alcançar mais de 250 km/h e algumas curvas exigem bastante dos condutores.
ido। O mod ainda trás a Garagem de Doherty com o seu interior completo e suas rampas de manutenção o que ainda lhe dá algo para explora Clique aqui e veja a versão antiga do Drift Airport e tambem uma pista para Drift no Aeroporto de Las Venturas CLIKE AKI para baixar (duvidas ou segestoes add no msn cronos_bomba@hotmail।com) divirta-se!!!!
Índice:
- Iniciando
- Strings e Variáveis
- Strtok
- Multi-Array Strings
- Stock Functions
- User Databases (dudb)
- Y_Objects
- Races
1. Iniciando
Neste tutorial vou explicar algumas funções do pawno que algumas pessoas vem me perguntando bastante. Lembrando que este é umtutorial de nível Iniciante/Intermediário. Para aprender o seguinte, você deve saber no mínimo as funções básicas do pawno, e a função de cada callback (você deve no mínimo dos mínimos saber o que é um callback). Logo estarei postando outros tutoriais, de nível Intermediário/Avançado e de Nível Iniciante.
2. Strings e Variáveis
Variáveis são as funções que vão definir o que vai acontecer se esta variável tiver um certo valor. Ex: Se o jogador fulano tiver a profissão número 12, ele vai explodir, etc... E strings são funções que geralmente são criadas para mandar mensagens que tenham variáveis, Ex.: Você está jogando e vai no banco para ver seu saldo. Então aparece a mensagem: "Seu saldo bancário: 504031904913". Sendo que 504031904913 é uma variável que define a quantia que você tem no banco.
Então, vamos começar criando uma variável. Ponha isto no topo do seu gamemode:
new deaths[MAX_PLAYERS];
Estas variáveis vao ser usadas para mostrar o numero de kills e mortes de um player.
Agora vamos botar a seguinte função no OnPlayerDeath:
deaths[playerid] ++;
E agora vamos fazer um comando para mostrar os status do player. Ponha isso no OnPlayerCommandText:
{
new stringkills[256];
new stringmortes[256];
format(stringkills,sizeof(stringkills), "Kills: %d",kills[playerid]);
format(stringmortes,sizeof(stringmortes), "Mortes: %d",mortes[playerid]);
SendClientMessage(playerid, 0xFFFF00AA, "Seus stats:");
SendClientMessage(playerid, 0xFFFF00AA, stringkills);
SendClientMessage(playerid, 0xFFFF00AA, stringmortes);
return 1;
}
O que acabamos de fazer:
Quando botamos new kills[MAX_PLAYERS]; nós criamos uma variável, que seria executada particularmente para cada player. Após isso, colocamos no OnPlayerDeath kills[killerid] ++; & deaths[playerid] ++;, isso fará com que o assassino ganhe + 1 na variável kills, e o morto + 1 na variavel deaths. Após isso, fizemos um comando que mostraria o numero de kills e mortes do player quando ele digitasse /stats, usando strings. Como você pode perceber, usamos a função format(stringkills,sizeof(stringkills), "Kills: %d",kills[playerid]);, que significa que formatou a string para aparecer o número de kills, e usamos SendClientMessage(playerid, 0xFFFF00AA, stringkills); para mandar uma mensagem com a string para o player.
OBS: Nunca se pode usar uma variável em SendClientMessage sem ter usado uma string!
OBS²: Você não precisa usar strings em todas as mensagens, só precisa usar nas que tem variáveis!
3. Strtok
A função strtok é usada para usar comandos com variáveis, por exemplo /vida id vida. Se nós não usarmos strtok para fazer comandos como /vida id vida, teríamos que fazer um comando para cada id, por exemplo /vida 1 100 depois /vida 2 100 depois /vida 3 100, e isso gastaria muito do tempo e totalmente inútil. Então vamos começar fazendo um comando com strtok.
Adicione esta função (strtok) no final do seu Gamemode/Filterscript:
{
new length = strlen(string);
while ((index < offset =" index;"> ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; }
Agora vamos colocar isso em cima de tudo no OnPlayerCommandText:
new idx;
cmd = strtok(cmdtext, idx);
E agora vamos fazer o comando, que neste caso será o comando /vida id vida.
{
new string [256];
new tmp[256];
new plid, vida;
new nomeentregador[MAX_PLAYER_NAME];
new nomerecebedor[MAX_PLAYER_NAME];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)){
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /vida [id] [vida]");
return 1;
}
plid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /vida [id] [vida]");
return 1;
}
vida = strval(tmp);
if(IsPlayerConnected(plid)){
GetPlayerName(plid, nomerecebedor, sizeof(nomerecebedor));
GetPlayerName(playerid, nomeentregador, sizeof(nomeentregador));
format(string, sizeof(string), "O Admnistrador %s setou a vida de %s para %d.", nomeentregador,nomerecebedor,vida);
SendClientMessageToAll(branco, string);
SetPlayerHealth(plid,vida);
return 1;
}
else
{
SendClientMessage(playerid, cinza, "Jogador não conectado.");
return 1;
}
}
Traduzindo:
Fizemos um comando, que se o player for admin, vai setar a vida do jogador escolhido para a vida escolhida. Criamos a variável tmp, que representaria o strtok. Você pode notar que botamos a função if(!strlen(tmp)){, que significa que se o jogador não digitar o id e a vida desejada, vai aparecer a mensagem "[ERRO DE SINTAXE] /vida id vida". Então criamos uma variável chamada vida e uma chamada plid. A variável plid será o id do player escolhido, e a variável vida seria a vida que seria dada ao player. Então usamos uma string para mandar a mensagem "O Admnistrador %s setou a vida de %s para %d." e depois como final do code, usamos o SetPlayerHealth(plid, vida);, que setaria a vida do player desejado.
4. Multi-Array Strings
Multi array strings são strings que carregam várias mensagens ao mesmo tempo, ou vários números, coordenadas, etc... Um exemplo muito conhecido de multi-array string é a multi-array do nome dos carros.
"Landstalker",//--------> Numero 0
"Bravura",// --------> Numero 1
"Buffalo",// -------> Numero 2
"Linerunner",// -------> E assim vai...
"Pereniel",
"Sentinel",
"Dumper",
"Firetruck",
"Trashmaster",
"Stretch",
"Manana",
"Infernus",
"Voodoo",
"Pony",
"Mule",
"Cheetah",
"Ambulance",
"Leviathan",
"Moonbeam",
"Esperanto",
"Taxi",
"Washington",
"Bobcat",
"Mr Whoopee",
"BF Injection",
"Hunter",
"Premier",
"Enforcer",
"Securicar",
"Banshee",
"Predator",
"Bus",
"Rhino",
"Barracks",
"Hotknife",
"Trailer",
"Previon",
"Coach",
"Cabbie",
"Stallion",
"Rumpo",
"RC Bandit",
"Romero",
"Packer",
"Monster Truck",
"Admiral",
"Squalo",
"Seasparrow",
"Pizzaboy",
"Tram",
"Trailer",
"Turismo",
"Speeder",
"Reefer",
"Tropic",
"Flatbed",
"Yankee",
"Caddy",
"Solair",
"Berkley's RC Van",
"Skimmer",
"PCJ-600",
"Faggio",
"Freeway",
"RC Baron",
"RC Raider",
"Glendale",
"Oceanic",
"Sanchez",
"Sparrow",
"Patriot",
"Quad",
"Coastguard",
"Dinghy",
"Hermes",
"Sabre",
"Rustler",
"ZR-350",
"Walton",
"Regina",
"Comet",
"BMX",
"Burrito",
"Camper",
"Marquis",
"Baggage",
"Dozer",
"Maverick",
"News Chopper",
"Rancher",
"FBI Rancher",
"Virgo",
"Greenwood",
"Jetmax",
"Hotring",
"Sandking",
"Blista Compact",
"Police Maverick",
"Boxville",
"Benson",
"Mesa",
"RC Goblin",
"Hotring Racer",
"Hotring Racer",
"Bloodring Banger",
"Rancher",
"Super GT",
"Elegant",
"Journey",
"Bike",
"Mountain Bike",
"Beagle",
"Cropdust",
"Stunt",
"Tanker",
"RoadTrain",
"Nebula",
"Majestic",
"Buccaneer",
"Shamal",
"Hydra",
"FCR-900",
"NRG-500",
"HPV1000",
"Cement Truck",
"Tow Truck",
"Fortune",
"Cadrona",
"FBI Truck",
"Willard",
"Forklift",
"Tractor",
"Combine",
"Feltzer",
"Remington",
"Slamvan",
"Blade",
"Freight",
"Streak",
"Vortex",
"Vincent",
"Bullet",
"Clover",
"Sadler",
"Firetruck",
"Hustler",
"Intruder",
"Primo",
"Cargobob",
"Tampa",
"Sunrise",
"Merit",
"Utility",
"Nevada",
"Yosemite",
"Windsor",
"Monster Truck",
"Monster Truck",
"Uranus",
"Jester",
"Sultan",
"Stratum",
"Elegy",
"Raindance",
"RC Tiger",
"Flash",
"Tahoma",
"Savanna",
"Bandito",
"Freight",
"Trailer",
"Kart",
"Mower",
"Duneride",
"Sweeper",
"Broadway",
"Tornado",
"AT-400",
"DFT-30",
"Huntley",
"Stafford",
"BF-400",
"Newsvan",
"Tug",
"Trailer",
"Emperor",
"Wayfarer",
"Euros",
"Hotdog",
"Club",
"Trailer",
"Trailer",
"Andromada",
"Dodo",
"RC Cam",
"Launch",
"Polícia (LSPD)",
"Polícia (SFPD)",
"Polícia (LVPD)",
"Police Ranger",
"Picador",
"S.W.A.T. Van",
"Alpha",
"Phoenix",
"Glendale",
"Sadler",
"Trailer de Bagagens",
"Trailer de Bagagens",
"Stair Trailer",
"Boxville",
"Farm Plow",
"Trailer de Utilidades"
};
Como você pode ter visto, esta string tem o nome de todos os carros. Agora vamos usá-la. Vamos fazer um comando /nomeveiculo [id], que vai mostrar o nome do veículo do id escolhido.
{
new string [256];
new tmp[256];
new idveiculo;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)){
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /nomeveiculo [id]");
return 1;
}
idveiculo = strval(tmp);
format(string, sizeof(string), "Nome do veículo: %s.", VehicleName[idveiculo - 400]);
SendClientMessageToAll(branco, string);
return 1;
}
Agora fizemos um comando que vai mostrar o nome do veículo, e usamos VehicleName[idveiculo - 400] para poder mostrar o nome do veículo certo. Ou seja, quando ele digita /nomeveiculo 400, vai mostrar o veículo Nº 0, já que mostra a variável idveiculo - 400.
5. Stock Functions
Stocks e são funções criadas pelo player, para simplificar funções e adicionar novas funções ao sa-mp. Aqui um exemplo bem conhecido de função stock:
{ // Created by Y_Less
new Float:a;
GetPlayerPos(playerid, x, y, a);
GetPlayerFacingAngle(playerid, a);
if (GetPlayerVehicleID(playerid)) {
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
}
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}
Esse stock adiciona uma função ao sa-mp, de pegar as coordenadas na frente do jogador. Agora vamos criar nossa própria função no sa-mp, uma função de SETAR o dinheiro das pessoas. (Não tem função de setar, so de dar dinheiro)
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, grana);
}
Ok, nosso stock function está pronto, ou seja, vai resetar a grana do player e depois vai dar o dinheiro, sendo assim a mesma coisa que setar. Agora nós podemos usar a função que nós criamos em qualquer parte do nosso script. Por Exemplo, tente combinar o que aprendemos antes com os strtok com o SetarGrana, vamos criar um comando /setargrana id grana com a função que acabamos de fazer.
{
new tmp[256];
new string[256];
new plid, grana;
new nomeentregador[MAX_PLAYER_NAME];
new nomerecebedor[MAX_PLAYER_NAME];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)){
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /setargrana [id] [grana]");
return 1;
}
plid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /setargrana [id] [grana]");
return 1;
}
grana = strval(tmp);
if(IsPlayerConnected(plid)){
GetPlayerName(plid, nomerecebedor, sizeof(nomerecebedor));
GetPlayerName(playerid, nomeentregador, sizeof(nomeentregador));
format(string, sizeof(string), "O Admnistrador %s setou o dinheiro de %s para R$%d.", nomeentregador,nomerecebedor,grana);
SendClientMessageToAll(branco, string);
SetarGrana(plid, grana);
return 1;
}
else
{
SendClientMessage(playerid, cinza, "Jogador não conectado.");
return 1;
}
}
Pronto! Aí está o nosso code simplificado de setar grana(na verdade nem tanto, mas vc pode simplificar mais do jeito q vc quiser fazer seu stock function). Stocks podem fazer qualquer função, e são geralmente usados para fazer includes.
6. User Databases
User databases são includes usados para salvar os dados de algum jogador. Neste tutorial vou explicar como usar o DUDB.
O dudb, na minha opinião é o melhor include de database. Aqui vou explicar como utilizar as funções do dudb:
udb_UserSet(Filename[], key[], value[]): Função utilizada para salvar algum dado em formato de texto.
udb_UserSetInt(Filename[], key[], value): Função utilizada para salvar algum dado em formato de número INTEIRO. Ex: Variáveis de kills /mortes
udb_UserSetFloat(Filename[], key[], Float:value): Função utilizada para salvar algum dado em formato de float ( como por exemplo, as coordenadas de spawn de algum player )
udb_UserInt(Filename[], key[]): Checa o valor de alguma variável de número INTEIRO no arquivo, utilizada para carregar os dados.
udb_UserFloat(Filename[], key[]): Checa o valor de alguma variável de número FLOAT no arquivo, utilizada para carregar dados de coordenadas.
udb_CheckLogin(Filename[], password[]): Função utilizada nos sistemas de login/registro para ver se a senha está correta.
Bom, agora que sabemos as funções principais do DUDB e pra que elas servem, vamos criar nosso sistema de login/registro.
Vamos adicionar isso no nosso gamemode:
#include
#define amarelo 0xFFFF00AA
#define verde 0x33FF33AA
#define vermelho 0xFF0000AA
#define vermelhoescuro 0xAA3333AA
#define branco 0xFFFFFFAA
#define rosa 0xCCFF00FFAA
#define azul 0x057ABDAA
#define cinza 0xC0C0C0AA
#define yellow 0xFFFF00AA
#define laranja 0xFFA500AA
//agora no OnPlayerConnect:
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl))
if(!udb_Exists(nomepl))
{
SendClientMessage(playerid, azul, "[LOGIN/REGISTRO] Você não está registrado, registre-se com /registrar senha");
}
else
{
SendClientMessage(playerid, azul, "[LOGIN/REGISTRO] Você já está registrado, logue-se com /logar senha");
}
//agora no OnPlayerCommandText
if (strcmp(cmd, "/registrar", true)==0)
{
new tmp[256];
new senha[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,vermelhoescuro,"/registrar [senha] - Exemplo: /registrar 123");
return 1;
}
if(udb_Exists(PlayerName(playerid)))
{
SendClientMessage(playerid, vermelhoescuro, "Você já tem uma conta no Renaissance RPG!");
return 1;
}
format(senha, sizeof(senha), "%s", tmp);
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
udb_Create(nomepl, senha);
SendClientMessage(playerid, azul, "Registrado com sucesso!");
return 1;
}
if (strcmp(cmd, "/logar", true)==0)
{
new tmp[256];
new senha[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,vermelhoescuro,"/logar [senha] - Exemplo: /logar 123");
return 1;
}
if(logado[playerid] == 1)
{
SendClientMessage(playerid, vermelhoescuro, "Você já está logado!");
return 1;
}
format(senha, sizeof(senha), "%s", tmp);
if (udb_CheckLogin(PlayerName(playerid),tmp)) {
SendClientMessage(playerid, azul, "Logado com sucesso!");
return 1;
}
else
{
SendClientMessage(playerid, vermelho, "Senha errada!");
}
return 1;
}
Agora acabamos de criar nosso sistema de login/registro. Vamos criar agora um sistema para salvar o dinheiro de alguém.
new grana;
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
grana = GetPlayerMoney(playerid);
udb_UserSetInt(nomepl, "Grana", grana);
//agora no OnPlayerSpawn
new grana;
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
grana = udb_UserInt(nomepl, "Grana");
GivePlayerMoney(playerid, grana);
Pronto! Agora criamos um sistema que salva o dinheiro de alguém quando esta pessoa volta ao servidor! Para fazer as variáveis salvarem, é muito simples, basta adicionar o seguinte code no /logar e no OnPlayerDisconnect:
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
udb_UserSetInt(nomepl, "Banco", banco[playerid]);/*isso faz salvar, coloquei a variável banco[playerid] por pedido do Cronos, mas dependendo do que vc quiser salvar, mude isto*/
//no sistema de /logar
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
Banco[playerid] = udb_UserInt(nomepl, "Banco");//Isso faz carregar, mude a variável Banco[playerid] e "Banco" pela variavel que quiser carregar
Isso vai fazer salvar a variável banco quando o player desconectar, e carregar quando ele logar.
7. Y_Objects
Y_Objects é um streamer de objetos usado para poder exceder o limite de objetos no sa-mp, evitando crashs. O ponto bom dele, é que você pode criar muitos objetos, o ponto ruim é que deixa seu script muito pesado e demora um pouco para carregar os objetos dentro do jogo. Enfim, vamos ao que interessa:
Para começar criando seus objetos, você deve trocar a função CreateObject por CreateDynamicObject, sem mudar as funções dentro dos parênteses. Após ter feito isso, você bota o seguinte no gamemode:
Object_Object();
AQUI VC POE OS CREATEDYNAMICOBJECT
//no OnPlayerDisconnect
Object_OnPlayerDisconnect();
Pronto! Agora os objetos foram criados.
Caso vc queira saber um pouco mais sobre o Y_Objects, vou colocar aqui o que faz cada função.
Object_AddToWorld(objectid, world) - Adiciona um certo objeto apenas para um mundo virtual(lembrando que se não definir o world, o objeto será setado no inicial)
Object_AddToAllPlayers(objectid) - Adiciona um certo objeto a todos os players conectados(quem se conectar depois não verá os objetos)
Object_AddToAllWorlds(objectid) - Adiciona um certo objeto a todos os virtual worlds
Object_RemoveFromPlayer(objectid, playerid) - Remove um certo objeto para apenas um player
Object_RemoveFromWorld(objectid, world) - Remove um certo objeto de apenas um world.
Object_RemoveFromAllPlayers(objectid) - Remove o objeto de todos os players
Object_RemoveFromAllWorlds(objectid) - Remove de todos os virtual worlds
Object_SetViewDistance(objectid, distance) - Seta a distância no qual o objeto pode ser visto (normal = 1000)
MoveDynamicObject(object, x, y, z, speed) - Move um objeto
StopDynamicObject(objectid) - Para de mover um objeto
IsValidDynamicObject(objectid) - Checa se o objeto (do Y_Objects) existe
CreateDynamicObject(object, x, y, z, rx, ry, rz) - Cria um objeto do include
DestroyDynamicObject(object) - Destroy o objeto
AttachDynamicObjectToPlayer - Puxa o objeto junto ao jogador, ou seja, se o jogador se mover, o objeto vai junto
AttachDynamicObjectToObject - Puxa o objeto junto ao objeto, ou seja, se o objeto se mover, este objeto vai junto
DettachDynamicObjectFromPlayer - Despuxa o objeto do jogador
8. Races
Para fazer corridas, é um processo meio complicado, estaremos usando a função SetPlayerRaceCheckpoint.
Primeiramente, vou explicar como funciona cada função necessária para se criar uma corrida:
No playerid, vamos colocar o id da pessoa que vai receber o checkpoint, no tipo, o tipo do checkpoint, estes são os tipos:
0 - Normal: Checkpoints normais da corrida, aqueles que tem a seta apontando para onde vai ser o próximo checkpoint.
1 - Finish: Checkpoint Final de uma Corrida.
2 - Nothing: Checkpoint que não tem nada dentro dele.
3 - Air: Checkpoint feito para corridas aéreas.
4 - Air Finish: Checkpoint feito para final de corridas aéreas.
Em x,y e z colocaremos as coordenadas onde serão os checkpoints, e em nextx, nexty e nextz, as coordenadas do próximo checkpoint(caso seja um checkpoint de final, deixe as coordenadas do mesmo).
E por último, em tamanho colocaremos o tamanho do checkpoint(o natural é geralmente colocar 8.0)
DisablePlayerRaceCheckpoint(playerid):
Usaremos essa função para trocar de checkpoint quando o player chegar em algum checkpoint da corrida.
Agora vamos fazer nossa corrida. Para simplificar as coordenadas de checkpoint da corrida, vamos usar um Float Multi-Array.
Acrescentaremos isso em cima de OnGamemodeInit:
new Float:ChecksAvenida[17][3] = {
{2021.9279,851.2713,6.4387},
{1806.2888,851.1154,10.3762},
{1597.7745,850.9503,6.4374},
{1315.8704,886.0849,6.5154},
{1227.3850,1170.5470,6.5219},
{1228.7192,1804.4149,6.4378},
{1229.5260,2301.2026,6.4387},
{1447.5416,2452.2988,6.4377},
{1849.4731,2497.6997,6.5153},
{2287.5569,2607.9063,6.4585},
{2609.7202,2514.3423,5.8201},
{2706.6592,2158.3931,6.4492},
{2705.5173,1674.4374,6.4448},
{2706.8931,1278.5399,6.4373},
{2624.1135,932.2136,6.4433},
{2312.5583,854.1749,6.4375},
{2049.3154,853.4050,6.4387}
};
Pronto! Acabamos de fazer um Multi-Array com as coordenadas dos checkpoints da corrida! Essa corrida está localizada na avenida, em LV. Agora vamos fazer um comando para o player entrar na corrida. (vamos fazer uma corrida singleplayer por enquanto, apenas para explicar como fazer a troca de checkpoints) Logo que ele digitar o comando, o checkpoint 1 da corrida vai aparecer no mapa do player, e quando entrar no checkpoint, vai aparecer o 2, e assim por diante... Então, aqui o code do comando:
{
checkcorrida[playerid] = 0;
SetPlayerRaceCheckpoint(playerid, 0, ChecksAvenida[checkcorrida[playerid]][0], ChecksAvenida[checkcorrida[playerid]][1], ChecksAvenida[checkcorrida[playerid]][2], ChecksAvenida[checkcorrida[playerid] + 1][0], ChecksAvenida[checkcorrida[playerid] + 1][1], ChecksAvenida[checkcorrida[playerid] + 1][2], 8.0);
return 1;
}
E agora, faremos um sistema para trocar de checkpoint, usando o callback OnPlayerEnterRaceCheckpoint. Caso não o tenha no seu gamemode, adicione.
{
if(checkcorrida[playerid] == 17)
{
SendClientMessage(playerid, 0xFFFF00AA, "Você terminou a corrida!");
DisablePlayerRaceCheckpoint(playerid);
checkcorrida[playerid] = 0;
return 1;
}
else
{
DisablePlayerCheckpoint(playerid);
checkcorrida[playerid] ++;
SetPlayerRaceCheckpoint(playerid, 0, ChecksAvenida[checkcorrida[playerid]][0], ChecksAvenida[checkcorrida[playerid]][1], ChecksAvenida[checkcorrida[playerid]][2], ChecksAvenida[checkcorrida[playerid] + 1][0], ChecksAvenida[checkcorrida[playerid] + 1][1], ChecksAvenida[checkcorrida[playerid] + 1][2], 8.0);
return 1;
}
}
Então, o que acabamos de fazer?
Criamos uma multi-array para simplificar as coordenadas dos checkpoints, e também criamos uma variável para definir o checkpoint que o player está. Então, cada vez que o player entrava em um checkpoint, a variável aumentava e se setava um checkpoint de acordo com o número que estava a variável. Quando a variável chegasse em 17, finalizaria a corrida. Assim fizemos nossa corrida.
FIM
Acompanhe as atualizações desse tutorial no link a seguir: http://forum.samp-br.com/index.php?showtopic=230