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

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

новые внешние функции

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
  • Первое сообщение
  • #1
на базе Union можно создавать новые внешние функции которые могут решить ту или иную задачу при написание скриптов. Подробнее про то как создаются внешние функции можно почитать в топике @Slavemaster.

В данном топике я предлагаю выложить уже готовые внешние функции.
названиеописаниефункцияфайлподробнее
Экипировка НПС указанное оружие
Daedalus:
func void NPC_EquipWeapon(var C_NPC npc, var c_item itm );
Externals_MW7.dll
Функции для работы с парсерами - PARzParserExtender.dll
Имитация событий анимацийzOrcHunter.vdf
Функции работы с дневником - LOGzParserExtender.dll
Функции работы с вобами (прокси-классы) - VOBzParserExtender.dll
Вспомогательные возможностиzParserExtender.dll
Внешние переменныеzParserExtender.dll
funcName в AI очередьzParserExtender.dll
Замена торговца
Daedalus:
func void NPC_SetTrader(var c_npc newnpc)
Externals_MW7.dll
Открыть / закрыть инвентарь
Daedalus:
func void NPC_CloseInventory(var c_npc)

func void NPC_OpenInventory(var c_npc,var INV_MODE)
Externals_MW7.dll
Смена собеседника
Daedalus:
func void npc_setTalking(var c_npc newnpc)
Externals_MW7.dll
...


обновленно 1.11.2023
 

Вложения

  • zParserExtender.zip
    298,8 KB · Просмотры: 8
  • 2023_11_1_Externals_MW7.zip
    23,2 KB · Просмотры: 5
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
Про Соурсер. Насколько я понял, он не позволяет компилировать проект с новыми функциями в коде самого проекта.
уточни в топике Гратта по Соусерс Gothic Sourcer v3.16 мне кажется что я 3 года назад компилировал Датник с новыми внешними функциями которые добавлял в соусерс.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
Про Соурсер. Насколько я понял, он не позволяет компилировать проект с новыми функциями в коде самого проекта.
на сколько я помню они просто указываются в Externals.d и GothicSourcer компилирует проект.
1685556511030.png

Если необходимо использовать новые внешние функции в GothicSourcer, необходима версия 3.15 или 3.16.


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

вот список новых внешних функций что идут в рамках zParserExtender Union.
по идеи их надо просто добавить в файл Externals.d в корне GothicSourcer. для удобства я их скопировал из топика Gothic ½ - zParserExtender [плагин для Union] :)
Daedalus:
//*******************************************************************************************
//              Функции преобразования - CAST
//*******************************************************************************************

// Преобразует адрес address указателя в instance
func instance Cast_PointerToInstance( var int address )

// Преобразует object в адрес
func int Cast_InstanceToPointer( var instance object )

// Преобразует адрес address указателя в npc
func C_NPC Cast_PointerToNpc( var int address )

// Преобразует адрес address указателя в item
func C_ITEM Cast_PointerToItem( var int address )

// Определяет является ли объект object персонажем
func int Cast_InstanceIsNpc( var instance object )

// Определяет является ли объект object предметом
func int Cast_InstanceIsItem( var instance object )

// Определяет является ли объект object мобом
func int Cast_InstanceIsMob( var instance object )

// Возвращает индекс инстанции объекта, иначе -1
func int Cast_GetInstanceIndex( var instance object )

// Возвращает идентификатор класса класса по его имени
func int Cast_GetClassID( var string className )

// Возвращает идентификатор класса zCObject воба
func int Cast_GetVobClassID( var instance object )

// Проверяет является ли класс classId родительским для объекта object
func int Cast_CheckVobClassID( var int classId, var instance object )

//*****************************************************************************************
//      Функции вспомогательные - HLP
//*****************************************************************************************
// Определяет существует ли для нпс npc объект в фокусе
func int Hlp_HasFocusVob( var C_NPC npc )

// Возвращает объект в фокусе персонажа npc
func instance Hlp_GetFocusVob( var C_NPC npc )

// Возвращает имя воба в фокусе персонажа npc
func string Hlp_GetFocusVobName( var C_NPC npc )

// Возвращает длину строки str
func int Hlp_GetStringLength( var string str )

// Определяет является ли значение value неопределенностью
func int IsNAN( var float value )

// Определяет была ли только что нажата кнопка key
func int Hlp_KeyToggled( var int key )

// Определяет зажата ли кнопка key
func int Hlp_KeyPressed( var int key )

// Определяет была ли нажата логическая кнопка key
func int Hlp_LogicalKeyToggled( var int key )

// Определяет стоит ли игра на паузе
func int Hlp_GameOnPause()

// Выводит сообщение message на экран
func void Hlp_MessageBox( var string message )

// Выводит информацию message в консольное окно Union'а
func void Hlp_PrintConsole(var string message)

// Считывает целочисленное значение параметра из ini
// файла optName ("Gothic", "Mod", "SystemPack"), секции section,
// вхождения entry, где значением по умолчанию считыется default
func int Hlp_ReadOptionInt(var string optName, var string section, var string entry, var int default)

// Считывает вещественное значение параметра из ini
// файла optName ("Gothic", "Mod", "SystemPack"), секции section,
// вхождения entry, где значением по умолчанию считыется default
func float Hlp_ReadOptionFloat(var string optName, var string section, var string entry, var float default)

// Считывает строковое значение параметра из ini
// файла optName ("Gothic", "Mod", "SystemPack"), секции section,
// вхождения entry, где значением по умолчанию считыется default
func string Hlp_ReadOptionString(var string optName, var string section, var string entry, var string default)

// Определяет существует ли в ini
// файле optName ("Gothic", "Mod", "SystemPack") секция section
// (при entry = "") или вхождение entry (тогда entry != "")
func int Hlp_OptionIsExists(var string optName, var string section, var string entry)

// Записывает целочисленное значение value в ini
// файл optName ("Gothic", "Mod", "SystemPack")
// в секцию section, вхождение entry
func void Hlp_WriteOptionInt(var string optName, var string section, var string entry, var int value)

// Записывает вещественное значение value в ini
// файл optName ("Gothic", "Mod", "SystemPack")
// в секцию section, вхождение entry
func void Hlp_WriteOptionFloat(var string optName, var string section, var string entry, var float value)

// Записывает строковое значение value в ini
// файл optName ("Gothic", "Mod", "SystemPack")
// в секцию section, вхождение entry
func void Hlp_WriteOptionString(var string optName, var string section, var string entry, var string value)

// Возвращает имя текущего пользователя Steam (иначе пустую строку)
func string Hlp_GetSteamPersonalName()

//*****************************************************************************************
//      Функции действий над миром - WLD
//*****************************************************************************************
// Меняет активный мир world и ставит hero на заданный waypoint
func void Wld_ChangeLevel( var string world , var string waypoint )

// Ищет воб по его имени vobname и возвращает адрес , иначе -1
func instance Wld_FindVob( var string vobname )

// Воспроизводит эффект effect для воба pvob, с уровнем эффекта level,
// силой урона damage, типом урона damage_type и скоростью damage_speed
func void Wld_PlayEffectVob(
                             var string effect ,
                             var instance pvob ,
                             var int level ,
                             var int damage ,
                             var int damage_type ,
                             var int damage_speed )

// Воспроизводит эффект effect в точке coord, с уровнем эффекта level,
// силой урона damage, типом урона damage_type и скоростью damage_speed
func void Wld_PlayEffectAt(
                             var string effect ,
                             var instance coord ,
                             var int level ,
                             var int damage ,
                             var int damage_type ,
                             var int damage_speed )

// Вызывает эффект дождя силой weight и продолжительностью time
func void Wld_ToggleRain( var float weight , var flaot time )

// Устанавливает тип осадков // дождь или снег. Работает только в G2 & G2A
func void Wld_SetWeatherType( var int type )

// Возвращает тип осадков, иначе -1. работает только в G2 & G2A
func int Wld_GetWeatherType()

//*****************************************************************************************
//      Функции действий над моделью - MDL
//*****************************************************************************************
// Получает индекс анимации по имени ani_name, иначе -1
func int Mdl_GetAnimationIndex( var C_NPC npc , var string ani_name )

// Получает имя анимации по индексу ani_index, иначе пустая строка
func string Mdl_GetAnimationName( var C_NPC npc , var int ani_index )

// Определяет существует ли анимация по заданному индексу ani_index
func int Mdl_AnimationIsExists( var C_NPC npc , var int ani_index )

// Определяет активна ли у персонажа npc анимация ani_index
func int Mdl_AnimationIsActive( var C_NPC npc , var int ani_index )

// Изменяет скорость всех анимаций персонажа npc на fps
func float Mdl_SetAllAnimationsFPS( var C_NPC npc , var float fps )

// Сбрасывает скорость всех анимаций персонажа npc
func float Mdl_ResetAllAnimationsFPS( var C_NPC npc )

// Изменяет скорость заданной анимации idx персонажа npc на fps
func float Mdl_SetAnimationFPS( var C_NPC npc , var int idx , var float fps )

// Сбрасывает скорость заданной анимации ani_index персонажа npc
func float Mdl_ResetAnimationFPS( var C_NPC npc , var int ani_index )

// Отображает модель для npc, если isVisible истина, иначе скрывает
func void Mdl_SetVisible( var C_NPC npc , var int isVisible )

// Применяет или делает оверлей верхним в списке оверлеев
func void Mdl_ApplyOverlayMds_AtFirst( var string mdsName )

// Задает скорость анимаций multiplier для персонажа npc (1.0 нормальная скорость)
func void Mdl_SetNpcSpeedMultiplier( var C_Npc npc, var float multiplier )

// Сбрасывает скорость анимаций для персонажа npc
func void Mdl_ResetNpcSpeedMultiplier( var C_Npc npc )

//*****************************************************************************************
//      Функции действий над персонажами - NPC
//*****************************************************************************************
// Изменяет главного героя на персонажа npc
func void Npc_SetAsHero( var C_NPC npc )

// Открывает основной инвентарь персонажа npc
func void Npc_OpenInventory( var C_NPC npc )

// Открывает инвентарь персонажа, который находится в фокусе npc
func void Npc_OpenInventorySteal( var C_NPC npc )

// Открывает основной интвентарь персонажа npc для торговли
func void Npc_OpenInventoryTrade( var C_NPC npc )

// Возвращает предмет, который находится в левой руке персонажа npc
func C_Item Npc_GetLeftHandItem( var C_Npc npc )

// Возвращает предмет, который находится в правой руке персонажа npc
func C_Item Npc_GetRightHandItem( var C_Npc npc )

// Возвращает предмет, который находится в слоте slotName персонажа npc
func C_Item Npc_GetSlotItem( var C_Npc npc )

// Помещает экземпляр класса oCVob (в тч item, npc) object в слот slotName персонажа npc.
// Параметр copyInInv определяет, должна ли копия предмета оставаться в инвентаре персонажа.
func void Npc_PutInSlot(var C_Npc npc, var string slotName, var instance object, var int copyInInv)

// Удаляет объект из слота slotName персонажа npc. Параметр dropIt в Gothic 2 определяет,
// должен ли объект выпасть из слота. В Gothic 1 параметр зарезервирован и должен быть 0.
func void Npc_RemoveFromSlot(var C_Npc npc, var string slotName, var int dropIt)

//*****************************************************************************************
//      Функции действий над интерактивными объектами - MOB
//*****************************************************************************************
// Ломает объект object
func void Mob_Destroy( var instance object )

// Удаляет из контейнера моба object предмет item
func void Mob_RemoveItem( var instance object , var int item )

// Удаляет из контейнера моба object предметы item в количестве cnt
func void Mob_RemoveItems( var instance object , var int item , var int cnt )

// Добавляет в контейнер моба object предмет item
func void Mob_InsertItem( var instance object , var int item )

// Добавляет в контейнер моба object предметы item в количестве cnt
func void Mob_InsertItems( var instance object , var int item , var int cnt )

// Возвращает комбинацию взлома для моба object
func string Mob_GetLockCombination( var instance object )

// Устанавливает комбинацию взлома comb для моба object
func void Mob_SetLockCombination( var instance object , var string comb )

// Определяет заперт ли моб object
func int Mob_IsLocked( var instance object )

// Устанавливает значение locked будет ли моб object заперт
func void Mob_SetLocked( var instance object , var int locked )

// Возвращает инстанцию ключа для object, иначе null
func instance Mob_GetKeyInstance( var instance object )

// Устанавливает инстанцию ключа key для object, иначе -1
func void Mob_SetKeyInstance( var instance object , var int key )

//*****************************************************************************************
//      Функции для работы с AI
//*****************************************************************************************
// Ставит вызов функции funcName в AI очередь
// и при ее вызове помещает значения slf & oth
// в глобальные self & other (соотвественно)
func void AI_CallScript(var string funcName, var C_Npc slf, var C_Npc oth)

// Создает циклический триггер, вызывающий функцию
// funcName каждые delay миллисекунд. В глобальную переменную
// SelfTrigger будет помещен триггер, вызывающий текущую функцию funcName
func C_Trigger AI_StartTriggerScript(var string funcName, var int delay)

// Таже функция, принимающая три дополнительных
// агрумента - slf, oth и vct, которые при вызове функции
// funcName будут помещены в глобальные self, other и victim (соответственно)
func C_Trigger AI_StartTriggerScriptEx(var string funcName, var int delay, var C_Npc slf, var C_Npc oth, var C_Npc vct)

// Рекомандуемые константы для функции AI_GetTriggerNPC
const int selfID   = 0;
const int otherID  = 1;
const int victimID = 2;

// Проверяет, является ли указатель pointer нулевым
func int Hlp_IsNULL(var instance pointer);

// Возвращает триггер из массива активных триггеров по индексу ID
func C_Trigger AI_GetTriggerByID(var int ID);

// Возвращает количество триггеров в массиве активных триггеров
func int AI_GetTriggersNum();

// Возвращает связанного с триггером NPC, соторый соответствует индексу 0 = self, 1 = other, 2 = victim
func C_Trigger AI_GetTriggerNPC(var int npcID);

// Возвращает связанную с триггером trigger функцию
func func AI_GetTriggerFunc(var C_Trigger trigger);

// Возвращает имя связанной с триггером trigger функции
func string AI_GetTriggerFuncName(var C_Trigger trigger);

// Возвращает следующий за startTrigger триггер, функция которого соответствует function
AI_GetNextTriggerByFunc(var C_Trigger startTrigger, var func function);

// Возвращает следующий за startTrigger триггер, имя функции которого соответствует functionName
AI_GetNextTriggerByFuncName(var C_Trigger startTrigger, var string functionName);

// Возвращает следующий за startTrigger триггер, Self-NPC которого соответствует self
AI_GetNextTriggerBySelf(var C_Trigger startTrigger, var C_Npc self);

// Возвращает следующий за startTrigger триггер, Other-NPC которого соответствует other
AI_GetNextTriggerByOther(var C_Trigger startTrigger, var C_Npc other);

// Возвращает следующий за startTrigger триггер, Victim-NPC которого соответствует victim
AI_GetNextTriggerByVictim(var C_Trigger startTrigger, var C_Npc victim);

// Возвращает следующий за startTrigger триггер, связанные NPC которого соответствуют self, other & victim соответственно
AI_GetNextTriggerByNPCs(var C_Trigger startTrigger, var C_Npc self, var C_Npc other, var C_Npc victim);


//*****************************************************************************************
//      Функции для работы с парсерами - PAR
//*****************************************************************************************
// Возвращает ID парсера по его имени parName
// (см. теги и наименования парсеров/DAT файлов)
func int Par_GetParserID(var string parName);

// Возвращает ID символа symName из парсера parId
func int Par_GetSymbolID(var int parId, var string symName);

// Возвращает количество элементов символа symId парсера parId
// (если количество больше 1, то символ является массивом)
func int Par_GetSymbolLength(var int parId, var int symId);

// Возвращает int значение символа symId парсера parId
func int Par_GetSymbolValueInt(var int parId, var int symId);

// Возвращает float значение символа symId парсера parId
func float Par_GetSymbolValueFloat(var int parId, var int symId);

// Возвращает string значение символа symId парсера parId
func string Par_GetSymbolValueString(var int parId, var int symId);

// Возвращает instance значение символа symId парсера parId
func instance Par_GetSymbolValueInstance(var int parId, var int symId);

// Возвращает int значение символа symId по индексу arrayId парсера parId
func int Par_GetSymbolValueIntArray(var int parId, var int symId, var int arrayId);

// Возвращает float значение символа symId по индексу arrayId парсера parId
func float Par_GetSymbolValueFloatArray(var int parId, var int symId, var int arrayId);

// Возвращает string значение символа symId по индексу arrayId парсера parId
func string Par_GetSymbolValueStringArray(var int parId, var int symId, var int arrayId);

// Задает int значение value символу symId парсера parId
func void Par_SetSymbolValueInt(var int value, var int parId, var int symId, var int arrayId);

// Задает float значение value символу symId парсера parId
func void Par_SetSymbolValueFloat(var float value, var int parId, var int symId, var int arrayId);

// Задает string значение value символу symId парсера parId
func void Par_SetSymbolValueString(var string value, var int parId, var int symId, var int arrayId);

// Задает instance значение value символу symId парсера parId
func void Par_SetSymbolValueInstance(var instance value, var int parId, var int symId, var int arrayId);

// Задает int значение value символу symId по индексу arrayId парсера parId
func void Par_SetSymbolValueIntArray(var int value, var int parId, var int symId, var int arrayId);

// Задает float значение value символу symId по индексу arrayId парсера parId
func void Par_SetSymbolValueFloatArray(var float value, var int parId, var int symId, var int arrayId);

// Задает string значение value символу symId по индексу arrayId парсера parId
func void Par_SetSymbolValueStringArray(var string value, var int parId, var int symId, var int arrayId);


//*****************************************************************************************
//      Функции для работы со строками - STR
//*****************************************************************************************
// Возвращает отформатированную строку format, в которую подставлены указанные в ней аргументы.
// Передача аргумента в строку format осуществляется литералом %, который может принимать значения:
// %s - подставляет строку
// %i - подставляет целое число
// %x - подставляет целое число в 16-ой системе
// %f - подставляет число с плавающей запятой
// %b - подставляет логическое выражение
// %p - подставляет адрес инстанции
// в других случаях подставляет следующий символ
func string Str_Format( var string format, ... )

// Возвращает строку, которая соответствует текущему языку, иначе английский вариант.
// Аргументы должны быть представлены в кодировке UTF-8! Результат будет преобразован в ANSI строку.
func string Str_GetLocalizedString( var string russian, var string english, var string german, var string polish )

// Возвращает строку, которая соответствует текущему языку, иначе английский вариант.
// Аргументы должны быть представлены в кодировке UTF-8! Результат будет преобразован в ANSI строку.
func string Str_GetLocalizedStringEx( var string russian, var string english,  var string german,  var string polish,
                                      var string czech,   var string romanian, var string italian, var string spanish );

// Преобразует строку utf8 в кодировке UTF-8 в строку ANSI с кодовой страницей codePade
func string Str_UTF8_to_ANSI( var string utf8, var int codePade )

// Возвращает кодовую страницу, которая соответствует текущему языку в системе Union
func int Str_GetCurrentCP()

// Возвращает длину строки str
func int Str_GetLength( var int str )

//*****************************************************************************************
//      Функции работы с дневником - LOG
//*****************************************************************************************
// Возвращает статус записи в дневнике:
// Отсутствует - (-1)
// Free        - 0
// Running     - 1
// Success     - 2
// Failure     - 3
// Obsolete    - 4
func int Log_GetTopicStatus(var string topic)

// Возвращает страницу на которой расположена запись в дневнике.
// Отсутствует - (-1)
// Missions    - 0
// Notes       - 1
// All         - 2
func int Log_GetTopicSection(var string topic)

//*****************************************************************************************
//      Функции работы с вобами (прокси-классы) - VOB
//*****************************************************************************************
// Возвращает текущую позицию объекта в мире
func C_Position Vob_GetVobPosition( var C_Vob vob )

// Задает текущую позицию объекта в мире
func void Vob_SetVobPosition( var C_Vob vob, var C_Position pos )

// Возвращает универсальные данные объекта zCVob
func C_Vob_Data Vob_GetVobData( var C_Vob vob )

// Задает универсальные данные объекта zCVob
func void Vob_SetVobData( var C_Vob vob, var C_Vob_Data data )

// Возвращает данные объекта zCVobLight
func C_Light_Data Vob_GetLightData( var C_Vob vobLight )

// Задает данные объекта zCVobLight
func void Vob_SetLightData( var C_Vob vobLight, var C_Light_Data data )

// Очищает список цветов анимации для источника света
func void Vob_ClearLightAniList( var C_Vob vobLight )

// Добавляет позицию в список цветов
func void Vob_AddLightAniColor( var C_Vob vobLight, var C_Color col )

// Добавляет позицию в список цветов
func void Vob_AddLightAniColorRGB( var C_Vob vobLight, var int r, var int g, var int b )

// Возвращает данные объекта oCMOB
func C_Mob_Data Vob_GetMobData( var C_Vob mob )

// Задает данные объекта oCMOB
func void Vob_SetMobData( var C_Vob mob, var C_Mob_Data data )

// Возвращает данные объекта oCMobInter
func C_MobInter_Data Vob_GetMobInterData( var C_Vob mobInter )

// Задает данные объекта oCMobInter
func void Vob_SetMobInterData( var C_Vob mobInter, var C_MobInter_Data data )

// Возвращает данные объекта oCMobLockable
func C_MobLockable_Data Vob_GetMobInterData( var C_Vob mobLock )

// Задает данные объекта oCMobLockable
func void Vob_SetMobInterData( var C_Vob mobLock, var C_MobLockable_Data data )

//*****************************************************************************************
//      Остальные функции
//*****************************************************************************************
// Находит все объекты C_MenuItem по маске имени ptr и автоматически помещает в текущую инстанцию меню
func void Menu_SearchItems( var string ptr )

// Открывает ссылку в браузере по умолчанию или в Steam Overlay (если доступен)
func void Open_Link( var string url )
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
Функции для работы с парсерами - PAR
Daedalus:
// Возвращает ID парсера по его имени parName
// (см. теги и наименования парсеров/DAT файлов)
func int Par_GetParserID(var string parName);

// Возвращает ID символа symName из парсера parId
func int Par_GetSymbolID(var int parId, var string symName);

// Возвращает количество элементов символа symId парсера parId
// (если количество больше 1, то символ является массивом)
func int Par_GetSymbolLength(var int parId, var int symId);

// Возвращает int значение символа symId парсера parId
func int Par_GetSymbolValueInt(var int parId, var int symId);

// Возвращает float значение символа symId парсера parId
func float Par_GetSymbolValueFloat(var int parId, var int symId);

// Возвращает string значение символа symId парсера parId
func string Par_GetSymbolValueString(var int parId, var int symId);

// Возвращает instance значение символа symId парсера parId
func instance Par_GetSymbolValueInstance(var int parId, var int symId);

// Возвращает int значение символа symId по индексу arrayId парсера parId
func int Par_GetSymbolValueIntArray(var int parId, var int symId, var int arrayId);

// Возвращает float значение символа symId по индексу arrayId парсера parId
func float Par_GetSymbolValueFloatArray(var int parId, var int symId, var int arrayId);

// Возвращает string значение символа symId по индексу arrayId парсера parId
func string Par_GetSymbolValueStringArray(var int parId, var int symId, var int arrayId);

// Задает int значение value символу symId парсера parId
func void Par_SetSymbolValueInt(var int value, var int parId, var int symId, var int arrayId);

// Задает float значение value символу symId парсера parId
func void Par_SetSymbolValueFloat(var float value, var int parId, var int symId, var int arrayId);

// Задает string значение value символу symId парсера parId
func void Par_SetSymbolValueString(var string value, var int parId, var int symId, var int arrayId);

// Задает instance значение value символу symId парсера parId
func void Par_SetSymbolValueInstance(var instance value, var int parId, var int symId, var int arrayId);

// Задает int значение value символу symId по индексу arrayId парсера parId
func void Par_SetSymbolValueIntArray(var int value, var int parId, var int symId, var int arrayId);

// Задает float значение value символу symId по индексу arrayId парсера parId
func void Par_SetSymbolValueFloatArray(var float value, var int parId, var int symId, var int arrayId);

// Задает string значение value символу symId по индексу arrayId парсера parId
func void Par_SetSymbolValueStringArray(var string value, var int parId, var int symId, var int arrayId);

пример использования. Функция для "изучения" второспенных навыков
Daedalus:
func void B_UnionHeroTalent(var string TalentName, var int Talent, var int value)
{ 
     // версия на юнион
    var int parserID;   parserID  = Par_GetParserID("Game");
    var int symbolID;   symbolID = Par_GetSymbolID(parserID , TalentName);

    Par_SetSymbolValueInt(value, parserID , symbolID, Talent);
};
непосредственно в нужном месте вызывается. обратите внимание что навык указывается в кавычках!!!
Daedalus:
    B_UnionHeroTalent("PLAYER_TALENT_ALCHEMY",          POTION_HEALTH_01,   true);
    B_UnionHeroTalent("PLAYER_TALENT_RUNES",            SPL_Firerain,       true);
    B_UnionHeroTalent("PLAYER_TALENT_TAKEANIMALTROPHY", TROPHY_Claws,       true);
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
Не... Это вообще криво получается.
Сначала с одним диалог, он тут же закрывается, начинается с другим диалог.
Тоже самое, как прописать обоим неписям, чтое сли есть инфа от первого, то второй тут же начинает разговор, и так по очереди передергивают друг друга. Выглядит ужасно...
слов нет одни маты :) итак вчера MEG@VOLT поднял наболевшую тему касательно введения в диалог дополнительных НПС. Вчера погрузившись в это дело и подглядев примеры реализации в коде Gratt по торговцу(наверное тоже надо добавить в плагин) я сегодня дописал очередную внешнюю функцию на Юнион.

func void npc_setTalking(var c_npc newnpc)

эта функция позволит сменмить собеседника. то есть условно вы можете начать диалог с Ксардасом, а продолжить с Лестером. .

Сегодня я её активно тестировал её и остался крайне доволен полученным результатом. Вечером или завтра выложу простые примеры её работы. а сейчас покажу "сложный" пример с запуском important диалога у НПС2 из диалога с НПС 1. Пример я взял из игры: предупреждение Ультара касательно осквернённых статуй после разговора с Пирокарам.

***

итак у Пирокара в конце его диалога о возвращение из миненталя я меняю НПС с помощью npc_setTalking и ставлю на запуск Npc_GiveInfo
Daedalus:
    AI_Output(self,other,"DIA_Pyrokar_BACKFROMOW_11_10");    //Помни, мы должны сопротивляться, иначе нам всем настанет конец.
    var c_npc newnpc;  newnpc = Hlp_GetNpc(KDF_502_Ulthar);
    npc_setTalking(newnpc);
    
    //Npc_GiveInfo(newnpc,0); // запуск обычного диалога у Ультара с минимальным nr (!)
    AI_StartState(self, DIA_Pyrokar_BACKFROMOW2_Info, 1, ""); // запуск important диалога у Ультара

перед запуском important диалога можно сделать то что нужно, например: кого то пнуть и/или куда то томно посмотреть и/или справить малую нужду и/или съесть яблоко и/или дунуть. именно по этой причине я не стал в npc_setTalking прописывать какие то томные взгляды, повороты и прочее.

Daedalus:
// ненужная функция. делал для себя
func void B_Npc_GiveImportantInfo (var int intnpc)
{
    var c_npc npc; npc =  Hlp_GetNpc(intnpc);
    Hlp_PrintConsole(Str_Format("B_Npc_GiveImportantInfo (%s)",npc.name));

    Npc_GiveInfo(npc,1); // запуск important диалога у НПС
};

// запуск данной функции через AI_StartState ИЛИ прописывается в вариантах ответа(см. Info_AddChoice)
func void DIA_Pyrokar_BACKFROMOW2_Info ()
{
    Hlp_PrintConsole(Str_Format("DIA_Pyrokar_BACKFROMOW2_Info self.name = %s",self.name));
    // тут можно заставить встать Ультара с трона и дать по щам герою
    // что бы герой повернулся к Ультару и стал внимательно слушать
    B_Npc_GiveImportantInfo(KDF_502_Ulthar); // запуск important диалога у Ультара
};

остаётся подшаманить кондишион у Ультара поменяв проверку


Daedalus:
func int DIA_Ulthar_WARN_Condition()
{
    if (Kapitel == 3)
    && (hero.guild != GIL_PAL)
    //&& (Pedro_Traitor == TRUE)
    {

        if (Npc_KnowsInfo(hero,DIA_Pyrokar_BACKFROMOW))
        {
           
            Hlp_PrintConsole(Str_Format("DIA_Ulthar_WARN_Condition --> true"));
            return TRUE;
        };
    };
};
функцию добавил в плагин. плагин обновил в первом сообщение.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
MW 7, т.е. в данном варианте, нет этого передергивания?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
@MW 7, т.е. в данном варианте, нет этого передергивания?
нет. герой не выходить из состояние диалога.

MEG@VOLT, если хочешь попробуй на чем нибудь простом, например когда герой стоит возле двух НПС. например у кузнеца и его подмастерья или что то в этом духе. но это совсем не то про что ты говорил, так как это более сложная история. с другой стороны она будет давать большее кол-во возможностей :) я по ходу теста аж зафантазировался.
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
ElderGamer я установил Инструкция - C++17 Plugin Template и смог скомпилировать версию плагина для Готики 1. но тестить не тестил. попробуй может что то и будет работать :)
 

Вложения

  • G1_Externals_MW7.zip
    24,2 KB · Просмотры: 8

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
Открыть экран статистики НПС
Daedalus:
func void NPC_OpenScreen_Status(var C_NPC npc);
Пример использования: открыть статистику НПС находящегося в фокусе при нажатие секретной кнопки.
код: используя функцию zParserExtender получаем ссылку на НПС в фокусе, при нажатие кнопки "NUMPAD5" .
далее открываем окно со статистикой данного НПС.

Daedalus:
func event GameLoop()
{
    if (Hlp_KeyToggled(KEY_NUMPAD5))
    {
        Hlp_PrintConsole("KeyToggled (KEY_NUMPAD5)"); 
        if Hlp_HasFocusVob(hero)
        {
            var c_npc npcfocus;
            npcfocus = Hlp_GetFocusVob(hero);
        
            if Hlp_IsValidNpc(npcfocus)
            {
                NPC_OpenScreen_Status(npcfocus);
            };
        };
    };                             
};

Возможно такое можно делать как то и через марвин :)
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
Мелкий плагин для модостроителей. Добавляет четыре функции:
AI_EquipMeleeWeapon(var C_NPC npc, var C_ITEM item);
Позяволяет одеть конкретное оружие ближнего боя
AI_EquipRangedWeapon(var C_NPC npc, var C_ITEM item);
Позяволяет одеть конкретное оружие дальнего боя
AI_UnequipMeleeWeapon(var C_NPC npc);
Снимает оружие только ближнего боя
AI_UnequipRangedWeapon(var C_NPC npc);
Снимает оружие только дальнего боя
Помидорами сразу не кидайте, мол есть же EquipItem... Вы сначала сделайте EquipItem любого ножика, и сразу вызовите AI_ReadyMeleeWeapon или AI_ReadyRangedWeapon...
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
968
Баллы
295
// Ставит вызов функции funcName в AI очередь // и при ее вызове помещает значения slf & oth // в глобальные self & other (соотвественно) func void AI_CallScript(var string funcName, var C_Npc slf, var C_Npc oth)
очередной пример массовой вакцинации :)

Daedalus:
func void Ai_Dia_exit_start()
{
    AI_StopProcessInfos(self);
};
 
func void B_StopProcessInfos(var c_npc slf)
{
    AI_CallScript("Ai_Dia_exit_start",slf,hero);
};
1705906579218.jpeg
 
Последнее редактирование:
Сверху Снизу