public OnPlayerUpdate(playerid) { static Float:jPosX, Float:jPosY, Float:jPosZ; static Float:jCentroX, Float:jCentroY, Float:jCentroZ; if(idDF[playerid] != -1) { GetPlayerPos(idDF[playerid], jCentroX, jCentroY, jCentroZ); getXYZWithDistance(playerid, jPosX, jPosY, jPosZ, jCentroX, jCentroY, jCentroZ); SetPlayerCameraPos(playerid, jPosX, jPosY, jPosZ);//La camara a 10 metros lejos del jugador SetPlayerCameraLookAt(playerid, jCentroX, jCentroY, jCentroZ); } return 1; }
stock getXYZWithDistance(playerid, &Float:rX, &Float:rY, &Float:rZ, Float:centroX, Float:centroY, Float:centroZ) { static Float:posX, Float:posY, Float:posZ; static Float:vDirX, Float:vDirY, Float:vDirZ; static Float:t; GetPlayerPos(playerid, posX, posY, posZ); /*Vector director*/ vDirX = posX-centroX; vDirY = posY-centroY; vDirZ = posZ-centroZ; /*---------------*/ t = floatsqroot(((posX-centroX)*(posX-centroX))+((posY-centroY)*(posY-centroY))+((posZ-centroZ)*(posZ-centroZ))); t = 30/t; vDirX *= t; vDirY *= t; vDirZ *= t; rX = posX+vDirX; rY = posY+vDirY; rZ = posZ+vDirZ; }
//BY MAUZEN stock GetPlayerRelativePos(playerid, &Float:x, &Float:y, &Float:z, Float:xoff=0.0, Float:yoff=0.0, Float:zoff=0.0) { new Float:rot; rot = 360 - rot; GetPlayerPos(playerid, x, y, z); x = floatsin(rot,degrees) * yoff + floatcos(rot,degrees) * xoff + x; y = floatcos(rot,degrees) * yoff - floatsin(rot,degrees) * xoff + y; z = zoff + z; }
Lo siento, se que estuvo mal, era solo como tema de ayuda pero de forma diferente ya que en verdad necesitaba el algoritmo.
En lugar de preguntar algo como: їme podrнan ayudar encontrando el algoritmo de estб funciуn? Pensй en poner de otra forma la pregunta, ya que vi que en la secciуn funciones siempre alguien sale con una funciуn mas optimizada |
//BY MAUZEN stock GetPlayerRelativePos(playerid, &Float:x, &Float:y, &Float:z, Float:xoff=0.0, Float:yoff=0.0, Float:zoff=0.0) { new Float:rot; rot = 360 - rot; GetPlayerPos(playerid, x, y, z); x = floatsin(rot,degrees) * yoff + floatcos(rot,degrees) * xoff + x; y = floatcos(rot,degrees) * yoff - floatsin(rot,degrees) * xoff + y; z = zoff + z; }