| 
	
		
		
			| Ачивки (достижения) |  |  |  | 
| 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 - сайт разработчиков игр(новый проект)
 
    |  |  |  |  |  
 |