Другое С/С++ Вопрос - Ответ

Rei

Известный
Друг
1,589
1,614
Есть список всех существующих AnimFlags в онфут синхре?
C++:
    union {
        struct {
            uint16_t id;
            uint8_t  frameDelta;
            union {
                struct {
                    bool    loop : 1;
                    bool    lockX : 1;
                    bool    lockY : 1;
                    bool    freeze : 1;
                    uint8_t time : 2;
                    uint8_t _unused : 1;
                    bool    regular : 1;
                };
                uint8_t value;
            } flags;
        } animation;
        struct {
            uint16_t  animationId;
            uint16_t  animationFlags;
        };
    };
 
  • Нравится
Реакции: Ya Zaregalsya

Ya Zaregalsya

Известный
371
131
C++:
    union {
        struct {
            uint16_t id;
            uint8_t  frameDelta;
            union {
                struct {
                    bool    loop : 1;
                    bool    lockX : 1;
                    bool    lockY : 1;
                    bool    freeze : 1;
                    uint8_t time : 2;
                    uint8_t _unused : 1;
                    bool    regular : 1;
                };
                uint8_t value;
            } flags;
        } animation;
        struct {
            uint16_t  animationId;
            uint16_t  animationFlags;
        };
    };
Это же просто структура рпс. Ааааа!! Т.е. получается animationFlags это просто дополнительные параметры этих рпс, токо упакованные в один интеджер вот это дааа....
 

loganhackerdff

Известный
868
517
всем ку, кароче юзаю samp api, там у класса CPed для R1 есть метод GiveWeapon
C++:
void CPed::GiveWeapon(int nWeapon, int nAmmo) {
    ((void(__thiscall*)(CPed*, int, int))GetAddress(0xAA060))(this, nWeapon, nAmmo);
}
а у R3-1 нету, немогли бы вы пожалуйста дать адресс этой функции у класса CPed для R3-1
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
всем ку, кароче юзаю samp api, там у класса CPed для R1 есть метод GiveWeapon
C++:
void CPed::GiveWeapon(int nWeapon, int nAmmo) {
    ((void(__thiscall*)(CPed*, int, int))GetAddress(0xAA060))(this, nWeapon, nAmmo);
}
а у R3-1 нету, немогли бы вы пожалуйста дать адресс этой функции у класса CPed для R3-1
AEF00
 
  • Нравится
Реакции: loganhackerdff

Ya Zaregalsya

Известный
371
131
C++:
    union {
        struct {
            uint16_t id;
            uint8_t  frameDelta;
            union {
                struct {
                    bool    loop : 1;
                    bool    lockX : 1;
                    bool    lockY : 1;
                    bool    freeze : 1;
                    uint8_t time : 2;
                    uint8_t _unused : 1;
                    bool    regular : 1;
                };
                uint8_t value;
            } flags;
        } animation;
        struct {
            uint16_t  animationId;
            uint16_t  animationFlags;
        };
    };
Допустим про безымянные классы я кое что слышал, а можешь пояснить для чего нужны безымянные классы, у которых нет ни одного экземпляра? Как происходит обращение к ним?

@Rei
Код:
struct {
            uint16_t  animationId;
            uint16_t  animationFlags;
        };
Ну вот это вот что такое, ни имени, ни экземпляра.
 
Последнее редактирование:
  • Эм
Реакции: Rei

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,633
2,482
ля чего нужны безымянные классы, у которых нет ни одного экземпляра
Обычно используются в union-ах и позволяют указать компилятору, что два больших экземпляра распологаются на одинаковом участке памяти
Как происходит обращение к ним?
Ничего особенного, просто как к обычным полям класса
 
  • Нравится
Реакции: Ya Zaregalsya

Ya Zaregalsya

Известный
371
131
C++:
    union {
        struct {
            uint16_t id;
            uint8_t  frameDelta;
            union {
                struct {
                    bool    loop : 1;
                    bool    lockX : 1;
                    bool    lockY : 1;
                    bool    freeze : 1;
                    uint8_t time : 2;
                    uint8_t _unused : 1;
                    bool    regular : 1;
                };
                uint8_t value;
            } flags;
        } animation;
        struct {
            uint16_t  animationId;
            uint16_t  animationFlags;
        };
    };

Обычно используются в union-ах и позволяют указать компилятору, что два больших экземпляра распологаются на одинаковом участке памяти

Ничего особенного, просто как к обычным полям класса
Да в общем добавил эту байду в stOnFootData, переписал код под унионы и всё заработало как часы. Странно, что в сампфунксе изначально этого нет, постоянно приходится что-то списывать с мунлоадера, вроде делали это всё одни и те же люди, а по факту мун сделан напорядок качественнее, чем сф.
 

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,260
1,737
Да в общем добавил эту байду в stOnFootData, переписал код под унионы и всё заработало как часы. Странно, что в сампфунксе изначально этого нет, постоянно приходится что-то списывать с мунлоадера, вроде делали это всё одни и те же люди, а по факту мун сделан напорядок качественнее, чем сф.
эти данные стали известны гораздо позже, чем вышла последняя версия сфа на 0.3.7 R1
 
  • Грустно
Реакции: Ya Zaregalsya

loganhackerdff

Известный
868
517
такс, нужны знания гениев, наверно те, кто делал мун подскажут, есть кароче такая штука sol3, так вот, там написанно:
вот тут
For your system/game that already has Lua or uses an in-house or pre-rolled Lua system (LuaBridge, kaguya, Luwra, etc.), but you’d still like sol3 and nice things:
и прикреплен код:
C++:
#define SOL_ALL_SAFETIES_ON 1
#include <sol/sol.hpp>

#include <iostream>

int use_sol2(lua_State* L) {
    sol::state_view lua(L);
    lua.script("print('bark bark bark!')");
    return 0;
}

int main(int, char*[]) {
    std::cout << "=== opening sol::state_view on raw Lua ===" << std::endl;

    lua_State* L = luaL_newstate();
    luaL_openlibs(L);

    lua_pushcclosure(L, &use_sol2, 0);
    lua_setglobal(L, "use_sol2");

    if (luaL_dostring(L, "use_sol2()")) {
        lua_error(L);
        return -1;
    }

    std::cout << std::endl;

    return 0;
}

так вот, мне интересно, можно ли будет использовать samp api из moonloader в этих sol::state`ах, если у меня будет sol3 в asi плагине который будет заинжекчен в игру с moonloader?? (если я буду использовать lua_State* как написанно в гайде)
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,633
2,482
такс, нужны знания гениев, наверно те, кто делал мун подскажут, есть кароче такая штука sol3, так вот, там написанно:
вот тут

и прикреплен код:
C++:
#define SOL_ALL_SAFETIES_ON 1
#include <sol/sol.hpp>

#include <iostream>

int use_sol2(lua_State* L) {
    sol::state_view lua(L);
    lua.script("print('bark bark bark!')");
    return 0;
}

int main(int, char*[]) {
    std::cout << "=== opening sol::state_view on raw Lua ===" << std::endl;

    lua_State* L = luaL_newstate();
    luaL_openlibs(L);

    lua_pushcclosure(L, &use_sol2, 0);
    lua_setglobal(L, "use_sol2");

    if (luaL_dostring(L, "use_sol2()")) {
        lua_error(L);
        return -1;
    }

    std::cout << std::endl;

    return 0;
}

так вот, мне интересно, можно ли будет использовать samp api из moonloader в этих sol::state`ах, если у меня будет sol3 в asi плагине который будет заинжекчен в игру с moonloader?? (если я буду использовать lua_State* как написанно в гайде)
да, вполне. никаких проблем не будет.
разве что я бы порекомендовал вместо .script выполнять вызов функций напрямую:
C++:
lua.globals()["sampSendChat"]("привет")
 
  • Нравится
Реакции: loganhackerdff

Savchik Blazer

Но я, мечту свою лелея...
Проверенный
671
293
Какой пакет применим к снаряду гидры и хантера?