Segurando objetos e interagindo -
cuzido - 03.06.2016
Olб, й meu primeiro tutorial entгo peзo que tenham 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 novatos 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 players tenham uma maior imersгo.
Alguns servidores possuem sistema de fome e sede e utilizam comandos para que o player possa satisfazer essas necessidades, como /comer, /beber e etc.
Uma forma mais imersiva de se utilizar destes sistemas pode ser alcanзada colocando objetos que podem ser consumidos pelo player diretamente em suas mгos, e entгo usando as animaзхes para trazer seus efeitos.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
ESCOLHENDO SEU OBJETO
Isso fica aberto а sua criatividade.
Eu utilizo o site
Prineside para pegar as IDs dos objetos que gostaria 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 player tambйm depende do seu gamemode. Se vocк possui um sistema de inventбrio, por exemplo, vocк pode fazer o objeto aparecer somente caso o player 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 код:
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 player com ID 2 desconecte com um copo na mгo, sua variбvel Cafe, Bebendo e Consumindo ficaria 1. E entгo, quando um novo player com ID 2 conectasse, ele nгo poderia utilizar o nosso comando para segurar o copo de cafй.
PHP код:
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 код:
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гo, 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 player 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 na nossa funзгo se refere ao INDEX(slot) no qual o objeto estб guardado. Hб 10 slots para colocar objetos no player (0-9).
19835 й o Model ID que escolhemos no site Prineside, o copo de cafй.
O nъmero
5 se refere ao
Bone do player em que serб colocado nosso copo. Bone 5 seria a mгo esquerda, a razгo para isso й a animaзгo que usaremos em seguida para fazermos o player tomar o cafй no copo.
Os outros nъmeros sгo as coordenadas de posicionamento do nosso objeto no bone do player 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 posicionamento de objetos seria:
PHP код:
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 player 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 код:
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
E entгo:
PHP код:
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 o que ele estiver consumindo seja uma bebida, ele farб uma animaзгo para levar o copo ou garrafa atй seu rosto, como se estivesse bebendo, 1 ponto da variбvel Consumindo serб adicionado. Caso essa bebida seja Cafй e os pontos de consumo estejam 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 novamente.
O que define o botгo direito do mouse й
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 player beber 7 vezes ou mais.).
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
UTILIDADES
Vocк pode utilizar esse sistema para fazer o player comer, beber, fumar, tomar remйdios, ficar doente, se drogar de alguma forma e tambйm dar efeitos para o player. Por quк o player nгo pode recuperar 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 cargo da sua criatividade.
Muito obrigado a todos que acompanharem este tutorial atй o fim.
Aguardo crнticas, sugestхes ou elogios (se merecer), haha.
Abraзos.
Re: Segurando objetos e interagindo -
Hax0rlib - 04.06.2016
- уtimo tutorial, vai me ajudar muito em alguns projetos que estou desenvolvendo ...
Re: Segurando objetos e interagindo -
Ferno - 06.06.2016
Espectacular, simplesmente fabuloso!