PDA

Просмотр полной версии : [Вопрос] Mysql r41-2 vip



Покемон
03.02.2018, 15:54
Всем доброе времени суток пользователям pro-pawn, я не так давно начал изучать mysql, и уже столкнулся с такой проблема :(
Хочу сделать вип по дням, но почему-то не загружается дата вип аккаунта. Хотел бы у вас узнать где тут моя ошибка!?
И пожалуйста, если не трудно то с объяснениями так как хочу в будущим не допускать таких ошибок!
Выдача вип аккаунта:
if(!(1 < days < 365)) return SendClientMessage(playerid, COLOR_LIGHTRED, "Не больше 365 и не меньше 1 дня(ей)!");
PlayerInfo[playerid][pDonate] -= days*VipCost;
PlayerInfo[playerid][pVip] = 1;
format(stringEA,sizeof(stringEA),"INSERT INTO `vips` (`Nick`, `UnVipDate`, `VipDate`, `VipTime`) VALUES ('%s',NOW() + INTERVAL %d DAY, NOW(),'%d')",PlayerInfo[playerid][pName],days,gettime() + (86400*days));
mysql_tquery(mysql_connection, stringEA, "","");
В авторизацию вставил так:format(stringEA, sizeof(stringEA), "SELECT (UNIX_TIMESTAMP(`UnVipDate`)) AS `time` FROM `vips` WHERE `Nick` = '%s'", PlayerInfo[playerid][pName]);
mysql_tquery(mysql_connection, stringEA, "CheckVip", "d", playerid);
Далее сделал так:public CheckVip(playerid)
{
new stringEA[200];
new time;
if(time-gettime() < 0)
{
format(stringEA, sizeof(stringEA), "DELETE FROM `vips` WHERE `Nick` = '%s'",PlayerInfo[playerid][pName]);
mysql_tquery(mysql_connection, stringEA, "","");
PlayerInfo[playerid][pVip] = 0;
ShowPlayerDialog(playerid,11111,DIALOG_STYLE_MSGBOX,"{FFFFFF}Внимание!","{FFFFFF}Время вашего VIP аккаунта истекло!\nВипка была снята!","Хорошо","");
return true;
}
else
{
format(stringEA, sizeof(stringEA), "\
{FFFFFF}Добро пожаловать VIP игрок!\n\
Дата выдачи VIP: %s\n\
Дата снятия VIP: %s");
ShowPlayerDialog(playerid,11111,DIALOG_STYLE_MSGBOX,"{FFFFFF}Внимание!",stringEA,"Хорошо","");
}
return true;
}
Пишет постоянно что вип аккаунт снят, хотя дни его действия не закончились (

Daniel_Cortez
04.02.2018, 01:26
В CheckVip переменной time не присвоено никакое значение, из-за чего она по умолчанию равна нулю. Соответственно, дальше условие (time-gettime() < 0) всё время будет выдавать false.
Также следует добавить в данные игрока (pInfo) поле под время истечения срока VIP-аккаунта, как в таблице vips. Именно оттуда и следует брать время в CheckVip (вы же не собираетесь грузить БД запросами при кадой проверке VIP?)