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

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

Union - мини плагины

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.077
Благодарности
1.896
Баллы
290
  • Первое сообщение
  • #1
Здесь будут собираться плагины, создание отдельной темы для которых было бы излишним.


Плагины, распространяемые с помощью exe-инсталлятора, можно деинсталлировать им же.
Плагины, распространяемые в виде vdf тома, следует помещать в папку Data/Plugins/.
Каждый плагин, если не указано иного, должен работать на любых версиях игры: Gothic I Classic (G1), Gothic I Sequel (G1A), Gothic II Classic (G2), Gothic II Addon (G2A).
Код плагинов и сами плагины, автором которых являюсь я, можно распространять и использовать без ограничений.


При наличии нескольких одноименных вложений в одном посте следует скачивать последнее. Удалять старые вложения прав нет.

  1. Плагин zNoFocusFlag (Автор: Slavemaster). Для модостроителей. Делает NPC с флагом NPC_FLAG_NFOCUS полностью прозрачными для фокуса ГГ.
  2. Плагин AlterDamage (Автор: Slavemaster). Есть проблемы с совместимостью. Меняет формулы урона. Добавляет всплывающие сообщения о нанесённом уроне.
  3. Плагин zSavesBackuper (Автор: Slavemaster). Осуществляет резервное копирование сделанных сохранений.
  4. Плагин Union_Hotbar_1.0k (Автор: Haart). Добавляет панель быстрого доступа для предметов из инвентаря.
  5. Плагин QuickLoot (Автор: Slavemaster). Быстрый сбор предметов при помощи правой кнопки мыши.
  6. Плагин MarvinHelper (Автор: Slavemaster). Дополнительные возможности для консоли разработчика.
  7. Плагин MunitionInfo (Автор: Xeдин). Отображает кол-во стрел/болтов в инвентаре.
  8. Плагин zAsyncSaveLoad. (Автор: Slavemaster).Плагин делает окно игры отзывчивым к сочетанию Alt+Tab во время загрузки, сохранения и просмотра видео.
  9. Плагин Union_SaveLoadManager_i (Автор: Haart). Позволяет сохраняться в разные слоты без лишних усилий.
  10. Плагин zBugFixes (Автор: Slavemaster). Плагин содержит исправления некоторых ошибок движка Готики.
  11. Плагин zTorchControl (Автор: Slavemaster). Плагин предотвращает удаление горящих факелов при загрузке, а также позволяет их использовать по горячей клавише.
  12. Плагин zMarkItems (Автор: Slavemaster).Плагин осуществляет маркировку предметов внутри ячеек инвентаря.
  13. Плагин zMiscUtils (Автор: Slavemaster). Плагин реализует множество функций, не объединённых единой тематикой.
  14. Плагин SimpleRegen (Автор: Xeдин). Плагин реализует простой алгоритм регенерации жизни и/или маны.
  15. Плагин Union_Thief_Helper (Автор: Xeдин). Помощник вора. Маркировка не обворованных и обворованных NPC и подсказки при взломе.
  16. Плагин Union_XP_Bar (Автор: Xeдин). Плагин для отображения полоски опыта.
  17. Плагин OdyAlt (Автор: N1kX). Подробное многостраничное меню навыков для мода Одиссея 2.6.4.
  18. Плагин OdyAltMenu (Автор: N1kX). Подробное многостраничное меню навыков для мода Одиссея 2.7.0+.
  19. Плагин zUtilities (Автор: Franisz). Несколько удобных функций.
  20. Плагин oDamageHelper (Автор: Gratt). Для модостроителей. Позволяет менять наносимый урон с помощью скриптов.
  21. Плагин Union_DamageInfo (Автор: Xeдин). Плагин выводит урон по врагам и по главному герою.
  22. Плагин Union_RandomRainDX11 (Автор: Haart). При использовании с DX11 дождь будет начинаться в случайное время суток.
  23. Плагин Union_Ext_Stat (Автор: Xeдин). Небольшая дополнительная статистика по количеству убитых, выпитых зелий, квестам и времени игры.
  24. Плагин Union_Show_FPS (Автор: Xeдин). Простенький плагин на показ FPS для всех версий Готики, с возможностью отключения в меню и задания позиции отображения.
  25. Плагин zImprovedLegacyFrying (Автор: Slavemaster). Добавляет диалоги жарки мяса для костра и плиты.
  26. Плагин Union_Keep_Last_Save (Авторы: Gratt, Xeдин). Плагин для удобной работы с последним слотом записи.
  27. Плагин EquippedWeapon (Автор: MEG@VOLT). Для модостроителей. Добавляет функции экипировки / деэкипировки оружия.
  28. Плагин TradeMissItems (Автор: MEG@VOLT). Плагин создан для защиты от случайной продажи квестовых предметов.
  29. Плагин zUnstuckSlidingPlayer (Автор: Slavemaster). Автоматическая телепортация игрока при длительном скольжении.
  30. Плагин KillMeatBugs (Автор: MEG@VOLT). Позволяет затаптывать мясных жуков.
  31. Плагин ezFistMode (Автор: fyryNy). Хоткей для перехода в режим кулачного боя.
  32. Плагин Union_2hSplash (Автор: Strange). Урон по площади для двуручного оружия.
 
Последнее редактирование:

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.077
Благодарности
1.896
Баллы
290
Почему-то у меня это работает только с пламенной нарезкой (ItFo_Addon_FireStew).
Автопилот работает до восстановления текущего здоровья/маны (оверхил исключается). Может, у тебя почти полное здоровье и нарезка пожирается бесконечно, а другие продукты сразу дают оверхил и автопилот не запускается?
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.925
Благодарности
556
Баллы
275
Приветствую всех. Возникла проблема, которая может быть связана с UNION_MiscUtils.
Играю в данный мод (с предварительно установленными Union и Неоф. обновлением, с включенными плагинами) и регулярно получаю вылеты с ошибкой, при попытке съесть что-либо. Последний словил, пытаясь пожевать жареного мяса.
В чем может быть проблема?
1.png
 

Вложения

  • GothicRPT.7z
    21,1 KB · Просмотры: 23
  • savegame1.7z
    1,2 MB · Просмотры: 10

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.925
Благодарности
556
Баллы
275
Slavemaster, извини, что опять на твои труды грешу. До сих пор не знаю как эти сообщения об ошибках расшифровывать.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.077
Благодарности
1.896
Баллы
290
Union_MarvinHelper
Расширение возможностей консоли разработчика
Google Drive
Функции плагина
  • Выводит подсказки для ввода стандартных команд основной консоли
  • Блокирует персонажа пока консоль активна
  • Позволяет редактировать свойство amount предметов при помощи команды edit focus
  • Добавляет новые команды
Конфигурация
INI:
[UNION_MARVINHELPER]
ExecuteStartupScript=0
; исполняет команды из startup.console при первой загрузке

ActivateMarvinMode=0
; активирует режим марвина при первой загрузке

ConsoleKeepHistoryCase=1
; сохранение оригинального регистра символов при вставке команды при помощи Insert

ConsoleFreezePlayer=1
; игрок блокируется тогда и только тогда, когда открыта любая консоль или включен режим свободной камеры

ConsoleShowHints=1
; включает интерактивные подсказки при вводе команд

ConsoleEditItemAmount=1
; позволяет редактировать количество предметов с помощью команды 'edit focus'

KeySelectionPrev=KEY_UP, MOUSE_WHEELUP
KeySelectionNext=KEY_DOWN, MOUSE_WHEELDOWN
; клавиши для выделения записи из списка предложений для автозавершения
; символ '#' в строке блокирует сочетание

KeySelectionInsert=KEY_TAB, KEY_RIGHT, MOUSE_BUTTONLEFT
; клавиша для вставки выбранной подсказки в консоль

KeyConsoleToggle=KEY_GRAVE, KEY_LSHIFT + KEY_F2
; дополнительные клавиши для открытия/закрытия консоли (не требуют и не включают марвин режим)

KeyConsoleDeleteWord=KEY_LEFT, KEY_BACK + KEY_RCONTROL, KEY_BACK + KEY_LCONTROL
; клавиши для удаления последнего слова из консоли

ChangeSelectionThrottleMs=50
; задержка в миллисекундах между повтором клавиш выделения подсказок

ActivateParserExtenderExternals=1
; принудительная активация внешних функций плагина zParserExtender
Краткое описание новых команд
INI:
show vars
; Показывает значения скриптовых переменных в реальном времени
; show vars txt_guilds(2-4) tal_tempbonus(1) dia_xardas_hello

hide vars
; Очищает список отображаемых переменных, можно указать конкретные записи для удаления
; hide vars
; hide vars 4 1 2

set var
; Устанавливает значение(я) переменной
; set var dia_xardas_hello 0
; set var txt_guilds(2-4) "Lolodin" StringVar "Urk"

call
; Вызывает обычную скриптовую или внешнюю функцию однократно и показывает результат
; call hlp_random 100
; call npc_getnearestwp hero

show call
; Вызывает функцию каждый кадр и отображает её результат (наряду с переменными)
; show call hlp_readoptionfloat "Gothic" "SKY_OUTDOOR" "zRainWindScale" 0.44
; show call npc_hasitems hero itmi_gold

execute
; Построчно исполняет консольные команды из файла \Console\*.console file
; не используйте эту команду изнутри .console файлов
; execute showmyvars

save showlist
; Сохраняет список отображаемых переменных/функций в виде .console файла
; save showlist MyVars

show cursor
; активирует отображение курсора

hide cursor
; деактивирует отображение курсора

decompile
; декомпилирует указанную функцию
; decompile ItFo_Apple

print weapons
; распечатывает дальности поражения оружия ближнего боя

goroute
; отправляет указанного НПС в путь до определённой путевой точки
; goroute pc_hero taverne

wp connect
; создаёт/разрушает связь между путевыми точками
; wp connect wp_001 wp_002

wp add
; создаёт путевую точку в позиции игрока
; wp add altar

wp remove
; удаляет указанную или ближайшую к игроку путевую точку
; wp remove altar

wp linking
; изменяет команду `wp add` активируя/деактивируя автосоединение новых путевых точек
; wp linking off

fp add
; создаёт фрипоинт в позиции игрока
; fp add fp_new

fp remove
; удаляет указанный или ближайший к игроку фрипоинт
; fp remove fp_somenane

wp move
; перемещает указанную путевую точку в позицию игрока
; wp move bigfarm

fp move
; перемещает указанный фрипоинт в позицию игрока
; fp move fp_001

show anictrl
; показывает активные анимации игрока, привязанные к контроллеру анимаций

show lowfps
; отображает процент времени затраченного на обработку "медленных" кадров
; первый параметр: относительное отклонение от среднего фпс, которое будет считаться замедлением
; второй параметр: время диагностики в секундах
; show lowfps 0.75 15.0

fulldecompile
; декомпилирует все методы основного парсера в папку \Console\

set option
; позволяет просматривать/изменять опции загружаемые из .ini файлов
; set option gothic game playLogoVideos 0

play audio3d
; позволяет проигрывать звуковые файлы
; использует фокус или героя в качестве источника
; play audio3d dia_xardas_add_14_01.wav
Исходные коды
 
Последнее редактирование:

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.077
Благодарности
1.896
Баллы
290
Плагин Union_ScriptGui.
Выносит примитивные возможности рисования в скрипты.

Добавлен новый скриптовый класс С_GUI
Daedalus:
class C_GUI
{
    // произвольные пользовательские данные
    var int ints[16];
    var string strings[16];
   
    // положение и размер элемента в виртуальных координатах [0-8192] относительно родительского
    var int vPosX;
    var int vPosY;
    var int vSizeX;
    var int vSizeY;
       
    // фоновая текстура
    var string texture;
   
    // отображаемый предмет
    var int item;
   
    // отображаемый текст
    var string text;
   
    // непрозрачаность текстуры и шрифта (от 0 до 255), 255 - по умолчанию
    var int opacity;
   
    // шрифт отображаемого текста, по умолчанию - шрифт экрана
    var string font;
   
    // цвет отображаемого текста (белый по умолчанию)
    var int fontR;
    var int fontG;
    var int fontB;
   
    // выравнивание текста по горизонтали и вертикали (-1 = слева/сверху, 0 = по центру, 1 = справа/снизу)
    // -1; -1 - по умолчанию
    var int hTextAlign;
    var int vTextAlign;
   
    // функция обработки нажатых клавиш `func int MyProc(var C_GUI gui)`
    var func proc;
};

Добавлены следующие внешние функции:
Daedalus:
// Создание нового элемента внутри родительского (или внутри экрана) с выполнением кода прототипа или инстанса
func C_GUI GUI_Create(var C_GUI parent, var func constructor);

// Обратный обход дерева элементов с вызовом функции proc
// Обход завершается досрочно, если proc вернет ненулевое значение
func void GUI_Proc(var C_GUI gui);

// Ставит дерево элементов в очередь на отрисовку
func void GUI_Draw(var C_GUI gui);

// функции перевода пиксельных координат в виртуальные и наооборот
// Первым аргументом передаётся элемент, чей виртуальный размер будет считаться 8192 на 8192

// пиксельные в виртуальные (по оси X)
func int GUI_Anx(var C_GUI gui, var int x);

// пиксельные в виртуальные (по оси Y)
func int GUI_Any(var C_GUI gui, var int y);

// виртуальные в пиксельные (по оси X)
func int GUI_Nax(var C_GUI gui, var int x);

// виртуальные в пиксельные (по оси Y)
func int GUI_Nay(var C_GUI gui, var int y);
ДЕМОНСТРАЦИОННЫЙ вариант скриптов для хотбара на 3 предмета. Предполагает предустановленный плагин zParserExtender.
Daedalus:
//======================================== Класс C_GUI ============================================
class C_GUI
{
    // произвольные пользовательские данные
    var int ints[16];
    var string strings[16];
   
    // положение и размер элемента в виртуальных координатах [0-8192] относительно родительского
    var int vPosX;
    var int vPosY;
    var int vSizeX;
    var int vSizeY;
       
    // фоновая текстура
    var string texture;
   
    // отображаемый предмет
    var int item;
   
    // отображаемый текст
    var string text;
   
    // непрозрачаность текстуры и шрифта (от 0 до 255), 255 - по умолчанию
    var int opacity;
   
    // шрифт отображаемого текста, по умолчанию - шрифт экрана
    var string font;
   
    // цвет отображаемого текста (белый по умолчанию)
    var int fontR;
    var int fontG;
    var int fontB;
   
    // выравнивание текста по горизонтали и вертикали (-1 = слева/сверху, 0 = по центру, 1 = справа/снизу)
    // -1; -1 - по умолчанию
    var int hTextAlign;
    var int vTextAlign;
   
    // функция обработки нажатых клавиш `func int MyProc(var C_GUI gui)`
    var func proc;
};

//======================================== Константы ==============================================

// индекс в массиве hotItem.ints
const int INDEX_HOT_ITEM_KEY = 0;
const int INDEX_HOT_ITEM_SLOT = 1;

// размер ячейки хотбара в пикселах
const int PHotItemSize = 80;

// отступ между ячейками в пикселах
const int PHotBarBorderSize = 1;

// текстура за отображаемым предметом
const string TEXTURE_ITEM_USABLE = "INV_SLOT_HIGHLIGHTED.TGA";

// текстура за отображаемым предметом, которого нет в инвентаре
const string TEXTURE_ITEM_NOTEXIST = "INV_SLOT_EQUIPPED_HIGHLIGHTED.TGA";

// текстура, затеняющая предмет при неактивном хотбаре
const string TEXTURE_ITEM_SHADOWED = "BLACK.TGA";

// коды клавиш
const int KEY_LSHIFT = 42;
const int KEY_RSHIFT = 54;
const int KEY_1 = 2;
const int KEY_2 = 3;
const int KEY_3 = 4;

// состояния тела персонажа
const int BS_STAND                              = 0;
const int BS_WALK                               = 1;
const int BS_SNEAK                              = 2;
const int BS_RUN                                = 3;
const int BS_SPRINT                             = 4;

const int BS_ONLY_STATE                         = 127;

// Modifier / Overlays
const int BS_MOD_HIDDEN                            = 128;
const int BS_MOD_DRUNK                            = 256;
const int BS_MOD_NUTS                            = 512;
const int BS_MOD_BURNING                        = 1024;
const int BS_MOD_CONTROLLED                        = 2048;
const int BS_MOD_TRANSFORMED                    = 4096;
const int BS_MOD_CONTROLLING                    = 8192;

//===================================== Состояние Хотбара =========================================

// предметы хотбара и их количество
var int HotBarItems[3];
var int HotBarItemsCount;

//========================================== Функции ==============================================

// определение минимума из дух чисел
func int GetMin(var int x, var int y)
{
    if (x < y)
    {
        return x;
    };
    return y;
};

// функция установки / снятия предмета с хотбара
func void SetHobarItem(var int slot, var int item)
{
    if (slot == 0)
    {
        HotbarItems[0] = item;
    };
    if (slot == 1)
    {
        HotbarItems[1] = item;
    };
    if (slot == 2)
    {
        HotbarItems[2] = item;
    };
   
    HotbarItemsCount = 0;
   
    if (HotbarItems[0] > 0)
    {
        HotbarItemsCount += 1;
    };
    if (HotbarItems[1] > 0)
    {
        HotbarItemsCount += 1;
    };
    if (HotbarItems[2] > 0)
    {
        HotbarItemsCount += 1;
    };
};

// обработка клаыиш использования/задания предмета
func int HotItemProc(var C_GUI hotItem)
{  
    // использование предмета
    if (Hlp_KeyPressed(KEY_LSHIFT) == true)
    {
        if (Npc_HasItems(hero, hotItem.item) == 0)
        {
            return false;
        };
       
        if (Hlp_KeyToggled(hotItem.ints[INDEX_HOT_ITEM_KEY]) == false)
        {
            return false;
        };
   
        Npc_ClearAIQueue(hero);
        AI_StandUpQuick(hero);
        AI_UseItem(hero, hotItem.item);
        AI_EquipArmor(hero, hotItem.item);
       
        // не обрабатывать другие ячейки
        return true;
    };
   
    // задание предмета
    if (Hlp_KeyPressed(KEY_RSHIFT) == true)
    {
        if (Hlp_KeyToggled(hotItem.ints[INDEX_HOT_ITEM_KEY]) == false)
        {
            return false;
        };  
       
        var C_Item focus;
        focus = Hlp_GetFocusVob(hero);
       
        if (Cast_InstanceIsItem(focus) == false)
        {
            SetHobarItem(hotItem.ints[INDEX_HOT_ITEM_SLOT], 0);
            return true;
        };
       
        if (focus.mainflag != ITEM_KAT_FOOD) && (focus.mainflag != ITEM_KAT_ARMOR) && (focus.mainflag != ITEM_KAT_POTIONS)
        {
            SetHobarItem(hotItem.ints[INDEX_HOT_ITEM_SLOT], 0);
            return true;
        };
       
        SetHobarItem(hotItem.ints[INDEX_HOT_ITEM_SLOT], Cast_GetInstanceIndex(focus));
        return true;
    };

    return false;
};

//========================================= Прототипы =============================================

// переменная со значением null
var C_GUI GuiScreen;

// прототип ячейки инвентаря
prototype HotItemProto(C_GUI)
{
    proc = HotItemProc;
};

// прототип для элемента, который затемнит отображаемый предмет
prototype HotItemShadowedProto(C_GUI)
{
    texture = TEXTURE_ITEM_SHADOWED;
    opacity = 150;
};

// прототип надписи с клавишей
prototype HotKeyLabelProto(C_GUI)
{
    vPosX = 700;
    vPosY = vPosX;
    vSizeX = 8192 - 2 * vPosX;
    vSizeY = 8192 - 2 * vPosY;
};

// прототип надписи с количеством предметов
prototype HotAmountLabelProto(C_GUI)
{
    vPosX = 700;
    vPosY = vPosX;
    vSizeX = 8192 - 2 * vPosX;
    vSizeY = 8192 - 2 * vPosY;
   
    // надпись справа/снизу
    hTextAlign = 1;
    vTextAlign = 1;
};

// прототип хотбара
prototype HotBarProto(C_GUI)
{
    // размер = количествово_предметов * ширина_ячейки + (количество_предметов + 1) * ширина_отступа
    vSizeX = HotBarItemsCount * GUI_Anx(GuiScreen, PHotItemSize) + (HotBarItemsCount + 1) * GUI_Anx(GuiScreen, PHotBarBorderSize);
   
    // размер = высота ячейки + 2 отступа (сверху и снизу)
    vSizeY = GUI_Any(GuiScreen, PHotItemSize) + 2 * GUI_Any(GuiScreen, PHotBarBorderSize);
   
    // горизонтальное положение - по центру
    vPosX = 8192 / 2 - vSizeX / 2;
   
    // вертикальное положение - где-то внизу экрана
    vPosY = 7000;
};

// плагин вызывает эту функцию каждый кадр (из-за суффикса)
func void ShowHotbar_GuiPerFrame()
{
    // в диалоге хотбар не должен работать
    if (InfoManager_HasFinished() == false)
    {
        return;
    };
   
    // определяет, нужно ли обрабатывать нажатия клавищ
    var int handleKeys;
    handleKeys = true;

    // проверяем состояние тела
    var int bodyState;
    bodyState = Npc_GetBodyState(hero) & BS_ONLY_STATE;
   
    if (bodyState != BS_STAND) && (bodyState != BS_RUN) && (bodyState != BS_WALK)
    {
        handleKeys = false;
    };
   
    if Npc_HasBodyFlag(hero, BS_MOD_TRANSFORMED) || Npc_HasBodyFlag(hero, BS_MOD_CONTROLLED)
    {
        handleKeys = false;
    };
   
    // в боевой стойке клавиши не обрабатываем
    if (Npc_IsInFightMode(hero, 0) == false)
    {
        handleKeys = false;
    };

    var C_GUI hotBar;
    var C_GUI hotItem;
    var C_GUI label;
   
    var int vItemSizeX;
    var int vItemSizeY;
    var int vBorderSizeX;
    var int vBorderSizeY;
   
    var int counter;
    var int amount;
   
    // создаем главный элемент
    hotBar = GUI_Create(GuiScreen, HotBarProto);
   
    // определяем виртуальные размеры ячеек и отступов
    vItemSizeX = GUI_Anx(hotBar, PHotItemSize);  
    vItemSizeY = GUI_Any(hotBar, PHotItemSize);
    vBorderSizeX = GUI_Anx(hotBar, PHotBarBorderSize);
    vBorderSizeY = GUI_Any(hotBar, PHotBarBorderSize);
   
    // счётчик отображаемых элементов
    counter = 0;
   
    // текст клавиши
    var string keyText;
   
    // -------------- 1 ------------------------
   
    // создаем ячейку хотбара как дочерний элемент
    hotItem = GUI_Create(hotBar, HotItemProto);
   
    // специфичные для данной ячейки параметры
    hotItem.item = HotBarItems[0];
    hotItem.ints[INDEX_HOT_ITEM_KEY] = KEY_1;
    hotItem.ints[INDEX_HOT_ITEM_SLOT] = 0;
    keyText = "1";
   
    // не отображаем количество больше 999
    amount = GetMin(999, Npc_HasItems(hero, hotItem.item));
   
    if (hotItem.item > 0)
    {
        // отступ + (размер ячейки + отступ) за каждый уже отображенный предмет
        hotItem.vPosX = vBorderSizeX + counter * (vItemSizeX + vBorderSizeX);
       
        hotItem.vPosY = vBorderSizeY;
        hotItem.vSizeX = vItemSizeX;
        hotItem.vSizeY = vItemSizeY;
       
        if (amount == 0)
        {
            hotItem.texture = TEXTURE_ITEM_NOTEXIST;
        }
        else
        {  
            hotItem.texture = TEXTURE_ITEM_USABLE;
        };
       
        // затеняем предмет
        if (handleKeys == false)
        {
            hotItem = GUI_Create(hotItem, HotItemShadowedProto);
        };
       
        label = GUI_Create(hotItem, HotKeyLabelProto);
        label.text = keyText;
       
        label = GUI_Create(hotItem, HotAmountLabelProto);
        label.text = IntToString(amount);
       
        counter += 1;
    };

    // -------------- 2 ------------------------
   
    hotItem = GUI_Create(hotBar, HotItemProto);
   
    // специфичные для данной ячейки параметры
    hotItem.item = HotBarItems[1];
    hotItem.ints[INDEX_HOT_ITEM_KEY] = KEY_2;
    hotItem.ints[INDEX_HOT_ITEM_SLOT] = 1;
    keyText = "2";
   
    amount = GetMin(999, Npc_HasItems(hero, hotItem.item));
   
    if (hotItem.item > 0)
    {
        // отступ + (размер ячейки + отступ) за каждый уже отображенный предмет
        hotItem.vPosX = vBorderSizeX + counter * (vItemSizeX + vBorderSizeX);
       
        hotItem.vPosY = vBorderSizeY;
        hotItem.vSizeX = vItemSizeX;
        hotItem.vSizeY = vItemSizeY;
       
        if (amount == 0)
        {
            hotItem.texture = TEXTURE_ITEM_NOTEXIST;
        }
        else
        {  
            hotItem.texture = TEXTURE_ITEM_USABLE;
        };
       
        // затеняем предмет
        if (handleKeys == false)
        {
            hotItem = GUI_Create(hotItem, HotItemShadowedProto);
        };
       
        label = GUI_Create(hotItem, HotKeyLabelProto);
        label.text = keyText;
       
        label = GUI_Create(hotItem, HotAmountLabelProto);
        label.text = IntToString(amount);
       
        counter += 1;
    };
   
    // -------------- 3 ------------------------
   
    hotItem = GUI_Create(hotBar, HotItemProto);
   
    // специфичные для данной ячейки параметры
    hotItem.item = HotBarItems[2];
    hotItem.ints[INDEX_HOT_ITEM_KEY] = KEY_3;
    hotItem.ints[INDEX_HOT_ITEM_SLOT] = 2;
    keyText = "3";
   
    amount = GetMin(999, Npc_HasItems(hero, hotItem.item));
   
    if (hotItem.item > 0)
    {
        // отступ + (размер ячейки + отступ) за каждый уже отображенный предмет
        hotItem.vPosX = vBorderSizeX + counter * (vItemSizeX + vBorderSizeX);
       
        hotItem.vPosY = vBorderSizeY;
        hotItem.vSizeX = vItemSizeX;
        hotItem.vSizeY = vItemSizeY;
       
        if (amount == 0)
        {
            hotItem.texture = TEXTURE_ITEM_NOTEXIST;
        }
        else
        {  
            hotItem.texture = TEXTURE_ITEM_USABLE;
        };
       
        // затеняем предмет
        if (handleKeys == false)
        {
            hotItem = GUI_Create(hotItem, HotItemShadowedProto);
        };
       
        label = GUI_Create(hotItem, HotKeyLabelProto);
        label.text = keyText;
       
        label = GUI_Create(hotItem, HotAmountLabelProto);
        label.text = IntToString(amount);
       
        counter += 1;
    };
   
    // ====================================================================
   
    // обрабатываем нажатые клавиши (обход от дочерних элементов к корневым)
    if (handleKeys == true)
    {
        GUI_Proc(hotBar);
    };
   
    // ставим корневой элемент в очередь на отрисовку
    GUI_Draw(hotBar);
};
LSHIFT + KEY_1/2/3 - использовать предмет из первого/второго/третьего слота
RSHIFT + KEY_1/2/3 - задать предмет в фокусе в первый/второй/третий слот
Работает только для еды, напитков и брони.
 

Вложения

  • Union_ScriptGui.exe.zip
    2,9 MB · Просмотры: 77

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.925
Благодарности
556
Баллы
275
Приветствую всех.
Slavemaster, а можно ли добавить в Union_SpellFix маленький фикс, чтобы заклинание света сбрасывалось, если ГГ поспал?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.096
Благодарности
5.584
Баллы
910
Плагин QuickLoot.
Быстрый сбор предметов при помощи правой кнопки мыши. (Хотелось реализовать плавное перемещение сообщений).
У тебя кстати вроде в коде нет посылки восприятий НПС, поэтому можно лутать везде и вся без наказания. Надо чтобы при луте сундука посылалось восприятие PERC_ASSESSUSEMOB
А у НПС, если рядом лежит их вещь - PERC_ASSESSTHEFT

Ну и да, в плагине на ninja лутать с помощью телекинеза и подобных заклинаний запрещено.:)
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.077
Благодарности
1.896
Баллы
290
У тебя кстати вроде в коде нет посылки восприятий НПС, поэтому можно лутать везде и вся без наказания.
Есть
Ну и да, в плагине на ninja лутать с помощью телекинеза и подобных заклинаний запрещено.
Есть проверка на боевой режим
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.096
Благодарности
5.584
Баллы
910
Не увидел, извиняюсь, просто немцы писали, что при игре с твоим плагином реакции не было.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.077
Благодарности
1.896
Баллы
290
N1kX, это в какой модификации?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.096
Благодарности
5.584
Баллы
910
Не знаю.
Quickloot Kiridies
Вот Тред. Началось с того, что при лутании сундука не работает вызов триггера через суффиксы _S
Например, так не появляется Грег в Яркендаре

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

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.077
Благодарности
1.896
Баллы
290
Обновил плагин на квиклут. Теперь триггеры будут срабатывать и ключи автоматически использоваться.
Теперь можно назначить клавиши, при зажатии которых квиклут срабатывает.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.096
Благодарности
5.584
Баллы
910
Обновил плагин на квиклут. Теперь триггеры будут срабатывать и ключи автоматически использоваться.
Теперь можно назначить клавиши, при зажатии которых квиклут срабатывает.
Можешь ещё добавить отключение анимации текста? Меня дико раздражает.
Мне обычного printscreen хватит.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
что за анима текста ?! *lupa*
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.077
Благодарности
1.896
Баллы
290

Вложения

  • Union_QuickLoot.dll.zip
    154,9 KB · Просмотры: 34

Raswen

Гражданин Хориниса
Регистрация
18 Фев 2014
Сообщения
1.352
Благодарности
784
Баллы
260
Gratt *flowers* а есть настроение или желание дорабатывать нюансы хуманс-ремастера в рамках юниона ?
 
Сверху Снизу