Wake of Gods Forum | Форум Во Имя Богов

Full Version: Исследование героев
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
А эта без указания номера героя.
igrik, триггер (и пост-триггер) посещения объекта таким образом срабатывают?
(06.02.2016 13:01)Algor Wrote: [ -> ]igrik, триггер (и пост-триггер) посещения объекта таким образом срабатывают?
Да: и триггер и пост-триггер, и с HD тоже работает.
Может у кого и структура def в памяти случайно есть?
Из HD (кстати, по какой причине те сорцы были выпилены?)
Code:
NOALIGN struct _BinTreeItem_ : public _Struct_ // size = 28
{
    _ptr_*    v_table; // + 0
    _char_    name[12]; // + 4
    _dword_    name_end; // + 16
    _dword_    type; // + 20
    _int_    ref_count; // + 24

    void DerefOrDestruct() { CALL_1(void, __thiscall, this->v_table[1], this); }

};


NOALIGN struct _Def_ : public _BinTreeItem_
{
    _DefGroup_**    groups; // + 28
    _Palette16_*    palette16;
    _Palette24_*    palette24;
    _dword_            groups_count;
    _ptr_            active_groups;
    _dword_            width;
    _dword_            height;
};


NOALIGN struct _DefGroup_
{
    _dword_        frames_count;
    _dword_        frames_size;
    _DefFrame_** frames;

};



NOALIGN struct _DefFrame_ : public _BinTreeItem_
{
    _dword_        frm_size; // + 28
    _dword_        buf_size;
    _dword_        compression_type;
    _dword_        def_width;
    _dword_        def_height;
    _dword_        frame_width;
    _dword_        frame_height;
    _dword_        frame_left;
    _dword_        frame_top;
    _dword_        unknown_40;
    _ptr_        buffer;
};
Благодарю. Я и не знал, что сорцы HD выкладывались в открытый доступ.
Как же труден и неудобен ERM в таких вещах, просто жуть.
Image: JRI49eeCzz4.jpg
Здоровская примочка! Жаль, что вылетает на третьем.
Соглашусь, ЕРМ неудобен для такого кода.
Накопал я довольно таки интересную вещь в сетевом режиме (LAN). Итак, при генерации карты в триггере !?PI, пользуясь функцией удаления объекта (при замене оных) мы получаем гарантированный вылет. Это происходит вследствие того, что в геройской функции удаления объектов есть функция "звукового сопровождения". Если ее занопить на момент генерации карты, то вылета игры не будет. А т.к. на этот момент передача сетевых данных еще не происходит, то мы получаем рабочий код замены объектов, не требующий использования таймеров и других плюх. Плюс при показе карты приключений как на стороне сервера, так и на стороне клиента мы уже имеем замененные объекты. Т.е. 1 часть рассинхрона мы вылечили (остается еще решить рассинхрон в битве. Тут у меня уже тоже есть кое-какие наблюдения и как это лечить).
Код выглядит так (на примере замены двусторонних монолитов на мельницы) (Click to View)
И ещё, я не использовал функцию UN:U [сосчитать все объекты на карте], потому что при передаче хода от клиента серверу происходит непонятный вылет, связанный с библиотекой "kernel32.dll" и не связанный с этим патчем.
хм, очень интересно.
Т.е. по сути можно уже щас взять оф.скрипты из WoG и "вылечить" их, обозвав это тестингом на стабильность и выложить для массового тестинга людям?

P.S.
(21.03.2017 17:45)igrik Wrote: [ -> ]И ещё, я не использовал функцию UN:U [сосчитать все объекты на карте], потому что при передаче хода от клиента серверу происходит непонятный вылет, связанный с библиотекой "kernel32.dll" и не связанный с этим патчем.
а ты не проверял этот момент на разных ОС (Xp, win7+)
вдруг там будут разные "грабли"?
(25.03.2017 17:25)Bes Wrote: [ -> ]хм, очень интересно.
Т.е. по сути можно уже щас взять оф.скрипты из WoG и "вылечить" их, обозвав это тестингом на стабильность и выложить для массового тестинга людям?
а ты не проверял этот момент на разных ОС (Xp, win7+)
вдруг там будут разные "грабли"?
Проверял на XP и на Win7_x64.
Да, можно. И я бы даже сказал - что нужно. Но у меня совершенно нет желания перелопачивать тонну оф.скриптов. Вообще.
igrik, могу потихоньку начать... по порядку.
я правильно понял, что эту махинацию надо делать каждый раз при замене объкта на карте в скрипте (или удалении)?

буду не спеша, чтобы лишних багов не натворить по невнимательности.
в отдельной теме выкладывать До и ПОСЛЕ файл с описанием что заменял.
дабы была и сторонняя модерация подмены кода.
(26.03.2017 16:51)Bes Wrote: [ -> ]igrik, могу потихоньку начать... по порядку.
я правильно понял, что эту махинацию надо делать каждый раз при замене объкта на карте в скрипте (или удалении)?
Не совсем. Этот код расчитан только на момент действия триггера !?PI. Вся суть заключается в том, что (для LAN):
1. Хост нажимает кнопку "Начать"
2. Происходит генерация (для случайных) а потом загрузка карты.
2а. Тут вызывается триггер !?PI и в данном случае наша подмена объектов
3. Происходит передача сетевых данных клиенту, в том числе и карты (в нашем случае уже с измененными объектами).
В итоге: у обоих игроков при первом показе карты приключений все объекты идентичны.
Данный скрипт актуален для всех скриптов, которые заменяют объекты только в первый день. Например: замены картографов, улиев, и весь комплекс опций от "Замена объектов во время WoG'ификации.
На счет замены в другие игровые дни не скажу. Да и сейчас для этого нет достаточного запаса времени.
(26.03.2017 16:51)Bes Wrote: [ -> ]буду не спеша, чтобы лишних багов не натворить по невнимательности.
в отдельной теме выкладывать До и ПОСЛЕ файл с описанием что заменял.
дабы была и сторонняя модерация подмены кода.
Было бы конечно отлично, но спрошу ещё раз: стоит ли игра свечь?
igrik, я на больничный пошёл... могу сидеть смотреть сериалы, порно кино, или же таки открыть скрипты и прогнать всю эту тему по мере возможного.
вроде бы замена wog'ификацией идёт в теле таймера... не?
(27.03.2017 13:16)Bes Wrote: [ -> ]вроде бы замена wog'ификацией идёт в теле таймера... не?
Так о том и речь. Если замена в начале игры, то перенести её в !?PI.
Reference URL's