GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Xolokos le 19 Décembre 2010, 22:03:45
-
Salutation ou bonsoir j'ai faut un Syteme de register j'ai déjà demander de l'aide mais ca ne marche toujours pas en bref voici le code.
#pragma unused ret_memcpy
#include <a_samp>
#include <Dini>
#include <dudb>
#define Login 0
#define Register 1
#define vert 0xCE0000FF
#define jaune 0xFF2828FF
#define rouge 0x820000FF
enum list{level,skinid,death,kill,score,money};
new stats[MAX_PLAYERS][list];
new name[20][MAX_PLAYERS];
new st[256];
public OnFilterScriptInit()
{
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
main()
{
}
public OnPlayerConnect(playerid)
{
name[playerid] = GetName(playerid);
Entry(playerid);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == Register)
{
if(response)
{
if(!strlen(inputtext))
{
SendClientMessage(playerid, jaune, "Le mot de passe doit comprendre entre 5-20 caractères (champ vide).");
return Entry(playerid);
}
if(20 < strlen(inputtext) || strlen(inputtext) < 5)
{
SendClientMessage(playerid, jaune, "Le mot de passe doit comprendre entre 5-20 caractères (champ invalide).");
return Entry(playerid);
}
else
{
format(st,sizeof(st),"Comptes/%s.user",name[playerid]);
dini_Create((st));
dini_IntSet((st), "password", udb_hash(inputtext));
dini_Set((st),"pass",inputtext);
dini_IntSet((st), "level", 0);
dini_IntSet((st), "skinid", 0);
dini_IntSet((st), "death", 0);
dini_IntSet((st), "kill", 0);
dini_IntSet((st), "score", 0);
dini_IntSet((st), "money", 10000);
printf(st);
format(st, sizeof(st), "%s compte créé. Mot de passe : %s", name[playerid], inputtext);
SendClientMessage(playerid, jaune, st);
Entry(playerid);
}
}
else
{
Entry(playerid);
}
}
if(dialogid == Login)
{
if(response)
{
if(!strlen(inputtext))
{
SendClientMessage(playerid, rouge, "Mauvais mot de passe.");
return Entry(playerid);
}
if(20 < strlen(inputtext) || strlen(inputtext) < 5 )
{
SendClientMessage(playerid, rouge, "Mauvais mot de passe.");
return Entry(playerid);
}
else
{
format(st,sizeof(st),"Comptes/%s.user",name[playerid]);
new string[256];
string = dini_Get((st), "Password");
if (udb_hash(inputtext) != strval(string))
{
SendClientMessage(playerid, rouge, "Mauvais mot de passe.");
return Entry(playerid);
}
else
{
dini_Set((st),"pass",inputtext);
stats[playerid][level] = dini_Int((st), "level");
stats[playerid][skinid] = dini_Int((st), "skinid");
stats[playerid][death] = dini_Int((st), "death");
stats[playerid][kill] = dini_Int((st), "kill");
stats[playerid][score] = dini_Int((st), "score");
SetPlayerMoney(playerid, stats[playerid][money]);
SetPlayerScore(playerid, stats[playerid][score]);
SendClientMessage(playerid, vert, "Vous êtes maintenant logger sur votre compte.");
}
}
}
else
{
Entry(playerid);
}
}
return 1;
}
Entry(playerid)
{
format(st,sizeof(st),"Comptes/%s.user",name[playerid]);
if(dini_Exists(st))
{
format(st,256,"Bienvenue\nentrer votre identifient secret\npour vous logger:");
ShowPlayerDialog(playerid,Login,DIALOG_STYLE_INPUT,"Identification ",st,"Login","Annuler");
}
else
{
format(st,256,"Bienvenue\nentrer votre identifient secret\npour vous crée un compte:");
ShowPlayerDialog(playerid,Register,DIALOG_STYLE_INPUT,"Enregistrement ",st,"Register","Annuler");
}
return 1;
}
GetName(playerid)
{
new pseudo[20];
GetPlayerName(playerid,pseudo,sizeof(pseudo));
return pseudo;
}
public OnPlayerSpawn(playerid)
{
SetPlayerMoney(playerid, stats[playerid][money]);
SetPlayerScore(playerid, stats[playerid][score]);
return 0;
}
Et je voudrais qu'a la mort Dini mette le score du joueur.
Donc j'ai ajouter
stats[playerid][score] = GetPlayerScore(playerid);
stats[playerid][money] = GetPlayerMoney(playerid);Dans le onplayerdeath mais ca ne marche pas ?
Problème ?
Merci.
-
Là, du donne juste la valeur à ta variable mais tu n'écrit pas le score dans le fichier de ton joueur.
dini_Set(st, "score", stats[playerid][score]);
dini_Set(st, "money", stats[playerid][money]);
-
Ca j'ai comprit Xartrick mais ensuite dans le OnPlayerDeath je doit mettre celà ?
stats[playerid][score] = GetPlayerScore(playerid);
stats[playerid][money] = GetPlayerMoney(playerid);Cela change la variable au score du joueurs comme ça a sa reconnexion il aurat le score de sa dernière mort ?
J'ai tester et cela ne marche pas...
-
Oui, tu fais comme cela, et ensuite, à la déconnexion du joueur, tu enregistre son score via la variable stats.
-
C'est a dire ?
-
// OnPlayerDeath
stats[playerid][score] = (GetPlayerScore(playerid) - 1);
stats[playerid][money] = (GetPlayerMoney(playerid) - 500);
// OnPlayerDisconnect
dini_Set(st, "score", stats[playerid][score]);
dini_Set(st, "money", stats[playerid][money]);
-
Donc j'ai mi cela comme tu a écrit
public OnPlayerDeath(playerid, killerid, reason)
{
stats[playerid][score] = (GetPlayerScore(playerid) - 1);
return 1;
}
public OnPlayerDisconnect
{//Ligne 153
dini_Set(st, "score", stats[playerid][score]);//Ligne 154
}
A la fin du Fs et il me retourne 2 erreurs
C:\Documents and Settings\ATHLON\Bureau\[FR] Projet's MW2\filterscripts\Register.pwn(153) : error 001: expected token: ";", but found "{"
C:\Documents and Settings\ATHLON\Bureau\[FR] Projet's MW2\filterscripts\Register.pwn(154) : error 021: symbol already defined: "dini_Set"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
2 Errors.
Pourquoi il me dit cela (je connait pas toute les eurreurs si tu pourait détailler pour que la prochaine je comprenne ?)
Merci.
-
La fonction " dini_Set " est déja difini dans ton script
-
Tu utilise le Callback OnPlayerDisconnect sans argument.
public OnPlayerDisconnect(playerid, reason)
{
dini_Set(st, "score", stats[playerid][score]);
}
-
J'ai pas comprit la ?
Juste que Din_Set est definie mais sans argument ?
-
Non, ton Callback doit obligatoirement contenir ses paramètres de base.
-
Je doit mettre Dini_set dedans donc ?
Je m'embrouille.
(je go relire les tuto x) )
Double post
J'ai beau relire je comprend pas ce que tu essaye de me dire Xartrick ?