[RESOLU] Récupérer et stocker le SteamID d'un joueur dans une BDD

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
xnooztv
Messages : 55
Inscription : 05 Jan 2016 05:32

[RESOLU] Récupérer et stocker le SteamID d'un joueur dans une BDD

Message par xnooztv » 10 Mars 2018 14:43

Bonjour,

J'utilise Steamworks et j'aimerais avoir le SteamID d'un joueur.
Je sais que c'est cette fonction:
SteamUser.GetSteamID();
et j'arrive à l'afficher dans le debug.
Mais je n'arrive pas à sauvegarder le SteamID dans la base de donnée (MySQL)
J'utilise l'asset "ULogin Pro" (https://www.lovattostudio.com/en/shop/n ... login-pro/)
J'ai modifié les fichiers nécessaires (bl_Register.php, bl_LoginPro.cs et bl_SignUp.cs) mais cela ne fonctionne pas.

bl_LoginPro.cs: et j'obtiens ses erreurs:
Assets/Addons/ULoginSystemPro/Content/Scripts/Core/bl_LoginPro.cs(184,15): error CS1502: The best overloaded method match for `UnityEngine.WWWForm.AddField(string, string)' has some invalid arguments
Assets/Addons/ULoginSystemPro/Content/Scripts/Core/bl_LoginPro.cs(184,35): error CS1503: Argument `#2' cannot convert `Steamworks.CSteamID' expression to type `string'

Savez-vous comment sauvegarder le SteamID dans la base de données?
Dernière édition par xnooztv le 11 Mars 2018 20:21, édité 1 fois.
Soutenir LandWars:

Image

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par Max » 10 Mars 2018 14:54

Hello,

j'ai supprimé les liens vers les codes que tu donnes, car même si tu sembles les avoir modifiés, ces codes sont issus d'un packages non libre de droit (payant). Attention à ce genre de chose. Merci.

Quand à ton soucis, si on se réfère à la doc, la fonction AddField attend deux strings en premiers paramètres, ce qui ne semble pas être le cas ligne 184. (cf le message d'erreur)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

xnooztv
Messages : 55
Inscription : 05 Jan 2016 05:32

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par xnooztv » 10 Mars 2018 16:03

D'accord désolé.

J'ai bien fait cela:
mForm.AddField("steamid", steamid);

La valeur de steamid n'est pas un string, Je ne peut pas la convertir car c'est CSteamID qui s'en charge.
CSteamID steamId = SteamUser.GetSteamID();

J'ai fait ceci: mForm.AddField("steamid", PlayerPrefs.GetString( "steamId" ));

Je vais voir.
Soutenir LandWars:

Image

xnooztv
Messages : 55
Inscription : 05 Jan 2016 05:32

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par xnooztv » 10 Mars 2018 16:15

Cela ne fonctionne toujours pas, voici les modification faites (je donne les bout de codes, je sais pas si j'ai le droit)

bl_LoginPro.cs

Code : Tout sélectionner

    public void SinUp(string user, string nick, string pass,string email, CSteamID steamId)
    {
        if (isRequesting)
            return;
        if (bl_LoginProDataBase.Instance == null)
            return;

        StartCoroutine(RegisterProcess(user,nick, pass, email, steamId));
    }
    
    IEnumerator RegisterProcess(string user, string nick, string pass,string email, CSteamID steamId)
    {
        isRequesting = true;
        SetLogText("");
        //Used for security check for authorization to modify database
        string hash = Md5Sum(user + pass + bl_LoginProDataBase.Instance.SecretKey).ToLower();
        LoadingUI.SetActive(true);
        //Assigns the data we want to save
        //Where -> Form.AddField("name" = matching name of value in SQL database
        WWWForm mForm = new WWWForm();
        mForm.AddField("steamid", PlayerPrefs.GetString( "steamId" ));
bl_SignUp.cs:

Code : Tout sélectionner

    public void SignUp()
    {
		string user = SteamFriends.GetPersonaName();
		string nick = SteamFriends.GetPersonaName();
        string pass = PasswordInput.text;
        string repass = RePasswordInput.text;
        string email = EmailInput.text;
		CSteamID steamId = SteamUser.GetSteamID();

        if (!AllFill(user,nick, pass, repass, email))
            return;
        if(pass.Length < bl_LoginProDataBase.Instance.MinPasswordLenght)
        {
            Login.SetLogText(string.Format("your password must be at least <b>{0}</b> characters", bl_LoginProDataBase.Instance.MinPasswordLenght));
            return;
        }
        if(repass != pass)
        {
            Login.SetLogText("Passwords doesn't match.");
            return;
        }

        Login.SinUp(user,nick, pass, email, steamId);
    }

Côté PHP, bl_Register.php

Code : Tout sélectionner

$steamId           = safe($_POST['steamId']);
$steamId     = stripslashes($steamId);
$steamId     = mysqli_real_escape_string($link, $steamId);
            $ins = mysqli_query($link, "INSERT INTO  `MyGameDB` (`steamid`, `name` , `nick` , `password` , `uIP`, `email`, `verify`, `active` ) VALUES ('" . $steamId . "' , '" . $name . "' ,  '" . $nick . "' ,  '" . $password . "' ,  '" . $mIP . "',  '" . $email . "',  '" . $random_hash . "',  '" . $emailVerification . "') ")or die(mysqli_error($link));
Dans le jeu, j'arrive à m'inscrire correctement, mais le SteamID n'est pas dans la base de donnée.
Je pense que c'est "PlayerPrefs.GetString( "steamId" )" le problème, mais je ne peut pas convertir "CSteamID steamId = SteamUser.GetSteamID();" en string, car je suis oubligé d'utiliser un string pour la fonction "AddField"
Soutenir LandWars:

Image

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par Max » 10 Mars 2018 16:55

il sort d'ou le PlayerPrefs.GetString( "steamId" ) ? Enfin je veux dire, il a bien fallu l'intialiser à un moment donné j'imagine, avec un PlayerPrefs.SetString( ....). (bon après, je ne connais pas la lib Steamworks, donc....)
Pour le reste, tu ne peux pas faire une truc du genre my_steamID.ToString() ?
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

xnooztv
Messages : 55
Inscription : 05 Jan 2016 05:32

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par xnooztv » 10 Mars 2018 17:20

Max a écrit :
10 Mars 2018 16:55
il sort d'ou le PlayerPrefs.GetString( "steamId" ) ? Enfin je veux dire, il a bien fallu l'intialiser à un moment donné j'imagine, avec un PlayerPrefs.SetString( ....). (bon après, je ne connais pas la lib Steamworks, donc....)
Pour le reste, tu ne peux pas faire une truc du genre my_steamID.ToString() ?
J'ai trouver le PlayerPrefs.SetString( ....) sur internet et oui j'ai initialiser la variable en haut avec: CSteamID steamId = SteamUser.GetSteamID();

Comme dit, ce n'est pas un string et si je l'initialise en String, j'ai une rreur (comme quoi impossible de convertir en string etc)
Soutenir LandWars:

Image

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par Max » 10 Mars 2018 17:25

je vais reformuler autrement: si tu mets ceci, il se passe quoi ?

Code : Tout sélectionner

mForm.AddField("steamid", steamid.ToString()); 
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

xnooztv
Messages : 55
Inscription : 05 Jan 2016 05:32

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par xnooztv » 10 Mars 2018 18:28

En utilisant steamid.ToString(), aucune erreur, je peut m'inscrire mais le steamid ne s'enregistre pas dans la base de donnée. J'ai effectuer comme sa:

Code : Tout sélectionner


    public void SinUp(string user, string nick, string pass,string email, CSteamID steamId)
    {
        if (isRequesting)
            return;
        if (bl_LoginProDataBase.Instance == null)
            return;

        StartCoroutine(RegisterProcess(user,nick, pass, email));
    }

    /// <summary>
    /// Connect with database
    /// </summary>
    /// <returns></returns>
    IEnumerator RegisterProcess(string user, string nick, string pass,string email)
    {
		CSteamID steamId = SteamUser.GetSteamID();
        isRequesting = true;
        SetLogText("");
        //Used for security check for authorization to modify database
        string hash = Md5Sum(user + pass + bl_LoginProDataBase.Instance.SecretKey).ToLower();
        LoadingUI.SetActive(true);
        //Assigns the data we want to save
        //Where -> Form.AddField("name" = matching name of value in SQL database
        WWWForm mForm = new WWWForm();
        mForm.AddField("steamid", steamId.ToString());
        
        
Soutenir LandWars:

Image

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par Max » 10 Mars 2018 18:49

xnooztv a écrit :
10 Mars 2018 18:28
je peut m'inscrire mais le steamid ne s'enregistre pas dans la base de donnée
ben là, il faut peut-être aussi regarder du coté de ton code php niveau serveur web je pense.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

xnooztv
Messages : 55
Inscription : 05 Jan 2016 05:32

Re: Récuperer le SteamID d'un joueur et le sauvegarder dans la base de donnée

Message par xnooztv » 10 Mars 2018 20:24

Max a écrit :
10 Mars 2018 18:49
xnooztv a écrit :
10 Mars 2018 18:28
je peut m'inscrire mais le steamid ne s'enregistre pas dans la base de donnée
ben là, il faut peut-être aussi regarder du coté de ton code php niveau serveur web je pense.
Normalement tout est bon.

Je récupère le SteamID et l'insère dans la base de donnée:

Code : Tout sélectionner

$steamId           = safe($_POST['steamId']);
$steamId     = stripslashes($steamId);
$steamId     = mysqli_real_escape_string($link, $steamId);

$ins = mysqli_query($link, "INSERT INTO  `MyGameDB` (`steamid`, `name` , `nick` , `password` , `uIP`, `email`, `verify`, `active` ) VALUES ('" . $steamId . "' , '" . $name . "' ,  '" . $nick . "' ,  '" . $password . "' ,  '" . $mIP . "',  '" . $email . "',  '" . $random_hash . "',  '" . $emailVerification . "') ")or die(mysqli_error($link));
Je fait un Debug.Log dans Unity pour voir si je récupère bien le SteamID, et c'est bien le cas.
Dans la base de donnée, la table "steamid" est vide.
Soutenir LandWars:

Image

Répondre

Revenir vers « Scripting »