PAWN para iniciantes: 1 - Compreendendo o PAWN
INTRODUÇÃO
Criei este tutorial para ajudar as pessoas que não sabem criar um servidor e que não sabem fazer scripts básicos. Vou fazer deste tópico uma série. Indo provavelmente para 6 ou 7. Ou talvez mais. Eu tenho muito que explicar. Mas eles virão em breve. Vamos passar por várias coisas, são elas:
Então vamos começar, vamos?
- - O que é PAWN?
- O que é Pawno?
- O que é função?
- O que é retorno de chamada?
- Definindo cores.
- Inclui
- Vamos escrever olá, mundo!
- Erros conhecidos do compilador
Então vamos começar, vamos?

1) O que é PAWN?
PAWN é uma linguagem de programação sem tipo. É uma mistura de linguagens de programação já conhecidas. PAWN é usado por muitos jogos, incluindo SA-MP. Tem funções e callbacks como qualquer outra linguagem de programação!
2) O que é Pawno?
[B] [I] [CENTER] Pawno é um aplicativo de linguagem de programação que nos ajuda a criar scripts PAWN. Tem um pawncc.exe que funciona como um compilador e um compilador ajuda a encontrar erros e avisos que impedem o bom funcionamento do seu script. Se ele compilar corretamente, ele criará um arquivo .amx que será usado se você iniciar o samp-server.exe. Os servidores usam arquivos .amx, eles NÃO usam o arquivo .pwn para abrir o script.
3) Onde posso obter 'Pawno'?
Bem, está no pacote de servidor SA-MP padrão. Você pode obter o pacote do servidor SA-MP para 0.3x aqui: Clique aqui ! . Depois de baixar o RAR do pacote do servidor SA-MP, extraia-os para a área de trabalho. Abra a pasta e vamos lá. Pawno está na pasta Pawno dentro da pasta do servidor. Basta clicar em Pawno.exe

4) Mas é uma página em branco e não consigo escrever nada!
Claro que você não pode! Basta clicar em 'Novo' no canto superior esquerdo do seu pawno. Deve ser uma página em branco. Quando você rola o mouse até lá, ele já diz 'Novo'. Clique aqui e você verá um script vazio com muitos retornos de chamada!
Faremos um modo de jogo, então devemos excluir estas linhas:
Código:
// Este é um comentário // descomente a linha abaixo se quiser escrever um script de filtro // # define FILTERSCRIPT
Por quê ? Porque não vamos fazer um script de filtro! Se fôssemos fazer um script de filtro, deveríamos ter feito assim (falarei sobre os comentários no segundo artigo):
Código:
#define FILTERSCRIPT
Então, o que é diferente? Excluí 2 comentários no topo. Que se refere a 'Este é um comentário' e 'descomente a linha abaixo se você quiser escrever um script de filtro' e eu apaguei // para removê-lo do comentário.
O que mais vamos fazer?
Bem, exclua essas linhas, pois não estamos criando o script de filtro novamente.
Código:
#if defined FILTERSCRIPT // Bem, se você está fazendo um script de filtro, então não exclua aqui. Isso informa ao script se o script de filtro está definido na parte superior do nosso script. public OnFilterScriptInit () // Este é um retorno de chamada. Aqui começa assim que o seu script de filtro é iniciado. Mesmo antes de seu servidor iniciar. Então você pode usar aqui para conectar seu SQL ao seu servidor! E você pode adicionar seus veículos, classes, objetos aqui! E muito mais, é claro! :) { imprimir ("\ n --------------------------------------"); print ("Script de filtro em branco por seu nome aqui"); // Essas impressões são as que são impressas em seu console. Por exemplo, 'O modo de jogo de teste de Rufio foi iniciado!' ! imprimir ("-------------------------------------- \ n"); return 1; } public OnFilterScriptExit () // Este é o retorno de chamada usado na saída do filtercript. Isso pode ser feito manualmente por RCON-log em seu servidor e digitando / rcon unloadfs 'fsname' ou automaticamente fechando seu servidor. Você pode imprimir novamente, é claro! Como 'O script de filtro de teste de Rufio foi encerrado!' ! ;) { return 1; // No entanto, o retorno 1 é uma função. Significa retornar esta verdade. 1 é verdadeiro, 0 é falso. } #else // Diz ao script se este é um modo de jogo.
e também NÃO se esqueça de excluir este:
Código:
#fim se
Desculpe pelo erro aqui. Você NÃO deve excluí-lo se for um script de filtro. Eu estava com sono. Lol. Por que não deletar isso? Bem, porque declaramos uma instrução #if no início de nosso script como dito #if definido FILTERSCRIPT. Portanto, devemos adicionar #endif no final do nosso script de filtro.
Portanto, a aparência final do nosso modo de jogo será:
Código:
#include <a_samp> a Principal() { imprimir ("\ n ----------------------------------"); print ("Gamemode em branco por seu nome aqui"); imprimir ("---------------------------------- \ n"); } public OnGameModeInit () { // Não use essas linhas se for um script de filtro SetGameModeText ("Script em branco"); AddPlayerClass (0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; } public OnGameModeExit () { return 1; } public OnPlayerRequestClass (playerid, classid) { SetPlayerPos (playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos (playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt (playerid, 1958.3783, 1343.1572, 15.3746); return 1; } public OnPlayerConnect (playerid) { return 1; } public OnPlayerDisconnect (playerid, motivo) { return 1; } public OnPlayerSpawn (playerid) { return 1; } public OnPlayerDeath (playerid, killerid, motivo) { return 1; } public OnVehicleSpawn (Vehicleid) { return 1; } public OnVehicleDeath (vehicleid, killerid) { return 1; } public OnPlayerText (playerid, text []) { return 1; } public OnPlayerCommandText (playerid, cmdtext []) { if (strcmp ("/ mycommand", cmdtext, true, 10) == 0) { // Faça algo aqui return 1; } return 0; } public OnPlayerEnterVehicle (playerid, vehicleid, ispassenger) { return 1; } public OnPlayerExitVehicle (playerid, vehicleid) { return 1; } public OnPlayerStateChange (playerid, newstate, oldstate) { return 1; } public OnPlayerEnterCheckpoint (playerid) { return 1; } public OnPlayerLeaveCheckpoint (playerid) { return 1; } public OnPlayerEnterRaceCheckpoint (playerid) { return 1; } public OnPlayerLeaveRaceCheckpoint (playerid) { return 1; } public OnRconCommand (cmd []) { return 1; } public OnPlayerRequestSpawn (playerid) { return 1; } public OnObjectMoved (objectid) { return 1; } public OnPlayerObjectMoved (playerid, objectid) { return 1; } public OnPlayerPickUpPickup (playerid, pickupid) { return 1; } public OnVehicleMod (playerid, vehicleid, componentid) { return 1; } public OnVehiclePaintjob (playerid, vehicleid, paintjobid) { return 1; } public OnVehicleRespray (playerid, vehicleid, color1, color2) { return 1; } public OnPlayerSelectedMenuRow (playerid, linha) { return 1; } public OnPlayerExitedMenu (playerid) { return 1; } public OnPlayerInteriorChange (playerid, newinteriorid, oldinteriorid) { return 1; } public OnPlayerKeyStateChange (playerid, newkeys, oldkeys) { return 1; } public OnRconLoginAttempt (ip [], senha [], sucesso) { return 1; } public OnPlayerUpdate (playerid) { return 1; } public OnPlayerStreamIn (playerid, forplayerid) { return 1; } public OnPlayerStreamOut (playerid, forplayerid) { return 1; } public OnVehicleStreamIn (vehicleid, forplayerid) { return 1; } public OnVehicleStreamOut (vehicleid, forplayerid) { return 1; } public OnDialogResponse (playerid, dialogid, resposta, listitem, inputtext []) { return 1; } public OnPlayerClickPlayer (playerid, clickedplayerid, fonte) { return 1; }
Então, vamos salvar e compilar este script! Pressione F5. Deve perguntar a você onde salvar. Selecione a pasta de modos de jogo da pasta do servidor. E salve lá. Depois de salvar, ele deve compilar seu script e deve dizer o seguinte:
Código:
Compilador de peão 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
Vamos editar este modo de jogo mais tarde. Mas, primeiro, direi o que é função e o que é retorno de chamada.
5) O que é função?
A função faz parte do script. Diz ao script o que fazer em cada retorno de chamada. Como
SendPlayerMessage (playerid, 'COLOR', "Asdasdasdas");
é uma função. Diz ao script para enviar ao jogador uma mensagem na cor que você especificou. E a mensagem deve ser asdasdasdas. Bem, você deve colocar "" antes de escrever seu texto. Significa string em linguagens de script. E string significa texto em inglês adequado. Vamos dar um exemplo para entender melhor isso:
Se adicionarmos isso ao OnPlayerConnect, ele deve ter a seguinte aparência:
Código:
public OnPlayerConnect (playerid) { SendPlayerMessage (playerid, COLOR_RED, "Bem-vindo ao nosso servidor! Divirta-se! :)"); return 1; }
Então, isso significa:
Quando um jogador se conecta, esta mensagem aparecerá para ele. Só ele. Se quisermos enviar isso ao público, vamos simplesmente fazer:
Código:
public OnPlayerConnect (playerid) { SendPlayerMessageToAll (COLOR_RED, "Um jogador se juntou ao nosso servidor! Bem-vindo! :)"); return 1; }
Percebido ? Não escrevemos o playerid. Adivinha por quê. Porque estamos enviando isso para TODOS os jogadores que estão jogando em nosso servidor. Não para uma pessoa especificada.
Código:
public OnPlayerConnect (playerid)
é um retorno de chamada sobre o qual falaremos mais tarde.
Código:
SendPlayerMessageToAll (COLOR_RED, "Um jogador se juntou ao nosso servidor! Bem-vindo! :)");
é uma função. Devíamos colocar um (após a função. E obedecer às suas regras de escrita. Então escrevemos um COLOR e colocamos um, e então colocamos "para dizer ao script que nosso texto vai agora. E fechamos o" para dizer ao script nosso texto terminou. Então fechamos nosso (de modo que significa que nossa escrita terminou e colocamos um; para contar nosso trabalho com esta linha terminou. Não perca) e um; senão nosso script dará um erro.
Mesmo assim, nosso script deve dar um erro. Deve ser este:
Código:
erro 017: símbolo indefinido "COLOR_RED"
Para mais informações sobre funções, visite wiki.sa-mp.com!
[B] [I] [CENTRO] 6) O que é retorno de chamada?
Callbacks são os esqueletos do script. Callbacks contam nossas instruções de script. No entanto, você pode entendê-los com seu inglês. Portanto, não vou falar muito sobre retornos de chamada. Eles são realmente fáceis de entender! Tal como :
Código:
OnPlayerConnect
significa quando um jogador se conecta
Código:
OnPlayerDisconnect
significa quando um jogador se desconecta
Código:
OnPlayerSpawn
significa quando um jogador aparece por qualquer motivo. Conectando-se, morrendo etc.
Código:
OnPlayerDeath
significa quando um jogador morre.
Mas, existem vários retornos de chamada importantes. Vou falar sobre eles:
São eles:
Código:
a Principal()
e
Código:
OnGameModeInIt
principal é para trabalhos de console. Como imprimir algo no console. Além disso, você pode conectar seu servidor a um banco de dados MySQL em principal!
OnGameModeInIt é quase para tudo! Pickups, ícones do mapa, objetos, veículos, classes, texto do modo de jogo.
Isso é tudo que direi sobre retornos de chamada. Visite wiki.sa-mp.com para obter mais informações! Você pode pedir ajuda aqui também!

7) Definição de cores!
Vamos usar isso:
Código:
#definir
Vamos definir COLOR_RED como escrevemos COLOR_RED.
Deveria ser
Código:
# define COLOR_RED 0xA10000AA
#define é uma função pawno. Isso nos ajuda a definir as coisas que queremos fazer. Íamos definir COLOR_RED, então escrevemos COLOR_RED. e 0xA10000AA é o código de cor do vermelho em Pawno. Então, se fossemos definir COLOR_YELLOW, deveria ser assim:
Código:
# define COLOR_YELLOW 0xE0E377AA
é igual. Espero que você tenha entendido!


Olhe para o início do seu script. Deveria dizer:
Código:
#include <a_samp>
significa que este é um script para SA-MP. E carrega as funções normais do SA-MP. Portanto, quanto mais inclusões você tiver em seu script, mais funções terá que usar. Mas NÃO escreva inclusões sem sentido no seu modo de jogo apenas para ter mais funções. Adicione os que você precisa.
Só não se esqueça desta sintaxe:
Código:
#include <incluir nome>
escreva seu nome de inclusão entre <e>
9) Escrever "Hello World!"
Vamos fazer um comando.
Para tanto, vamos utilizar:
Código:
public OnPlayerCommandText (playerid, cmdtext [])
ligar de volta. atualmente temos 1 comando pronto. Vamos editar um pouco.
isto é :
Código:
public OnPlayerCommandText (playerid, cmdtext []) // se um jogador escreve o comando {// o retorno de chamada começa. if (strcmp ("/ mycommand", cmdtext, true, 10) == 0) // se um jogador escreve / mycommand {// se ele escrever, inicie estas funções: // Faça algo aqui return 1; // retorna verdadeiro. } // encerramos as funções deste comando. return 0; // retorna falso porque há um verdadeiro acima. } // encerramos as funções desse callback.
NÃO se esqueça das devoluções! São coisas úteis!
vamos fazer assim:
Código:
public OnPlayerCommandText (playerid, cmdtext []) // se um jogador escreve o comando {// o retorno de chamada começa. if (strcmp ("/ scripting", cmdtext, true, 10) == 0) // se um jogador escreve / script {// se ele escrever, inicie estas funções: SendPlayerMessage (playerid, COLOR_RED, "Olá, mundo!"); // Se ele escrever, envie a ele um "Olá, mundo!" mensagem. return 1; // retorna verdadeiro. } // encerramos as funções deste comando. return 0; // retorna falso porque há um verdadeiro acima. } // encerramos as funções desse callback.
Olá, mundo é um padrão. Pratique e trabalhe com este comando e tente fazer algo mais! Você vai se acostumar, eu juro!
10) Por último, mas não menos importante, erros conhecidos do compilador!
o pior deles é:
Código:
erro 025: o cabeçalho da função difere do protótipo
você escreveu um encaminhamento errado. Tais como:
Se você deveria ter escrito
Código:
encaminhar SetPlayerTeamFromClass (playerid, classid);
mas escreveu:
Código:
encaminhar SetPlayerTeamFromClass ();
você obterá este erro.
o erro mais comum:
Código:
erro fatal 100: não é possível ler o arquivo: "nome do include"

Código:
erro 054: chave de fechamento sem correspondência ("}")

Código:
erro 001: token esperado: ";", mas encontrado "}"
Código:
erro 021: símbolo já definido: "algo que você já definiu"
Isso é tudo que eu acho. Espero ter ajudado. Você pode fazer perguntas é claro!

Vou continuar esta série quando tiver tempo, no entanto. Vejo vocês!

Diga-me todas as coisas que fiz de errado. Vou editar
0 Comentários