Page 1 of 1

Likęs laikas

Posted: 2010 Nov 16 23:51
by pausil
Sveiki dar esu žalias programavime, todėl nesigauna niekaip gauti dienų iš duombazių. Bandau gauti datą kada užsiregistravo ir iki kada galioja. Tada bandau surasti skirtumą ir taip gauti dienų likutį, bet kažkodėl nelabai gaunasi...

Code: Select all

public time_left(id){    new error[128],  errno    new Handle:info = SQL_MakeDbTuple("host","dbuser","dbpass","dbname")    new Handle:sql = SQL_Connect(info, errno, error, 127)    new Handle:query    new ip_port[42], ip_tmp[32], ip[32] , port[10]    get_user_ip(0, ip_port, 41)    strtok(ip_port, ip_tmp, 31, port, 9, ':')    get_cvar_string("ip",ip,32)    new userip[32], userauthid[32], password[32], username[32]      get_user_ip(id, userip, 31, 1)    query = SQL_PrepareQuery(sql,"SELECT amx_amxadmins.regtime, amx_amxadmins.timeleft, amx_amxadmins.username FROM amx_amxadmins")            if (!SQL_Execute(query))    {        client_print(id, print_chat, "Nepavyko prisijungti prie duomenu bazes")    } else if (!SQL_NumResults(query)) {        client_print(id, print_chat, "Klaida:")    } else {                AdminCount = 0                /** do this incase people change the query order and forget to modify below */        new qcolRegtime = SQL_FieldNameToNum(query, "regtime")        new qcolTimeleft = SQL_FieldNameToNum(query, "timeleft")        new qcolIp = SQL_FieldNameToNum(query, "username")                new Regtime[44];        new Timeleft[44];        new Ip[44];         new check = getAccess(id, username, userauthid, userip, password)        while (SQL_MoreResults(query))        {            SQL_ReadResult(query, qcolIp, Ip, sizeof(username)-1);            SQL_ReadResult(query, qcolRegtime, Regtime, sizeof(Regtime)-1);            SQL_ReadResult(query, qcolTimeleft, Timeleft, sizeof(Timeleft)-1);                get_user_ip(id, userip, 31, 1)             ++AdminCount;            SQL_NextRow(query)        }         if (equal(userip, username))            {                    new LefttimeTotal[9];    new Lefttime[9];         new CurrentTime[9]     get_time("%m%d%Y",CurrentTime,8)     //format_time(Timeleft,8,"%m%d%Y")    //get_time("%d",LefttimeTotal,8)    //format_time(Regtime,8,"%m%d%Y")    format_time(LefttimeTotal,3,"%d")    format_time(Lefttime,3,"%d")    LefttimeTotal[id] = Timeleft[id] - Regtime[id];    Lefttime[id] = Timeleft[id] - CurrentTime[id];      client_print(0,3, "Jums dar liko [%s/%s] dienu.",Lefttime,LefttimeTotal)                             } else {                client_print(0,3, "Jus nerastas musu duomenu bazeje")            }           }    SQL_FreeHandle(query)    SQL_FreeHandle(sql)     return PLUGIN_HANDLED }

Re: Likęs laikas

Posted: 2010 Nov 17 00:05
by aaarnas
Patikrink kuriame kintamajame prasideda problemos. Ar negaunama iš duombazės, ar kažkas negerai sukoduota.

Beje tokia ( client_print(0,3,) client_print sintaksė neteisinga.

Re: Likęs laikas

Posted: 2010 Nov 17 08:32
by pausil
Gauna iš duombazės duomenis. Tik parenka ne tą eilutę kurią reikia ir šios eilutės blogai viską apskaičiuoja:

Code: Select all

format_time(LefttimeTotal,3,"%d")    format_time(Lefttime,3,"%d")    LefttimeTotal[id] = Timeleft[id] - Regtime[id];    Lefttime[id] = Timeleft[id] - CurrentTime[id];
Kažkodėl neapskaičiuoja. Pabandžiau išvesti ir pažiūrėti kokios nusistato reikšmės Timeleft ir Regtime, tai parenka iš duombazės paskutinės eilutės datas. Tai šitame kode vadinasi veikia tik prisijungimas prie duombazių ir šios dienos laiko gavimas.

Re: Likęs laikas

Posted: 2010 Nov 17 20:23
by newb
Tu gauni data

Code: Select all

get_time("%m%d%Y",CurrentTime,8)

Kuri nera skaicius ir bandai atimt kazka...

Code: Select all

Lefttime[id] = Timeleft[id] - CurrentTime[id]
Reikia i db irasinet data pagal ta unix time stampa (manau taip ir yra), tada plugine gauni laika pagal get_systime() ir atimi ir iseina skirtumas sekundemis, tada padalini is 60/60/24 ir iseina dienos.

Kazkada buvau padares toki dalyka, bet dabar neturiu to plugino ^^