[Ajuda] Cofres e portas
#1

Olб pessoal, gostaria de uma ajuda[...].
Como faзo para que apуs editar e salvar um cofre em determinado local usando "EditObject", ser criada uma porta automбtica para poder fechar o cofre?
Post Editado[28/10/2018 - 17:05]
Vlw
Reply
#2

Vocк tem que criar a porta, uй.
Use algum map editor.

https://dev.prineside.com/en/gtasa_s...search/?q=Safe
Reply
#3

EU sei que tкm que criar a porta, mas queria que ela fosse criada automбtica.
Reply
#4

Vocк precisa das coordenadas de onde vai pфr a porta.
Depois disso, й sу executar o cуdigo.
Reply
#5

Pelo jeito vocк nгo entendeu oque quero, mas vlw por tentar ajudar!Tentarei criar sozinho mesmo.
Reply
#6

Tipo vc compraria uma C4 e explodia na porta/cofre isso? '-'
Reply
#7

Quote:
Originally Posted by HelderPT
View Post
Tipo vc compraria uma C4 e explodia na porta/cofre isso? '-'
Nвo; tipo, eu usou a Funзгo "EditObject" e crio um cofre"https://dev.prineside.com/en/gtasa_s...l/19618-Safe1/" consequentemente irб criar automбtico uma porta"https://dev.prineside.com/en/gtasa_s...619-SafeDoor1/" na frente do cofre fechando ele.
Reply
#8

vou tentar te explicar mais ou menos oque vocк irб ter que fazer, por exemplo vocк cria o objeto do cofre nas coordenadas 0, 0, 0, consequentemente se vocк criar a porta nas mesmas coordenadas a porta nгo irб ficar no local correto, sendo assim vocк tem que pegar a coordenada correta desta forma, se o cofre estб na coordenada 0, 0, 0, o eixo de Y da porta tem que ser o eixo de Y do cofre -8, e o eixo de X -7, espero que tenha entendido oque eu quis dizer, isso й apenas um exemplo nгo tenho a menor ideia de quanto do eixo X e Y vocк irб ter que tirar/aumentar para a porta ficar no local correto
Reply
#9

Quote:
Originally Posted by GSantana
View Post
vou tentar te explicar mais ou menos oque vocк irб ter que fazer, por exemplo vocк cria o objeto do cofre nas coordenadas 0, 0, 0, consequentemente se vocк criar a porta nas mesmas coordenadas a porta nгo irб ficar no local correto, sendo assim vocк tem que pegar a coordenada correta desta forma, se o cofre estб na coordenada 0, 0, 0, o eixo de Y da porta tem que ser o eixo de Y do cofre -8, e o eixo de X -7, espero que tenha entendido oque eu quis dizer, isso й apenas um exemplo nгo tenho a menor ideia de quanto do eixo X e Y vocк irб ter que tirar/aumentar para a porta ficar no local correto
Exemplificando a explicaзгo acima:

pawn Code:
// Cofre fechado

static Float:xv, Float:yv, Float:zv;
  xv = 0.41062; yv = 0.41062; zv = 0.82484; // Diferenзa de coordenadas da porta e do cofre
  CreateDynamicObject(19618, x, y, z, rx, ry, rz); // Crie o cofre
  CreateDynamicObject(19619, x - xv, y - yv, z - zv, rx, ry, rz); // Crie a porta calculando a diferenзa entre as coordenadas.

// Cofre aberto

static Float:xv, Float:yv, Float:zv;
  xv = 0.41062; yv = 0.41062; zv = 0.82484;
  CreateDynamicObject(19618, x, y, z, rx, ry, rz);
  CreateDynamicObject(19619, x - xv, y - yv, z - zv, rx, ry, rz - 148.0); // Para abrir o cofre, simplesmente mude o eixo Z da rotaзгo do objeto.
Tente entender e adapte ao seu cуdigo.
Reply
#10

Quote:
Originally Posted by Ermanhaut
View Post
Traduzindo este enigma, й mais ou menos isto que vocк tem que fazer:

pawn Code:
// Cofre fechado

static Float:xv, Float:yv, Float:zv;
  xv = 0.41062; yv = 0.41062; zv = 0.82484; // Diferenзa de coordenadas da porta e do cofre
  CreateDynamicObject(19618, x, y, z, rx, ry, rz); // Crie o cofre
  CreateDynamicObject(19619, x - xv, y - yv, z - zv, rx, ry, rz); // Crie a porta calculando a diferenзa entre as coordenadas.

// Cofre aberto

static Float:xv, Float:yv, Float:zv;
  xv = 0.41062; yv = 0.41062; zv = 0.82484;
  CreateDynamicObject(19618, x, y, z, rx, ry, rz);
  CreateDynamicObject(19619, x - xv, y - yv, z - zv, rx, ry, rz - 148.0); // Para abrir o cofre, simplesmente mude o eixo Z da rotaзгo do objeto.
Tente entender e adapte ao seu cуdigo.
Para quem sabe programar a forma que expliquei estб boa, nгo й a forma mais clara possнvel de explicar porйm da para entender.




Nгo to querendo arrumar briga
Reply
#11

Quote:
Originally Posted by GSantana
View Post
Para quem sabe programar a forma que expliquei estб boa, nгo й a forma mais clara possнvel de explicar porйm da para entender.




Nгo to querendo arrumar briga
Peзo perdгo se lhe ofendi, nгo tive esta intenзгo.
Reply
#12

Quote:
Originally Posted by Ermanhaut
View Post
Peзo perdгo se lhe ofendi, nгo tive esta intenзгo.
Nem a minha, e vocк nгo me ofendeu
Reply
#13

Quote:
Originally Posted by GSantana
View Post
vou tentar te explicar mais ou menos oque vocк irб ter que fazer, por exemplo vocк cria o objeto do cofre nas coordenadas 0, 0, 0, consequentemente se vocк criar a porta nas mesmas coordenadas a porta nгo irб ficar no local correto, sendo assim vocк tem que pegar a coordenada correta desta forma, se o cofre estб na coordenada 0, 0, 0, o eixo de Y da porta tem que ser o eixo de Y do cofre -8, e o eixo de X -7, espero que tenha entendido oque eu quis dizer, isso й apenas um exemplo nгo tenho a menor ideia de quanto do eixo X e Y vocк irб ter que tirar/aumentar para a porta ficar no local correto
Entendi muito bem, atй jб tinha pensado nisso, criei o tуpico sу para ver se alguйm sabia quanto devo tirar ou colocar, por que tipo, o cofre vai ser criado aleatуriamente em questгo de eixo x e y, ai, pra saber quanto deve retirar ou adicionar й q ta complicando, mas, irei tentando mesmo assim! Vlw.
Reply
#14

Quote:
Originally Posted by Ermanhaut
View Post
Exemplificando a explicaзгo acima:

pawn Code:
// Cofre fechado

static Float:xv, Float:yv, Float:zv;
  xv = 0.41062; yv = 0.41062; zv = 0.82484; // Diferenзa de coordenadas da porta e do cofre
  CreateDynamicObject(19618, x, y, z, rx, ry, rz); // Crie o cofre
  CreateDynamicObject(19619, x - xv, y - yv, z - zv, rx, ry, rz); // Crie a porta calculando a diferenзa entre as coordenadas.

// Cofre aberto

static Float:xv, Float:yv, Float:zv;
  xv = 0.41062; yv = 0.41062; zv = 0.82484;
  CreateDynamicObject(19618, x, y, z, rx, ry, rz);
  CreateDynamicObject(19619, x - xv, y - yv, z - zv, rx, ry, rz - 148.0); // Para abrir o cofre, simplesmente mude o eixo Z da rotaзгo do objeto.
Tente entender e adapte ao seu cуdigo.
Eu jб tinha entendido com a explicaзгo a cima, mas vlw tambйm! Й bom que caso apareзa alguйm com essa dъvida jб tкm um exemplo ai.
Reply
#15

isso й fбcil resolver, vou explicar em forma de cуdigo para ficar mais dinвmico.

PHP Code:
new cofre[3];
cofre[0] = CreateObject(idxyz.....
cofre[1] = CreateObject(idxyz.....
cofre[2] = CreateObject(idxyz.....
//como as localizaзхes serб aleatуria й sу vocк usar a funзгo GetObjectPos para pegar a posiзгo do objeto EX:
forward CriarPorta();
public 
CriarPorta()
{
    
newFloat:xvFloat:yvFloat:zv;
    
xv 0.41062yv 0.41062zv 0.82484;
    new 
Float:pos[3];
    
GetObjectPos(cofre[0], pos[0], pos[1], pos[2]);
    
CreateObject(19619xvyvzvrxryrz);
  
    return 
1;

usei o calculo do Ermanhaut para criar a porta do cofre no lugar certo, nгo testei o calculo dele entгo nгo sei se estб correto, mas creio eu que esteja
Reply
#16

Essa diferenзa de coordenadas nгo deu muito certo, continuarei a procura dela... rsrs!
Reply
#17

Eu peguei os valores que eu passei e eles realmente nгo funcionam.
Tentei calcular novos valores porйm nenhum deles funcionou corretamente exceto os que estгo na funзгo abaixo.
Estes valores funcionam se vocк criar o cofre e nгo alterar a posiзгo.
Porйm, se o fizer, fica fora de posiзгo.

Nгo sei o que estб errado nesta funзгo, se alguйm quiser resolver, fique a vontade.

Dependкncias: sscanf2, streamer, zcmd

obs: eu escrevo tudo em inglкs mesmo, nгo me julguem.

@EDIT

Consertei uma parte do cуdigo e adicionei uma funзгo para excluir os cofres criados.
Agora movimentar nгo faz com que a porta fique fora de posiзгo, mas rotacionar sim.


pawn Code:
#define MAX_SAFES 3

new
  safes[MAX_PLAYERS][MAX_SAFES] = {{INVALID_OBJECT_ID, ...}, ...},
  doors[MAX_PLAYERS][MAX_SAFES] = {{INVALID_OBJECT_ID, ...}, ...}
;

CMD:safe(playerid) {
  static a, b;
  for(a = 0, b = MAX_SAFES; a < b; a++) {
    if(safes[playerid][a] != INVALID_OBJECT_ID) continue;
    else {
      static Float:x, Float:y, Float:z, Float:ang, text[64];
      GetPlayerPos(playerid, x, y, z);
      GetPlayerFacingAngle(playerid, ang);
      x += 0.5; z += 0.3;
      safes[playerid][a] = CreateDynamicObject(19618, x, y, z, 0.0, 0.0, 0.0);
      EditDynamicObject(playerid, safes[playerid][a]);
      format(text, sizeof text, "Safe ID %02d created. Edit it's position.", a);
      return SendClientMessage(playerid, -1, text);
    }
  }
 
  return SendClientMessage(playerid, -1, "You can't create more safes.");
}

CMD:delsafe(playerid, params[]) {
  static n, s[4];
  if(!sscanf(params, "d", n)) {
    if(0 <= n <= MAX_SAFES-1) {
      DestroyDynamicObject(safes[playerid][n]);
      DestroyDynamicObject(doors[playerid][n]);
      safes[playerid][n] = INVALID_OBJECT_ID;
      doors[playerid][n] = INVALID_OBJECT_ID;
      static text[64];
      format(text, sizeof text, "Safe ID %02d destroyed.", n);
      return SendClientMessage(playerid, -1, text);
    } else return SendClientMessage(playerid, -1, "ID must be between 0 and 2");
  } else if(!sscanf(params, "s[4]", s)) {
    if(!strcmp(s, "all")) {
      static a, b;
      for(a = 0, b = MAX_SAFES; a < b; a++) {
        DestroyDynamicObject(safes[playerid][a]);
        DestroyDynamicObject(doors[playerid][a]);
        safes[playerid][a] = INVALID_OBJECT_ID;
        doors[playerid][a] = INVALID_OBJECT_ID;
      }
      return SendClientMessage(playerid, -1, "All safes destroyed.");
    } else return SendClientMessage(playerid, -1, "/delsafe all or /delsafe ID");
  } else return SendClientMessage(playerid, -1, "/delsafe all or /delsafe ID");
}

public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) {

  if(response == 1) {
    static a, b, text[64];
    for(a = 0, b = MAX_SAFES; a < b; a++) {
      if(objectid == safes[playerid][a]) {
        x -= 0.430419; y -= 0.220214;
        doors[playerid][a] = CreateDynamicObject(19619, x, y, z, rx, ry, rz);
        format(text, sizeof text, "Safe door ID %02d created.", a);
        return SendClientMessage(playerid, -1, text);
      }
    }
  }
 
  return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)