Quantcast
Channel: RaGEZONE - MMO Development Forums
Viewing all articles
Browse latest Browse all 32958

[ XMAS 2018 ] Client Edits

$
0
0
Yoooooo Merry Christmas /f425/ :thumbup1:

Since September I got back into maple and have been working on my from scratch v95 server and client. I've learned so much and got making localhost enablers down to a science for every version using GG and HS.

I'll release all that stuff once I get hit by that Nexon lawsuit :lol:

But in the meantime here are some fun client edits you can use !!!

Also check out my analysis of v95 AntiHack: https://github.com/RajanGrewal/MapleResearch



Lie Detector Fix : http://forum.ragezone.com/f921/xmas-...ector-1157154/




ZXString is really a struct but we can get away with doing this for most things
Code:

#define ZXString        char*
PatchRetZero Function

Code:

xor eax,eax
ret

StringPool Hook

Code:

bool Hook_StringPool__GetString(bool enable){    typedef ZXString*(__fastcall* StringPool__GetString_t)(void* ecx, void* edx, ZXString* result, unsigned int nIdx, char formal);    static auto StringPool__GetString = reinterpret_cast<StringPool__GetString_t>(0xBADF00D);    StringPool__GetString_t Hook = [](void* ecx, void* edx, ZXString* result, unsigned int nIdx, char formal) -> ZXString*    {        auto ret = StringPool__GetString(ecx, edx, result, nIdx, formal);        //Replace the strings here!!!        if (nIdx == 2722) //Ranking URL for the ingame WebBrowser        {            strcpy(*ret, "http://rebirth.ms");        }        //Log("StringPool__GetString: %s\r\n", *result);        return ret;    };    return SetHook(enable, reinterpret_cast<void**>(&StringPool__GetString), Hook);}
Attack without a weapon (punch) | Credits to VirtualKernel for the idea
Code:

bool Hook_CUserLocal__CanUseBareHand(bool enable){    typedef int(__fastcall* CUserLocal__CanUseBareHand_t)(LPVOID lpvClassPtr, LPVOID lpvEdx);    static auto CUserLocal__CanUseBareHand = reinterpret_cast<CUserLocal__CanUseBareHand_t>(0xBADF00D);    CUserLocal__CanUseBareHand_t Hook = [](void* ecx, void* edx) -> int    {        return 1;    };    return SetHook(enable, reinterpret_cast<void**>(&CUserLocal__CanUseBareHand), Hook);}
Implement your own custom HWID
Code:

struct CSystemInfo{    void *vfptr;    char SupportId[16];    char MachineId[16];};bool Hook_CSystemInfo__Init(bool enable){    typedef int(__fastcall* CSystemInfo__Init_t)(CSystemInfo* lpvClassPtr, LPVOID lpvEdx);    static auto CSystemInfo__Init = reinterpret_cast<CSystemInfo__Init_t>(0xBADF00D);    CSystemInfo__Init_t Hook = [](CSystemInfo* ecx, void* edx) -> int    {        auto ret = CSystemInfo__Init(ecx, edx);        //Replace the struct values here!!!        return ret;    };    return SetHook(enable, reinterpret_cast<void**>(&CSystemInfo__Init), Hook);}
Custom MapleTips
Code:

bool Hook_CTips__GetTip(bool enable){    typedef int(__fastcall* CTips__GetTip_t)(LPVOID lpvClassPtr, LPVOID lpvEdx, int nJob, int nLevel, ZXString* sTip);    static auto CTips__GetTip = reinterpret_cast<CTips__GetTip_t>(0xBADF00D);    CTips__GetTip_t Hook = [](LPVOID lpvClassPtr, LPVOID lpvEdx, int nJob, int nLevel, ZXString* sTip)-> int    {        int ret = CTips__GetTip(lpvClassPtr, lpvEdx, nJob, nLevel, sTip);        if (ret)        {            //Edit the MapleTip in here!!!            Log("CTips__GetTip: %s", *sTip);        }        return ret;    };    return SetHook(enable, reinterpret_cast<void**>(&CTips__GetTip), Hook);}
Unlimited Attack
Code:

bool Hook_CAntiRepeat__TryRepeat(bool enable){    typedef int(__fastcall* CAntiRepeat__TryRepeat_t)(LPVOID lpvClassPtr, LPVOID lpvEdx, int nX, int nY);    static auto CAntiRepeat__TryRepeat = reinterpret_cast<CAntiRepeat__TryRepeat_t>(0xBADF00D);    CAntiRepeat__TryRepeat_t Hook = [](LPVOID lpvClassPtr, LPVOID lpvEdx, int nX, int nY)-> int    {        return 1; //Can attack    };    return SetHook(enable, reinterpret_cast<void**>(&CAntiRepeat__TryRepeat), Hook);}
Logo Skipper
Code:

PatchNop(g_CLogo__Init_Skip, 16);
Essentially it nops the if statement here so the body executes
Code:

if ( sPasswd._m_pStr && *sPasswd._m_pStr && TSingleton<CWvsApp>::ms_pInstance->m_bAutoConnect )

    CLogo::LogoEnd(v2, (int)sPasswd._m_pStr);

No Fades ( Map Loads Faster )
Code:

PatchRetZero(g_CStage__FadeIn);


PatchRetZero(g_CStage__FadeOut);

GodMode
Code:

PatchRetZero(g_CUserLocal__SetDamaged);
Shorten Whisper Sending IntervalJust look in the func and locate where the 3000 const is
Code:

WriteValue(g_CField__Update_WhisperDelay, 50); //3000ms delay on sending whispers to 50ms
Skip the "You have unused SP message"The start is the block that checks if you're a GM. If that if statement returns true the body jumps to a block that send the skill request. Start is the first jnz after first cmp. End is the goto inside the if statement
Code:

PatchJmp(g_CUISkill__OnSkillLevelUpButton_Start,
(void*)g_CUISkill__OnSkillLevelUpButton_End);







Yooooo also you can embed your own win32 dialogs into the games CWnd's . But I'll leave that do you guys to figure out :P:

If you have any good quality of life patches you'd like to see let me know maybe ill code it!!!

Credits would always be appreciated if you used these but I doubt y'all gon do that.

Holla @ me if you need someone to create a custom client for your server :thumbup1:


Merry Christmas.

Viewing all articles
Browse latest Browse all 32958

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>