C++ Софт Перенос с Combo на Button

Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
1,001
Реакции[?]
86
Поинты[?]
23K
Добрый день дорогие друзья! Недавно решил, что мне надоело стандартное ImGui::Combo и решил я сделать выбор оружия на кнопку, но вот дела, оружие оно определяет, но аим не работает. Подскажите пожалуйста, как правильно реализовать?
Код старого комбо:
C++:
if (ImGui::BeginCombo(La ? "Weapon" : u8"Оружие", Utils::LocalizeText(weaponids.m_list[Weapon::current_weapon]->GetItemBaseName()).c_str()))
                    {
                        for (const auto& weapon : weaponids.m_list) {

                        const auto type = std::string(weapon.second->GetItemTypeName());

                    if (type == std::string("#CSGO_Type_Equipment") || type == std::string("#Type_Hands") || type == std::string("#CSGO_Type_Knife") || type == std::string("#CSGO_Type_Grenade") || type == std::string("#CSGO_Type_Collectible"))
                                continue;

                            const auto is_selected = Weapon::current_weapon == weapon.first;
                            if (ImGui::Selectable(Utils::LocalizeText(weapon.second->GetItemBaseName()).c_str(), is_selected)) {
                                Weapon::current_weapon = weapon.first;

                                ImGui::CloseCurrentPopup();
                            }
                            if (is_selected)
                                ImGui::SetItemDefaultFocus();
                        }


                    ImGui::EndCombo();
                    ImGui::EndGroup();
        }
код баттона:
Код:
ImGui::BeginChild("##Aim7", ImVec2(105, 600)); {
            
            if (ImGui::Button(u8"Desert Eagle", ImVec2(85, 25))) {
                k_weapon_names[{1}];
            }
            if (ImGui::Button(u8"Dual Berettas", ImVec2(85, 25))) {

            }
            if (ImGui::Button(u8"Five-SeveN", ImVec2(85, 25))) {

            }
            if (ImGui::Button(u8"Glock-18", ImVec2(85, 25))) {

            }
            if (ImGui::Button(u8"AK-47", ImVec2(85, 25))) {

            }
    }
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
Добрый день дорогие друзья! Недавно решил, что мне надоело стандартное ImGui::Combo и решил я сделать выбор оружия на кнопку, но вот дела, оружие оно определяет, но аим не работает. Подскажите пожалуйста, как правильно реализовать?
Код старого комбо:
C++:
if (ImGui::BeginCombo(La ? "Weapon" : u8"Оружие", Utils::LocalizeText(weaponids.m_list[Weapon::current_weapon]->GetItemBaseName()).c_str()))
                    {
                        for (const auto& weapon : weaponids.m_list) {

                        const auto type = std::string(weapon.second->GetItemTypeName());

                    if (type == std::string("#CSGO_Type_Equipment") || type == std::string("#Type_Hands") || type == std::string("#CSGO_Type_Knife") || type == std::string("#CSGO_Type_Grenade") || type == std::string("#CSGO_Type_Collectible"))
                                continue;

                            const auto is_selected = Weapon::current_weapon == weapon.first;
                            if (ImGui::Selectable(Utils::LocalizeText(weapon.second->GetItemBaseName()).c_str(), is_selected)) {
                                Weapon::current_weapon = weapon.first;

                                ImGui::CloseCurrentPopup();
                            }
                            if (is_selected)
                                ImGui::SetItemDefaultFocus();
                        }


                    ImGui::EndCombo();
                    ImGui::EndGroup();
        }
код баттона:
Код:
ImGui::BeginChild("##Aim7", ImVec2(105, 600)); {
           
            if (ImGui::Button(u8"Desert Eagle", ImVec2(85, 25))) {
                k_weapon_names[{1}];
            }
            if (ImGui::Button(u8"Dual Berettas", ImVec2(85, 25))) {

            }
            if (ImGui::Button(u8"Five-SeveN", ImVec2(85, 25))) {

            }
            if (ImGui::Button(u8"Glock-18", ImVec2(85, 25))) {

            }
            if (ImGui::Button(u8"AK-47", ImVec2(85, 25))) {

            }
    }
Код:
for (auto weapon :  weaponids.m_list) {
if (ImGui::Button(Utils::LocalizeText(weapon.second->GetItemBaseName()).c_str())) {
                                Weapon::current_weapon = weapon.first;
                            }
                            }
 
кто читает тот умрет
Участник
Статус
Оффлайн
Регистрация
29 Июл 2019
Сообщения
696
Реакции[?]
540
Поинты[?]
153K
А с чего ему работать? Ты считай тупо кнопки нарисовал, но никак не привязал их к чему либо
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
1,001
Реакции[?]
86
Поинты[?]
23K
Код:
for (auto weapon :  weaponids.m_list) {
if (ImGui::Button(Utils::LocalizeText(weapon.second->GetItemBaseName()).c_str())) {
                                Weapon::current_weapon = weapon.first;
                            }
                            }
/del
но смотри, а как оно будет определять что именно например дигл?
оно отображает сразу все, я делал уже так, как сделать что бы отображало ток оружки ? 2022-12-12_17-45-03.png
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
1,001
Реакции[?]
86
Поинты[?]
23K
покажи как ты в этот список заносишь названия
C++:
static std::vector<weapon_name> k_weapon_names =
{
    { 1, "Desert Eagle" },
{ 2, "Dual Berettas" },
{ 3, "Five-SeveN" },
{ 4, "Glock-18" },
{ 7, "AK-47" },
{ 8, "AUG" },
{ 9, "AWP" },
{ 63, "CZ75 Auto" },
{ 10, "FAMAS" },
{ 11, "G3SG1" },
{ 13, "Galil AR" },
{ 14, "M249" },
{ 60, "M4A1-S" },
{ 16, "M4A4" },
{ 17, "MAC-10" },
{ 27, "MAG-7" },
{ 23, "MP5-SD" },
{ 33, "MP7" },
{ 34, "MP9" },
{ 28, "Negev" },
{ 35, "Nova" },
{ 32, "P2000" },
{ 36, "P250" },
{ 19, "P90" },
{ 26, "PP-Bizon" },
{ 64, "R8 Revolver" },
{ 29, "Sawed-Off" },
{ 38, "SCAR-20" },
{ 40, "SSG 08" },
{ 39, "SG 553" },
{ 30, "Tec-9" },
{ 24, "UMP-45" },
{ 61, "USP-S" },
{ 25, "XM1014" },
};
/////// это если ты про ней оружий
и вот еще че нашел
C++:
bool C_BaseEntity::IsPlayer()
{
    //index: 152
    //ref: "effects/nightvision"
    //sig: 8B 92 ? ? ? ? FF D2 84 C0 0F 45 F7 85 F6
    return CallVFunction<bool(__thiscall*)(C_BaseEntity*)>(this, 158 + VALVE_ADDED_FUNCS)(this);
}

bool C_BaseEntity::IsLoot() {
    return (GetClientClass()->m_ClassID == CPhysPropAmmoBox ||
        GetClientClass()->m_ClassID == CPhysPropLootCrate ||
        GetClientClass()->m_ClassID == CPhysPropRadarJammer ||
        GetClientClass()->m_ClassID == CPhysPropWeaponUpgrade ||
        GetClientClass()->m_ClassID == CDrone ||
        GetClientClass()->m_ClassID == CDronegun ||
        GetClientClass()->m_ClassID == CItem_Healthshot ||
        GetClientClass()->m_ClassID == CItemCash);
}

bool C_BaseEntity::IsWeapon()
{
    return CallVFunction<bool(__thiscall*)(C_BaseEntity*)>(this, 166 + VALVE_ADDED_FUNCS)(this); //166
}

bool C_BaseEntity::IsPlantedC4()
{
    return GetClientClass()->m_ClassID == CPlantedC4;
}

bool C_BaseEntity::IsDefuseKit()
{
    return GetClientClass()->m_ClassID == CBaseAnimating;
}

    

CCSWeaponInfo* C_BaseCombatWeapon::GetCSWeaponData() {
    /*static auto fnGetWpnData
        = reinterpret_cast<CCSWeaponInfo * (__thiscall*)(void*)>(
            Utils::PatternScan(GetModuleHandleW(L"client.dll"), "55 8B EC 81 EC ? ? ? ? 53 8B D9 56 57 8D 8B ? ? ? ? 85 C9 75 04 33 FF EB 2F")
            );
    return fnGetWpnData(this);*/

    return CallVFunction<CCSWeaponInfo*(__thiscall*)(void*)>(this, 461)(this);
}

bool C_BaseCombatWeapon::HasBullets()
{
    return !IsReloading() && m_iClip1() > 0;
}

const char* C_BaseCombatWeapon::GunWeaponCustom()
{
    if (!this)
        return false;

    switch (m_iItemDefinitionIndex())
    {
    case WEAPON_DEAGLE:
        return "Desert Eagle";
        break;
    case WEAPON_ELITE:
        return "Dual Berettas";
        break;
    case WEAPON_FIVESEVEN:
        return "Five-SeveN";
        break;
    case WEAPON_GLOCK:
        return "Glock-18";
        break;
    case WEAPON_AK47:
        return "AK-47";
        break;
    case WEAPON_AUG:
        return "AUG";
        break;
    case WEAPON_AWP:
        return "AWP";
        break;
    case WEAPON_FAMAS:
        return "FAMAS";
        break;
    case WEAPON_G3SG1:
        return "G3SG1";
        break;
    case WEAPON_GALILAR:
        return "Galil AR";
        break;
    case WEAPON_M249:
        return "M249";
        break;
    case WEAPON_M4A1:
        return "M4A4";
        break;
    case WEAPON_MAC10:
        return "MAC-10";
        break;
    case WEAPON_P90:
        return "P90";
        break;
    case WEAPON_MP5:
        return "MP5-SD";
        break;
    case WEAPON_UMP45:
        return "UMP-45";
        break;
    case WEAPON_XM1014:
        return "XM1014";
        break;
    case WEAPON_BIZON:
        return "PP-Bizon";
        break;
    case WEAPON_MAG7:
        return "MAG-7";
        break;
    case WEAPON_NEGEV:
        return "Negev";
        break;
    case WEAPON_SAWEDOFF:
        return "Sawed-Off";
        break;
    case WEAPON_TEC9:
        return "Tec-9";
        break;
    case WEAPON_TASER:
        return "ZEUS";
        break;
    case WEAPON_HKP2000:
        return "P2000";
        break;
    case WEAPON_MP7:
        return "MP7";
        break;
    case WEAPON_MP9:
        return "MP9";
        break;
    case WEAPON_NOVA:
        return "Nova";
        break;
    case WEAPON_P250:
        return "P250";
        break;
    case WEAPON_SCAR20:
        return "SCAR-20";
        break;
    case WEAPON_SG556:
        return "SG 553";
        break;
    case WEAPON_SSG08:
        return "SSG 08";
        break;
    case WEAPON_KNIFE:
        return "Knife";
        break;
    case WEAPON_FLASHBANG:
        return "Flashbang";
        break;
    case WEAPON_HEGRENADE:
        return "Hegrenade";
        break;
    case WEAPON_SMOKEGRENADE:
        return "Smoke";
        break;
    case WEAPON_MOLOTOV:
        return "Molotov";
        break;
    case WEAPON_DECOY:
        return "Decoy";
        break;
    case WEAPON_INCGRENADE:
        return "Inc Grenade";
        break;
    case WEAPON_C4:
        return "C4";
        break;
    case WEAPON_KNIFE_T:
        return "Knife";
        break;
    case WEAPON_M4A1_SILENCER:
        return "M4A1-S";
        break;
    case WEAPON_USP_SILENCER:
        return "USP-S";
        break;
    case WEAPON_CZ75A:
        return "CZ75-Auto";
        break;
    case WEAPON_REVOLVER:
        return "Revolver R8";
        break;
    case WEAPON_BAYONET:
        return "Bayonet";
        break;
    case WEAPON_KNIFE_FLIP:
        return "Flip";
        break;
    case WEAPON_KNIFE_GUT:
        return "Gut";
        break;
    case WEAPON_KNIFE_KARAMBIT:
        return "Karambit";
        break;
    case WEAPON_KNIFE_M9_BAYONET:
        return "M9 Bayonet";
        break;
    case WEAPON_KNIFE_TACTICAL:
        return "Tactical";
        break;
    case WEAPON_KNIFE_FALCHION:
        return "Falchion";
        break;
    case WEAPON_KNIFE_SURVIVAL_BOWIE:
        return "Bowie";
        break;
    case WEAPON_KNIFE_BUTTERFLY:
        return "Butterfly";
        break;
    case WEAPON_KNIFE_PUSH:
        return "Daggers";
        break;
    case WEAPON_KNIFE_URSUS:
        return "Ursus";
        break;
    case WEAPON_KNIFE_GYPSY_JACKKNIFE:
        return "Jack Knife";
        break;
    case WEAPON_KNIFE_STILETTO:
        return "Stiletto";
        break;
    case WEAPON_KNIFE_WIDOWMAKER:
        return "Widowmaker";
        break;
    }

    return "";
}

const char* C_BaseCombatWeapon::GunIconCustom()
{
    if (!this)
        return false;

    switch (m_iItemDefinitionIndex())
    {
    case WEAPON_DEAGLE:
        return "a";
        break;
    case WEAPON_ELITE:
        return "b";
        break;
    case WEAPON_FIVESEVEN:
        return "c";
        break;
    case WEAPON_GLOCK:
        return "d";
        break;
    case WEAPON_AK47:
        return "e";
        break;
    case WEAPON_AUG:
        return "f";
        break;
    case WEAPON_AWP:
        return "g";
        break;
    case WEAPON_FAMAS:
        return "h";
        break;
    case WEAPON_G3SG1:
        return "j";
        break;
    case WEAPON_GALILAR:
        return "k";
        break;
    case WEAPON_M249:
        return "i";
        break;
    case WEAPON_M4A1:
        return "l";
        break;
    case WEAPON_MAC10:
        return "n";
        break;
    case WEAPON_P90:
        return "C";
        break;
    case WEAPON_MP5:
        return "p";
        break;
    case WEAPON_UMP45:
        return "q";
        break;
    case WEAPON_XM1014:
        return "r";
        break;
    case WEAPON_BIZON:
        return "s";
        break;
    case WEAPON_MAG7:
        return "t";
        break;
    case WEAPON_NEGEV:
        return "u";
        break;
    case WEAPON_SAWEDOFF:
        return "v";
        break;
    case WEAPON_TEC9:
        return "w";
        break;
    case WEAPON_TASER:
        return "x";
        break;
    case WEAPON_HKP2000:
        return "o";
        break;
    case WEAPON_MP7:
        return "z";
        break;
    case WEAPON_MP9:
        return "A";
        break;
    case WEAPON_NOVA:
        return "B";
        break;
    case WEAPON_P250:
        return "y";
        break;
    case WEAPON_SCAR20:
        return "D";
        break;
    case WEAPON_SG556:
        return "E";
        break;
    case WEAPON_SSG08:
        return "F";
        break;
    case WEAPON_KNIFE:
        return "G";
        break;
    case WEAPON_FLASHBANG:
        return "L";
        break;
    case WEAPON_HEGRENADE:
        return "I";
        break;
    case WEAPON_SMOKEGRENADE:
        return "J";
        break;
    case WEAPON_MOLOTOV:
        return "K";
        break;
    case WEAPON_DECOY:
        return "H";
        break;
    case WEAPON_INCGRENADE:
        return "M";
        break;
    case WEAPON_C4:
        return "N";
        break;
    case WEAPON_KNIFE_T:
        return "O";
        break;
    case WEAPON_M4A1_SILENCER:
        return "m";
        break;
    case WEAPON_USP_SILENCER:
        return "P";
        break;
    case WEAPON_CZ75A:
        return "Q";
        break;
    case WEAPON_REVOLVER:
        return "R";
        break;
    case WEAPON_BAYONET:
        return "V";
        break;
    case WEAPON_KNIFE_FLIP:
        return "W";
        break;
    case WEAPON_KNIFE_GUT:
        return "X";
        break;
    case WEAPON_KNIFE_KARAMBIT:
        return "Y";
        break;
    case WEAPON_KNIFE_M9_BAYONET:
        return "Z";
        break;
    case WEAPON_KNIFE_TACTICAL:
        return "0";
        break;
    case WEAPON_KNIFE_FALCHION:
        return "1";
        break;
    case WEAPON_KNIFE_SURVIVAL_BOWIE:
        return "2";
        break;
    case WEAPON_KNIFE_BUTTERFLY:
        return "3";
        break;
    case WEAPON_KNIFE_PUSH:
        return "4";
        break;
    case WEAPON_KNIFE_URSUS:
        return "5";
        break;
    case WEAPON_KNIFE_GYPSY_JACKKNIFE:
        return "6";
        break;
    case WEAPON_KNIFE_STILETTO:
        return "7";
        break;
    case WEAPON_KNIFE_WIDOWMAKER:
        return "8";
        break;
    }

    return "";
}

bool C_BaseCombatWeapon::CanFire()
{
    static decltype(this) stored_weapon = nullptr;
    static auto stored_tick = 0;
    if (stored_weapon != this || stored_tick >= g_LocalPlayer->m_nTickBase()) {
        stored_weapon = this;
        stored_tick = g_LocalPlayer->m_nTickBase();
        return false; //cannot shoot first tick after switch
    }

    if (IsReloading() || m_iClip1() <= 0 || !g_LocalPlayer)
        return false;

    auto flServerTime = g_LocalPlayer->m_nTickBase() * g_GlobalVars->interval_per_tick;

    return m_flNextPrimaryAttack() <= flServerTime;
}

/*bool C_BaseCombatWeapon::CanFire()
{
    auto owner = this->m_hOwnerEntity().Get();
    if (!owner)
        return false;

    if (IsReloading() || m_iClip1() <= 0)
        return false;

    auto flServerTime = owner->m_nTickBase() * g_GlobalVars->interval_per_tick;

    if (owner->m_flNextAttack() > flServerTime)
        return false;


    return m_flNextPrimaryAttack() <= flServerTime;
}*/


bool C_BaseCombatWeapon::IsGrenade()
{
    return GetCSWeaponData()->iWeaponType == WEAPONTYPE_GRENADE;
}

bool C_BaseCombatWeapon::IsGun()
{
    switch (GetCSWeaponData()->iWeaponType)
    {
    case WEAPONTYPE_C4:
        return false;
    case WEAPONTYPE_GRENADE:
        return false;
    case WEAPONTYPE_KNIFE:
        return false;
    case WEAPONTYPE_UNKNOWN:
        return false;
    default:
        return true;
    }
}

bool C_BaseCombatWeapon::IsKnife()
{
    if (this->m_iItemDefinitionIndex() == WEAPON_TASER)
        return false;
    return GetCSWeaponData()->iWeaponType == WEAPONTYPE_KNIFE;
}

bool C_BaseCombatWeapon::IsRifle()
{
    switch (GetCSWeaponData()->iWeaponType)
    {
    case WEAPONTYPE_RIFLE:
        return true;
    case WEAPONTYPE_SUBMACHINEGUN:
        return true;
    case WEAPONTYPE_SHOTGUN:
        return true;
    case WEAPONTYPE_MACHINEGUN:
        return true;
    default:
        return false;
    }
}

bool C_Bas
 
Сверху Снизу