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

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

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

MaGoth

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

Вложения

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

STARK

Участник форума
Регистрация
20 Янв 2011
Сообщения
549
Благодарности
142
Баллы
220
Интересно, что в некоторых подобных ситуациях камера частично пытается следовать за собеседником.
Например, в Мод Фиксе, когда Кор Ангар подходит к Ю'Бериону, чтобы дать ему травы.
Повторяю все команды, но не могу повторить этот эффект.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.186
Баллы
525
Если я правильно помню, то там можно привязать поведение камеры к определенному диалогу, врать не буду, Может быть это и не так.
Там инстанции с настройками положения камеры в разных игровых ситуациях (движение, инвентарь, взаимодействие с объектом и т.д.). В случае взаимодействия с объектом, есть дефолтная инстанция. Но, кроме этого, для каждого объекта с использованием его названия можно создать особую инстанцию. Или даже две инстанции, как, например, для кроватей, на которые можно улечься и с правой, и с левой стороны.

Для диалогов существует файл DIALOGCAMS.ZEN в папке _work\data\PRESETS. Как он устроен, я не разбирался. Думаю, аналогично камерам в Спейсере. То есть, теоретически, там можно создавать движущиеся камеры, используемые во время диалога. На сами камеры, как я понимаю, движок выбирает рандомно. Привязать камеру к конкретному диалогу... не знаю... верится с трудом.

Пришлось добавить дополнительную строку диалога герою, чтоб камера вернулась к нему (герой к тому моменту подбегает к собеседнику).
Используемая камера выбирается движком из набора камер и привязывается к сцене так, чтобы показывать говорящего в данный момент персонажа. Обычно, это привязка к тому, кто слушает. Камера расположена у него за спиной или немного сбоку и направлена на говорящего. Но иногда, вроде бы, бывает, что камера привязывается к говорящему. Вспомни эпизод с передачей письма Мильтену в оригинале. Он по ходу диалога идёт к Корристо на второй этаж дома магов. Обычно, камера привязывается к ГГ и только следит за изменяющимся положением Мильтена. Но иногда, очень редко, можно было видеть, как камера следовала за Мильтеном, пока он совершал своё "восхождение" и возвращался обратно.
 

STARK

Участник форума
Регистрация
20 Янв 2011
Сообщения
549
Благодарности
142
Баллы
220
Обычно, камера привязывается к ГГ и только следит за изменяющимся положением Мильтена. Но иногда, очень редко, можно было видеть, как камера следовала за Мильтеном, пока он совершал своё "восхождение" и возвращался обратно.
Под следованием, которого я добиваюсь, я как раз подразумевал поворот камеры на месте. У меня почему-то даже этого нет.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
674
Благодарности
655
Баллы
245
Кто-нибудь знает, как определить ходит ли PC с заженным факелом или нет?
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.879
Благодарности
5.326
Баллы
910
Когда обновится zParserExtender (в нем будут исправлены функции MDL_ + добавлены новые), можно просто проверять какой предмет в руке у НПС и делать, что тебе надо
1620648357536.png
1620648378713.png
Можно будет усложнять каких-то врагов, как в В2
Youtube

1620651631757.png
Daedalus:
    //проверяем держит ли факел в руке стражник
    var C_NPC Mil_310; Mil_310 = Hlp_GetNpc(Mil_310_Stadtwache);
    var C_item asddd; asddd = Npc_GetSlotItem(Mil_310, "ZS_LEFTHAND");
   
    if (!Hlp_IsNull(asddd))
    {  
        var string fgd; fgd = asddd.name;
       
        if (Hlp_StrCmp(fgd, ItLsTorchburning.name))
        {
            PrintScreen(ConcatStrings(Mil_310_Stadtwache.name," держит в левой руке факел!"),39,39,FONT_ScreenSmall,1);
        };
       
    };

Весь тестовый скрипт для изучения. Заскриптил максимально просто. (Я болван для чего-то более правильного)
 

Вложения

  • test.d
    5,6 KB · Просмотры: 6

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.903
Благодарности
537
Баллы
275
Приветствую всех. Используя GS 3.16, хочу немного скорректировать бонусы к навыкам у некоторых видов оружия, для Неоф. обновления Г2НВ. Но столкнулся с проблемой:
В файле IT_Melee_Weapons я нахожу:
Код:
instance ItMw_1h_Vlk_Sword(C_Item)
{
    name = "Шпага";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_SWD;
    material = MAT_METAL;
    value = Value_VLKSchwert;
    damageTotal = Damage_VLKSchwert;
    damagetype = DAM_EDGE;
    range = Range_VLKSchwert;
    on_equip = Equip_1H_05;
    on_unequip = UnEquip_1H_05;
    cond_atr[2] = ATR_DEXTERITY;
    cond_value[2] = Condition_VLKSchwert;
    visual = "ItMw_018_1h_SwordCane_01.3ds";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Dex_needed;
    count[3] = cond_value[2];
    text[4] = NAME_ADDON_BONUS_1H;
    count[4] = Waffenbonus_05;
    text[5] = NAME_Value;
    count[5] = value;
};
В файле Tuning_Melee_Weapons соответственно обнаруживаю:
Код:
const int Waffenbonus_01 = 1;
const int Waffenbonus_02 = 2;
const int Waffenbonus_03 = 3;
const int Waffenbonus_04 = 4;
const int Waffenbonus_05 = 5;
const int Waffenbonus_06 = 6;
const int Waffenbonus_07 = 7;
const int Waffenbonus_08 = 8;
const int Waffenbonus_09 = 9;
const int Waffenbonus_10 = 10
Полагаю, что редактировать мне нужно именно строку:
count[4] = Waffenbonus_05;
Однако, при изменении Waffenbonus_05 на Waffenbonus_03, бонус к навыку меняется лишь в описании к оружию, НО функционирует прежний - в 5%.
Что я делаю не так?
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.128
Благодарности
3.221
Баллы
485
Daedalus:
instance ItMw_1h_Vlk_Sword(C_Item)
{
    ...
    on_equip = Equip_1H_03;
    on_unequip = UnEquip_1H_03;
    ...
    count[4] = Waffenbonus_03;
    ...
};
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.903
Благодарности
537
Баллы
275
Приветствую всех.
Подскажите, пожалуйста, что нужно дописать в скрипт оружия, чтобы добавить ему и дополнительный урон магией, наряду с физическим?

Код:
instance ItMw_Zweihaender3(C_Item)
{
    name = "Сила рун";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_2HD_SWD;
    material = MAT_METAL;
    value = Value_Zweihaender3;
    damageTotal = Damage_Zweihaender3;
    damagetype = DAM_EDGE;
    range = Range_Zweihaender3;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_Zweihaender3;
    visual = "ItMw_060_2h_sword_01.3DS";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_TwoHanded;
    text[5] = NAME_Value;
    count[5] = value;
};
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Подскажите, пожалуйста, что нужно дописать в скрипт оружия, чтобы добавить ему и дополнительный урон магией, наряду с физическим?
как пример::
Daedalus:
damagetype = DAM_EDGE | DAM_MAGIC;
разделяй типы урона вертикальной чертой.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.943
Благодарности
936
Баллы
275
так же надо добавить и сам урон от магии :)

таким образом у тебя получится

Daedalus:
    // damageTotal = Damage_Zweihaender3;
    // damagetype = DAM_EDGE;
   damagetype = DAM_EDGE | DAM_MAGIC;
   damage[DAM_INDEX_EDGE]    =      120;   // режущий урон
   damage[DAM_INDEX_MAGIC]    =    50;   // урон от магии

    // если будешь добавлять урон в описание оружия то еще   
    // text[2] = NAME_Damage;    count[2] = damageTotal;
    // text[3] = NAME_Str_needed;    count[3] = cond_value[2];
    // text[4] = NAME_TwoHanded;
    TEXT[2]                =    NAME_Dam_Edge;            COUNT[2]    =    damage[DAM_INDEX_EDGE];
    TEXT[3]                =    NAME_Dam_Magic;            COUNT[3]    =    damage[DAM_INDEX_MAGIC];
    TEXT[4]                =    NAME_Str_needed;        COUNT[4]    =    cond_value[2];
    TEXT[5]                =    NAME_Value;                COUNT[5]    =    value;


Daedalus:
//
//    DAMAGE TYPE ARRAY INDICES    ( !!! DAM_XXX = 1 << DAM_INDEX_XXX !!! )
//
CONST INT DAM_INDEX_BARRIER                                = 0                        ;          //                 nur der Vollstandigkeit und Transparenz wegen hier definiert ( _NICHT_ verwenden )
CONST INT DAM_INDEX_BLUNT                                = DAM_INDEX_BARRIER + 1    ;
CONST INT DAM_INDEX_EDGE                                = DAM_INDEX_BLUNT    + 1    ;
CONST INT DAM_INDEX_FIRE                                = DAM_INDEX_EDGE    + 1    ;
CONST INT DAM_INDEX_FLY                                    = DAM_INDEX_FIRE    + 1    ;
CONST INT DAM_INDEX_MAGIC                                = DAM_INDEX_FLY        + 1    ;
CONST INT DAM_INDEX_POINT                                = DAM_INDEX_MAGIC    + 1    ;
CONST INT DAM_INDEX_FALL                                = DAM_INDEX_POINT    + 1    ;          //                 nur der Vollstandigkeit und Transparenz wegen hier definiert ( _NICHT_ verwenden )
CONST INT DAM_INDEX_MAX                                    = DAM_INDEX_FALL    + 1 ;
[/SPOILER]
 

psychedelic_soul

Участник форума
Регистрация
2 Авг 2015
Сообщения
11
Благодарности
0
Баллы
155
Всех приветствую!
Господа, помогите верно указать значения(необходимые сроки и их порядок) для фала *.d
Задача: Хочу поменять характеристики оружия: урон, длину, требования.
Взял для примера ITMW_2H_SWORD_M_01 - Ржавый двуручный меч
nstance itmw_2h_sld_sword(c_item) {
name = я28338;
cond_atr[2] = atr_strength;
cond_value[2] = 70;
damagetotal = 90;
damagetype = dam_edge;
description = name;
flags = item_2hd_swd | item_mission;
inv_animate = 1;
mainflag = item_kat_nf;
material = mat_metal;
on_equip = equip_2h_heavy;
on_unequip = unequip_2h_heavy;
range = range_sld2hschwert;
value = value_sld2hschwert;
visual = я28339;
visual_change = name_twohanded_slash;
text = я28340;
text[1] = я28341;
text[2] = я28342;
text[5] = name_value;
count[5] = value_sld2hschwert;
};

Игра: Готика 2 Альтернативный\Новый баланс.
извлек Gothic.dat через программу Gothic VDFS, затем ищу нужные строки через Decdat, создаю текстовый файл *.d и закидываю в папку \Gothic II\System\Autorun

Но программа\игра автозапуска постоянно ругается, то на имя я28338, то еще на что. И игра закрывается.
Как понимаю не верно указываю строки.

п.с. это моя первая попытка внести легкое редактирование, и что называется человек не в теме. Прошу простить и понять.

 
Последнее редактирование:

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.879
Благодарности
5.326
Баллы
910
я28338 это ссылка на текстовую константу в датнике. Её обязательно нужно восстановить, ищешь просто по номеру вставляешь вместо её
Как пример
Daedalus:
instance itmw_2h_sld_sword(c_item)
{
       name = "Меч наемника";//name = я28338;
       cond_atr[2] = atr_strength;
       ***
};
 

psychedelic_soul

Участник форума
Регистрация
2 Авг 2015
Сообщения
11
Благодарности
0
Баллы
155
N1kX, Слушай, а тебя полного, правильно указанного кода под рукой нет? На любое оружие для наглядности?
а то у меня теперь другая ошибка вылетает
эксорт.jpg
скорее всего какие то строки тоже указаны не верно.
повторюсь, задача изменить длину, ренжу, требования. тестируемый оружие: Ржавый двуручник - ITMW_2H_SWORD_M_01
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.879
Благодарности
5.326
Баллы
910
Эта ошибка говорит о том, что у тебя нет конца строки в файле.
 

psychedelic_soul

Участник форума
Регистрация
2 Авг 2015
Сообщения
11
Благодарности
0
Баллы
155
N1kX, Дружище, ты мне сильно помог! Очень тебе благодарен!

instance itmw_2h_sword_m_01(c_item) {
name = я27865;
cond_atr[2] = atr_strength;
cond_value[2] = 50;
damagetotal = 25;
damagetype = dam_edge;
description = name;
flags = item_2hd_swd | item_mission;
inv_animate = 1;
mainflag = item_kat_nf;
material = mat_metal;
on_equip = equip_2h_medium;
on_unequip = unequip_2h_medium;
range = range_misc2hsword;
value = 10;
visual = я27866;
text = я27867;
text[1] = я27868;
text[2] = я27869;
text[5] = name_value;
count[5] = 10;
};

instance itmw_2h_sword_m_01(c_item) {
name = "Требуется силы";
cond_atr[2] = atr_strength;
cond_value[2] = 10;
damagetotal = 65;
damagetype = dam_edge;
description = name;
flags = item_2hd_swd | item_mission;
inv_animate = 1;
mainflag = item_kat_nf;
material = mat_metal;
on_equip = equip_2h_medium;
on_unequip = unequip_2h_medium;
range = range_misc2hsword;
value = 10;
visual = "Ржавый двуручник";
text = "ItMw_025_2h_Sword_old_01.3DS";
text[1] = "Рубящий урон: 25";
text[2] = "Длина оружия: 100 | Двуручное";
text[5] = name_value;
count[5] = 10;
};

Действительно, как заменил все я***** значения на советующие им описание, ошибки пропали и конфигурация применилась.


Осталось решить последнюю проблему - перестал графически отображаться этот меч. т.е. он есть, но его не видно.
Подскажи плиз, если знаешь куда капать теперь?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.879
Благодарности
5.326
Баллы
910
Все напутал...
Daedalus:
instance itmw_2h_sword_m_01(c_item)
{
    name = "Ржавый двуручник"; //name = "Требуется силы";
    
    mainflag = item_kat_nf;
    flags = item_2hd_swd | item_mission;
    material = mat_metal;
    
    value = 10;
    
    damagetotal = 65; //урон
    damagetype = dam_edge;
    range = 200; //радиус
    
    on_equip = equip_2h_medium;
    on_unequip = unequip_2h_medium;
    
    cond_atr[2] = atr_strength;
    cond_value[2] = 10; //требование ношения
    visual = "ItMw_025_2h_Sword_old_01.3DS"; //visual = "Ржавый двуручник";
    
    description = name;
    text[0] = "Требуется силы: 10"; //text = "ItMw_025_2h_Sword_old_01.3DS";
    text[1] = "Рубящий урон: 65";
    text[2] = "Длина оружия: 200 | Двуручное";
    text[5] = name_value;
    count[5] = value;
    
     inv_animate = 1;
};
 
Последнее редактирование:
Сверху Снизу