GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 05 Février 2010, 12:24:12

Titre: Fonction pour attacher un joueur a un autre
Posté par: scott1 le 05 Février 2010, 12:24:12
Bonjour,

J'aimerai savoir si il existe une fonction pour attacher un joueur a un autre.

Merci d'avance
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: Ssk le 05 Février 2010, 12:59:07
Il n' y a pas de fonction pour ^^
Mais tu peut te la codé en utilisant OnPlayerUpdate
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: scott1 le 05 Février 2010, 13:15:26
Ce ne sera as asser fluide, la marche sera sacadée :/
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: Ssk le 05 Février 2010, 13:36:24
#include <a_samp>


new AttachedTo[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
AttachedTo[playerid] = -1;
}

public OnPlayerDisconnect(playerid,reason)
{
AttachedTo[playerid] = -1;
}


public OnPlayerUpdate(playerid)
{
AttachPlayer_Update_Function(playerid);
}


forward AttachPlayerToPlayer(playerid,To_Player);
public AttachPlayerToPlayer(playerid,To_Player)
{
if(IsPlayerConnected(playerid) && IsPlayerConnected(To_Player))
{
AttachedTo[playerid] = To_Player;
return true;
}
return false;
}

forward AttachPlayer_Update_Function(playerid);
public AttachPlayer_Update_Function(playerid)
{
if(AttachedTo[playerid] != -1)
{
if(IsPlayerConnected(AttachedTo[playerid])){AttachedTo[playerid] = -1; return false;}
new Float:p[3];
GetPlayerPos(AttachedTo[playerid],p[0],p[1],p[2]);
SetPlayerPos(playerid,p[0],p[1],p[2]);
}
return false;
}

forward DettachPlayerToPlayer(playerid);
public DettachPlayerToPlayer(playerid)
{
AttachedTo[playerid] = -1;
}


Tien je vient juste de le codé sans testé ^^ normalement c' est bon et c' est hyper fluide enfin c' est la meilleur fluidité possible sur samp
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: S!m le 05 Février 2010, 15:14:50
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++
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: scott1 le 05 Février 2010, 15:53:40
Autant la fonction de Sasuke j'ai tout compris, autant la tienne sim je n'ai rien compris :D

Double post
Par contre pour faire une commande avec ça xD

Comme je n'arrive pas avec la fonction de Sim, j'ai essayer avec celle de Sasuke, ça donne

if(strcmp(cmd, "/attach", true) == 0)
{
    if(IsPlayerConnected(playerid))
    {
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /attach [playerid/PartOfName]");
return 1;
}
new playa;
playa = ReturnUser(tmp);
if (PlayerInfo[playerid][pAdmin] >=1)
{
    if(IsPlayerConnected(playa))
    {
        if(playa != INVALID_PLAYER_ID)
        {
        AttachPlayerToPlayer(playerid,playa);
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Vous n'êtes pas autorisé à utiliser cette commande!");
}
}
return 1;
}

Mais elle ne fonctionne pas, alors la je me tâte aiis je réellement compris ta fonction? xD

 :dejadehors

Merci pour votre aide
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: Ssk le 05 Février 2010, 16:18:12
Béh celle de sim c' est une amélioration de ma fonction il à ajouté des offset pour par exemple Si tu veut que le joueur 1 soit collé au 2 mais qu' il y est une distance de 2 M qui les sépare, il a aussi implanté la vitesse de déplacement mais j' aurais préféré prend celle du joueur 2 pis la Mettre à celle du joueur 1 ^^
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: scott1 le 05 Février 2010, 16:32:00
Ok merci.

J'ai donc pris celle de Sim ^^

Seulement le soucis, quand je compile

C:\Documents and Settings\Propriétaire\Bureau\serveur samp\LARP\Bon serv\filterscripts\Attachplayertoplayer2.pwn(57) : error 017: undefined symbol "OffX"
C:\Documents and Settings\Propriétaire\Bureau\serveur samp\LARP\Bon serv\filterscripts\Attachplayertoplayer2.pwn(57) : warning 215: expression has no effect
C:\Documents and Settings\Propriétaire\Bureau\serveur samp\LARP\Bon serv\filterscripts\Attachplayertoplayer2.pwn(57) : error 001: expected token: ";", but found "]"
C:\Documents and Settings\Propriétaire\Bureau\serveur samp\LARP\Bon serv\filterscripts\Attachplayertoplayer2.pwn(57) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Propriétaire\Bureau\serveur samp\LARP\Bon serv\filterscripts\Attachplayertoplayer2.pwn(57) : fatal error 107: too many error messages on one line

Et si je rajoute new Float:OffX[MAX_PLAYERS];
new Float:OffY[MAX_PLAYERS];
new Float:OffZ[MAX_PLAYERS];

C:\Documents and Settings\Propriétaire\Bureau\serveur samp\LARP\Bon serv\filterscripts\Attachplayertoplayer2.pwn(31) : warning 219: local variable "OffX" shadows a variable at a preceding level
C:\Documents and Settings\Propriétaire\Bureau\serveur samp\LARP\Bon serv\filterscripts\Attachplayertoplayer2.pwn(31) : warning 219: local variable "OffY" shadows a variable at a preceding level
C:\Documents and Settings\Propriétaire\Bureau\serveur samp\LARP\Bon serv\filterscripts\Attachplayertoplayer2.pwn(31) : warning 219: local variable "OffZ" shadows a variable at a preceding level

La je n'ais pas compris l'erreur xD, je ne vois as de conflict :/
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: S!m le 05 Février 2010, 17:52:59
Salut,

pas besoin, j'avais seulement fais une petite erreur, oublié une partie du nom de mes varaibles, le p_
j'ai corrigé te suffit de la reprendre

++Sim++
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: scott1 le 05 Février 2010, 18:27:16
Pour celui qui aimerai la fonction de Sim, attention, une petite erreur. u a oublié un I

AttachPlayer_Update_Function(playerid)
{
if(AttachedTo[playerid] != -1)
{
if(sPlayerConnected(AttachedTo[playerid]))
{

par

AttachPlayer_Update_Function(playerid)
{
if(AttachedTo[playerid] != -1)
{
if(IsPlayerConnected(AttachedTo[playerid]))
{

S'est bien gentil, je n'ai plus qu'a travailler sur la commande. La tache s'annonce ardue xD

Merci !
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: Ssk le 05 Février 2010, 19:43:32
Ardu? lol Au contraire
Titre: Re : Fonction pour attacher un joueur a un autre
Posté par: scott1 le 05 Février 2010, 20:15:35
Hey on est pas tous de grand maitre en pawn