// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ GetXYInFrontOfPlayer ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ // Created by Y_LessstockGetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance){new Vehicle_ID = GetPlayerVehicleID(playerid),Float:a;if(Vehicle_ID){ GetVehiclePos(Vehicle_ID,x,y,a); GetVehicleZAngle(Vehicle_ID, a);} else {GetPlayerPos(playerid, x, y, a);GetPlayerFacingAngle(playerid, a);}x += (distance * floatsin(-a, degrees));y += (distance * floatcos(-a, degrees));}
stock PullVehicleIntoDirection(vehicleid, Float:x, Float:y, Float:z, Float:speed)//Thanks to Miguel for supplying me with this function, I have edited it a bit{new Float:distance, Float:vehicle_pos[3]; GetVehiclePos(vehicleid, vehicle_pos[0], vehicle_pos[1], vehicle_pos[2]);#if defined USE_SMOOTH_TURNSnew Float: oz = atan2VehicleZ(vehicle_pos[0], vehicle_pos[1], x, y);new Float: vz;GetVehicleZAngle(vehicleid, vz);if(oz < vz-180) oz = oz+360;if(vz < oz-180) vz = vz+360;new Float: cz = floatabs(vz - oz);#elseSetVehicleZAngle(vehicleid, atan2VehicleZ(vehicle_pos[0], vehicle_pos[1], x, y));#endif x -= vehicle_pos[0]; y -= vehicle_pos[1]; z -= vehicle_pos[2]; #if defined DEPRECATE_Z distance = floatsqroot((x * x) + (y * y)); x = (speed * x) / distance; y = (speed * y) / distance; GetVehicleVelocity(vehicleid, vehicle_pos[0], vehicle_pos[0], z); #else z+=0.11; distance = floatsqroot((x * x) + (y * y) + (z * z)); x = (speed * x) / distance; y = (speed * y) / distance; z = (speed * z) / distance; #endif#if defined USE_SMOOTH_TURNSif(cz > 0){new Float: fz = cz*0.0015;if(vz < oz) SetVehicleAngularVelocity(vehicleid, 0.0, 0.0, fz);if(vz > oz) SetVehicleAngularVelocity(vehicleid, 0.0, 0.0, -fz);}#endif SetVehicleVelocity(vehicleid, x, y, z);}forward Float:atan2VehicleZ(Float:Xb,Float:Yb,Float:Xe,Float:Ye);// Dunno how to name it...stock Float:atan2VehicleZ(Float:Xb,Float:Yb,Float:Xe,Float:Ye){new Float:a = floatabs(360.0 - atan2( Xe-Xb,Ye-Yb));if(360 > a > 180)return a;return a-360.0;}
new Float:zangle;GetVehicleZAngle(vehicleid,zangle);zangle -= 90.0000;zangle = (zangle < 0.0) ? (360.0 + zangle) : zangle);x += (2 * floatsin(-zangle, degrees)); // 2=táv az elmozdításhozy += (2 * floatcos(-zangle, degrees)); //ugyanez
Így már sokkal világosabb a dolog és a pont az a megoldás amit elsõnek javasoltam.De megpróbálhatod úgyis hogy nem figyelsz a szög értékekre hogy kisebb-e mint 0 vagy nagyobb-e mint 360 fok. A samp belsõleg kezeli ezeket, ki próbálhatod SetVehicleZAngle(vehicleid, 520.00); majd lekérdezed a szög adatot.Edit:De ebben az utolsóban lehet hogy tévedek mert pontos szög adat kelhet floatsin és floatcos szögfüggvényekhez.Edit:Ugyanaz amit írtál csak kicsit átláthatóbb. new Float:zangle;GetVehicleZAngle(vehicleid,zangle);zangle -= 90.0000;zangle = (zangle < 0.0) ? (360.0 + zangle) : zangle);x += (2 * floatsin(-zangle, degrees)); // 2=táv az elmozdításhozy += (2 * floatcos(-zangle, degrees)); //ugyanez Akkor a jobbra irány az óramutató járásával ellentétes irányba lenne 90 fokkal?Hát ezt majd meglesem, most fogalmam sincs hogy jobbra vagy balra vannak-e a fok beosztások sa-mp -ben.