Skip to content

Commit b4f03a2

Browse files
committed
Fix itemattributes for waveschedule
1 parent a494e8c commit b4f03a2

File tree

1 file changed

+49
-28
lines changed

1 file changed

+49
-28
lines changed

src/mod/pop/popmgr_extensions.cpp

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,7 @@ namespace Mod::Pop::PopMgr_Extensions
11911191
// DevMsg(" %.3f <= %.3f, returning true\n", rnd, rate);
11921192
return true;
11931193
}
1194+
return false;
11941195
}
11951196

11961197
bool bot_killed_check = false;
@@ -6270,47 +6271,66 @@ namespace Mod::Pop::PopMgr_Extensions
62706271
"LuaScript",
62716272
"LuaScriptFile"
62726273
};
6273-
DETOUR_DECL_MEMBER(void, KeyValues_MergeBaseKeys, CUtlVector<KeyValues *> &keys)
6274+
KeyValues *lastMergedKeyValues = nullptr;
6275+
RefCount rc_KeyValues_LoadFromBuffer;
6276+
RefCount rc_KeyValues_RecursiveMergeKeyValues;
6277+
DETOUR_DECL_MEMBER(void, KeyValues_RecursiveMergeKeyValues, KeyValues *included)
62746278
{
6275-
if (reading_popfile) {
6279+
SCOPED_INCREMENT(rc_KeyValues_RecursiveMergeKeyValues);
6280+
if (reading_popfile && rc_KeyValues_RecursiveMergeKeyValues <= 1 && rc_KeyValues_LoadFromBuffer) {
62766281
auto kv = reinterpret_cast<KeyValues *>(this);
62776282
KeyValues *appendKvFirst = nullptr;
62786283
KeyValues *appendKvLast = nullptr;
6279-
for (int i = 0; i < keys.Count(); i++) {
6280-
std::vector<KeyValues *> del_kv;
6281-
FOR_EACH_SUBKEY(keys[i], subkey) {
6282-
auto name = subkey->GetName();
6283-
for (size_t j = 0; j < ARRAYSIZE(include_instead_of_merging_key_names); j++) {
6284-
if (FStrEq(name, include_instead_of_merging_key_names[j])) {
6285-
auto kvCopy = subkey->MakeCopy();
6286-
if (appendKvFirst == nullptr) {
6287-
appendKvFirst = kvCopy;
6288-
}
6289-
if (appendKvLast != nullptr) {
6290-
appendKvLast->SetNextKey(kvCopy);
6291-
}
6292-
appendKvLast = kvCopy;
6293-
del_kv.push_back(subkey);
6284+
6285+
std::vector<KeyValues *> del_kv;
6286+
FOR_EACH_SUBKEY(included, subkey) {
6287+
auto name = subkey->GetName();
6288+
for (size_t j = 0; j < ARRAYSIZE(include_instead_of_merging_key_names); j++) {
6289+
if (FStrEq(name, include_instead_of_merging_key_names[j])) {
6290+
auto kvCopy = subkey->MakeCopy();
6291+
if (appendKvFirst == nullptr) {
6292+
appendKvFirst = kvCopy;
62946293
}
6294+
if (appendKvLast != nullptr) {
6295+
appendKvLast->SetNextKey(kvCopy);
6296+
}
6297+
appendKvLast = kvCopy;
6298+
del_kv.push_back(subkey);
62956299
}
62966300
}
6297-
for (auto subkey : del_kv) {
6298-
// DevMsg("Deleting key \"%s\"\n", subkey->GetName());
6299-
keys[i]->RemoveSubKey(subkey);
6300-
subkey->deleteThis();
6301-
}
63026301
}
6302+
for (auto subkey : del_kv) {
6303+
// DevMsg("Deleting key \"%s\"\n", subkey->GetName());
6304+
included->RemoveSubKey(subkey);
6305+
subkey->deleteThis();
6306+
}
6307+
63036308
if (appendKvFirst != nullptr) {
6304-
if (kv->GetFirstSubKey() != nullptr) {
6305-
appendKvLast->SetNextKey(kv->GetFirstSubKey()->GetNextKey());
6306-
kv->GetFirstSubKey()->SetNextKey(appendKvFirst);
6309+
if (lastMergedKeyValues != nullptr) {
6310+
appendKvLast->SetNextKey(lastMergedKeyValues->GetNextKey());
6311+
lastMergedKeyValues->SetNextKey(appendKvFirst);
63076312
}
63086313
else {
6309-
kv->AddSubKey(appendKvFirst);
6314+
if (kv->GetFirstSubKey() != nullptr) {
6315+
appendKvLast->SetNextKey(kv->GetFirstSubKey()->GetNextKey());
6316+
kv->GetFirstSubKey()->SetNextKey(appendKvFirst);
6317+
}
6318+
else {
6319+
kv->AddSubKey(appendKvFirst);
6320+
}
6321+
lastMergedKeyValues = appendKvLast;
63106322
}
6323+
63116324
}
63126325
}
6313-
DETOUR_MEMBER_CALL(KeyValues_MergeBaseKeys)(keys);
6326+
DETOUR_MEMBER_CALL(KeyValues_RecursiveMergeKeyValues)(included);
6327+
}
6328+
6329+
DETOUR_DECL_MEMBER(bool, KeyValues_LoadFromBuffer, char const *resourceName, CUtlBuffer &buf, IBaseFileSystem* pFileSystem, const char *pPathID)
6330+
{
6331+
SCOPED_INCREMENT(rc_KeyValues_LoadFromBuffer);
6332+
lastMergedKeyValues = nullptr;
6333+
return DETOUR_MEMBER_CALL(KeyValues_LoadFromBuffer)(resourceName, buf, pFileSystem, pPathID);
63146334
}
63156335

63166336
RefCount rc_CPopulationManager_IsValidPopfile;
@@ -7028,7 +7048,8 @@ namespace Mod::Pop::PopMgr_Extensions
70287048
MOD_ADD_DETOUR_MEMBER(CPopulationManager_SetCheckpoint, "CPopulationManager::SetCheckpoint");
70297049
MOD_ADD_DETOUR_MEMBER(CTFPlayer_GetEntityForLoadoutSlot, "CTFPlayer::GetEntityForLoadoutSlot");
70307050
MOD_ADD_DETOUR_MEMBER(CTFPlayerSharedUtils_GetEconItemViewByLoadoutSlot, "CTFPlayerSharedUtils::GetEconItemViewByLoadoutSlot");
7031-
MOD_ADD_DETOUR_MEMBER(KeyValues_MergeBaseKeys, "KeyValues::MergeBaseKeys");
7051+
MOD_ADD_DETOUR_MEMBER(KeyValues_RecursiveMergeKeyValues, "KeyValues::RecursiveMergeKeyValues");
7052+
MOD_ADD_DETOUR_MEMBER(KeyValues_LoadFromBuffer, "KeyValues::LoadFromBuffer");
70327053

70337054

70347055
//MOD_ADD_DETOUR_MEMBER(CTFWeaponBase_UpdateHands, "CTFWeaponBase::UpdateHands");

0 commit comments

Comments
 (0)