25.07.2015, 00:47
(
Last edited by matheusspohr; 15/12/2015 at 01:22 PM.
)
MoveObject
Fala galera, venho nesse meu primeiro tutorial, explicar tudo oque 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 existir 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.Fala galera, venho nesse meu primeiro tutorial, explicar tudo oque sei sobre a funзгo 'MoveObject' e 'MoveDynamicObject', enfim, chega de papo furado e vamos lб.
MoveDynamicObject: Faz a mesma funзгo do MoveObject, porйm, para utilizб-lo necessita do plugin streamer.
Parвmetros:
PHP Code:
(ObjetoID, Float:X, Float:Y, Float:Z, Float:Vel, Float:RotX, Float:RotY, Float:RotZ)
PHP Code:
ObjetoID// ID do objeto a ser movido
PHP Code:
Float:X//Coordenada 'x' para o novo local do objeto
PHP Code:
Float:Y//Coordenada 'y' para o novo local do objeto
PHP Code:
Float:Z//Coordenada 'z' para o novo local do objeto
PHP Code:
Float:Vel//Velocidade com que o objeto vai ser movido
PHP Code:
Float:RotX//Rotaзгo 'x' para o novo local do objeto(OPCIONAL)
PHP Code:
Float:RotY//Rotaзгo 'y' para o novo local do objeto(OPCIONAL)
PHP Code:
Float:RotZ//Rotaзгo 'z' para o novo local do objeto(OPCIONAL)
Bom, agora como exemplo vou fazer um portгo com comando, para isto vamos precisar de um local e um portгo.
-Local
-Portгo
Agora vamos ao local, e colocamos o portгo na posiзгo desejada.
-Portгo + Local
Vamos fazer uma parte do code agora:
PHP Code:
//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)
-Posicionado
Agora, vamos montar o comando:
PHP Code:
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.
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:
PHP Code:
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;
}
R: Sim, й possнvel, sу tem que utilizar SetTimer.
3 - Matheus, й possнvel eu fazer com que o player 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 IsPlayerInRangeOfPoint para nгo ficar movendo o objeto direto, sem ao menos o player estar perto do objeto.
5 - Ah Matheus, no seu exemplo, vocк fez um comando para abrir o portгo, e para fechar como faz?
R: Simples amigo, apenas mude as coordenadas do 'MoveObject' para as coordenadas de inicio.
Exemplo:
PHP Code:
//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;
}
R: Sim, segue o exemplo:
PHP Code:
//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;
}
R: Sem problemas:
PHP Code:
//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;
}
R:
PHP Code:
//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;
}
R:
PHP Code:
//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.
Lembrando, й meu primeiro tutorial, entгo tenho certeza que vai ter algo que vou ter que melhorar ainda.
Se houver alguma duvida, coloque aн em baixo, que assim que possнvel estarei respondendo.

Tutorial sobre MoveObject & MoveDynamicObject de matheusspohr estб licenciado com uma Licenзa Creative Commons - Atribuiзгo-CompartilhaIgual 4.0 Internacional.
Podem estar disponнveis autorizaзхes adicionais аs concedidas no вmbito desta licenзa em *******/matheusfelipe.buhringspohr.