Что касается заданий и их реализации то вариантов может быть много.
Тут надо что бы вы сами понимали чего хотите и должен быть какой то план (ТЗ). За вас это делать ни кто не будет.
Вам дадут только общую картину.
Вы же когда идете например в магазин то уже предварительно знаете что нужно купить, в какой магазин пойдете и как будете до него добираться. Так же и тут нужно понимать какие именно задания будут, как и где они будут выполняться, представление логики их реализации (если все будете делать сами) и далее получаете конечный результат.
Что касается сброса заданий раз в день или неделю то самый оптимальный для вас это крон (Планировщик задач). Прописать в файле нужный код который будет выполняться в нужное время, или городить велосипед и делать это средствами PHP.
Касаемо работы с временем то это пожалуй самое легкое в изучении.
Просто нужно понять как правильно с ними работать.
Например если день или номер недели больше чем нужно выполнить нужную задачу. Опять же это не совсем практично делать на чистом PHP так как при заходе пользователя на сайт будет выполняться кусок код который например прописан в корневом файле движка. ТО страница будет грузится до тех пор пока код полностью не сделает свое дело ежели крон это будет делать в фоновом режиме и на пользователя это ни как не повлияет.
Можно конечно и в коде сделать все в фоне, но пока лучше выбрать более простой вариант на первое время а потом переделать не долго.
________ посл. ред. 29.11.2021 в 04:34; всего 2 раз(а); by DenSBK
213731682 (29.11.2021 в 00:17) faerkot, а как с помощью PHP обнулять здания то есть статус "1" на "0" повде 00:00 ? Не очень с временем умею работать
Если тебе необходимо обнулять задания после 00:00 в новый день (а новый день и настает в 00:00), то тут два варианта:
1. Вариант: В таблицу statistic добавить ещё одно поле 'data' - в нем хранить дату, когда игрок получил награду в Unix формате (функция time())
- Потом на своих страницах сравнить две даты (текущее время и то, которое в таблице). Сравнивать необходимо переведя даты в привычный цифровой формат (день, месяц, год), например с помощью getdate() или date(). И если день, месяц и год не равны, то обнулить статистику с 1 на 0. В принципе, тогда можно будет и вовсе удалить поле 'status', т.к у тебя будет проверка по дате получения. Просто при получении подарка обновлять дату и всё.
2. Вариант: Обновлять это всё с помощью Crontab, но если ты не умеешь им пользоваться и не знаешь что это такое, то пока лучше заняться первым вариантом.
P.S Не слушай того валенка, который написал, что это можно сделать через массивы или текстовые файлы - так нормальные люди не делают. Текстовые файлы не предназначены для хранения динамической информации, которая часто изменяется.
faerkot, Ну почему же, в массивах можно хранить процесс выполнения заданий. Например убил столько то врагов то выполнено на столько то процентов. Это к примеру. Или убил столько а надо столько и по завершению забираешь награду или дает автоматом, тут уж как фантазия решит.
А данные разумеется писать куда то в БД. И каждый день это все обнулять. Лучше всего использовать крон на первых этапах. Самое простое. Прописать путь до файла и выставить интервал выполнения, сложного там ни чего нет по сути. В выполняемом файла прописать подключение к БД и запрос на сброс счетчиков в таблице и полях. Крон есть в каждой панели управления если что.
DenSBK, Можно, но я не рекомендую. Вообще использовать массивы в БД - это плохой тон, который означает, что неправильно спроектирована структура таблиц. Вдруг придется произвести поиск по этому массиву в БД и выбрать пользователей с определенным ключом или условием? Это усложняет поиск. Кроме того, изменить что-то в массиве средствами Mysql не получится без php, например увеличить количество убитых мобов (param = param + 1). Вместо массива должна использоваться дополнительная таблица и при запросах делается JOIN, LEFT JOIN и т.д. Например, тот же процесс выполнения - в основной таблице хранишь ключ от текущего задания, дату его принятия, дату, когда он истечёт, статус выполнения, статус доклада и т.д, во второй таблице хранишь ключ выполнения, количество убитых мобов и прочие условия, исходя из которых обновляешь данные первой таблицы. Если уж пришлось хранить массив, то необходимо сериализовать массив в обычную строку с помощью serialize, а на выходе расшифровать, тогда не придется эксплодить.
Ну, а если процесс выполнения вообще не так сильно играет роли и он временный, то его можно массивом запихать в memcached или на крайняк в сессию и хранить там.
Для размышления: Ссылка раз Ссылка два Ссылка три
faerkot, Я не говорил что нужно хранить данные в бд в виде массива.
А про то что данные хранить в бд в нужно талице и ячейках. А массив использовать для того что бы проверять процесс выполнения заданий. Разумеется если данные постоянны и награды с требованиями постоянные и не меняются.
213731682, Можно реализовать к примеру как в 5 посте + еще намного проще + пост 10 адекватный вариант, далее уже два чела спорят как уложить красиво говнецо.
А хранят в файлах только временные данные и то редко, сейчас не то время что бы такие гусли производить.