Page 1 of 3

Sesija

Posted: 2013 May 28 11:58
by alfre
Kaip padaryti,kad sesija butu issaugota,jeigu mapas keiciasi?
Pvz : As prisijungiau,session = 1,mapas keiciasi,session = 1,o kai disconnect,session = 0.
bandziau mysql daryt bet neisejo.
gal galima butu mysql pavyzdziu?

Code: Select all

public client_putinserver(client){       if(is_user_bot(client))     return;    new Data[1]    Data[0] = client     set_task(60.0, "Check" , client, _, _, "b")    get_user_authid(client,iddd,31)    new ip[16], query[256], data[1];    get_user_ip(client, ip, charsmax(ip), 1);    static szQuery[ 128 ], iData[ 1 ];     formatex( szQuery, 127, "SELECT `Session` FROM `%s` WHERE ( `STEAMID` = '%s' );", TABLE, iddd[client]);     iData[ 0 ] = client;    SQL_ThreadQuery(Tuple, "QuerySelectData", szQuery, iData, 1 ); }public QuerySelectData( iFailState, Handle:query, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime ) {     if(iFailState == TQUERY_CONNECT_FAILED)    else if(iFailState == TQUERY_QUERY_FAILED)    new client = iData[0];    new ColPts = SQL_FieldNameToNum(query, "Session");            while(SQL_MoreResults(query))         {            session[client] = SQL_ReadResult(query, ColPts);            client_print(0,print_chat,"%d",session[client])            SQL_NextRow(query)        }    if(session[client] == 0)    {    new data[1];    get_user_authid(client,iddd,31)    session[client] = 1;    data[0] = client;    formatex(query, charsmax(query), "SELECT * FROM %s WHERE STEAMID = '%s'", TABLE, iddd[client]);    SQL_ThreadQuery(Tuple, "OnCheckInfo", query, data, sizeof data);    }}

Re: Sesija

Posted: 2013 May 28 16:48
by aaarnas
Visų pirma:

Code: Select all

get_user_authid(client,iddd,31)
Čia iddd naudojamas kaip paprastas masyvas.

Code: Select all

formatex( szQuery, 127, "SELECT `Session` FROM `%s` WHERE ( `STEAMID` = '%s' );", TABLE, iddd[client]);
Čia jau kaip 2 dimensijų masyvas.

O tau būtent į mysql reikia rašyti, ar galima ir serveryje laikyti sesijos duomenis?
Esmė tada tokia:
client_putinserver - padarom session 1
client_disconnect - padarom session 0

Jei aptinkamas žemėlapio keitimas, tai client_disconnect turi būti neiškviečiamas (blokuojamas su kintamuoju).

Dabar klausimas, kodėl tau būtent reikia duomenų bazėje išlaikyti, kad session yra 1 tam žaidėjui žemėlapio keitimo metu?
Gali būti toks dalykas, kad keisis žamėlapis, pradės siųsti žemėlapį žaidėjui ir jis atsijungs. Nesi garantuotas, kad žaidėjas bus serveryje po žemėlapio keitimo.

Todėl nesuprantu kuo yra blogas paprastas metodas, kad visada per putinserver pažymim, kad jis yra, o per disconnect išvalom?

Re: Sesija

Posted: 2013 May 28 17:02
by alfre
Jei aptinkamas žemėlapio keitimas, tai client_disconnect turi būti neiškviečiamas (blokuojamas su kintamuoju).
man reikia,kad client_putinserver neiskvieciamas,jeigu session == 1 ir jeigu mapas keiciasi.
kaip padaryti?nes mapas keiciasi,o plugina is naujo krauna,ir nustato 1 is naujo.del to manau reikia issaugoti

Re: Sesija

Posted: 2013 May 28 17:25
by Tetusis

Code: Select all

public client_putinserver(id) {     // fix for the invalid tuple error at mapchange, only a fast fix now    if (sql_connection == Empty_Handle) {        set_task(2.0, "client_putinserver", id)        return 1    }        //kazkas vyksta     return 0} 
cia is amx bans

Re: Sesija

Posted: 2013 May 28 17:57
by alfre
man ne del erroru reikia.bet sitas pravers

Re: Sesija

Posted: 2013 May 28 18:03
by Tetusis
tai uztektu paprasciausio bool tada jei gerai supratau tema.

Re: Sesija

Posted: 2013 May 28 18:23
by alfre
-.-.taigi,jeigu rr mapas,viskas dingsta....

Re: Sesija

Posted: 2013 May 28 19:04
by aaarnas
Gerai, žiūrėk, dabar ką nori padaryti ir kodėl tau reikia tos sesijos? Nes kažkas man čia ne taip. Nes arba kažką bandai padaryti sudėtingai arba nepagavau esmės ką norima padaryti.

Kai bus aišku, tada galėsiu pasiūlyti geriausią variantą.

Re: Sesija

Posted: 2013 May 28 19:23
by alfre
as noriu taip padaryti :
Prisijungimu istorija.Pvz prisijungiau pirma karta,tai i mysql lentele irasys pirma prisijungima 2013-05-28 20:20,o kai atsijungiu,tarkim 2013-05-28 20:22.Bet kai pakeiti mapa,neuzskaito kaip atsijungimo.Ir kartojasi
Pvz prisijungiau pirma karta,tai i mysql lentele irasys pirma prisijungima 2013-05-28 20:20
.
noriu kad taip butu : kol is serverio neatsijungi,nesvarbu ar mapas pakeistas ar ne,neirasytu i mysql lentele pirmo prisijungimo.

Re: Sesija

Posted: 2013 May 28 20:36
by aaarnas
Supratau, bet ką darysi, jei keičiasi žemėlapis ir žaidėjas atsijungia tuo momentu?
Kai pasikrauna žemėlapis, tai kažkokį laiko tarpą palauki ir jei jis neprisijungę, tai užskaitai atjungimą ? Logiškiausia manau būtų.