Season 9 main + IGC released DLL source
"Hell" ... Credits
VICIOUS - Me
IGCN - released DLL source
Webzen Season 9 Main
Fix 0.2 :
- Fix broken OnConstructs
- Add missing hide Reset/GReset Boxes funtions.
Fix 0.1 :
- Fix editable textarea.
- Add change text MLV , Reset, GReset
Updated Link : https://drive.google.com/open?id=1n4EnfrtnbtK_w7gbk9nXg_NsDNR50qhe
(Script update, update red lines in CharacterFrame.cpp code)
1st. Paste this new UI file to Data\Interface\GFx
2nd. Coding :
(create) CharacterFrame.h
Code:
#pragma once
#define HOOK_SET_LEVEL_TEXT 0x009A90B1
#define JMPBACK_SET_LEVEL_TEXT 0x009A90CA
#define pInvokeUI ((DWORD(__stdcall*)(DWORD pFrame, char * method, char * format ...)) 0x0095A6EA)
void SetLevelResetUI();
extern int iResetVisibleUI;
extern int iGResetVisibleUI;
extern int iResetUI;
extern int iGResetUI;
(create) CharacterFrame.cpp
Code:
#include "stdafx.h"
#include "CharacterFrame.h"
char szFormat_1[4] = "%s";
char szFormat_2[4] = "%d";
char szFormat_3[12] = "%s %s %s";
char szSetLevel[16] = "SetLevelText";
char szSetMLevel[16] = "SetMLevelText";
char szSetReset[16] = "SetResetText";
char szSetGReset[16] = "SetGResetText";
char szSetResetVisible[20] = "SetResetVisible";
char szSetGResetVisible[20] = "SetGResetVisible";
int iResetVisibleUI = 1; //0:false 1:true
int iGResetVisibleUI = 1;
DWORD pCFrame;
int iLevel = 0;
int iMLevel = 0;
int iResetUI = 0;
int iGResetUI = 0;
char buffer[20];
int iInitOnce = 0;
char szInitTextExtended[20] = "InitTextExtended";
char szLabelMLevel[] = "MLV"; //Change text here, but don't make it too long, won't fit the box.
char szLabelReset[] = "Reset";
char szLabelGReset[] = "GReset";
void __declspec(naked) SetLevelResetUI()
{
_asm
{
mov eax, 0x0851ACC4;
mov eax, [eax];
movzx eax, word ptr[eax + 0x10C];
mov iLevel, eax;
mov eax, 0x08B97850
movzx eax, word ptr[eax];
mov iMLevel, eax;
mov edx, 0x00969F14;
call edx;
mov ecx, eax;
mov edx, 0x007F7818;
call edx;
mov pCFrame, eax;
}
if(pCFrame)
{
if (!iInitOnce) {
iInitOnce = 1;
pInvokeUI(pCFrame, szInitTextExtended, szFormat_3, szLabelMLevel, szLabelReset, szLabelGReset);
}
sprintf(buffer, "%d", iLevel);
pInvokeUI(pCFrame, szSetLevel, szFormat_1, buffer);
sprintf(buffer, "%d", iMLevel);
pInvokeUI(pCFrame, szSetMLevel, szFormat_1, buffer);
if (iResetVisibleUI) {
sprintf(buffer, "%d", iResetUI);
pInvokeUI(pCFrame, szSetReset, szFormat_1, buffer);
}
else {
pInvokeUI(pCFrame, szSetResetVisible, szFormat_2, 0);
}
if (iGResetVisibleUI) {
sprintf(buffer, "%d", iGResetUI);
pInvokeUI(pCFrame, szSetGReset, szFormat_1, buffer);
}
else {
pInvokeUI(pCFrame, szSetGResetVisible, szFormat_2, 0);
}
}
_asm
{
mov edx, JMPBACK_SET_LEVEL_TEXT;
jmp edx;
}
}
(Edit) DllMain.cpp
Code:
#include "CharacterFrame.h"
//...
void SetHook()
{
HookThis((DWORD)&SetLevelResetUI, HOOK_SET_LEVEL_TEXT);
//...
}
(Edit) Protocol.cpp
Code:
#include "CharacterFrame.h"
//...
bool CliProtocolCore(LPBYTE aRecv, BYTE ProtoNum, int len, bool Encrypt)
{
switch(ProtoNum)
{
//...
case 0xFA:
{
if (aRecv[0] == 0xC1)
{
PMSG_DEFAULT2 * lpMsg2 = (PMSG_DEFAULT2 *)aRecv;
switch (lpMsg2->subcode)
{
case 0x0B: //IGCN already coded this on GameServer (they used it for Season 6, but still keep in file till now (S13))
{
struct PMSG_RESET_INGAME_SEND
{
PBMSG_HEAD2 h;
WORD Resets;
}; //Should move this struct to your header file.
PMSG_RESET_INGAME_SEND * pRSMsg = (PMSG_RESET_INGAME_SEND *)aRecv;
iResetUI = pRSMsg->Resets;
iResetVisibleUI = 1;
break;
}
}
}
}
}