GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Raptor2x le 24 Juillet 2014, 06:47:51

Titre: Aide : Sauvegarder position joueur
Posté par: Raptor2x le 24 Juillet 2014, 06:47:51
Salut, j'ai trouvé un petit filterscript pour un système de login/register, qui sauvegarde l'argent, le score, les kills etc.. Mais pas la position, et c'est ce que j'aimerais rajouter.

Si je veux je peux chercher et en trouver un autre qui sauvegarde la position mais je préfère l'ajouter manuellement comme ça j'en apprends un peu plus au niveau du fonctionnement de sauvegarde.

Déjà, voilà le filterscript en entier, comprenant mes modifs (et donc mes erreurs) :

http://pastebin.com/2UiVaE0F (http://pastebin.com/2UiVaE0F)

Les erreurs :

C:\Users\Benjamin\Desktop\Wasteland SAMP\filterscripts\Register_Admin.pwn(148) : error 035: argument type mismatch (argument 2)
C:\Users\Benjamin\Desktop\Wasteland SAMP\filterscripts\Register_Admin.pwn(149) : error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

Les erreurs sont donc dans les deux premières lignes :

public OnPlayerDisconnect(playerid, reason)
{
    GetPlayerPos(playerid, PosX, PosY, PosZ);
    GetPlayerFacingAngle(playerid, Angle);
 
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_WriteInt(File,"Score",PlayerInfo[playerid][pScore]);
    INI_WriteFloat( File, "PositionX",PlayerInfo[playerid][PosX]);
    INI_WriteFloat( File, "PositionY",PlayerInfo[playerid][PosY]);
    INI_WriteFloat( File, "PositionZ",PlayerInfo[playerid][PosZ]);
    INI_WriteFloat( File, "Angle",PlayerInfo[playerid][Angle]);
    INI_WriteInt( File, "Interior", GetPlayerInterior( playerid ) );
    INI_WriteInt( File, "VirtualWorld", GetPlayerVirtualWorld( playerid ) );
    INI_Close(File);
    return 1;
}

Mais où est le problème ?
Selon moi, je prends les coordonnés du joueur et l'angle de vue et je met les infos dans les variables "PosX, PosY, PosZ", "Angle" pour ensuite pouvoir les sauvegarder dans :

    INI_WriteFloat( File, "PositionX",PlayerInfo[playerid][PosX]);
    INI_WriteFloat( File, "PositionY",PlayerInfo[playerid][PosY]);
    INI_WriteFloat( File, "PositionZ",PlayerInfo[playerid][PosZ]);
    INI_WriteFloat( File, "Angle",PlayerInfo[playerid][Angle]);

Merci d'avance pour votre aide :smile:
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Gzsume le 24 Juillet 2014, 08:46:10
Salut,
Je vais te lister les erreurs présentes dans ton script afin que tu puisses les corriger.



Avec ces modifications, cela devrait fonctionner.
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Infu le 24 Juillet 2014, 14:52:40
Ce que dit Gzsume est très bien, mais je vais la faire courte:

Ici tu récupères les données:

Code: (pawn) [Sélectionner]
public OnPlayerDisconnect(playerid, reason)
{
    new Float:PosX, Float:PosY, Float:PosZ, Float:Angle; // Je créé les variables ici, puisqu'on n'utilisera pas PlayerInfo plus loin.
    GetPlayerPos(playerid, PosX, PosY, PosZ); // Ici
    GetPlayerFacingAngle(playerid, Angle); // et ici
 
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_WriteInt(File,"Score",PlayerInfo[playerid][pScore]);
    INI_WriteFloat( File, "PositionX",PlayerInfo[playerid][PosX]);
    INI_WriteFloat( File, "PositionY",PlayerInfo[playerid][PosY]);
    INI_WriteFloat( File, "PositionZ",PlayerInfo[playerid][PosZ]);
    INI_WriteFloat( File, "Angle",PlayerInfo[playerid][Angle]);
    INI_WriteInt( File, "Interior", GetPlayerInterior( playerid ) );
    INI_WriteInt( File, "VirtualWorld", GetPlayerVirtualWorld( playerid ) );
    INI_Close(File);
    return 1;
}

Donc ici, pas besoin d'utiliser PlayerInfo[playerid][PosX] mais uniquement PosX (pareil pour les autres).
Code: (pawn) [Sélectionner]
    INI_WriteFloat( File, "PositionX",PlayerInfo[playerid][PosX]);
    INI_WriteFloat( File, "PositionY",PlayerInfo[playerid][PosY]);
    INI_WriteFloat( File, "PositionZ",PlayerInfo[playerid][PosZ]);
    INI_WriteFloat( File, "Angle",PlayerInfo[playerid][Angle]);

En associant ceci avec ce qu'a dit Gzsume ton problème n'en sera plus un :P !
Bonne après-midi !
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Gzsume le 24 Juillet 2014, 15:24:11
C'est exactement ce que j'ai expliqué, à la différence près qu'utiliser des variables locales est inutile. De plus, tu as oublié d'appliquer les modifications au code.
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Raptor2x le 24 Juillet 2014, 15:38:19
Parfait, avec tout ce que tu m'as dis Gzsume j'ai réussi, désormais ça marche niquel !
Merci beaucoup et à toi aussi Infu pour ta réponse :smile:

J'aurais sûrement d'autres questions un peu plus tard, donc je mettrais le topic en "résolu" dans la soirée.
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Raptor2x le 24 Juillet 2014, 22:36:41
J'ai une petite question (je vais pas faire un autre topic juste pour ça), sur plusieurs serveurs j'avais vu un système pour placer des objets in game, ça marchait avec des sortes de textdraw pour faire pivoter les objets, poser l'objet..., quelqu'un sait ce que c'est ?
Je ne pense pas que c'est un système fait main car les petits boutons sur lesquels cliquer étaient exactement les mêmes sur tous les serveurs où j'ai vu ce système.
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Kiloutre le 24 Juillet 2014, 23:36:09
Ce n'est en effet pas fait main, c'est juste une fonction qui est faite pour cela:
http://wiki.sa-mp.com/wiki/EditObject_FR (http://wiki.sa-mp.com/wiki/EditObject_FR)
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Raptor2x le 25 Juillet 2014, 04:07:49
C'est bien ça, merci beaucoup ! :smile:
Du coup, j'ai fait un petit essai, que voici :

Code: (pawn) [Sélectionner]
new MUR;
Code: (pawn) [Sélectionner]
CMD:mur(playerid, params[])
{
    new Float:X, Float:Y, Float:Z;
    GetObjectPos(MUR, X, Y, Z);
    if(IsPlayerInRangeOfPoint(playerid, 10.0, X, Y, Z))
    {
    EditObject(playerid, MUR);
    SendClientMessage(playerid, 0xFFFFFFFF, "Tu peux désormais bouger le mur.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Tu es trop loin du mur.");
    return 1;
    }
}

Ça marche super bien !
Enfin presque, j'étais avec un ami et je lui ai dit d'utiliser la commande et de bouger l'objet, le problème : c'est pas synchro, je ne le vois pas déplacer l'objet alors qu'il le fait, et quand il sauvegarde la position, je vois toujours l'objet à sa position initiale, pareil pour lui quand c'est moi qui le fait.

Est-ce qu'on peut remédier à ça ?
Merci encore à vous tous pour votre aide.
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Xartrick le 25 Juillet 2014, 18:05:44
OnPlayerEditObject (http://wiki.sa-mp.com/wiki/OnPlayerEditObject)

Tout est expliqué :smile:.
Titre: Re : Aide : Sauvegarder position joueur
Posté par: Raptor2x le 25 Juillet 2014, 19:58:23
Niquel, merci beaucoup :smile: