Fixes & various improvements

This commit is contained in:
Grinch_ 2022-11-28 01:58:17 +06:00
parent bc508e081a
commit fb42ebaaea
8 changed files with 123 additions and 68 deletions

View File

@ -377,7 +377,7 @@ PlayerFlags = "Player flags,"
PlayerRegen = "Player regeneration" PlayerRegen = "Player regeneration"
PlayerRegenTip = "Player heals if not taken damage for 5 seconds" PlayerRegenTip = "Player heals if not taken damage for 5 seconds"
RemoveAll = "Remove all" RemoveAll = "Remove all"
RemoveClothesTab = "Remove clothes" RemoveClothesTab = "Remove"
RespawnDieLoc = "Respawn die location" RespawnDieLoc = "Respawn die location"
RespawnDieLocTip = "Respawn to the location you died from" RespawnDieLocTip = "Respawn to the location you died from"
Respect = "Respect" Respect = "Respect"
@ -579,7 +579,9 @@ ReadMore = "Read more"
RearLights = "Rear lights" RearLights = "Rear lights"
RearWheelDrive = "Rear wheel drive" RearWheelDrive = "Rear wheel drive"
RemoveNeon = "Remove neon" RemoveNeon = "Remove neon"
RemoveNeonMSG = "Neon removed successfully" RemoveNeonMSG = "Neon removed"
RemoveTune = "Remove tunes"
RemoveTuneMSG = "Tunes removed"
RemoveVeh = "Remove vehicles" RemoveVeh = "Remove vehicles"
RemoveVehRadius = "Remove vehicles in radius" RemoveVehRadius = "Remove vehicles in radius"
ResetColor = "Reset color" ResetColor = "Reset color"
@ -599,8 +601,9 @@ SetSpeed = "Set speed"
Siren = "Siren" Siren = "Siren"
SkidMarks = "Always skid marks" SkidMarks = "Always skid marks"
Small = "Small" Small = "Small"
SpawnInAir = "Spawn aircraft in air" SpawnInAir = "Aircraft in air"
SpawnInside = "Spawn as driver" SpawnInside = "As driver"
SpawnWithTunes = "Add tunes"
StayOnBike = "Don't fall off bike" StayOnBike = "Don't fall off bike"
SteeringLock = "Steering lock" SteeringLock = "Steering lock"
SuspensionBias = "Suspension bias" SuspensionBias = "Suspension bias"

View File

@ -516,6 +516,19 @@ void VehCustmzrMgr::Draw()
} }
if (ImGui::BeginTabItem(TEXT("Vehicle.TuneTab"))) if (ImGui::BeginTabItem(TEXT("Vehicle.TuneTab")))
{ {
ImGui::Spacing();
if (ImGui::Button(TEXT("Vehicle.RemoveTune"), ImVec2(Widget::CalcSize())))
{
for (int i = 0; i != 15; ++i)
{
int compID = pVeh->GetUpgrade(i);
if (compID > -1)
{
pVeh->RemoveVehicleUpgrade(compID);
}
}
Util::SetMessage(TEXT("Vehicle.RemoveTuneMSG"));
}
ImGui::Spacing(); ImGui::Spacing();
Widget::ImageList(m_TuneData, Widget::ImageList(m_TuneData,
[this](std::string& str) [this](std::string& str)

View File

@ -228,6 +228,46 @@ void PlayerPage::SetCloth(std::string& name)
} }
CClothes::RebuildPlayer(player, false); CClothes::RebuildPlayer(player, false);
} }
void PlayerPage::RemoveClothesTab()
{
if (ImGui::BeginTabItem(TEXT("Player.RemoveClothesTab")))
{
ImGui::TextWrapped(TEXT("Player.ClothesTip"));
ImGui::Spacing();
ImGui::BeginChild("ClothesRemove");
if (ImGui::Button(TEXT("Player.RemoveAll"), ImVec2(Widget::CalcSize(2))))
{
CPlayerPed* player = FindPlayerPed();
for (uint i = 0; i < 18; i++)
{
player->m_pPlayerData->m_pPedClothesDesc->SetTextureAndModel(0u, 0u, i);
}
CClothes::RebuildPlayer(player, false);
}
ImGui::SameLine();
size_t count = 0;
for (auto [k, v] : m_ClothData.m_pData->Items())
{
if (ImGui::Button(std::string(k.str()).c_str(), ImVec2(Widget::CalcSize(2))))
{
CPlayerPed* player = FindPlayerPed();
player->m_pPlayerData->m_pPedClothesDesc->SetTextureAndModel(0u, 0u, std::stoi(v.value_or<std::string>("0")));
CClothes::RebuildPlayer(player, false);
}
if (count % 2 != 0)
{
ImGui::SameLine();
}
++count;
}
ImGui::EndChild();
ImGui::EndTabItem();
}
}
#endif #endif
#ifdef GTASA #ifdef GTASA
@ -774,7 +814,7 @@ void PlayerPage::Draw()
getline(ss, temp, '$'); getline(ss, temp, '$');
return temp; return temp;
}); }, nullptr, nullptr, nullptr, fArgNoneWrapper(playerPage.RemoveClothesTab));
} }
else else
{ {
@ -789,43 +829,6 @@ void PlayerPage::Draw()
} }
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (pPlayer->m_nModelIndex == 0
&& ImGui::BeginTabItem(TEXT("Player.RemoveClothesTab")))
{
ImGui::TextWrapped(TEXT("Player.ClothesTip"));
ImGui::Spacing();
ImGui::BeginChild("ClothesRemove");
if (ImGui::Button(TEXT("Player.RemoveAll"), ImVec2(Widget::CalcSize(2))))
{
CPlayerPed* player = FindPlayerPed();
for (uint i = 0; i < 18; i++)
{
player->m_pPlayerData->m_pPedClothesDesc->SetTextureAndModel(0u, 0u, i);
}
CClothes::RebuildPlayer(player, false);
}
ImGui::SameLine();
size_t count = 0;
for (auto [k, v] : m_ClothData.m_pData->Items())
{
if (ImGui::Button(std::string(k.str()).c_str(), ImVec2(Widget::CalcSize(2))))
{
CPlayerPed* player = FindPlayerPed();
player->m_pPlayerData->m_pPedClothesDesc->SetTextureAndModel(0u, 0u, std::stoi(v.value_or<std::string>("0")));
CClothes::RebuildPlayer(player, false);
}
if (count % 2 != 0)
{
ImGui::SameLine();
}
++count;
}
ImGui::EndChild();
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem(TEXT("Player.PedSkinsTab"))) if (ImGui::BeginTabItem(TEXT("Player.PedSkinsTab")))
{ {
Widget::ImageList(pedPage.m_PedData, fArgWrapper(playerPage.SetModel), Widget::ImageList(pedPage.m_PedData, fArgWrapper(playerPage.SetModel),

View File

@ -26,6 +26,7 @@ private:
ResourceStore m_ClothData { "clothes", eResourceType::TYPE_TEXT_IMAGE, ImVec2(70, 100)}; ResourceStore m_ClothData { "clothes", eResourceType::TYPE_TEXT_IMAGE, ImVec2(70, 100)};
void SetCloth(str& id); void SetCloth(str& id);
void RemoveClothesTab();
void SetModel(str& id); void SetModel(str& id);
#else #else
ResourceStore skinData { BY_GAME(NULL, "skins", "peds"), eResourceType::TYPE_TEXT }; ResourceStore skinData { BY_GAME(NULL, "skins", "peds"), eResourceType::TYPE_TEXT };

View File

@ -19,6 +19,7 @@ VehiclePage::VehiclePage()
{ {
m_Spawner.m_bInAir = gConfig.Get("Features.SpawnAircraftInAir", true); m_Spawner.m_bInAir = gConfig.Get("Features.SpawnAircraftInAir", true);
m_Spawner.m_bAsDriver = gConfig.Get("Features.SpawnInsideVehicle", true); m_Spawner.m_bAsDriver = gConfig.Get("Features.SpawnInsideVehicle", true);
m_Spawner.m_bWithTunes = gConfig.Get("Features.SpawnWithTunes", true);
}; };
Events::processScriptsEvent += [this] Events::processScriptsEvent += [this]
@ -368,7 +369,7 @@ void VehiclePage::SpawnVehicle(std::string& smodel)
} }
// Add random tunes // Add random tunes
if (pVeh->m_nVehicleSubClass <= VEHICLE_QUAD) if (m_Spawner.m_bWithTunes && pVeh->m_nVehicleSubClass <= VEHICLE_QUAD)
{ {
for (int i = 0; i < 20; ++i) for (int i = 0; i < 20; ++i)
{ {
@ -999,19 +1000,6 @@ void VehiclePage::Draw()
} }
if (ImGui::BeginTabItem(TEXT("Window.SpawnTab"))) if (ImGui::BeginTabItem(TEXT("Window.SpawnTab")))
{ {
ImGui::Spacing();
ImGui::Columns(2, 0, false);
if (Widget::Checkbox(TEXT("Vehicle.SpawnInside"), &m_Spawner.m_bAsDriver))
{
gConfig.Set("Features.SpawnInsideVehicle", m_Spawner.m_bAsDriver);
}
ImGui::NextColumn();
if( Widget::Checkbox(TEXT("Vehicle.SpawnInAir"), &m_Spawner.m_bInAir))
{
gConfig.Set("Features.SpawnAircraftInAir", m_Spawner.m_bInAir);
}
ImGui::Columns(1);
ImGui::Spacing(); ImGui::Spacing();
int width = ImGui::GetWindowContentRegionWidth() - ImGui::GetStyle().ItemSpacing.x; int width = ImGui::GetWindowContentRegionWidth() - ImGui::GetStyle().ItemSpacing.x;
@ -1054,9 +1042,36 @@ void VehiclePage::Draw()
Widget::ImageList(m_Spawner.m_VehData, fArgWrapper(vehiclePage.SpawnVehicle), Widget::ImageList(m_Spawner.m_VehData, fArgWrapper(vehiclePage.SpawnVehicle),
[](std::string& str){ [](std::string& str){
return Util::GetCarName(std::stoi(str)); return Util::GetCarName(std::stoi(str));
}, nullptr, fArgNoneWrapper(vehiclePage.AddNew)); }, nullptr, fArgNoneWrapper(vehiclePage.AddNew),
[]()
{
if (ImGui::MenuItem(TEXT("Vehicle.SpawnWithTunes"), NULL, &vehiclePage.m_Spawner.m_bWithTunes))
{
gConfig.Set("Features.SpawnWithTunes", vehiclePage.m_Spawner.m_bWithTunes);
}
if (ImGui::MenuItem(TEXT("Vehicle.SpawnInAir"), NULL, &vehiclePage.m_Spawner.m_bInAir))
{
gConfig.Set("Features.SpawnAircraftInAir", vehiclePage.m_Spawner.m_bInAir);
}
if (ImGui::MenuItem(TEXT("Vehicle.SpawnInside"), NULL, &vehiclePage.m_Spawner.m_bAsDriver))
{
gConfig.Set("Features.SpawnInsideVehicle", vehiclePage.m_Spawner.m_bAsDriver);
}
});
#else #else
Widget::DataList(m_Spawner.m_VehData, fArg3Wrapper(vehiclePage.SpawnVehicle), fArgNoneWrapper(vehiclePage.AddNew)); Widget::DataList(m_Spawner.m_VehData, fArg3Wrapper(vehiclePage.SpawnVehicle), fArgNoneWrapper(vehiclePage.AddNew),
false,
[]()
{
if (ImGui::MenuItem(TEXT("Vehicle.SpawnInAir"), NULL, &vehiclePage.m_Spawner.m_bInAir))
{
gConfig.Set("Features.SpawnAircraftInAir", vehiclePage.m_Spawner.m_bInAir);
}
if (ImGui::MenuItem(TEXT("Vehicle.SpawnInside"), NULL, &vehiclePage.m_Spawner.m_bAsDriver))
{
gConfig.Set("Features.SpawnInsideVehicle", vehiclePage.m_Spawner.m_bAsDriver);
}
});
#endif #endif
ImGui::EndTabItem(); ImGui::EndTabItem();
} }

View File

@ -28,6 +28,7 @@ private:
eResourceType::TYPE_TEXT), ImVec2(100, 75)}; eResourceType::TYPE_TEXT), ImVec2(100, 75)};
bool m_bAsDriver = true; bool m_bAsDriver = true;
bool m_bInAir = true; bool m_bInAir = true;
bool m_bWithTunes = true;
char m_nLicenseText[9]; char m_nLicenseText[9];
} m_Spawner; } m_Spawner;

View File

@ -75,7 +75,7 @@ bool Widget::Filter(const char* label, ImGuiTextFilter& filter, const char* hint
return state; return state;
} }
void DrawClippedList(ResourceStore& data, fArg3_t clickFunc, bool favourites, bool isEditItem) void DrawClippedList(ResourceStore& data, fArg3_t clickFunc, bool favourites, bool isEditItem, fArgNone_t contextOptionsFunc)
{ {
// Category box // Category box
ImGui::PushItemWidth(favourites ? ImGui::GetWindowContentRegionWidth() : ImGui::PushItemWidth(favourites ? ImGui::GetWindowContentRegionWidth() :
@ -166,6 +166,11 @@ void DrawClippedList(ResourceStore& data, fArg3_t clickFunc, bool favourites, bo
data.UpdateSearchList(true); data.UpdateSearchList(true);
} }
if (contextOptionsFunc)
{
contextOptionsFunc();
}
if (ImGui::MenuItem(TEXT("Menu.Close"))) if (ImGui::MenuItem(TEXT("Menu.Close")))
{ {
contextMenu.show = false; contextMenu.show = false;
@ -176,7 +181,7 @@ void DrawClippedList(ResourceStore& data, fArg3_t clickFunc, bool favourites, bo
ImGui::EndChild(); ImGui::EndChild();
} }
void Widget::DataList(ResourceStore& data, fArg3_t clickFunc, fArgNone_t addFunc, bool isEditItem) void Widget::DataList(ResourceStore& data, fArg3_t clickFunc, fArgNone_t addFunc, bool isEditItem, fArgNone_t contextOptionsFunc, fArgNone_t tabsFunc)
{ {
if (ImGui::IsMouseClicked(1)) if (ImGui::IsMouseClicked(1))
{ {
@ -189,7 +194,7 @@ void Widget::DataList(ResourceStore& data, fArg3_t clickFunc, fArgNone_t addFunc
if (ImGui::BeginTabItem(TEXT("Window.Search"))) if (ImGui::BeginTabItem(TEXT("Window.Search")))
{ {
ImGui::Spacing(); ImGui::Spacing();
DrawClippedList(data, clickFunc, false, isEditItem); DrawClippedList(data, clickFunc, false, isEditItem, contextOptionsFunc);
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) if (ImGui::IsItemClicked(ImGuiMouseButton_Left))
@ -199,7 +204,7 @@ void Widget::DataList(ResourceStore& data, fArg3_t clickFunc, fArgNone_t addFunc
if (ImGui::BeginTabItem(TEXT("Window.FavouritesTab"))) if (ImGui::BeginTabItem(TEXT("Window.FavouritesTab")))
{ {
ImGui::Spacing(); ImGui::Spacing();
DrawClippedList(data, clickFunc, true, isEditItem); DrawClippedList(data, clickFunc, true, isEditItem, contextOptionsFunc);
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) if (ImGui::IsItemClicked(ImGuiMouseButton_Left))
@ -219,6 +224,10 @@ void Widget::DataList(ResourceStore& data, fArg3_t clickFunc, fArgNone_t addFunc
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
} }
if (tabsFunc)
{
tabsFunc();
}
ImGui::EndTabBar(); ImGui::EndTabBar();
} }
} }
@ -271,7 +280,7 @@ static bool RoundedImageButton(ImTextureID textureID, ImVec2& size, const char*
} }
void DrawClippedImages(ResourceStore& data, ImVec2 imgSz, size_t imagesInRow, bool showImages, void DrawClippedImages(ResourceStore& data, ImVec2 imgSz, size_t imagesInRow, bool showImages,
bool favourites, fArg1_t clickFunc, fRtnArg1_t getNameFunc, fRtnBoolArg1_t verifyFunc) bool favourites, fArg1_t clickFunc, fRtnArg1_t getNameFunc, fRtnBoolArg1_t verifyFunc, fArgNone_t contextOptionsFunc)
{ {
static IDirect3DTexture9 **pDefaultTex = BY_GAME(gTextureList.FindTextureByName("placeholder"), nullptr, nullptr); static IDirect3DTexture9 **pDefaultTex = BY_GAME(gTextureList.FindTextureByName("placeholder"), nullptr, nullptr);
ImGuiStyle &style = ImGui::GetStyle(); ImGuiStyle &style = ImGui::GetStyle();
@ -366,6 +375,10 @@ void DrawClippedImages(ResourceStore& data, ImVec2 imgSz, size_t imagesInRow, bo
data.m_pData->Save(); data.m_pData->Save();
data.UpdateSearchList(true, getNameFunc, verifyFunc); data.UpdateSearchList(true, getNameFunc, verifyFunc);
} }
if (contextOptionsFunc)
{
contextOptionsFunc();
}
if (ImGui::MenuItem(TEXT("Menu.Close"))) if (ImGui::MenuItem(TEXT("Menu.Close")))
{ {
contextMenu.show = false; contextMenu.show = false;
@ -381,7 +394,7 @@ void DrawClippedImages(ResourceStore& data, ImVec2 imgSz, size_t imagesInRow, bo
This direly needs a refactor oof This direly needs a refactor oof
*/ */
void Widget::ImageList(ResourceStore &store, fArg1_t clickFunc, fRtnArg1_t getNameFunc, void Widget::ImageList(ResourceStore &store, fArg1_t clickFunc, fRtnArg1_t getNameFunc,
fRtnBoolArg1_t verifyFunc, fArgNone_t addFunc) fRtnBoolArg1_t verifyFunc, fArgNone_t addFunc, fArgNone_t contextOptionsFunc, fArgNone_t tabsFunc)
{ {
ImGuiStyle& style = ImGui::GetStyle(); ImGuiStyle& style = ImGui::GetStyle();
/* /*
@ -430,7 +443,7 @@ void Widget::ImageList(ResourceStore &store, fArg1_t clickFunc, fRtnArg1_t getNa
if (ImGui::BeginTabItem(TEXT("Window.Search"))) if (ImGui::BeginTabItem(TEXT("Window.Search")))
{ {
ImGui::Spacing(); ImGui::Spacing();
DrawClippedImages(store, m_ImageSize, imagesInRow, showImages, false, clickFunc, getNameFunc, verifyFunc); DrawClippedImages(store, m_ImageSize, imagesInRow, showImages, false, clickFunc, getNameFunc, verifyFunc, contextOptionsFunc);
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) if (ImGui::IsItemClicked(ImGuiMouseButton_Left))
@ -440,7 +453,7 @@ void Widget::ImageList(ResourceStore &store, fArg1_t clickFunc, fRtnArg1_t getNa
if (ImGui::BeginTabItem(TEXT("Window.FavouritesTab"))) if (ImGui::BeginTabItem(TEXT("Window.FavouritesTab")))
{ {
ImGui::Spacing(); ImGui::Spacing();
DrawClippedImages(store, m_ImageSize, imagesInRow, showImages, true, clickFunc, getNameFunc, verifyFunc); DrawClippedImages(store, m_ImageSize, imagesInRow, showImages, true, clickFunc, getNameFunc, verifyFunc, contextOptionsFunc);
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) if (ImGui::IsItemClicked(ImGuiMouseButton_Left))
@ -475,6 +488,10 @@ void Widget::ImageList(ResourceStore &store, fArg1_t clickFunc, fRtnArg1_t getNa
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
} }
if (tabsFunc)
{
tabsFunc();
}
ImGui::EndTabBar(); ImGui::EndTabBar();
} }

View File

@ -41,7 +41,8 @@ public:
static bool ColorBtn(int colorId, std::vector<float>& color, ImVec2 size); static bool ColorBtn(int colorId, std::vector<float>& color, ImVec2 size);
// Draws DataStore data in the interface // Draws DataStore data in the interface
static void DataList(ResourceStore& data, fArg3_t clickFunc = nullptr, fArgNone_t addFunc = nullptr, bool isEditItem = false); static void DataList(ResourceStore& data, fArg3_t clickFunc = nullptr, fArgNone_t addFunc = nullptr,
bool isEditItem = false, fArgNone_t contextOptionsFunc = nullptr, fArgNone_t tabsFunc = nullptr);
// Draws a dropdown editor for memory address // Draws a dropdown editor for memory address
template <typename T> template <typename T>
@ -70,7 +71,8 @@ public:
// Draws ResourceStore images in the interface // Draws ResourceStore images in the interface
static void ImageList(ResourceStore &store, fArg1_t clickFunc, fRtnArg1_t getNameFunc, static void ImageList(ResourceStore &store, fArg1_t clickFunc, fRtnArg1_t getNameFunc,
fRtnBoolArg1_t verifyFunc = nullptr, fArgNone_t addFunc = nullptr); fRtnBoolArg1_t verifyFunc = nullptr, fArgNone_t addFunc = nullptr,
fArgNone_t contextOptionsFunc = nullptr, fArgNone_t tabsFunc = nullptr);
// Draws a dropdown listbox // Draws a dropdown listbox
static bool ListBox(const char* label, VecStr& allItems, int& selected); static bool ListBox(const char* label, VecStr& allItems, int& selected);