mysql_function_query(1,"SELECT * FROM `accounts` WHERE `Ban`>'0'",true,"Test","");
forward Test();
public Test()
{
new r,f;
cache_get_data(r,f);
if(r)
{
// code
}
return 1;
}
Храним время бана и срок. Храним дату разбана. |
В обоих случаях если я не ошибаюсь придется использовать 3 переменных? (год, месяц, день, даже 4 - + время)
|
Для вас наверно будет шоком, но все системы в мире работают с датой как с одним целым числом!
UNIX-время |
// При бане:
Player[id][pDBan]=getdate()+days;
// Проверка:
if(Player[id][pDBan]>getdate()){Kick(id);return 1;}
// Остается конвертирование дней в дату, и то, если будет 2014 - толку 0, все забаненные разбанятся...
stock date(timestamp, _form = 0) // originally by pen_TheGun, edited by RealCop228 { /* ~ convert a Timestamp to a Date. ~ 10.07.2009 date( 1247182451 ) will print >> 09.07.2009-23:34:11 date( 1247182451, 1) will print >> 09/07/2009, 23:34:11 date( 1247182451, 2) will print >> July 09, 2009, 23:34:11 date( 1247182451, 3) will print >> 9 Jul 2009, 23:34 * by RealCop228: date( 1247182451, 4) will print >> July 09, 2009 * by RealCop228: date( 1247182451, 5) will print >> 23:34 */ new year = 1970, day = 0, month = 0, hour = 0, mins = 00, sec = 0; new days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; new names_of_month[12][10] = {"January","February","March","April","May","June","July","August","September","October","November","December"}; new returnstring[32]; while(timestamp>31622400) { timestamp -= 31536000; if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp -= 86400; year++; } if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) days_of_month[1] = 29; else days_of_month[1] = 28; while(timestamp>86400) { timestamp -= 86400, day++; if(day==days_of_month[month]) day=0, month++; } while(timestamp>60) { timestamp -= 60, mins++; if( mins == 60) mins=00, hour++; } sec=timestamp; switch(_form) { case 1: format(returnstring, 31, "%02d/%02d/%d %02d:%02d:%02d", day+1, month+1, year, hour, mins, sec); case 2: format(returnstring, 31, "%s %02d, %d, %02d:%02d:%02d", names_of_month[month],day+1,year, hour, mins, sec); case 3: format(returnstring, 31, "%d %c%c%c %d, %02d:%02d", day+1,names_of_month[month][0],names_of_month[month][1],names_of_month[month][2], year,hour,mins); case 4: format(returnstring, 31, "%s %02d, %d", names_of_month[month],day+1,year); // by RealCop228 case 5: format(returnstring, 31, "%02d:%02d", hour,mins); // by RealCop228 default: format(returnstring, 31, "%02d.%02d.%d-%02d:%02d:%02d", day+1, month+1, year, hour, mins, sec); } return returnstring; }
Просто при бане берите текущий gettime(), который вернет unix время в настоящий момент, прибавляйте к нему длительность бана в секундах и сохраняйте в одну переменную. При логине сверяйте то, что сохраните, с gettime() логина, если игрок попытается войти раньше срока разбана - gettime при логине будет меньше чем в переменной, если больше - время бана истекло.
|
SELECT Ban as unix_date, FROM_UNIXTIME(Ban, '%Y %D %M %h:%i:%s %x') as formatted_date
FROM accounts
WHERE ip = '*.*.*.*'
LIMIT 1
unix_date|formatted_date
1196440219|'2007 30th November 10:30:59 2007'
Конвертировать дату в абсолютно любой формат может мускул.
PHP код:
PHP код:
|
ЗЫ один совет: никогда не используете в именах таблиц, баз данных и столбцов символы в верхнем регистре! |
Спасибо, только не понял как использовать ._. А именно запись в бд и получение. Буду признателен за помощь.
|
а что с ней не так, это обычный символ?
потому что не будет проблем с мультиплатформенностью. |
"SELECT `Ban` as 11122211, FROM_UNIXTIME(Ban, '%Y %D %M %h:%i:%s %x') as formatted_date FROM `accounts` WHERE `Name`='%s'",Name(playerid)
forward Test(p);
public Test(p)
{
new r,f;
cache_get_data(r,f);
if(r)
{
//
}
return 1;
}
$result = mysql_query("SELECT FROM_UNIXTIME(1255033470)");
while($row=mysql_fetch_array($result))
{
echo "<tr>";
echo "<td align='center' width='200'>" . $row["FROM_UNIXTIME(1255033470)"] . "</td>";
echo "</tr>";
}
$result = mysql_query("SELECT FROM_UNIXTIME(1255033470) as date");
while (($row = mysql_fetch_array($result)) !== FALSE) {
echo '<tr><td align="center" width="200">' . $row['date'] . '</td></tr>';
}
format(SQL_MAX,300,"SELECT `BanDate` as unix_date, FROM_UNIXTIME(`BanDate`, '%Y %D %M %h:%i:%s %x') as formatted_date FROM `accounts` WHERE `Name` = '%s' LIMIT 1",Name(p));
mysql_function_query(1,SQL_MAX,true,"OnTest", "i", p);
forward OnTest(p);
public OnTest(p)
{
new r,f;
cache_get_data(r,f,1);
if(r)
{
new time[32];
cache_get_row(0, 34, time);
format(STR,64,"Result: %s",time),Message(p,-1,STR);
}
else print("Error..");
return 1;
}
print("Error..");
Passing query SELECT `BanDate` as unix_date, FROM_UNIXTIME(`BanDate`, 'Y D M 4D:: ') as formatted_date FROM `accounts` WHERE `Name` = '' LIMIT 1 | i ProcessQueryThread(OnTest) - Query was successful. (SELECT `BanDate` as unix_date, FROM_UNIXTIME(`BanDate`, 'Y D M 4D:: ') as formatted_date FROM `accounts` WHERE `Name` = '' LIMIT 1) ProcessQueryThread(OnTest) - Data caching enabled. CMySQLHandler::StoreResult() - Result was stored. CMySQLHandler::FreeResult() - Result was successfully free'd. CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick() OnTest(i) - Threaded function called. >> cache_get_data( Connection handle: 1 ) ProcessTick() - The cache has been cleared. |
WHERE `Name` = ''