Показать сообщение отдельно
Непрочитано 02.06.2011, 11:11   #4
Аватар для FriendlyGhost
Пользователь

По умолчанию Re: Период олимпиады

Попробую объяснить примитивный способ, которым сам пользуюсь, не знаю подойдет ли для твоей сборки.
Суть такова - у меня в базе есть табличка Olympiad_data, в ней соответственно столбец Olympiad_end, там ставится число что-то вроде 1308510200000 (как выяснил опытным путем - это количество милисекунд от 01.01.1970, хз что за дата и почему она берется как отсчет ) .
Чтобы вычислить, к примеру время 00:00 между воскресеньем и понедельником, я взял дату осады 20:00 этого воскресенья (она тоже в таблицах пишется таким же громадным числом например 1306915200000), затем прибавил к ней 4 часа (это 14400000 милисек) и при выключенном сервере заменил свое число в столбике Olympiad_end с 1308510200000 на 1306929600000.
Ну и теперь, каждый раз после обновления героев, я просто прибавляю к этому числу 1306929600000 7 дней (т.е. 604800000 milis) и вписываю в этот столбик при выключенном серве.


Для удобства можно сделать автоматический скрипт, но я сам тока учусь всему этому и еще руки не дошли. Но представляю это себе примерно так:
Сперва нужно создать новую табличку, например Oly_dates со столбиком Date, куда будет записываться прошлое число смены героев, чтобы каждый раз его не записывать вручную:
CREATE TABLE `Oly_dates` (
`date` int(20) NOT NULL default '0',
PRIMARY KEY (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `Oly_dates` VALUES ('1306929600000');
Затем сделать скрипт (тут я уже не ручаюсь за написанное, пишу чтобы знающие люди подсказали и доработали мою идею, если найдут время , т.к. пишу по аналогии с другим скриптом и сам не все понимаю) :
$result = mysql_query("SELECT MAX(`date`)+604800000 AS `id` FROM `Oly_dates`");
$row = mysql_fetch_assoc($result);
$newdate = $row['id'];
mysql_query("UPDATE `Olympiad_data` SET `Olympiad_end` = ".$newdate." ;");
mysql_query("INSERT INTO `Oly_dates` (`date`) VALUES ('".$newdate."')");

В итоге по задумке дата olympiad_end в табличке olympiad_data должна замениться на прошлую+неделя и продублироваться в табличку oly_dates, чтобы потом уже к ней, как последней, прибавлять опять неделю.

То что выделено жирным шрифтом проверил лично, работало на сборках L2jserver и подобных, за остальные не ручаюсь, прошу отписаться разбирающихся в подобных вещах людей и по-возможности помочь реализовать.
FriendlyGhost вне форума Ответить с цитированием