SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 13 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Usando MoveObject

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11644
    Moedas : 1032955
    Data de inscrição : 06/10/2011
    Idade : 29
    Localização : Brasil

    [Tutorial] Usando MoveObject Empty [Tutorial] Usando MoveObject

    Mensagem por Weslley_Script Seg 10 Abr 2023 - 9:10

    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á.
    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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.
    [Tutorial] Usando MoveObject 88x31
    Creditos: Matheusspohr



    [Tutorial] Usando MoveObject D07Xwqb
    [Tutorial] Usando MoveObject Yjab9HN

      Data/hora atual: Ter 26 Nov 2024 - 23:32