Ad Code

Responsive Advertisement

PAWN para iniciantes: 1 - Compreendendo o PAWN

 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:

  1. - O que é PAWN?
  2. O que é Pawno?
  3. O que é função?
  4. O que é retorno de chamada?
  5. Definindo cores.
  6. Inclui
  7. Vamos escrever olá, mundo!
  8. 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
Isso significa que nosso script foi compilado com sucesso e está pronto para uso em nosso servidor!

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"
vamos definir a cor mais tarde. Portanto, pode ficar.

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!

 Inclui


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
A solução para isso é:

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"
abra seu pawno e clique em 'Novo' e feche o pawno e abra seu modo de jogo. Compile novamente. Se der erro novamente, vá para ****** e ****** o include que ele pede e adicione-o à sua pasta pawno-> includes. E compilar novamente, Pronto!


Código:
erro 054: chave de fechamento sem correspondência ("}")
Isso acontece quando você coloca mais de 1 fechamento}. Exclua 1 e compile novamente. Se ainda acontecer, apague mais


Código:
erro 001: token esperado: ";", mas encontrado "}"
Isso acontece quando você não colocou um ";" no final da linha. Exceto "" ofc. Portanto, você deve colocar um;


Código:
erro 021: símbolo já definido: "algo que você já definiu"
Isso acontece quando você define uma coisa mais de uma vez. Pesquise-o em seu script e exclua aquele que você definiu extra.


Isso é tudo que eu acho. Espero ter ajudado. Você pode fazer perguntas é claro! Boa sorte !

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

Diga-me todas as coisas que fiz de errado. Vou editar

Postar um comentário

0 Comentários

© 2022 PawnScript All Rights Reversed