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

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

    Ссылка на конкурсную тему - тык
    Ссылка на тему с работами участников- тык

вопросы по union

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275
мне бы через union sdk понять как это сделать, думаю тут замешано oCViewDialogInventory, но хотелось бы и другой путь узнать, может я просмотрел. искал через player->, но что-то всё не то

Daedalus:
if (player -> GetInventory() -> IsOpen())
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275
Есть ли способ проследить открыт ли инвентарь на экране? хочу записать его состояние в условие.

мне кажется это может что то очень очень простое
C++:
    int __cdecl C_HeroOpenInventory()
    {
        if (player -> GetInventory() -> IsOpen())
            return 1;
    }

    ZEXTERNAL(int, C_HeroOpenInventory);

а далее на скриптах используя C_HeroOpenInventory можешь делать что угодно.
 
Последнее редактирование:

DAMROCK

Участник форума
Регистрация
23 Янв 2017
Сообщения
21
Благодарности
5
Баллы
160
мне кажется это может что то очень очень простое
C++:
    int __cdecl C_HeroOpenInventory()
    {
        if (player -> GetInventory() -> IsOpen())
            return 1;
    }

    ZEXTERNAL(int, C_HeroOpenInventory);

а далее на скриптах используя C_HeroOpenInventory можешь делать что угодно.
1695285046739.png
Дело вот в чём, состояние отслеживается в UpdatePlayerStatus (0x006C3140).
метода GetInventory у меня нет
Пост автоматически объединён:

MW 7, Еле как методом тыка, но наткнулся на следующее, что полноценно меня удовлетворяет:if(player->inventory2.IsActive()) 5 часов поисков *lupa* *heat*
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275
MEG@VOLT, тут RX_DiaAddNpc должна быть
C++:
  void Game_DefineExternals() {
      // внешние функции в ёнион плагине
      parser->DefineExternal("RX_DiaRemoveNpc", RX_DiaRemoveNpc, zPAR_TYPE_VOID, zPAR_TYPE_INSTANCE, 0);
      parser->DefineExternal("RX_DiaSetActive", RX_DiaSetActive, zPAR_TYPE_VOID, zPAR_TYPE_INSTANCE, 0);
      parser->DefineExternal("RX_DiaStart", RX_DiaStart, zPAR_TYPE_VOID, 0);
      parser->DefineExternal("RX_DiaStop", RX_DiaStop, zPAR_TYPE_VOID, 0);

  }
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
мне кажется это может что то очень очень простое
C++:
    int __cdecl C_HeroOpenInventory()
    {
        if (player -> GetInventory() -> IsOpen())
            return 1;
    }

    ZEXTERNAL(int, C_HeroOpenInventory);

а далее на скриптах используя C_HeroOpenInventory можешь делать что угодно.
C++ не дедалус. Возвращаемое значение должно быть явным на всех путях выполнения функции. Если инвентарь не открыт, то функция может вернуть неопределенность, т.е. в данном случае последнее, что было записано в регистр eax. А еще лучше сделать тупо
Код:
return player -> GetInventory() -> IsOpen()
.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.040
Благодарности
1.821
Баллы
240
Так как этот код написан под мою версию SDK, то значение должно возвращаться с помощью ZRETURN(player -> GetInventory() -> IsOpen()).
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275
а что должна открывать OpenScreen_Help ?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
Я наверно криворукий, но какая-то фигня точно происходит.
Связано это либо zParserExtender, либо с самим union.
В общем, на прошлой неделе, перестала вызываться функция AI_CallScript, игра крашилась, когда доходило до нее. Ну думаю - хрен с ней.
Вывел в отдельный плагин, обозвал по другому, все путем.
Сегодня утром, функция AI_StartTriggerScriptEx(именно расширенная), работала стабильно. После обеда пошел дальше скрипты писать. Функция перестала работать, игра крашится. В логе не пишется, что она вызывается:

1700141027015.png


======================================= UNHANDLED EXCEPTION OCCURED ======================================================
======================================= CRASH INFOS: =====================================================================
Gothic II - 2.6 (fix), Parser Version: 50
User: бузер, CPUType: 586, Mem: 0 MB total, 1021 MB free
Camera: Pos(29855.8008/5333.39746/-15673.793), At(0.757312894/-0.218681782/-0.615349889)
Startup Options:-game:gothicgame.ini
=============================================== CALLSTACK : ==============================================================
0023:00000000 (0x15F496D8 0x00AB4118 0x00AB40C0 0x0082E6F0) Gothic2.exe
0023:00792568 (0x00000000 0x0082E6F0 0x22695F50 0x00AAC45C) Gothic2.exe, zCParser::DoStack()+3080 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1433
0023:00792CBF (0x00AB40C0 0x00013559 0x22695F50 0x006623F2) Gothic2.exe, zCParser::CallFunc()+719 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1551
0023:00703981 (0x00AAC458 0x309DDFD0 0x217FC7A0 0x00000000) Gothic2.exe, oCInfo::Info()+17 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oInfo.cpp, line 512+14 byte(s)
0023:006623F2 (0x00000000 0x309DDFD0 0x217FC7A0 0x00000000) Gothic2.exe, oCInformationManager::OnInfo()+354 byte(s), P:\dev\g2addon\release\Gothic\_roman\oInformationManager.cpp, line 1003
0023:0074C117 (0x217FC7A0 0x00000000 0x217FC7A0 0x30A3B7B8) Gothic2.exe, oCNpc::OnMessage()+4343 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oNpc.cpp, line 10772+141 byte(s)
0023:00786DD3 (0x217FC7A0 0x309DDFD0 0x00000000 0x168ED274) Gothic2.exe, zCEventManager::SendMessageToHost()+371 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 269
0023:007870CA (0x168ED028 0x00621903 0x15E71B90 0x0083C10C) Gothic2.exe, zCEventManager::processMessageList()+202 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 376
0023:00785F96 (0x15E71B90 0x0083C10C 0x15F336A0 0x00000000) Gothic2.exe, zCEventManager::DoFrameActivity()+38 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 145+9 byte(s)
0023:00621903 (0x00000001 0x00000000 0x15A5B878 0x0135FB5C) Gothic2.exe, zCWorld::Render()+515 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zWorld.cpp, line 825
0023:006C87EB (0x15F336A0 0x00000000 0x00000000 0x15F336A0) Gothic2.exe, oCGame::Render()+331 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oGame.cpp, line 2658
0023:7C06B831 (0x00400000 0x0141423F 0x0135FE08 0x00000000) SHW32.DLL, UnionCore::CUnion::DefineCRTVersion()+6305 byte(s)
0023:00425E6E (0x0082F0EC 0x00000001 0x00130CEA 0x15F336A0) Gothic2.exe, CGameManager::Run()+1598 byte(s), P:\dev\g2addon\release\Gothic\_bert\oGameManager.cpp, line 767+47 byte(s)
0023:0078188B (0x0000002C 0x0000129B 0x00000000 0x00000000) Gothic2.exe, MainProg()+75 byte(s), P:\dev\g2addon\release\Gothic\_ulf\Phoenix.cpp, line 111
0023:00503270 (0x00400000 0x00000000 0x0141423F 0x00000001) Gothic2.exe, HandledWinMain()+928 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1169
0023:00502DFD (0x0135FE0C 0x00000000 0x0141423F 0x00000001) Gothic2.exe, WinMain()+141 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1054+17 byte(s)
0023:7C06D395 (0x00000004 0x0000FFFF 0x000000B8 0x00000000) SHW32.DLL, UnionCore::CUnion::InitApp()+3349 byte(s)

Если в AI_StartTriggerScriptEx сделать какую-нить ошибку, то игра при запуске орет. Значит она понимает, что функция есть, и у нее свой синтаксис. Но почему она не вызывается?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275
MEG@VOLT, скинь скрипты где ты вызывал AI_CallScript и игра крашилась.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
А не могу(((
Начала работать...Ваще хрень какая-то...
а вот AI_StartTriggerScriptEx так и не хочет вызываться...
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275
MEG@VOLT, у меня часто было такое из-за того что я допускал ошибки при использование Str_Format. Игра крашилась при запуске и я грешил на разные функции :)

а вот AI_StartTriggerScriptEx так и не хочет вызываться...
если ты её указал в скриптах и игра стартанула, значит она уже зарегана(?) как внешняя функция. напиши что как ты её вызываешь.
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
если ты её указал в скриптах и игра стартанула,
Вот она где гадина зарылась...
Спасибо!
Временно отключил ее в Externals.d, пока тестирую. и она и подгрузилась из парсера, и заработала как надо.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.924
Благодарности
926
Баллы
275
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
Хе-хе, снова я)))
Есть вариант как-то плавно перевести время, ну допустим, на 8 часов вперед? секунд за 10-20...
Чтобы видно было как облака/луна/солнце/звезды пролетают.
Все до чего я допер - oCWorldTimer. А дальше все.... ступор...
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
Сверху Снизу