Среда, 19 Июня 2024, 13:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Ачивки (достижения)
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 - сайт разработчиков игр(новый проект)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг