• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 574
Последнее редактирование модератором:

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
есть минимальный фиксированный урон заклом + урон от интеллекта, у тебя начального урона нет или расчет идет по другой схеме.
У заклинаний остался базовый урон. Интеллект убран везде, так как это был баг.
а доп. урон будет рассчитываться в Spell_ProcessMana а применяться в B_AssessMagic.

Чтобы к посоху применялась игровая физика (учитываются криты и защита противника от магии) я решил полезть в инит, следовательно из функции B_BeliarsWeaponSpecialDamage вырезал всякий урон, оставил только спецэффекты.

upd:
И еще, урон от физ. оружия и дальнего тоже растет с увеличением силы или ловкости, но об этом нигде не пишется в игре...
А с посохом это не проходит, пришлось эмулировать это свойство вручную.

upd:
Магии оставил урон как был, без интеллекта. НПЦ теперь норм атакуют.
Насчет ГГ немного сложнее:
0) если у нпц иммунитет к магии, уходим
1) узнать сколько хп отъело заклинание в ф-ии B_AssessMagic. dHP1
2) рассчитать сколько хп отъест заклинание с динамич. рассчитанным уроном. dHP.
3) отъесть разницу в хп. т.е отнять (dHP - dHP1) ед. здоровья.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Чтобы к посоху применялась игровая физика (учитываются криты и защита противника от магии) я решил полезть в инит, следовательно из функции B_BeliarsWeaponSpecialDamage вырезал всякий урон, оставил только спецэффекты.
Они точно так же учитываются через
Урон посохом мага огня
otherweap = Npc_GetReadiedWeapon(oth);
otherweap.damage[DAM_INDEX_FIRE] = DAMAGE_STAB01MAGIC + ATR_INTELLECT; в B_BeliarsWeaponSpecialDamage
Идет урон огнем. И защита у противника срабатывает от огня. И физика отрабатывает с навыком владения и критами.
Проверь, если не веришь. :)
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Идет урон огнем. И защита у противника срабатывает от огня. И физика отрабатывает с навыком владения и критами.
Проверь, если не веришь. :)
А, понял а чем ты, но:

1) при первичном ударе используется урон по умолчанию, если только он не был обновлен в init_world.

2) если увеличить манну или инт, то те единицы бонусного урона не будут работать пока не будет нанесен 1 удар. но это очень мало, этим можно пренебречь.

3) В инвентаре у посоха отображается динамич. рассчитанный урон и игрок всегда может его узнать. (может это лишнее?, как вариант, можно выдавать игроку новый посох через каждые +50 ед. урона, заранее созданный , при этом в названии указывать "Посох магов воды III"... урон: 150)


upd:
Вроде бы сделал скрипт, но не думаю что он будет работать правильно.
Все расчеты выполняются верно, но есть одно НО.
Если ГГ выстрелит в цель вдалеке, затем, пока летит магический шар, он переключится на др. заклинание по мощнее и тоже выстрелит - то если 1 шар не долетел до цели - это плохо, если учесть что 1 заклинание было слабое, а 2 сильное - получится что выстрелил сильным заклинанием 2 раза... редкий случай, но он вполне возможен и это баг...
Почему возникает баг? потому что в момент выстрела заклинания устанавливаются глобальные данные (урон от заклинания)...

Придется сделать по-другому:
сейчас гляну Npc_SetActiveSpellInfo - может что-нибудь получится... наверное эту ф-ию сделали для того, чтобы добавлять к заклинанию user_data.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
maggi1221,
1. если
2. а ты определишь разницу урона на глаз при навыке владения не 100% и приросте урона в 1 ед при предыдущем уроне в 100-300 ед.?
3. а кто мешает вообще убрать строки с цифрами урона в статах посоха в инвентаре? Одно время у меня было написано просто - "Урон зависит от интеллекта". Понимай как знаешь. :D
Зачем надумывать себе лишние проблемы?
Есть еще циклический триггер для пущей уверенности в правильности и своевременности подсчетов урона и изменений этого урона. *flowers*
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Вопрос:
Как добраться до того, что положил в Npc_SetActiveSpellInfo ?
в игре встречал применение этой ф-ии в спеллах трансформ.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Эта функция только для этих спеллов и нужна по большему счету, так что она тееб не поможет.
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
Почему возникает баг? потому что в момент выстрела заклинания устанавливаются глобальные данные (урон от заклинания)...
Это не совсем так. Двиг берет данные о повреждении заклинанием из своего расширенного класса, которые обновляются из скриптового в определенные моменты. В Г2 не проверял, а для первой я писал: при вставке в слот, при убирании из рук, ПОСЛЕ кастования, еще при доставнии, но только если цифрами и не в движении. Именно поэтому если хочется повесить расчет повреждений на двиг, а не вычитать хиты в скриптах, и при этом привязать повреждения к каким-то атрибутам кастующего, то единственный корректный вариант через бонусные повреждения в классе C_NPC. Динамические же изменения повреждения в скриптовом классе заклинания могут привести, например, к тому, что при перестрелке одинаковыми спелами для противника будет идти бонус ГГ и наоборот.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Хм, дак на крайняк можно эмуляцию доп урона делать, доп статы(там инта, "древнее знание") можно вешать на аивары, а дальше уже скриптами наносить дамаг, выставляя дамаг спелал на 0, или 1.
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Saturas,
Хм, дак на крайняк можно эмуляцию доп урона делать, доп статы(там инта, "древнее знание") можно вешать на аивары, а дальше уже скриптами наносить дамаг, выставляя дамаг спелал на 0, или 1.
Да,да я тож об этом подумал... на уме урон холодом и урон от электричества (вокруг нпц электрические разряды, пока он бегает и бьет меня его медленно. в течение 10 сек. бьет током и в моменты удара проигрывается спецэффект).... урон от огня контролирует движок,поэтому он идет мимо.... была еще идея сделать отравление, но этоуже слишком. огня холода и электричества (как перк к последствиям заклинаний разных школ) думаю хватит.

George_M,
Это не совсем так. Двиг берет данные о повреждении заклинанием из своего расширенного класса, которые обновляются из скриптового в определенные моменты. В Г2 не проверял, а для первой я писал: при вставке в слот, при убирании из рук, ПОСЛЕ кастования, еще при доставнии, но только если цифрами и не в движении. Именно поэтому если хочется повесить расчет повреждений на двиг, а не вычитать хиты в скриптах, и при этом привязать повреждения к каким-то атрибутам кастующего, то единственный корректный вариант через бонусные повреждения в классе C_NPC. Динамические же изменения повреждения в скриптовом классе заклинания могут привести, например, к тому, что при перестрелке одинаковыми спелами для противника будет идти бонус ГГ и наоборот.
Да, я тоже поломал голову, а как хотелось бы сделать динамический урон без извращений... В принципе можно обойтись и без интеллекта.
Просмотрев все руны и урон от них, понял что они сбалансированы, с каждым новым кругом появляются заклинания с лучшей "пробиваемостью", так вот
прибавка к урону (фиксированная) не повредит а только сделает актуальными те руны, которые ранее не обладали достаточной "пробиваемостью" для определенных НПЦ. только вот эта прибавка должна качаться медленно - каждые 3 ед. инт дают +1 к урону, а именно: hero.damage[DAM_INDEX_MAGIC] = (intellect - 30) / 3; осталось увеличить кол-во выдаваемого интеллекта за изучение рун и кругов магии для магов...
Теперь о посохе, для него эта надбавка будет маленькой, его урон зависит только от максимальной манны (без учета колец итд...). Вот и все насчет магии, не будем мучить движок =)
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Еще пара вопросов:

1) как узнать ударил ли ГГ по нпц, который поставил блок? долго смотрел на BS_xxx и не нашел ничего подходящего...
Это нужно для того, чтобы сделать половинный расход выносливости, если не попал по нпц...

2) как просматривать и редактировать .ТЕХ файлы? а также .FNT..
.хочу сделать при помощи метода, которым была реализована шкала выносливости: карму инноса - голубоватым цветом, белиара -багровым, аданоса? - синеватым...
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Это обычные TGA фалы, смотри мдк.
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
еще 1 вопрос:
свойство picklockstr сундука в спейсере.
где-то читал что если выставить -1 то будет каждый раз генерироваться новый код.
правда ли это? если нет, как сделать так, чтобы каждую загрузку игры код был разным.
параметры: длина последовательности L и R для взлома - сложность замка.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
maggi1221,
На сколько я помню, если в спейсере установить picklockstr -1, тогда сундук вообще НИЧЕМ невозможно будет открыть. В Г1 и Г2 встречал такие.

Чтобы сделать рендомные замки при загрузке сейва, нужно в Gothic.ini
значение pickLockScramble=0 поменять на другое, попробуй 1 или более.
 

Bjorn++

Участник форума
Регистрация
28 Июн 2011
Сообщения
1.063
Благодарности
46
Баллы
235
У меня вопрос: в каких скриптах изменменяешь характеристику оружия, и цены на товары? Напишите название скрипта, а то я весь Gothic.dat облазил, никак не могу найти. И еще вопрос: как сделать так что бы полоса маны всегда была на понеле (как полоса жизни), в каких скриптах это нужно менять? Зарание Огромное спасибо.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Про полосу маны - никак
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Как узнать момент, когда ГГ что-то поднимает?. Например срывает растение.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
maggi1221, Поставить проверку на наличие в инвентаре того что тебе нужно, или на инстанцию растения в мире повесить какую ни будь проверку. Наверное так... ::)
 

Bjorn++

Участник форума
Регистрация
28 Июн 2011
Сообщения
1.063
Благодарности
46
Баллы
235
Help! У меня тут вопросы накопились:
-Я тут написал скрипт Орка:

{
name[0] = "Уррок";
guild = GIL_FRIENDLY_ORC;
id = 2004;
voice = 18;
flags = 0;
npctype = npctype_main;
Mdl_SetVisual(self,"Orc.mds");
Mdl_SetVisualBody(self,"Orc_BodyWarrior",DEFAULT,DEFAULT,"Orc_HeadWarrior",DEFAULT,DEFAULT,-1);
fight_tactic = FAI_ORC;
daily_routine = Rtn_PreStart_2004;
};




func void Rtn_PreStart_2004()
{
TA_Stand_WP(8,0,23,0,"NW_2004_START");
TA_Stand_WP(23,0,8,0,"NW_2004_START");
};

Вопрос: что мне нужно дописать, что бы у него был надет топор орка? А то он у меня без оружия...
И ещё вопрос: что нужно прописать вместо TA_Stand_WP что бы орк сидел, а не стоял.

И ещё один вопрос:
-Я тут сделал что бы перс за мной ходил... у меня такой вопрос: как сделать что бы после диолога, например сказав: подожди здесь, этот перс перестал за тобой ходить, что нужно прописать?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Толик95, Ответы на свои вопросы читай в туторе вама...
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
450
Благодарности
267
Баллы
230
Если рассмотреть простейший пример:
Код:
[FONT="Verdana"]instance OrcShaman_Sit(Mst_Default_OrcShaman)
{
	B_SetVisuals_OrcShaman();
	[B]EquipItem([COLOR="DarkOrange"]self[/COLOR],ItMw_2H_OrcAxe_01);[/B]
	start_aistate = ZS_MM_AllScheduler;
	aivar[AIV_MM_OrcSitStart] = OnlyRoutine;
};[/FONT]

Где EquipItem - это функция одевания предметов(подробнее см. в справочнике).
Данная функция принимает 2 аргумента. Первый - на кого одевать. Второй - что одевать.

ItMw_2H_OrcAxe_01 - инстанция одеваемого предмета.

Почему в качестве первого аргумента установлен self?
Потому что функция используется внутри инстанции и self - означает ссылку на самого себя(т.е. на саму инстанцию). Проще сказать: "Сам на себя".

Если же функцию использовать не внутри какой-либо инстанции, а в каком-то другом месте, то для правильной работы нужно обязательно указывать в качестве аргумента ссылку на объект, применительно к которому вызывается функция.
Например так:
Код:
[FONT="Verdana"]func void HerEquip()
{
	[B]EquipItem([COLOR="DarkOrange"]PC_Hero[/COLOR],ItMw_2H_OrcAxe_01);[/B]
};
[COLOR="Green"]//где PC_Hero - это инстанция НПС, на которого одевается предмет.[/COLOR][/FONT]
Иначе могут возникнуть недоразумения.

Дальше, если рассмотреть этот же скрипт:
Код:
[FONT="Verdana"]instance OrcShaman_Sit(Mst_Default_OrcShaman)
{
	B_SetVisuals_OrcShaman();
	EquipItem(self,ItMw_2H_OrcAxe_01);
	[B]start_aistate = ZS_MM_AllScheduler;[/B][COLOR="green"]//состояние(цикл), в котором должен находиться НПС[/COLOR]
	[B]aivar[AIV_MM_OrcSitStart] = OnlyRoutine;[/B][COLOR="Green"]//время, когда будет сидеть орк (задаётся равным -1 и скорей всего это время контролируется внутри цикла его поведения).[/COLOR]
};[/FONT]

В остальном - старайся вспомнить и найти похожие ситуации в скриптах, которые были написаны разработчиками. И придерживайся схожести написания кода, если пока нету навыка программирования в скриптах.
То есть старайся делать по образцу и больше тестируй, так ты сможешь познать скриптовую систему!
 
Сверху Снизу