Salut,
ouais c'est pas mal, mais tu n'as pas tenu compte de la possibilité de mettre un Offset (comme pour les objets) et tu as fais une petite erreur dans la fonction mère, tu détache le joueur si le joueur auquel il est attaché est connecté
voici à peu près comment je le ferais
(peut-être qu'un TogglePlayerControllable et un calcul de la vitesse (avec SetPlayerVelocity) pourrait permettre un résultat acceptable)
#include <a_samp>
new AttachedTo[MAX_PLAYERS];
new Float:p_OffX[MAX_PLAYERS];
new Float:p_OffY[MAX_PLAYERS];
new Float:p_OffZ[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
AttachedTo[playerid] = -1;
}
public OnPlayerDisconnect(playerid,reason)
{
AttachedTo[playerid] = -1;
}
public OnPlayerUpdate(playerid)
{
AttachPlayer_Update_Function(playerid);
return 1;
}
forward AttachPlayerToPlayer(playerid,To_Player, Float:OffX, Float:OffY, Float:OffZ);
public AttachPlayerToPlayer(playerid,To_Player, Float:OffX, Float:OffY, Float:OffZ)
{
if(IsPlayerConnected(playerid) && IsPlayerConnected(To_Player))
{
AttachedTo[playerid] = To_Player;
p_OffX[playerid] = OffX;
p_OffY[playerid] = OffY;
p_OffZ[playerid] = OffZ;
return true;
}
return false;
}
AttachPlayer_Update_Function(playerid)
{
if(AttachedTo[playerid] != -1)
{
if(IsPlayerConnected(AttachedTo[playerid]))
{
new Float:X, Float:Y, Float:Z, Float:Angle;
GetPlayerPos(AttachedTo[playerid], X, Y, Z);
if(IsPlayerInAnyVehicle(playerid))
{
GetVehicleZAngle(GetPlayerVehicleID(AttachedTo[playerid]), Angle);
}
else
{
GetPlayerFacingAngle(AttachedTo[playerid], Angle);
}
X += floatcos(Angle, degrees) * p_OffX[playerid] - floatsin(Angle, degrees) * p_OffY[playerid];
Y += floatsin(Angle, degrees) * p_OffX[playerid] + floatcos(Angle, degrees) * p_OffY[playerid];
Z += p_OffZ[playerid];
SetPlayerPos(playerid, X, Y, Z);
GetPlayerVelocity(AttachedTo[playerid], X, Y, Z);
SetPlayerVelocity(playerid, X, Y, Z);
return true;
}
else
{
AttachedTo[playerid] = -1;
}
}
return false;
}
forward DettachPlayerFromPlayer(playerid);
public DettachPlayerFromPlayer(playerid)
{
AttachedTo[playerid] = -1;
return true;
}
bien sûr c'est loin d'être parfait
d'ailleurs je suis loin d'être sur en ce qui concerne les cos et sin, je les ai fait en essayant de le voir dans ma tête alors ce n'est pas évident...
++Sim++