Batch #17237 by ragnarok-clanker: no function's compiled code changes; checked with 105 compiled unit(s), including every includer of Source/Linkage/Source/Client/Mode/LoginMode.cpp.h, Source/Linkage/Source/Client/Session/SessionAchievements.cpp.h, Source/Linkage/Source/Client/Session/SessionPredicates.cpp.h, Source/Linkage/Source/Client/Session/SessionState.cpp.h, Source/Linkage/Source/Contents/Achievement/AchievementMgr.cpp.h, Source/Linkage/Source/Contents/Actors/ActorPickNode.cpp.h, Source/Linkage/Source/Contents/Actors/MercenaryAI.cpp.h, Source/Linkage/Source/Contents/Actors/Resources/RobeResources.cpp.h, Source/Linkage/Source/Contents/CashEmotion/CashEmotionMgr.cpp.h, Source/Linkage/Source/Contents/Effects/EffectResourceSwitcher.cpp.h, Source/Linkage/Source/Contents/Effects/Particles/AnimatedEmitterEffect.cpp.h, Source/Linkage/Source/Contents/Effects/Particles/Particle.cpp.h, Source/Linkage/Source/Contents/Effects/Skills/MonsterSkillEffects.cpp.h, Source/Linkage/Source/Contents/Emblems/EmblemCache.cpp.h, Source/Linkage/Source/Contents/Emblems/EmblemDataDownloadAsyncWork.cpp.h, Source/Linkage/Source/Contents/Emblems/EmblemDataMgr.cpp.h, Source/Linkage/Source/Contents/Emblems/EmblemDataUploadAsyncWork.cpp.h, Source/Linkage/Source/Contents/Emblems/GuildEmblemLookup.cpp.h, Source/Linkage/Source/Contents/Hotkeys/EmotionHotkeys.cpp.h, Source/Linkage/Source/Contents/Items/ItemInfo.cpp.h, Source/Linkage/Source/Contents/Items/ItemNaming.cpp.h, Source/Linkage/Source/Contents/Map/PrivateAirplaneMgr.cpp.h, Source/Linkage/Source/Contents/Map/TownInfoMgr.cpp.h, Source/Linkage/Source/Contents/Messenger/MessengerMember.cpp.h, Source/Linkage/Source/Contents/Messenger/WhisperBlockMgr.cpp.h, Source/Linkage/Source/Contents/Models/ModelLighting.cpp.h, Source/Linkage/Source/Contents/Movies/BinkMovies.cpp.h, Source/Linkage/Source/Contents/Navigation/NavigationDestinations.cpp.h, Source/Linkage/Source/Contents/Navigation/NavigationRequest.cpp.h, Source/Linkage/Source/Contents/Navigation/NavigationRoute.cpp.h, Source/Linkage/Source/Contents/Party/AgencyRequests.cpp.h, Source/Linkage/Source/Contents/Party/LoadPartyInfoAsyncWork.cpp.h, Source/Linkage/Source/Contents/Party/LoadPartyListAsyncWork.cpp.h, Source/Linkage/Source/Contents/Party/RegisterPartyAsyncWork.cpp.h, Source/Linkage/Source/Contents/Repute/ReputeMgr.cpp.h, Source/Linkage/Source/Contents/Sound/SoundMgr.cpp.h, Source/Linkage/Source/Contents/Store/MCStoreInfoBackup.cpp.h, Source/Linkage/Source/Contents/Store/MCStoreInfoBackupAsyncWork.cpp.h, Source/Linkage/Source/Contents/Time/ClientTiming.cpp.h, Source/Linkage/Source/Contents/UserData/AccountLinkedUserDataLoadAsyncWork.cpp.h, Source/Linkage/Source/Contents/UserData/AccountLinkedUserDataMgr.cpp.h, Source/Linkage/Source/Contents/UserData/AccountLinkedUserDataSaveAsyncWork.cpp.h, Source/Linkage/Source/Contents/UserData/CharacterConfigSave.cpp.h, Source/Linkage/Source/Contents/UserData/CharacterLinkedUserDataLoadAsyncWork.cpp.h, Source/Linkage/Source/Contents/UserData/CharacterLinkedUserDataSaveAsyncWork.cpp.h, Source/Linkage/Source/File/DirectoryRemoval.cpp.h, Source/Linkage/Source/Network/NIPAddr.cpp.h, Source/Linkage/Source/Network/Packets/ActorNamePacket.cpp.h, Source/Linkage/Source/Render/Device/RenderBackends.cpp.h, Source/Linkage/Source/Render/Primitives/ScreenLine.cpp.h, Source/Linkage/Source/Render/Text/EmbedFont.cpp.h, Source/Linkage/Source/Resource/Models/RmaResource.cpp.h, Source/Linkage/Source/Resource/ResourceFailures.cpp.h, Source/Linkage/Source/Script/LuaScript.cpp.h, Source/Linkage/Source/Security/NProtectGameGuardMgr.cpp.h, Source/Linkage/Source/UI/Acceptance/UIExchangeAcceptWnd.cpp.h, Source/Linkage/Source/UI/Achievement/UIAchWnd.cpp.h, Source/Linkage/Source/UI/Buttons/UINaviLinkButton.cpp.h, Source/Linkage/Source/UI/CashShop/UICashShopWnd.cpp.h, Source/Linkage/Source/UI/Chat/UIChatRoomTitle.cpp.h, Source/Linkage/Source/UI/Dialogs/UIMessageBox.cpp.h, Source/Linkage/Source/UI/Dialogs/UINoteWnd.cpp.h, Source/Linkage/Source/UI/Edit/UIEditCtrl3.cpp.h, Source/Linkage/Source/UI/Enchant/UIEnchantUI.cpp.h, Source/Linkage/Source/UI/EntryQueue/UIEntryQueueWnd.cpp.h, Source/Linkage/Source/UI/Events/UICheckAttendanceWnd.cpp.h, Source/Linkage/Source/UI/GameSettings/GameSettingsUI.cpp.h, Source/Linkage/Source/UI/GameSettings/UIHotkeyGuideWnd.cpp.h, Source/Linkage/Source/UI/Gauges/UIBarGraph.cpp.h, Source/Linkage/Source/UI/Guild/UIGuildHelperWnd.cpp.h, Source/Linkage/Source/UI/Items/UIEquipmentPropertiesWnd.cpp.h, Source/Linkage/Source/UI/Items/UIItemReformWnd.cpp.h, Source/Linkage/Source/UI/Items/UIItemStoreComboBox.cpp.h, Source/Linkage/Source/UI/Items/UILapineBoxWnd.cpp.h, Source/Linkage/Source/UI/Items/UIMakeTargetProcessWnd.cpp.h, Source/Linkage/Source/UI/Items/UIMerchantItemLogWnd.cpp.h, Source/Linkage/Source/UI/Items/UISwapEquipmentWnd.cpp.h, Source/Linkage/Source/UI/Lists/UIChatHisBox.cpp.h, Source/Linkage/Source/UI/Lists/UIComboBoxDefWnd.cpp.h, Source/Linkage/Source/UI/Login/UIPasswordWnd.cpp.h, Source/Linkage/Source/UI/Macro/UIMacroDetectorWnd.cpp.h, Source/Linkage/Source/UI/Navigation/NavigationLink.cpp.h, Source/Linkage/Source/UI/Party/UIApplyForPartyWnd.cpp.h, Source/Linkage/Source/UI/Party/UIRegisterPartyWnd.cpp.h, Source/Linkage/Source/UI/Party/UISeekPartyMBWnd.cpp.h, Source/Linkage/Source/UI/Quest/UIRecommendedQuestInfo.cpp.h, Source/Linkage/Source/UI/Repute/UIReputeWnd.cpp.h, Source/Linkage/Source/UI/Rodex/UIRodexComposeWnd.cpp.h, Source/Linkage/Source/UI/RuneSystem/UIRuneSystemWnd.cpp.h, Source/Linkage/Source/UI/Shop/UIMerchantShopTitle.cpp.h, Source/Linkage/Source/UI/Shortcuts/UIShortCutWnd.cpp.h, Source/Linkage/Source/UI/Skill/UIGraffiStrboxWnd.cpp.h, Source/Linkage/Source/UI/SkillDelayInfo/UISkillDelayInfo.cpp.h, Source/Linkage/Source/UI/Status/UIBasicInfoWnd.cpp.h, Source/Linkage/Source/UI/Text/ColoredText.cpp.h, Source/Linkage/Source/UI/Text/ItemLinkDisplay.cpp.h, Source/Linkage/Source/UI/Text/TextMarkup.cpp.h, Source/Linkage/Source/UI/Text/UITagTextViewer.cpp.h, Source/Linkage/Source/UI/Text/UITextViewer.cpp.h, Source/Linkage/Source/UI/Window/UIFrameWnd.cpp.h, Source/Linkage/Source/UI/Window/UIWindow.cpp.h, Source/Linkage/Source/UI/Window/UIWindowFactory.cpp.h, Source/Linkage/Source/UI/Window/WindowRegistration.cpp.h, Source/Linkage/Source/UI/Window/WindowRetirement.cpp.h, Source/Linkage/Source/Utility/Threading/NThread.cpp.h.
111 lines
3.5 KiB
C++
111 lines
3.5 KiB
C++
#include "Resource/Models/RmaResource.h"
|
|
#include "Client/Application/ErrorDialog.h"
|
|
#include "File/File.h"
|
|
#include "Render/DeviceContext/DCSurface.h"
|
|
#include "Utility/Text/Tokenizer.h"
|
|
#include "Resource/ResourceMgr.h"
|
|
|
|
#include <cstdlib>
|
|
#include <strstream>
|
|
|
|
// OFFSET: 0x007461C0
|
|
// FUNCTION: fn_07770
|
|
CRmaRes::CRmaRes() {
|
|
this->shadowZoom = 1.0f;
|
|
}
|
|
|
|
// OFFSET: 0x007467D0
|
|
// FUNCTION: fn_07778
|
|
CRmaRes::~CRmaRes() {
|
|
this->Unload();
|
|
}
|
|
|
|
// OFFSET: 0x007446F0
|
|
// FUNCTION: fn_07753
|
|
CRmaRes* CRmaRes::Create() {
|
|
return new CRmaRes;
|
|
}
|
|
|
|
// OFFSET: 0x00744820
|
|
// FUNCTION: fn_07754
|
|
bool CRmaRes::Load(const char* name) {
|
|
CTokenizer tokenizer;
|
|
CFile file;
|
|
file.Open(name, 0, true, false);
|
|
const std::uint32_t size = file.GetSize();
|
|
char* buffer = new char[size + 1];
|
|
file.Read(buffer, size);
|
|
file.Close();
|
|
buffer[size] = '\0';
|
|
|
|
const char rsxNameTag[] = {'#', 'r', 's', 'x', 'n', 'a', 'm', 'e', '\0'};
|
|
const char actionTag[] = {'#', 'a', 'c', 't', 'i', 'o', 'n', '\0'};
|
|
std::istrstream stream(buffer);
|
|
int model = -1;
|
|
while (stream) {
|
|
tokenizer.Parse(stream);
|
|
if (tokenizer.tokens.size() == 0 || tokenizer[0].size() == 0) {
|
|
continue;
|
|
}
|
|
|
|
if (tokenizer[0] == rsxNameTag) {
|
|
++model;
|
|
this->models.resize(model + 1);
|
|
this->models[model] = tokenizer[1];
|
|
} else if (tokenizer[0] == actionTag) {
|
|
const unsigned int action = std::atoi(tokenizer[1].c_str());
|
|
if (action >= this->actions.size()) {
|
|
this->actions.resize(action + 1);
|
|
this->actionModels.resize(action + 1);
|
|
}
|
|
|
|
if (this->actions[action].startFrame != -1) {
|
|
ShowErrorDialog("중복되는 액션이 있음", 0);
|
|
}
|
|
|
|
this->actions[action].delay = std::atoi(tokenizer[2].c_str());
|
|
this->actions[action].startFrame = std::atoi(tokenizer[3].c_str());
|
|
this->actions[action].endFrame = std::atoi(tokenizer[4].c_str());
|
|
if (static_cast<int>(tokenizer.tokens.size()) >= 6) {
|
|
this->actions[action].frames.resize(static_cast<int>(tokenizer.tokens.size()) - 5);
|
|
for (int frame = 0; frame < static_cast<int>(tokenizer.tokens.size()) - 5; ++frame) {
|
|
this->actions[action].frames[frame] = std::atoi(tokenizer[frame + 5].c_str());
|
|
}
|
|
}
|
|
|
|
this->actionModels[action] = model;
|
|
} else if (tokenizer[0] == "#interiorzoom") {
|
|
this->interiorZoom = static_cast<float>(std::atof(tokenizer[1].c_str()));
|
|
} else if (tokenizer[0] == "#interioroffsetx") {
|
|
this->interiorOffsetX = std::atoi(tokenizer[1].c_str());
|
|
} else if (tokenizer[0] == "#interioroffsety") {
|
|
this->interiorOffsetY = std::atoi(tokenizer[1].c_str());
|
|
} else if (tokenizer[0] == "#interiorframes") {
|
|
this->interiorFrameStart = std::atoi(tokenizer[1].c_str());
|
|
this->interiorFrameEnd = std::atoi(tokenizer[2].c_str());
|
|
} else if (tokenizer[0] == "#shadowzoom") {
|
|
this->shadowZoom = static_cast<float>(std::atof(tokenizer[1].c_str()));
|
|
} else {
|
|
ShowErrorDialog("Syntax Error in Rma", 0);
|
|
}
|
|
}
|
|
|
|
delete[] buffer;
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x00745190
|
|
// FUNCTION: fn_07755
|
|
void CRmaRes::Unload() {
|
|
this->actions.erase(this->actions.begin(), this->actions.end());
|
|
this->models.erase(this->models.begin(), this->models.end());
|
|
this->actionModels.erase(this->actionModels.begin(), this->actionModels.end());
|
|
}
|
|
|
|
// INLINED
|
|
CRmaRes::CRmaRes(const char* extension, const char* prefix) {
|
|
ResourceMgr::Instance().Register(extension, prefix, this);
|
|
}
|
|
|
|
// GLOBAL: gl_25547
|
|
CRmaRes g_rmaPrototype("rma", "model\\");
|