SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 25/07/2015, 12:47 AM   #1
matheusspohr
Gangsta
 
matheusspohr's Avatar
 
Join Date: Feb 2015
Location: Capanema PR
Posts: 674
Reputation: 33
Default Usando MoveObject/MoveDynamicObject

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.

Last edited by matheusspohr; 15/12/2015 at 01:22 PM.
matheusspohr is offline   Reply With Quote
Old 25/07/2015, 12:53 AM   #2
HaRdiiZin
Gangsta
 
HaRdiiZin's Avatar
 
Join Date: Jan 2015
Location: localhost/HaRdiiZin
Posts: 805
Reputation: 98
Default Re: Usando MoveObject

Parabéns, ajudará muita gente :*
HaRdiiZin is offline   Reply With Quote
Old 25/07/2015, 01:05 AM   #3
ClaudioF
Huge Clucker
 
ClaudioF's Avatar
 
Join Date: Oct 2014
Location: Marília - SP
Posts: 420
Reputation: 23
Default Re: Usando MoveObject

Nossa, Parabéns ! Belo Tuto
ClaudioF is offline   Reply With Quote
Old 25/07/2015, 01:07 AM   #4
D3sconn3ct
Huge Clucker
 
D3sconn3ct's Avatar
 
Join Date: Jul 2014
Location: Brasil, AL
Posts: 360
Reputation: 55
Default Re: Usando MoveObject

Legal o tutorial, Parabéns +REP
__________________
SEXY
D3sconn3ct is offline   Reply With Quote
Old 25/07/2015, 02:00 AM   #5
#Luca[S].
Gangsta
 
#Luca[S].'s Avatar
 
Join Date: May 2014
Location: SP - Capital
Posts: 647
Reputation: 52
Default Re: Usando MoveObject

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.
__________________
#Luca[S]. is offline   Reply With Quote
Old 25/07/2015, 02:05 AM   #6
Stroon
Huge Clucker
 
Stroon's Avatar
 
Join Date: Dec 2013
Posts: 389
Reputation: 13
Default Re: Usando MoveObject

Poderia complementar ensinando a fazer a função para mover com keys...
Bom trabalho.
Stroon is offline   Reply With Quote
Old 25/07/2015, 02:10 AM   #7
matheusspohr
Gangsta
 
matheusspohr's Avatar
 
Join Date: Feb 2015
Location: Capanema PR
Posts: 674
Reputation: 33
Default Re: Usando MoveObject

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.
matheusspohr is offline   Reply With Quote
Old 25/07/2015, 02:13 AM   #8
Cleyson
Gangsta
 
Cleyson's Avatar
 
Join Date: Feb 2014
Location: Vitória - ES
Posts: 645
Reputation: 151
Default Re: Usando MoveObject

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..
Cleyson is offline   Reply With Quote
Old 25/07/2015, 02:57 AM   #9
matheusspohr
Gangsta
 
matheusspohr's Avatar
 
Join Date: Feb 2015
Location: Capanema PR
Posts: 674
Reputation: 33
Default Re: Usando MoveObject

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.
matheusspohr is offline   Reply With Quote
Old 25/07/2015, 04:34 AM   #10
darkxdll
High-roller
 
darkxdll's Avatar
 
Join Date: Jul 2012
Location: C:\Windows\DLLs
Posts: 1,533
Reputation: 87
Default Re: Usando MoveObject

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 ?
__________________
Dúvida ? Chama aí : 044-88087215
darkxdll is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Tutorial] usando iBits WLSF Lançamentos/Releases 21 09/02/2015 09:50 PM
[Ajuda] Usando teclas ! SkullFire Português/Portuguese 4 26/06/2013 11:33 PM
[Tutorial] Usando DIALOGS HeyHoLetsGo Lançamentos/Releases 15 08/01/2013 10:45 PM
[Tutorial] Usando 3DTextLabel RockFire Lançamentos/Releases 5 23/04/2011 02:11 PM
[Tutorial] [TUT]Usando o pastebin.com Lucas_Brasil Português/Portuguese 1 30/01/2010 11:00 AM


All times are GMT. The time now is 10:51 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.