// в xml мы храним базовые значения mp/hp/patk/matk/pdef/mdef, так что перед использованием из них надо вычислить конечные значения
for (NpcTemplate npc : _npcs)
{
if (npc == null)
continue;
double lvlMod = LevelBonusDataHolder.getData(npc.getLevel());
double conMod = StatBonusDataHolder.getBonus(BaseStatType.CON, npc.getStats(null).getCON());
double menMod = StatBonusDataHolder.getBonus(BaseStatType.MEN, npc.getStats(null).getMEN());
double strMod = StatBonusDataHolder.getBonus(BaseStatType.STR, npc.getStats(null).getSTR());
double intMod = StatBonusDataHolder.getBonus(BaseStatType.INT, npc.getStats(null).getINT());
npc.setHpMax(npc.getBaseHpMax() * conMod);
npc.setMpMax(npc.getBaseMpMax() * menMod);
npc.setPAtk(npc.getBasePAtk() * strMod * lvlMod);
npc.setMAtk(npc.getBaseMAtk() * intMod * intMod * lvlMod * lvlMod);
npc.setPDef(npc.getBasePDef() * lvlMod);
npc.setMDef(npc.getBaseMDef() * menMod * lvlMod);
if (npc.isShowOnMap())
_showOnMap.add(npc.getId());
if (!npc.getClanData().isNone())
npc.getClanData().getIgnoreIds().stream().filter(_id -> !isExists(_id)).forEach(_id -> warn("Ignore NPC [" + _id + "] for NPC [" + npc.getId() + "] not found."));
if (npc.getMinionData().size() > 0)
npc.getMinionData().stream().filter(data -> !isExists(data.getId())).forEach(data -> warn("Minion NPC [" + data.getId() + "] for NPC [" + npc.getId() + "] not found."));
if (npc.getDisplayId() > 0 && npc.getDisplayId() != npc.getId() && !isExists(npc.getDisplayId()))
warn("Template NPC [" + npc.getDisplayId() + "] for NPC [" + npc.getId() + "] not found.");
}
базовые формулы по сути неизменны с первых хроник, просто на них постепенно навешивают все больше разных модификаторов
в случае с мобами по сути чтобы получить из базовых значений заданных в нпсдате те, которые используются в дальнейшем уже для всех остальных расчетов, юзаются древнейшие формулы, которые можно взять в том же прима гайде для С1.
Я вот к примеру в хмлках с нпс храню именно базовые значения хп/мп, атаки/защиты, как и в нпсдате офф сервера
и просто при загрузке данных пересчитываю как раз это все по формулам - по сути просто для экономии, чтобы постоянно это не делать когда значения нужны для дальнейших расчетов.
*спойлер*
Эти формулы имеют хоть какой-то смысл, только если писать свою игру с нуля. В случае L2 дева, уже есть результат вычисления формул, про которые ты говоришь и он полностью представлен в виде оригинального ПТС датапака. Восстановить исходные формулы, по которым изначально балансилось все это добро, напрямую из датапака, путем реверс-инжинирига, невозможно. По одной простой причине - слишком много неизвестных. Ты никогда достоверно не узнаешь, на глаз ли ГД тыкали мобов на данную конкретную поляну или с помощью какой-то тулзы и по каким-то конкретным формулам. Вполне может быть, что это все делалось не в одну итерацию и то, что сейчас в есть в датапаке, это результат многих лет тонкой настройки, а не разовой генерации.Автор не о том. он о том, как получить табличные значения, которые в НПЦдата. Сейчас все пользуются просто копипастом, подгонкой костылями итогового результата на тестах. формулы про которые он спрашивает - это как раз часть из базовой мат-модели игры, которую не реверсили, и результаты которой даже в исходниках представлены просто как готовые посчитанные таблицы. Если отбросить балансировку таймТуКилл моба, балансировку эквипа к лвлу персонажа, и балансировку скорости прокачки, то для получения моба, ты даешь массиву формул свои пожелания, в виде лвл, базовых статов (у большинства мобов одинаковые, нц тут схалтурила), и дальше кучу модификаторов по вкусу - иксованность, доп скилы, групповость, социальность и т.д.. и из этого получаешь статы моба, хп, пдеф, мдеф, эксп, дроп (еще отдельная большая тема по рассчету и распредлению), и тд..
Но как я понял, ни у кого данной системы целиком нет, а есть отдельные костыльные формулы для примерной балансировки на глаз, экстраполяцией из имеющихся мобов. Так как по сути полная система уравнений задаст тебе все содержимое для любой аналогичной ММОРПГ, и все взаимосвязи в ней, от среднего времени "прохождения", до ТТК и связанной динамики боя, от кучности мобов на полянке, до количества и грейда дропа и его типа в этих мобах на полянке. Да по сути все, каждый чих в игре зависит от нее
Эти формулы имеют хоть какой-то смысл, только если писать свою игру с нуля. В случае L2 дева, уже есть результат вычисления формул, про которые ты говоришь и он полностью представлен в виде оригинального ПТС датапака. Восстановить исходные формулы, по которым изначально балансилось все это добро, напрямую из датапака, путем реверс-инжинирига, невозможно. По одной простой причине - слишком много неизвестных. Ты никогда достоверно не узнаешь, на глаз ли ГД тыкали мобов на данную конкретную поляну или с помощью какой-то тулзы и по каким-то конкретным формулам. Вполне может быть, что это все делалось не в одну итерацию и то, что сейчас в есть в датапаке, это результат многих лет тонкой настройки, а не разовой генерации.
Ты не забывай, что мы можем видеть только срезы игры, которые привыкли называть хрониками. По факту же, для разработчиков, линейка не дискретная игра, а просто один цельный проект, который непрерывно развивался от альфы до текущих дней, подстраиваясь под конкретную игровую ситуацию на основе мониторинга, логов и телеметрии. Это как пытаться восстановить внешность человека по отпечатку протектора шины его автомобиля.
В узнаваемость бренда л2 суммарно вбухали бабла наверное не сильно меньше, чем в бренд кока-колы xD Любая другая игра не будет иметь такого бэкграунда и комьюнити, без сопоставимых затрат на маркетинг.Согласен со многим, кроме аналогии, она не является аргументом)
мое видение, что если сейчас занимаешься л2, то есть смысл этим заниматься только в разрезе как раз создания собственной игры. Так как по моему мнению Л2 все больше и больше теряет аудиторию и превращается в автофарм как раз из-за кучи базовых ошибок, которые чтобы исправить - надо по сути сделать новую игру. просто с визуалом и кинематикой л2. а вот геймплей переделать космически.
Ну и реверс исходных формул сделать реально в достаточной точности. для этого из математики еще помним, что количество неизвестных должно быть равно или меньше количества уравнений) а мобов для проверки куча. причем есть методы, как упростить эту задачу. И даже если результат будет не идеально точен формулам НЦ, он будет с пренебрежимой погрешностью, и более чем, а то и лучше, чем у НЦ. и я да, я прекрасно понимаю, что корявый хлам под названием Л2 после исходных расчетов закидывали поверх тоннами шпаклевки в виде ручных правок, чтобы это битое корыто было не таким страшным )
В узнаваемость бренда л2 суммарно вбухали бабла наверное не сильно меньше, чем в бренд кока-колы xD Любая другая игра не будет иметь такого бэкграунда и комьюнити, без сопоставимых затрат на маркетинг.
Насчет формул: Берешь сервак ладвы условный. Пишешь простой класс, который создает произвольного чара(пати чаров) по произвольному шаблону, после чего просто запускаешь расчет фарма в ускоренном режиме, тупо математикой, на каждую локу в игре и смотришь, сколько у тебя выход мат.ценностей на локу в среднем за временную единицу. После этого подкручиваешь выбивающиеся локации или споты, либо подрезая дроп, либо усиливая мобов.
Чем точнее описана будет мат.модель фарма, чем больше факторов ты учтешь, тем точнее будет итоговый результат.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?