Skip to content
This repository has been archived by the owner on Jul 30, 2024. It is now read-only.

14.12 Data Structure Update #1206

Open
wants to merge 56 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
cdc8c8c
Update SkinDatabase.cpp
hydy100 Jun 16, 2024
7feebb9
Update ChampionManager.hpp
hydy100 Jun 16, 2024
b479fdf
update offsets
hydy100 Jun 19, 2024
dd9a1ba
Update Hall of Fame Ahri mode
hydy100 Jun 23, 2024
509216a
14.13 offsets Update
hydy100 Jun 26, 2024
967d2f6
Update memory.hpp
hydy100 Jun 27, 2024
e910d59
Update 14.13 SkinId
hydy100 Jul 17, 2024
010de1f
Update 14.14 SkinId
hydy100 Jul 17, 2024
c9cfdcf
14.16_PBE_GetGoldRedirectTarget_Update
hydy100 Aug 5, 2024
afffe7d
14.16_PBE_SkinId_Update
hydy100 Aug 7, 2024
227e13e
14.16_PBE_HeroList_Update
hydy100 Aug 8, 2024
647a927
Merge pull request #83 from hydy100/PBE_version
hydy100 Aug 14, 2024
e7982b6
Update offsets.hpp
hydy100 Aug 14, 2024
e0a61a8
Update GUI.cpp
hydy100 Aug 14, 2024
0e65e87
Synchronize skins
hydy100 Aug 14, 2024
5194b48
Fixed an issue where other champions' skins would revert.
hydy100 Aug 15, 2024
2e6d333
Update README.md
hydy100 Aug 18, 2024
aa2f91d
14.17_PBE_Memory_Update
hydy100 Aug 18, 2024
a9863bc
14.17_PBE_Ward_Skin_Update
hydy100 Aug 18, 2024
0a998bd
Update offsets.hpp
hydy100 Aug 18, 2024
f6b3256
Update encryption.hpp
hydy100 Aug 25, 2024
fc69e83
Update SkinId
hydy100 Aug 25, 2024
5abd255
Update Hooks.cpp
hydy100 Aug 25, 2024
2e3ebf4
Update encryption.hpp
hydy100 Aug 25, 2024
01b025f
Update SkinId
hydy100 Aug 25, 2024
1114f18
Merge pull request #125 from hydy100/PBE_version
hydy100 Aug 28, 2024
8b8df6e
14.19_PBE_Update
hydy100 Sep 11, 2024
89b9848
14.19_PBE_Update
hydy100 Sep 19, 2024
69468e7
Update offsets.hpp
hydy100 Oct 16, 2024
01ff483
14.21_PBE_Update
hydy100 Oct 16, 2024
3244b52
14.21 version update
hydy100 Oct 23, 2024
45e0ebf
Update offsets.hpp
hydy100 Nov 4, 2024
d84ad57
Update memory.hpp
hydy100 Nov 4, 2024
d3016ae
14.22 Version
hydy100 Nov 6, 2024
45b5af1
Update offsets.hpp
hydy100 Nov 7, 2024
865471f
Update Hooks.cpp
hydy100 Nov 7, 2024
0fbb8b7
Update offsets.hpp
hydy100 Nov 7, 2024
2b96ae5
Update Hooks.cpp
hydy100 Nov 7, 2024
a291c07
Update README.md
hydy100 Nov 17, 2024
ee64bdb
Update README_zh.md
hydy100 Nov 17, 2024
bbe0d1d
Update README.md
hydy100 Nov 25, 2024
f0a3017
Update README_zh.md
hydy100 Nov 25, 2024
5cd19f6
Update README.md
hydy100 Nov 25, 2024
c5c281c
Update README.md
hydy100 Nov 25, 2024
8a162d5
Update memory.hpp
hydy100 Nov 30, 2024
4b2d065
Update offsets.hpp
hydy100 Nov 30, 2024
dee5f4a
Update GUI.cpp
hydy100 Nov 30, 2024
2fb8fc0
Update SkinDatabase.hpp
hydy100 Nov 30, 2024
41577f0
Update Hooks.cpp
hydy100 Nov 30, 2024
d818d13
Update GameObject.hpp
hydy100 Nov 30, 2024
243c226
Update SkinDatabase.hpp
hydy100 Dec 4, 2024
08e0afe
Update memory.hpp
hydy100 Dec 4, 2024
04cc9ae
Update SkinDatabase.hpp
hydy100 Dec 11, 2024
027dfaf
Merge branch 'main' into PBE_version
hydy100 Dec 11, 2024
c15eef4
14.24 Version
hydy100 Dec 11, 2024
55850f1
Update Jinx_skin
hydy100 Dec 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 23 additions & 8 deletions R3nzSkin/GUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void GUI::render() noexcept

const auto player{ cheatManager.memory->localPlayer };
const auto heroes{ cheatManager.memory->heroList };
static const auto my_team{ player ? player->get_team() : 100 };
static const auto my_team{ player ? player->get_team() : 1 };
static int gear{ player ? player->get_character_data_stack()->base_skin.gear : 0 };

static const auto vector_getter_skin = [](void* vec, const std::int32_t idx, const char** out_text) noexcept {
Expand Down Expand Up @@ -94,9 +94,10 @@ void GUI::render() noexcept
ImGui::Text("Player Skins Settings:");

if (ImGui::Combo("Current Skin", &cheatManager.config->current_combo_skin_index, vector_getter_skin, static_cast<void*>(&values), values.size() + 1))
if (cheatManager.config->current_combo_skin_index > 0)
if (cheatManager.config->current_combo_skin_index > 0) {
player->change_skin(values[cheatManager.config->current_combo_skin_index - 1].model_name, values[cheatManager.config->current_combo_skin_index - 1].skin_id);

cheatManager.config->save();
}
const auto playerHash{ fnv::hash_runtime(player->get_character_data_stack()->base_skin.model.str) };
if (const auto it{ std::ranges::find_if(cheatManager.database->specialSkins,
[&skin = player->get_character_data_stack()->base_skin.skin, &ph = playerHash](const SkinDatabase::specialSkin& x) noexcept -> bool
Expand Down Expand Up @@ -164,8 +165,10 @@ void GUI::render() noexcept

auto& values{ cheatManager.database->champions_skins[champion_name_hash] };
if (ImGui::Combo(str_buffer, &fst->second, vector_getter_skin, static_cast<void*>(&values), values.size() + 1))
if (fst->second > 0)
if (fst->second > 0) {
hero->change_skin(values[fst->second - 1].model_name, values[fst->second - 1].skin_id);
cheatManager.config->save();
}
}
footer();
ImGui::EndTabItem();
Expand All @@ -177,10 +180,20 @@ void GUI::render() noexcept
if (ImGui::Combo("Minion Skins:", &cheatManager.config->current_combo_minion_index, vector_getter_default, static_cast<void*>(&cheatManager.database->minions_skins), cheatManager.database->minions_skins.size() + 1))
cheatManager.config->current_minion_skin_index = cheatManager.config->current_combo_minion_index - 1;
ImGui::Separator();
if (ImGui::Combo("Order Turret Skins:", &cheatManager.config->current_combo_order_turret_index, vector_getter_default, static_cast<void*>(&cheatManager.database->turret_skins), cheatManager.database->turret_skins.size() + 1))
changeTurretSkin(cheatManager.config->current_combo_order_turret_index - 1, 100);
if (ImGui::Combo("Chaos Turret Skins:", &cheatManager.config->current_combo_chaos_turret_index, vector_getter_default, static_cast<void*>(&cheatManager.database->turret_skins), cheatManager.database->turret_skins.size() + 1))
changeTurretSkin(cheatManager.config->current_combo_chaos_turret_index - 1, 200);
if (ImGui::Combo("Order Turret Skins:", &cheatManager.config->current_combo_order_turret_index, vector_getter_default, static_cast<void*>(&cheatManager.database->turret_skins), cheatManager.database->turret_skins.size() + 1))
{
if (cheatManager.config->current_combo_order_turret_index >= 17)
changeTurretSkin(cheatManager.config->current_combo_order_turret_index + 1, 1);
else
changeTurretSkin(cheatManager.config->current_combo_order_turret_index - 1, 1);
}
if (ImGui::Combo("Chaos Turret Skins:", &cheatManager.config->current_combo_chaos_turret_index, vector_getter_default, static_cast<void*>(&cheatManager.database->turret_skins), cheatManager.database->turret_skins.size() + 1))
{
if (cheatManager.config->current_combo_order_turret_index >= 17)
changeTurretSkin(cheatManager.config->current_combo_order_turret_index + 1, 2);
else
changeTurretSkin(cheatManager.config->current_combo_order_turret_index - 1, 2);
}
ImGui::Separator();
ImGui::Text("Jungle Mobs Skins Settings:");
for (auto& [name, name_hashes, skins] : cheatManager.database->jungle_mobs_skins) {
Expand Down Expand Up @@ -227,6 +240,7 @@ void GUI::render() noexcept
if (const auto hero{ heroes->list[i] }; hero != player)
hero->change_skin(hero->get_character_data_stack()->base_skin.model.str, 0);
}
cheatManager.config->save();
} ImGui::hoverInfo("Sets the skins of all champions except the local player to the default skin.");

if (ImGui::Button("Random Skins")) {
Expand All @@ -249,6 +263,7 @@ void GUI::render() noexcept
data = random(1ull, skinCount);
hero->change_skin(skinDatabase[data - 1].model_name, skinDatabase[data - 1].skin_id);
}
cheatManager.config->save();
}
} ImGui::hoverInfo("Randomly changes the skin of all champions.");

Expand Down
7 changes: 4 additions & 3 deletions R3nzSkin/Hooks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ namespace d3d_vtable {
}
}


struct dxgi_present {
static long WINAPI hooked(IDXGISwapChain* p_swap_chain, UINT sync_interval, UINT flags) noexcept
{
Expand Down Expand Up @@ -321,7 +322,7 @@ void Hooks::init() noexcept
}
}

const auto my_team{ player ? player->get_team() : 100 };
const auto my_team{ player ? player->get_team() : 1 };
for (auto i{ 0u }; i < heroes->length; ++i) {
const auto hero{ heroes->list[i] };
if (hero == player)
Expand Down Expand Up @@ -360,8 +361,8 @@ void Hooks::init() noexcept
for (auto i{ 0u }; i < minions->length; ++i) {
const auto minion{ minions->list[i] };

if (minion->isLaneMinion()) {
if (player && player->get_team() == 200)
if (minion->isLaneMinion() && cheatManager.config->current_minion_skin_index != -1) {
if (player && player->get_team() == 2)
changeSkinForObject(minion, cheatManager.config->current_minion_skin_index * 2 + 1);
else
changeSkinForObject(minion, cheatManager.config->current_minion_skin_index * 2);
Expand Down
3 changes: 2 additions & 1 deletion R3nzSkin/SDK/ChampionManager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@

#include "Champion.hpp"
#include "Pad.hpp"
#include "RiotArray.hpp"

class ChampionManager {
PAD(0x18)
std::vector<Champion*> champions;
RiotArray<Champion*> champions;
};
2 changes: 1 addition & 1 deletion R3nzSkin/SDK/GameObject.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
class GameObject {
public:
CLASS_GETTER_P(std::string, get_name, offsets::GameObject::Name)
CLASS_GETTER(std::int32_t, get_team, offsets::GameObject::Team)
CLASS_GETTER(std::int8_t, get_team, offsets::GameObject::Team)

// Returns true for lane minions.
[[nodiscard]] bool isLaneMinion() const noexcept { return CallVirtual<offsets::GameObject::VTable::IsLaneMinion, bool>(std::uintptr_t(this)); }
Expand Down
5 changes: 3 additions & 2 deletions R3nzSkin/SkinDatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@

void SkinDatabase::load() noexcept
{
for (const auto& champion : cheatManager.memory->championManager->champions) {
for (auto j{ 0 }; j < cheatManager.memory->championManager->champions.size;++j) {
const auto& champion = cheatManager.memory->championManager->champions.list[j];
std::vector<std::int32_t> skins_ids;

for (auto i{ 0 }; i < champion->skins.size; ++i)
Expand Down Expand Up @@ -58,7 +59,7 @@ void SkinDatabase::load() noexcept
const auto ward_display_name{ "game_character_skin_displayname_SightWard_" + std::to_string(ward_skin_id) };
const auto ward_display_name_translated{ cheatManager.memory->translateString(ward_display_name.c_str()) };

if (ward_display_name == ward_display_name_translated)
if (ward_display_name_translated == nullptr || ward_display_name_translated[0] == '\0')
break;

this->wards_skins.emplace_back(ward_skin_id, ward_display_name_translated);
Expand Down
7 changes: 5 additions & 2 deletions R3nzSkin/SkinDatabase.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ class SkinDatabase {
"Temple of Lily and Lotus Turret",
"Arcane Order Turret", "Arcane Chaos Turret",
"Butcher's Bridge Order Turret", "Butcher's Bridge Chaos Turret",
"Howling Abyss Order Turret", "Howling Abyss Chaos Turret"
"Howling Abyss Order Turret", "Howling Abyss Chaos Turret",
"Zaun Order Turret","Piltover Chaos Turret"
};

std::vector<jungle_mob_skin_info> jungle_mobs_skins{
Expand Down Expand Up @@ -93,6 +94,8 @@ class SkinDatabase {
{ FNV("Katarina"), 29, 36, { "Dagger 1", "Dagger 2", "Dagger 3", "Dagger 4", "Dagger 5", "Dagger 6" }},
{ FNV("Renekton"), 26, 32, { "Head off", "Head on", "Fins", "Ultimate" } },
{ FNV("MissFortune"), 16, 16, { "Scarlet fair", "Zero hour", "Royal arms", "Starswarm" } },
{ FNV("Ezreal"), 5, 5, { "Level 1", "Level 2", "Level 3" } }
{ FNV("Ezreal"), 5, 5, { "Level 1", "Level 2", "Level 3" } },
{ FNV("Ahri"), 86, 86, { "Level 1", "Level 2", "Level 3" } },
{ FNV("Jinx"), 60, 60, { "With hood", "Without hood", "Parallel world" } }
};
};
4 changes: 2 additions & 2 deletions R3nzSkin/encryption.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
#pragma pack(push, 4)
template <typename T>
class xor_value {
T xor_key;
T values_table[4];
bool xor_key_was_init{ 0 };
std::uint8_t bytes_xor_count;
std::uint8_t bytes_xor_count_8;
T xor_key;
std::uint8_t value_index{ 0 };
T values_table[4];
public:
T decrypt() noexcept
{
Expand Down
16 changes: 8 additions & 8 deletions R3nzSkin/memory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,22 +60,22 @@ class Memory {
{
{
{
"48 8B 3D ? ? ? ? 48 3B CF"
"48 8B 3D ? ? ? ? 48 85 FF 74 15 48 81 C7"
}, true, false, true, 0, &offsets::global::Player
},
{
{
"48 8B 05 ? ? ? ? 48 8B 78 08 8B 40 10 4C 8D 3C C7 49 3B FF"
"48 8B 05 ? ? ? ? 48 8B ? 08 8B 40 ? ? 8D ? ? ? 3B ? 74"
}, true, false, true, 0, &offsets::global::ManagerTemplate_AIHero_
},
{
{
"48 8B 0D ? ? ? ? 48 69 D0 ? ? 00 00 48 8B 05"
"48 8B 0D ? ? ? ? 48 8D ? ? 48 8B 05"
}, true, false, true, 0, &offsets::global::ChampionManager
},
{
{
"48 8B 0D ? ? ? ? E8 ? ? ? ? E8 ? ? ? ? E8 ? ? ? ? 48 8B C8 48 8B 10"
"48 8B 0D ? ? ? ? E8 ? ? ? ? 48 8B 0D ? ? ? ? E8 ? ? ? ? 48 8B 0D ? ? ? ? E8 ? ? ? ? E8 ? ? ? ? E8"
}, true, false, true, 0, &offsets::global::ManagerTemplate_AIMinionClient_
},
{
Expand All @@ -95,7 +95,7 @@ class Memory {
},
{
{
"40 38 BB ? ? 00 00 0F 85 ? ? 00 00 66 C7 83 ? ? ? ? ? ? 0F 31 48 C1 E2 20 4C 8D 83 ? ? 00 00 48 0B C2 44 8B CF 48 89 44 24 38 8B D7"
"88 87 ? ? 00 00 48 89 44 24 38 0F B6 44 24 39 88 87 ? 13"
}, false, true, false, 0, &offsets::AIBaseCommon::SkinId
},
{
Expand All @@ -110,12 +110,12 @@ class Memory {
},
{
{
"88 54 24 10 53 55 56 57 41 54 41 55 41 56 41"
"4C 8B DC 53 56 57 48 83 EC ? 49"
}, true, false, false, 0, &offsets::functions::CharacterDataStack__Update
},
{
{
"E8 ? ? ? ? 8B 57 44"
"E8 ? ? ? ? 8B 57 34 45 33 C9"
}, true, false, false, 0, &offsets::functions::Riot__Renderer__MaterialRegistry__GetSingletonPtr
},
{
Expand All @@ -125,7 +125,7 @@ class Memory {
},
{
{
"E8 ? ? ? ? 4C 3B F8 0F 94 C0"
"E8 ? ? ? ? 4C 3B ? 0F 94 C0"
}, true, false, false, 0, &offsets::functions::GetGoldRedirectTarget
}
};
Expand Down
6 changes: 3 additions & 3 deletions R3nzSkin/offsets.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ namespace offsets {
namespace GameObject {
namespace VTable {
enum {
IsLaneMinion = 0xEB, // E8 ? ? ? ? 84 C0 0F 84 ? ? ? ? 39 1F
IsLaneMinion = 0xEE, // E8 ? ? ? ? 84 C0 0F 84 ? ? ? ? 39 1F
IsEliteMinion = IsLaneMinion + 0x1,
IsEpicMinion = IsEliteMinion + 0x1,
IsMinion = IsEpicMinion + 0x4,
IsJungle = IsMinion + 0x1
};
};
enum {
Team = 0x3C,
Name = 0x60
Team = 0x249,
Name = 0x58
};
};

Expand Down
74 changes: 42 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,47 +1,57 @@
<div align="center">

[![C++](https://img.shields.io/badge/Language-C%2B%2B-%23f34b7d.svg?style=plastic)](https://en.wikipedia.org/wiki/C%2B%2B)
[![LOL](https://img.shields.io/badge/Game-League%20of%20Legends-445fa5.svg?style=plastic)](https://na.leagueoflegends.com)
[![Windows](https://img.shields.io/badge/Platform-Windows-0078d7.svg?style=plastic)](https://en.wikipedia.org/wiki/Microsoft_Windows)
[![x64](https://img.shields.io/badge/Arch-x64-red.svg?style=plastic)](https://en.wikipedia.org/wiki/X86-64)
[![License](https://img.shields.io/github/license/R3nzTheCodeGOD/R3nzSkin.svg?style=plastic)](LICENSE)
[![Issues](https://img.shields.io/github/issues/R3nzTheCodeGOD/R3nzSkin.svg?style=plastic)](https://github.com/R3nzTheCodeGOD/R3nzSkin/issues)
![Windows](https://github.com/R3nzTheCodeGOD/R3nzSkin/workflows/Windows/badge.svg?branch=main&event=push)
# R3nzSkin

# **R3nzSkin**
**&gt; English &lt;** | [简体中文](README_zh.md)

## Announcement
R3nzSkin is **no longer supported** due to Riot Games implementing <a href="https://support-leagueoflegends.riotgames.com/hc/en-us/articles/24169857932435-Riot-Vanguard-League-of-Legends-">Valorant's Vanguard anti-cheat to League of Legends</a>
</div>

<img src="https://user-images.githubusercontent.com/58574988/134170370-c827d712-fcc7-432f-b9f8-96678b0c9bf6.gif">
# Building

`R3nzSkin` is an internal skin changer for League of Legends.
1. Clone the source with `git clone --recursive https://github.com/hydy100/R3nzSkin.git`

</div>
- **If you don't modify this source code, compiling and using it on Chinese servers will definitely result in a ban. The functionality is fine, but if you know how to modify it, you can make it as safe as the version I released.**

- Change the skin of your champion, your ward, other champions, towers, minions, and jungle monsters in the game.
- Automatic skin database update.
- Support for spectator mode.
- Change skins anytime and unlimited times in a single game.
- Supports all popular languages ​​in the world.
- In-game configuration with <a href="https://github.com/ocornut/imgui">ImGui</a>.
- <a href="https://github.com/nlohmann/json">JSON</a> based configuration saving & loading
2. Build in Visual Studio 2019/2022 with configuration "Your Region - x64"

# Building
1. Clone the source with `git clone --recursive https://github.com/R3nzTheCodeGOD/R3nzSkin.git`
2. Build in Visual Studio 2019/2022 with configuration "Your Region - x64"
> Quick tip: The original method of RiotServers cannot be injected. The injection method I currently use is `SetWindowsHookEx`. With a little effort, the injection should be possible. There is no need to say more, and don’t ask me.
# Usage
1. Compile source or <a href="https://github.com/R3nzTheCodeGOD/R3nzSkin/releases/latest">download</a> a compiled version.
2. Use `R3nzSkin_Injector.exe` or inject the built DLL into the game yourself.
- *Administrator* privilege may be needed if the injector failed to inject the DLL.
- League client can crash if `R3nzSkin` is injected before being in the game.
- A workaround is to not inject until you are in the game (you will need to be fast to not disrupt the game).
3. Press <kbd>Insert</kbd> to bring up the menu.
4. Select the skin for you, your teammates, enemies, and wards.

1. Compile source or [download](https://github.com/hydy100/R3nzSkin/releases/latest) a compiled version.
2. Then check: [Instructions for use](https://hydy100.top/) ,I've written the detailed instructions inside.

# About the project

- I include some explanations for each release in the description of [Releases](https://github.com/hydy100/R3nzSkin/releases/latest).
- **I've hardly posted this project on any other platform, so if you share it, please help solve some issues rather than redirecting everything to me. Alternatively, provide [R3nzSkin](https://github.com/hydy100/R3nzSkin) so they can submit issues there.**
- **There is no paid version or any other versions, and there is no requirement to join any groups. I've released all the files, I just left a contact method.**
- The project is currently purely non-profit, just like the original [R3nzSkin](https://github.com/R3nzTheCodeGOD/R3nzSkin).
- There are some issues I can't solve very well, so I welcome anyone with the ability to help resolve them, if you're willing.

# About the releases
- Regarding the issue of dll size in releases, I just added some anti-cracking shells or compressed shells, and the dll function source code has been completely open source.
- Regarding the injector part in releases, it is not open source, but the quick tip also mentioned how to update it to make it available. It was not made clear before that the original version cannot be used, but the fact that I have never submitted any updates for the injector also indicates this issue.
- The releases and source codes of many open source projects are also different. I don't want anyone to kidnap me in the name of open source and ask me to do something meaningless. This goes against the original intention of open source.

# Regarding views on open source (quoting ChatGPT)
If someone tries to "hijack" you through the open-source spirit, demanding that you justify the rationale behind parts of the code that are not open-source, this actually contradicts the core values of the open-source spirit. The essence of open source is to encourage sharing and collaboration, but this doesn't mean every line of code has to be open. Open-source licenses allow developers to decide whether or not to make their code public, and in some cases, certain parts of the code may not be suitable for open-source due to commercial, privacy, or security reasons.

Here are a few points to understand this:

1. Balance between open-source and private code: Open-source does not require all code to be open. In many open-source projects, the core functionality or sensitive parts might remain private, while other parts are made public. Developers have the right to decide which parts to share and which to keep private.

2. Respecting the developer's choice: If a developer chooses not to open-source a part of their code, that decision should be respected. It does not mean that the developer is not adhering to the open-source spirit; they may have other reasons, such as protecting commercial interests, maintaining security, or preventing abuse.

3. Avoiding "hijacking" behavior: The open-source community's spirit is based on freedom, collaboration, and respect. If someone uses the "open-source spirit" as a pretext to force you to explain or change your code-sharing strategy, this behavior itself deviates from the true meaning of open source. Open-source is voluntary, and any form of coercion is not to be encouraged.

In summary, the open-source spirit advocates freedom, sharing, and collaboration, but it does not mean that all code must be open. Every developer should have the right to decide the level of openness for their own code.


# Further optimizations
If your CPU supports AVX / AVX2 / AVX-512 instruction set, you can enable it in project settings. This should result in more performant code, optimized for your CPU. Currently SSE2 instructions are selected in project settings.

If your CPU supports AVX / AVX2 / AVX-512 instruction set, you can enable it in project settings. This should result in more performant code, optimized for your CPU. Currently SSE2 instructions are selected in project settings.

# Credits
This program is an improved and updated version of the <a href="https://github.com/B3akers">B3akers</a>/<a href="https://github.com/B3akers/LeagueSkinChanger">LeagueSkinChanger</a> project.

This program is an improved and updated version of the [R3nzTheCodeGOD](https://github.com/R3nzTheCodeGOD)/[R3nzSkin](https://github.com/R3nzTheCodeGOD/R3nzSkin) project.
Loading