Olá, é meu primeiro tutorial entгo peзo que tenha compreensгo e apontem qualquer falha ou explicaзгo que possa ter ficado difнcil de entender.
Longe de ser um assunto complexo, mas é algo que pode auxiliar muitos novos a alçar vфos maiores com base no que o tutorial oferece.
Esse sistema de interação com objetos pode servir muito bem para servidores RPG, de sobrevivência ou qualquer outro servidor que queira adicionar um toque a mais para que os jogadores tenham uma maior imersão.
Alguns servidores possuem sistema de fome e sede e utilizam comandos para que o player possa experimentar essas necessidades, como /comer, /beber e etc.
Uma forma mais imersiva de se utilizar esses sistemas pode ser alcançada colocando objetos que podem ser consumidos pelo jogador diretamente em seus mгos, e entгo usando as animaзхes para trazer seus efeitos.
Longe de ser um assunto complexo, mas é algo que pode auxiliar muitos novos a alçar vфos maiores com base no que o tutorial oferece.
Esse sistema de interação com objetos pode servir muito bem para servidores RPG, de sobrevivência ou qualquer outro servidor que queira adicionar um toque a mais para que os jogadores tenham uma maior imersão.
Alguns servidores possuem sistema de fome e sede e utilizam comandos para que o player possa experimentar essas necessidades, como /comer, /beber e etc.
Uma forma mais imersiva de se utilizar esses sistemas pode ser alcançada colocando objetos que podem ser consumidos pelo jogador diretamente em seus mгos, e entгo usando as animaзхes para trazer seus efeitos.
Para isso, vamos utilizar principalmente o callback OnPlayerKeyStateChange , como as funções SetPlayerAttachedObject e ApplyAnimation .
Secundárias: EditAttachedObject , OnPlayerEditAttachedObject e OnPlayerDisconnect .
IMPORTANTE: Esse tutorial possui comandos utilizando o include I-ZCMD .
Secundárias: EditAttachedObject , OnPlayerEditAttachedObject e OnPlayerDisconnect .
IMPORTANTE: Esse tutorial possui comandos utilizando o include I-ZCMD .
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=- ESCOLHENDO
SEU OBJETO
Isso fica aberto à sua criatividade.
Eu utilizo o site Prineside para pegar os IDs dos objetos que gostariam de ter no servidor para interação. Como exemplo, vamos utilizar o copo de café. ID 19835.
COLOCANDO O OBJETO NAS MÁOS DO PLAYER
O momento em que o objeto será colocado nas mãos do jogador também depende do seu modo de jogo. Se você possui um sistema de inventório, por exemplo, você pode fazer o objeto aparecer somente caso o jogador possua tal item.
Como exemplo, vamos utilizar um comando para fazer o copo de café aparecer nas mãos do nosso player.
Primeiro, vamos criar três variáveis.
PHP como:SEU OBJETO
Isso fica aberto à sua criatividade.
Eu utilizo o site Prineside para pegar os IDs dos objetos que gostariam de ter no servidor para interação. Como exemplo, vamos utilizar o copo de café. ID 19835.
COLOCANDO O OBJETO NAS MÁOS DO PLAYER
O momento em que o objeto será colocado nas mãos do jogador também depende do seu modo de jogo. Se você possui um sistema de inventório, por exemplo, você pode fazer o objeto aparecer somente caso o jogador possua tal item.
Como exemplo, vamos utilizar um comando para fazer o copo de café aparecer nas mãos do nosso player.
Primeiro, vamos criar três variáveis.
- Código:
new Cafe[MAX_PLAYERS], Bebendo[MAX_PLAYERS], Consumindo[MAX_PLAYERS];
IMPORTANTE: NГO SE ESQUEЗA DE LIMPAR ESSAS VARIБVEIS QUANDO O PLAYER DESCONECTAR!
Motivo: Caso o jogador com ID 2 desconecte com um copo na mão, sua variedade Café, Bebendo e Consumindo ficaria 1. E então, quando um novo jogador com ID 2 se conectar, ele não poderia utilizar o nosso comando para segurar o copo de café .
PHP como:Motivo: Caso o jogador com ID 2 desconecte com um copo na mão, sua variedade Café, Bebendo e Consumindo ficaria 1. E então, quando um novo jogador com ID 2 se conectar, ele não poderia utilizar o nosso comando para segurar o copo de café .
- Código:
public OnPlayerDisconnect(playerid, reason){
Cafe[playerid] = 0;
Consumindo[playerid] = 0;
Bebendo[playerid] = 0;
return 1;
}
No nosso exemplo, o copo de café irá aparecer quando o comando /cafe for executado.
PHP como:- Código:
CMD:cafe(playerid,params[]){
if(Cafe[playerid] == 1) return SendClientMessage(playerid,0xFFFFFFFF,"Vocк jб tem um copo de cafй na mгo!");
if(Consumindo[playerid] == 1) return SendClientMessage(playerid,0xFFFFFFFF,"Vocк jб estб com algo nas mгos!");
Cafe[playerid] = 1;
Consumindo[playerid] = 1;
Bebendo[playerid] = 1;
SendClientMessage(playerid,0xFFFFFFFF,"Agora vocк estб segurando um copo de Cafй Pelй.");
SetPlayerAttachedObject(playerid, 2, 19835, 5, 0.1, 0.07, 0.04, 180.0, 0.0, 0.0, 1.0, 1.0, 1.0);
return 1;
}
Se o player já estiver com um copo de café na mó, a variável Cafe estará com valor 1, e uma mensagem de erro aparecerá. O mesmo acontece caso ele já esteja consumindo outro item.
Caso o jogador não esteja consumindo nada, suas variáveis Cafe, Consumindo e Bebendo terão valor 1, ele receberá uma mensagem informando que está segurando o copo de café na mão, e então terá o objeto colocado em suas mãos com a função SetPlayerAttachedObject.
O número 2 em nossa função se refere ao INDEX(slot) no qual o objeto está salvo. HÁ 10 slots para colocar objetos no player (0-9).
19835 :copyright: o Model ID que escolhemos no site Prineside, o copo de café.
O número 5 se refere ao Bonedo player em que serÁ colocado nosso copo. Bone 5 seria a mгo esquerdo, a razгo para isso й a animaзгo que usaremos em seguida para fazermos o jogador tomar o cafй no copo.
Os outros números são as coordenadas de posicionamento do nosso objeto no osso do jogador em questão. Esse posicionamento foi obtido com a função EditAttachedObject, que pode ser utilizada a partir do momento em que um objeto já está colocado no player.
Um exemplo de comando para ajustar o posicionamento de objetos sérios:
PHP como:Caso o jogador não esteja consumindo nada, suas variáveis Cafe, Consumindo e Bebendo terão valor 1, ele receberá uma mensagem informando que está segurando o copo de café na mão, e então terá o objeto colocado em suas mãos com a função SetPlayerAttachedObject.
O número 2 em nossa função se refere ao INDEX(slot) no qual o objeto está salvo. HÁ 10 slots para colocar objetos no player (0-9).
19835 :copyright: o Model ID que escolhemos no site Prineside, o copo de café.
O número 5 se refere ao Bonedo player em que serÁ colocado nosso copo. Bone 5 seria a mгo esquerdo, a razгo para isso й a animaзгo que usaremos em seguida para fazermos o jogador tomar o cafй no copo.
Os outros números são as coordenadas de posicionamento do nosso objeto no osso do jogador em questão. Esse posicionamento foi obtido com a função EditAttachedObject, que pode ser utilizada a partir do momento em que um objeto já está colocado no player.
Um exemplo de comando para ajustar o posicionamento de objetos sérios:
- Código:
CMD:edit(playerid,params[]){
EditAttachedObject(playerid, 2);
return 1;
}
O número 2 representa o INDEX(slot) do objeto colocado que queremos editar.
Para obter o posicionamento do objeto quando você achar a melhor posição e então colocar as coordenadas no seu script, utilize o código presente nessa página: OnPlayerEditAttachedObject . As coordenadas ficarão disponíveis no painel de controle/server_log.txt do seu servidor.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=- OBJETO EM
MÓOS, E AGORA?
Para o jogador efetivamente comer ou beber, vamos apertar o botão da mira (normalmente botão direito do mouse (RMB)).
Vamos definir o que seria o ato de pressionar o botão.
PHP como:Para obter o posicionamento do objeto quando você achar a melhor posição e então colocar as coordenadas no seu script, utilize o código presente nessa página: OnPlayerEditAttachedObject . As coordenadas ficarão disponíveis no painel de controle/server_log.txt do seu servidor.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=- OBJETO EM
MÓOS, E AGORA?
Para o jogador efetivamente comer ou beber, vamos apertar o botão da mira (normalmente botão direito do mouse (RMB)).
Vamos definir o que seria o ato de pressionar o botão.
- Código:
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
E entгo:
PHP como:- Código:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
if(PRESSED(KEY_HANDBRAKE) && Consumindo[playerid] == 1){
if(Bebendo[playerid] == 1){
ApplyAnimation(playerid, "VENDING", "VEND_Drink2_P", 4.1, 0, 1, 1, 1, 1, 1);
Consumindo[playerid]++;
if(Cafe[playerid] == 1){
if(Consumindo[playerid] >= 7){
switch(random(4)){
case 0:{
SendClientMessage(playerid,0xFFFFFFFF,"Seu copo de Cafй Pelй acabou.");
RemovePlayerAttachedObject(playerid, 2);
Consumindo[playerid] = 0;
Bebendo[playerid] = 0;
Cafe[playerid] = 0;
}
default:{
}
}
}
}
}
}
return 1;
}
Caso nosso player esteja consumindo alguma coisa, pressione o botão direito do mouse, e que ele esteja consumindo seja uma bebida, ele fará uma animação para levar o copo ou garrafa em seu rosto, como se estivesse bebendo, 1 ponto da variável Consumindo será adicionado . Caso essa bebida seja Café e os pontos de consumo iguais ou superiores a 7, ele terá uma chance em 4 de terminar a bebida quando apertar o botão direito do mouse para consumir totalmente.
O que define o botão direito do mouse :copyright: KEY_HANDBRAKE . Você pode escolher uma outra KEY , sem ser o botão de mira, nessa página: Keys .
Caso você esteja fazendo um sanduíche, hambúrguer ou algum objeto de comer, você pode ver outra animação sem ser a "VEND_Drink2_P" nessa página: Animations .
A switch(random(4)) abre 4 possibilidades aleatórias (case 0, 1, 2 e 3. Default: , neste caso, engloba o case 1, 2 e 3. O que significa que há 25% de chance da bebida acabar apуs o jogador bebe 7 vezes ou mais.).
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-
UTILIDADES
Você pode usar esse sistema para fazer o jogador comer, beber, fumar, tomar remédios, doente, se drogar de alguma forma e também dar efeitos para o jogador. Por que o jogador nгo pode recuperar a vida a cada gole que dб em uma garrafa de бgua, ou atй mesmo ficar cada vez mais bкbado a cada gole que dб na cerveja?
O resto fica a carga da sua criatividade.
O que define o botão direito do mouse :copyright: KEY_HANDBRAKE . Você pode escolher uma outra KEY , sem ser o botão de mira, nessa página: Keys .
Caso você esteja fazendo um sanduíche, hambúrguer ou algum objeto de comer, você pode ver outra animação sem ser a "VEND_Drink2_P" nessa página: Animations .
A switch(random(4)) abre 4 possibilidades aleatórias (case 0, 1, 2 e 3. Default: , neste caso, engloba o case 1, 2 e 3. O que significa que há 25% de chance da bebida acabar apуs o jogador bebe 7 vezes ou mais.).
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-
UTILIDADES
Você pode usar esse sistema para fazer o jogador comer, beber, fumar, tomar remédios, doente, se drogar de alguma forma e também dar efeitos para o jogador. Por que o jogador nгo pode recuperar a vida a cada gole que dб em uma garrafa de бgua, ou atй mesmo ficar cada vez mais bкbado a cada gole que dб na cerveja?
O resto fica a carga da sua criatividade.
Muito obrigado a todos que acompanham este tutorial atй o fim.
Aguardo críticas, sugestões ou elogios (se merecer), haha.
Abraços.
Aguardo críticas, sugestões ou elogios (se merecer), haha.
Abraços.