• 16 Avril 2024, 22:40:45


Auteur Sujet: Aide : Sauvegarder position joueur  (Lu 3964 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Raptor2x

  • *
  • Criminel
  • Messages: 48
    • Voir le profil
Aide : Sauvegarder position joueur
« 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

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:

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Aide : Sauvegarder position joueur
« Réponse #1 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.


  • La variable globale PlayerInfo est un array permettant de sélectionner un joueur. Il est donc inutile que les variables PosX, PosY, PosZ et Angle le soient également. Tu peux donc retirer le [MAX_PLAYERS] présent dans l'énumérateur pour ces variables.
  • Par convention, on ne met pas d'espace entre un tag et le nom de la variable déclarée. Le compilateur peut parfois être pointilleux, je te conseille donc de retirer cet espace.
  • Aux lignes 148 et 149, tu tentes d'utiliser les variables de position et d'angle d'une mauvaise manière. Puisqu'elles font partie d'un énumérateur, et que cet énumérateur est utilisé pour la structure d'une variable globale, tu dois utiliser le même format que celui des lignes 158 à 161, à savoir PlayerInfo[playerid][PosY].

Avec ces modifications, cela devrait fonctionner.

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3550
    • Voir le profil
Re : Aide : Sauvegarder position joueur
« Réponse #2 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 !


Adju ♥
(-_-)



Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Aide : Sauvegarder position joueur
« Réponse #3 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.

Hors ligne Raptor2x

  • *
  • Criminel
  • Messages: 48
    • Voir le profil
Re : Aide : Sauvegarder position joueur
« Réponse #4 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.

Hors ligne Raptor2x

  • *
  • Criminel
  • Messages: 48
    • Voir le profil
Re : Aide : Sauvegarder position joueur
« Réponse #5 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.

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : Aide : Sauvegarder position joueur
« Réponse #6 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

[/url]

Hors ligne Raptor2x

  • *
  • Criminel
  • Messages: 48
    • Voir le profil
Re : Aide : Sauvegarder position joueur
« Réponse #7 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.

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Aide : Sauvegarder position joueur
« Réponse #8 le: 25 Juillet 2014, 18:05:44 »
OnPlayerEditObject

Tout est expliqué :smile:.

Hors ligne Raptor2x

  • *
  • Criminel
  • Messages: 48
    • Voir le profil
Re : Aide : Sauvegarder position joueur
« Réponse #9 le: 25 Juillet 2014, 19:58:23 »
Niquel, merci beaucoup :smile:
« Modifié: 26 Juillet 2014, 03:01:03 par Raptor2x »