[TUTORIAL] Criando mapas para SA-MP
Muita gente entra em servidores cheio de rampas, pontos e outras coisas... Ai da aquela vontade do cão de criar um gamemode com seu próprio mapa. Mas como fazer um mapa pra samp?
Primeiro baixe o MTA:
http://mtavc.com/124.html
Instale o programa e execute-o.
Irá abrir o GTA e aparecerá um menu diferente do jogo. Clique em Map Editor, espere carregar e então você aparecerá em Ganton, com um mirazinha no centro e alguns icones na tela.
Para usar o cursor, que servirá para clicar nos ícones, tecle F.
Para acessar a lista de objetos e adiciona-los no jogo faça o seguinte:
Depois de ter teclado F, vá com o cursor até o lado inferior esquerdo no ícone de uma caixa, chamada Object.
Aparecerá milhares de objetos do jogos, para adiciona-los ao jogo de dois cliques no item da lista ou de OK.
Pronto, você adicionou o objeto no jogo, mas você não poderá mexer a camera para coloca-lo onde você quiser, terá que ir com as setinhas, mas para resolver isso bastar teclar F de novo.
Quando quiser deixa-lo no lugar definitivo apenas de um clique.
Caso queria excluir o objeto apenas tecle delete.
Para ver a lista de objetos que você adicionou, com a teclada F precionada, vá até a parte de cima da tela e clique em current elements. Você poderá excluir, ir até o objeto, mudar sua posição, seleciona-lo etc.
Comandos básicos:
Modo cursor ON/OFF: Tecla F
Mover objeto: Setas
Mover camera: WSAD
Mover objeto para cima: Page Up
Mover objeto para baixo: Page Down
Rotacionar: ctrl + setas/page down/page up
Mover objeto com modo cursor OFF: Mouse
Para salvar o objeto clique, com a tecla F pressionada, em Save As ( caso for a primeira vez ) ou em Save (caso for edição de um mapa já existente).
Para abrir um mapa, também com a tecla F pressionada, clique em Open e para criar um novo mapa clique em New.
Para testar o mapa, jogando com o CJ, tecle F5 ou clique em Test. Para sair do teste apenas tecle F5 novamente.
Para adicionar veículos clique em Vehicles, no lado inferior esquerdo da tela, são quase os mesmos comandos de manipular objetos.
Para converter, você precisar pegar seu arquivo salvo do mapa, que geralmente fica na pasta:
C:\Arquivos de programas\MTA San Andreas\server\mods\deathmatch\resources
Dentro de uma pasta com o mesmo nome do mapa.
Entre no site:
http://gtamap.delux-host.com/converter/
Selecione para qual formato seu mapa será convertido e então clique em "Arquivo...", procure pelo seu mapa (nomedomapa.map) e clique em abrir.
Ele automaticamente será convertido então na parte de baixo do site copie as linhas de código e introduza-as em seu gamemode ou sei lá o que!
Prontinho! :D
Primeiro baixe o MTA:
http://mtavc.com/124.html
Instale o programa e execute-o.
Irá abrir o GTA e aparecerá um menu diferente do jogo. Clique em Map Editor, espere carregar e então você aparecerá em Ganton, com um mirazinha no centro e alguns icones na tela.
Para usar o cursor, que servirá para clicar nos ícones, tecle F.
Para acessar a lista de objetos e adiciona-los no jogo faça o seguinte:
Depois de ter teclado F, vá com o cursor até o lado inferior esquerdo no ícone de uma caixa, chamada Object.
Aparecerá milhares de objetos do jogos, para adiciona-los ao jogo de dois cliques no item da lista ou de OK.
Pronto, você adicionou o objeto no jogo, mas você não poderá mexer a camera para coloca-lo onde você quiser, terá que ir com as setinhas, mas para resolver isso bastar teclar F de novo.
Quando quiser deixa-lo no lugar definitivo apenas de um clique.
Caso queria excluir o objeto apenas tecle delete.
Para ver a lista de objetos que você adicionou, com a teclada F precionada, vá até a parte de cima da tela e clique em current elements. Você poderá excluir, ir até o objeto, mudar sua posição, seleciona-lo etc.
Comandos básicos:
Modo cursor ON/OFF: Tecla F
Mover objeto: Setas
Mover camera: WSAD
Mover objeto para cima: Page Up
Mover objeto para baixo: Page Down
Rotacionar: ctrl + setas/page down/page up
Mover objeto com modo cursor OFF: Mouse
Para salvar o objeto clique, com a tecla F pressionada, em Save As ( caso for a primeira vez ) ou em Save (caso for edição de um mapa já existente).
Para abrir um mapa, também com a tecla F pressionada, clique em Open e para criar um novo mapa clique em New.
Para testar o mapa, jogando com o CJ, tecle F5 ou clique em Test. Para sair do teste apenas tecle F5 novamente.
Para adicionar veículos clique em Vehicles, no lado inferior esquerdo da tela, são quase os mesmos comandos de manipular objetos.
Para converter, você precisar pegar seu arquivo salvo do mapa, que geralmente fica na pasta:
C:\Arquivos de programas\MTA San Andreas\server\mods\deathmatch\resources
Dentro de uma pasta com o mesmo nome do mapa.
Entre no site:
http://gtamap.delux-host.com/converter/
Selecione para qual formato seu mapa será convertido e então clique em "Arquivo...", procure pelo seu mapa (nomedomapa.map) e clique em abrir.
Ele automaticamente será convertido então na parte de baixo do site copie as linhas de código e introduza-as em seu gamemode ou sei lá o que!
Prontinho! :D
[TUTORIAL] Acessando site do SA-MP
Se você está tentando entrar no site do SA-MP, mas não consegue, é porque está bloqueado para a América Latina.
Uma maneira fácil e rápida de acessá-lo, sem fazer altas gambiarras ou resetar o modem sem parar até que seu IP mude para um que não esteja bloqueado, é por proxys.
No site abaixo existe uma lista de proxys publicos que podem ser usados para acessar qualquer site de uma maneira que disfarce seu IP (não é 100% seguro que você será totalmente disfarçado):
http://proxy.org/
No lado direito do site está a lista e um campo de formulario. Para entrar no site desejado coloque a URL do site no campo de formulario, escolha um proxy publico na lista que está abaixo do campo (caso queria um proxy aleatorio deixe em "*** random proxy ***").
Pronto!
O único problema é que eu até agora não achei nenhum proxy publico que deixe você fazer downloads dos sites que você acessa, nem ver vídeos etc e tal.
Praticamente, isso só servirá para ver a wiki do samp. ^^
Uma maneira fácil e rápida de acessá-lo, sem fazer altas gambiarras ou resetar o modem sem parar até que seu IP mude para um que não esteja bloqueado, é por proxys.
No site abaixo existe uma lista de proxys publicos que podem ser usados para acessar qualquer site de uma maneira que disfarce seu IP (não é 100% seguro que você será totalmente disfarçado):
http://proxy.org/
No lado direito do site está a lista e um campo de formulario. Para entrar no site desejado coloque a URL do site no campo de formulario, escolha um proxy publico na lista que está abaixo do campo (caso queria um proxy aleatorio deixe em "*** random proxy ***").
Pronto!
O único problema é que eu até agora não achei nenhum proxy publico que deixe você fazer downloads dos sites que você acessa, nem ver vídeos etc e tal.
Praticamente, isso só servirá para ver a wiki do samp. ^^
[TUTORIAL]Abrindo portão por busina
Primeiramenta va ate a linha: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
se no seu GameMode não tiver ela adicione.
Embaixo do public coloque este code:
/* Se o jogador apertar o BOTÃO DE BUZINA E ESTIVER DENTRO DE UM VEÍCULO */
if((newkeys == KEY_HORN) && (IsPlayerInAnyVehicle(playerid)))
{
// ENTÃO ELE PROCESSA O QUE ESTÁ AQUI
}
return 1;
}
--explicação--
o if está dizendo que se o jogador estiver em um carro e aperta o botão da busina "H" ou "CapsLook" (Que neste caso é a key "horn") o portão ira abrir (Ou o que você colocou ali no code)
Obs:. Não se esqueça de por o define: #define KEY_HORN 2
se no seu GameMode não tiver ela adicione.
Embaixo do public coloque este code:
/* Se o jogador apertar o BOTÃO DE BUZINA E ESTIVER DENTRO DE UM VEÍCULO */
if((newkeys == KEY_HORN) && (IsPlayerInAnyVehicle(playerid)))
{
// ENTÃO ELE PROCESSA O QUE ESTÁ AQUI
}
return 1;
}
--explicação--
o if está dizendo que se o jogador estiver em um carro e aperta o botão da busina "H" ou "CapsLook" (Que neste caso é a key "horn") o portão ira abrir (Ou o que você colocou ali no code)
Obs:. Não se esqueça de por o define: #define KEY_HORN 2
[TUTORIAL] Aprendendo a salvar as coisas
Bom dia, senhores leitores do blog do Cronos, eu sou o novo colaborador, antigo [JPP]MrBean, e hoje, vou ensinar vocês a salvar as coisas...
-- Introdução --
Voces vao ver o que salvar com o que eu vou ensinar voces a fazerem, claro que voces podem se aprimorar mais, mais apenas vou ensinar o básico...
Como visto acima, nós usamos apenas uma variável em vez de colocar uma variável pra cada coisa ocupando mais memória...
A variável acima, será o que vai reconhecer o PlayerID do jogador para salvar as informaçoes...
-- Criando, Carregando e Salvando contas --
- Registrando
- Agora que a conta foi criada vamos fazer o jogador se logar...
Agora vamos salvar....
-- AGORA FAZENDO O BONECO SALVAR MESMO --
Isso vai salvar quando ele sair =D
Isso vai criar um pedaço da conta quando ele entrar =D
-- AGORA OS COMANDOS --
new cmd[128], tmp[128], idx;
cmd = strtok(cmdtext, idx);
if (!strcmp(cmd, "/logar", true))
{
new tmppass[128];
if(AccountInfo[playerid][aLogged] == 1) return SendClientMessage(playerid, 0xE60000FF, "Você já está logado.");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xF97804FF, "USE: /logar [password]");
new plname[MAX_PLAYER_NAME];
GetPlayerName(playerid, plname, sizeof plname);
format(plname, sizeof plname, "%s.ini", plname);
if(!fexist(plname)) return SendClientMessage(playerid, 0xE60000FF, "Por favor registre-se primeiro");
strmid(tmppass, tmp, 0, strlen(cmdtext), 128);
Encrypt(tmppass);
LoginPlayer(playerid, tmppass);
return 1;
}
if (!strcmp(cmd, "/registrar", true))
{
if(AccountInfo[playerid][aLogged] == 1) return SendClientMessage(playerid, 0xE60000FF, "Você já está logado.");
new plname[MAX_PLAYER_NAME];
GetPlayerName(playerid, plname, sizeof plname);
format(plname, sizeof plname, "%s.ini", plname);
new File: hFile = fopen(plname, io_read);
if (hFile)
{
SendClientMessage(playerid, 0xE60000FF, "Alguem já está usando esse nick.");
fclose(hFile);
return 1;
}
new tmppass[128];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xF97804FF, "USE: /registrar [password]");
strmid(tmppass, tmp, 0, strlen(cmdtext), 128);
Encrypt(tmppass);
RegisterPlayer(playerid, tmppass);
return 1;
}
-- E AGORA AS FUNÇOES DE PROTEÇAO DE SENHA --
Gente, de meu próximo tutorial, vou ensinar a usar dini, esse é so para voces verem mesmo que pode-se fazer sem usar outro include...
-- Introdução --
Voces vao ver o que salvar com o que eu vou ensinar voces a fazerem, claro que voces podem se aprimorar mais, mais apenas vou ensinar o básico...
enum aAcc
{
aPassword[128],
aScore,
aCash,
Float:aX,
Float:aY,
Float:aZ,
Float:aA,
aLogged,
}
Como visto acima, nós usamos apenas uma variável em vez de colocar uma variável pra cada coisa ocupando mais memória...
new AccountInfo[MAX_PLAYERS][aAcc];
A variável acima, será o que vai reconhecer o PlayerID do jogador para salvar as informaçoes...
-- Criando, Carregando e Salvando contas --
- Registrando
forward RegisterPlayer(playerid, password[]); public RegisterPlayer(playerid, password[]) { if(IsPlayerConnected(playerid)) { new name[MAX_PLAYER_NAME], str[128]; GetPlayerName(playerid, name, sizeof name); format(str, sizeof str, "%s.ini", name); new File:account = fopen(str, io_write); if (account) { strmid(AccountInfo[playerid][aPassword], password, 0, strlen(password), 128); AccountInfo[playerid][aCash] = GetPlayerMoney(playerid); AccountInfo[playerid][aScore] = GetPlayerScore(playerid); GetPlayerPos(playerid, AccountInfo[playerid][aX], AccountInfo[playerid][aY], AccountInfo[playerid][aZ]); GetPlayerFacingAngle(playerid, AccountInfo[playerid][aA]); new file[128]; { format(file, sizeof file, "Password: %s\n", AccountInfo[playerid][aPassword]); { fwrite(account, file); } format(file, sizeof file, "Grana: %d\n",AccountInfo[playerid][aCash]); { fwrite(account, file); } format(file, sizeof file, "Score: %d\n", AccountInfo[playerid][aScore]); { fwrite(account, file); } format(file, sizeof file, "X: %f\n",AccountInfo[playerid][aX]); { fwrite(account, file); } format(file, sizeof file, "Y: %f\n",AccountInfo[playerid][aY]); { fwrite(account, file); } format(file, sizeof file, "Z: %f\n",AccountInfo[playerid][aZ]); { fwrite(account, file); } format(file, sizeof file, "Angulo: %f\n",AccountInfo[playerid][aA]); { fwrite(account, file); } } fclose(account); SendClientMessage(playerid, 0x21DD00FF, "Voce foi registrado, agora logue-se."); } } return 1; }
- Agora que a conta foi criada vamos fazer o jogador se logar...
forward LoginPlayer(playerid, password[]); public LoginPlayer(playerid, password[]) { new name[MAX_PLAYER_NAME], str[128]; GetPlayerName(playerid, name, sizeof name); format(str, sizeof str, "%s.ini", name); new File:account = fopen(str, io_read); if (account) { new pass[256]; new passres[128], value[128]; fread(account, pass, sizeof pass); passres = GetFileString(pass); if (!strcmp("Password", passres)) { value = GetFileValue(pass); strmid(AccountInfo[playerid][aPassword], value, 0, strlen(value)-1, 128); // -1 to remove the extra space(\n) } if (!strcmp(AccountInfo[playerid][aPassword], password, true)) { while (fread(account, pass, 256)) { passres = GetFileString(pass); if (strfind(passres, "Cash") != -1) { value = GetFileValue(pass); AccountInfo[playerid][aCash] = strval(value); } if (strfind(passres, "Score") != -1) { value = GetFileValue(pass); AccountInfo[playerid][aScore] = strval(value); } if (strfind(passres, "X") != -1) { value = GetFileValue(pass); AccountInfo[playerid][aX] = floatstr(value); } if (strfind(passres, "Y") != -1) { value = GetFileValue(pass); AccountInfo[playerid][aY] = floatstr(value); } if (strfind(passres, "Z") != -1) { value = GetFileValue(pass); AccountInfo[playerid][aZ] = floatstr(value); } if (strfind(passres, "Angle") != -1) { value = GetFileValue(pass); AccountInfo[playerid][aA] = floatstr(value); } } fclose(account); AccountInfo[playerid][aLogged] = 1; } else { SendClientMessage(playerid, 0xE60000FF, "Senha errada."); fclose(account); return 1; } GivePlayerMoney(playerid, AccountInfo[playerid][aCash]); SetPlayerScore(playerid, AccountInfo[playerid][aScore]); SetPlayerPos(playerid, AccountInfo[playerid][aX], AccountInfo[playerid][aY], AccountInfo[playerid][aZ]); SetPlayerFacingAngle(playerid, AccountInfo[playerid][aA]); SendClientMessage(playerid, 0x21DD00FF, "Logado com sucesso"); printf("%s logou", name); } return 1; }
Agora vamos salvar....
forward SavePlayer(playerid); public SavePlayer(playerid) { if(IsPlayerConnected(playerid)) { if(AccountInfo[playerid][aLogged] == 1) { new name[MAX_PLAYER_NAME], str[128]; GetPlayerName(playerid, name, sizeof name); format(str, sizeof str, "%s.ini", name); new File:account = fopen(str, io_write); if (account) { AccountInfo[playerid][aCash] = GetPlayerMoney(playerid); AccountInfo[playerid][aScore] = GetPlayerScore(playerid); GetPlayerPos(playerid, AccountInfo[playerid][aX], AccountInfo[playerid][aY], AccountInfo[playerid][aZ]); GetPlayerFacingAngle(playerid, AccountInfo[playerid][aA]); new file[128]; { format(file, sizeof file, "Password: %s\n", AccountInfo[playerid][aPassword]); { fwrite(account, file); } format(file, sizeof file, "Grana: %d\n",AccountInfo[playerid][aCash]); { fwrite(account, file); } format(file, sizeof file, "Score: %d\n", AccountInfo[playerid][aScore]); { fwrite(account, file); } format(file, sizeof file, "X: %f\n",AccountInfo[playerid][aX]); { fwrite(account, file); } format(file, sizeof file, "Y: %f\n",AccountInfo[playerid][aY]); { fwrite(account, file); } format(file, sizeof file, "Z: %f\n",AccountInfo[playerid][aZ]); { fwrite(account, file); } format(file, sizeof file, "Angulo: %f\n",AccountInfo[playerid][aA]); { fwrite(account, file); } } fclose(account); } } } return 1; }
-- AGORA FAZENDO O BONECO SALVAR MESMO --
public OnPlayerDisconnect(playerid, reason) { SavePlayer(playerid); return 1; }
Isso vai salvar quando ele sair =D
public OnPlayerConnect(playerid) { AccountInfo[playerid][aCash] = 0; AccountInfo[playerid][aScore] = 0; AccountInfo[playerid][aX] = 0; AccountInfo[playerid][aY] = 0; AccountInfo[playerid][aZ] = 0; AccountInfo[playerid][aA] = 0; strmid(AccountInfo[playerid][aPassword], "-", 0, 1, 1); return 1; }
Isso vai criar um pedaço da conta quando ele entrar =D
-- AGORA OS COMANDOS --
new cmd[128], tmp[128], idx;
cmd = strtok(cmdtext, idx);
if (!strcmp(cmd, "/logar", true))
{
new tmppass[128];
if(AccountInfo[playerid][aLogged] == 1) return SendClientMessage(playerid, 0xE60000FF, "Você já está logado.");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xF97804FF, "USE: /logar [password]");
new plname[MAX_PLAYER_NAME];
GetPlayerName(playerid, plname, sizeof plname);
format(plname, sizeof plname, "%s.ini", plname);
if(!fexist(plname)) return SendClientMessage(playerid, 0xE60000FF, "Por favor registre-se primeiro");
strmid(tmppass, tmp, 0, strlen(cmdtext), 128);
Encrypt(tmppass);
LoginPlayer(playerid, tmppass);
return 1;
}
if (!strcmp(cmd, "/registrar", true))
{
if(AccountInfo[playerid][aLogged] == 1) return SendClientMessage(playerid, 0xE60000FF, "Você já está logado.");
new plname[MAX_PLAYER_NAME];
GetPlayerName(playerid, plname, sizeof plname);
format(plname, sizeof plname, "%s.ini", plname);
new File: hFile = fopen(plname, io_read);
if (hFile)
{
SendClientMessage(playerid, 0xE60000FF, "Alguem já está usando esse nick.");
fclose(hFile);
return 1;
}
new tmppass[128];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xF97804FF, "USE: /registrar [password]");
strmid(tmppass, tmp, 0, strlen(cmdtext), 128);
Encrypt(tmppass);
RegisterPlayer(playerid, tmppass);
return 1;
}
-- E AGORA AS FUNÇOES DE PROTEÇAO DE SENHA --
stock Encrypt(string[]) // Made by Y_Less { for(new x=0; x < class="pawnkeyword">if(string[x] > (0xff)) { string[x] -= 256; } } } stock strtok(const string[], &index,seperator=' ') { new length = strlen(string); new offset = index; new result[128]; while ((index < class="pawnkeyword">if ((index < class="pawnkeyword">return result; }
Gente, de meu próximo tutorial, vou ensinar a usar dini, esse é so para voces verem mesmo que pode-se fazer sem usar outro include...
[TUTORIAL] Operadores relacionais
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!
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!
Comunidade Pawno - SA:MP Pawn Scripting
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! ;-)
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! ;-)
[ARTIGO] O básico para começar a programar pawn do jeito certo
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
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
[TUTORIAL] Doenças
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..."); //mensagem que vai aparecer quando você morrer por causa da doença
}
}
Agora no OnPlayerDeath coloque:
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 +/-
E aqui é o fim do tutorial. Em breve vou fazer um tutorial de fazer farmácia para que possa curar a doença.
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 +/-
[TUTORIAL] Pegando coordenadas X, Y e Z
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.
Cadastre-se ... depois dê sua nota para os sites:
great (ótimo), not bad (nada mal), perfect (perfeito).