|
Re: Скриптинг в Готике
Предисловие:
Необходимые файлы: _decompiled\_Intern\constants.d
_decompiled\AI\Prototypes\Npc_Default.d
_decompiled\AI\AI_Intern\Balancing.d
_decompiled\Story\B\b_giveskill.d
В данный момент я занимаюсь разработкой мода "StrongHand" для Gothic 1, подробности в одноименной теме. Мне удалось сделать в модификацию боевую систему наносимых повреждений как в Gothic 2 - т.е. чем больше умение владения мечом, тем больше шанс нанести удар в полную силу, остальные удары проходят поверхностно.
Принцип действия системы: Как известно в оригинальной Gothic 1, все повреждения наносятся в полную силу +5% - 10% шанс нанести критический удар в два раза сильнее. Критический удар описывается в файле "constants.d", пересенной "const int DAM_CRITICAL_MULTIPLIER = 2;"
По умолчанию игрок начинает с 0 уровнем меча - т.е. шанс нанести критический удар 0%, это прописано в файле Прототипа для всех персонажей "Npc_Default.d". "Npc_SetTalentValue(self,NPC_TALENT_1H,0);" - для одноручника. "Npc_SetTalentValue(self,NPC_TALENT_2H,0);" - для двуручника. Когда игрок изучает оружие, он добавляет соответсвенно 5% и 10%.
Немного поразмыслив, я установил значение "const int DAM_CRITICAL_MULTIPLIER = 0;", из чего выйдет, что урон от всех ударов будет умножаться на "0" и будет касательным, т.е. будет наносится минимальное повреждение описываемое в файле "Balancing.d", переменной "const int NPC_MINIMAL_DAMAGE = 10;", что соответствует 10 ед. урона. Итак, что мы имеем... С такими параметрами "Npc_Default.d" "Npc_SetTalentValue(self,NPC_TALENT_1H,0);" "Npc_SetTalentValue(self,NPC_TALENT_2H,0);" Естественно ранее "критические", а теперь "касательные" удары вообще не будут происходить, так как вроятность "0". Нужно же, чтобы эти удары на нулевом уровне меча происходили довольно часто, чтобы это изменить, я изменил значения "0" - на "90" "Npc_SetTalentValue(self,NPC_TALENT_1H,90);" "Npc_SetTalentValue(self,NPC_TALENT_2H,90);" Теперь, с вероятностью 90% будут наносится касательные удары, отсюда следуют что удары в полную силу будут наносится с вероятностью 10%. Значит чем меньше будет значение переменной, тем больше будет вероятность, что удары пройдут в полную силу. Впринципе вот эта и есть система Г2 :)
Но, раньше при обучении, к переменным: "Npc_SetTalentValue(self,NPC_TALENT_1H,90);" "Npc_SetTalentValue(self,NPC_TALENT_2H,90);" Прибавлялось 5 и 10, теперь же для обучения нужно убавлять, это изменяется в файле "b_giveskill.d"
Npc_SetTalentValue(typ,NPC_TALENT_1H,Npc_GetTalent Value(typ,NPC_TALENT_1H) - 40); Npc_SetTalentValue(typ,NPC_TALENT_2H,Npc_GetTalent Value(typ,NPC_TALENT_2H) - 40);
С каждым уровнем обучения от 90 отнимается число 40.
Одноручник\Двуручник: 0 - 90% вероятность провала - 10% успешная атака. 1 - 50% вероятность провала - 50% успешная атака. 2 - 10% вероятность провала - 90% успешная атака.
Эти переменные в файле "Story_Globals.d" отвечали за количество LP за обучение. const int LPCOST_TALENT_1H_1 = 10; const int LPCOST_TALENT_1H_2 = 20; const int LPCOST_TALENT_2H_1 = 50; const int LPCOST_TALENT_2H_2 = 70;
Но потом мне удалось сделать вот такую системы
--- Нет комбы --- 0 - не обучен 10% успешная атака. --- Комбо 1 --- 1 - новичок 20% успешная атака. 2 - драчун 30% успешная атака. 3 - лесоруб 40% успешная атака. 4 - боец 50% успешная атака. --- Комбо 2 --- 5 - воин 60% успешная атака. 6 - вояка 70% успешная атака. 7 - инквизитор 80% успешная атака. 8 - мастер 90% успешная атака.
Для этого пришлось добавить несколько переменный в файл "Story_Globals.d".
const int LPCOST_TALENT_1H_1 = 10; const int LPCOST_TALENT_1H_2 = 10; const int LPCOST_TALENT_1H_3 = 10; const int LPCOST_TALENT_1H_4 = 10; const int LPCOST_TALENT_1H_5 = 15; const int LPCOST_TALENT_1H_6 = 15; const int LPCOST_TALENT_1H_7 = 15; const int LPCOST_TALENT_1H_8 = 15;
const int LPCOST_TALENT_2H_1 = 10; const int LPCOST_TALENT_2H_2 = 10; const int LPCOST_TALENT_2H_3 = 10; const int LPCOST_TALENT_2H_4 = 10; const int LPCOST_TALENT_2H_5 = 15; const int LPCOST_TALENT_2H_6 = 15; const int LPCOST_TALENT_2H_7 = 15; const int LPCOST_TALENT_2H_8 = 15;
Итак новая система с более плавным обучением заработала, но стойки бойца остались прежними, а для новых переменных вообще сбросились. const int LPCOST_TALENT_2H_1 = 10; - стойка обычного бойца. const int LPCOST_TALENT_2H_2 = 10; - стойка мастера. const int LPCOST_TALENT_2H_3 = 10; - стойка "необученного"! const int LPCOST_TALENT_2H_4 = 10; - стойка "необученного"! и т. д.
Так вот -где можно найти в скриптах описание бойцлвских стоек для каждого уровня TALENT_1H_x.
|