Горячие пирожки прямиком из l2j-devel:
<Муркт>: ну да, а нынешняя архитектура не позволяет что-то ненапряжно делать
<Муркт>: любое изменение - рак тот ещё, помню-помню
)
<Drac>: да уж
<Муркт>: никто не хочет попробовать переделать архитектуру? я могу рассказать как
это то, что я хотел сделать со скилл-энжином, но скилл-энжином не ограничивается
<Drac>: можешь попробовать
<Муркт>: если вкратце - одна из основных идей состоит в том, чтобы сделать из L2Character не abstract, a final class
<Муркт>: соответственно получится где-то пяток компоновщиков, которые должны быть чем-то наподобии "наследник L2CharacterOwner"
<Муркт>: Player, Slave, Monster, NPC
<Drac>: ууу
<Муркт>: Они в свою очередь тоже должны не давать от себя наследоваться
<Муркт>: автоматически получим резкое упрощение в виде убирания разных L2Merchant, GateKeeper, warehousekeeper, lotteryticketer, hrenyakoNPC. Их там пару десятков вроде?
<Муркт>: у этого НПЦ должен быть какой-нибудь список его предназначений, и каждая возможность лежит в своём классе, и их очень просто скомбинировать между собой. А не так как сейчас - на каждую новую фичу делай класс-наследник от ФолкИнстанс
<Муркт>: в результате любая новая комбинация предназначений - это не изменение кода, а просто дописывание куда-нибудь через запятую ещё одного слова (в "базе")
<Drac>: осилил
<Drac>: правда надо будет много буковок переделывать
<Муркт>: плюс из самого класса л2чар надо выделить кучу классов
<Муркт>: в СФ в своё время этим чуть-чуть занялись (почти год назад), но бросили на полпути, да и сделали отстойно
<Муркт>: надо выделять всё, что можно выделить. Т.е. работу с эффектами - в отдельный объект CharacterEffects, все статы - отдельно, и т.д.
<Drac>: это надо серьезно заниматься
<Муркт>: К примеру, есть ещё такой у нас тупизм, как _sleeped, _stunned, _fakedeath, _ещёчтотонепомнючто
<Муркт>: всё это выделить наффег в CharacterStates и сделать это не кучей булевых переменных, а set'ом, в котором будет храниться совокупность состояний, сделать енум из SLEEP, STUN, FAKEDEATH, етц
<Муркт>: тогда ещё вместо кучи функций isSleeping, isStunned, isТрампарам выйдет одна функция isInState(State)
<Муркт>: ну и таких мелочей там тонны на самом деле
<Drac>: труевину глаголишь, только надо этим сильно серьезно заниматься, чтобы человек был настроен пройти полный цикл разработки этого
<Муркт>: под такую переделку автоматически попадают все чартемплейты, потому что сейчас они сделаны неудобно
<Муркт>: ну а со скиллами там и так всё понятно. Насчёт скиллов идея была ещё год назад...
<Муркт>: тут надо отметить три вещи, в целом
<Муркт>: 1) это очень много времени, соответственно заниматься должен человек, у которого времени много. Ну и который понимает очень хорошо, что он делает.
<Муркт>: 2) нормальная архитектура даст довольно приличный оверхед, по сравнению с тем, что есть сейчас, ИМХО
<Муркт>: 3) лёгкость работы с этим кодом впоследствии затмевает любые минусы оверхеда
<Муркт>: ну и ещё одно...
<Муркт>: если всё это сделать, то бить нещадно по рукам тех, кто будет хоть чуть-чуть отступать от политики партии и делать что-то подобно тому, как сделано всё сейчас.
<Drac>:
<Муркт>: потому что в результате получится то же самое, что есть сейчас, и куча усилий будет потрачена непонятно на что
<Муркт>: Drac: насчёт выделения кучи "служебных" классов из имеющихся - вот только что вспомнил ещё работу с ПвП-состояниями
<Муркт>: а, тут ещё одно преимущество вспомнил. При желании, можно будет поплотнее интегрировать питон, и юзать его хорошо. А не для каких-то квестов пацаватых