Представляю вашему внимание небольшую софтину для более удобного(в сравнении с обычными текстовыми редакторами xD) просмотра некоторых PTS-скриптов, а также поиска по ним. Изначально писал для себя, но подумал, вдруг она может оказаться полезной для любителей частенько позаглядывать в ПТС-скрипты. На данный момент, поддерживаются лишь skilldata.txt, itemdata.txt и npcdata.txt.
Написана на Java 8, запускать можно просто jar-ник по аналогии с exe. Нужна установленная jre/jdk 8 или новее, но с...
Список основных изменений:
• Добавлена поддержка npcpos.txt
• Добавлена поддержка AI. Поиск и отображение с подсветкой синтаксиса примерно на уровне Notepad++.
• Добавлены новые контекстные меню, подредактированы старые.
• Контекстное меню теперь доступно при клике на:
-Выделенный элемент в блоке отображения результатов поиска.
- Выделенный параметр в блоке отображения параметров.
- Выделенный текст во всплывающем окне детального просмотра параметра.
- Выделенный текст в блоке просмотра...
Спасибо) Да я и сам PTS не занимаюсь. Она мне нужна, чтобы оттуда что-то вытаскивать для своей явы. Парсить там, смотреть как должно работать и т.д. Так что, если тоже делаете что-то подобное - авось и вам пригодится.Работа проделана большая) PTS конечно не занимаюсь, но может и пригодится когда-то)
Клиентские файлы подключать необязательно. Они нужны для того, чтобы работал поиск по частичному совпадению в имени скилла/предмета/npc. Например, можно в поиске по скиллам ввести "страх", и программа найдет все скиллы, в клиентском имени которых присутствует данное слово. По поводу вашей ошибки: возможно, вы подключали сами датники напрямую из клиента, но программа не умеет их декодировать. Чтобы это работало, откройте файл-эдитом npcname-e и прочие подобные файлы, после чего просто скопируйте содержимое в обычный текстовик и подключайте его. Также можете почитать руководство в архиве - возможно, там найдутся ответы на некоторые ваши вопросы.Посмотреть вложение 48199
Через пару нажатий ошибка итемнейма ушла, что изменилось не ясно.
Не совсем понял для чего тхт файлы из клиента.
Посмотреть вложение 48200
Посмотреть вложение 48201
Отдельно файл не дает загрузить, с клиентскими тхт тоже.
хроники Grand Crusade, Salvation, FafurionЕсли не хочет читать npcdata - прикрепите сюда файл, который Вы подключали и укажите хроники pts-сборки, с которой Вы его брали. Программа тестировалась лишь на Epilogue и HF адвексов. Если у вас другие хроники, и не работает - я попробую посмотреть ваш файл и раздебажить ошибки. Тогда, возможно, завезу поддержку ваших хроник.
public static int calcExp(final int level, final float acquire_exp_rate)
{
return (int) (acquire_exp_rate * level * level);
}
public static double getLevelMod(final int level)
{
return (89. + level) / 100.0;
}
public static int calcMaxHp(final float base, final int CON)
{
double result = base;
switch(config.CHRONICLES)
{
case GRACIA_HF:
case GOD:
result = base * getConBonus(CON);
break;
}
return (int) result;
}
public static int calcMaxMp(final float base, final int MEN)
{
double result = base;
switch(config.CHRONICLES)
{
case GRACIA_HF:
case GOD:
result = base * getMenBonus(MEN);
break;
}
return (int) result;
}
public static int calcPhysAtk(final float base, final int STR, final int level)
{
double result = base;
switch(config.CHRONICLES)
{
case GRACIA_HF:
case GOD:
result = base * getStrBonus(STR) * getLevelMod(level);
break;
}
return (int) result;
}
public static int calcMagAtk(final float base, final int INT, final int level)
{
double result = base;
switch(config.CHRONICLES)
{
case GRACIA_HF:
case GOD:
result = base * getIntBonus(INT) * getLevelMod(level);
break;
}
return (int) result;
}
public static int calcPhysDef(final float base, final int level)
{
double result = base;
switch(config.CHRONICLES)
{
case GRACIA_HF:
case GOD:
result = base * getLevelMod(level);
break;
}
return (int) result;
}
public static int calcMagDef(final float base, final int MEN, final int level)
{
double result = base;
switch(config.CHRONICLES)
{
case GRACIA_HF:
case GOD:
result = base * getMenBonus(MEN) * getLevelMod(level);
break;
}
return (int) result;
}
public static int calcMoveSpd(final float base, final int DEX)
{
double result = base;
switch(config.CHRONICLES)
{
case GRACIA_HF:
case GOD:
result = base * getDexBonus(DEX);
break;
}
return (int) result;
}
Согласен. С каким нибудь exp\sp это ещё применимо, но вот по статам уже вопрос. Для подобного нужно реализовывать дополнительное чтение массива мульти_скилл_листа, с последующим чтением самих скиллов и их бонусов, что бы привести статы НПЦ в реальную реальность.Можно вопрос? Зачем считать реальные статы мобов без пассивок? Зачем в принципе нужны эти данные, если они по сути ничего не значат?
У кого как - я к примеру в хмл держу именно базовые значения, т.е. такие же как в птс.А если учесть тот факт, что в доброй половине ява-сборок у нпц отсутствует куча стат-функций, а те же хп/атаки/защиты вписываются сразу посчитанными с учетом конов/левелов, но без учета пассивок - то, что покажет программа, будет +/- соответствовать тому, что прописано в XML нпц их явы, а также всяких базах знаний в инете.
бля, ну все правильно сделал.У кого как - я к примеру в хмл держу именно базовые значения, т.е. такие же как в птс.
А к конечным значениям, к которым применяются уже бонусы от пассивок и т.п., я эти базовые значения привожу при загрузке хмлок при старте сервера.
---
Формулы расчета этого всего по идее никак не поменялись - те же что во времена до ГоД, просто отличия в конечных результатах из-за того что поменялись значения бонусов базовых стат, ну т.е. от STR/CON/INT и т.д.
Ну и еще левелмод для 100+ уровней чуть по другому считается, не как для 1-99 уровней.
Может и не менялись, но я посмотрел, какую белиберду мне насчитало по старым формулам у того же Баюма в хрониках Grand Crusade - мне статы показались нелогичными. Но может я и ошибаюсь.У кого как - я к примеру в хмл держу именно базовые значения, т.е. такие же как в птс.
А к конечным значениям, к которым применяются уже бонусы от пассивок и т.п., я эти базовые значения привожу при загрузке хмлок при старте сервера.
---
Формулы расчета этого всего по идее никак не поменялись - те же что во времена до ГоД, просто отличия в конечных результатах из-за того что поменялись значения бонусов базовых стат, ну т.е. от STR/CON/INT и т.д.
Ну и еще левелмод для 100+ уровней чуть по другому считается, не как для 1-99 уровней.
Возможно из-за того, что бонус от статов считается по какой-то старой формуле, а не берется статично из скриптов.Может и не менялись, но я посмотрел, какую белиберду мне насчитало по старым формулам у того же Баюма в хрониках Grand Crusade - мне статы показались нелогичными. Но может я и ошибаюсь.
Посмотреть вложение 48769
Смотря какие статы ты имеешь ввиду? Если бонусы от STR, CON и т.д, то их подтянул из скриптов гранд крусейда.Возможно из-за того, что бонус от статов считается по какой-то старой формуле, а не берется статично из скриптов.
Да, именно их и имел ввиду. Тогда нужно вникать. Это первое, что пришло в голову.Смотря какие статы ты имеешь ввиду? Если бонусы от STR, CON и т.д, то их подтянул из скриптов гранд крусейда.
ну вот для примера у меня Баюм -Может и не менялись, но я посмотрел, какую белиберду мне насчитало по старым формулам у того же Баюма в хрониках Grand Crusade - мне статы показались нелогичными. Но может я и ошибаюсь.
<!-- Баюм / Baium -->
<npc id="29020" name="Баюм" title="">
<stat name="type" value="Boss" />
<stat name="ai" value="Baium" />
<stat name="class" value="LineageMonster.baium" />
<stat name="level" value="78" />
<stat name="rewardExp" value="11090077" />
<stat name="rewardSp" value="2661" />
<stat name="collisionHeight" value="174.00" />
<stat name="collisionRadius" value="65.00" />
<stat name="baseSTR" value="164" />
<stat name="baseCON" value="111" />
<stat name="baseDEX" value="55" />
<stat name="baseINT" value="188" />
<stat name="baseWIT" value="78" />
<stat name="baseMEN" value="149" />
<stat name="baseHpMax" value="53342293" />
<stat name="baseHpReg" value="750" />
<stat name="baseMpMax" value="18000" />
<stat name="baseMpReg" value="99" />
<stat name="basePAtk" value="6616.34824" />
<stat name="basePDef" value="3240.718563" />
<stat name="baseMAtk" value="25862.37832" />
<stat name="baseMDef" value="2395.807785" />
<stat name="basePAtkSpd" value="253" />
<stat name="baseMAtkSpd" value="2362" />
<stat name="baseRunSpd" value="120" />
<stat name="baseWalkSpd" value="80" />
<stat name="baseAtkRange" value="40" />
<stat name="baseCritRate" value="40" />
<stat name="pAccuracyMod" value="4.75" />
<stat name="pEvasionMod" value="7" />
<stat name="aggroRange" value="1000" />
<ai_params>
<set name="maxPursueRange" value="20000" />
<set name="selfAggroChance" value="100" />
<set name="madnessChance" value="5" />
</ai_params>
<minions>
<minion npc_id="29021" count="5" /> <!-- Архангел / Archangel -->
</minions>
<skills>
<skill id="4045" level="1" /> <!-- Устойчивость к Обессиливанию Босса / Full Magic Attack Resistance -->
<skill id="4127" level="1" /> <!-- Атака Баюма / Baium Attack -->
<skill id="4256" level="1" /> <!-- Устойчивость к Оглушению / Stun Resistance -->
<skill id="4415" level="3" /> <!-- Одноручный Меч / One-handed Sword -->
<skill id="4416" level="1" /> <!-- Нежить / Undead -->
<skill id="14765" level="4" /> <!-- Сопротивление Вампиризму / Blood Siphon Resistance -->
</skills>
<attributes>
<defence attribute="fire" value="0" />
<defence attribute="water" value="0" />
<defence attribute="wind" value="0" />
<defence attribute="earth" value="0" />
<defence attribute="holy" value="0" />
<defence attribute="unholy" value="0" />
</attributes>
</npc>
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?