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

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

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

MaGoth

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

Вложения

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

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
122
Благодарности
3
Баллы
40
В мод-фиксе у меня призванные создания ведут активный поиск атакующих ГГ неписей с помощью периодического вызова функции Wld_DetectNpc. Но можно ли её использовать вообще без указания инстанции, состояния или гильдии непися, которого нужно обнаружить, я не знаю. Нужно пробовать.
Нет проблем с использованием ее без указания параметров - функция это предусматривает. У меня скорее проблема, что я не совсем представляю как вызывать функцию периодически (когда и каким образом)
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.443
Благодарности
3.263
Баллы
525
Посмотри файл скрипта во вложении.
 

Вложения

  • ZS_MM_SummonedByPC.d.txt
    24,6 KB · Просмотры: 26

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
122
Благодарности
3
Баллы
40
Посмотри файл скрипта во вложении.
Я решил сделать проще:

Daedalus:
    if(Npc_IsPlayer(other) == true)
    {
        var C_NPC scavenger; scavenger = Hlp_GetNpc(BogdanScavenger);
        var C_NPC keiler; keiler = Hlp_GetNpc(BogdanKeiler);
       
        PrintScreen(ConcatStrings("check ",self.name),1,-1,FONT_Screen,3);
        if(Hlp_IsValidNpc(scavenger) && (Npc_GetDistToNpc(scavenger,other) <= 500))
        {
            PrintScreen("c zsmmattack! ",1,-1,FONT_Screen,3);
            Npc_ClearAIQueue(scavenger);
            Npc_SetTarget(scavenger,self);
            B_ClearPerceptions(scavenger);
            AI_StartState(scavenger,ZS_MM_Attack,0,"");
        };
        if(Hlp_IsValidNpc(keiler) && (Npc_GetDistToNpc(keiler,other) <= 500))
        {
            PrintScreen("c zsmmattack!",1,-1,FONT_Screen,3);
            Npc_ClearAIQueue(keiler);
            Npc_SetTarget(keiler,self);
            B_ClearPerceptions(keiler);
            AI_StartState(keiler,ZS_MM_Attack,0,"");
        };
    };
Внедрил данный код в loop zs_mm_attack, zsattack и zs_mm_threaten.
 
Последнее редактирование:

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
122
Благодарности
3
Баллы
40
Вопрос, каким образом вызывать функцию показа текста на листе бумаги без использования самого предмета или букстенда? Просто вызвать посреди каких-либо скриптов в диалогах например?

Upd:
Вызывается почему -то везде, но не в диалогах. Причем я пробовал вызывать ее как просто в info, так и в выборках. Никак не хочет
 
Последнее редактирование:

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
122
Благодарности
3
Баллы
40
Смена цвета текста, дополнительное диалоговое окно в архолосе - это все реализовано с внедрением новых зависимостей непосредтсвенно код движка или ничего сверхестественного проделано не было? Мне, как пользователю, просто инстересно могу ли я это использовать у себя в поректах, есть ли сходники, может плагин какой?
 

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
266
Благодарности
33
Баллы
200
Здраствуйте, я хочу создать зелье для того, чтобы лесное зверьё перестало быть агрессивным к ГГ. Подскажите, есть какой-то атрибут отвечающий за это?
 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
881
Благодарности
502
Баллы
245
Здраствуйте, я хочу создать зелье для того, чтобы лесное зверьё перестало быть агрессивным к ГГ. Подскажите, есть какой-то атрибут отвечающий за это?
За реагирование зверья на врагов отвечает B_MM_AssessEnemy.
Если тебе нужно,чтобы все зверье не игнорировало на ГГ то, как вариант в инстанции зелья пропиши переменную,типа:
Код:
instance ItPo_xxx(C_Item)
{
    name = NAME_Trank;
    mainflag = ITEM_KAT_POTIONS;
    flags = 0;
    visual = "xxx.3ds";
    material = MAT_GLAS;
    on_state[0] = Use_xxx;
    scemeName = "POTIONFAST";
    description = name;
};

func void Use_xxx()
{
    if(Npc_IsPlayer(self))
    {
        usexxx = true;
    };
};
а в B_MM_AssessEnemy сразу сверху
Код:
if(Npc_IsPlayer(other) && usexxx == true)
    {
        return;
    };
не забыв прописать переменную в сториглоб.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.035
Благодарности
995
Баллы
295
func c_item Npc_GetInvItem
func c_npc Hlp_GetNpc

а есть аналогичная функции для c_info ?
 

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
266
Благодарности
33
Баллы
200
Подскажите как можно сделать в Готике, чтобы НПС агрессировал на открытие сундука, но после диалога игнорировал (типо разрешает) открытие сундука?

И еще подскажите, как сделать затемнение экрана? Есть такая возможность?
 
Последнее редактирование:

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
477
Благодарности
310
Баллы
230
И еще подскажите, как сделать затемнение экрана?
Скрипты в "System\Autorun\".
Тест - F10 в игре.

Подскажите как можно сделать в Готике, чтобы НПС агрессировал на открытие сундука, но после диалога игнорировал (типо разрешает) открытие сундука?
Изучаем: Vam_tutor.chm -> Уроки скриптологии, часть 2 -> 5. Функции обработки восприятий людей -> Функция реакции людей на использование МОB's -> func void B_AssessUseMob().
Заходим в свои скрипты: "...Scripts\Content\AI\Human\B_Human\B_AssessUseMob.d"
включаем голову и меняем условия на своё усмотрение.
 

Вложения

  • DarkScreenTest_Game.d
    232 байт · Просмотры: 7
  • DarkScreenTest_VFX.d
    754 байт · Просмотры: 5
Последнее редактирование:

DanilaDNL

Участник форума
Регистрация
4 Янв 2022
Сообщения
2
Благодарности
0
Баллы
35
Господа, а есть какая-нибудь функция возведения в степень?
Не нашел нигде эту информацию в доках и никто как будто никогда не спрашивал.
Может это запретный вопрос?)
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
10.043
Благодарности
6.865
Баллы
1.850
DanilaDNL, прям стандартная, из дедалуса, без расширений типа икаруса, лего, ниндзи и юниона? такой функции нет.
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
122
Благодарности
3
Баллы
40
Не нашел на форуме уроков по созданию правильной структуры проекта, добавляя в моде новые папки и скрипты. После компиляции и декомпиляции датника выходит так, что все новые скрипты складываются в папку _misc в абсолютно хаотичном порядке. Как показать компилятору, куда именно нужно складывать новые скрипты, в какие папки (новые или старые)?
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.443
Благодарности
3.263
Баллы
525
Всем привет! Подскажите, как прописать свою вставку в существующую в скриптах функцию средствами Юнион с помощью d-файла в папке System\Autorun? Мне нужно в самом начале существующей функции добавить свой фрагмент кода так, чтобы остальная часть функции не изменилась. Вроде бы, такая возможность существует.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.035
Благодарности
995
Баллы
295
Daedalus:
func void B_AssessMagic ()
{
    // ------ ChargeZap ------
    if (Npc_GetLastHitSpellID(self) == SPL_ChargeZap)
    {
        Hlp_PrintConsole("B_AssessMagic // spelltype == SPL_CHARGEZAP");

        Npc_ClearAIQueue    (self);
        B_ClearPerceptions    (self);
        AI_StartState        (self, ZS_ShortZapped, 0, "");
        return;
    };

    B_AssessMagic_old();
};
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
677
Благодарности
663
Баллы
245
А мне вот интересно. Почему в последнем случае компилятор требует наличие запятой, хотя свойства text и count массивы?

Daedalus:
func void Item_OnEquip ()
{
        Print ( item.description ); // Работает
        Print ( IntToString ( item.count[2] ) ); // Работает
        Print ( item.text[2] ); // Не работает
};
 
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.345
Благодарности
4.665
Баллы
625
Потому что массивы - это корявые костыли. Когда парсер генерит вызов функции, он начинает читать аргументы в скобках. Лишь для типа int это реализовано относительно адекватно через вызов parse expression (можешь и взять объект по индексу, либо даже что-то посчитать), а для других типов ожидается либо конкретный объект, либо вызов другой функции.
 
Сверху Снизу