#ifndef RAGNAROK_SOURCE_CLIENT_MODE_CGAMEMODE_H #define RAGNAROK_SOURCE_CLIENT_MODE_CGAMEMODE_H #include "Client/Mode/CMode.h" #include "Client/Mode/ModeDragState.h" #include "Contents/ActorNameCard.h" #include #include #include #include #include #include #include #include class CView; class CCorpse; class CMsgEffect; class CGameActor; class CPlayer; struct ActorNameAllPacket; struct GameOptionEntry; struct CWorld; struct TextureRegion; struct MiniMapMember { /* 0000 */ int x; /* 0004 */ int y; /* 0008 */ std::uint32_t color; }; struct MiniMapPing { /* 0000 */ int x; /* 0004 */ int y; /* 0008 */ int persistent; /* 000C */ std::uint32_t color; /* 0010 */ std::uint32_t tick; }; struct MinimapMarker { /* 0000 */ std::int16_t unknown_0000; /* 0002 */ std::int16_t unknown_0002; /* 0004 */ std::int16_t unknown_0004; /* 0006 */ std::int16_t unknown_0006; }; class CGameMode : public CMode { public: /* 0058 */ unsigned char unknown_0058[0x10]; /* 0068 */ char mapName[16]; /* 0078 */ unsigned char unknown_0078[0x54]; /* 00CC */ CWorld* scene; /* 00D0 */ CView* camera; /* 00D4 */ unsigned char unknown_00D4[0x28]; /* 00FC */ int unknown_00FC; /* 0100 */ unsigned char unknown_0100[0x18]; /* 0118 */ std::string unknown_0118; /* 0130 */ unsigned char unknown_0130[0x30]; /* 0160 */ CActorNameCardHolder nameCard; /* 0194 */ std::map unknown_0194; /* 019C */ std::map> unknown_019C; /* 01A4 */ std::list unknown_01A4; /* 01AC */ std::map unknown_01AC; /* 01B4 */ std::map unknown_01B4; /* 01BC */ std::map unknown_01BC; /* 01C4 */ std::map unknown_01C4; /* 01CC */ unsigned char unknown_01CC[0x24]; /* 01F0 */ std::map minimapMarkers; /* 01F8 */ unsigned char unknown_01F8[0x9C]; /* 0294 */ char unknown_0294[0x20]; /* 02B4 */ UIWindow* itemWindow; /* 02B8 */ unsigned char unknown_02B8[0x28]; /* 02E0 */ int unknown_02E0; /* 02E4 */ unsigned char unknown_02E4[0x08]; /* 02EC */ std::string unknown_02EC; /* 0304 */ unsigned char unknown_0304[0x04]; /* 0308 */ ModeDragState drag; /* 03C8 */ std::string unknown_03C8; /* 03E0 */ std::string unknown_03E0; /* 03F8 */ int unknown_03F8; /* 03FC */ int unknown_03FC; /* 0400 */ int unknown_0400; /* 0404 */ int unknown_0404; /* 0408 */ unsigned char unknown_0408[0x50]; /* 0458 */ int unknown_0458; /* 045C */ unsigned char unknown_045C[0x80]; /* 04DC */ std::string unknown_04DC; /* 04F4 */ unsigned char unknown_04F4[0xD0]; /* 05C4 */ int unknown_05C4; /* 05C8 */ int unknown_05C8; /* 05CC */ unsigned char unknown_05CC[0x02]; /* 05CE */ unsigned char unknown_05CE; /* 05CF */ unsigned char unknown_05CF; /* 05D0 */ UIWindow* unknown_05D0; /* 05D4 */ unsigned char unknown_05D4[0x30]; /* 0604 */ std::list unknown_0604; /* 060C */ unsigned char unknown_060C[0x1C]; /* 0628 */ std::unordered_set unknown_0628; /* 0648 */ unsigned char unknown_0648[0x28]; std::string MapName(); void WorldCell(float x, float z, int& column, int& row) const; void SubcellPosition(int column, int row, int subColumn, int subRow, float& x, float& z) const; void PlayerCell(int* column, int* row) const; bool CanFindPath(int sx, int sy, int cellX, int cellY, int dx, int dy); bool IsAllowedPair(int kind, int value); bool IsWithinRange(const int& x1, const int& y1, const int& x2, const int& y2, int range); bool IsRegisterCell(int x, int y); bool HasUnknown01A4(int value); void ReceiveActorNameAll(const ActorNameAllPacket* packet); void ReceiveColoredNotice(const unsigned char* packet); void ReceiveActorText(const unsigned char* packet); void ReceiveRentalItemTime(const unsigned char* packet); void ReceiveActorSequenceDeadline(const unsigned char* packet); void ReceiveActorSignal(const unsigned char* packet); void IgnorePacket(const unsigned char* packet); void ReceiveItem1738EquipList(const unsigned char* packet); void ReceiveItem1738EquipListOptions(const unsigned char* packet); void ReceiveItem1738NormalList(const unsigned char* packet); void ReceiveHomunculusProperty64(const unsigned char* packet); void ReceiveHomunculusProperty(const unsigned char* packet); void ReceiveHuntingList(const unsigned char* packet); void ReceiveEquipAck(const unsigned char* packet); void ReceiveToggleNotice(const unsigned char* packet); void ReceivePendingResult(const unsigned char* packet); void ReceivePetAct(unsigned char* packet); void PlayBgm(unsigned char type, std::string name); void ReceiveNpcBgm(const unsigned char* packet); void IgnoreRemovedPacket1(const unsigned char* packet); void IgnoreRemovedPacket2(const unsigned char* packet); void ReceiveBillingInfo(const unsigned char* packet); void ReceiveActorMessage32(const unsigned char* packet); void ReceiveStatusNotice(const unsigned char* packet); void ReceivePartyBookingRegisterResult(const unsigned char* packet); void ReceivePartyBookingSearchResult(const unsigned char* packet); void ReceivePartyBookingDelete(const unsigned char* packet); void ReceivePartyBookingInsert(const unsigned char* packet); void ReceivePartyBookingUpdate(const unsigned char* packet); void ReceiveWindow181Message(const unsigned char* packet); void ReceiveNamedResultNotice(const unsigned char* packet); void ReceiveResultNotice0118(const unsigned char* packet); bool NotifyItemResult(int result); void NotifyItemBounds(); CCorpse* SpawnCorpse(float x, float y, float z, const char* action, const char* sprite, int animation, int motion, float angle); bool LaunchTargetEffect(int effectId, CGameActor* source, CGameActor* target, int argument); void ShowGuildEmblem(CGameActor* actor, int guildId, int unused); void RemoveUnknown0604(int window); CMsgEffect* SpawnCashEmotion(int aid, int packId, int emotionId, std::uint32_t duration); void ApplyMapFog(int enabled); void SpawnGrannyCorpse(float x, float y, float z, float angle, const char* name); void SpawnMandraAttack(std::uint32_t aid, int target, char flag); std::uint32_t FindUnknown01AC(std::uint32_t key); std::string ActorName(std::uint32_t id); std::uint32_t ActorNameColor(int job, std::uint32_t aid); const CActorNameCard& LookupNameCard(std::uint32_t id); const char* DragItemName(); void PushUnknown01A4(int value); bool IsOverWeight(bool notify); void CompleteUnknown0194(std::uint32_t id, const std::string& text); std::string GetActiveSkillEffectTimeText(int skillId, int* activeSkillId); bool IsActiveSkillEffectId(std::uint32_t id); bool IsExcludedSkillEffectId(std::uint32_t id); int SubD07740(int id, int defaultResult); bool AppendGuildEmblem(std::vector& output, std::vector& names, int guildId, int unused); void ReceiveResultNotice(int result); void RefreshWindow16(const unsigned char* packet); void ReceiveWindow154Close(std::int16_t value); void MoveWindow16(int x, int y); void ResizeWindow16(int width, int height); void ReceiveNotice1950(const unsigned char* packet); void ReceiveActorPairFreeze(const unsigned char* packet); void ReceiveEffectRemove(const unsigned char* packet); void ReceiveActorEffect347(const unsigned char* packet); void ReceiveUnknown0294Text(const unsigned char* packet); void ReceiveToggle128(int enabled); void PlaceWindow16(unsigned int xPercent, unsigned int yPercent); void ReceiveUnknown7FBC(const unsigned char* packet); void ReceiveActorMessage144(const unsigned char* packet); void StopActorMove(std::uint32_t aid, std::int16_t x, std::int16_t y, unsigned char flag); void NotifyResult4138(int result); void NotifyResult2877(int result); void ReceiveRodexMailDeleted(const unsigned char* packet); void NotifyResult3562(const unsigned char* packet); void IgnoreRemovedPacket6(); void ReceiveRouletteResult(const unsigned char* packet); void NotifyResult4013(unsigned char result, unsigned short value); void ReceiveGuildUnknown0114List(const unsigned char* packet); void ReceiveClanLeave(const unsigned char* packet); void ReceiveClanInfo(const unsigned char* packet); void ReceiveGameOptions(int count, const GameOptionEntry* entries); void ReceiveActorClanName(const unsigned char* packet); void ReceiveClanMemberCount(const unsigned char* packet); void ReceiveGuildEmblemVersion(std::uint32_t aid, int guildId, int emblemVersion); int RejectRequest(int, int, int, int, int); void EnsureWindow259(const unsigned char* packet); void ReceiveRuneActivation(const unsigned char* packet); void ReceiveRuneSetGrades(const unsigned char* packet); void ReceiveRuneRewardResult(int result, int tagId, std::int64_t id, int step); void ReceiveRuneRewardSteps(const unsigned char* packet); void NotifyWindow4F258(int result); void ReceiveNamedResult(std::uint32_t aid, std::string name, int result); void ReceiveBasicInfoResult(unsigned char result); void ReceiveUnknown0454Result(const unsigned char* packet); std::string MakeSimulatorFolder(const std::string& folder); std::FILE* OpenPackageSimulatorFile(const std::string& folder, int itemId, std::string& itemName); std::FILE* OpenSimulatorFile(const std::string& folder, const std::string& name); void ReceiveRandomUpgradeSimulation(const unsigned char* packet); void ReceiveEnchantSimulation(const unsigned char* packet); void ReceivePackageSimulation(const unsigned char* packet); void ReceiveWindow154Result(std::int16_t value); void ReceivePlayerDuration(const unsigned char* packet); void ReceiveFailureNotice(const unsigned char* packet); void ReceiveServerRateNotice(const unsigned char* packet); void ReceiveRequestResult(const unsigned char* packet); void ReceivePackageItemTest(const unsigned char* packet); void ReceiveDeferredReset(const unsigned char* packet); void ReceiveGradeEnchantResult(const unsigned char* packet); void UpdateUnknown0628(int id, bool add); void ClearUnknown0458(); void SetDragIds(int source, int id); const char* Unknown04DCText(); CPlayer* Player(); MinimapMarker* FindMinimapMarker(std::uint32_t key); float CameraDesiredYaw(); void IgnoreRemovedPacket3(const unsigned char* packet); void IgnoreRemovedPacket4(const unsigned char* packet); void IgnoreRemovedPacket5(const unsigned char* packet); void IgnoreRemovedPacket7(const unsigned char* packet); void IgnoreRemovedPacket8(); void IgnoreRemovedPacket9(); void IgnoreRemovedPacket10(const unsigned char* packet); void IgnoreRemovedPacket11(const unsigned char* packet); void IgnoreRemovedPacket12(const unsigned char* packet, int value1, int value2, int value3, int value4); void ToggleWindow169(unsigned char enable); void RequestWindow169(unsigned char enable); void ShowNoticeText(std::string text); void ReceiveItem1738Add(const unsigned char* packet); void ReceiveItem1738AddOptions(const unsigned char* packet); void ReceiveItem1738AddGrade(const unsigned char* packet); void ReceiveItem1740Add(const unsigned char* packet); void ReceiveItem1740AddOptions(const unsigned char* packet); void ReceiveItem1740AddGrade(const unsigned char* packet); void ReceiveUnknown05C4Result(const unsigned char* packet); void ReceiveHpSpRecovery(const unsigned char* packet, int variant); void ReceiveUnknown173A5BC(const unsigned char* packet); void ReceiveUnknown16FC588(const unsigned char* packet); void ResetItemLists(const unsigned char* packet); void StepTowardWalkableCell(const int& targetX, const int& targetY, int& x, int& y); void FindWalkableCellToward(float x, float z, float originX, float originZ, int& column, int& row, int distance); void RemoveMiniMapPing(std::uint32_t id); void DrawMiniMapMembers(const TextureRegion& view); void DrawMiniMapTriangle(float x, float y, float size, std::uint32_t color); void DrawMiniMapMarker( const TextureRegion& view, int x, int y, int size, std::string texture, int kind, std::uint32_t color, bool clamp ); void ReceiveGradeEnchantInfo(const unsigned char* packet); void ReceivePartyItemPickup(const unsigned char* packet); void NotifyResult3995(unsigned char result); void ReceiveActorEffect228(const unsigned char* packet); void ResendMinimapMarkers(); void ReceiveJobTitle(unsigned char result, int job); void ReceiveQuestStates(int count, const unsigned char* entries); void ReceiveMessageBox(const unsigned char* packet); void NotifyCaptchaRegistered(); void ReceiveItem1784List(const unsigned char* packet); void ReceiveItemListPart(unsigned char listType, int count, const unsigned char* data); void ClearItemLists(const unsigned char* packet); void RefreshItemListWindow(unsigned char listType, bool partial); void sub_CEB8E0(); }; #if defined(_WIN32) && !defined(_WIN64) static_assert(offsetof(CGameMode, mapName) == 0x68); static_assert(offsetof(CGameMode, unknown_0194) == 0x194); static_assert(offsetof(CGameMode, unknown_019C) == 0x19C); static_assert(offsetof(CGameMode, unknown_01A4) == 0x1A4); static_assert(offsetof(CGameMode, unknown_01AC) == 0x1AC); static_assert(offsetof(CGameMode, unknown_0118) == 0x118); static_assert(offsetof(CGameMode, scene) == 0xCC); static_assert(offsetof(CGameMode, camera) == 0xD0); static_assert(offsetof(CGameMode, nameCard) == 0x160); static_assert(offsetof(CGameMode, unknown_01BC) == 0x1BC); static_assert(offsetof(CGameMode, unknown_01C4) == 0x1C4); static_assert(offsetof(CGameMode, minimapMarkers) == 0x1F0); static_assert(offsetof(CGameMode, unknown_0294) == 0x294); static_assert(offsetof(CGameMode, drag) == 0x308); static_assert(offsetof(CGameMode, unknown_05C4) == 0x5C4); static_assert(offsetof(CGameMode, unknown_05D0) == 0x5D0); static_assert(offsetof(CGameMode, unknown_0604) == 0x604); static_assert(offsetof(CGameMode, unknown_0628) == 0x628); static_assert(sizeof(CGameMode) == 0x670); #endif #endif