MoveObject
Fala galera, venha nesse meu primeiro tutorial, explique tudo o que sei sobre a função 'MoveObject' e 'MoveDynamicObject', enfim, chega de papo furado e vamos lá.
Fala galera, venha nesse meu primeiro tutorial, explique tudo o que sei sobre a função 'MoveObject' e 'MoveDynamicObject', enfim, chega de papo furado e vamos lá.
MoveObject: Função utilizada para mover um objeto para uma nova posição em uma determinada velocidade(OBS: Caso exista um jogador ou veículo em cima do objeto, o mesmo será transportado com o objeto em uma espécie de 'surf'). Essa função foi adicionada e funciona somente nas versões do SA:MP 0.3d ou mais recentes.
MoveDynamicObject: Faz a mesma função do MoveObject, porém, para utilizá-lo necessita do plugin streamer.
Parâmetros:
Código PHP:MoveDynamicObject: Faz a mesma função do MoveObject, porém, para utilizá-lo necessita do plugin streamer.
Parâmetros:
- Código:
(ObjetoID, Float:X, Float:Y, Float:Z, Float:Vel, Float:RotX, Float:RotY, Float:RotZ)
Código PHP:
- Código:
ObjetoID// ID do objeto a ser movido
Código PHP:
- Código:
Float:X//Coordenada 'x' para o novo local do objeto
Código PHP:
- Código:
Float:Y//Coordenada 'y' para o novo local do objeto
Código PHP:
- Código:
Float:Z//Coordenada 'z' para o novo local do objeto
Código PHP:
- Código:
Float:Vel//Velocidade com que o objeto vai ser movido
Código PHP:
- Código:
Float:RotX//Rotaзгo 'x' para o novo local do objeto(OPCIONAL)
Código PHP:
- Código:
Float:RotY//Rotaзгo 'y' para o novo local do objeto(OPCIONAL)
Código PHP:
- Código:
Float:RotZ//Rotaзгo 'z' para o novo local do objeto(OPCIONAL)
Utilização:
Bom, agora como exemplo vou fazer uma porta com comando, para isso vamos precisar de um local e uma porta.
- Local
- Portгo
Agora vamos ao local, e colocamos o portгo na posiзгo desejada.
- Portão + Local
Vamos fazer uma parte do código agora:
Código PHP:Bom, agora como exemplo vou fazer uma porta com comando, para isso vamos precisar de um local e uma porta.
- Local
- Portгo
Agora vamos ao local, e colocamos o portгo na posiзгo desejada.
- Portão + Local
Vamos fazer uma parte do código agora:
- Código:
//Primeiramente no inicio da GM:
new ObjetoParaMover;//Criamos um nome para o portгo.
//Na public OnGameModeInit:
ObjetoParaMover = CreateObject(980, 1977.3000488281, 703.29998779297, 12.,5, 0.0, 0.0, 90);//Aqui, vamos igualar o portгo ao objeto criado, jб com seu ID e coordenadas.
//OBS: O objeto quando criado, tem que estar no seu ponto inicial, como no meu caso o portгo, deve estar fechado(posiзгo inicial)
Agora, voltemos para o editor, posicione o objeto(no meu caso, um portгo) da forma que achar melhor.
- Posicionado
Agora, vamos montar o comando:
Código PHP:- Posicionado
Agora, vamos montar o comando:
- Código:
CMD:AbrirPortao(playerid)//Definimos o nome pro comando, no meu caso, 'AbrirPortao'.
{//abrimos o comando.
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 15.199999809265:, 2.00, 270.0, 0.0, 90);
//Usamos a funзгo 'MoveObject', em seguida adicionando o nome do objeto(portгo) e suas novas coordenadas com a velocidade.
SendClientMessage(playerid, -1, "{00FF00}Parabйns, Vocк abriu o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}com sucesso!");
//Enviei uma mensagem para o player que usou o comandos, apenas para informa-lo que o portгo foi aberto(portгo ou objeto).
return 1;//retornamos
}//e fechamos o comando.
Pronto, o comando de abrir o portáo(ou mover o objeto) está pronto.
Perguntas:
1 - Matheus, você fez o comando em ZCMD й possível eu fazer o comando com algum outro processador de comandos?
R: Sim, fiz em ZCMD pois acho ser um bom processador de comandos e acho ele mais fácil que alguns. Um outro exemplo seria em strcmp:
Código PHP:Perguntas:
1 - Matheus, você fez o comando em ZCMD й possível eu fazer o comando com algum outro processador de comandos?
R: Sim, fiz em ZCMD pois acho ser um bom processador de comandos e acho ele mais fácil que alguns. Um outro exemplo seria em strcmp:
- Código:
if (strcmp("/AbrirPortao", cmdtext, true, 10) == 0)
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 15.199999809265:, 2.00, 270.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, Vocк abriu o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}com sucesso!");
return 1;
}
2 - Matheus, é possível eu usar um comando que o objeto volte para o lugar de origem depois de um determinado tempo?
R: Sim, é possível, sу tem que utilizar Settimer .
3 - Matheus, é possível eu fazer com que o jogador possa usar o comando pra mover o objeto somente quando está em um determinado local?
R: Sim, utilize a função IsPlayerInRangeOfPoint como forma de verificação(If).
4 - Matheus, é possível eu utilizar apenas uma tecla para movimentar o objeto, ida e volta?
R: Sim, utilizando a public OnPlayerKeyStateChange e as Keys , assim já dá pra fazer, mas, eu recomendo que utilize também a função IsPlayerInRangeOfPointpara nгo ficar movendo o objeto direto, sem ao menos o jogador estar perto do objeto.
5 - Ah Matheus, no seu exemplo, você fez um comando para abrir o portal, e para fechar como faz?
R: Simples amigo, apenas mude as coordenadas do 'MoveObject' para as coordenadas de inicio.
Exemplo:
Código PHP:R: Sim, é possível, sу tem que utilizar Settimer .
3 - Matheus, é possível eu fazer com que o jogador possa usar o comando pra mover o objeto somente quando está em um determinado local?
R: Sim, utilize a função IsPlayerInRangeOfPoint como forma de verificação(If).
4 - Matheus, é possível eu utilizar apenas uma tecla para movimentar o objeto, ida e volta?
R: Sim, utilizando a public OnPlayerKeyStateChange e as Keys , assim já dá pra fazer, mas, eu recomendo que utilize também a função IsPlayerInRangeOfPointpara nгo ficar movendo o objeto direto, sem ao menos o jogador estar perto do objeto.
5 - Ah Matheus, no seu exemplo, você fez um comando para abrir o portal, e para fechar como faz?
R: Simples amigo, apenas mude as coordenadas do 'MoveObject' para as coordenadas de inicio.
Exemplo:
- Código:
//Em ZCMD:
CMD:FecharPortao(playerid)
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 12.,5, 0.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, Vocк fechou o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}com sucesso!");
return 1;
}
//Em strcmp:
if (strcmp("/FecharPortao", cmdtext, true, 10) == 0)
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 12.,5, 0.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, Vocк fechou o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}com sucesso!");
return 1;
}
6 - Matheus, da de fazer o objeto se movimentar(ida e volta) apenas com 1 comando?
R: Sim, segue o exemplo:
Código PHP:R: Sim, segue o exemplo:
- Código:
//Topo Da GM:
new ObjetoParaMover;
new Aberto = 0;//Utilizaremos para verificar se o portгo estб aberto ou nгo, definido a 0 quer dizer que nгo.
//GameModeInit:
ObjetoParaMover = CreateObject(980, 1977.3000488281, 703.29998779297, 12.5, 0.0, 0.0, 90);
//Comando:
CMD:Portao(playerid)
{
if(Aberto == 0)//Se o portгo estiver fechado:
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 15.199999809265, 0.75, 270.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, Vocк abriu o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}com sucesso!");
Aberto = 1;
}
else//Se o portгo estiver aberto:
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 12.5, 0.75, 0.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, vocк fechou o portгo \"{FFFFFF}ObjetoParaMover\" {00FF00}com sucesso!");
}
return 1;
}
7 - Matheus, faz um exemplo aн com SetTimer Please?
R: Sem problemas:
Código PHP:R: Sem problemas:
- Código:
//Topo Da GM:
new ObjetoParaMover;
//GameModeInit:
ObjetoParaMover = CreateObject(980, 1977.3000488281, 703.29998779297, 12.5, 0.0, 0.0, 90);
CMD:Portao(playerid)
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 15.199999809265, 0.75, 270.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, Vocк abriu o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}em 5 segundos ele fecharб automaticamente");
SetTimer("Fechando", 5000, false);//Definimos o SetTimer, com nome da funзгo, tempo e se й preciso ficar repetindo
return 1;
}
forward Fechando();//criamos a public
public Fechando()//agora vamos utilizar a public criada acima
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 12.5, 0.75, 0.0, 0.0, 90);//move o objeto para a posicгo inicial
SendClientMessage(playerid, -1, "{00FF00}Jб se passou 05 segundos e o portгo fechou sozinho.");//manda uma mensagem ao player informando que o portгo estб sendo fechado.
return 1;
}
8 - Matheus, é possível mostrar como fazer para abrir e fechar apenas usando a tecla [H]?
R:
Código PHP:R:
- Código:
//Topo Da GM:
new ObjetoParaMover;//Criei uma variavel para armazenar os dados do portгo
new Aberto = 0;//Criei essa variavel para saber quando o portгo estб aberto ou fechado(Fechado = 0, Aberto = 1)
//GameModeInit:
ObjetoParaMover = CreateObject(980, 1977.3000488281, 703.29998779297, 12.5, 0.0, 0.0, 90);//Usei a variavel e igualei ela ao objeto, jб criando o objeto.
//Na public OnPlayerKeyStateChange
if ((newkeys & KEY_CTRL_BACK) && !(oldkeys & KEY_CTRL_BACK))//Definimos a tecla desejada
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)//Se o player for motorista de um veiculo
{
if(IsPlayerInRangeOfPoint(playerid, 07, 1977.3000488281, 703.29998779297, 12.5)//Se ele estiver em tal lugar(Perto do objeto)
{
if(Aberto == 1)//Se o portгo estiver aberto ele vai fechar
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 12.5, 0.75, 0.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, vocк fechou o portгo \"{FFFFFF}ObjetoParaMover\" {00FF00}apenas apertando a tecla [H].");
Aberto = 0;
}
else//Se estiver fechado, ele vai abrir
{
MoveObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 15.199999809265, 0.75, 270.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, Vocк abriu o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}apenas apertando a tecla [H]!");
Aberto = 1;
}
}
else
return 0;
}
else
return 0;
}
9 - Usando MoveDynamicObject?
R:
Código PHP:R:
- Código:
//Topo Da GM:
new ObjetoParaMover;
new Aberto = 0;
//GameModeInit:
ObjetoParaMover = CreateDynamicObject(980, 1977.3000488281, 703.29998779297, 12.5, 0.0, 0.0, 90);
//Comando:
CMD:AbrirPortao(playerid)
{
if(Aberto == 1) return SendClientMessage(playerid, -1, "{FF0000}O portгo jб estб aberto!");
MoveDynamicObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 15.199999809265, 0.75, 270.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, Vocк abriu o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}com sucesso!");
Aberto = 1;
return 1;
}
CMD:FecharPortao(playerid)
{
if(Aberto == 0) return SendClientMessage(playerid, -1, "{FF0000}O portгo jб estб fechado");
MoveDynamicObject(ObjetoParaMover, 1977.3000488281, 703.29998779297, 12.5, 0.75, 0.0, 0.0, 90);
SendClientMessage(playerid, -1, "{00FF00}Parabйns, vocк fechou o portгo \"{FFFFFF}ObjetoParaMover\" {00FF00}com sucesso!");
Aberto = 0;
return 1;
}
//Resumindo, apenas no lugar de usar CreateObject, usar CreateDynamicObject e na hora de usar MoveObject usar MoveDynamicObject, lembrando que utilizando Dynamic, o objeto й carregado apenas quando tiver alguйm por perto, evitando um tanto de Lag.
Bom pessoal, eu acho que é isso, se eu tiver mais alguma coisa a acrescentar vou fazer os edit's no tutorial, me desculpem também se tive alguns erros de português(EU: acho peão mais fácil que português).
Lembrando, é meu primeiro tutorial, entгo tenho certeza que vai ter algo que vou ter que melhorar ainda.
Se houver alguma dúvida, coloque aн em baixo, que assim que possível estarei respondendo.
Lembrando, é meu primeiro tutorial, entгo tenho certeza que vai ter algo que vou ter que melhorar ainda.
Se houver alguma dúvida, coloque aн em baixo, que assim que possível estarei respondendo.
Creditos: Matheusspohr