Просмотр полной версии : [Вопрос] Время (что то типа /c 060 как на АРП). Хелп)
Всем доброго времени суток. Многие знают что на адвансе есть онлайн в /c 060 за сегодня/вчера и позавчера.
Я сделал что то типа в переменной массив pTime[3];
Тут всё хорошо, но как сделать например в рестарт что то типа такого, до рестарта в базе у одного игрока:
233,413,311 - это естественно в секундах. И как сделать что бы было так?:
0,233,413 (тоесть смещение во всех аккаунтах в право на одно число)..
- - - Добавлено - - -
Конечно объяснил от бога, ну я думаю есть представление :(
- - - Добавлено - - -
Даже я мало что понял, что написал. Поэтому напишу ещё раз со скриншотами..
Вот скриншот с БД, где 3 поля (sscanf с разделителем запятой ,)
http://imgur.com/YeYP9dd.png
273 это секунды игры за сегодня.
Как сделать, что бы при рестарте, вот это 273 перешло в право на 1 раз (после запятой).
Тоесть должно получиться что-то типа такого:
0,273,-1
Делай в pTime 2 значения.
//пример загрузки
new TimeGet[8];
cache_get_field_content(0, "pTime",TimeGet, base, 8); // base = mysql_connect
sscanf(TimeGet, "p<,>ii",pTime[1],pTime[2]);
// либо делай 3 значения с добавлением 0
new TimeGet[11];
cache_get_field_content(0, "pTime",TimeGet, base,11); // base = mysql_connect
new x;
sscanf(TimeGet, "p<,>iiii",x,pTime[0],pTime[1],pTime[2]);
Можно попробовать всё автоматизировать :)
То бишь:
1) Создай одну переменную и в неё записывай сегодняшнее время (соответственно при входе/выходе работай именно с ячейкой сегодняшнего дня).
2) В БД создай, помимо 3-х ячеек для записи времени, одну ячейку для записи даты, в которую будешь записывать дату последнего изменения значения.
3) При каждом выходе с сервера загружай дату последнего изменения и значения всех 3-х ячеек, а далее уже пойдёт формула, типа
if(сохранённая_дата == текущая_дата) //Можно обе даты разбить на 2 числа: день и месяц, и уже сверять их
{
//сохраняем в ячейку с сегодняшним временем
}
else if(текущая_дата-сохранённая_дата == 1)
{
//В столбец с позавчерашней датой сохраняем значение вчерашней, а в столбец со вчерашней сохраняем значение последней сегодняшней (не обновлённой), а в сегодняшний сохраняем текущее время
}
else if(текущая_дата-сохранённая_дата == 2)
{
//В столбец с позавчерашней датой сохраняем значение вчерашней, а в столбец со вчерашней сохраняем значение -1 (не был на сервере), а в сегодняшний сохраняем текущее время
}
else
{
//Игрок не был на сервере больше двух дней, поэтому вчерашнее и позавчерашнее время на -1, а сегодняшнее равно текущему
}
Как-то так. Ну с использованием разделителя выйдет даже проще. Просто нужно будет сначала записать все 3 значения отдельно, а потом перетусовывать переменные в нужном порядке.
Ну и если время надо будет часто отображать, то лучше тогда 3, я думаю, создать 3 переменных, как сделал изначально ты и хранить время в них. Но если ты его будешь, например, чисто в статистике показывать, то лучше подгружать его с помощью запроса, ИМХО.
Вот. Если что не понятно - спрашивай
Можно попробовать всё автоматизировать :)
То бишь:
1) Создай одну переменную и в неё записывай сегодняшнее время (соответственно при входе/выходе работай именно с ячейкой сегодняшнего дня).
2) В БД создай, помимо 3-х ячеек для записи времени, одну ячейку для записи даты, в которую будешь записывать дату последнего изменения значения.
3) При каждом выходе с сервера загружай дату последнего изменения и значения всех 3-х ячеек, а далее уже пойдёт формула, типа
if(сохранённая_дата == текущая_дата) //Можно обе даты разбить на 2 числа: день и месяц, и уже сверять их
{
//сохраняем в ячейку с сегодняшним временем
}
else if(текущая_дата-сохранённая_дата == 1)
{
//В столбец с позавчерашней датой сохраняем значение вчерашней, а в столбец со вчерашней сохраняем значение последней сегодняшней (не обновлённой), а в сегодняшний сохраняем текущее время
}
else if(текущая_дата-сохранённая_дата == 2)
{
//В столбец с позавчерашней датой сохраняем значение вчерашней, а в столбец со вчерашней сохраняем значение -1 (не был на сервере), а в сегодняшний сохраняем текущее время
}
else
{
//Игрок не был на сервере больше двух дней, поэтому вчерашнее и позавчерашнее время на -1, а сегодняшнее равно текущему
}
Как-то так. Ну с использованием разделителя выйдет даже проще. Просто нужно будет сначала записать все 3 значения отдельно, а потом перетусовывать переменные в нужном порядке.
Ну и если время надо будет часто отображать, то лучше тогда 3, я думаю, создать 3 переменных, как сделал изначально ты и хранить время в них. Но если ты его будешь, например, чисто в статистике показывать, то лучше подгружать его с помощью запроса, ИМХО.
Вот. Если что не понятно - спрашивай
Нажал спасибо, за старание, но.. либо я ты не понял, либо я :).
Мне нужно что бы это как то при рестарте дата перемещалась.
Ведь на адвансе, есть тоже такое. И там если допустим ты за сегодня играл 2 часа, и 2 дня не заходил, то будет что то типа такого.
0,0,7200 // 7200 - 2 часа
И не важно, заходил ты или нет.. Это дата как то при рестарте "передвигается"
Нажал спасибо, за старание, но.. либо я ты не понял, либо я :).
Мне нужно что бы это как то при рестарте дата перемещалась.
Ведь на адвансе, есть тоже такое. И там если допустим ты за сегодня играл 2 часа, и 2 дня не заходил, то будет что то типа такого.
0,0,7200 // 7200 - 2 часа
И не важно, заходил ты или нет.. Это дата как то при рестарте "передвигается"
Я тебе именно то и предлагаю. Только не при рестарте, а при выходе игрока совершать действия над записанным временем. Записываем текущее время и дату, а после сверяем дату последней записи данных в БД с текущей и если они не совпадают - перемещаем
Я тебе именно то и предлагаю. Только не при рестарте, а при выходе игрока совершать действия над записанным временем. Записываем текущее время и дату, а после сверяем дату последней записи данных в БД с текущей и если они не совпадают - перемещаем
Ну вот это хорошо, а надо что бы время передвигалось даже если игрок не заходил 2 дня. Как я написал выше пример.
Например сегодня играл 2 часа (7200 секунд) и стало так, в базе:
7200,0,0
А если 2 дня вообще не заходить, ну и зайти, и будет так:
0,0,7200
Вот не понимаю как так сделать.
Ну вот это хорошо, а надо что бы время передвигалось даже если игрок не заходил 2 дня. Как я написал выше пример.
Например сегодня играл 2 часа (7200 секунд) и стало так, в базе:
7200,0,0
А если 2 дня вообще не заходить, ну и зайти, и будет так:
0,0,7200
Вот не понимаю как так сделать.
Я же дал макет -_- Просто нужно теперь проследовать инструкциям и всё...
Напишу ещё раз: учёт ведёшь только СЕГОДНЯШНЕГО времени. Так же, при записи в БД, записываешь и дату (хватит записи дня и месяца), когда было внесено изменение. Теперь перед каждым новым сохранением грузишь старые данные и начинаешь сверку дат. Если они равны, значит записываешь в первую ячейку. Отличаются на 1 день - вчерашняя. Два дня - позавчерашняя. Больше двух - записываешь в сегодняшнюю, а остальные отчищаешь. Всё.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot