#1 04-03-2017 08:03

Zin_869731
Registered: 29-12-2016
Posts: 13

Как узнать значение полоски запаса воздуха?

Берём например полосу ХП, её значение можно узнать (ну и собсна записать) опкодом 0226, а как узнать запас воздуха игрока?
И как можно поменять его значение?
Пытался найти что либо на эту тему в инете, по поиску опкодов SB тоже лазил, но как видите ничего я не нашёл.

Offline

#2 04-03-2017 14:26

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Как узнать значение полоски запаса воздуха?

Вариант #1 (самый простой и самый быстрый) - написать свой опкод, используя CLEO SDK и plugin-sdk.
Самое главное преимущество такого подхода, относительно скрипта - то, что скрипт остается "чистым" и понятным.

{$CLEO}
{$OPCODE 1A04=2,%2d% = get_player %1d% breath_percentage}
0000:
while true
    wait 0
    if
        0256: is_player_playing 0
    then
        1A04: 0@ = get_player 0 breath_percentage
        0AD1: print_formatted_now "%.2f" time 100 0@
    end
end

Код опкода

// 1A04: 0@ = get_player 0 breath_percentage
static OpcodeResult WINAPI Opcode_GetPlayerBreathPercentage(CScriptThread *thread) {
    int playerId = CLEO_GetIntOpcodeParam(thread);
    if ((playerId == 0 || playerId == 1) && CWorld::Players[playerId].m_pPed)
        CLEO_SetFloatOpcodeParam(thread, CWorld::Players[playerId].m_pPed->m_pPlayerData->m_fBreath / CallAndReturn<float, 0x559AF0>(8));
    else
        CLEO_SetFloatOpcodeParam(thread, 0.0f);
    return OR_CONTINUE;
}

Вариант #2 (для извращенцев)

{$CLEO}
0AC6: get_label_pointer @pop_float store_to 31@
while true
    wait 0
    if
        0256: is_player_playing 0
    then
        01F5: get_player_char 0 store_to 0@
        0A96: get_char_pointer 0@ store_to 1@
        1@ += 0x480
        0A8D: read_memory 1@ size 4 vp 0 store_to 1@
        1@ += 0x44
        0A8D: read_memory 1@ size 4 vp 0 store_to 1@
        0AA5: call_function 0x559AF0 num_params 1 pop 1 params 8
        0AC7: get_var_pointer 2@ store_to 3@
        0AA5: call_function 31@ num_params 1 pop 1 params 3@
        0073: 1@ /= 2@
        0AD1: print_formatted_now "%.2f" time 100 1@
    end
end

:pop_float
hex
    8B 44 24 04 // mov eax, [esp + 4]
    D9 18       // fstp [eax]
    C3          // retn
end

Вариант #3 (для психопатов)
UP: Передумал писать...  crazy

Last edited by DK22Pac (04-03-2017 14:28)


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#3 04-03-2017 18:53

Zin_869731
Registered: 29-12-2016
Posts: 13

Re: Как узнать значение полоски запаса воздуха?

Придётся пока что быть извращенцем и сидеть понимать что тут к чему :с
Ну ничего, выйдет скоро полноценная VS2017 вот тогда и попробую установить ещё разок
Опять же - спасибо, какой раз уже хорошие, развёрнутые ответы

Last edited by Zin_869731 (04-03-2017 18:55)

Offline

Board footer

Powered by FluxBB