[AJUDA] Mover varios objetos
#1

Queria saber como posso fazer para mover varios objetos ao mesmo tempo, sao portoes onde terгo que abrir todos ao mesmo tempo.. Um total de 31 portхes.

Tentei com Array mas nao deu certo, e com vars, seriam muitas :S

Alguem sabe uma forma mais otimizada e facil ?
Reply
#2

31 portхes na mesma "passagem" ou em lugares diferentes?
Reply
#3

Armazene os ids em uma matriz e mova-os com um loop contendo o MoveObject
Reply
#4

Quote:
Originally Posted by Viniborn
View Post
Armazene os ids em uma matriz e mova-os com um loop contendo o MoveObject
Vlw vini
@EDIT

vou tentar aki '-'
Reply
#5

Vocк quer mover todos portхes atй uma posiзгo ?
Reply
#6

Quote:
Originally Posted by Mr.Hardy
View Post
Vocк quer mover todos portхes atй uma posiзгo ?
Nгo exatamente..

Sгo varios portoes, com coordenadas diferentes, e queria que movessem no eixo Z ao mesmo tempo.


Tentei por Matriz como o vini disse, nao consegui.
Fiz por Array, consegui mover todos os portхes, mas nгo moveram no eixo certo, eles bugaram :S
Reply
#7

cria com publics nгo й tгo optimizado porйm nгo tem falhas
Reply
#8

Quote:
Originally Posted by BlackDonelly
View Post
cria com publics nгo й tгo optimizado porйm nгo tem falhas
Eu sei criar dessa forma, queria saber se tem alguma outra forma para se mover varios objetos ao mesmo tempo e no mesmo eixo e com a mesma distancia do movimento.
Reply
#9

Se baseia nisso

pawn Code:
#include a_samp
#include zcmd

//[Include hLoop By MrHardy]
#define hLoop_Bot(%1) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1) && IsPlayerNPC(%1))
#define hLoop_Admin(%1,%2) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1) && %2)
#define hLoop_Player(%1) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1))
#define hLoop_Vehicle(%1) for (new %1 = 0; %1 < MAX_VEHICLES; %1++)
#define hLoop_Multiple(%1,%2) for (new %2; %2 < %1; %2++)
#define hLoop_Function(%1,%2) \
            hLoop_Multiple(%1,%2)
           
#define MAX_PORTOES 5
#define POSICAO_Z_PORTAO 5.0 //Aqui vocк define altitude que vocк quer que se mova o portгo

new Portoes[MAX_PORTOES];
public OnGameModeInit()
{
    Portoes[0] = //CreateObject(.....
    Portoes[1] = //CreateObject(.....
    Portoes[2] = //CreateObject(.....
    Portoes[3] = //CreateObject(.....
    Portoes[4] = //CreateObject(.....
    return true;
}
CMD:movertudo(playerid, params[])
{
    hLoop_Function(MAX_PORTOES, i)
    {
        new Float:X, Float:Y, Float:Z;
        GetObjectPos(Portoes[i], X, Y, Z);
        MoveObject(Portoes[i], X, Y, Z + POSICAO_Z_PORTAO);
    }
    return true;
}
Reply
#10

Mr hardy, fiz dessa forma e nгo deu certo :S

Eles descem ao invйs de subir.... todos errados..
Reply
#11

Quote:
Originally Posted by EditPawn
View Post
Mr hardy, fiz dessa forma e nгo deu certo :S

Eles descem ao invйs de subir.... todos errados..
Oque aconteзe +- ?

Ele muda б rotaзгo ?
Reply
#12

Ele desce ao invйs de subir... ja tentei trocar o "+" por "-" mas continua descendo...

E alem de descer errado ele vai uma pequena distancia para o eixo x ou y, nao sem bem qual o eixo, mas ele vai um pouco para o lado..

Achei estranho atй :S
Reply
#13

Quote:
Originally Posted by EditPawn
View Post
Ele desce ao invйs de subir... ja tentei trocar o "+" por "-" mas continua descendo...

E alem de descer errado ele vai uma pequena distancia para o eixo x ou y, nao sem bem qual o eixo, mas ele vai um pouco para o lado..

Achei estranho atй :S
Creio que ao mover o objeto estб mudando a posiзгo dele б um calculo incorreto! ( Se nгo intendeu faz o seguinte )

Tenta isso

pawn Code:
#include a_samp
#include zcmd

//[Include hLoop By MrHardy]
#define hLoop_Bot(%1) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1) && IsPlayerNPC(%1))
#define hLoop_Admin(%1,%2) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1) && %2)
#define hLoop_Player(%1) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1))
#define hLoop_Vehicle(%1) for (new %1 = 0; %1 < MAX_VEHICLES; %1++)
#define hLoop_Multiple(%1,%2) for (new %2; %2 < %1; %2++)
#define hLoop_Function(%1,%2) \
            hLoop_Multiple(%1,%2)
           
#define MAX_PORTOES 5
#define POSICAO_Z_PORTAO 5.0 //Aqui vocк define altitude que vocк quer que se mova o portгo
#define VELOCIDADE_PORTAO 5.0 //Aqui vocк define a velocidade б ser usada

new Portoes[MAX_PORTOES];
public OnGameModeInit()
{
    Portoes[0] = //CreateObject(.....
    Portoes[1] = //CreateObject(.....
    Portoes[2] = //CreateObject(.....
    Portoes[3] = //CreateObject(.....
    Portoes[4] = //CreateObject(.....
    return true;
}
CMD:movertudo(playerid, params[])
{
    hLoop_Function(MAX_PORTOES, i)
    {
        new Float:X, Float:Y, Float:Z;
        new Float:RotX,Float:RotY,Float:RotZ;
        GetObjectPos(Portoes[i], X, Y, Z);
        GetObjectRot(Portoes[i], RotX, RotY, RotZ);
        MoveObject(Portoes[i], X, Y, Z + POSICAO_Z_PORTAO, VELOCIDADE_PORTAO, RotX, RotY, RotZ);
        SetObjectRot(Portoes[i], RotX, RotY, RotZ );
    }
    return true;
}
Reply
#14

Olha como fisso no meu 3 portoes;
pawn Code:
CMD:ab(playerid, params[])
{
    if(PlayerInfo[playerid][Level] < 1)return SendClientMessage(playerid,fail,LEVELF);
    MoveObject(PortaoAB[0],731.13629150,-2236.15087891,10.724605560303,2.0);
    MoveObject(PortaoAB[1],723.35278320,-2233.18115234,10.724605560303,2.0);
    MoveObject(PortaoAB[2],719.14697266,-2231.37744141,10.724605560303,2.0);
    SendClientMessage(playerid,amarelo,"PORTAO ABERTO");
    return 1;
}
CMD:fb(playerid, params[])
{
    if(PlayerInfo[playerid][Level] < 1)return SendClientMessage(playerid,fail,LEVELF);
    MoveObject(PortaoAB[0],731.13629150,-2236.15087891,4.22460508,2.0);
    MoveObject(PortaoAB[1],723.35278320,-2233.18115234,4.22460508,2.0);
    MoveObject(PortaoAB[2],719.14697266,-2231.37744141,4.22460508,2.0);
    SendClientMessage(playerid,amarelo,"PORTAO FECHADO");
    return 1;
}
se for mover todos para mesma pos
use um loop;
ex:
pawn Code:
for(new d; d < tantoportoes; ++d)
{
moveobject(varportao[d]...
}
Reply
#15

Bom, tentei e continua do mesmo jeito... :S
que tenso :X

@EDIT

Quote:
Originally Posted by ReDKiiL
View Post
Olha como fisso no meu 3 portoes;
pawn Code:
CMD:ab(playerid, params[])
{
    if(PlayerInfo[playerid][Level] < 1)return SendClientMessage(playerid,fail,LEVELF);
    MoveObject(PortaoAB[0],731.13629150,-2236.15087891,10.724605560303,2.0);
    MoveObject(PortaoAB[1],723.35278320,-2233.18115234,10.724605560303,2.0);
    MoveObject(PortaoAB[2],719.14697266,-2231.37744141,10.724605560303,2.0);
    SendClientMessage(playerid,amarelo,"PORTAO ABERTO");
    return 1;
}
CMD:fb(playerid, params[])
{
    if(PlayerInfo[playerid][Level] < 1)return SendClientMessage(playerid,fail,LEVELF);
    MoveObject(PortaoAB[0],731.13629150,-2236.15087891,4.22460508,2.0);
    MoveObject(PortaoAB[1],723.35278320,-2233.18115234,4.22460508,2.0);
    MoveObject(PortaoAB[2],719.14697266,-2231.37744141,4.22460508,2.0);
    SendClientMessage(playerid,amarelo,"PORTAO FECHADO");
    return 1;
}
se for mover todos para mesma pos
use um loop;
ex:
pawn Code:
for(new d; d < tantoportoes; ++d)
{
moveobject(varportao[d]...
}
Mover Objeto por objeto й facil, mas quero mover 31 portoes ao mesmo tempo, no mesmo eixo, na mesma velocidade...
Reply
#16

Voce ta usando algum plugin? streamer?
Reply
#17

Quote:
Originally Posted by ReDKiiL
View Post
Voce ta usando algum plugin? streamer?
Streamer '-'

CreateDynamicObject
MoveDynamicObject
Reply
#18

apenas nos objetos que move usa createobject e moveobject normal eu faзo assim rsrs e nem buga
Reply
#19

Bom, irei fazer da forma tradicional ....

Obrigado a quem tento ajudar, e darei o meu rep por ter paciencia em tentar '-'
Reply
#20

Tenta agora ! Acho que vai funcionar..

pawn Code:
#include a_samp
#include zcmd

//[Include hLoop By MrHardy]
#define hLoop_Bot(%1) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1) && IsPlayerNPC(%1))
#define hLoop_Admin(%1,%2) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1) && %2)
#define hLoop_Player(%1) for (new %1 = 0; %1 < MAX_PLAYERS; %1++) if(IsPlayerConnected(%1))
#define hLoop_Vehicle(%1) for (new %1 = 0; %1 < MAX_VEHICLES; %1++)
#define hLoop_Multiple(%1,%2) for (new %2; %2 < %1; %2++)
#define hLoop_Function(%1,%2) \
            hLoop_Multiple(%1,%2)
           
#define MAX_PORTOES 5
#define POSICAO_Z_PORTAO 5.0 //Aqui vocк define altitude que vocк quer que se mova o portгo
#define VELOCIDADE_PORTAO 5.0 //Aqui vocк define a velocidade б ser usada

new Portoes[MAX_PORTOES];
public OnGameModeInit()
{
    Portoes[0] = //CreateObject(.....
    Portoes[1] = //CreateObject(.....
    Portoes[2] = //CreateObject(.....
    Portoes[3] = //CreateObject(.....
    Portoes[4] = //CreateObject(.....
    return true;
}
CMD:movertudo(playerid, params[])
{
    hLoop_Function(MAX_PORTOES, i)
    {
        new Float:X, Float:Y, Float:Z;
        new Float:RotX,Float:RotY,Float:RotZ;
        new Float:CalculoZ;
        CalculoZ = Z + POSICAO_Z_PORTAO;
        GetObjectPos(Portoes[i], X, Y, Z);
        GetObjectRot(Portoes[i], RotX, RotY, RotZ);
        MoveObject(Portoes[i], X, Y, CalculoZ, VELOCIDADE_PORTAO);
        SetObjectRot(Portoes[i], RotX, RotY, RotZ );
    }
    return true;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)