From 3c1d1f139a9b43d2d23430e97f42f8f150780f8b Mon Sep 17 00:00:00 2001 From: chinosk <2248589280@qq.com> Date: Tue, 24 Dec 2024 02:49:30 +0000 Subject: [PATCH] fix game crash --- app/src/main/cpp/GakumasLocalify/Hook.cpp | 27 +++++++---------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/app/src/main/cpp/GakumasLocalify/Hook.cpp b/app/src/main/cpp/GakumasLocalify/Hook.cpp index 680de29..b57cad2 100644 --- a/app/src/main/cpp/GakumasLocalify/Hook.cpp +++ b/app/src/main/cpp/GakumasLocalify/Hook.cpp @@ -575,37 +575,26 @@ namespace GakumasLocal::HookMain { void* AddIdsToUserDataCollectionFromMaster(void* origList, std::vector& allIds, UnityResolve::Method* get_CostumeId, UnityResolve::Method* set_CostumeId, UnityResolve::Method* Clone) { + std::unordered_set existIds{}; Il2cppUtils::Tools::CSListEditor listEditor(origList); if (listEditor.get_Count() <= 0) { return origList; } for (auto i : listEditor) { - auto currCostumeId = get_CostumeId->Invoke(i); - if (!currCostumeId) continue; - std::string currCostumeIdStr = currCostumeId->ToString(); - if (std::find(allIds.begin(), allIds.end(), currCostumeIdStr) == allIds.end()) { - allIds.emplace_back(currCostumeIdStr); - } + auto costumeId = get_CostumeId->Invoke(i); + if (!costumeId) continue; + existIds.emplace(costumeId->ToString()); } - int currIndex = 0; - int origSize = listEditor.get_Count(); for (auto& i : allIds) { if (i.empty()) continue; // Log::DebugFmt("Try add %s", i.c_str()); + if (existIds.contains(i)) continue; - if (currIndex < origSize) { - auto userCostume = listEditor.get_Item(currIndex); - set_CostumeId->Invoke(userCostume, Il2cppString::New(i)); - listEditor.set_Item(currIndex, userCostume); - } - else { - auto userCostume = Clone->Invoke(listEditor.get_Item(0)); - set_CostumeId->Invoke(userCostume, Il2cppString::New(i)); - listEditor.Add(userCostume); - } - currIndex++; + auto userCostume = Clone->Invoke(listEditor.get_Item(0)); + set_CostumeId->Invoke(userCostume, Il2cppString::New(i)); + listEditor.Add(userCostume); } return origList; }