Неделя 41-42 (август 1 – август 2): Передача параметров, доска заказов и третий пак контента

Прошлая неделя у меня закончилась на том, что я доделал весь возможный крафт: собственно крафт, обучение персонажей и улучшение построек. У меня осталось еще буквально 2 или 3 механики, которые можно было бы перенести на сервер.

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

Август 1 – Инвентарь и передача ролевых параметров

С одеванием предметов получилось даже немного скучно. Я дольше с интерфейсом провозился, чем с переносом логики. Все-таки еще на клиенте я сделал довольно удачный алгоритм, который даже при переносе на богопротивный JS все равно работает хорошо и надежно.

А вот с начислением ролевых параметров пришлось повозиться. Пристально посмотрев на имевшийся у меня алгоритм, я нашел в нем несколько совсем не хороших дыр. Дело в том, что предмет не хранит в себе конкретное значение бонуса, который будет начислен персонажу, а персонаж хранит. Мой старый алгоритм просто начислял и вычитал значения, рассчитанные на основании параметров предмета (коэффициенты, зависящие от уровня, редкости и бонусов предмета) и его артикула (базовые значения). Так вот если бы я захотел например изменить какие-то базовые значения предмета на уровне конфигов, то имел бы риск вычесть больше, чем начислил.

Я решил не страдать фигней и просто пересчитывать ролевые параметры персонажа с нуля при необходимости. Но и тут все не совсем просто. Так исторически сложилось, что ролевые параметры всех типов (скиллы, которым персонаж обучается, и собственно ролевые параметры, которые персонаж получает от шмоток) у меня хранятся одним списком. Я не знаю, зачем. Когда-то мне это казалось удобным. Ведь действительно рецепту обучения или шмотке совершенно не важно, какой ролевой параметр модифицировать. С другой стороны, если способ начисления и вычитания ролевого параметра не надежный, значит, с точки зрения дизайна, я не могу позволить начислять шмоткой скилл — я не смогу вычесть его значение обратно, не навредив значению заработанному обучением.

С третьей стороны, я могу это сделать фишкой: шмотку, которая временно дает бонус скиллу, но при этом приводит к деградации скилла при снятии.

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

Август 2 – Доска заказов

На этой неделе меня переклинило, и я решил почистить проект от всякого мусора. Типа QuickSheet, который как мы помним, я использовал для загрузки конфигов из гуглотаблиц. Ну, и заодно выкинул разного рода драг-н-дропы, старые классы и прочую фигню. Пока еще не выкинул EasySave, но его время тоже обязательно придет.

С доской заказов же я дольше промучился философскими вопросами, чем реально ее делал. Я почему-то решил, что моя концепция доски заказов ущербна и в связи с тем, что у меня появился новый эталон, надо все нафиг переделать. Но что и куда переделывать, было совершенно непонятно. Во-первых, я напрочь забыл, как вообще у меня устроена доска заказов. А во-вторых, я не придумал какой-то стройной схемы новых заказов.

Чтобы разобраться с системой заказов, нужна какая-то документация. Ну, или хотя бы обретший вид текста поток мыслей. В общем, я написал обзор на Trade Island. А потом решил, что надо перенести то ,что есть на сервер и заодно узнать, что там не так. Если коротко, то все оказалось так.

Суть механизма я описал еще на 24-й неделе. И оказалось, что в нем вообще ничего менять не надо. А все, что может понадобиться, можно будет потом со временем нарастить. Например, различные таймеры, необходимые, в частности, для сброса заказа в базовой доске заказов (в Trade Island там пятиминутный таймер, обнуляющийся за алмазы).

Немного забавно то, что еще на 23-й неделе, я догадался, что можно модифицировать работу доски заказов, ставя на работу персонажей. Я изначально хотел, чтобы персонажи выступали у меня в качестве заказчиков, этот механизм я подглядел в Shop Heroes, но я не догадался, что персонаж может модифицировать, например, доход получаемый от заказа.

В общем, когда придет время, тут будет хорошая площадка для всяких новых идей. Очень хочется сделать что-нибудь веселое сейчас, но определенно не время.

Оглавление