[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
Respuesta: Re: [Ayuda] SetObjectRot + Timer. -
Swedky - 21.11.2013
Quote:
Originally Posted by 0xFFFFFF
|
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
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
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
|
Quote:
Originally Posted by Daniel-92
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
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
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"