Вопрос Хп бары, postreceivednetmessage

Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
Первый вопрос - можно ли как то узнать видно ли хп бар у героя? искал в шеме нетвары и в дилибе, там нашёл функцию CHudHealthBars::ShouldDraw, но такого класса сейчас вообще нет. При открытой консоли/меню:
1661352107503.png

Второй вопрос: почему в хуке postreceivednetmessage bits всегда -1? ну и конечно же при вызове getnetmessageinfo происходит краш. индекс - 93, вроде верный(также пробовал с 88 индексом, тоже самое. thisptr валидный вроде
1661396908709.png)
1661353131643.png
для getnetmessage пробовал также 13,14,15,16 индекс

info = ((NetMessageInfo_t*(__fastcall*)(CNetworkMessages*, NetMessageHandle_t*))
util::vmt((uintptr_t)networkMessages, 16))(networkMessages, messageHandle
);
так же пробовал вызывать вот эту функцию


(16 индекс у NetMessageHandle)
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
//old shitcode VVV
C++:
    static inline constexpr auto PostReceivedMessage_VFTable_Index = 86;//maybe old
static return_type Hook(
            CNetworkChannel* rcx,
            CNetworkSerializerPB* rdx,
            google::protobuf::Message* r8,
            NetChannelBufType_t* r9
        ) noexcept
C++:
if (rdx->protobufBinding->GetName().contains("CUserMsg_ParticleManager"))
{
    Logger::LogInfo("Receiving %s: %s\n", rdx->protobufBinding->GetName().data(),
                    rdx->protobufBinding->ToString(r8).data());
}
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
//old shitcode VVV
C++:
    static inline constexpr auto PostReceivedMessage_VFTable_Index = 86;//maybe old
static return_type Hook(
            CNetworkChannel* rcx,
            CNetworkSerializerPB* rdx,
            google::protobuf::Message* r8,
            NetChannelBufType_t* r9
        ) noexcept
C++:
if (rdx->protobufBinding->GetName().contains("CUserMsg_ParticleManager"))
{
    Logger::LogInfo("Receiving %s: %s\n", rdx->protobufBinding->GetName().data(),
                    rdx->protobufBinding->ToString(r8).data());
}
спасибо, посмотрю. а с хп барами знаешь как делать? типо мне нужно узнать рисует ли щас игра хп бар у героя или нет
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
спасибо, посмотрю. а с хп барами знаешь как делать? типо мне нужно узнать рисует ли щас игра хп бар у героя или нет
его всегда рисует. просто интерфейс поверх хп бара рисуется.
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
его всегда рисует. просто интерфейс поверх хп бара рисуется.
окей понял.
посмотрел postreceivednetmessage, вроде приходят пакеты нормальные
1661430355453.png

но тут, при создании CUtlString крашит в tier0.dll(странно) буду искать ошибку, может вмт индекс неверный.

//CUtlString data;
//auto s = rdx->protobufBinding->ToString(r8, &data);
//std::cout << s << " " << s << std::endl;
upd: сделал как у лвсс:

C++:
    CUtlString data;
    data.m_Memory.m_pMemory = new uint8_t[4096];
    data.m_Memory.m_nAllocationCount = 4096;
    data.m_Memory.m_nGrowSize = 4096;
    std::cout << rdx->protobufBinding->ToString(r8, &data) << std::endl;
тоже в тир 0 крашит
1661435539347.png
upd1: да, всё таки был неверный индекс

и ещё вопрос, чтобы миллион тредов не создавать, есть ли нетвар какой-то или что-то такое, чтобы получить channeling(ну типо что герой применяет(реарм например
1661431077343.png
?))
 
Последнее редактирование:
https://qweme.dev
Пользователь
Статус
Оффлайн
Регистрация
25 Май 2022
Сообщения
165
Реакции[?]
87
Поинты[?]
21K
окей понял.
посмотрел postreceivednetmessage, вроде приходят пакеты нормальные
Посмотреть вложение 218247

но тут, при создании CUtlString крашит в tier0.dll(странно) буду искать ошибку, может вмт индекс неверный.

//CUtlString data;
//auto s = rdx->protobufBinding->ToString(r8, &data);
//std::cout << s << " " << s << std::endl;
upd: сделал как у лвсс:

C++:
    CUtlString data;
    data.m_Memory.m_pMemory = new uint8_t[4096];
    data.m_Memory.m_nAllocationCount = 4096;
    data.m_Memory.m_nGrowSize = 4096;
    std::cout << rdx->protobufBinding->ToString(r8, &data) << std::endl;
тоже в тир 0 крашит
Посмотреть вложение 218253
и ещё вопрос, чтобы миллион тредов не создавать, есть ли нетвар какой-то или что-то такое, чтобы получить channeling(ну типо что герой применяет(реарм например
Посмотреть вложение 218248
?))
у CBaseAbility есть нетвар называется вроже in ability state или что то такое открой в иде посмотри
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
окей понял.
посмотрел postreceivednetmessage, вроде приходят пакеты нормальные
Посмотреть вложение 218247

но тут, при создании CUtlString крашит в tier0.dll(странно) буду искать ошибку, может вмт индекс неверный.

//CUtlString data;
//auto s = rdx->protobufBinding->ToString(r8, &data);
//std::cout << s << " " << s << std::endl;
upd: сделал как у лвсс:

C++:
    CUtlString data;
    data.m_Memory.m_pMemory = new uint8_t[4096];
    data.m_Memory.m_nAllocationCount = 4096;
    data.m_Memory.m_nGrowSize = 4096;
    std::cout << rdx->protobufBinding->ToString(r8, &data) << std::endl;
тоже в тир 0 крашит
Посмотреть вложение 218253
upd1: да, всё таки был неверный индекс

и ещё вопрос, чтобы миллион тредов не создавать, есть ли нетвар какой-то или что-то такое, чтобы получить channeling(ну типо что герой применяет(реарм например
Посмотреть вложение 218248
?))
так чекни в дампе шемы нетвары)
1661508941100.png
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
//old shitcode VVV
C++:
    static inline constexpr auto PostReceivedMessage_VFTable_Index = 86;//maybe old
static return_type Hook(
            CNetworkChannel* rcx,
            CNetworkSerializerPB* rdx,
            google::protobuf::Message* r8,
            NetChannelBufType_t* r9
        ) noexcept
C++:
if (rdx->protobufBinding->GetName().contains("CUserMsg_ParticleManager"))
{
    Logger::LogInfo("Receiving %s: %s\n", rdx->protobufBinding->GetName().data(),
                    rdx->protobufBinding->ToString(r8).data());
}
а как из партикл менеджера пакета этого получить его имя, например particles/items_fx/necronomicon_true_sight.vpcf

C++:
if (util::fast_strstr(rdx->unscopedName, "CUserMsg_ParticleManager")) {
    CUserMsg_ParticleManager* msg = static_cast<CUserMsg_ParticleManager*>(r8);   
}
у msg нету .name(), или подобного, только .has всякие есть
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
а как из партикл менеджера пакета этого получить его имя, например particles/items_fx/necronomicon_true_sight.vpcf

C++:
if (util::fast_strstr(rdx->unscopedName, "CUserMsg_ParticleManager")) {
    CUserMsg_ParticleManager* msg = static_cast<CUserMsg_ParticleManager*>(r8);  
}
у msg нету .name(), или подобного, только .has всякие есть
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
а где гетресурсбайхеш найти? его нет ни в resourcesystem.dll, ни в client.dll или это самодельная функа?
Посмотреть вложение 220957
C++:
    //mb old
    static inline constexpr auto GetResourceByHash_VMT_Index = 32;
    template<ResourceType_t resource_type>
    auto GetResourceByHash(const ResourceID_t& id) const
    {
        Logger::LogMessage("rsrc id -> 0x%p\n", id.GetHash());
        return CallVFunc<GetResourceByHash_VMT_Index, CResourceInfo*>(id, resource_type.Get());
    }
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
C++:
    //mb old
    static inline constexpr auto GetResourceByHash_VMT_Index = 32;
    template<ResourceType_t resource_type>
    auto GetResourceByHash(const ResourceID_t& id) const
    {
        Logger::LogMessage("rsrc id -> 0x%p\n", id.GetHash());
        return CallVFunc<GetResourceByHash_VMT_Index, CResourceInfo*>(id, resource_type.Get());
    }
почему-то 0 возвращает функа эта
1663235491641.png
1663235609875.png
C++:
g_pResourceSystem = static_cast<C_ResourceSystem*>(util::get_interface("resourcesystem.dll", "ResourceSystem013"));


if (C_BaseEntity* entity = reinterpret_cast<C_BaseEntity*>(g_pGameEntitySystem->GetBaseEntity(ent_idx)); entity->DoesExists()) {

    std::cout << g_pResourceSystem->FindResourceById(created_particle.particle_name_index(), (uintptr_t)"vpcf") << std::endl;
    std::cout << "particle created. index: " << particle->index() << " | entity: " << entity->Schema_DynamicBinding()->binary_name << std::endl;
}
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
почему-то 0 возвращает функа эта
Посмотреть вложение 221038
Посмотреть вложение 221039
C++:
g_pResourceSystem = static_cast<C_ResourceSystem*>(util::get_interface("resourcesystem.dll", "ResourceSystem013"));


if (C_BaseEntity* entity = reinterpret_cast<C_BaseEntity*>(g_pGameEntitySystem->GetBaseEntity(ent_idx)); entity->DoesExists()) {

    std::cout << g_pResourceSystem->FindResourceById(created_particle.particle_name_index(), (uintptr_t)"vpcf") << std::endl;
    std::cout << "particle created. index: " << particle->index() << " | entity: " << entity->Schema_DynamicBinding()->binary_name << std::endl;
}
у меня все работает
ты наверно неправильно вызываешь. функция не конст чар принимает она принимает std::uint64_t(другими словами, восемь символов)
C++:
const auto* rsrc = CResourceSystem::GetInstance().GetResourceByHash<"vpcf">(MurmurHash64{ 0xE1863545BB64B997 });
if (rsrc)
{
    if (!rsrc->GetName().empty())
        Logger::LogInfo("CResourceSystem rsrc: %s -> 0x%p\n", rsrc->GetName().data(), rsrc);
}
CResourceSystem rsrc: particles/generic_gameplay/damage_flash.vpcf -> 0x00000246F4983940
C++:
export
template<std::size_t Size>
class ResourceType_t
{
public:
    std::array<char, 8> value{};

    constexpr ResourceType_t() = default;
    constexpr ResourceType_t(const char(&Str)[Size])
    {
        static_assert((Size - 1/*null terminator*/) <= 8,
            "ResourceType_t requires a string not more than 8 characters in size!");
        std::ranges::copy(Str, value.begin());
    }
public:
    constexpr const auto& Get() const noexcept { return *reinterpret_cast<const std::uint64_t*>(value.data()); }
};
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
у меня все работает
ты наверно неправильно вызываешь. функция не конст чар принимает она принимает std::uint64_t(другими словами, восемь символов)
C++:
const auto* rsrc = CResourceSystem::GetInstance().GetResourceByHash<"vpcf">(MurmurHash64{ 0xE1863545BB64B997 });
if (rsrc)
{
    if (!rsrc->GetName().empty())
        Logger::LogInfo("CResourceSystem rsrc: %s -> 0x%p\n", rsrc->GetName().data(), rsrc);
}
CResourceSystem rsrc: particles/generic_gameplay/damage_flash.vpcf -> 0x00000246F4983940
C++:
export
template<std::size_t Size>
class ResourceType_t
{
public:
    std::array<char, 8> value{};

    constexpr ResourceType_t() = default;
    constexpr ResourceType_t(const char(&Str)[Size])
    {
        static_assert((Size - 1/*null terminator*/) <= 8,
            "ResourceType_t requires a string not more than 8 characters in size!");
        std::ranges::copy(Str, value.begin());
    }
public:
    constexpr const auto& Get() const noexcept { return *reinterpret_cast<const std::uint64_t*>(value.data()); }
};
окей, у меня получилось, но телепорты, и некоторые другие партикли(например мультишот дровки который и так видно сквозь туман войны) не приходят а ещё я не очень пойму как мне получить позицию партикла(контрол поинт) из этого(хотя впринцепе я могу брать позицию энтити в теории)

а ещё, знаешь почему крашит при получении имени квара?

C++:
        if (util::fast_strstr(rdx->unscopedName, "CNETMsg_SetConVar")) {
            if (CNETMsg_SetConVar* vars = static_cast<CNETMsg_SetConVar*>(r8); vars->has_convars()) {
                for (auto& z1 : vars->convars().cvars()) {
                    if (z1.has_name()) std::cout << z1.name();
                    std::cout << std::endl;
                    if (z1.has_value()) std::cout << z1.value();
                    std::cout << std::endl;
                }
            }
        }
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
окей, у меня получилось, но телепорты, и некоторые другие партикли(например мультишот дровки который и так видно сквозь туман войны) не приходят а ещё я не очень пойму как мне получить позицию партикла(контрол поинт) из этого(хотя впринцепе я могу брать позицию энтити в теории)

а ещё, знаешь почему крашит при получении имени квара?

C++:
        if (util::fast_strstr(rdx->unscopedName, "CNETMsg_SetConVar")) {
            if (CNETMsg_SetConVar* vars = static_cast<CNETMsg_SetConVar*>(r8); vars->has_convars()) {
                for (auto& z1 : vars->convars().cvars()) {
                    if (z1.has_name()) std::cout << z1.name();
                    std::cout << std::endl;
                    if (z1.has_value()) std::cout << z1.value();
                    std::cout << std::endl;
                }
            }
        }
дебажь логай и узнаешь почему крашит
по поводу дровки - пологай сообщения которые приходят в момент мультишота
 
https://qweme.dev
Пользователь
Статус
Оффлайн
Регистрация
25 Май 2022
Сообщения
165
Реакции[?]
87
Поинты[?]
21K
окей, у меня получилось, но телепорты, и некоторые другие партикли(например мультишот дровки который и так видно сквозь туман войны) не приходят а ещё я не очень пойму как мне получить позицию партикла(контрол поинт) из этого(хотя впринцепе я могу брать позицию энтити в теории)

а ещё, знаешь почему крашит при получении имени квара?

C++:
        if (util::fast_strstr(rdx->unscopedName, "CNETMsg_SetConVar")) {
            if (CNETMsg_SetConVar* vars = static_cast<CNETMsg_SetConVar*>(r8); vars->has_convars()) {
                for (auto& z1 : vars->convars().cvars()) {
                    if (z1.has_name()) std::cout << z1.name();
                    std::cout << std::endl;
                    if (z1.has_value()) std::cout << z1.value();
                    std::cout << std::endl;
                }
            }
        }
очевидно что у тебя не будет тут позиции, тк это создание партикли, запиши id (оно есть и в создание и в контрл поинте) в std::map (можно и по другому конечно) и просто смотри когда юзается ивент сет контр поинт, сетай его в мапе, потом итерируй где нибудь в имгуе и рисуй

этого(хотя впринцепе я могу брать позицию энтити в теории)

не получится, ентити дормант в тумане войны и там будет ее старый absOrigin, который она имела до захода в ноу вижен

очень хуйвый код, да и старый (мб там все уже по другому)

C++:
// old and 100% gavnokod
struct ParticleObject {
    int Index = 0;
    unsigned long long NameIndex = 0;
    string Name = "";
    string SpecName = "";
    CBaseEntity* Entity = nullptr;
    CBaseEntity* EntityForModifiers = nullptr;
    Vector Position = { 0, 0, 0 };
    Vector FromPos = { 0, 0, 0 };
    Vector ToPos = { 0, 0, 0 };
    bool HasPosition = false;
};
qweme_map<int, ParticleObject> ParticleList;
...

if (ParticleType == GAME_PARTICLE_MANAGER_EVENT_CREATE) {
            ParticleObject obj;

            int index = Particle->index();
            unsigned long long name_index = 0;
            if (Particle->create_particle().has_particle_name_index())
                name_index = Particle->create_particle().particle_name_index();

            if (name_index) {
                const char* ResourceName = vmt.resourceSystem->GetResourceName(name_index);
                if (ResourceName)
                    obj.Name = string(ResourceName);
            }

            //std::cout << obj.Name << std::endl;

            uint32_t handle = Particle->create_particle().entity_handle();
            uint32_t handle_mod = Particle->create_particle().entity_handle_for_modifiers();

            CBaseEntity* entity = vmt.EntitySystem->FindEntityBySecondHandle(handle);
            CBaseEntity* entity_mod = vmt.EntitySystem->FindEntityBySecondHandle(handle_mod);

            obj.Index = index;
            obj.Entity = entity;
            obj.EntityForModifiers = entity_mod;
            obj.NameIndex = name_index;

            GameData.ParticleList.set(index, obj);

...
else if (ParticleType == GAME_PARTICLE_MANAGER_EVENT_UPDATE) {
            int index = Particle->index();
            int control_point = Particle->update_particle().control_point();

            if (control_point == 0) {
                if (GameData.ParticleList.count(index)) {
                    ParticleObject tmObj = GameData.ParticleList.get(index);

                    CMsgVector pos = Particle->update_particle().position();
                    Vector Position;

                    Position.x = pos.x();
                    Position.y = pos.y();
                    Position.z = pos.z();

    
                    tmObj.Position = Position;
                    tmObj.HasPosition = true;

                    GameData.ParticleList.set(index, tmObj);

                    if (!GameData.ParticleToDrawList.count(index))
                        GameData.ParticleToDrawList.set(index, { GameData.ParticleList.get(index), vmt.GameRules->GameTime() });
                }
    }
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
очевидно что у тебя не будет тут позиции, тк это создание партикли, запиши id (оно есть и в создание и в контрл поинте) в std::map (можно и по другому конечно) и просто смотри когда юзается ивент сет контр поинт, сетай его в мапе, потом итерируй где нибудь в имгуе и рисуй




не получится, ентити дормант в тумане войны и там будет ее старый absOrigin, который она имела до захода в ноу вижен

очень хуйвый код, да и старый (мб там все уже по другому)

C++:
// old and 100% gavnokod
struct ParticleObject {
    int Index = 0;
    unsigned long long NameIndex = 0;
    string Name = "";
    string SpecName = "";
    CBaseEntity* Entity = nullptr;
    CBaseEntity* EntityForModifiers = nullptr;
    Vector Position = { 0, 0, 0 };
    Vector FromPos = { 0, 0, 0 };
    Vector ToPos = { 0, 0, 0 };
    bool HasPosition = false;
};
qweme_map<int, ParticleObject> ParticleList;
...

if (ParticleType == GAME_PARTICLE_MANAGER_EVENT_CREATE) {
            ParticleObject obj;

            int index = Particle->index();
            unsigned long long name_index = 0;
            if (Particle->create_particle().has_particle_name_index())
                name_index = Particle->create_particle().particle_name_index();

            if (name_index) {
                const char* ResourceName = vmt.resourceSystem->GetResourceName(name_index);
                if (ResourceName)
                    obj.Name = string(ResourceName);
            }

            //std::cout << obj.Name << std::endl;

            uint32_t handle = Particle->create_particle().entity_handle();
            uint32_t handle_mod = Particle->create_particle().entity_handle_for_modifiers();

            CBaseEntity* entity = vmt.EntitySystem->FindEntityBySecondHandle(handle);
            CBaseEntity* entity_mod = vmt.EntitySystem->FindEntityBySecondHandle(handle_mod);

            obj.Index = index;
            obj.Entity = entity;
            obj.EntityForModifiers = entity_mod;
            obj.NameIndex = name_index;

            GameData.ParticleList.set(index, obj);

...
else if (ParticleType == GAME_PARTICLE_MANAGER_EVENT_UPDATE) {
            int index = Particle->index();
            int control_point = Particle->update_particle().control_point();

            if (control_point == 0) {
                if (GameData.ParticleList.count(index)) {
                    ParticleObject tmObj = GameData.ParticleList.get(index);

                    CMsgVector pos = Particle->update_particle().position();
                    Vector Position;

                    Position.x = pos.x();
                    Position.y = pos.y();
                    Position.z = pos.z();


                    tmObj.Position = Position;
                    tmObj.HasPosition = true;

                    GameData.ParticleList.set(index, tmObj);

                    if (!GameData.ParticleToDrawList.count(index))
                        GameData.ParticleToDrawList.set(index, { GameData.ParticleList.get(index), vmt.GameRules->GameTime() });
                }
    }
я почекал, да там поменялось, теперь event_update(1) не приходит, только это приходит(не важно в тумане войны или нет)
0 - GAME_PARTICLE_MANAGER_EVENT_CREATE
5- GAME_PARTICLE_MANAGER_EVENT_UPDATE_ENT
7 - GAME_PARTICLE_MANAGER_EVENT_DESTROY
1663338553821.png
каст ульта сфа
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
что я делаю не так? (крашит после вызова SendNetMessage)
1664676851492.png
C++:
const auto net_message = CNetworkMessages::GetInterface( )->FindNetworkMessage( "CDOTAClientMsg_CameraZoomAmount" );
CDOTAClientMsg_CameraZoomAmount message;
message.set_zoom_amount( static_cast<float>(global::camera_distance) );

hook::original::fpSendNetMessage( cheat_data.current_net_chan, net_message, &message, BUF_DEFAULT );
(net_message:1664676793953.png, current_net_chan:
1664676819755.png- всё валидное, в реклассе проверил)
я думаю, что надо что-то ещё там заполнить, но не знаю что.

и почему в CDOTAUserMsg_ChatMessage и CDOTAClientMsg_ChatMessage приходят какие-то зашифрованные строки, и как их расшифровать?
 
https://qweme.dev
Пользователь
Статус
Оффлайн
Регистрация
25 Май 2022
Сообщения
165
Реакции[?]
87
Поинты[?]
21K
что я делаю не так? (крашит после вызова SendNetMessage)
Посмотреть вложение 223005
C++:
const auto net_message = CNetworkMessages::GetInterface( )->FindNetworkMessage( "CDOTAClientMsg_CameraZoomAmount" );
CDOTAClientMsg_CameraZoomAmount message;
message.set_zoom_amount( static_cast<float>(global::camera_distance) );

hook::original::fpSendNetMessage( cheat_data.current_net_chan, net_message, &message, BUF_DEFAULT );
(net_message:Посмотреть вложение 223003, current_net_chan:
Посмотреть вложение 223004- всё валидное, в реклассе проверил)
я думаю, что надо что-то ещё там заполнить, но не знаю что.

и почему в CDOTAUserMsg_ChatMessage и CDOTAClientMsg_ChatMessage приходят какие-то зашифрованные строки, и как их расшифровать?
у меня только один вопрос, нахуя тебя на сервер отправлять инфу о камере, ты думаешь она у тебя поменяется? мне кажется наоборот, габен за такую хуйню сразу бан вьебет
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
у меня только один вопрос, нахуя тебя на сервер отправлять инфу о камере, ты думаешь она у тебя поменяется? мне кажется наоборот, габен за такую хуйню сразу бан вьебет
накосячил немного, не global::camera_distance хотел отправлять а 1200.f, разницы всё равно нет(для теста).
 
Сверху Снизу