[Tutorial] Usando MoveObject
#1

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.
MoveDynamicObject: Faz a mesma funзгo do MoveObject, porйm, para utilizб-lo necessita do plugin streamer.

Parвmetros:
PHP Code:
(ObjetoIDFloat:XFloat:YFloat:ZFloat:VelFloat:RotXFloat:RotYFloat: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) 
Utilizaзгo:
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(9801977.3000488281703.2999877929712.,50.00.090);//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:
PHP Code:
CMD:AbrirPortao(playerid)//Definimos o nome pro comando, no meu caso, 'AbrirPortao'.
{//abrimos o comando.
       
MoveObject(ObjetoParaMover1977.3000488281703.2999877929715.199999809265:, 2.00270.00.090);
//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:
PHP Code:
if (strcmp("/AbrirPortao"cmdtexttrue10) == 0)
{
       
MoveObject(ObjetoParaMover1977.3000488281703.2999877929715.199999809265:, 2.00270.00.090);
       
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 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(ObjetoParaMover1977.3000488281703.2999877929712.,50.00.090);
      
SendClientMessage(playerid, -1"{00FF00}Parabйns, Vocк fechou o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}com sucesso!");
      return 
1;
}
//Em strcmp:
if (strcmp("/FecharPortao"cmdtexttrue10) == 0)
{
       
MoveObject(ObjetoParaMover1977.3000488281703.2999877929712.,50.00.090);
       
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:
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(9801977.3000488281703.2999877929712.50.00.090);
//Comando:
CMD:Portao(playerid)
{
    if(
Aberto == 0)//Se o portгo estiver fechado:
    
{
        
MoveObject(ObjetoParaMover1977.3000488281703.2999877929715.1999998092650.75270.00.090);
        
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(ObjetoParaMover1977.3000488281703.2999877929712.50.750.00.090);
        
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:
PHP Code:
//Topo Da GM:
new ObjetoParaMover;
//GameModeInit:
    
ObjetoParaMover CreateObject(9801977.3000488281703.2999877929712.50.00.090);
CMD:Portao(playerid)
{
    
MoveObject(ObjetoParaMover1977.3000488281703.2999877929715.1999998092650.75270.00.090);
    
SendClientMessage(playerid, -1"{00FF00}Parabйns, Vocк abriu o portгo \"{FFFFFF}ObjetoParaMover\" {00FF0}em 5 segundos ele fecharб automaticamente");
    
SetTimer("Fechando"5000false);//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(ObjetoParaMover1977.3000488281703.2999877929712.50.750.00.090);//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, й possivel mostrar como fazer para abrir e fechar apenas usando a tecla [H]?
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(9801977.3000488281703.2999877929712.50.00.090);//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(playerid071977.3000488281703.2999877929712.5)//Se ele estiver em tal lugar(Perto do objeto)
        
{
            if(
Aberto == 1)//Se o portгo estiver aberto ele vai fechar
            
{
                
MoveObject(ObjetoParaMover1977.3000488281703.2999877929712.50.750.00.090);
                
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(ObjetoParaMover1977.3000488281703.2999877929715.1999998092650.75270.00.090);
                
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 - Utilizando MoveDynamicObject?
R:
PHP Code:
//Topo Da GM:
new ObjetoParaMover;
new 
Aberto 0;
//GameModeInit:
    
ObjetoParaMover CreateDynamicObject(9801977.3000488281703.2999877929712.50.00.090);
//Comando:
CMD:AbrirPortao(playerid)
{
    if(
Aberto == 1) return SendClientMessage(playerid, -1"{FF0000}O portгo jб estб aberto!");
    
MoveDynamicObject(ObjetoParaMover1977.3000488281703.2999877929715.1999998092650.75270.00.090);
    
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(ObjetoParaMover1977.3000488281703.2999877929712.50.750.00.090);
    
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 acresentar vou fazendo os edit's no tutorial, me desculpem tambйm se tive alguns erros de portuguкs(EU: acho pawn mais facil que portuguкs).
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.
Obrigado pessoal й isso.
Reply
#2

Parabйns, ajudarб muita gente :*
Reply
#3

Nossa, Parabйns ! Belo Tuto
Reply
#4

Legal o tutorial, Parabйns +REP
Reply
#5

Quote:
Originally Posted by matheusspohr
View Post
PHP Code:
//Na public OnGameModeInit:
      
new ObjetoParaMover;//Criamos um nome para o portгo.
      
ObjetoParaMover CreateObject(9801977.3000488281703.2999877929712.,50.00.090);//Aqui, vamos igualar o portгo ao objeto criado, ja 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) 
PHP Code:
CMD:AbrirPortao(playeridparams[])//Definimos o nome pro comando, no meu caso, 'AbrirPortao'.
{//abrimos o comando.
       
MoveObject(ObjetoParaMover1977.3000488281703.2999877929715.199999809265:, 2.00270.00.090);
//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. 
Estou ciente que isto nгo tem nada haver com o tutorial, mas..
Em OnGameModeInit vocк poderia ter criado a variavel deste jeito, para economizar linhas.
PHP Code:
New ObjetoParaMover CreateObject(..) 
E no comando para abrir portгo a utlizaзгo do params й inъtil, pois ela nгo estб sendo utilizada.

Sobre o tutorial em si, й uma funзгo simples mas que muitos novatos tem dъvidas, este tutorial deve ajudar muito os novatos. Parabйns pelo Tutorial.

@EDIT - Para fazer o comando abrir o portгo a variбvel deve ser global, entгo criar em OnGameModeInit estaria errado para fazer com que ele mova.
Reply
#6

Poderia complementar ensinando a fazer a funзгo para mover com keys...
Bom trabalho.
Reply
#7

Quote:
Originally Posted by Stroon
View Post
Poderia complementar ensinando a fazer a funзгo para mover com keys...
Bom trabalho.
Farei um edit do Tуpico a seu pedido, ensinando a utilizar keys, aguarde um momento.

Abraзos.
Reply
#8

Tutorial bacana, mais seria bom tambйm explicar com o uso do plugin streamer.

Do mais, bom trabalho.

@Edit Sу uma coisa, strcmp nгo e processador de comandos, й um comparador de strings..
Reply
#9

Quote:
Originally Posted by Cleyson
View Post
Tutorial bacana, mais seria bom tambйm explicar com o uso do plugin streamer.

Do mais, bom trabalho.

@Edit Sу uma coisa, strcmp nгo e processador de comandos, й um comparador de strings..
Jб estou trabalhando em atualizaзхes, utilizarei sua crнtica positiva e colocarei tambйm a utilizaзгo do streamer.

Obrigado.
Reply
#10

Gostei do tutorial , sу uma dъvida , faz tempo que funciona esse negocio do player ser "carregado" sobre o objeto ? й que eu me lembro antes que se um objeto fosse em linha reta , o player em cima / veiculo ficava parado e o objeto ia embora , oque obrigava colocar uma "parede" atras do player/veiculo para empurra-lo , estou certo ou eu viajei ?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)