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

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

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

Agama Script tools(Расширитель возможностей скриптов и игры в целом)

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
AST - новая разработка скриптового расширителя от Undead Mod Team.
(в разработке...)
AST%20Logo%20%281%29.jpg


В.Зачем это нужно и что дает?
О. Этот пакет необходим, если вам недостаточно стандартных возможностей движка.

В. Какие конкретно возможности добавляет AST?
О. Добавлен ряд полезных( и не очень) скриптовых External функций, такие как:
Открытие/закрытие сундука из скриптов, удаление предметов из сундуков через скрипты, смена уровня(ChangeLevel) из скрипта, и многое многое другое.

В. Обязательно ли компилировать скрипты игрой, если используется AST? Тк. в Ikarus, и G2Ext была возможность компиляции только игрой, как будет у вас?
О. Возможности компиляции скриптов будет две, первая, как обычно, игрой, вторая - вместе с релизом AST будет выпущена обновленная версия Gothic Sourcer(v3.15+) эта версия будет поддерживать импорт EXTERNAL функций из отдельного файла. Огромное спасибо комраду Vam, за то что выдал мне исходники*flowers*


P.s. В данный момент на основе AST разрабатывается наш мод Анклав, с его помощью у нас реализована Карманная кража как в г1, обновленная система стрельбы из лука, улучшенная система магии и многое многое другое.

P.s.[2] В обозримом будущем в Gothic Sourcer будет добавлена возможность корректной компиляции скриптового пакета Ikarus(будет опция в меню)
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.776
Баллы
1.625
Сат, первый релиз(Демо-бета версия) есть?

Также в наверх пока идем, позже видно будет, может в лавку переедем.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Есть альфа которая сейчас тестируется, тестирование закрытое.
Сегодня-завтра освою готик сорсер, и тестеры получать свежую. версию сорсера.
 

enil9

Участник форума
Регистрация
25 Май 2014
Сообщения
66
Благодарности
14
Баллы
165
Можно-ли через ASЕ получит полное имя Mob-a ? ( Npc_GetDetectedMob возвращает короткое)
И с совместим-ли c systempack -ом ?

И где можно посмотреть хотя-бы список новых скриптовых функций?
 
Последнее редактирование:

Saturas


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

До сих пор с СП проблем не было обнаружено.
 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
873
Благодарности
501
Баллы
245
Будет ли, присутствовать возможность завести диалог с Itemом,находящемся в рюкзачке?
(Без жуков-невидимок,и прочих костылей)
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Да, позже будет и это
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.576
Благодарности
4.171
Баллы
915
Желательно добавить в AST функцию, возвращающую название распорядка жизнедеятельности, который сейчас выполняет NPC:
Код:
func string Npc_GetRoutine(var C_Npc npc);
Название не должно содержать префикс "Rtn_XXX_", например, "PreStart", "Start", "Tot" и т.д. Если у NPC нет такого расписания, то функция возвращает пустую строку. Сейчас приходится выяснять, какое расписание выполняет NPC с помощью проверки нахождения его около определённого waypoint, например:
if(Npc_GetDistToWP(self,"NW_XARDAS_BANDITS_LEFT") < 500)
Но если NPC активно перемещается по локации, то приходится проверять все waypoint, на которых он может находиться, что заметно усложняет код.
 
Последнее редактирование:

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
А эта встроенная не канает?
func int Npc_IsInRoutine (c_npc self, func state);

Я ей пользовался в скриптах, но, правда, не проверял.
if((PIRATES_HUNTERS_BATTLE == TRUE) && Npc_IsInState(self,ZS_Talk)
&& ((Npc_GetDistToWP(self,"PC_SMALLTALK_PIRATE_02") <= 3000) || Npc_IsInRoutine(self,Rtn_AttackPir_2001)))
{
return TRUE;
};
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.576
Благодарности
4.171
Баллы
915
Это немного другая функция, возвращающая TRUE или FALSE. В скриптах G2a я видел использование этой функции в скрипте AI\Test_Scripts\Testmodelle_Kalveram.d:
Код:
instance Info_TA_Testmodell_GuideStart(C_Info)
{
    npc = TA_Testmodell;
    nr = 997;
    condition = DIA_TA_Testmodell_GuideStart_Condition;
    information = DIA_TA_Testmodell_GuideStart_Info;
    permanent = TRUE;
    description = "Покажи мне Guide_Player!";
};


func int DIA_TA_Testmodell_GuideStart_Condition()
{
    var C_Npc Testmodell;
    Testmodell = Hlp_GetNpc(TA_Testmodell);
    if(!Npc_IsInRoutine(self,ZS_Guide_Player))
    {
        return 1;
    };
};

func void DIA_TA_Testmodell_GuideStart_Info()
{
    AI_StopProcessInfos(self);
    Npc_ExchangeRoutine(self,"Guide");
};


instance Info_TA_Testmodell_GuideStart(C_Info)
{
    npc = TA_Testmodell;
    nr = 997;
    condition = DIA_TA_Testmodell_GuideStart_Condition;
    information = DIA_TA_Testmodell_GuideStart_Info;
    permanent = TRUE;
    description = "Покажи мне Guide_Player!";
};


func int DIA_TA_Testmodell_GuideStart_Condition()
{
    var C_Npc Testmodell;
    Testmodell = Hlp_GetNpc(TA_Testmodell);
    if(!Npc_IsInRoutine(self,ZS_Guide_Player))
    {
        return 1;
    };
};

func void DIA_TA_Testmodell_GuideStart_Info()
{
    AI_StopProcessInfos(self);
    Npc_ExchangeRoutine(self,"Guide");
};


instance Info_TA_Testmodell_GuideEnd(C_Info)
{
    npc = TA_Testmodell;
    nr = 998;
    condition = DIA_TA_Testmodell_GuideEnd_Condition;
    information = DIA_TA_Testmodell_GuideEnd_Info;
    permanent = TRUE;
    description = "Занончить Guide_Player!";
};


func int DIA_TA_Testmodell_GuideEnd_Condition()
{
    var C_Npc Testmodell;
    Testmodell = Hlp_GetNpc(TA_Testmodell);
    if(Npc_IsInRoutine(self,ZS_Guide_Player))
    {
        return 1;
    };
};

func void DIA_TA_Testmodell_GuideEnd_Info()
{
    AI_StopProcessInfos(self);
    Npc_ExchangeRoutine(self,"START");
};


instance Info_TA_Testmodell_FollowStart(C_Info)
{
    npc = TA_Testmodell;
    nr = 995;
    condition = DIA_TA_Testmodell_FollowStart_Condition;
    information = DIA_TA_Testmodell_FollowStart_Info;
    permanent = TRUE;
    description = "Иди за мной!";
};


func int DIA_TA_Testmodell_FollowStart_Condition()
{
    var C_Npc Testmodell;
    Testmodell = Hlp_GetNpc(TA_Testmodell);
    if(!Npc_IsInRoutine(self,ZS_Follow_Player))
    {
        return 1;
    };
};

func void DIA_TA_Testmodell_FollowStart_Info()
{
    AI_StopProcessInfos(self);
    Npc_ExchangeRoutine(self,"FOLLOW");
};


instance Info_TA_Testmodell_FollowEnd(C_Info)
{
    npc = TA_Testmodell;
    nr = 998;
    condition = DIA_TA_Testmodell_FollowEnd_Condition;
    information = DIA_TA_Testmodell_FollowEnd_Info;
    permanent = TRUE;
    description = "Хватит ходить за мной!";
};


func int DIA_TA_Testmodell_FollowEnd_Condition()
{
    var C_Npc Testmodell;
    Testmodell = Hlp_GetNpc(TA_Testmodell);
    if(Npc_IsInRoutine(self,ZS_Follow_Player))
    {
        return 1;
    };
};

func void DIA_TA_Testmodell_FollowEnd_Info()
{
    AI_StopProcessInfos(self);
    Npc_ExchangeRoutine(self,"START");
};
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.409
Благодарности
3.239
Баллы
525
функцию, возвращающую название расписания жизнедеятельности, которое сейчас выполняет NPC:

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

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.576
Благодарности
4.171
Баллы
915
В чём конкретно заключается замысел?
Неужели непонятно? Без использования костылей получить название текущего распорядка по аналогии с функциями получения waypoint:
Код:
func string Npc_GetNearestWP(var C_Npc npc);
func string Npc_GetNextWP(var C_Npc npc);
 
Последнее редактирование:

Saturas


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

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Ну, такая функция может быть сделана за пару минут, так что Сатурас вполне может добавить. Это 100%.
Я такое делал на Икарусе.
Я даже возвращал название запускаемой функции типа:

func string XXX(){}
И она возвращала "XXX".

Сат, можешь глянуть в скриптах Саги. Если нет - стукни. Вообще, в Икарусе - есть пример такого.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Еще раз напоминаю, что распорядки к нпс присваиваются в виде индексов, а не имен функций.
Хотя не, это я туплю делается за минуту, да.
 
Последнее редактирование:

bullet

Участник форума
Регистрация
1 Дек 2008
Сообщения
35
Благодарности
4
Баллы
165
Saturas, меня интересует такой момент: где можно глянуть весь перечень нововведений и перспективы его дополнения? Так сказать, огласите весь список, пожалуйста )
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Saturas, меня интересует такой момент: где можно глянуть весь перечень нововведений и перспективы его дополнения? Так сказать, огласите весь список, пожалуйста )
На днях огласим, сейчас активная доработка и приближение к релизу
И да, что имелось ввиду под "перспективы дополнения" ?
 
Последнее редактирование:

bullet

Участник форума
Регистрация
1 Дек 2008
Сообщения
35
Благодарности
4
Баллы
165
перспективы - это в смысле потенциал AST будет раскрыт на 100% или останется возможность дальнейшего расширения (есть задумки, вряд ли вы все их предусмотрели)
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
перспективы - это в смысле потенциал AST будет раскрыт на 100% или останется возможность дальнейшего расширения (есть задумки, вряд ли вы все их предусмотрели)
Теперь понял, потенциал чтобы раскрыть на 100% нужны годы, ибо он огромен. А так будет SDK на С++ с которым можно будет что то новое добавлять
 

Carnage/Mark56

Участник форума
Регистрация
27 Дек 2014
Сообщения
16
Благодарности
56
Баллы
165
Hello, I am really impressed. I only want to ask if there is going to be implemented forced animation synchronization. To make things like Handshakes, in game cutscenes, assassination, killing blows.
(Sory but I don't speak russian, and could not find any english thread)
google translate:
Здравствуйте, я действительно впечатлен. Я только хочу спросить, если там будет реализована принудительной синхронизации анимации. Для того, чтобы такие вещи, как рукопожатий, в игровых роликов, убийства, убийства удары.
 
Сверху Снизу