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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Внимание!
    — Требуется примерно по 3-5 человек на каждую из версий ОС:: - Windows® XP SP3, Windows® Vista SP2, Windows® 7 SP1, Windows® 8, Windows® 8.1, Windows® 10(build 10 1607) и Windows® 10(build 10 1703). Для стационарных ПК и ноутбуков. Заявку на участие можно оставить здесь...

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

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
1.934
Благодарности
619
Баллы
275
#1
AST - новая разработка скриптового расширителя от Undead Mod Team.
(в разработке...)


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

В. Какие конкретно возможности добавляет 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
Сообщения
2.299
Благодарности
1.331
Баллы
510
#2
Сат, первый релиз(Демо-бета версия) есть?

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

Saturas


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

enil9

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

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

Saturas


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

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

Vlad_Torop

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

Saturas


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

Dimus

★★★★★★★
Модератор
Регистрация
19 Июл 2010
Сообщения
4.091
Благодарности
2.301
Баллы
540
#8
Желательно добавить в 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
Сообщения
696
Благодарности
635
Баллы
245
#9
А эта встроенная не канает?
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
Сообщения
4.091
Благодарности
2.301
Баллы
540
#10
Это немного другая функция, возвращающая 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
Сообщения
2.045
Благодарности
1.250
Баллы
315
#11
функцию, возвращающую название расписания жизнедеятельности, которое сейчас выполняет NPC:
Ну, при желании для нужного непися всегда можно отследить факт изменения распорядка, запоминая его в какой-нибудь переменной. В чём конкретно заключается замысел?
 

Dimus

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

Saturas


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

redleha


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

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

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

Saturas


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

bullet

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

Saturas


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

bullet

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

Saturas


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

Carnage/Mark56

Участник форума
Регистрация
27 Дек 2014
Сообщения
14
Благодарности
55
Баллы
75
#20
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:
Здравствуйте, я действительно впечатлен. Я только хочу спросить, если там будет реализована принудительной синхронизации анимации. Для того, чтобы такие вещи, как рукопожатий, в игровых роликов, убийства, убийства удары.
 
Сверху Снизу