#include "StoryBoxInteractServer.h" #include "Character.h" #include "GameMessages.h" #include "EffectsMessages.h" #include "ObjectMessages.h" #include "dServer.h" #include "Amf3.h" #include "Entity.h" void StoryBoxInteractServer::OnUse(Entity* self, Entity* user) { if (self->HasVar(u"customText")) { const auto& customText = self->GetVar(u"customText"); { AMFArrayValue args; args.Insert("state", "Story"); GameMessages::UIMessageServerToSingleClient uiMessage; uiMessage.target = user->GetObjectID(); uiMessage.strMessageName = "pushGameState"; uiMessage.args = std::move(args); uiMessage.SendToClient(user->GetSystemAddress()); } user->AddCallbackTimer(0.1f, [user, customText]() { AMFArrayValue args; args.Insert("visible", true); args.Insert("text", customText); GameMessages::UIMessageServerToSingleClient uiMessage; uiMessage.target = user->GetObjectID(); uiMessage.strMessageName = "ToggleStoryBox"; uiMessage.args = std::move(args); uiMessage.SendToClient(user->GetSystemAddress()); }); return; } if (!self->HasVar(u"storyText")) return; const auto storyText = self->GetVarAsString(u"storyText"); if (storyText.length() > 2) { auto storyValue = GeneralUtils::TryParse(storyText.substr(storyText.length() - 2)); if (!storyValue) return; int32_t boxFlag = self->GetVar(u"altFlagID"); if (boxFlag <= 0) { boxFlag = (10000 + Game::server->GetZoneID() + storyValue.value()); } GameMessages::GetFlag flagMsg; flagMsg.target = user->GetObjectID(); flagMsg.flagID = boxFlag; flagMsg.Send(); if (!flagMsg.flag) { auto* const character = user->GetCharacter(); if (character) character->SetPlayerFlag(boxFlag, true); GameMessages::FireEventClientSide(self->GetObjectID(), u"achieve", LWOOBJID_EMPTY, LWOOBJID_EMPTY).SendToClient(user->GetSystemAddress()); } } }