PDA

Просмотр полной версии : [Вопрос] Время (что то типа /c 060 как на АРП). Хелп)



StevenH
23.01.2016, 20:11
Всем доброго времени суток. Многие знают что на адвансе есть онлайн в /c 060 за сегодня/вчера и позавчера.
Я сделал что то типа в переменной массив pTime[3];

Тут всё хорошо, но как сделать например в рестарт что то типа такого, до рестарта в базе у одного игрока:
233,413,311 - это естественно в секундах. И как сделать что бы было так?:

0,233,413 (тоесть смещение во всех аккаунтах в право на одно число)..

- - - Добавлено - - -

Конечно объяснил от бога, ну я думаю есть представление :(

- - - Добавлено - - -

Даже я мало что понял, что написал. Поэтому напишу ещё раз со скриншотами..
Вот скриншот с БД, где 3 поля (sscanf с разделителем запятой ,)
http://imgur.com/YeYP9dd.png

273 это секунды игры за сегодня.
Как сделать, что бы при рестарте, вот это 273 перешло в право на 1 раз (после запятой).
Тоесть должно получиться что-то типа такого:
0,273,-1

Роуди.
23.01.2016, 20:12
DELETED.

seriu
23.01.2016, 20:37
Делай в 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]);

DeimoS
23.01.2016, 20:40
Можно попробовать всё автоматизировать :)
То бишь:
1) Создай одну переменную и в неё записывай сегодняшнее время (соответственно при входе/выходе работай именно с ячейкой сегодняшнего дня).
2) В БД создай, помимо 3-х ячеек для записи времени, одну ячейку для записи даты, в которую будешь записывать дату последнего изменения значения.
3) При каждом выходе с сервера загружай дату последнего изменения и значения всех 3-х ячеек, а далее уже пойдёт формула, типа

if(сохранённая_дата == текущая_дата) //Можно обе даты разбить на 2 числа: день и месяц, и уже сверять их
{
//сохраняем в ячейку с сегодняшним временем
}
else if(текущая_дата-сохранённая_дата == 1)
{
//В столбец с позавчерашней датой сохраняем значение вчерашней, а в столбец со вчерашней сохраняем значение последней сегодняшней (не обновлённой), а в сегодняшний сохраняем текущее время
}
else if(текущая_дата-сохранённая_дата == 2)
{
//В столбец с позавчерашней датой сохраняем значение вчерашней, а в столбец со вчерашней сохраняем значение -1 (не был на сервере), а в сегодняшний сохраняем текущее время
}
else
{
//Игрок не был на сервере больше двух дней, поэтому вчерашнее и позавчерашнее время на -1, а сегодняшнее равно текущему
}
Как-то так. Ну с использованием разделителя выйдет даже проще. Просто нужно будет сначала записать все 3 значения отдельно, а потом перетусовывать переменные в нужном порядке.
Ну и если время надо будет часто отображать, то лучше тогда 3, я думаю, создать 3 переменных, как сделал изначально ты и хранить время в них. Но если ты его будешь, например, чисто в статистике показывать, то лучше подгружать его с помощью запроса, ИМХО.
Вот. Если что не понятно - спрашивай

StevenH
23.01.2016, 20:46
Можно попробовать всё автоматизировать :)
То бишь:
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 часа
И не важно, заходил ты или нет.. Это дата как то при рестарте "передвигается"

DeimoS
23.01.2016, 21:23
Нажал спасибо, за старание, но.. либо я ты не понял, либо я :).

Мне нужно что бы это как то при рестарте дата перемещалась.
Ведь на адвансе, есть тоже такое. И там если допустим ты за сегодня играл 2 часа, и 2 дня не заходил, то будет что то типа такого.
0,0,7200 // 7200 - 2 часа
И не важно, заходил ты или нет.. Это дата как то при рестарте "передвигается"

Я тебе именно то и предлагаю. Только не при рестарте, а при выходе игрока совершать действия над записанным временем. Записываем текущее время и дату, а после сверяем дату последней записи данных в БД с текущей и если они не совпадают - перемещаем

StevenH
23.01.2016, 21:29
Я тебе именно то и предлагаю. Только не при рестарте, а при выходе игрока совершать действия над записанным временем. Записываем текущее время и дату, а после сверяем дату последней записи данных в БД с текущей и если они не совпадают - перемещаем

Ну вот это хорошо, а надо что бы время передвигалось даже если игрок не заходил 2 дня. Как я написал выше пример.
Например сегодня играл 2 часа (7200 секунд) и стало так, в базе:

7200,0,0

А если 2 дня вообще не заходить, ну и зайти, и будет так:

0,0,7200

Вот не понимаю как так сделать.

DeimoS
23.01.2016, 21:39
Ну вот это хорошо, а надо что бы время передвигалось даже если игрок не заходил 2 дня. Как я написал выше пример.
Например сегодня играл 2 часа (7200 секунд) и стало так, в базе:

7200,0,0

А если 2 дня вообще не заходить, ну и зайти, и будет так:

0,0,7200

Вот не понимаю как так сделать.

Я же дал макет -_- Просто нужно теперь проследовать инструкциям и всё...
Напишу ещё раз: учёт ведёшь только СЕГОДНЯШНЕГО времени. Так же, при записи в БД, записываешь и дату (хватит записи дня и месяца), когда было внесено изменение. Теперь перед каждым новым сохранением грузишь старые данные и начинаешь сверку дат. Если они равны, значит записываешь в первую ячейку. Отличаются на 1 день - вчерашняя. Два дня - позавчерашняя. Больше двух - записываешь в сегодняшнюю, а остальные отчищаешь. Всё.