[Ajuda] Como reverter estes valores?
#1

Beleza galera?
Eu uso um script que possibilita editar a posiзгo e a rotaзгo de um objeto que serб grudado no veнculo(Usando o Object Editor do samp)...
Apуs finalizada a ediзгo, esse script realiza os cбlculos precisos para grudar o objeto no veнculo do jeito que vocк editou.

O que eu quero й reverter esses cбlculos, ou seja, em vez de calcular pra grudar no carro, calcular para remover dele e voltar para os valores antes de grudar:
pawn Код:
new Float:ox, Float:oy, Float:oz, Float:ofaz;
                        new Float:finalx, Float:finaly;
                        new Float:px, Float:py, Float:pz, Float:roz;
                        StopDynamicObject(objectid);
                        SetDynamicObjectPos(objectid,x,y,z);
                    SetDynamicObjectRot(objectid,rx,ry,rz);
                        GetVehiclePos(car, px, py, pz);
                        GetVehicleZAngle(car, roz);
                        ox = x-px;
                        oy = y-py;
                        oz = z-pz;
                        ofaz = rz-roz;
                        finalx = ox*floatcos(roz, degrees)+oy*floatsin(roz, degrees);
                        finaly = -ox*floatsin(roz, degrees)+oy*floatcos(roz, degrees);
                        AttachDynamicObjectToVehicle(AttachedObjects[car][0], car, finalx, finaly, oz, rx, ry, ofaz);
                        AttachedObjects_X[car][0] = finalx;
                        AttachedObjects_Y[car][0] = finaly;
                        AttachedObjects_Z[car][0] = oz;
                        AttachedObjects_RX[car][0] = rx;
                        AttachedObjects_RY[car][0] = ry;
                        AttachedObjects_RZ[car][0] = ofaz;
Eu agradeзo qualquer ajuda, pois nгo estou conseguindo entender a lуgica desses cбlculos para reverter!
Valeu!
Reply
#2

Nгo compreendi a tua pergunta... Queres tirar o objeto do carro?
Reply
#3

Quote:
Originally Posted by PeterJane
Посмотреть сообщение
Nгo compreendi a tua pergunta... Queres tirar o objeto do carro?
Nгo exatamente, mas sim reter os valores antes de grudar, entende?

Ou seja, quando estou editando o objeto ele possui uma rotaзгo e uma posiзгo especнfica, assim que grudo ele, devido aos cбculos que vocк pode ver no meu code acima, os valores mudam pra poder grudar sem bug.

Quero simplesmente obter esses valores de novo, retirar o objeto do carro eu jб consegui, mas nгo estб indo pra posiзгo correta, por conta de estar utilizando os valores depois de grudado, os quais sгo diferentes!
Reply
#4

Quote:
Originally Posted by JR_Junior
Посмотреть сообщение
Nгo exatamente, mas sim reter os valores antes de grudar, entende?

Ou seja, quando estou editando o objeto ele possui uma rotaзгo e uma posiзгo especнfica, assim que grudo ele, devido aos cбculos que vocк pode ver no meu code acima, os valores mudam pra poder grudar sem bug.

Quero simplesmente obter esses valores de novo, retirar o objeto do carro eu jб consegui, mas nгo estб indo pra posiзгo correta, por conta de estar utilizando os valores depois de grudado, os quais sгo diferentes!
Adiciona ao filterscript que estбs usando umas linhas de "debugging" que te indiquem em tempo real a posiзгo do objeto.

Й a ъnica coisa que te posso sugerir, ou procura no sourcecode a funзгo que altera esses valores.

EDIT:

Exemplo estrambуlico alternativo:

O player usa /comando para manusear os objetos. /comando tal para fixar o objeto.

"Guardar valor" que o player escolheu "+ ou * ou etc" tanto.

Aqui ^

EDIT 2:

Afinal tens aн jб... Lк o meu comentбrio que chegas lб.

EDIT FINAL!

Vк este tуpico.

https://sampforum.blast.hk/showthread.php?tid=578507
Reply
#5

A soluзгo estб aqui, mas o problema й inverter os cбlculos, sу isso, tipo se й + eu coloco menos:
pawn Код:
ox = x+px;
                        oy = y+py;
                        oz = z+pz;
                        ofaz = rz+roz;
Agora, como inverter esse cбculo й que й o problema:
pawn Код:
finalx = ox*floatcos(roz, degrees)+oy*floatsin(roz, degrees);
                        finaly = -ox*floatsin(roz, degrees)+oy*floatcos(roz, degrees);
Exemplo, sabemos que X = 150.0, mas depois do cбculo ficarб em -321.5, como fazer para esse valor voltar a ser 150.0?
Reply
#6

Quote:
Originally Posted by JR_Junior
Посмотреть сообщение
A soluзгo estб aqui, mas o problema й inverter os cбlculos, sу isso, tipo se й + eu coloco menos:
pawn Код:
ox = x+px;
                        oy = y+py;
                        oz = z+pz;
                        ofaz = rz+roz;
Agora, como inverter esse cбculo й que й o problema:
pawn Код:
finalx = ox*floatcos(roz, degrees)+oy*floatsin(roz, degrees);
                        finaly = -ox*floatsin(roz, degrees)+oy*floatcos(roz, degrees);
Exemplo, sabemos que X = 150.0, mas depois do cбculo ficarб em -321.5, como fazer para esse valor voltar a ser 150.0?
Olhб lб o meu ъltimo edit...

Sinceramente se nгo compreendes o que colocaste, nгo sei como te vou explicar.

Jб agora diz-me lб qual й o editor.
Reply
#7

Parceiro, tudo que precisamos estб aqui:
pawn Код:
GetVehiclePos(car, px, py, pz);
                        GetVehicleZAngle(car, roz);
                        ox = x-px;
                        oy = y-py;
                        oz = z-pz;
                        ofaz = rz-roz;
                        finalx = ox*floatcos(roz, degrees)+oy*floatsin(roz, degrees);
                        finaly = -ox*floatsin(roz, degrees)+oy*floatcos(roz, degrees);
                        AttachDynamicObjectToVehicle(AttachedObjects[car][0], car, finalx, finaly, oz, rx, ry, ofaz);
O seu link fala a respeito de como grudar corretamente o objeto ao veнculo, isso eu jб tenho, o cуdigo que calcula e gruda corretamente, o qual й esse que estб acima.
O editor й o mesmo usado pra editar objetos no corpo, como o do link que tu mandou.

O escript todo que postei fica dentro de OnPlayerEditDynamicObjet e depois de finalizar a ediзгo executa o script de cбlculo e gruda.

GetVehiclePos(car, px, py, pz);
GetVehicleZAngle(car, roz);


Obtidas as coordenadas da posiзгo do carro e o angulo do mesmo, eis que й feito o cбlculo:
ox = x-px;
oy = y-py;
oz = z-pz;
ofaz = rz-roz;

Isso eu reverto simplesmente colocando o sinal de - no lugar de + e obtenho a posiзгo anterior!

Aqui estб o problema, esse cбlculo, como inverte-lo?
finalx = ox*floatcos(roz, degrees)+oy*floatsin(roz, degrees);
finaly = -ox*floatsin(roz, degrees)+oy*floatcos(roz, degrees);


Entendeu agora?

Depois й grudado no veнculo com os novos valores de posiзгo X e Y:
AttachDynamicObjectToVehicle(AttachedObjects[car][0], car, finalx, finaly, oz, rx, ry, ofaz);

O que eu quero й que finalx(com o novo valor) e finaly(com o novo valor) voltem a ter o valor antes do cбlculo.

Nгo resolve salvar os valores antes e depois como tu falou, pois, eu edito o objeto em um lugar e grudo no carro, mas depois quero editar ele em outro lugar(Outro valor de posiзгo).

Com base na lуgica do script, posso estar em qualquer posiзгo que apуs grudado os valores ficarгo corretos, sendo assim, usando a mesma lуgica, quero reverter o cбlculo para editar o objeto em qualquer posiзгo tambйm.

Conseguiu entender?
Reply
#8

Epah.... Se nгo compreendes como reverter tendo o script, aqui fica a maneira mais simplнssimatйrria:

Print ox, oy.

Print finalx, final y

Exemplo:

ox = 150
oy = 150

finalx = 354
finaly = 363

354 = (150 * x) + (150 * x)

354 - 300 x = 0

x ~ 1.1800

etc

Estou com sono. Amanhг ajudo-te melhor.
Reply
#9

Meu irmгo, vou te dar meu +rep por tua tentativa em me ajudar, valeu mesmo!

Consegui resolver o problema removendo esse cбlculo:
finalx = ox*floatcos(roz, degrees)+oy*floatsin(roz, degrees);
finaly = -ox*floatsin(roz, degrees)+oy*floatcos(roz, degrees);


Pois descobri que ele faz a mesma coisa que isso:
x-px;
y-py;


Que bosta kkkk
Sendo assim, pra reverter os valores, basta alterar o - pra + e feito:
AttachDynamicObjectToVehicle(AttachedObjects[car][0], car, ox, oy, oz, rx, ry, ofaz);


Brigadгo mesmo!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)