[Pedido] Alguem me ensina ;-;
#1

Fiz um poste anteriormente pedindo algum lugar para mim estudar PAWN, uma pessoa me enviou um link de uma playlist, Playlist grande , boa , porйm , o cara que explicava se enrolava um pouco(normal) . Mas o que nгo teve condiзгo foi a qualidade do vнdeo , ele tinha algum tipo de Bug visual que atrapalha muito na hora de entender a explicaзгo. Se alguйm puder me ajudar , agradeзo <3








Playlist: https://www.youtube.com/watch?v=szj7...As4TfGTgr1CVTv
Reply
#2

Caue, um conselho ok? sempre tive muita dificuldade de aprender isso, pois nгo й uma coisa fбcil ao primeiro olhar. A Lуgica da programaзгo й FUNDAMENTAL pra qualquer linguagem, inclusive pawn!

Um conselho, inicia um gamemode do zero, aquele padrгozinho do Pawno.
Comeзa a criar um comando e mentaliza o que essse comando vai fazer, por exemplo; criar um veнculo da cor preta na tua frente.

baseado nisso tu comeзa a criar o comando procurando sempre no SAMP WIKI e se der erro na hora de compilar, procura aqui no forum sobre o erro, posta na бrea de dъvidas que com toda a certeza o pessoal vai ajudar! e quando vocк notar, jб estб criando coisas incrнveis! sйrio!

Comeзa fazendo coisas bobas mesmo e depois vai evoluindo os comandos!
Reply
#3

Quote:
Originally Posted by rolex
Посмотреть сообщение
Caue, um conselho ok? sempre tive muita dificuldade de aprender isso, pois nгo й uma coisa fбcil ao primeiro olhar. A Lуgica da programaзгo й FUNDAMENTAL pra qualquer linguagem, inclusive pawn!

Um conselho, inicia um gamemode do zero, aquele padrгozinho do Pawno.
Comeзa a criar um comando, mentaliza o que essse comando vai fazer, por exemplo, criar um veнculo da cor preta na tua frente... baseado nisso tu comeзa a criar o comando procurando sempre no SAMP WIKI, se der erro na hora de compilar, procura aqui no forum sobre o erro, posta na бrea de dъvidas que com toda a certeza o pessoal vai ajudar! e quando vocк notar, jб estб criando coisas incrнveis! sйrio!

Comeзa fazendo coisas bobas como comandos que mostrem mensagens e etc e depois vai evoluindo os comandos!
Vou tentar :v
Reply
#4

Й tudo questгo de estudo e prбtica.Como o amigo acima disse,comece por coisas bбsicas e tente entender o que o
estб por trбs do sistema,existe diversos links aqui no fуrum e que pode ajudar vocк.
Este tutorial pode ser de grande valia: https://sampforum.blast.hk/showthread.php?pid=2249016#pid2249016
Aqui й um pack de tutoriais: https://sampforum.blast.hk/showthread.php?tid=497801
Aqui tambйm vai te ajudar e muito: https://sampwiki.blast.hk/
Lembre-se, nunca queira dar um salto maior que sua perna,caso contrбrio vocк ira se frustrar e ira desistir,caso precise de ajuda sempre estaremos aqui para ajudar vocк,em fim bons estudos
Reply
#5

Exatamente! Eu comecei com um script do Pawno, hoje estou quase terminando um GM de roleplay TODO codado por mim e com coisas que fui eu que inventei. Isso й MUITO gratificante ainda mais por saber que comecei sem saber nada e hoje estou terminando um gamemode com um conhecimento "significativo" sobre a linguagem.
Reply
#6

Quote:
Originally Posted by rolex
Посмотреть сообщение
Exatamente! Eu comecei com um script do Pawno, hoje estou quase terminando um GM de roleplay TODO codado por mim e com coisas que fui eu que inventei. Isso й MUITO gratificante ainda mais por saber que comecei sem saber nada e hoje estou terminando um gamemode com um conhecimento "significativo" sobre a linguagem.
Eu fiz oque vocк falou , mas eu queria tipo adicionar um limite de criaзгo por jogador e um tempo pra ele nгo ficar spamando. Poderia me ajudar?.
Reply
#7

Quote:
Originally Posted by Cauezin
Посмотреть сообщение
Eu fiz oque vocк falou , mas eu queria tipo adicionar um limite de criaзгo por jogador e um tempo pra ele nгo ficar spamando. Poderia me ajudar?.
Seja mais especifico, limite de criaзгo tipo ?
Reply
#8

Quote:
Originally Posted by rolex
Посмотреть сообщение
Seja mais especifico, limite de criaзгo tipo ?
Exato , um limite de criaзгo , um exemplo , dei /hydra e criei um hydra , mas se eu der /hydra dnvo quero que fale que jб tenho uma hydra spawnada , se for mto dificil dxa kskkss
Reply
#9

Nгo й difнcil estudar por si, basta saber o que estudar.

Tive a ideia de dar aula uma vez, mas acabei deixando de lado, nгo parece ser lucrativo.

Tem uma wiki inteira com documentaзгo de todas funзхes, se oriente por ela.

Estude todos esses conteъdos, que montei para o curso bбsico naquele tempo.

Reply
#10

Primeiro vocк tem que usar a lуgica de programaзгo, como eu falei!

na lуgica
PHP код:
cria verificador de hydra spawnada;
Digito comando()
{
    
Verifica se jб spawnei a hydrase simfinaliza o comando avisando que ja spawni a hydra;
        
// se nгo, inicia a criaзгo
    
Pega a minha posiзгo e salva;
    
cria veнculo na posiзгo que eu salvei;
    
manda mensagem avisando que a hydra foi spawnada;
    
liga o verificador de hydra;
    
    
finaliza comando;

No pawn
PHP код:
new bool:HydraSpawned[MAX_PLAYERS] = false// cria o verificador jб deixando ele como falso (nгo estб spawnada)
CMD:hydra(playerid// comando
{
    new 
Float:POS[3]; // variбvel que vai salvar a posiзгo para ser usada depois
    
if(HydraSpawned[playerid] == true) return SendClientMessage(playerid, -1"* Vocк jб spawnou a hydra!"); // verifica se a hydra jб foi spawnada
    
GetPlayerPos(playeridPOS[0], POS[1], POS[2]); // Pega a posiзгo do jogador que usou o comando e salva na variбvel POS[]
    
CreateVehicle(520POS[0], POS[1], POS[2], 0.00000); // Cria a Hydra na localizaзгo do player, salva na variбvel POS[]
    
SendClientMessage(playerid, -1"* Vocк spawnou a hydra!"); // Manda mensagem pro jogador que a hydra foi criada
    
HydraSpawned[playerid] = true// ativa o verificador da Hydra, para que o jogador nгo possa usar o comando denovo
    
    
return 1// finaliza o comando

Reply
#11

Quote:
Originally Posted by rolex
Посмотреть сообщение
Primeiro vocк tem que usar a lуgica de programaзгo, como eu falei!

na lуgica
PHP код:
cria verificador de hydra spawnada;
Digito comando()
{
    
Verifica se jб spawnei a hydrase simfinaliza o comando avisando que ja spawni a hydra;
        
// se nгo, inicia a criaзгo
    
Pega a minha posiзгo e salva;
    
cria veнculo na posiзгo que eu salvei;
    
manda mensagem avisando que a hydra foi spawnada;
    
liga o verificador de hydra;
    
    
finaliza comando;

No pawn
PHP код:
new bool:HydraSpawned[MAX_PLAYERS]; // verificador
CMD:hydra(playerid// comando
{
    new 
Float:POS[3]; // variбvel que vai salvar a posiзгo para ser usada depois
    
if(HydraSpawned[playerid]) return SendClientMessage(playerid, -1"* Vocк jб spawnou a hydra!"); // verifica se a hydra jб foi spawnada
    
GetPlayerPos(playeridPOS[0], POS[1], POS[2]); // Pega a posiзгo do jogador que usou o comando e salva na variбvel POS[]
    
CreateVehicle(520POS[0], POS[1], POS[2], 0.00000); // Cria a Hydra na localizaзгo do player, salva na variбvel POS[]
    
SendClientMessage(playerid, -1"* Vocк spawnou a hydra!"); // Manda mensagem pro jogador que a hydra foi criada
    
HydraSpawned[playerid] = true// ativa o verificador da Hydra, para que o jogador nгo possa usar o comando denovo
    
    
return 1// finaliza o comando


Obrigado , vou estudar todas essas linhas de cуdigos , mas eu acho que segui a linha de pensamento certa



Cуdigo que eu tinha feito


PHP код:
public OnPlayerCommandText(playeridcmdtext[])
{
    if (
strcmp("/hydra"cmdtexttrue) == 0)
    {
    new 
Hydra;
    new 
Float:XFloat:YFloat:ZFloat:A;
    
GetPlayerPos(playeridXYZ);
    
GetPlayerFacingAngle(playeridA);
    
Hydra CreateVehicle(520XYZA, -1, -160);
    
PutPlayerInVehicle(playeridHydra0);
    
SendClientMessage(playeridVerde,"[RPG]Veiculo criado com sucesso.");
    return 
1;
    }
    return 
0;

Reply
#12

Sim, уtimo, tu tem uma lуgica boa! Mas esse teu comando nгo tem o verificador, entгo o player vai poder usar quantas vezes quiser!

Outra coisa muito importante, й deixar o cуdigo "bonito" esteticamente falando.. deixar ele bem fбcil de se "ler" entende?

PHP код:
public OnPlayerCommandText(playeridcmdtext[])
{
    if (
strcmp("/hydra"cmdtexttrue) == 0)
    {
        new 
HydraFloat:Pos[4];
        
GetPlayerPos(playeridPos[0], Pos[1], Pos[2]);
        
GetPlayerFacingAngle(playeridPos[3]);
        
Hydra CreateVehicle(520Pos[0], Pos[1], Pos[2], Pos[3], -1, -160);
        
PutPlayerInVehicle(playeridHydra0);
        
SendClientMessage(playeridVerde,"[RPG]Veiculo criado com sucesso.");
        return 
1;
    }
    return 
0;

outra coisa, baixa o ZCMD e coloca nos includes do servidor, vai facilitar tua vida demais!


COMANDO COMUM:
PHP код:
    if (strcmp("/hydra"cmdtexttrue) == 0)
    {
        
CУDIGO
    

COMANDO ZCMD:
PHP код:
    CMD:hydra(playeridparams[])
    {
        
CУDIGO
    

Reply
#13

Quote:
Originally Posted by rolex
Посмотреть сообщение
Sim, уtimo, tu tem uma lуgica boa! Mas esse teu comando nгo tem o verificador, entгo o player vai poder usar quantas vezes quiser!

Outra coisa muito importante, й deixar o cуdigo "bonito" esteticamente falando.. deixar ele bem fбcil de se "ler" entende?

PHP код:
public OnPlayerCommandText(playeridcmdtext[])
{
    if (
strcmp("/hydra"cmdtexttrue) == 0)
    {
        new 
HydraFloat:Pos[4];
        
GetPlayerPos(playeridPos[0], Pos[1], Pos[2]);
        
GetPlayerFacingAngle(playeridPos[3]);
        
Hydra CreateVehicle(520Pos[0], Pos[1], Pos[2], Pos[3], -1, -160);
        
PutPlayerInVehicle(playeridHydra0);
        
SendClientMessage(playeridVerde,"[RPG]Veiculo criado com sucesso.");
        return 
1;
    }
    return 
0;

outra coisa, baixa o ZCMD e coloca nos includes do servidor, vai facilitar tua vida demais!


COMANDO COMUM:
PHP код:
    if (strcmp("/hydra"cmdtexttrue) == 0)
    {
        
CУDIGO
    

COMANDO ZCMD:
PHP код:
    CMD:hydra(playeridparams[])
    {
        
CУDIGO
    

Aaata , й por isso nгo estava funcionando direito o cуdigo que vocк passou , agora esta dando certo <3
Reply
#14

Assim ficou o meu cуdigo final:

PHP код:
#include <a_samp>
#include <zcmd>
#define Verde 0x00FF40AA
#define Vermelho 0xFF0000AA 
PHP код:
CMD:hydra(playerid)
{
    new 
Float:POS[4];
    if(
HydraSpawned[playerid]) return SendClientMessage(playeridVermelho"[]Vocк jб spawnou a hydra!");
    
GetPlayerPos(playeridPOS[0], POS[1], POS[2]);
    
Hydra CreateVehicle(520POS[0], POS[1], POS[2], POS[3], -1, -160);
    
SendClientMessage(playeridVerde"[]Vocк spawnou a hydra!");
    
PutPlayerInVehicle(playeridHydra0);
    
HydraSpawned[playerid] = true;
    return 
1;

PHP код:
public OnPlayerExitVehicle(playeridvehicleid)
{
    
Hydra GetPlayerVehicleID(playerid);
    
DestroyVehicle(Hydra);
    
HydraSpawned[playerid] = false;
    return 
1;

PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
Hydra GetPlayerVehicleID(playerid);
    
DestroyVehicle(Hydra);
    
HydraSpawned[playerid] = false;
    return 
1;

Botei em FS

Poderia me passar outras coisas pra mim treinar igual essa? Agora to empolgado kkkk
Reply
#15

Quote:
Originally Posted by Cauezin
Посмотреть сообщение
Assim ficou o meu cуdigo final:

PHP код:
#include <a_samp>
#include <zcmd>
#define Verde 0x00FF40AA
#define Vermelho 0xFF0000AA 
PHP код:
CMD:hydra(playerid)
{
    new 
Float:POS[4];
    if(
HydraSpawned[playerid]) return SendClientMessage(playeridVermelho"[]Vocк jб spawnou a hydra!");
    
GetPlayerPos(playeridPOS[0], POS[1], POS[2]);
    
Hydra CreateVehicle(520POS[0], POS[1], POS[2], POS[3], -1, -160);
    
SendClientMessage(playeridVerde"[]Vocк spawnou a hydra!");
    
PutPlayerInVehicle(playeridHydra0);
    
HydraSpawned[playerid] = true;
    return 
1;

PHP код:
public OnPlayerExitVehicle(playeridvehicleid)
{
    
Hydra GetPlayerVehicleID(playerid);
    
DestroyVehicle(Hydra);
    
HydraSpawned[playerid] = false;
    return 
1;

Poderia me passar outras coisas pra mim treinar igual essa? Agora to empolgado kkkk
Nгo implementou a verdadeira lуgica no cуdigo.

Definiu a variбvel POS no topo sem necessidade, sendo que sу usava abaixo da verificaзгo se jб spawnou o hydra.
Nгo verificou em OnPlayerExitVehicle se o veнculo que ele saiu era um Hydra e se era dele.

Se vocк nгo estudar por si a lуgica de programaзгo, vais ficar com lуgica de programador de GF (o que nгo й boa coisa).
Reply
#16

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
Nгo implementou a verdadeira lуgica no cуdigo.

Definiu a variбvel POS no topo sem necessidade, sendo que sу usava abaixo da verificaзгo se jб spawnou o hydra.
Nгo verificou em OnPlayerExitVehicle se o veнculo que ele saiu era um Hydra e se era dele.

Se vocк nгo estudar por si a lуgica de programaзгo, vais ficar com lуgica de programador de GF (o que nгo й boa coisa).
1°Mas como a Hydra iria spawnar sem as coords?

2°"Nгo verificou em OnPlayerExitVehicle se o veнculo que ele saiu era um Hydra e se era dele." Nгo entendi , faz um exemplo pra mim tentar entender .-
Reply
#17

Quote:
Originally Posted by Cauezin
Посмотреть сообщение
1°Mas como a Hydra iria spawnar sem as coords?
Recapitula seu comando.

PHP код:
//Declara a variбvel
new Float:POS[4];
//Caso jб houver spawnado o cуdigo irб retornar essa mensagem e nada abaixo serб executado
if(HydraSpawned[playerid]) return SendClientMessage(playeridVermelho"[]Vocк jб spawnou a hydra!");
//Pega a posiзгo e salva na variбvel
GetPlayerPos(playeridPOS[0], POS[1], POS[2]); 
Vocк sу pega a posiзгo se o jogador nгo tiver spawnado, entгo a sua variбvel deveria estar declarada abaixo da condiзгo if.

Quote:
Originally Posted by Cauezin
Посмотреть сообщение
2°"Nгo verificou em OnPlayerExitVehicle se o veнculo que ele saiu era um Hydra e se era dele." Nгo entendi , faz um exemplo pra mim tentar entender .-
Toda vez que um jogador sai de algum veнculo, OnPlayerExitVehicle й chamado, entгo qualquer veнculo que ele entrar e sair vocк vai deletar o carro dele, independente de ser um Hydra ou nгo.

O que vocк deveria fazer й criar uma variбvel global para salvar o id do veнculo que ele criou. Assim em OnPlayerExitVehicle poderia verificar se ele jб criou um Hydra e se o valor da variбvel 'vehicleid' dessa callback (public) й o mesmo valor que a variбvel utilizada para armazenar o id do Hydra.
Reply
#18

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
Recapitula seu comando.

PHP код:
//Declara a variбvel
new Float:POS[4];
//Caso jб houver spawnado o cуdigo irб retornar essa mensagem e nada abaixo serб executado
if(HydraSpawned[playerid]) return SendClientMessage(playeridVermelho"[]Vocк jб spawnou a hydra!");
//Pega a posiзгo e salva na variбvel
GetPlayerPos(playeridPOS[0], POS[1], POS[2]); 
Vocк sу pega a posiзгo se o jogador nгo tiver spawnado, entгo a sua variбvel deveria estar declarada abaixo da condiзгo if.



Toda vez que um jogador sai de algum veнculo, OnPlayerExitVehicle й chamado, entгo qualquer veнculo que ele entrar e sair vocк vai deletar o carro dele, independente de ser um Hydra ou nгo.

O que vocк deveria fazer й criar uma variбvel global para salvar o id do veнculo que ele criou. Assim em OnPlayerExitVehicle poderia verificar se ele jб criou um Hydra e se o valor da variбvel 'vehicleid' dessa callback (public) й o mesmo valor que a variбvel utilizada para armazenar o id do Hydra.
Agora funcionou , pelos meus teste sу desaparece se for um Hydra agora!

PHP код:
// FS = Hydra
#include <a_samp>
#include <zcmd>
#define FILTERSCRIPT
#define Verde 0x00FF40AA
#define Vermelho 0xFF0000AA
#if defined FILTERSCRIPT
new Hydra;
new 
bool:HydraSpawned[MAX_PLAYERS];
new 
HydraExit[MAX_PLAYERS];
public 
OnFilterScriptInit()
{
    print(
"|Spawn de Hydra|");
    return 
1;
}
public 
OnFilterScriptExit()
{
    return 
1;
}
CMD:hydra(playerid)
{
    if(
HydraSpawned[playerid]) return SendClientMessage(playeridVermelho"[]Vocк jб spawnou a hydra!");
    new 
Float:POS[4];
    
GetPlayerPos(playeridPOS[0], POS[1], POS[2]);
    
Hydra CreateVehicle(520POS[0], POS[1], POS[2], POS[3], -1, -160);
    
SendClientMessage(playeridVerde"[]Vocк spawnou a hydra!");
    
PutPlayerInVehicle(playeridHydra0);
    
HydraSpawned[playerid] = true;
    return 
1;
}
public 
OnPlayerExitVehicle(playeridvehicleid)
{
    
format(HydraExitsizeof(HydraExit),"",Hydra);
    
DestroyVehicle(Hydra);
    
HydraSpawned[playerid] = false;
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    
Hydra GetPlayerVehicleID(playerid);
    
DestroyVehicle(Hydra);
    
HydraSpawned[playerid] = false;
    return 
1;
}
#endif 
Reply
#19

Programador de GF Bruno13? Humildгo vocк ein ?!

Ele pediu um exemplo e dei um exemplo. Agora se vocк tem o tempo disponнvel pra implementar a gamemode dele, fique a vontade! Ajuda sempre й bem vinda! Mas nгo venha desmerecer ou julgar os outros, principalmente por motivo torpe.

Poucos sгo, os que olham para o lado para ajudar ao prуximo.

Mas como eu jб tinha te dito Cauк, estude, se interesse e vб criando e evoluindo, independente do que te falarem, o importante й aprender sempre! Boa sorte vйio!
Reply
#20

Quote:
Originally Posted by rolex
Посмотреть сообщение
Programador de GF Bruno13? Humildгo vocк ein ?!

Ele pediu um exemplo e dei um exemplo. Agora se vocк tem o tempo disponнvel pra implementar a gamemode dele, fique a vontade! Ajuda sempre й bem vinda! Mas nгo venha desmerecer ou julgar os outros, principalmente por motivo torpe.

Poucos sгo, os que olham para o lado para ajudar ao prуximo.

Mas como eu jб tinha te dito Cauк, estude, se interesse e vб criando e evoluindo, independente do que te falarem, o importante й aprender sempre! Boa sorte vйio!
Nгo me referi a vocк Rolex, nem a ninguйm desse post. Foi somente um alerta do que ele deve ser como programador e o que pode chegar a ser.

Quote:
Originally Posted by Cauezin
Посмотреть сообщение
Agora funcionou , pelos meus teste sу desaparece se for um Hydra agora!

PHP код:
... 
Nгo, ainda estб incorreto. Pontos:

- Vocк precisa indexar a variбvel Hydra com MAX_PLAYERS, se nгo serб impossнvel ter um controle, uma vez que todos jogadores estarгo dependentes dessa variбvel. Assim que outro jogador usar o comando, o Hydra do primeiro nгo serб deletado e assim sucessivamente.

- Porque formatou a variбvel HydraExit? Variбveis definidas com limite MAX_PLAYERS sгo destinadas a armazenar valores de jogadores usando o нndice dela como o id do jogador. Nгo tem sentido o que vocк fez, pois vocк formatou uma variбvel que em uma estrutura lуgica nгo estб declarada como string.

- Nгo й mais fбcil usar apenas uma variбvel para definir o id do Hydra e ao mesmo tempo verificar se o jogador jб criou um? Isso й lуgica de programaзгo que estou lhe aconselhando a estudar. Segue um exemplo:

PHP код:
/*
 * Variбvel que armazenarб o id do Hydra que o jogador criar.
 * INVALID_VEHICLE_ID caso tenha sido deletado ou nгo criado.
 */
new playerHydra[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
/*
     * Reseta a variбvel de controle do Hydra.
     */
    
playerHydra[playerid] = INVALID_VEHICLE_ID;
    return 
1;
}
CMD:hydra(playerid)
{
    
/*
     * Verifica se a variбvel nгo estб com valor padrгo de INVALID_VEHICLE_ID.
     * Isso significa que o jogador criou algum Hydra.
     */
    
if(playerHydra[playerid] != INVALID_VEHICLE_ID)
        return 
SendClientMessage(playeridVermelho"[]Vocк jб spawnou a hydra!");
    new 
Float:POS[4];
    
GetPlayerPos(playeridPOS[0], POS[1], POS[2]);
    
/*
     * Armazena o id do Hydra que foi criado.
     */
    
playerHydra[playerid] = CreateVehicle(520POS[0], POS[1], POS[2], POS[3], -1, -160);
    
SendClientMessage(playeridVerde"[]Vocк spawnou a hydra!");
    
PutPlayerInVehicle(playeridHydra0);
    return 
1;
}
public 
OnPlayerExitVehicle(playeridvehicleid)
{
    
/*
     * Chama a funзгo para deletar o Hydra do jogador.
     */
    
DestroyPlayerHydra(playerid);
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    
/*
     * Chama a funзгo para deletar o Hydra do jogador.
     */
    
DestroyPlayerHydra(playerid);
    return 
1;
}
/*
 * Crie funзхes para cуdigos que irб utilizar mais que uma vez.
 * Este й um princнpio DRY, aconselho que veja este link sobre:
 * https://pt.wikipedia.org/wiki/Don%27t_re...7.54869389
*/
static DestroyPlayerHydra(playerid)
{
    if(
playerHydra[playerid] != INVALID_VEHICLE_ID)
    {
        
DestroyVehicle(playerHydra[playerid]);
        
playerHydra[playerid] = INVALID_VEHICLE_ID;
    }

Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)