Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.06.2010, 01:19
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 1  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
По умолчанию Туториал для соц-фермы

Доброго времени суток!

Нужно было сделать туториал для фермоподобной социальной игрушки
Все уже почти сделано и все бы ничего,
но я убил на больше 2-х недель (Плюс еще не понятно насколько надёжной полчилась эта хрень).
И следующий проект может этого не пережить .

По порядку:

1. Есть 2 туториала - каждый - набор последовательных дейсвий предлагаемых пользователю.

2. На сервере это хранится в качестве 2-х счетчиков - туториал1:текущийЭтап, туториал2:текущий этап

3. Клиент после прохождения этапа сообщает это серверу, в этот момент сервер для некоторых переходов с этапа на
этап может давать деньги или семена для посадки.

4. С точки зрения защиты от читеров - все нормально - счетчик может меняться только один раз для пользователя

5. А вот на клиенте начинаются чудеса эквилебристики, проблемы были следующие:

- нужно блокировать интерфейс - иначе на грядку посадят что-то другое и на нее нельзя будет посадить туториальный овощь - туториал останется непройденным;
- нужно разблокировать интерфейс при ошибке с сервера - иначе из-за ошибки туториала игрок не сможет играть (катастрофа);
- игрок может закрыть игру на середине туториала, а за это время посаженный овощь сгниет и его нельзя будет прадать (а по сценарию надо);
- в последнем случае приходится подключать логику, которая это дело проверяет и пропускает этапы сценария;
- из-за пропусков этапов сценария и возможных ошибок сервера приходится проверять сценарий и модифицировать - например менять грядку для посадки, если сценарная непригодна;
- из-за изменения сценария надо разблокировать другие, несценарные элементы интерфейса
(иначе юзер не сможет сделать необходимые несценарные действия - и игра окажется для него заблокированной навечно(!));
- разблокированные действия/элементы интерфейса могут повлиять на сценарий , т.е. нужно очень грамотно и очень тонко их блокировать - разблокировать.

Мне сказали что туториал делается за 3 дня.
Вопрос: Что я делаю не так?


Последний раз редактировалось expl; 20.06.2010 в 01:30.
Старый 20.06.2010, 16:35
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 2  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Недавно делал туториал.

1. Разбиваете процесс на этапы, выделяете в них ключевые - если пользователь закрыл приложение, открываете на том ключевом этапе, который не закончен.

2. На каждом этапе прописываете интерфейс, который показываете пользователю. У меня получилось четыре варианта. Для того, чтобы пользователь тыкал туда, куда должен и не тыкал куда не нужно, под реплику с указанием подкладываете прозрачный слой с дыркой, который перекрывает доступ ко всем элементам управления, кроме единственной кнопки, которую должен нажать пользователь.

3. В самом туториале делаете проверку действий пользователя и событий приложения на предмет их соответствия ожидаемым параметрам, при поступлении этих параметров - переключаете туториал на следующий этап.

4. Отдельно обрабатываете все незавершенные действия пользователя и сервера - делаете откат на начало ключевого этапа (хотя мне лично это не потребовалось)

Я не могу сказать, что доволен своим туториалом-квестером на 100%, но он работает. Тем более, что подавляющее большинство пользователей жмет кнопку "Отказаться от обучения". Основной принцип как я понял - заставить пользователя идти по одному маршруту. Либо отказ от обучения.


Последний раз редактировалось mikhailk; 20.06.2010 в 16:37.
Старый 20.06.2010, 16:45
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 3  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
По поводу 2-го пункта интересно было бы узнать на сколько это правильно? Я про прозрачный слой. Даже если не применительно к данной задаче, а в целом, чтобы дать, а точнее не дать пользователю жмакать куда не следует. Согласен, что это самое простое решение, но самое ли лучшее?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 20.06.2010, 16:57
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 4  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
У Вас в игре интерфейс, объекты локации, сам перс возможно - всего десятка два "слушателей" на MouseEvent.CLICK. Обходить их всех по очереди отключать слушателей, а потом возвращать?

Проще заблокировать их прозрачным слоем.
На мой взгляд.

Старый 20.06.2010, 17:39
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 5  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
туториал я бы вообще хранил только на клиенте - без синхронизации этапов с сервером. отметка на сервер - только о пройденном туториале. Если прохождение тутора даёт какие- то осязаемые плюшки, то что то не то с геймплеем, и в этом случае игрок должен иметь право пропустить тутор и получить плюшки ( если они есть) в полном объёме.
Т.е. должно быть "узаконенное читерство".
По поводу прозрачного слоя: Не обязательно блокировать MouseEvent.CLICK - просто нужно ввести некое "состояние" в модели и контроллером уже определять какое конкретно действие нужно произвести по конкретному событию MouseEvent.CLICK учитывая state/tutorLevel/isButtonBuyEnabled/isAllGUIenabled итп
__________________
Отряд Котовскага

Старый 20.06.2010, 18:50
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
О! Спасибо всем большое!

2 mikhailk
Впринципе я делал так же как вы описали, за исключением 4-го пункта - надо будет подумать в следующем проекте о реализации отката на сервере,

потому что
Цитата:
Сообщение от Котяра Посмотреть сообщение
Т.е. должно быть "узаконенное читерство".
не прокатывает - например дарим овощь, а пользователь снес грядку под него (на предыдущем шаге так было надо, посадить выдернуть, снести грядку)

Второе отступление - блокировка прозрачным слоем тоже не катит - есть объекты которые расположены на карте и сортируются, потом есть кнопки, расположенные в диалоговых окнах - если блокировать все это прозрачным слоем - это будет тихий ужас

Но как-бы с самой блокировкой проблем не возникло - просто в глобальной точке доступа каждая вьюшка регит контрол который может заинтересовать тутор и который придется разблокировать, и блокирует все остальное по событию
А туториал уже, если надо, обращатеся к этому регистру с прозьбой разблокировать элемент на время своей работы

Проблема возникла с самой логикой - какие элементы блокировать/ какие нет,
например разрешил покупать только один овощь - а денег у пользователя на него нет (до этого шаг с подарком денег пропустил например), нужно разблокирвать более дешевый.

Стоп!
По четвертому этапу все-таки не допонял, можно поподробнее?
Цитата:
4. Отдельно обрабатываете все незавершенные действия пользователя и сервера - делаете откат на начало ключевого этапа (хотя мне лично это не потребовалось)
Имеется ввиду не посылать команд на сервер, пока не закончен этап? И откатывать прямо на клиенте, без его перезагрузки?


Последний раз редактировалось expl; 20.06.2010 в 19:16.
Старый 20.06.2010, 23:56
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 7  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Сообщение от Котяра Посмотреть сообщение
туториал я бы вообще хранил только на клиенте - без синхронизации этапов с сервером. отметка на сервер - только о пройденном туториале.
От туториала зависит.
У меня, например, была задача с "разорванным" туториалом - заставляем пользователя начать производство продукта, после этого он может делать все, что хочет, а когда производство первой партии закончится, туториал снова должен вылезти и продолжить обучение. И потом еще раз. Тут без сохранения фазы на сервер никак.

Можно, конечно было сделать не один туториал, а три. Но разницы никакой - все равно нужно писать на сервер о прохождении ключевых фаз.

Добавлено через 5 минут
Цитата:
Сообщение от expl Посмотреть сообщение
По четвертому этапу все-таки не допонял, можно поподробнее?

Имеется ввиду не посылать команд на сервер, пока не закончен этап? И откатывать прямо на клиенте, без его перезагрузки?
Имелось в виду, что если пользователь по сценарию туториала должен непременно в рамках первой фазы посадить грядку и полить ее, а он посадил, а потом выключил игру, т.е., отметка о посадке грядки есть, а отметки о завершении первой фазы нет, то при следующем вхождении в игру можно откатить его на начало первой фазы, при этом обнулив грядку, вернув на склад потраченные семена.


Последний раз редактировалось mikhailk; 21.06.2010 в 00:02.
Старый 21.06.2010, 01:28
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Понятно, только как это делается?
- сервер сам при авторизации пользователя сравнивает отметки о прохождении с текущим состоянием карты пользователя, все откатывает и дает клиенту "корректную" карту для старта текущего этапа?
вобщем, да, это немного напряжет сервериста, зато очень неплохо повысит надежность и разгрузит клиента от жесткой ненадёжной логики.
Правильно?

Цитата:
отметка на сервер - только о пройденном туториале.
на самом деле я имел ввиду отметка о пройденном этапе - т.е. на серваке только числа - он даже игровую логику на время прохождения туториала не меняет
Ну да не суть важно что я там имел.

Старый 21.06.2010, 11:32
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 9  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Ну, "все откатывает" - это очень громко сказано. ))
Туториал же в самом начале. Так что известно, какие конкретно действия пользователя надо сбросить.

А откатывать - да, на сервере, в момент, когда клиент обращается за информацией по игроку. Сервер проверяет, закрыт ли туториал, если открыт - то все ли в порядке с грядками. Для серверного программиста это дополнительно 10-15 строчек кода, он от этого не умрет. ))

Старый 21.06.2010, 14:17
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Теперь всё понятно, спасибо

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:06.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.