|
|
|||||
Туториал для соц-фермы
Доброго времени суток!
Нужно было сделать туториал для фермоподобной социальной игрушки Все уже почти сделано и все бы ничего, но я убил на больше 2-х недель (Плюс еще не понятно насколько надёжной полчилась эта хрень). И следующий проект может этого не пережить . По порядку: 1. Есть 2 туториала - каждый - набор последовательных дейсвий предлагаемых пользователю. 2. На сервере это хранится в качестве 2-х счетчиков - туториал1:текущийЭтап, туториал2:текущий этап 3. Клиент после прохождения этапа сообщает это серверу, в этот момент сервер для некоторых переходов с этапа на этап может давать деньги или семена для посадки. 4. С точки зрения защиты от читеров - все нормально - счетчик может меняться только один раз для пользователя 5. А вот на клиенте начинаются чудеса эквилебристики, проблемы были следующие: - нужно блокировать интерфейс - иначе на грядку посадят что-то другое и на нее нельзя будет посадить туториальный овощь - туториал останется непройденным; - нужно разблокировать интерфейс при ошибке с сервера - иначе из-за ошибки туториала игрок не сможет играть (катастрофа); - игрок может закрыть игру на середине туториала, а за это время посаженный овощь сгниет и его нельзя будет прадать (а по сценарию надо); - в последнем случае приходится подключать логику, которая это дело проверяет и пропускает этапы сценария; - из-за пропусков этапов сценария и возможных ошибок сервера приходится проверять сценарий и модифицировать - например менять грядку для посадки, если сценарная непригодна; - из-за изменения сценария надо разблокировать другие, несценарные элементы интерфейса (иначе юзер не сможет сделать необходимые несценарные действия - и игра окажется для него заблокированной навечно(!)); - разблокированные действия/элементы интерфейса могут повлиять на сценарий , т.е. нужно очень грамотно и очень тонко их блокировать - разблокировать. Мне сказали что туториал делается за 3 дня. Вопрос: Что я делаю не так? Последний раз редактировалось expl; 20.06.2010 в 01:30. |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Недавно делал туториал.
1. Разбиваете процесс на этапы, выделяете в них ключевые - если пользователь закрыл приложение, открываете на том ключевом этапе, который не закончен. 2. На каждом этапе прописываете интерфейс, который показываете пользователю. У меня получилось четыре варианта. Для того, чтобы пользователь тыкал туда, куда должен и не тыкал куда не нужно, под реплику с указанием подкладываете прозрачный слой с дыркой, который перекрывает доступ ко всем элементам управления, кроме единственной кнопки, которую должен нажать пользователь. 3. В самом туториале делаете проверку действий пользователя и событий приложения на предмет их соответствия ожидаемым параметрам, при поступлении этих параметров - переключаете туториал на следующий этап. 4. Отдельно обрабатываете все незавершенные действия пользователя и сервера - делаете откат на начало ключевого этапа (хотя мне лично это не потребовалось) Я не могу сказать, что доволен своим туториалом-квестером на 100%, но он работает. Тем более, что подавляющее большинство пользователей жмет кнопку "Отказаться от обучения". Основной принцип как я понял - заставить пользователя идти по одному маршруту. Либо отказ от обучения. Последний раз редактировалось mikhailk; 20.06.2010 в 16:37. |
|
|||||
По поводу 2-го пункта интересно было бы узнать на сколько это правильно? Я про прозрачный слой. Даже если не применительно к данной задаче, а в целом, чтобы дать, а точнее не дать пользователю жмакать куда не следует. Согласен, что это самое простое решение, но самое ли лучшее?
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
У Вас в игре интерфейс, объекты локации, сам перс возможно - всего десятка два "слушателей" на MouseEvent.CLICK. Обходить их всех по очереди отключать слушателей, а потом возвращать?
Проще заблокировать их прозрачным слоем. На мой взгляд. |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
туториал я бы вообще хранил только на клиенте - без синхронизации этапов с сервером. отметка на сервер - только о пройденном туториале. Если прохождение тутора даёт какие- то осязаемые плюшки, то что то не то с геймплеем, и в этом случае игрок должен иметь право пропустить тутор и получить плюшки ( если они есть) в полном объёме.
Т.е. должно быть "узаконенное читерство". По поводу прозрачного слоя: Не обязательно блокировать MouseEvent.CLICK - просто нужно ввести некое "состояние" в модели и контроллером уже определять какое конкретно действие нужно произвести по конкретному событию MouseEvent.CLICK учитывая state/tutorLevel/isButtonBuyEnabled/isAllGUIenabled итп
__________________
Отряд Котовскага |
|
|||||
О! Спасибо всем большое!
2 mikhailk Впринципе я делал так же как вы описали, за исключением 4-го пункта - надо будет подумать в следующем проекте о реализации отката на сервере, потому что не прокатывает - например дарим овощь, а пользователь снес грядку под него (на предыдущем шаге так было надо, посадить выдернуть, снести грядку) Второе отступление - блокировка прозрачным слоем тоже не катит - есть объекты которые расположены на карте и сортируются, потом есть кнопки, расположенные в диалоговых окнах - если блокировать все это прозрачным слоем - это будет тихий ужас Но как-бы с самой блокировкой проблем не возникло - просто в глобальной точке доступа каждая вьюшка регит контрол который может заинтересовать тутор и который придется разблокировать, и блокирует все остальное по событию А туториал уже, если надо, обращатеся к этому регистру с прозьбой разблокировать элемент на время своей работы Проблема возникла с самой логикой - какие элементы блокировать/ какие нет, например разрешил покупать только один овощь - а денег у пользователя на него нет (до этого шаг с подарком денег пропустил например), нужно разблокирвать более дешевый. Стоп! По четвертому этапу все-таки не допонял, можно поподробнее? Цитата:
Последний раз редактировалось expl; 20.06.2010 в 19:16. |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
У меня, например, была задача с "разорванным" туториалом - заставляем пользователя начать производство продукта, после этого он может делать все, что хочет, а когда производство первой партии закончится, туториал снова должен вылезти и продолжить обучение. И потом еще раз. Тут без сохранения фазы на сервер никак. Можно, конечно было сделать не один туториал, а три. Но разницы никакой - все равно нужно писать на сервер о прохождении ключевых фаз. Добавлено через 5 минут Имелось в виду, что если пользователь по сценарию туториала должен непременно в рамках первой фазы посадить грядку и полить ее, а он посадил, а потом выключил игру, т.е., отметка о посадке грядки есть, а отметки о завершении первой фазы нет, то при следующем вхождении в игру можно откатить его на начало первой фазы, при этом обнулив грядку, вернув на склад потраченные семена. Последний раз редактировалось mikhailk; 21.06.2010 в 00:02. |
|
|||||
Понятно, только как это делается?
- сервер сам при авторизации пользователя сравнивает отметки о прохождении с текущим состоянием карты пользователя, все откатывает и дает клиенту "корректную" карту для старта текущего этапа? вобщем, да, это немного напряжет сервериста, зато очень неплохо повысит надежность и разгрузит клиента от жесткой ненадёжной логики. Правильно? Цитата:
Ну да не суть важно что я там имел. |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Ну, "все откатывает" - это очень громко сказано. ))
Туториал же в самом начале. Так что известно, какие конкретно действия пользователя надо сбросить. А откатывать - да, на сервере, в момент, когда клиент обращается за информацией по игроку. Сервер проверяет, закрыт ли туториал, если открыт - то все ли в порядке с грядками. Для серверного программиста это дополнительно 10-15 строчек кода, он от этого не умрет. )) |
Часовой пояс GMT +4, время: 12:06. |
|
« Предыдущая тема | Следующая тема » |
|
|