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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

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

MaGoth

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

Вложения

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
а смысл?
если НПС уникальный можно сразу сделать проверку по его айди
А если у тебя несколько десятков квестовых неписей, смерть которых нужно проверить?

А ещё есть клоны (квест "Убей 7 свирепых кроликов", например), которых нужно проверять по инстанции. В данном случае, видимо, речь шла о призванном создании, которое тоже является клоном. Впрочем, это не отменяет наличия у него id.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
На современных системах не повлияет. Да и на системах 20ти летней давность, думаю, тоже не повлияет. Просто куча проверок создаст захламлённость кода. Лучше вынести их в отдельную функцию. Ну и производить проверки для ВСЕХ умирающих неписей, коих многократно больше, чем тех, кого действительно нужно отследить, просто нерационально. Мой перфекционизм протестует. :D
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
Если уметь в оптимизацию, то бишь правильно подбирать порядок обращения ко всяким проверкам, можно их хоть миллиард понатыкать. На производительность влияет последовательное вычисление лишнего хлама, а не общее количество блоков if.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Ничего не мешает вынести проверки людей в отдельную функцию. Не понимаю зачем множить, множества и еще при этом прописывать отдельный аивер. Лучшее это враг хорошему :)

p.s.
Я вчера зачем то переименовал диски на компе. И не понять на кой черт снял букву с загрузочного тома. Как следствие сегодня с 6 утра ставлю Win 7 :)
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
прописывать отдельный аивер
Есть альтернативный подход. Можно выделить одну aivar-переменную под флаги и сохранять в ней аж 32 флага. Существенная часть aivar-переменных, кстати, используется именно в режиме флага. При желании, можно "расчистить поле" для действительно нужных вещей, "разжаловав" часть переменных до одного бита.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
ElderGamer, я не понимаю в целом зачем маркировать всех подряд аивером и с поводом и без. Если все равно надо будет делать проверку по инстанции нпс, зачем перед этим совершать ритуальную проверку по аивер? Если даже представить что герой одновременно убил 30 нпс и каждый из погибших был проверен 100 раз вместо одного или двух, ведь это не даст никакой нагрузки. Зачем же э тогда делать двойную работу и маркировать нпс и в его инстанции и потом все равно указывать его в проверке ? Можно конечно делать и проверку по миру и по гильдии и хз еще по чему, но непонятно зачем? :)

То есть я понимаю мотив, что хочется максимально все сделать вроде как по уму.. Но по уму ли оно в итоге окажется?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
маркировать нпс и в его инстанции
Думаю, не только в инстанции непися. Если речь идёт о квестовом персонаже, то флаг можно навесить при взятии квеста, в соответствующей инстанции диалога, например. И снять его по факту выполнения квеста. С клонами этот номер не прокатит, да, их придётся помечать в инстанции.

Зачем же э тогда делать двойную работу и маркировать нпс и в его инстанции и потом все равно указывать его в проверке ?
Это необязательно. Никто не заставляет. Но никто и не запрещает. ;)

Но по уму ли оно в итоге окажется?
Не знаю. Поскольку не знаю особенностей обработки скриптов движком. Возможно, то, что кажется мне оптимальным, не является таковым, с точки зрения движка.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
ElderGamer, сдаётся мне что вот этот ваш аивер для торговцев был точной невозврата. после него аивером будет помечаться всё: цвет волос, вредные привычки, важность, возможность обворовать, авторитет в обществе и так далее. а потом обязательно еще раз перепроверяться но уже напрямую по инстанции :) и в итоге это рано или поздно станет некой религиозной догмой. которая будет активно насаждаться под предлогом логики и оптимизации.

наверное важнее всё таки проверки организовать более рационально. точнее выработать в себе некий принцип и дух что бы оно соответствовало духу движка, а не религиозным догмам.
 

RPD

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
118
Благодарности
3
Баллы
40
Из-за одной текстуры ты перепаковываешь весь том? Или я как-то не так тебя понял?
ну по хорошему конечно новый том создать для новых текстур, но я понятия не имею, как подключать новые тома. Да, я перепаковывал, а что еще делать?
Покажи на картинке, что ты имеешь в виду.
Ну просто все слова заменяются на śńłńłńł ąąśń. Короче, неразбериху полную
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
RPD, у тебя наверное шрифты потрелись. скинь скриншоты какие к тебя файлы находятся в папке data после запуска игры.


для добавление новых текстур в общий том ты можешь испрльзовать 'VDFS tool' VDFS tool + сжатые VDF тома
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
118
Благодарности
3
Баллы
40
для добавление новых текстур в общий том ты можешь испрльзовать 'VDFS tool' VDFS tool + сжатые VDF тома
так я с помощью него это и делаю.
RPD, у тебя наверное шрифты потрелись. скинь скриншоты какие к тебя файлы находятся в папке data после запуска игры.
шрифты ломаются сразу после компиляции тома Textures.vdf с новой текстуркой
Пост автоматически объединён:

так я с помощью него это и делаю.

шрифты ломаются сразу после компиляции тома Textures.vdf с новой текстуркой
1700243668544.png

вот этот файл после внедрения текстуры и компиляции ломает шрифты. Также картинка в главном меню заменяется
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
Ну просто все слова заменяются на śńłńłńł ąąśń. Короче, неразбериху полную
Думаю, дело в том, что ты упаковал vdf-том с текущей датой во временнОм штампе. А там лежат текстуры шрифтов, кажется, немецкой версии. После перепаковки они получили более высокий приоритет над русскими шрифтами.

но я понятия не имею, как подключать новые тома
Если это vdf-тома, то просто положи их в папку Data. Нужно, чтобы они имели более поздний временнОй штамп, чем оригинальные тома с аналогичными ресурсами. Если это mod-тома, то нужно прописывать их в ini-файле мода.
 

RPD

Участник форума
Регистрация
13 Ноя 2023
Сообщения
118
Благодарности
3
Баллы
40
Думаю, дело в том, что ты упаковал vdf-том с текущей датой во временнОм штампе. А там лежат текстуры шрифтов, кажется, немецкой версии. После перепаковки они получили более высокий приоритет над русскими шрифтами.


Если это vdf-тома, то просто положи их в папку Data. Нужно, чтобы они имели более поздний временнОй штамп, чем оригинальные тома с аналогичными ресурсами. Если это mod-тома, то нужно прописывать их в ini-файле мода.
Огромное спасибо!
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
@ElderGamer, у тебя же есть функция которая считает сколько будет время если сделает +n минут ?
Daedalus:
//////////// Функции определение времени от камрада Nodrog /////////////
// с правками

func int Wld_GetHour(var int from,var int till)
{
    if(from >= 24)
    {
        return -1;
    };
 
    if(Wld_IsTime(from+1,0,till,0))
    {
        return Wld_GetHour(from+1,till);
    };

    Hlp_PrintConsole(Str_Format("Wld_GetHour: %i", from));

    return from;
};

func int GetTime_Hour()
{
    return Wld_GetHour(0,25);
};



func int Wld_GetMinute(var int Hour,var int from,var int till)
{
    if(from >= 60)
    {
        return -1;
    };
 
    if(Wld_IsTime(Hour,from+1,Hour,till))
    {
        return Wld_GetMinute(Hour,from+1,till);
    };

    Hlp_PrintConsole(Str_Format("Wld_GetMinute: %i", from));
    return from;
};

func int GetTime_Minute()
{
    var int h;  h = GetTime_Hour();
    return Wld_GetMinute(h,0,61);
};

получить время
Daedalus:
        var int h;  h = GetTime_Hour();
        var int m;  m = GetTime_Minute();

        Wld_SetTime(h+24,m);    // спустя сутки
 
Последнее редактирование:

RPD

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
RPD, попробуй аккуратно перенести B_FinishingMove из ZS_Attack_End в ZS_Attack_Loop обвешав доп проверками.
 
Последнее редактирование:

Oxbow

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

Daedalus:
//*************************************************************************//
//      функция запуска триггера
//*************************************************************************//
func void Start_Trigger_Attribute_TimeBonus(var c_npc slf,var int attribute,var int value,var int time)
{
    Attribute_TimeBonus = attribute;
    var C_Trigger trigger;
    //*************************************************************************//
    //- Func   - функция, которую будет вызывать триггер.
    //- Self   - NPC, который при вызове функции будет помещаться в self.
    //- Other  - NPC, который при вызове функции будет помещаться в other.
    //- Victim - NPC, который при вызове функции будет помещаться в victim.
    //AI_StartTriggerScriptEx(имя функции, задержка, self, other, victim) - расширенная функция, если необходимо указать в нее определенных участников
    trigger = AI_StartTriggerScriptEx("Trigger_Attribute_TimeBonus", 1, slf, null, null);
     trigger.AIVariables[0] = time;        // число повторов(секунд) триггера
    trigger.AIVariables[1] = attribute;  // атрибут
     trigger.AIVariables[2] = value;      // бонус к атрибуту
 
};

//*************************************************************************//
//      сам Trigger
//*************************************************************************//

func int Trigger_Attribute_TimeBonus()
{

    if (SelfTrigger.Delay < 1000)
    {
        SelfTrigger.Delay = 1000; // раз в секунду
        B_RaiseAttribute(self,SelfTrigger.AIVariables[1],SelfTrigger.AIVariables[2]);
    };

    Hlp_msg = Str_Format("Trigger_Attribute_TimeBonus[%s]. Счётчик %i", self.name, SelfTrigger.AIVariables[0]);
    Hlp_PrintConsole(Hlp_msg);

    SelfTrigger.AIVariables[0] -= 1;        // счётчик времени
 
    if (SelfTrigger.AIVariables[0] <= 0)
    {
        B_RaiseAttribute(self,SelfTrigger.AIVariables[1], -SelfTrigger.AIVariables[2]);
        attribute_TimeBonus = 0;
        return LOOP_END;
    };

    return LOOP_CONTINUE;
};

собрал проект. добавил функцию которая меняет атрибуты, инстанции зелий. тестировал на НВ. архив с проектом прилагаю.

Попытался его переделать под заклинание и добавить к моду. Создал в папке Items папку Trigger_Attribute_TimeBonus туда закинул все файлы, которые создал MV 7 кроме Constants, код оттуда закинул в дефолтный Constants.

Компилятор ругается на AI_StartTriggerScriptEx

Подскажите, как это решить
 
Сверху Снизу