Ачивки (достижения)
| |
Habilis | Дата: Среда, 02 Апреля 2014, 19:46 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Всем привет кто меня не знает, Меня зовут Хабиля, форум где я раньше обитал загнулся( И я сменил место обитания.
Так вот свой первый день на форуме решил начать с того что напишу тему про Ачивки в любых проектах. Достижения приносят не мало азарта в игровой процесс, а реализуются очень просто в любых проектах. Я решил реализовать, а тему пишу в формате заметки разработчика.... (Хабиля даже не знает что это такое) И так что ЙА думаю,
ну как-то так....
Код CREATE TABLE IF NOT EXISTS `achievement` ( `acId` int(11) NOT NULL AUTO_INCREMENT, `acName` varchar(50) NOT NULL, `acDesc` varchar(100) DEFAULT NULL, `acPicture` varchar(100) NOT NULL, PRIMARY KEY (`acId`) );
CREATE TABLE IF NOT EXISTS `user` ( `userId` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(40) NOT NULL, PRIMARY KEY (`userId`) );
CREATE TABLE IF NOT EXISTS `userachievement` ( `userId` int(11) NOT NULL, `acId` int(11) NOT NULL );
Говорил-же, все просто...
дальше ЙА составил запрос чтобы получить все достижения одного пользователя Код if ($stmt = connection()->prepare("SELECT a.* FROM userAchievement ua INNER JOIN achievement a ON a.acId=ua.acId WHERE userId=?")) { $stmt->bind_param("i", $_SESSION['userId']); $stmt->execute(); $stmt->bind_result($_acId, $_acName, $_acDesc, $_acPicture); while ($stmt->fetch()) { $[...] = $_acId; $[...] = $_acName; $[...] = $_acDesc; $[...] = $_acPicture; }
$stmt->close(); [...] } Я разрабатываю на PHP но принцип схож и с другими ЯП...
Дальше отсанется доделать форму в Панели адменистрации для добавления/редактирования Достижений. И дописать в модули КВЕСТ/ Использование предмета / Убиство монстра возможность получения достижения а в Админ панели дописать возможность настраивания достижения при определенных условиях. Описывать не стал т.к. у каждого проекта это по разному) Пока все....
Dapf форум Дизайнеров и разработчиков, где помогают!
|
|
| |
lvovand | Дата: Среда, 02 Апреля 2014, 20:44 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| связь ачивки с пользователем сложностей не должно быть, а вот скажем сидит геймдизайнер сидит со своей частью админки, придумал какое-нить достижение и как ему надо как-то задать получение этого достижения, либо получение уровня определенного, либо выполнение квеста определенного, либо еще чего-то, как тут лучше структуру сделать, чтобы через админку безболезненно и просто это можно было задать
Разработка и продвижение сайтов. Дизайн
|
|
| |
Habilis | Дата: Среда, 02 Апреля 2014, 21:06 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Что Думает Хабиля: -квест: (просто), в конструктор квестов, в форму редактирования диалога дописать форму дать достижение, где можно выбрать какое... (ну понятно?) -Использовать вещь (сложнее) -Монстры (сложнее) Логировать убийства и использование вещей (это и так должно быть в проекте) Создать форму в админ панели где редактируются переменные (переменная, знак [>,=,<], значение, достижение) переменная должна строго соответствовать названию столбца в таблице логирования в функцию обновления данных дописать функцию проверки на таблицу с переменными если условие удовлетворительное дается достижение. [Дальше не придумал, если есть желающие блестнуть интелектом Велкам-велкам]
-Эвенты (тут модератор сам не сможет, нужен кто-то с правами администратора на базу ) дабы выполнить запрос.
-Достижения вы с нами 1,2,3,6 лет (Просто) Cron (каждую неделю... или реже) и запрос на insert скомбинированный с Where DATEDIFF(register_date, NOW()) > 360; (ну понятно, да?)
Dapf форум Дизайнеров и разработчиков, где помогают!
Сообщение отредактировал Habilis - Среда, 02 Апреля 2014, 21:44 |
|
| |
lvovand | Дата: Среда, 02 Апреля 2014, 21:23 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| с квестом логично, с кроном тоже понятно, пусть даже и каждый день будет запускаться, нестрашно,
а вот с формулой да, у меня примерно также мысль идет, что надо максимум действий игроков записывать, а для расчета сделать запись своей формулы, думаю придумать свои переменные в формуле (кол-во боев, кол-во побед и тому подобное), и при расчете эти переменные заменять на расчет по базе, тогда в принципе должен вроде толк выйти
Разработка и продвижение сайтов. Дизайн
|
|
| |
Habilis | Дата: Среда, 11 Июня 2014, 23:10 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Закончил работу над ачивками, немного изменил в конечном итоге все....
Код CREATE TABLE IF NOT EXISTS `achievement` ( `acId` int(11) NOT NULL AUTO_INCREMENT, `acName` varchar(50) NOT NULL, `acDesc` varchar(100) DEFAULT NULL, `acPicture` varchar(100) NOT NULL, PRIMARY KEY (`acId`) );
CREATE TABLE IF NOT EXISTS `user` ( `userId` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(40) NOT NULL, PRIMARY KEY (`userId`) );
CREATE TABLE IF NOT EXISTS `userachievement` ( `userId` int(11) NOT NULL, `acId` int(11) NOT NULL );
CREATE TABLE IF NOT EXISTS `achievementLog` ( `userId` int(11) NOT NULL , `acId` int(11) NOT NULL, `count` int(6) NOT NULL DEFAULT 0 );
По скольку большинство ачивок, повторное выполнение каких-либо действий, решено добавить таблицу с логом achievementLog на нее реагирует триггер с логикой всех ачивок и заносит данные в userachievement
а от туда ачивки берутся на отоброжение.
вот примеры
Dapf форум Дизайнеров и разработчиков, где помогают!
|
|
| |
Dinoiera | Дата: Четверг, 17 Июля 2014, 16:24 | Сообщение # 6 |
участник
Сейчас нет на сайте
| А не легче ввести полный лог про игрока в отдельный файл. и потом раз в 15 мин кроном проверять файл. По поводу боев к примеру..- каждый 500 победу отмечать медалью-> пишется условия при подсчете побед, если победа 500 то х(переменная с значением медали) =+1
Помогаю чем могу и прошу взаимной помощи) DCH - сайт разработчиков игр(новый проект)
|
|
| |
|