SA-MP Forums Archive
[Ayuda] SetObjectRot + Timer. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: [Ayuda] SetObjectRot + Timer. (/showthread.php?tid=476941)



[Ayuda] SetObjectRot + Timer. - Swedky - 21.11.2013

Bueno, estaba por hacer un FS de una minigun que atacaba a la gente en una torre.

Todo bien ahн, utilizo un timer para actualizar la posiciуn de todos los jugadores y verificar si йstos estбn a cierta distancia del objeto. Hasta ahн perfecto, pero es como si el timer no existiera; lo digo por que al usar el comando, me lleva a la posiciуn y la minigun cambia su rotaciуn, pero no sigue el timer, se queda ahн parado xd.

Este es el FS:


pawn Код:
// El FS estб como fase beta.

#include <a_samp>
#include <zcmd>

new TimerObject;
new Object;

public OnFilterScriptInit()
{
    TimerObject = SetTimer("TimerObject_Public", 300, true);
    Object = CreateObject(362, 118.36156, 1931.72217, 22.04870, -3.00000, 21.00000, -80.00000);
    return 1;
}

public OnFilterScriptExit()
{
    KillTimer(TimerObject);
    DestroyObject(Object);
    return 1;
}


forward TimerObject_Public();
public TimerObject_Public()
{
    #define X 0
    #define Y 1
    #define Z 2
    new Float:Pos[3];

    for(new i; i < GetMaxPlayers(); i++)
    {
        if(IsPlayerInRangeOfPoint(i, 30.0, 118.36156, 1931.72217, 22.04870))
        {
            GetPlayerPos(i, Pos[X], Pos[Y], Pos[Z]);
            SetObjectRot(Object, Pos[X], Pos[Y], Pos[Z]);  
        }
    }
    return 1;
}


CMD:pos(playerid, params[])
{
    SetPlayerPos(playerid, 117.36156, 1931.72217, 22.04870);
    return 1;
}
Alguien tiene idea de quй es lo que hago mal? .

Saludos.



Re: [Ayuda] SetObjectRot + Timer. - 0xFFFFFF - 21.11.2013

pawn Код:
GetPlayerPos(i...);



Respuesta: Re: [Ayuda] SetObjectRot + Timer. - Swedky - 21.11.2013

Quote:
Originally Posted by 0xFFFFFF
Посмотреть сообщение
pawn Код:
GetPlayerPos(i...);
Bah, cierto xd. No, lo que pasaba era que yo le cambiй todo a playerid para ver si funcionaba, pero en el topic le puse global por que asн comencй a hacer el script.

Perdуn, error mio :d



Re: [Ayuda] SetObjectRot + Timer. - Daniel-92 - 21.11.2013

pawn Код:
GetPlayerPos(i, Pos[X], Pos[Y], Pos[Z]);
SetObjectRot(Object, Pos[X], Pos[Y], Pos[Z]);
Ahi obtienes la posiciуn del jugador y se la pones como rotaciуn al objeto, eso esta totalmente mal tenes que usar una funciуn para cambiarle la rotaciуn Z al objeto y se te complicaria un poco mas buscando la rotaciones X,Y.

Para la rotaciуn Z te puedes guiar de йsta funciуn de the_chaoz, tenes q modiicarla para que funcione con un objeto.
pawn Код:
SetPlayerFacingPos(playerid, Float:x, Float:y) //BY THE_CHAOZ
{
    if(!floatcmp(x, 0.0) && !floatcmp(y, 0.0))return 0;
    static Float:p[3];
    GetPlayerPos(playerid, p[0], p[1], p[2]);
    p[2] = atan2((y-p[1]), (x-p[0])) + 270.00;
    if(p[2]>360)p[2]-=360.00;
    return SetPlayerFacingAngle(playerid, p[2]);
}



Respuesta: Re: [Ayuda] SetObjectRot + Timer. - Swedky - 27.11.2013

Quote:
Originally Posted by Daniel-92
Посмотреть сообщение
pawn Код:
GetPlayerPos(i, Pos[X], Pos[Y], Pos[Z]);
SetObjectRot(Object, Pos[X], Pos[Y], Pos[Z]);
Ahi obtienes la posiciуn del jugador y se la pones como rotaciуn al objeto, eso esta totalmente mal tenes que usar una funciуn para cambiarle la rotaciуn Z al objeto y se te complicaria un poco mas buscando la rotaciones X,Y.

Para la rotaciуn Z te puedes guiar de йsta funciуn de the_chaoz, tenes q modiicarla para que funcione con un objeto.
pawn Код:
SetPlayerFacingPos(playerid, Float:x, Float:y) //BY THE_CHAOZ
{
    if(!floatcmp(x, 0.0) && !floatcmp(y, 0.0))return 0;
    static Float:p[3];
    GetPlayerPos(playerid, p[0], p[1], p[2]);
    p[2] = atan2((y-p[1]), (x-p[0])) + 270.00;
    if(p[2]>360)p[2]-=360.00;
    return SetPlayerFacingAngle(playerid, p[2]);
}
Estudiй ese cуdigo, lo eh entendido mucho, pero no entendн lo de 'atan2'. Podrнas explicarme para quй sirve?.

Saludos.



Re: [Ayuda] SetObjectRot + Timer. - Daniel-92 - 27.11.2013

Pues realmente nunca he trabajado con esa funciуn y no la manejo, pero segъn lei lo que hace es devolver el arco de la tangente de las coordenadas x e y.

creo que va algo asн.
pawn Код:
para atan2(5.00,5.00); retornaria 45°

                 +7
                 +6
                 +5 ------------. < - El punto Y=5, X=5 se encuentra a 45° de la recta
                 +4          .  |    (Si fuera Y=5, X=-5 el angulo serнa de 135°)
                 +3       .     |
                 +2    .        |
                 +1 .  ) 45°    |
-7 -6 -5 -4 -1 -1 0 +1 +2 +3 +4 +5 +6 +7
                 -1
                 -2
                 -3
                 -4
                 -5
                 -6
                 -7
Esperemos que alguien que le entienda la explique mejor


Respuesta: [Ayuda] SetObjectRot + Timer. - Swedky - 30.11.2013

Ah, gracias . Pero aъn asн no entiendo para quй servirнa 'atan2' en el cуdigo.

Alguien podrнa explicar un poco mбs?.



Respuesta: [Ayuda] SetObjectRot + Timer. - OTACON - 30.11.2013

Quote:
Originally Posted by EnzoMetlc
Посмотреть сообщение
Ah, gracias . Pero aъn asн no entiendo para quй servirнa 'atan2' en el cуdigo.

Alguien podrнa explicar un poco mбs?.
sirve para darle el nuevo angulo al objeto y asi comprobara si el angulo del objeto y del jugador son iguales, osea si el objeto le esta apuntando al jugador, en este caso.
saludos.



Respuesta: [Ayuda] SetObjectRot + Timer. - Swedky - 30.11.2013

Quote:
Originally Posted by OTACON
Посмотреть сообщение
sirve para darle el nuevo angulo al objeto y asi comprobara si el angulo del objeto y del jugador son iguales, osea si el objeto le esta apuntando al jugador, en este caso.
saludos.
Sigo sin entender jajaja :/

Revisй la librerнa a_samp, y apareciу esto:


pawn Код:
native Float:atan2(Float:x, Float:y);
Y yo no entender.

Revisй la Wiki y nada jajaja.

No soy de pedir los cуdigos completamente hechos, pero me gustarнa uno base por lo menos. Es que tengo que hacer 50 caligrafнas para el Lunes y apenas voy 15 y no tengo tiempo para nada
(los hago desde las 8:00 AM hasta altas horas de la noche. Lo sй, soy un asco como tйcnico u.u).


Saludos.



Respuesta: [Ayuda] SetObjectRot + Timer. - DesingMyCry - 30.11.2013

Son funciones matemбticas. Aprende trigonometrнa.


Respuesta: [Ayuda] SetObjectRot + Timer. - Swedky - 01.12.2013

Quote:
Originally Posted by DesingMyCry
View Post
Son funciones matemбticas. Aprende trigonometrнa.
Yo creo que es geometrнa .

Bueno, lo harй, quiero ver si me puedo superar .

Saludos.



Respuesta: [Ayuda] SetObjectRot + Timer. - OTACON - 01.12.2013

Quote:
Originally Posted by EnzoMetlc
View Post
Yo creo que es geometrнa .

Bueno, lo harй, quiero ver si me puedo superar .

Saludos.
no, es trigonometrнa como dijo Desing.
saludos.

http://es.wikipedia.org/wiki/Trigonometr%C3%ADa


Respuesta: [Ayuda] SetObjectRot + Timer. - Swedky - 01.12.2013

Quote:
Originally Posted by OTACON
View Post
no, es trigonometrнa como dijo Desing.
saludos.

http://es.wikipedia.org/wiki/Trigonometr%C3%ADa
Quote:
Originally Posted by Daniel-92
View Post
Pues realmente nunca he trabajado con esa funciуn y no la manejo, pero segъn lei lo que hace es devolver el arco de la tangente de las coordenadas x e y.
http://es.wikipedia.org/wiki/Tangente_(geometr%C3%ADa)


Aunque tambiйn estб la de Trigonometrнa, creo que es mбs geometrнa.
Bueno, aprenderй ambos jeje.

Saludos.



Respuesta: [Ayuda] SetObjectRot + Timer. - DesingMyCry - 01.12.2013

Es trigonometria pero sirve para operaciones en conjunto con geometrнa.


Respuesta: [Ayuda] SetObjectRot + Timer. - OTACON - 01.12.2013

YouTube


pawn Code:
//CAMBIA objetoid por la variable del objeto
// te coloco asi las variables para que veas como funciona la funcion, despues las puedes abreviar con variables con arrays.

new Float:posicionX, Float:posicionY, Float:posicionZ;
new Float:rotacionX, Float:rotacionY, Float:rotacionZ;
new Float:jugadorX, Float:jugadorY, Float:jugadorZ;
new Float:nuevoANG;

GetObjectPos(objetoid, posicionX, posicionY, posicionZ);
GetObjectRot(objetoid, rotacionX, rotacionY, rotacionZ);
GetPlayerPos(playerid, jugadorX, jugadorY, jugadorY);

nuevoANG = atan2(jugadorY-posicionY, jugadorX-posicionX);
nuevoANG = floatsub(nuevoANG, 90.0);
if(nuevoANG < 0.0){nuevoANG = floatadd(nuevoANG, 360.0);}

SetObjectRot(objetoid, rotacionX, rotacionY, nuevoANG+90.0);



Respuesta: [Ayuda] SetObjectRot + Timer. - adrianxd - 01.12.2013

Muy bueno octacon. Anterior mente buscaba algo similar no bad


Respuesta: [Ayuda] SetObjectRot + Timer. - OTACON - 01.12.2013

Quote:
Originally Posted by adrianxd
View Post
Muy bueno octacon. Anterior mente buscaba algo similar no bad
no fue un aporte LOL ¬¬ -_-...

enzo, te sirvio.?..



Respuesta: [Ayuda] SetObjectRot + Timer. - adrianxd - 02.12.2013

Nunca hable de aportes xD "SOLO ANTERIOR MENTE BUSCABA ALGO SOBRE ESTO"