From 4bdd1ad0d96f6eb0d7cd7ddbe28caa67bf2b11ff Mon Sep 17 00:00:00 2001 From: yangzhi <@4F!xZpJwly&KbWq> Date: Thu, 17 Oct 2019 13:51:03 +0800 Subject: [PATCH] Adjust patch logic --- UnlockMapIconMod/main.cpp | 79 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 3 deletions(-) diff --git a/UnlockMapIconMod/main.cpp b/UnlockMapIconMod/main.cpp index cb02bef..9a687c2 100644 --- a/UnlockMapIconMod/main.cpp +++ b/UnlockMapIconMod/main.cpp @@ -1,7 +1,80 @@ #include "main.h" #include "../cwmods/cwmods.h" -EXPORT int HandleCheckMapIconVisibility(cube::Creature* player, int a2, int a3) { - // 1: visible, 0: origin logic - return 1; +#define MAP_ICON_DISPLAY_JUMP_OFFSET 0x5F6AE +#define MAP_TAG_DISPLAY_JUMP_OFFSET 0x283CE8 + +#define OP_JMP 0xEB +#define OP_JNZ 0x75 +// 0F 84 +#define OP_JZ 0x84 +// 0F 80 +#define OP_JO 0x80 + +void ModMessage(const wchar_t* message) { + cube::Game* game = cube::GetGame(); + game->PrintMessage(L"["); + game->PrintMessage(L"UnlockMapIconMod", 255, 140, 0); + game->PrintMessage(L"] "); + game->PrintMessage(message); +} + +void MapIconSwtich(int i) { + if(!i) { + WriteByte( CWBase() + MAP_ICON_DISPLAY_JUMP_OFFSET, OP_JNZ); + } + else { + WriteByte( CWBase() + MAP_ICON_DISPLAY_JUMP_OFFSET, OP_JMP); + } +} + +void MapTagSwtich(int i){ + if(!i) { + WriteByte( CWBase() + MAP_TAG_DISPLAY_JUMP_OFFSET, OP_JO); + } + else { + WriteByte( CWBase() + MAP_TAG_DISPLAY_JUMP_OFFSET, OP_JZ); + } +} + +EXPORT int HandleChat(wchar_t* msg) { + wchar_t response[256]; + int state; + + if ( swscanf(msg, L"/map ico %d", &state) == 1) { + MapIconSwtich(state); + if(state == 0) { + ModMessage(L"Map icon always display: off.\n"); + return 1; + } + ModMessage(L"Map icon always display: on.\n"); + return 1; + + } else if ( swscanf(msg, L"/map tag %d", &state) == 1) { + MapTagSwtich(state); + if(state == 0) { + ModMessage(L"Map tag always display: off.\n"); + return 1; + } + ModMessage(L"Map tag always display: on.\n"); + return 1; + + } else if ( swscanf(msg, L"/map all %d", &state) == 1) { + MapIconSwtich(state); + MapTagSwtich(state); + if(state == 0) { + ModMessage(L"Map mark always display: off.\n"); + return 1; + } + ModMessage(L"Map mark always display: on.\n"); + return 1; + + } + return 0; +} + + +EXPORT void ModInitialize() { + MapIconSwtich(1); + MapTagSwtich(1); }