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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

Union SDK - Инструменты разработчика

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
  • Первое сообщение
  • #1
UnionProjectIcon.png


Union SDK

инструменты разработчика

Тема находится в состоянии наполнения



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

Рекомендуется смотреть на YouTube, поскольку там имеется сегментированный таймлайн.






Схемы классов движка
1600263933953.png
1600263981919.png
1600264017579.png
 

Вложения

  • sizeof.xlsx
    896,7 KB · Просмотры: 47
  • Union_SDK_1_0m.zip
    20,6 MB · Просмотры: 18
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
zeratul47, ну так сделай, инсталлеров куча всяких разных. Или тебе нужен такой же, как в ресурс менеджере?
 

zeratul47

Участник форума
Регистрация
10 Янв 2020
Сообщения
21
Благодарности
0
Баллы
60
Я просто никогда не делал инсталеры. Поэтому и спрашиваю - может есть какой-то гайд?
Точнее один "гайд" я нашел - NSIS - Создание инсталляторов - ZenGin справочник - Gothic Library
Но для него нужен G2MDK, а его на русском я не нашел. А в немецкий сложно. Да и гайд не совсем понятен мне.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
Нет, у меня примеров работы с NSIS нету. Спрашивай либо MaGoth, либо neromont.
 

zeratul47

Участник форума
Регистрация
10 Янв 2020
Сообщения
21
Благодарности
0
Баллы
60
А конкретно для юниона требуется ли что-то дополнительно, или достаточно включить новые для готики файлы из ./system папки?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
Тебе вообще ничего включать не надо. Все компоненты юниона должны ставиться с официального инсталлера.
А свою длл суй в VDF чтобы не болталась в системных папках.
 

zeratul47

Участник форума
Регистрация
10 Янв 2020
Сообщения
21
Благодарности
0
Баллы
60
Тебе вообще ничего включать не надо. Все компоненты юниона должны ставиться с официального инсталлера.
А свою длл суй в VDF чтобы не болталась в системных папках.
А как правильно упаковать длл в VDF?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
zeratul47, засунь длл в том сохраняя оригинальные пути. Либо для автоматического запуска плагина помести его в директорию с именем autorun.
Смотри как устроены VDF тома плагинов из менеджера ресурсов, если что-то не поймешь.
 

kansler-ice

Участник форума
Регистрация
25 Окт 2020
Сообщения
5
Благодарности
1
Баллы
55
При билде нетронутого проекта из шаблона сразу выдаёт ошибки, что не видит UnionAfx.h.
image_2020-10-27_222009.png

SDK 1.0h из менеджера.
Студия - самая свежая community-версия.
В настройках проекта выбирал Windows 10 и v142. Хотя это не могло повлиять.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
После последнего обновления стала вылезать (не часто, но бывает) вот такая ошибка (раньше ее не видел, ни на G ни на h версии Юни)

=============================================== CALLSTACK : ==============================================================
0023:0046C973 (0x00000000 0x008B1C40 0x00000001 0x2467C040) Gothic2.exe, zSTRING::Search()+83 byte(s), P:\dev\g2addon\release\ZenGin\_bert\zString.cpp, line 494+31 byte(s)
0023:006B0504 (0x00000000 0x00000000 0x233EAC90 0x084200E0) Gothic2.exe, oCAniCtrl_Human::HitCombo()+676 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oAniCtrl.cpp, line 2800+19 byte(s)
0023:00751969 (0x084200E0 0x00000000 0x233EAC90 0x084200E0) Gothic2.exe, oCNpc::EV_AttackRun()+409 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oNpc.cpp, line 12270
0023:0074BC47 (0x084200E0 0x00000000 0x084200E0 0x229703D0) Gothic2.exe, oCNpc::OnMessage()+3111 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oNpc.cpp, line 10747
0023:00786DD3 (0x084200E0 0x233EAC90 0x00000000 0x1CD011F4) Gothic2.exe, zCEventManager::SendMessageToHost()+371 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 269
0023:007870CA (0x1CD00FA8 0x00621903 0x08AD2930 0x0083C10C) Gothic2.exe, zCEventManager::processMessageList()+202 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 376
0023:00785F96 (0x08AD2930 0x0083C10C 0x08B48410 0x00000000) Gothic2.exe, zCEventManager::DoFrameActivity()+38 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 145+9 byte(s)
0023:00621903 (0x00000001 0x08B48410 0x00000000 0x0135FBD0) Gothic2.exe, zCWorld::Render()+515 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zWorld.cpp, line 825
0023:006C87EB (0xACA795C9 0x08B48410 0x00000000 0x00000004) Gothic2.exe, oCGame::Render()+331 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oGame.cpp, line 2658

Воспроизвести точно ошибку не получается. Но обычно она случается если на экран выводится какая то инфа через обычный принтскрин. Если мысли что ему не нравится в строке pos = find(substr, index);?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
Trazege, что такое index? Если он выходит за пределы строки, то вероятен вылет.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
Но я так понимаю в Юне эта функция заменена на твою. Или я что то путаю? По крайней мере для этого класа нет инлайн файла. Или я не прав?
Юнион ничего не меняет. Просто в самих плагинах у тебя есть выбор что использовать. Оригинальные зстринговые методы, либо новые от обычного стринга.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Trazege, что такое index? Если он выходит за пределы строки, то вероятен вылет.

Это родной код движка. Строка взята отсюда. По логу краша это видно.

int zSTRING::Search(int startIndex, const char* substr, unsigned int num) const
{
if (!substr) return -1;
int index = startIndex;
int pos = -1;
for (int i=0;i<num;i++)
{
pos = find(substr, index);
if (pos==string::npos) return -1;
index = pos+1;
}
return pos;
};

Но я так понимаю в Юне эта функция заменена на твою. Или я что то путаю? По крайней мере для этого класа нет инлайн файла. Или я не прав?
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Для тех, у кого проблемы с Windows Defender https://worldofplayers.ru/threads/41415/post-1105265
Проблема должна рассосаться самостоятельно при следующем запуске менеджера. Во всяком случае я все проверил на самой актуальной десятке с последними обновлениями Защитника.


Юнион ничего не меняет. Просто в самих плагинах у тебя есть выбор что использовать. Оригинальные зстринговые методы, либо новые от обычного стринга.

Какой аналог в Юнион для обычно screen->Print?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
Trazege, ему нужен аналог? :oops:
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.843
Благодарности
5.268
Баллы
910
К слову, в пакете Lego идет какой-то фикс printscreen и AI_printscreen. Фиксил mud-freak, что сделал, мне не понять.
Daedalus:
//========================================
// PrintScreen fixen
//========================================
func void Print_FixPS() {
    /* All zCView::PrintTimed* functions that are called by the externals PrintScreen and AI_PrintScreen
     * call zCView::CreateText with the arguments "color" and "colored" set to zero/False. These are
     * overwritten here to force white text, regardless of previous prints.
     */

    const int addr_color[4]   = { zCView__PrintTimed_color,     zCView__PrintTimedCX_color,
                                  zCView__PrintTimedCY_color,   zCView__PrintTimedCXY_color   };
    const int addr_colored[4] = { zCView__PrintTimed_colored,   zCView__PrintTimedCX_colored,
                                  zCView__PrintTimedCY_colored, zCView__PrintTimedCXY_colored };
    const int offset[4]       = { 28, 64, 32, 60 }; // Function stack offsets for value of "color"

    repeat(i, 4); var int i;
        // Set argument "color" to white
        var int addr; addr = MEM_ReadStatArr(addr_color, i);
        MemoryProtectionOverride(addr, 8);
        MEM_WriteInt(addr, 2376903); // mov DWORD [esp+offset], -1
        MEM_WriteByte(addr+3, MEM_ReadStatArr(offset, i));
        MEM_WriteInt(addr+4, -1);

        // Set argument "colored" to true
        addr = MEM_ReadStatArr(addr_colored, i);
        MemoryProtectionOverride(addr, 4);
        MEM_WriteInt(addr, 23761040); // nop; nop; push 1
    end;
};
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
Со скрином все ок, с 2016 года полет нормальный. Проблема не в сдк, а где-то на стороне проекта. Если ошибка возникает именно с этой строкой, значит надо смотреть предшествующие операции.
 

Mefiu123

Участник форума
Регистрация
13 Апр 2021
Сообщения
4
Благодарности
0
Баллы
35
Я начинаю играть с профсоюзом и хотел сделать первый NPC, который видит персонаж игрока, который будет постоянно менять позицию на ту, которая есть у игрока в настоящее время, это работает, однако, до тех пор, пока я не использую руну телепортации или использовать команду goto waypoint и некоторые очень далеко, то персонаж не меняет позицию, но я дал себе экранное отображение возвращаемого значения функции IsNear(NPC) и, хотя я внезапно убежал очень далеко от NPCt, он все равно возвращает 1.
Код:
void Game_Loop()
{
if (!firstNPC) firstNPC = player->GetFocusNpc();

if (firstNPC)
{
screen->Print(2000, 200, player->IsNear(firstNPC);
if (!player->IsNear(firstNPC)) firstNPC->SetPositionWorld(player->GetPositionWorld());
}
}

И еще один вопрос, можно ли откуда-то достать аргументы в функцию? Потому что трудно понять, как у меня есть такая функция, как Foo(int, int), и что это за 1 аргумент int, а что за другой.

Переведено google translator.
 
Сверху Снизу