Files
Shiip-of-Hakinian-Espanol/soh/soh/Network/Anchor/Packets/SetFlag.cpp
2024-12-17 11:03:54 -06:00

55 lines
1.6 KiB
C++

#ifdef ENABLE_REMOTE_CONTROL
#include "soh/Network/Anchor/Anchor.h"
#include <nlohmann/json.hpp>
#include <libultraship/libultraship.h>
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/OTRGlobals.h"
/**
* SET_FLAG
*
* Fired when a flag is set in the save context
*/
void Anchor::SendPacket_SetFlag(s16 sceneNum, s16 flagType, s16 flag) {
if (!IsSaveLoaded()) {
return;
}
nlohmann::json payload;
payload["type"] = SET_FLAG;
payload["targetTeamId"] = CVarGetString(CVAR_REMOTE_ANCHOR("TeamId"), "default");
payload["addToQueue"] = true;
payload["sceneNum"] = sceneNum;
payload["flagType"] = flagType;
payload["flag"] = flag;
SendJsonToRemote(payload);
}
void Anchor::HandlePacket_SetFlag(nlohmann::json payload) {
if (!IsSaveLoaded()) {
return;
}
s16 sceneNum = payload["sceneNum"].get<s16>();
s16 flagType = payload["flagType"].get<s16>();
s16 flag = payload["flag"].get<s16>();
if (sceneNum == SCENE_ID_MAX) {
auto effect = new GameInteractionEffect::SetFlag();
effect->parameters[0] = payload["flagType"].get<int16_t>();
effect->parameters[1] = payload["flag"].get<int16_t>();
effect->Apply();
} else {
auto effect = new GameInteractionEffect::SetSceneFlag();
effect->parameters[0] = payload["sceneNum"].get<int16_t>();
effect->parameters[1] = payload["flagType"].get<int16_t>();
effect->parameters[2] = payload["flag"].get<int16_t>();
effect->Apply();
}
}
#endif // ENABLE_REMOTE_CONTROL