Wysłany: 2016-12-29, 18:35
ptstruck
Wiek: 30 Na forum: 3510 dni Posty: 9
Witam
Mam problem z pobieraniem pieni?dzy z bazy danych,
tj. pieni?dze przy wychodzeniu z serwera zapisuj? si? do niej, ale przy wchodzeniu si? resetuj?.
Gdy usun??em funkcj? ResetPlayerMoney(playerid); przy wchodzeniu na serwer pieni?dze si? ju? nie usuwa?y, ale mno?y?y za ka?dym razem x2.
O co mo?e chodzi??
Wysłany: 2016-12-29, 18:56
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
Je?li zapisujesz ilo?? pieni?dzy to mo?esz resetowa? w dialogu logowania, a p??niej po wczytaniu przypisywa? graczowi.
Mo?e zamiast przypisywa? do tablicy w kt?rej przechowujesz ilo?? pieni?dzy to j? dodajesz i to powoduje ten problem
Bez kodu ci??ko cokolwiek powiedzie?.
Wysłany: 2016-12-29, 19:03
ptstruck
Wiek: 30 Na forum: 3510 dni Posty: 9
Nie jestem pewien czy o to chodzi ;v
Kod: stock CheckClient(playerid)
{
new string2[128];
format(string2, sizeof(string2), "select id, score, cash, skin, visits, color from gd_players where nick = '%s'", pInfo[playerid][player_name]);
mysql_query(string2);
mysql_store_result();
if(mysql_num_rows() == 0)return false;
mysql_fetch_row(string2, "|");
mysql_free_result();
sscanf(string2, "p<|>dddddd", pInfo[playerid][player_id], pInfo[playerid][player_score], pInfo[playerid][player_cash], pInfo[playerid][player_skin], pInfo[playerid][player_visits], pInfo[playerid][player_color]);
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, pInfo[playerid][player_cash]);
SetPlayerScore(playerid, pInfo[playerid][player_score]);
SetPlayerSkin(playerid, pInfo[playerid][player_skin]);
SetPlayerColor(playerid, pInfo[playerid][player_color]);
pInfo[playerid][player_register] = true;
pInfo[playerid][player_logged] = false;
return true;
}
Wysłany: 2016-12-29, 19:21
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
Tutaj wychodzi ?e wszystko jest ok. Podaj tre?? callbacka OnPlayerConnect.
Wysłany: 2016-12-29, 19:28
ptstruck
Wiek: 30 Na forum: 3510 dni Posty: 9
Prosz? bardzo
Kod: {
playerSession[playerid] = GetTickCount();
if (handlePlayers < playerid)
handlePlayers = playerid;
//------------------------------------------------------
TextDrawHideForPlayer(playerid, PunktyZaDrift[playerid]);
TextDrawHideForPlayer(playerid, PieniadzeZaDrift[playerid]);
TextDrawSetString(PunktyZaDrift[playerid], " ");
TextDrawSetString(PieniadzeZaDrift[playerid], " ");
PlayerUseDriftCounter[playerid] = 1;
PlayerMoney[playerid] = 0;
PlayerScore[playerid] = 0;
PlayerPositionX[playerid] = 0.0;
PlayerPositionY[playerid] = 0.0;
PlayerPositionZ[playerid] = 0.0;
KillTimer(TimerGracza[playerid]);
//------------------------------------------------------
SavePlayer(playerid);
Enum_Clean(pInfo[playerid], enum_pInfo);
pInfo[playerid][player_connectedupdate] = gettime();
new color = random(255*255*255);
SetPlayerColor(playerid, color);
pInfo[playerid][player_color] = color;
new data[32];
GetPlayerName(playerid, data, sizeof(data));
mysql_real_escape_string(data, pInfo[playerid][player_name]);
GetPlayerIp(playerid, data, sizeof(data));
mysql_real_escape_string(data, pInfo[playerid][player_ip]);
if(CheckClient(playerid))
{
ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "›Login", "Witaj", "Dalej", "Kick");
}
Wysłany: 2016-12-29, 19:34
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
Masz SavePlayer(playerid); podaj tre?? tego callbacka/stocka, bo jestem ciekaw czy on nie s?u?y do zapisywania danych do konta.
Wysłany: 2016-12-29, 19:43
ptstruck
Wiek: 30 Na forum: 3510 dni Posty: 9
Oto i on
Kod: stock SavePlayer(playerid)
{
if(pInfo[playerid][player_id])
{
new time = gettime() - pInfo[playerid][player_connectedupdate];
if(time < 0) time = 0;
new string2[256];
format(string2, sizeof(string2), "update gd_players set score=%d, cash=%d, skin=%d, online=online+%d, color=%d where id=%d", GetPlayerScore(playerid), GetPlayerMoney(playerid), pInfo[playerid][player_skin], time, pInfo[playerid][player_color], pInfo[playerid][player_id]);
mysql_query(string2);
pInfo[playerid][player_connectedupdate] = gettime();
}
}
Wysłany: 2016-12-29, 19:46
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
Tak jak my?la?em s?u?y do zapisu. Usu? SavePlayer(playerid); z callbacka OnPlayerConnect.
Ostatnio zmieniony przez WWilk1 2016-12-29, 20:06, w całości zmieniany 1 raz
Wysłany: 2016-12-29, 19:59
ptstruck
Wiek: 30 Na forum: 3510 dni Posty: 9
usuwaj?c SavePlayer(playerid); z OnPlayerConnect nic si? nie zmieni?o, jakie s? jeszcze mo?liwo?ci?
Wysłany: 2016-12-29, 20:23
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
Podaj tre?? dialogu DIALOG_LOG. W stock CheckClient(playerid) masz Pawn if( mysql_num_rows () == 0 )return false ; tam te? powinno si? zerowa? bufor skoro zamykasz callback. Powinno tak wygl?da?
Pawn if( mysql_num_rows () == 0 )
{
mysql_free_result ();
return false ;
}
Wysłany: 2016-12-29, 20:41
ptstruck
Wiek: 30 Na forum: 3510 dni Posty: 9
znowu brak zmian ;/
dialog log rozumiem to?
Kod:
case DIALOG_LOG:
{
if(!response) Kick(playerid);
if(!inputtext[0]){
ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "›", "{53A9FF}____________________________________________________\n\n{FFFFFF}Witaj na {FFA346}serwerze xxx!\n{FF2020}Poda?e? b??dne has?o\n{FFFFFF}Aby wej?? na serwer musisz poda? has?o:\n\n{53A9FF}____________________________________________________\n\n", "Dalej", "Kick");
return true;
}
if(!PasswordCorrect(inputtext))
{
ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "›", "{53A9FF}____________________________________________________\n\n{FFFFFF}Witaj na {FFA346}serwerze xxx!\n{FF2020}Poda?e? b??dne has?o\n{FFFFFF}Aby wej?? na serwer musisz poda? has?o:\n\n{53A9FF}____________________________________________________\n\n", "Dalej", "Kick");
return true;
}
new password[34];
mysql_real_escape_string(inputtext, password);
new string2[94];
format(string2, sizeof(string2), "select 1 from gd_players where id=%d and password = md5(md5('%s'))", pInfo[playerid][player_id], password);
mysql_query(string2);
mysql_store_result();
if(mysql_num_rows() == 0)
{
mysql_free_result();
ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "›", "Poda?e? b??dne has?o\nTwoje konto jest zarejestrowane. \nAby gra? dalej musisz si? zalogowa? ", "Dalej", "Kick");
return true;
}
mysql_free_result();
SendClientMessage(playerid, 0xFFCCDDFF, " * Zosta?es zalogowany pomyslnie.");
format(string2, sizeof(string2), "update gd_players set visits=visits+1 where id=%d", pInfo[playerid][player_id]);
mysql_query(string2);
pInfo[playerid][player_logged] = true;
}
Wysłany: 2016-12-29, 21:15
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
My?la?em ?e w dialogu logowania drugi raz wczytujesz, ale jednak nie. Nie polecam Ci wczytywa? danych przed poprawnym zalogowaniem si? do konta. Przez wczytanie wszystkich danych w CheckClient(playerid) mo?e osoba omijaj?ca dialog to wykorzysta? na gre na czyim? koncie.
Wstaw printf("Krok 1: %d", GetPlayerMoney(playerid)); w kilku miejscach(OnPlayerConnect, logowaniu, OnPlayerSpawn)zmieniaj?c w tre?ci cyfre, a wtedy logi powiedz? Ci co gdzie ?le zrobi?e?.
Wysłany: 2016-12-29, 21:33
ptstruck
Wiek: 30 Na forum: 3510 dni Posty: 9
Kod: case DIALOG_LOG:
{
printf("Krok 3: %d", GetPlayerMoney(playerid));
if(!response) Kick(playerid);
Kod: public OnPlayerConnect(playerid)
{
printf("Krok 1: %d", GetPlayerMoney(playerid));
Kod: public OnPlayerSpawn(playerid)
{
printf("Krok 2: %d", GetPlayerMoney(playerid));
for (new i = 0; i < MAX_TD; i++)
co? w ten dese?? wy?o?y?e? mnie tym poleceniem tak szczerze ;/
je?li dobrze wstawi?em, to:
[21:21] Krok 2: 0
[21:21] Krok 3: 0
[21:21] Krok 1: 0
Tagi: wczytywanie :: pieniędzy :: bazy :: danych
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: