Cofres e portas -
YCharlieY - 28.10.2018
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
Re: Cofres e portas -
ipsLuan - 28.10.2018
Vocк tem que criar a porta, uй.
Use algum map editor.
https://dev.prineside.com/en/gtasa_s...search/?q=Safe
Re: Cofres e portas -
YCharlieY - 28.10.2018
EU sei que tкm que criar a porta, mas queria que ela fosse criada automбtica.
Re: Cofres e portas -
ipsLuan - 29.10.2018
Vocк precisa das coordenadas de onde vai pфr a porta.
Depois disso, й sу executar o cуdigo.
Re: Cofres e portas -
YCharlieY - 29.10.2018
Pelo jeito vocк nгo entendeu oque quero, mas vlw por tentar ajudar!Tentarei criar sozinho mesmo.
Re: Cofres e portas -
HelderPT - 29.10.2018
Tipo vc compraria uma C4 e explodia na porta/cofre isso? '-'
Re: Cofres e portas -
YCharlieY - 30.10.2018
Quote:
Originally Posted by HelderPT
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.
Re: Cofres e portas -
GSantana - 31.10.2018
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
Re: Cofres e portas -
Ermanhaut - 31.10.2018
Quote:
Originally Posted by GSantana
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.
Re: Cofres e portas -
GSantana - 31.10.2018
Quote:
Originally Posted by Ermanhaut
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
Re: Cofres e portas -
Ermanhaut - 31.10.2018
Quote:
Originally Posted by GSantana
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.
Re: Cofres e portas -
GSantana - 31.10.2018
Quote:
Originally Posted by Ermanhaut
Peзo perdгo se lhe ofendi, nгo tive esta intenзгo.
|
Nem a minha, e vocк nгo me ofendeu
Re: Cofres e portas -
YCharlieY - 01.11.2018
Quote:
Originally Posted by GSantana
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.
Re: Cofres e portas -
YCharlieY - 01.11.2018
Quote:
Originally Posted by Ermanhaut
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.
Re: Cofres e portas -
GSantana - 01.11.2018
isso й fбcil resolver, vou explicar em forma de cуdigo para ficar mais dinвmico.
PHP Code:
new cofre[3];
cofre[0] = CreateObject(id, x, y, z.....
cofre[1] = CreateObject(id, x, y, z.....
cofre[2] = CreateObject(id, x, y, z.....
//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:xv, Float:yv, Float:zv;
xv = 0.41062; yv = 0.41062; zv = 0.82484;
new Float:pos[3];
GetObjectPos(cofre[0], pos[0], pos[1], pos[2]);
CreateObject(19619, x - xv, y - yv, z - zv, rx, ry, rz);
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
Re: Cofres e portas -
YCharlieY - 01.11.2018
Essa diferenзa de coordenadas nгo deu muito certo, continuarei a procura dela... rsrs!
Re: Cofres e portas -
Ermanhaut - 01.11.2018
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;
}