【老外作品】vc6.0写的内联汇编,汇编篇幅巨大,格式参考学习

// rm3944.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

DWORD SkillsMemAddr = 0;

DWORD DecreaseMP = 0x004396E0;
DWORD DoSkillEffect = 0x0042B2D0;
DWORD FindUser = 0x00488170;
DWORD GetMinSETimer = 0x0042D8E0;
DWORD OnSkillEffectExpired = 0x0042CB70;
DWORD InitAttackMinPercent = 0x00434A70;
DWORD DecreaseHPUser = 0x00439220;
DWORD SendHPInfo = 0x00439C00;
DWORD InitEquipment = 0x004352D0;
DWORD SendSPInfo = 0x00439F10;
DWORD SendDPInfo = 0x00439D10;
DWORD IncreaseHP = 0x00439140;	
DWORD IncreaseMP = 0x004396A0;
DWORD IncreaseSP = 0x00439760;
DWORD GetItemInfo = 0x00484E80;
DWORD ServerSendMessage = 0x0043FC10;
DWORD FormatString = 0x0040858A;//mapcenter func
DWORD FormatStringMapServer = 0x00489B2C;
DWORD FindArmy = 0x0048F4B8;
DWORD SendArmyChat = 0x00473AE0;
DWORD StringFunc = 0x00489B32;
DWORD IsWar = 0x004644B0;
DWORD GetGroupExperienceState = 0x00461B50;
DWORD GetMemberInfo = 0x004079F0;
DWORD IsInManagementRect = 0x00471950;
DWORD AccNum = 150;
DWORD AccBuf = 0;
DWORD SLBuf = 0;
char ChatString[7] = "%s%c%s";
char ChatString2[3] = "%d";
char SLString[13] = "%d:%d:%d:%d.";



BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{



// 这个主函数里面居然是空的 


    return TRUE;
}





 __declspec(dllexport naked) void NewGlobalAllocMemForSkills() // allocating 48000 bytes to store new skills' IDs and timers. 96 bytes for each character on map, 500 characters max on same map at same time. If you need more be sure to change 48000 to something higher IN ALL FUNCTIONS.
{
	__asm
	{
		MOV DWORD PTR [EBP-0x6C],EAX //st
		LEA EAX,DWORD PTR [EBP-0x6C] //st
		pushad
	}
	SkillsMemAddr = (DWORD)VirtualAlloc(NULL,48000,MEM_COMMIT,PAGE_READWRITE);
	if (SkillsMemAddr == 0)
	{
		ExitProcess(GetLastError());
	}
	__asm
	{
		popad
		retn
	}
}

 __declspec (dllexport naked) void  NewUserAllocMemForSkills()// allocating 96 bytes for a specific character that just logged on map to store new skills for him.
{
	__asm
	{
		ADD ECX,-0x2E //st
		ADD EDX,0x2E //st
		push eax
		push ecx
		push ebx
		push edi
		xor eax, eax
		mov ebx, dword ptr [SkillsMemAddr]

		checkfree:
		cmp dword ptr [ebx],0
		je bindmemory
		add ebx,96
		add eax,96
		cmp eax,48000
		ja exit1
		jmp checkfree

		bindmemory:
		mov dword ptr [ebx], ebp
		mov eax,0
		mov ecx,92
		lea edi, dword ptr [ebx + 4]
		REP STOS BYTE PTR ES:[EDI]
exit1:
		pop edi
		pop ebx
		pop ecx
		pop eax
		retn
	}
}

 __declspec(dllexport naked) void NewUserReleaseMemForSkills()// clearing a spot in memory for next character after some character logs out/changes map. 
{
	__asm
	{
		LEA ECX,DWORD PTR [ESI+0x44F8] //st
		push eax
		push ebx
		xor eax,eax
		mov ebx, dword ptr [SkillsMemAddr]

		findcharid:
		cmp dword ptr [ebx],esi
		je freememory
		add eax,96
		add ebx,96
		cmp eax,48000
		ja exit1
		jmp findcharid

		freememory:
		mov dword ptr [ebx], 0
exit1:
		pop ebx
		pop eax
		retn
	}
}

 __declspec(dllexport naked) void NewGetSkillSpirit()// 3.9/4.4 skills spirit requirement.
{
	__asm
	{
		MOV ECX,DWORD PTR [ESP+8] //stm
		XOR EAX,EAX //st
		cmp ecx, 59
		je chainreactionfix
		cmp ecx, 306
		je phil39
		cmp ecx,307
		je phil39
		cmp ecx,308
		je phil44
		cmp ecx,309
		je phil44
		cmp ecx, 316
		je az39
		cmp ecx, 317
		je az39
		cmp ecx, 318
		je az44
		cmp ecx, 319
		je az44
		cmp ecx, 322
		je sad39
		cmp ecx, 323
		je sad39
		cmp ecx, 324
		je sad44
		cmp ecx, 325
		je sad44
		cmp ecx, 333
		je des39
		cmp ecx, 334
		je des39
		cmp ecx, 335
		je des44
		cmp ecx, 336
		je des44
		cmp ecx, 49
		je jar39
		cmp ecx, 50
		je jar39
		cmp ecx, 341
		je jar44
		cmp ecx, 342
		je jar44
		cmp ecx, 60
		je can39
		cmp ecx, 351
		je can39
		cmp ecx, 352
		je can44
		cmp ecx, 353
		je can44
		cmp ecx, 374
		je kit39
		cmp ecx, 375
		je kit39
		cmp ecx, 376
		je kit44
		cmp ecx, 377
		je kit44
		cmp ecx, 362
		je lun39
		cmp ecx, 363
		je lun39
		cmp ecx, 364
		je lun44
		cmp ecx, 365
		je lun44
		cmp ecx, 382
		je lav39
		cmp ecx, 383
		je lav39
		cmp ecx, 384
		je lav44
		cmp ecx, 385
		je lav44
		retn

chainreactionfix:
		mov eax, 560
		jmp exit1

		phil39:
		mov eax, 3500
		jmp exit1

		phil44:
		mov eax, 4100
		jmp exit1

		az39:
		mov eax, 4000
		jmp exit1

		az44:
		mov eax, 5350
		jmp exit1

		sad39:
		mov eax, 1150
		jmp exit1

		sad44:
		mov eax, 1470
		jmp exit1

		des39:
		mov eax, 820
		jmp exit1

		des44:
		mov eax, 1040
		jmp exit1

		jar39:
		mov eax, 620
		jmp exit1

		jar44:
		mov eax, 800
		jmp exit1

		can39:
		mov eax, 720
		jmp exit1

		can44:
		mov eax, 930
		jmp exit1

		kit39:
		mov eax, 1880
		jmp exit1

		kit44:
		mov eax, 2620
		jmp exit1

		lun39:
		mov eax, 1020
		jmp exit1

		lun44:
		mov eax, 1280
		jmp exit1

		lav39:
		mov eax, 1050
		jmp exit1

		lav44:
		mov eax, 1300

		exit1:
		add esp,4
		retn 4
	}
}

  __declspec(dllexport naked) void NewUseSkillAlone()// one of processing procedures when character casts buff on himself.
{
	__asm
	{
		add esp,4
		MOVSX EAX,BYTE PTR [ESI+0x30] //st
		DEC EAX //st
		cmp eax,74
		je Master
		cmp eax,79
		je Egg
		cmp eax,78
		je Walker
		cmp eax,80
		je Camuf
		cmp eax,81
		je Fshield
		cmp eax,82
		je Focus
		cmp eax,84
		je Despair
		cmp eax,85
		je Dskin
		cmp eax,87
		je Bullseye
		cmp eax,88
		je Quick
		cmp eax,89
		je Gshield
		cmp eax,91
		je Destruct
		sub esp,4
		cmp eax,0x41 //st
		retn

		Master:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX, DWORD PTR [esi+0x34]
		PUSH 0
		PUSH 0
		PUSH EAX
		MOV EAX,DWORD PTR [ESP+0x24]
		MOV EBX,DWORD PTR [ESI+0x38]
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		MOV ECX,EDI
		PUSH EDX
		PUSH 0x3C
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x10
		MOV EAX,1
		RETN 0x1C

		Egg:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX, DWORD PTR [esi+0x34]
		PUSH 0
		PUSH 0
		PUSH EAX
		MOV EAX,DWORD PTR [ESP+0x24]
		MOV EBX,DWORD PTR [ESI+0x38]
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		MOV ECX,EDI
		PUSH EDX
		PUSH 0x40
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x22],0x1
		MOV EAX,1
		RETN 0x1C

		Walker:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x3F
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x80
		MOV EAX,1
		RETN 0x1C

		Camuf:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x43
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x??
		MOV EAX,1
		RETN 0x1C

		Fshield:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x44
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x??
		MOV EAX,1
		RETN 0x1C

		Focus:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x45
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x??
		MOV EAX,1
		RETN 0x1C

		Despair:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x47
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x??
		MOV EAX,1
		RETN 0x1C

		Dskin:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x48
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x??
		MOV EAX,1
		RETN 0x1C

		Bullseye:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x49
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x??
		MOV EAX,1
		RETN 0x1C

		Quick:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x4A
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x??
		MOV EAX,1
		RETN 0x1C

		GShield:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX,DWORD PTR [ESP+0x18]
		MOV EBX,DWORD PTR [ESI+0x38]
		PUSH 0
		PUSH 0
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		PUSH 0
		PUSH EDX
		PUSH 0x4B
		mov ecx,edi
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x??
		MOV EAX,1
		RETN 0x1C

Destruct:
		MOV EDX,DWORD PTR [ESP+0x24]
		MOV EDI,DWORD PTR [ESP+0x20]
		PUSH EDX
		MOV ECX,EDI
		CALL DecreaseMP
		MOV EAX, DWORD PTR [esi+0x34]
		PUSH 0
		PUSH 0
		PUSH EAX
		MOV EAX,DWORD PTR [ESP+0x24]
		MOV EBX,DWORD PTR [ESI+0x38]
		MOV ECX,DWORD PTR [EAX+0x94]
		MOV EDX,DWORD PTR [EAX+0x44]
		ADD ECX,EDX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		SHR EDX,4
		ADD EDX,EBX
		MOV ECX,EDI
		PUSH EDX
		PUSH 0x4D
		CALL DoSkillEffect
		MOV EAX,DWORD PTR [ESP+0x1C]
		POP EDI
		POP ESI
		POP EBX
		//OR BYTE PTR [EAX+0x21],0x10
		MOV EAX,1
		RETN 0x1C
	}
}

  __declspec(dllexport naked) void NewCheckForGrpSkill()// procedure that checks if some of new skills can be casted on grp. 
{
	__asm
	{
		add esp, 4
		cmp al,76
		JE exit1
		cmp al,77
		JE exit1
		cmp al,84
		je exit1
		cmp al,91
		JE exit1
		MOV ECX,DWORD PTR [ESP+0x24] //st
		MOV AL,BYTE PTR [ECX+0x84E] //st
		sub esp,4
		retn

		exit1:
		push 0x0045EBDE
		retn
	}
}

  __declspec(dllexport naked) void NewUseSkillRangeEffect() // casting new grp skills
{
	__asm
	{
		add esp,4
		MOV EDX,DWORD PTR [ESP+0x68] //st
		MOVSX EAX,BYTE PTR [EDX+0x30] //st
		CMP EAX,76
		je newgrpskill
		CMP EAX,77
		je newgrpskill
		cmp eax,84
		je newgrpskill
		CMP EAX,91
		je newgrpskill
		sub esp,4
		retn

		newgrpskill:
		MOV ECX,DWORD PTR [ESP+0x7C]
		MOV EAX,DWORD PTR [ECX+0x21B0]
		MOV ECX,DWORD PTR [ESP+0x10]
		TEST EAX,EAX
		JLE ungrped
		CMP EAX,DWORD PTR [ECX+0x21B0]
		JNZ exit1
		jmp castskill

		ungrped:
		MOV EDX,DWORD PTR [ESP+0x68] //st
		MOVSX EAX,BYTE PTR [EDX+0x30] //st
		//cmp eax, 91
		//je castskill
		cmp ecx,DWORD PTR [ESP+0x7C]
		jne exit1

		castskill:
		MOV EDX,DWORD PTR [ESP+0x68] //st
		MOVSX EAX,BYTE PTR [EDX+0x30] //st
		CMP EAX,76
		je MindsEye
		CMP EAX,77
		je Stamina
		CMP EAX,84
		je Warcry
		CMP EAX,91
		je Mbless
		
		Warcry:
		CMP DWORD PTR [ECX+0x43A4],2
		je exit2
		MOV EDX,DWORD PTR [EBX+0x94]
		MOV ESI,DWORD PTR [EBX+0x44]
		ADD EDX,ESI
		MOV EAX,0xCCCCCCCD
		MUL EDX
		MOV EAX,DWORD PTR [ESP+0x68]
		PUSH 0
		SHR EDX,4
		MOV EDI,DWORD PTR [EAX+0x38]
		PUSH 0
		ADD EDX,EDI
		PUSH 0
		PUSH EDX
		PUSH 0x46
		CALL DoSkillEffect
		//OR BYTE PTR [EBP+0x21],0x20
		jmp exit2

		MindsEye:
		CMP DWORD PTR [ECX+0x43A4],2
		je exit2
		MOV EDX,DWORD PTR [EBX+0x94]
		MOV ESI,DWORD PTR [EBX+0x44]
		ADD EDX,ESI
		MOV EAX,0xCCCCCCCD
		MUL EDX
		MOV EAX,DWORD PTR [ESP+0x68]
		PUSH 0
		SHR EDX,4
		MOV EDI,DWORD PTR [EAX+0x38]
		PUSH 0
		ADD EDX,EDI
		PUSH 0
		PUSH EDX
		PUSH 0x3D
		CALL DoSkillEffect
		//OR BYTE PTR [EBP+0x21],0x20
		jmp exit2

		Stamina:
		CMP DWORD PTR [ECX+0x43A4],2
		je exit2
		MOV EDX,DWORD PTR [EBX+0x94]
		MOV ESI,DWORD PTR [EBX+0x44]
		ADD EDX,ESI
		MOV EAX,0xCCCCCCCD
		MUL EDX
		MOV EAX,DWORD PTR [ESP+0x68]
		PUSH 0
		SHR EDX,4
		MOV EDI,DWORD PTR [EAX+0x38]
		PUSH 0
		ADD EDX,EDI
		PUSH 0
		PUSH EDX
		PUSH 0x3E
		CALL DoSkillEffect
		//OR BYTE PTR [EBP+0x21],0x40
		jmp exit2

		Mbless:
		CMP DWORD PTR [ECX+0x43A4],2
		je exit2
		MOV EDX,DWORD PTR [EBX+0x94]
		MOV ESI,DWORD PTR [EBX+0x44]
		ADD EDX,ESI
		MOV EAX,0xCCCCCCCD
		MUL EDX
		MOV EAX,DWORD PTR [ESP+0x68]
		PUSH 0
		SHR EDX,4
		MOV EDI,DWORD PTR [EAX+0x38]
		PUSH 0
		ADD EDX,EDI
		PUSH 0
		PUSH EDX
		PUSH 0x4C
		CALL DoSkillEffect
		//OR BYTE PTR [EBP+0x21],0x40
		jmp exit2

		exit1:
		push 0x0045430F
		retn
		exit2:
		push 0x00454254
		retn
	}
}

  __declspec(dllexport naked) void NewDoSkillEffect()// further processing of new skills casting
{
	__asm
	{
		ja finduser //st
		retn

		finduser:
		add esp, 4
		push eax
		push ecx
		push edx
		xor ebx,ebx
		mov eax, dword ptr [ecx+0x4504]
		add eax, 0x31DC
		lea edx, dword ptr [ecx+0x37D8]
		mov ecx, eax
		push edx
		call FindUser
		test eax,eax
		je exit1
		mov edx, dword ptr [SkillsMemAddr]
		mov ecx, dword ptr [esp+4]
		
		finduserid:
		cmp dword ptr [edx], ecx
		je checknewskill
		add ebx,96
		add edx,96
		cmp ebx,48000
		ja exit1
		jmp finduserid

		checknewskill:
		CMP ESI,0x3C
		je Master
		CMP ESI,0x3D
		je MindsEye
		CMP ESI,0x3E
		je Stamina
		CMP ESI,0x40
		je Egg
		CMP ESI,0x3F
		je Walker
		CMP ESI,0x43
		je Camuf
		CMP ESI,0x44
		je Fshield
		CMP ESI,0x45
		je Focus
		CMP ESI,0x46
		je Warcry
		CMP ESI,0x47
		je Despair
		CMP ESI,0x48
		je Dskin
		CMP ESI,0x49
		je Bullseye
		CMP ESI,0x4A
		je Quick
		CMP ESI,0x4B
		je Gshield
		CMP ESI,0x4C
		je Mbless
		CMP ESI,0x4D
		je Destruct
		jmp exit1

		Master:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+4], 1
		or byte ptr [eax+0x10], 1
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x20],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		MindsEye:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+5], 1
		or byte ptr [eax+0x10], 2
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x24],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Stamina:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+6], 1
		or byte ptr [eax+0x10], 4
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x28],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Egg:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+7], 1
		or byte ptr [eax+0x10], 8
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x2C],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Walker:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+8], 1
		or byte ptr [eax+0x10], 0x10
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x30],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Camuf:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+9], 1
		or byte ptr [eax+0x10], 0x20
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x34],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Fshield:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0xA], 1
		or byte ptr [eax+0x10], 0x40
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x38],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Focus:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0xB], 1
		or byte ptr [eax+0x10], 0x80
		push eax
		push ecx
		push edx
		call InitEquipment
		pop edx
		pop ecx
		pop eax
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x3C],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

Warcry:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0xC], 1
		or byte ptr [eax+0x11], 0x1
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x40],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

Despair:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0xD], 1
		or byte ptr [eax+0x11], 0x2
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x44],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

Dskin:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0xE], 1
		or byte ptr [eax+0x11], 0x4
		push eax
		push ecx
		push edx
		call SendSPInfo
		pop edx
		pop ecx
		pop eax
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x48],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Bullseye:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0xF], 1
		or byte ptr [eax+0x11], 0x8
		push eax
		push ecx
		push edx
		call InitAttackMinPercent //set bullseye
		pop edx
		pop ecx
		pop eax
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x4C],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Quick:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0x10], 1
		or byte ptr [eax+0x11], 0x10
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x50],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Gshield:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0x11], 1
		or byte ptr [eax+0x11], 0x20
		push eax
		push ecx
		push edx
		call InitEquipment
		pop edx
		pop ecx
		pop eax
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x54],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		Mbless:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0x12], 1
		or byte ptr [eax+0x11], 0x40
		push eax
		push ecx
		push edx
		push 2000
		call IncreaseSP
		mov ecx, dword ptr [esp+4]
		mov eax, dword ptr [ecx+0x42E4]
		mov dword ptr [ecx+0x3F80], eax
		call SendDPInfo
		pop edx
		pop ecx
		pop eax
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x58],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

Destruct:
		OR EDI,0xFFFFFFFF
		mov byte ptr [edx+0x13], 1
		or byte ptr [eax+0x11], 0x80
		MOV EAX,DWORD PTR [ESP+0x2C+0xC]
		LEA EAX,DWORD PTR [EAX+EAX*4]
		xor ebx,ebx
		LEA EAX,DWORD PTR [EAX+EAX*4]
		LEA ECX,DWORD PTR [EAX+EAX*4]
		SHL ECX,3
		MOV DWORD PTR [edx+0x5C],ECX
		pop edx
		pop ecx
		pop eax
		MOV ECX,EBP
		CALL GetMinSETimer
		MOV DWORD PTR [EBP+0x4320],EAX
		jmp exit2

		exit1:
		pop edx
		pop ecx
		pop eax
		push 0x0042B5D3
		retn

		exit2:
		push 0x0042CA24
		retn
	}
}

  __declspec(dllexport naked) void NewGetMinSETimer() // getting new skills timers, used in many places, normally to disable new skill when its time ran out.
{
	__asm
	{
		add esp,4
		inc esi //st
		CMP ESI,0x3C //st
		JL exit1 //st
		mov esi,0
		push ebx
		push edi
		xor edi,edi
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [ebx], ecx
		je timercheck
		add ebx,96
		add edi,96
		cmp edi,48000
		ja exit2
		jmp finduserid

		timercheck:
		mov edx, dword ptr [ebx + esi*4 + 0x20]
		test edx,edx
		je nexttimer
		test eax,eax
		je setnewtimer
		cmp eax,edx
		jbe nexttimer

		setnewtimer:
		mov eax,edx

		nexttimer:
		inc esi
		cmp esi, 16
		jb timercheck
exit2:
		pop edi
		pop ebx
		push 0x0042D91C
		retn

		exit1:
		push 0x0042D8E5
		retn
	}
}

 __declspec (dllexport naked) void  NewOnSkillExpired()//disable new skills when their timers ran out
{
	__asm
	{
		add esp,4
		push ebx
		xor eax,eax
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [ebx], esi
		je mastercheck
		add ebx,96
		add eax,96
		cmp eax,48000
		ja exit
		jmp finduserid

		mastercheck:
		cmp byte ptr [ebx+4], 1
		jne mindseyecheck
		mov eax, dword ptr [ebx+0x20]
		cmp eax,edi
		jbe disablemaster
		sub eax,edi
		mov dword ptr [ebx+0x20],eax
		jmp mindseyecheck

		disablemaster:
		push 1
		push 1
		push 0x3C
		mov ecx,esi
		call OnSkillEffectExpired

		mindseyecheck:
		cmp byte ptr [ebx+5], 1
		jne staminacheck
		mov eax, dword ptr [ebx+0x24]
		cmp eax,edi
		jbe disablemindseye
		sub eax,edi
		mov dword ptr [ebx+0x24],eax
		jmp staminacheck

		disablemindseye:
		push 1
		push 1
		push 0x3D
		mov ecx,esi
		call OnSkillEffectExpired

		staminacheck:
		cmp byte ptr [ebx+6], 1
		jne eggcheck
		mov eax, dword ptr [ebx+0x28]
		cmp eax,edi
		jbe disablestamina
		sub eax,edi
		mov dword ptr [ebx+0x28],eax
		jmp eggcheck

		disablestamina:
		push 1
		push 1
		push 0x3E
		mov ecx,esi
		call OnSkillEffectExpired

		eggcheck:
		cmp byte ptr [ebx+7], 1
		jne walkercheck
		mov eax, dword ptr [ebx+0x2C]
		cmp eax,edi
		jbe disableegg
		sub eax,edi
		mov dword ptr [ebx+0x2C],eax
		jmp walkercheck

		disableegg:
		push 1
		push 1
		push 0x40
		mov ecx,esi
		call OnSkillEffectExpired

		walkercheck:
		cmp byte ptr [ebx+8], 1
		jne camufcheck
		mov eax, dword ptr [ebx+0x30]
		cmp eax,edi
		jbe disablewalker
		sub eax,edi
		mov dword ptr [ebx+0x30],eax
		jmp camufcheck

		disablewalker:
		push 1
		push 1
		push 0x3F
		mov ecx,esi
		call OnSkillEffectExpired

		camufcheck:
		cmp byte ptr [ebx+9], 1
		jne fshieldcheck
		mov eax, dword ptr [ebx+0x34]
		cmp eax,edi
		jbe disablecamuf
		sub eax,edi
		mov dword ptr [ebx+0x34],eax
		jmp fshieldcheck

		disablecamuf:
		push 1
		push 1
		push 0x43
		mov ecx,esi
		call OnSkillEffectExpired

fshieldcheck:
		cmp byte ptr [ebx+0xA], 1
		jne focuscheck
		mov eax, dword ptr [ebx+0x38]
		cmp eax,edi
		jbe disablefshield
		sub eax,edi
		mov dword ptr [ebx+0x38],eax
		jmp focuscheck

disablefshield:
		push 1
		push 1
		push 0x44
		mov ecx,esi
		call OnSkillEffectExpired

focuscheck:
		cmp byte ptr [ebx+0xB], 1
		jne warcrycheck
		mov eax, dword ptr [ebx+0x3C]
		cmp eax,edi
		jbe disablefocus
		sub eax,edi
		mov dword ptr [ebx+0x3C],eax
		jmp warcrycheck

disablefocus:
		push 1
		push 1
		push 0x45
		mov ecx,esi
		call OnSkillEffectExpired

warcrycheck:
		cmp byte ptr [ebx+0xC], 1
		jne despaircheck
		mov eax, dword ptr [ebx+0x40]
		cmp eax,edi
		jbe disablewarcry
		sub eax,edi
		mov dword ptr [ebx+0x40],eax
		jmp despaircheck

disablewarcry:
		push 1
		push 1
		push 0x46
		mov ecx,esi
		call OnSkillEffectExpired

despaircheck:
		cmp byte ptr [ebx+0xD], 1
		jne dskincheck
		mov eax, dword ptr [ebx+0x44]
		cmp eax,edi
		jbe disabledespair
		sub eax,edi
		mov dword ptr [ebx+0x44],eax
		jmp dskincheck

disabledespair:
		push 1
		push 1
		push 0x47
		mov ecx,esi
		call OnSkillEffectExpired

dskincheck:
		cmp byte ptr [ebx+0xE], 1
		jne bullseyecheck
		mov eax, dword ptr [ebx+0x48]
		cmp eax,edi
		jbe disabledskin
		sub eax,edi
		mov dword ptr [ebx+0x48],eax
		jmp bullseyecheck

disabledskin:
		push 1
		push 1
		push 0x48
		mov ecx,esi
		call OnSkillEffectExpired

bullseyecheck:
		cmp byte ptr [ebx+0xF], 1
		jne quickcheck
		mov eax, dword ptr [ebx+0x4C]
		cmp eax,edi
		jbe disablebullseye
		sub eax,edi
		mov dword ptr [ebx+0x4C],eax
		jmp quickcheck

disablebullseye:
		push 1
		push 1
		push 0x49
		mov ecx,esi
		call OnSkillEffectExpired

quickcheck:
		cmp byte ptr [ebx+0x10], 1
		jne gshieldcheck
		mov eax, dword ptr [ebx+0x50]
		cmp eax,edi
		jbe disablequick
		sub eax,edi
		mov dword ptr [ebx+0x50],eax
		jmp gshieldcheck

disablequick:
		push 1
		push 1
		push 0x4A
		mov ecx,esi
		call OnSkillEffectExpired

gshieldcheck:
		cmp byte ptr [ebx+0x11], 1
		jne mblesscheck
		mov eax, dword ptr [ebx+0x54]
		cmp eax,edi
		jbe disablegshield
		sub eax,edi
		mov dword ptr [ebx+0x54],eax
		jmp mblesscheck

disablegshield:
		push 1
		push 1
		push 0x4B
		mov ecx,esi
		call OnSkillEffectExpired

mblesscheck:
		cmp byte ptr [ebx+0x12], 1
		jne destructcheck
		mov eax, dword ptr [ebx+0x58]
		cmp eax,edi
		jbe disablembless
		sub eax,edi
		mov dword ptr [ebx+0x58],eax
		jmp destructcheck

disablembless:
		push 1
		push 1
		push 0x4C
		mov ecx,esi
		call OnSkillEffectExpired

destructcheck:
		cmp byte ptr [ebx+0x13], 1
		jne exit
		mov eax, dword ptr [ebx+0x5C]
		cmp eax,edi
		jbe disabledestruct
		sub eax,edi
		mov dword ptr [ebx+0x5C],eax
		jmp exit

disabledestruct:
		push 1
		push 1
		push 0x4D
		mov ecx,esi
		call OnSkillEffectExpired

		exit:
		pop ebx
		MOV ECX,ESI //st
		MOV DWORD PTR [ESI+0x4324],0 //st
		push 0x0042E43C
		retn
	}
}

 __declspec (dllexport naked) void  NewOnGoodSkillExpired()//disables new skills when character dies or get dispelled
{
	__asm
	{
		add esp, 4
		push 0
		push 0
		push 0x3C
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x3D
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x3E
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x40
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x3F
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x43
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x44
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x45
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x46
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x47
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x48
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x49
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x4A
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x4B
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x4C
		mov ecx,ebx
		call OnSkillEffectExpired
		push 0
		push 0
		push 0x4D
		mov ecx,ebx
		call OnSkillEffectExpired
		MOV EAX,DWORD PTR [ESP+0x14] //st
		TEST EAX,EAX //st
		push 0x0042EA30
		retn
	}
}

 __declspec (dllexport naked) void  NewOnSkillEffectExpired()//further processing of new skills disabling
{
	__asm
	{
		ja disablenewskill //st
		retn

		disablenewskill:
		add esp, 4
		push eax
		push ecx
		push edx
		mov ecx, dword ptr [esi+0x4504]
		add ecx, 0x31DC
		lea eax, dword ptr [esi+0x37D8]
		push eax
		call FindUser
		test eax,eax
		je exit1
		xor ecx,ecx
		mov edx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [edx], esi
		je checknewskill
		add edx,96
		add ecx,96
		cmp ecx,48000
		ja exit1
		jmp finduserid

		checknewskill:
		cmp edi, 0x3C
		je master
		cmp edi, 0x3D
		je mindseye
		cmp edi, 0x3E
		je stamina
		cmp edi, 0x40
		je egg
		cmp edi, 0x3F
		je walker
		cmp edi, 0x43
		je camuf
		cmp edi, 0x44
		je fshield
		cmp edi, 0x45
		je focus
		cmp edi, 0x46
		je warcry
		cmp edi, 0x47
		je despair
		cmp edi, 0x48
		je dskin
		cmp edi, 0x49
		je bullseye
		cmp edi, 0x4A
		je quick
		cmp edi, 0x4B
		je gshield
		cmp edi, 0x4C
		je mbless
		cmp edi, 0x4D
		je destruct
		jmp exit1
		
		master:
		mov byte ptr [edx+4],0
		//and byte PTR [Esi+0x402B],0xEF
		mov dword ptr [edx+0x20],0
		and byte ptr [eax + 0x10],0xFE
		jmp exit2

		mindseye:
		mov byte ptr [edx+5],0
		//and byte PTR [Esi+0x402B],0xDF
		mov dword ptr [edx+0x24],0
		and byte ptr [eax + 0x10],0xFD
		jmp exit2

		stamina:
		mov byte ptr [edx+6],0
		//and byte PTR [Esi+0x402B],0xBF
		mov dword ptr [edx+0x28],0
		and byte ptr [eax + 0x10],0xFB
		jmp exit2

		egg:
		mov byte ptr [edx+7],0
		//and byte PTR [Esi+0x402C],0xFE
		mov dword ptr [edx+0x2C],0
		and byte ptr [eax + 0x10],0xF7
		jmp exit2

		walker:
		mov byte ptr [edx+8],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x30],0
		and byte ptr [eax + 0x10],0xEF
		jmp exit2

		camuf:
		mov byte ptr [edx+9],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x34],0
		and byte ptr [eax + 0x10],0xDF
		jmp exit2

		fshield:
		mov byte ptr [edx+0xA],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x38],0
		and byte ptr [eax + 0x10],0xBF
		jmp exit2

		focus:
		mov byte ptr [edx+0xB],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x3C],0
		and byte ptr [eax + 0x10],0x7F
		push eax
		push ecx
		push edx
		mov ecx, esi
		call InitEquipment
		pop edx
		pop ecx
		pop eax
		jmp exit2

		warcry:
		mov byte ptr [edx+0xC],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x40],0
		and byte ptr [eax + 0x11],0xFE
		jmp exit2

		despair:
		mov byte ptr [edx+0xD],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x44],0
		and byte ptr [eax + 0x11],0xFD
		jmp exit2

		dskin:
		mov byte ptr [edx+0xE],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x48],0
		and byte ptr [eax + 0x11],0xFB
		push eax
		push ecx
		push edx
		mov ecx,esi
		call SendSPInfo
		pop edx
		pop ecx
		pop eax
		jmp exit2

		bullseye:
		mov byte ptr [edx+0xF],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x4C],0
		and byte ptr [eax + 0x11],0xF7
		push eax
		push ecx
		push edx
		mov ecx, esi
		call InitAttackMinPercent //set bullseye
		pop edx
		pop ecx
		pop eax
		jmp exit2

		quick:
		mov byte ptr [edx+0x10],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x50],0
		and byte ptr [eax + 0x11],0xEF
		jmp exit2

		gshield:
		mov byte ptr [edx+0x11],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x54],0
		and byte ptr [eax + 0x11],0xDF
		push eax
		push ecx
		push edx
		mov ecx, esi
		call InitEquipment
		pop edx
		pop ecx
		pop eax
		jmp exit2

		mbless:
		mov byte ptr [edx+0x12],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x58],0
		and byte ptr [eax + 0x11],0xBF
		jmp exit2

		destruct:
		mov byte ptr [edx+0x13],0
		//and byte PTR [Esi+0x402B],0x7F
		mov dword ptr [edx+0x5C],0
		and byte ptr [eax + 0x11],0x7F
		jmp exit2

		exit1:
		pop edx
		pop ecx
		pop eax
		push 0x0042D4AA
		retn

		exit2:
		pop edx
		pop ecx
		pop eax
		push 0x0042D466
		retn
	}
}

 __declspec (dllexport naked) void  NewSendUseSkill()// sends status update to client when new skill is casted or expired
{
	__asm
	{
		pushad
		xor edi,edi
		
		checkuser:
		mov ecx, dword ptr [esp+0x34]
		lea eax, dword ptr [ebx+1]
		push eax
		call FindUser
		test eax,eax
		je checknextchar
		mov eax, dword ptr [eax + 0x30]
		mov edx, dword ptr [SkillsMemAddr]
		xor ecx,ecx
		
		finduserid:
		cmp dword ptr [edx], eax
		je checknewskill
		add edx,96
		add ecx,96
		cmp ecx,48000
		ja checknextchar
		jmp finduserid

		checknewskill:
		cmp byte ptr [edx+4],1
		jne disablemaster
		or byte ptr [ebx+0x10], 1
		jmp checkmindseye

		disablemaster:
		and byte ptr [ebx + 0x10],0xFE

		checkmindseye:
		cmp byte ptr [edx+5],1
		jne disablemindseye
		or byte ptr [ebx+0x10], 2
		jmp checkstamina

		disablemindseye:
		and byte ptr [ebx + 0x10],0xFD

		checkstamina:
		cmp byte ptr [edx+6],1
		jne disablestamina
		or byte ptr [ebx+0x10], 4
		jmp checkegg

		disablestamina:
		and byte ptr [ebx + 0x10],0xFB

		checkegg:
		cmp byte ptr [edx+7],1
		jne disableegg
		or byte ptr [ebx+0x10], 8
		jmp checkwalker

		disableegg:
		and byte ptr [ebx + 0x10],0xF7

		checkwalker:
		cmp byte ptr [edx+8],1
		jne disablewalker
		or byte ptr [ebx+0x10], 0x10
		jmp checkcamuf

		disablewalker:
		and byte ptr [ebx + 0x10],0xEF

		checkcamuf:
		cmp byte ptr [edx+9],1
		jne disablecamuf
		or byte ptr [ebx+0x10], 0x20
		jmp checkfshield

		disablecamuf:
		and byte ptr [ebx + 0x10],0xDF

checkfshield:
		cmp byte ptr [edx+0xA],1
		jne disablefshield
		or byte ptr [ebx+0x10], 0x40
		jmp checkfocus

		disablefshield:
		and byte ptr [ebx + 0x10],0xBF

checkfocus:
		cmp byte ptr [edx+0xB],1
		jne disablefocus
		or byte ptr [ebx+0x10], 0x80
		jmp checkwarcry

		disablefocus:
		and byte ptr [ebx + 0x10],0x7F

checkwarcry:
		cmp byte ptr [edx+0xC],1
		jne disablewarcry
		or byte ptr [ebx+0x11], 0x1
		jmp checkdespair

		disablewarcry:
		and byte ptr [ebx + 0x11],0xFE

checkdespair:
		cmp byte ptr [edx+0xD],1
		jne disabledespair
		or byte ptr [ebx+0x11], 0x2
		jmp checkdskin

		disabledespair:
		and byte ptr [ebx + 0x11],0xFD

checkdskin:
		cmp byte ptr [edx+0xE],1
		jne disabledskin
		or byte ptr [ebx+0x11], 0x4
		jmp checkbullseye

		disabledskin:
		and byte ptr [ebx + 0x11],0xFB

checkbullseye:
		cmp byte ptr [edx+0xF],1
		jne disablebullseye
		or byte ptr [ebx+0x11], 0x8
		jmp checkquick

		disablebullseye:
		and byte ptr [ebx + 0x11],0xF7

checkquick:
		cmp byte ptr [edx+0x10],1
		jne disablequick
		or byte ptr [ebx+0x11], 0x10
		jmp checkgshield

		disablequick:
		and byte ptr [ebx + 0x11],0xEF

checkgshield:
		cmp byte ptr [edx+0x11],1
		jne disablegshield
		or byte ptr [ebx+0x11], 0x20
		jmp checkmbless

		disablegshield:
		and byte ptr [ebx + 0x11],0xDF

checkmbless:
		cmp byte ptr [edx+0x12],1
		jne disablembless
		or byte ptr [ebx+0x11], 0x40
		jmp checkdestruct

		disablembless:
		and byte ptr [ebx + 0x11],0xBF

checkdestruct:
		cmp byte ptr [edx+0x13],1
		jne disabledestruct
		or byte ptr [ebx+0x11], 0x80
		jmp checknextchar

		disabledestruct:
		and byte ptr [ebx + 0x11],0x7F

		checknextchar:
		test edi,edi
		jne skipcheck
		xor esi,esi
		mov esi, dword ptr [ebx+0x30]
		and esi,0xFF 

		skipcheck:
		test esi,esi 
		je exit1
		test edi,edi
		je firstextrauser
		dec esi
		add ebx,0x2F
		inc edi
		jmp checkuser

		firstextrauser:
		dec esi
		add ebx,0x31
		inc edi
		jmp checkuser

		exit1:
		popad
		pop eax
		PUSH 0x0FD //st
		push eax
		cmp eax, 0x0043D7C4
		jne secondreturn
		MOV EAX,DWORD PTR [ECX] //st
		retn

		secondreturn:
		MOV EDX,DWORD PTR [ECX] //st
		retn
	}
}

  __declspec (dllexport naked) void  NewMasterEffect()// accuracy increasing/decreasing effects of master, lavita's invisibility, camouflage, moon blessing and holy shield
{
	__asm
	{
		push eax
		mov eax, dword ptr [esp+0x38]
		test byte ptr [eax+0x10], 1
		je checkmbless
		add edi, 50
		cmp edi, 100
		jbe checkmbless
		mov edi,100
checkmbless:
		test byte ptr [eax+0x11], 0x40
		je checkinvis
		add edi, 30
		cmp edi, 100
		jbe checkinvis
		mov edi,100
checkinvis:
		test byte ptr [eax+0x1D], 4
		je checkhshield
		cmp edi, 90
		jbe checkhshield
		mov edi,90
checkhshield:
		mov eax, dword ptr [esp+0x3C]
		test byte ptr [eax+0x1F], 0x10
		je checkcamuf
		shr edi, 2
		lea edi, dword ptr [edi+edi*2]
checkcamuf:
		test byte ptr [eax+0x10], 0x20
		je exit1
		shr edi, 2
		lea edi, dword ptr [edi*2]		
exit1:
		pop eax
		MOV ECX,0x64 //st
		IDIV ECX //st
		retn
	}
}

  __declspec (dllexport naked) void  NewEggEffect()//super egg effect
{
	__asm
	{
		push ebx
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [ebx], ecx
		je useridfound
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit1
		jmp finduserid

		useridfound:
		cmp byte ptr [ebx+7], 1
		je eggfound
exit1:
		pop ebx
		MOV DX,WORD PTR [ECX+0x4024] //st
		retn

		eggfound:
		pop ebx
		add esp,4
		cmp dword ptr [esp-4], 0x004102A9
		je PVMegg
		CMP EDI,0x989680
		ja secondformula
		MOV EDX,25
		push 0x00410183
		retn

		secondformula:
		MOV EAX,0x51EB851F
		MUL EDI
		MOV EDI,25
		push 0x004101A1
		retn

		PVMegg:
		CMP ESI,0x989680
		ja secondformula2
		MOV EDX,25
		push 0x004102D4
		retn

		secondformula2:
		MOV EAX,0x51EB851F
		MUL ESI
		MOV ESI,25
		push 0x004102F2
		retn
	}
}

  __declspec (dllexport naked) void  NewStaminaEffect()// unlimited stamina effect
{
	__asm
	{
		push ebx
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [ebx], esi
		je useridfound
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit1
		jmp finduserid

		useridfound:
		cmp byte ptr [ebx+6],1
		jne exit1
		pop ebx
		add esp,4
		push 0x0043DC35
		retn

		exit1:
		pop ebx
		TEST BYTE PTR [ESI+0x402E],0x0C0 //st
		retn
	}
}

  __declspec (dllexport naked) void  NewBullseyeEffect()// bulls eye effect 1: makes canon always do 100% damage
{
	__asm
	{
		MOV EDX,DWORD PTR [ECX+0x42EC] //st
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [ebx], ecx
		je useridfound
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit1
		jmp finduserid

		useridfound:
		cmp byte ptr [ebx+0xF], 1
		jne exit1
		cmp edx, 100
		jae exit1
		mov edx, 100
		MOV DWORD PTR [ECX+0x42EC],EDX
exit1:
		retn
	}
}

  __declspec (dllexport naked) void  NewSaveToDB()//saving new skills to DB after character logs out from map
{
	__asm
	{
		jl exit1 //st
		push esi
		mov eax, dword ptr [SkillsMemAddr]
		test eax,eax
		je exit2
		mov esi, dword ptr [esp+0x0C]
		
		finduserid:
		cmp dword ptr [eax], esi
		je useridfound
		add eax,96
		push eax
		sub eax, dword ptr [SkillsMemAddr]
		cmp eax, 48000
		pop eax
		ja exit2
		jmp finduserid

		useridfound:
		cmp ebx, 0x3C
		je master
		cmp ebx, 0x3D
		je mindseye
		cmp ebx, 0x3E
		je stamina
		cmp ebx, 0x40
		je egg
		cmp ebx, 0x3F
		je walker
		cmp ebx, 0x41
		je camuf
		cmp ebx, 0x44
		je fshield
		cmp ebx, 0x45
		je focus
		cmp ebx, 0x46
		je warcry
		cmp ebx, 0x47
		je despair
		cmp ebx, 0x48
		je dskin
		cmp ebx, 0x49
		je bullseye
		cmp ebx, 0x4A
		je quick
		cmp ebx, 0x4B
		je gshield
		cmp ebx, 0x4C
		je mbless
		cmp ebx, 0x4D
		je destruct
		jmp exit2

		master:
		cmp byte ptr [eax+4], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x20]
		mov ebx, 0x3C
		jmp exit4

		mindseye:
		cmp byte ptr [eax+5], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x24]
		mov ebx, 0x3D
		jmp exit4

		stamina:
		cmp byte ptr [eax+6], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x28]
		mov ebx, 0x3E
		jmp exit4

		egg:
		cmp byte ptr [eax+7], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x2C]
		mov ebx, 0x40
		jmp exit4

		walker:
		cmp byte ptr [eax+8], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x30]
		mov ebx, 0x3F
		jmp exit4

		camuf:
		cmp byte ptr [eax+9], 1
		mov ebx, 0x43
		jne exit3
		MOV edx, DWORD PTR [eax+0x34]
		jmp exit4

fshield:
		cmp byte ptr [eax+0xA], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x38]
		jmp exit4

focus:
		cmp byte ptr [eax+0xB], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x3C]
		jmp exit4

warcry:
		cmp byte ptr [eax+0xC], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x40]
		jmp exit4

despair:
		cmp byte ptr [eax+0xD], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x44]
		jmp exit4

dskin:
		cmp byte ptr [eax+0xE], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x48]
		jmp exit4

bullseye:
		cmp byte ptr [eax+0xF], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x4C]
		jmp exit4

quick:
		cmp byte ptr [eax+0x10], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x50]
		jmp exit4

gshield:
		cmp byte ptr [eax+0x11], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x54]
		jmp exit4

mbless:
		cmp byte ptr [eax+0x12], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x58]
		jmp exit4

destruct:
		cmp byte ptr [eax+0x13], 1
		jne exit3
		MOV edx, DWORD PTR [eax+0x5C]
		jmp exit4
		
		exit1:
		sub dword ptr [esp], 0x1D9
		retn

		exit2:
		pop esi
		retn

		exit3:
		pop esi
		sub dword ptr [esp], 0xA
		retn

		exit4:
		pop esi
		sub dword ptr [esp], 0xB7
		retn
	}
}

  __declspec (dllexport naked) void  NewLoadFromDB()// loading new skills from DB when character is logging in
{
	__asm
	{
		pop eax
		MOV ESI,DWORD PTR [ESP+0x24] //st
		ADD ESP,0x10 //st
		push eax
		cmp esi, 0x3C
		jae newskills
		jmp exit2

		newskills:
		mov eax, dword ptr [SkillsMemAddr]
		test eax,eax
		je exit2
		mov edi, dword ptr [esp+0x0C]
		
		finduserid:
		cmp dword ptr [eax], edi
		je useridfound
		add eax,96
		push eax
		sub eax, dword ptr [SkillsMemAddr]
		cmp eax, 48000
		pop eax
		ja exit2
		jmp finduserid

		useridfound:
		cmp esi, 0x3C
		je master
		cmp esi, 0x3D
		je mindseye
		cmp esi, 0x3E
		je stamina
		cmp esi, 0x40
		je egg
		cmp esi, 0x3F
		je walker
		cmp esi, 0x43
		je camuf
		cmp esi, 0x44
		je fshield
		cmp esi, 0x45
		je focus
		cmp esi, 0x46
		je warcry
		cmp esi, 0x47
		je despair
		cmp esi, 0x48
		je dskin
		cmp esi, 0x49
		je bullseye
		cmp esi, 0x4A
		je quick
		cmp esi, 0x4B
		je gshield
		cmp esi, 0x4C
		je mbless
		cmp esi, 0x4D
		je destruct
		jmp exit1

		master:
		mov byte ptr [eax+4], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x20], edi
		jmp exit1

		mindseye:
		mov byte ptr [eax+5], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x24], edi
		jmp exit1

		stamina:
		mov byte ptr [eax+6], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x28], edi
		jmp exit1

		egg:
		mov byte ptr [eax+7], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x2C], edi
		jmp exit1

		walker:
		mov byte ptr [eax+8], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x30], edi
		jmp exit1

		camuf:
		mov byte ptr [eax+9], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x34], edi
		jmp exit1

		fshield:
		mov byte ptr [eax+0xA], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x38], edi
		jmp exit1

		focus:
		mov byte ptr [eax+0xB], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x3C], edi
		jmp exit1

		warcry:
		mov byte ptr [eax+0xC], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x40], edi
		jmp exit1

		despair:
		mov byte ptr [eax+0xD], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x44], edi
		jmp exit1

		dskin:
		mov byte ptr [eax+0xE], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x48], edi
		jmp exit1

		bullseye:
		mov byte ptr [eax+0xF], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x4C], edi
		jmp exit1

		quick:
		mov byte ptr [eax+0x10], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x50], edi
		jmp exit1

		gshield:
		mov byte ptr [eax+0x11], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x54], edi
		jmp exit1

		mbless:
		mov byte ptr [eax+0x12], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x58], edi
		jmp exit1

		destruct:
		mov byte ptr [eax+0x13], 1
		mov edi, dword ptr [esp+0x1C]
		MOV DWORD PTR [eax+0x5C], edi
		jmp exit1

		exit1:
		add dword ptr [esp], 0x331
		retn

		exit2:
		retn
	}
}

  __declspec (dllexport naked) void  NewLoadSkillsToCIS()// loading new skills after character logged to map
{
	__asm
	{
		LEA EAX,DWORD PTR [ESP+0x8C] //stm
		push edx
		mov edx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [edx], ebp
		je checknewskill
		add edx,96
		push edx
		sub edx, dword ptr [SkillsMemAddr]
		cmp edx, 48000
		pop edx
		ja exit1
		jmp finduserid

		checknewskill:
		cmp byte ptr [edx+4],1
		jne checkmindseye
		or byte ptr [eax+0x10], 1
		
		checkmindseye:
		cmp byte ptr [edx+5],1
		jne checkstamina
		or byte ptr [eax+0x10], 2

		checkstamina:
		cmp byte ptr [edx+6],1
		jne checkegg
		or byte ptr [eax+0x10], 4

		checkegg:
		cmp byte ptr [edx+7],1
		jne checkwalker
		or byte ptr [eax+0x10], 8

		checkwalker:
		cmp byte ptr [edx+8],1
		jne checkcamuf
		or byte ptr [eax+0x10], 0x10

		checkcamuf:
		cmp byte ptr [edx+9],1
		jne checkfshield
		or byte ptr [eax+0x10], 0x20

		checkfshield:
		cmp byte ptr [edx+0xA],1
		jne checkfocus
		or byte ptr [eax+0x10], 0x40

		checkfocus:
		cmp byte ptr [edx+0xB],1
		jne checkwarcry
		or byte ptr [eax+0x10], 0x80

		checkwarcry:
		cmp byte ptr [edx+0xC],1
		jne checkdespair
		or byte ptr [eax+0x11], 0x1

		checkdespair:
		cmp byte ptr [edx+0xD],1
		jne checkdskin
		or byte ptr [eax+0x11], 0x2

		checkdskin:
		cmp byte ptr [edx+0xE],1
		jne checkbullseye
		or byte ptr [eax+0x11], 0x4

		checkbullseye:
		cmp byte ptr [edx+0xF],1
		jne checkquick
		or byte ptr [eax+0x11], 0x8

		checkquick:
		cmp byte ptr [edx+0x10],1
		jne checkgshield
		or byte ptr [eax+0x11], 0x10

		checkgshield:
		cmp byte ptr [edx+0x11],1
		jne checkmbless
		or byte ptr [eax+0x11], 0x20

		checkmbless:
		cmp byte ptr [edx+0x12],1
		jne checkdestruct
		or byte ptr [eax+0x11], 0x40

		checkdestruct:
		cmp byte ptr [edx+0x13],1
		jne exit1
		or byte ptr [eax+0x11], 0x80

		exit1:
		pop edx
		retn
	}
}

  __declspec (dllexport naked) void  NewFshieldEffect()// fire shield, destruction and stage3/4 nauthiz pieces attack increasing effect
{
	__asm
	{
		cmp dword ptr [esp], 0x0047ADC4
		je PVM
		push eax
		push ecx
		push edx
		push ebx
		push esi
		mov ebx, dword ptr [SkillsMemAddr]
		sub esi, 0x37d8

		finduserid:
		cmp dword ptr [ebx], esi
		je checkfshield
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit1
		jmp finduserid
checkfshield:
		cmp byte ptr [ebx+0xA], 1
		jne checkdestruct
		mov eax, edi
		mov ecx, 5
		xor edx, edx
		div ecx
		add edi, eax
checkdestruct:
		cmp byte ptr [ebx+0x13], 1
		jne checkstagebonus
		mov eax, edi
		mov ecx, 5
		xor edx, edx
		div ecx
		add edi, eax
checkstagebonus:
		cmp byte ptr [esi+0x3E48], 6
		jne checkplate
		cmp word ptr [esi+0x3E4A], 180
		je s4helm
		cmp word ptr [esi+0x3E4A], 160
		je s3helm
		jmp checkplate
		s4helm:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add edi, eax
			jmp checkplate
		s3helm:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add edi, eax
checkplate:
		cmp byte ptr [esi+0x3E68], 6
		jne checkpants
		cmp word ptr [esi+0x3E6A], 181
		je s4plate
		cmp word ptr [esi+0x3E6A], 161
		je s3plate
		jmp checkpants
		s4plate:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add edi, eax
			jmp checkpants
		s3plate:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add edi, eax
checkpants:
		cmp byte ptr [esi+0x3E78], 6
		jne checkboots
		cmp word ptr [esi+0x3E7A], 182
		je s4pants
		cmp word ptr [esi+0x3E7A], 162
		je s3pants
		jmp checkboots
		s4pants:
		mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add edi, eax
			jmp checkboots
		s3pants:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add edi, eax
checkboots:
		cmp byte ptr [esi+0x3E88], 6
		jne checkshield
		cmp word ptr [esi+0x3E8A], 183
		je s4boots
		cmp word ptr [esi+0x3E8A], 163
		je s3boots
		jmp checkshield
		s4boots:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add edi, eax
			jmp checkshield
		s3boots:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add edi, eax
checkshield:
		cmp byte ptr [esi+0x3E98], 6
		jne checkgloves
		cmp word ptr [esi+0x3E9A], 184
		je s4shield
		cmp word ptr [esi+0x3E9A], 164
		je s3shield
		jmp checkgloves
		s4shield:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add edi, eax
			jmp checkgloves
		s3shield:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add edi, eax
checkgloves:
		cmp byte ptr [esi+0x3EA8], 6
		jne checkbelt
		cmp word ptr [esi+0x3EAA], 185
		je s4gloves
		cmp word ptr [esi+0x3EAA], 165
		je s3gloves
		jmp checkbelt
		s4gloves:
		mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add edi, eax
			jmp checkbelt
		s3gloves:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add edi, eax
checkbelt:
		cmp byte ptr [esi+0x3EC8], 6
		jne checkstatlimit
		cmp word ptr [esi+0x3ECA], 186
		je s4belt
		cmp word ptr [esi+0x3ECA], 166
		je s3belt
		jmp checkstatlimit
		s4belt:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add edi, eax
			jmp checkstatlimit
		s3belt:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add edi, eax
checkstatlimit:
		cmp byte ptr [esi+0x37FC], 8
		je dex
		cmp byte ptr [esi+0x37FC], 0
		je spr
		cmp byte ptr [esi+0x37FC], 1
		je spr
		cmp byte ptr [esi+0x37FC], 6
		je spr
		mov eax, dword ptr [esi+0x3F5C]
		jmp devision
dex:
		mov eax, dword ptr [esi+0x3F64]
		jmp devision
spr:
		mov eax, dword ptr [esi+0x3F60]
devision:
		mov ecx, dword ptr [esi+0x3F68]
		xor edx, edx
		div ecx
		cmp eax, 4
		jbe exit1
		shr edi, 1
exit1:
		pop esi
		pop ebx
		pop edx
		pop ecx
		pop eax
		MOV DX,WORD PTR [ECX+0x4026] //st
		retn

PVM:
		push eax
		push ecx
		push edx
		push ebx
		push edi
		mov ebx, dword ptr [SkillsMemAddr]
		sub edi, 0x37d8

		finduserid2:
		cmp dword ptr [ebx], edi
		je checkfshield2
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit2
		jmp finduserid2
checkfshield2:
		cmp byte ptr [ebx+0xA], 1
		jne checkdestruct2
		mov eax, esi
		mov ecx, 5
		xor edx, edx
		div ecx
		add esi, eax
checkdestruct2:
		cmp byte ptr [ebx+0x13], 1
		jne checkstagebonusPVM
		mov eax, esi
		mov ecx, 5
		xor edx, edx
		div ecx
		add esi, eax
checkstagebonusPVM:
		cmp byte ptr [edi+0x3E48], 6
		jne checkplatePVM
		cmp word ptr [edi+0x3E4A], 180
		je s4helmPVM
		cmp word ptr [edi+0x3E4A], 160
		je s3helmPVM
		jmp checkplatePVM
		s4helmPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add esi, eax
			jmp checkplatePVM
		s3helmPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add esi, eax
checkplatePVM:
		cmp byte ptr [edi+0x3E68], 6
		jne checkpantsPVM
		cmp word ptr [edi+0x3E6A], 181
		je s4platePVM
		cmp word ptr [edi+0x3E6A], 161
		je s3platePVM
		jmp checkpantsPVM
		s4platePVM:
		mov eax, esi
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add esi, eax
			jmp checkpantsPVM
		s3platePVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add esi, eax
checkpantsPVM:
		cmp byte ptr [edi+0x3E78], 6
		jne checkbootsPVM
		cmp word ptr [edi+0x3E7A], 182
		je s4pantsPVM
		cmp word ptr [edi+0x3E7A], 162
		je s3pantsPVM
		jmp checkbootsPVM
		s4pantsPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add esi, eax
			jmp checkbootsPVM
		s3pantsPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add esi, eax
checkbootsPVM:
		cmp byte ptr [edi+0x3E88], 6
		jne checkshieldPVM
		cmp word ptr [edi+0x3E8A], 183
		je s4bootsPVM
		cmp word ptr [edi+0x3E8A], 163
		je s3bootsPVM
		jmp checkshieldPVM
		s4bootsPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add esi, eax
			jmp checkshieldPVM
		s3bootsPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add esi, eax
checkshieldPVM:
		cmp byte ptr [edi+0x3E98], 6
		jne checkglovesPVM
		cmp word ptr [edi+0x3E9A], 184
		je s4shieldPVM
		cmp word ptr [edi+0x3E9A], 164
		je s3shieldPVM
		jmp checkglovesPVM
		s4shieldPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add esi, eax
			jmp checkglovesPVM
		s3shieldPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add esi, eax
checkglovesPVM:
		cmp byte ptr [edi+0x3EA8], 6
		jne checkbeltPVM
		cmp word ptr [edi+0x3EAA], 185
		je s4glovesPVM
		cmp word ptr [edi+0x3EAA], 165
		je s3glovesPVM
		jmp checkbeltPVM
		s4glovesPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add esi, eax
			jmp checkbeltPVM
		s3glovesPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add esi, eax
checkbeltPVM:
		cmp byte ptr [edi+0x3EC8], 6
		jne exit2
		cmp word ptr [edi+0x3ECA], 186
		je s4beltPVM
		cmp word ptr [edi+0x3ECA], 166
		je s3beltPVM
		jmp exit2
		s4beltPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			add esi, eax
			jmp exit2
		s3beltPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			add esi, eax
exit2:
		pop edi
		pop ebx
		pop edx
		pop ecx
		pop eax
		TEST BYTE PTR [EDI+0x850],1 //st
		retn
	}
}

  __declspec (dllexport naked) void  NewFocusEffect()// Focused spirit effect
{
	__asm
	{
		push eax
		push ecx
		push edx
		mov edx, dword ptr [SkillsMemAddr]

		finduserid:
		cmp dword ptr [edx], esi
		je checkfocus
		add edx,96
		push edx
		sub edx, dword ptr [SkillsMemAddr]
		cmp edx, 48000
		pop edx
		ja exit1
		jmp finduserid
checkfocus:
		cmp byte ptr [edx+0xB], 1
		jne exit1
		mov eax, dword ptr [esi+0x3F60]
		sub eax, 10
		mov ecx, 18
		xor edx,edx
		div ecx
		xor edx, edx
		mov ecx, 25
		mul ecx
		add eax, 10
		sub eax, dword ptr [esi+0x3F60]
		add dword ptr [esp], eax
		jmp exit1
exit1:
		pop edx
		pop ecx
		pop eax
		MOV DWORD PTR [ESP+0x38],EDX
		MOV DWORD PTR [ESI+0x4364],EDX //st
		retn
	}
}

  __declspec (dllexport naked) void  NewWarcryEffect()// fire shield, warcry, despair, diamond skin and s3/4 nauthiz pieces defense increasing effects
{
	__asm
	{
		cmp dword ptr [esp], 0x004101B2
		jne PVM
		push eax
		push ecx
		push edx
		push ebx
		push esi
		mov ebx, dword ptr [SkillsMemAddr]
		mov esi, ecx

		finduserid:
		cmp dword ptr [ebx], esi
		je checkfshield
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit1
		jmp finduserid
checkfshield:
		cmp byte ptr [ebx+0xA], 1
		jne checkwarcry
		mov eax, edi
		mov ecx, 5
		xor edx, edx
		div ecx
		sub edi, eax
checkwarcry:
		cmp byte ptr [ebx+0xC], 1
		jne checkdespair
		cmp byte ptr [esi+0x37FC], 2
		jne checkdespair
		cmp dword ptr [esi+0x3F6C], 0
		jle checkdespair
		mov eax, edi
		mov ecx, 100
		xor edx, edx
		div ecx
		mov ecx, 30
		xor edx,edx
		mul ecx
		sub edi, eax
checkdespair:
		cmp byte ptr [ebx+0xD], 1
		jne checkdskin
		mov eax, edi
		mov ecx, 100
		xor edx, edx
		div ecx
		mov ecx, 40
		xor edx,edx
		mul ecx
		sub edi, eax
checkdskin:
		cmp byte ptr [ebx+0xE], 1
		jne checkstagebonus
		mov eax, edi
		mov ecx, 100
		xor edx, edx
		div ecx
		mov ecx, 30
		xor edx,edx
		mul ecx
		sub edi, eax
checkstagebonus:
		cmp byte ptr [esi+0x3E48], 6
		jne checkplate
		cmp word ptr [esi+0x3E4A], 180
		je s4helm
		cmp word ptr [esi+0x3E4A], 160
		je s3helm
		jmp checkplate
		s4helm:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub edi, eax
			jmp checkplate
		s3helm:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub edi, eax
checkplate:
		cmp byte ptr [esi+0x3E68], 6
		jne checkpants
		cmp word ptr [esi+0x3E6A], 181
		je s4plate
		cmp word ptr [esi+0x3E6A], 161
		je s3plate
		jmp checkpants
		s4plate:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub edi, eax
			jmp checkpants
		s3plate:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub edi, eax
checkpants:
		cmp byte ptr [esi+0x3E78], 6
		jne checkboots
		cmp word ptr [esi+0x3E7A], 182
		je s4pants
		cmp word ptr [esi+0x3E7A], 162
		je s3pants
		jmp checkboots
		s4pants:
		mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub edi, eax
			jmp checkboots
		s3pants:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub edi, eax
checkboots:
		cmp byte ptr [esi+0x3E88], 6
		jne checkshield
		cmp word ptr [esi+0x3E8A], 183
		je s4boots
		cmp word ptr [esi+0x3E8A], 163
		je s3boots
		jmp checkshield
		s4boots:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub edi, eax
			jmp checkshield
		s3boots:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub edi, eax
checkshield:
		cmp byte ptr [esi+0x3E98], 6
		jne checkgloves
		cmp word ptr [esi+0x3E9A], 184
		je s4shield
		cmp word ptr [esi+0x3E9A], 164
		je s3shield
		jmp checkgloves
		s4shield:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub edi, eax
			jmp checkgloves
		s3shield:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub edi, eax
checkgloves:
		cmp byte ptr [esi+0x3EA8], 6
		jne checkbelt
		cmp word ptr [esi+0x3EAA], 185
		je s4gloves
		cmp word ptr [esi+0x3EAA], 165
		je s3gloves
		jmp checkbelt
		s4gloves:
		mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub edi, eax
			jmp checkbelt
		s3gloves:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub edi, eax
checkbelt:
		cmp byte ptr [esi+0x3EC8], 6
		jne exit1
		cmp word ptr [esi+0x3ECA], 186
		je s4belt
		cmp word ptr [esi+0x3ECA], 166
		je s3belt
		jmp exit1
		s4belt:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub edi, eax
			jmp exit1
		s3belt:
			mov eax, edi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub edi, eax
exit1:
		pop esi
		pop ebx
		pop edx
		pop ecx
		pop eax
		TEST BYTE PTR [ECX+0x4028],2 //st
		retn

PVM:
		push eax
		push ecx
		push edx
		push ebx
		push edi
		mov ebx, dword ptr [SkillsMemAddr]
		mov edi, ecx

		finduserid2:
		cmp dword ptr [ebx], edi
		je checkfshield2
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit2
		jmp finduserid2
checkfshield2:
		cmp byte ptr [ebx+0xA], 1
		jne checkwarcry2
		mov eax, esi
		mov ecx, 5
		xor edx, edx
		div ecx
		sub esi, eax
checkwarcry2:
		cmp byte ptr [ebx+0xC], 1
		jne checkdespair2
		mov eax, esi
		mov ecx, 100
		xor edx, edx
		div ecx
		mov ecx, 30
		xor edx,edx
		mul ecx
		sub esi, eax
checkdespair2:
		cmp byte ptr [ebx+0xD], 1
		jne checkdskin2
		mov eax, esi
		mov ecx, 100
		xor edx, edx
		div ecx
		mov ecx, 40
		xor edx,edx
		mul ecx
		sub esi, eax
checkdskin2:
		cmp byte ptr [ebx+0xE], 1
		jne checkstagebonusPVM
		mov eax, esi
		mov ecx, 100
		xor edx, edx
		div ecx
		mov ecx, 30
		xor edx,edx
		mul ecx
		sub esi, eax
checkstagebonusPVM:
		cmp byte ptr [edi+0x3E48], 6
		jne checkplatePVM
		cmp word ptr [edi+0x3E4A], 180
		je s4helmPVM
		cmp word ptr [edi+0x3E4A], 160
		je s3helmPVM
		jmp checkplatePVM
		s4helmPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub esi, eax
			jmp checkplatePVM
		s3helmPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub esi, eax
checkplatePVM:
		cmp byte ptr [edi+0x3E68], 6
		jne checkpantsPVM
		cmp word ptr [edi+0x3E6A], 181
		je s4platePVM
		cmp word ptr [edi+0x3E6A], 161
		je s3platePVM
		jmp checkpantsPVM
		s4platePVM:
		mov eax, esi
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub esi, eax
			jmp checkpantsPVM
		s3platePVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub esi, eax
checkpantsPVM:
		cmp byte ptr [edi+0x3E78], 6
		jne checkbootsPVM
		cmp word ptr [edi+0x3E7A], 182
		je s4pantsPVM
		cmp word ptr [edi+0x3E7A], 162
		je s3pantsPVM
		jmp checkbootsPVM
		s4pantsPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub esi, eax
			jmp checkbootsPVM
		s3pantsPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub esi, eax
checkbootsPVM:
		cmp byte ptr [edi+0x3E88], 6
		jne checkshieldPVM
		cmp word ptr [edi+0x3E8A], 183
		je s4bootsPVM
		cmp word ptr [edi+0x3E8A], 163
		je s3bootsPVM
		jmp checkshieldPVM
		s4bootsPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub esi, eax
			jmp checkshieldPVM
		s3bootsPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub esi, eax
checkshieldPVM:
		cmp byte ptr [edi+0x3E98], 6
		jne checkglovesPVM
		cmp word ptr [edi+0x3E9A], 184
		je s4shieldPVM
		cmp word ptr [edi+0x3E9A], 164
		je s3shieldPVM
		jmp checkglovesPVM
		s4shieldPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub esi, eax
			jmp checkglovesPVM
		s3shieldPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub esi, eax
checkglovesPVM:
		cmp byte ptr [edi+0x3EA8], 6
		jne checkbeltPVM
		cmp word ptr [edi+0x3EAA], 185
		je s4glovesPVM
		cmp word ptr [edi+0x3EAA], 165
		je s3glovesPVM
		jmp checkbeltPVM
		s4glovesPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub esi, eax
			jmp checkbeltPVM
		s3glovesPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub esi, eax
checkbeltPVM:
		cmp byte ptr [edi+0x3EC8], 6
		jne exit2
		cmp word ptr [edi+0x3ECA], 186
		je s4beltPVM
		cmp word ptr [edi+0x3ECA], 166
		je s3beltPVM
		jmp exit2
		s4beltPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 8
			xor edx, edx
			mul ecx
			sub esi, eax
			jmp exit2
		s3beltPVM:
			mov eax, esi
			mov ecx, 100
			xor edx, edx
			div ecx
			mov ecx, 4
			xor edx, edx
			mul ecx
			sub esi, eax
exit2:
		pop edi
		pop ebx
		pop edx
		pop ecx
		pop eax
		TEST BYTE PTR [ECX+0x4028],2 //st
		retn
	}
}

  __declspec (dllexport naked) void  NewDskinEffect()// removing stamina from jarexx with diamond skin
{
	__asm
	{
		MOV EAX,DWORD PTR [ECX+0x3F7C] //st
		push ebx
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [ebx], ecx
		je checkdskin
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit1
		jmp finduserid
checkdskin:
		cmp byte ptr [ebx+0xE], 1
		jne exit1
		xor eax,eax
		MOV DWORD PTR [ECX+0x3F7C],0
exit1:
		pop ebx
		retn
	}
}

  __declspec (dllexport naked) void  NewGshieldEffect()// godly shield effect
{
	__asm
	{
		push ebx
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [ebx], esi
		je checkgshield
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit1
		jmp finduserid
checkgshield:
		cmp byte ptr [ebx+0x11], 1
		jne exit1
		add edx, 5000		
exit1:
		pop ebx
		mov dword ptr [esp+0x24], edx
		mov dword ptr [esi+0x436C],edx //st
		retn
	}
}

  __declspec (dllexport naked) void  NewEidolonFix()// eidolon restores stamina
{
	__asm
	{
		MOV DWORD PTR [EBP+0x4230],EAX //st
		push eax
		push ecx
		push edx
		mov ecx, ebp
		call InitEquipment
		cmp edi, 42
		je next
		mov ecx, ebp
		push 2000
		call IncreaseSP
next:
		pop edx
		pop ecx
		pop eax
		retn
	}
}

  __declspec (dllexport naked) void  NewCheckForAreaAttack()//one of procedures that checks for new area attacks
{
	__asm
	{
		cmp dword ptr [esp], 0x0045D05D
		je PVM
		cmp ecx, 0x145
		JE exit1
		cmp ecx, 0x150
		JE exit1
		cmp ecx, 0x180
		JE exit1
		MOV DX,WORD PTR [EDX+0x850]
		retn

		exit1:
		mov dword ptr [esp], 0x00454E6A
		retn

		PVM:
		cmp eax, 0x145
		JE exit2
		cmp eax, 0x150
		JE exit2
		cmp eax, 0x180
		JE exit2
		MOV EDX,DWORD PTR [ESP+0x2C]
		MOV ECX,DWORD PTR [ESP+0x28]
		retn

		exit2:
		mov dword ptr [esp], 0x0045B9CF
		retn
	}
}

   __declspec (dllexport naked) void  NewAreaAttacks()// processing some area attacks and providing them with basic damage formula
{
	__asm
	{
		cmp dword ptr [esp], 0x0045BB5F
		je PVM
		cmp dword ptr [esp+0x14], 0x145
		je sadad
		cmp dword ptr [esp+0x14], 0x150
		je destino
		cmp dword ptr [esp+0x14], 0x180
		je lavita
		ADD EDX,EBX //st
		ADD EDX,ESI //st
		ADD EDX,ECX //st
		retn

		sadad:
		add ecx, esi
		mov edx, ecx
		shr edx, 1
		lea edx, dword ptr [edx+ecx*2]
		add edx,ebx
		retn

		destino:
		add ecx, esi
		mov edx, ecx
		shr edx, 1
		neg edx
		lea edx, dword ptr [edx + ecx*4]
		add edx, ecx
		add edx,ebx
		retn

		lavita:
		push eax
		xor ecx,ecx
		xor edx,edx
		mov esi, dword ptr [ebp-0xA0]
		MOV EBX,DWORD PTR [EBP+0x48]
		MOV EAX,0x10624DD3
		ADD EBX,EDX
		ADD EBX,ECX
		MOV ECX,DWORD PTR [EBP+0x98]
		ADD EBX,ESI
		ADD EBX,ECX
		MUL EBX
		SHR EDX,6
		INC EDX
		IMUL EDX,DWORD PTR [EBP+0x2C]
		LEA EAX,DWORD PTR [EDX+EDX*2]
		SHR EAX,1
		LEA ECX,DWORD PTR [EAX*8]
		SUB ECX,EAX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		MOV EAX,DWORD PTR [EBP+0x30]
		SHR EDX,4
		LEA EDX,DWORD PTR [EDX+EAX+0x1388]
		pop eax
		retn

		PVM:
		cmp dword ptr [esp+0x8], 0x145
		je sadad2
		cmp dword ptr [esp+0x8], 0x150
		je destino2
		cmp dword ptr [esp+0x8], 0x180
		je lavita2
		ADD EDX,EAX //st
		ADD EDX,ESI //st
		ADD EDX,ECX //st
		retn

		sadad2:
		add ecx, esi
		mov edx, ecx
		shr edx, 1
		lea edx, dword ptr [edx+ecx*2]
		add edx,eax
		retn

		destino2:
		add ecx, esi
		mov edx, ecx
		shr edx, 1
		neg edx
		lea edx, dword ptr [edx + ecx*4]
		add edx, ecx
		add edx,eax
		retn

		lavita2:
		push ebx
		xor ecx,ecx
		xor edx,edx
		mov esi, dword ptr [ebp-0xA0]
		MOV EBX,DWORD PTR [EBP+0x48]
		MOV EAX,0x10624DD3
		ADD EBX,EDX
		ADD EBX,ECX
		MOV ECX,DWORD PTR [EBP+0x98]
		ADD EBX,ESI
		ADD EBX,ECX
		MUL EBX
		SHR EDX,6
		INC EDX
		IMUL EDX,DWORD PTR [EBP+0x2C]
		LEA EAX,DWORD PTR [EDX+EDX*2]
		SHR EAX,1
		LEA ECX,DWORD PTR [EAX*8]
		SUB ECX,EAX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		MOV EAX,DWORD PTR [EBP+0x30]
		SHR EDX,4
		LEA EDX,DWORD PTR [EDX+EAX+0x1388]
		pop ebx
		retn
	}
}

   __declspec (dllexport naked) void  NewCheckForMultiAttack()// checking for new slash-like attacks
{
	__asm
	{
		cmp edi, 0x133
		je multi
		cmp edi, 0x13F
		je multi
		mov dword ptr [esp], 0x0045F536
		retn

		multi:
		mov dword ptr [esp], 0x0045EB89
		retn
	}
}

   __declspec (dllexport naked) void  NewMultiAttack()// setting blizzard to hit 3 times in a row
{
	__asm
	{
		cmp dword ptr [esp+0x10], 0x13F
		je blizz
		MOV WORD PTR [EBX+0x14],0x133
		retn

		blizz:
		MOV WORD PTR [EBX+0x14],0x13F
		retn
	}
}

   __declspec (dllexport naked) void  NewCheckForMovingAttack()// setting server side weapon required for new attacks
{
	__asm
	{
		cmp edi, 0x156
		je ghostspear
		cmp edi, 0x180
		je bow
		cmp edi, 0x181
		je bow
		cmp edi, 0x145
		je sword
		cmp edi, 0x16D
		je sword
		cmp edi,0x35//st
		jg exit1//st
		retn

		exit1:
		mov dword ptr [esp],0x0045E65C
		retn

		ghostspear:
		mov dword ptr [esp],0x0045E5BA
		retn

		bow:
		mov dword ptr [esp],0x0045E8C4
		retn

		sword:
		mov dword ptr [esp],0x0045E7F5
		retn
	}
}

   __declspec (dllexport naked) void  NewCheckForMovingAttack2()// processing ghost spear
{
	__asm
	{
		cmp dword ptr [esp],0x00452F9D
		je PVM
		cmp ebx, 0x156
		je ghostspear
		cmp ebx, 0x143
		retn

		ghostspear:
		mov dword ptr [esp], 0x004521A0
		retn

		PVM:
		cmp esi, 0x156
		je ghostspear2
		cmp esi, 0x143
		retn

		ghostspear2:
		mov dword ptr [esp], 0x00453051
		retn
	}
}

   __declspec (dllexport naked) void  NewMovingAttacks()// providing ghost spear with basic attack formula
{
	__asm
	{
		cmp dword ptr [esp],0x0045306C
		je PVM
		cmp ebx, 0x156
		je ghostspear
		LEA EAX,DWORD PTR [EAX+EAX*2]
		LEA ECX,DWORD PTR [EAX+ECX*2]
		retn

		ghostspear:
		LEA EAX,DWORD PTR [EAX+EAX]
		LEA ECX,DWORD PTR [EAX+ECX*2]
		retn

		PVM:
		cmp esi, 0x156
		je ghostspear2
		LEA EDX,DWORD PTR [EAX+EAX*2]
		LEA EAX,DWORD PTR [EDX+ECX*2]
		retn

		ghostspear2:
		LEA EDX,DWORD PTR [EaX+EaX]
		LEA EAX,DWORD PTR [EDX+ECX*2]
		retn
	}
}

   __declspec (dllexport naked) void  NewCheckForSingleAttack()// processing new single attacks
{
	__asm
	{
		cmp dword ptr [esp], 0x0044D8C6
		je PVM
		MOVSX EAX,WORD PTR [ESP+0x4C]
		cmp eax, 0x16D
		je newskill
		cmp eax, 0x181
		je newskill
		cmp eax, 0x32
		retn

		newskill:
		mov dword ptr [esp],0x00448CC5
		retn

		PVM:
		MOVSX EBP,WORD PTR [ESP+0x40]
		cmp ebp, 0x16D
		je newskill2
		cmp ebp, 0x181
		je newskill2
		cmp ebp, 0x32
		retn

		newskill2:
		mov dword ptr [esp],0x0044D918
		retn
	}
}

   __declspec (dllexport naked) void  NewCheckForSingleAttack2()// processing new single attacks
{
	__asm
	{
		cmp dword ptr [esp], 0x0044DDE7
		je PVM
		cmp eax, 0x16D
		je newskill
		cmp eax, 0x181
		je newskill
		cmp eax, 0x58//st
		jg exit1 //st
		retn

		exit1:
		mov dword ptr [esp],0x0044A3E5
		retn

		newskill:
		mov dword ptr [esp],0x00449BF2 
		retn

		PVM:
		cmp ebp, 0x16D
		je newskill2
		cmp ebp, 0x181
		je newskill2
		cmp ebp, 0x58//st
		jg exit2 //st
		retn

		exit2:
		mov dword ptr [esp],0x0044E76B
		retn

		newskill2:
		mov dword ptr [esp],0x0044DF2E
		retn
	}
}

   __declspec (dllexport naked) void  NewCheckForSingleAttack3()// cant be sure but i think making dark arrow accuracy to depend on dex
{
	__asm
	{
		cmp dword ptr [esp], 0x0044DA62
		je PVM
		MOV EBX,DWORD PTR [EBP+0x48] //st
		cmp dword ptr [esp+8], 0x181
		je darkarrow
		LEA EBX,DWORD PTR [EBX+EAX*4]
		retn

		darkarrow:
		LEA EBX,DWORD PTR [EBX+EAX]
		retn

		PVM:
		cmp dword ptr [esp+0x10], 0x181
		je darkarrow2
		LEA EAX,DWORD PTR [EDX+ECX*4] //st
		MOV EDX,DWORD PTR [ESP+0x50] //st
		retn

		darkarrow2:
		LEA EAX,DWORD PTR [EDX+ECX]
		MOV EDX,DWORD PTR [ESP+0x50] //st
		retn
	}
}

   __declspec (dllexport naked) void  NewSingleAttack()// providing new single attacks with attack formulas
{
	__asm
	{
		cmp dword ptr [esp], 0x0044DF44
		je PVM
		cmp dword ptr [esp+0x14],0x16D
		je sunblade
		cmp dword ptr [esp+0x14],0x181
		je darkarrow
		MOV EDX,EAX //st
		SHR EDX,1//st
		LEA EAX,DWORD PTR [EAX+EAX*2]//st
		retn

		sunblade:
		mov edx, eax
		shr edx, 1
		//LEA EDX,DWORD PTR [edx+EDX*2]
		LEA EAX,DWORD PTR [EAX+eax*2]
		lea eax, dword ptr [edx+eax]
		xor edx, edx
		retn

		darkarrow:
		push ecx
		push ebx
		push esi
		xor ecx,ecx
		xor edx,edx
		mov esi, dword ptr [ebp-0xA0]
		MOV EBX,DWORD PTR [EBP+0x48]
		MOV EAX,0x10624DD3
		ADD EBX,EDX
		ADD EBX,ECX
		MOV ECX,DWORD PTR [EBP+0x98]
		ADD EBX,ESI
		ADD EBX,ECX
		MUL EBX
		SHR EDX,6
		add edx, 10
		IMUL EDX,DWORD PTR [EBP+0x2C]
		LEA EAX,DWORD PTR [EDX+EDX*2]
		SHR EAX,1
		LEA ECX,DWORD PTR [EAX*8]
		SUB ECX,EAX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		MOV EAX,DWORD PTR [EBP+0x30]
		SHR EDX,4
		LEA EDX,DWORD PTR [EDX+EAX+0x1388]
		pop esi
		pop ebx
		pop ecx
		mov dword ptr [esp],0x00449C1C
		pop eax
		push ecx
		push eax
		retn

		PVM:
		cmp dword ptr [esp+0x0C],0x16D
		je sunblade2
		cmp dword ptr [esp+0x0C],0x181
		je darkarrow2
		MOV EDX,EAX //st
		SHR EDX,1//st
		LEA EAX,DWORD PTR [EAX+EAX*2]//st
		retn

		sunblade2:
		mov edx, eax
		shr edx, 1
		//LEA EDX,DWORD PTR [edx+EDX*2]
		LEA EAX,DWORD PTR [EAX+eax*2]
		lea eax, dword ptr [edx+eax]
		xor edx, edx
		retn

		darkarrow2:
		push ebx
		push esi
		xor ecx,ecx
		xor edx,edx
		mov esi, dword ptr [edi-0xA0]
		MOV EBX,DWORD PTR [edi+0x48]
		MOV EAX,0x10624DD3
		ADD EBX,EDX
		ADD EBX,ECX
		MOV ECX,DWORD PTR [edi+0x98]
		ADD EBX,ESI
		ADD EBX,ECX
		MUL EBX
		SHR EDX,6
		add edx, 10
		IMUL EDX,DWORD PTR [edi+0x2C]
		LEA EAX,DWORD PTR [EDX+EDX*2]
		SHR EAX,1
		LEA ECX,DWORD PTR [EAX*8]
		SUB ECX,EAX
		MOV EAX,0xCCCCCCCD
		MUL ECX
		MOV EAX,DWORD PTR [edi+0x30]
		SHR EDX,4
		LEA EDX,DWORD PTR [EDX+EAX+0x1388]
		pop esi
		pop ebx
		mov dword ptr [esp],0x0044DF49
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix()// all NewMapFix## procedures are procedures that makes character able to enter new maps, makes character unable to kill during war on new maps, sets new maps to be "tau" zone, makes character unable to cast some skills like recall on new maps etc. I cant describe them all because i dont remember details now and dont have time to work on this anymore.
{
	__asm
	{
		CMP ESI,300
		je FV
		CMP ESI,301
		je FVh
		CMP ESI,302
		je FVs
		CMP ESI,303
		je FVw
		CMP ESI,305
		je SV
		CMP ESI,306
		je UD
		CMP ESI,307
		je AD
		CMP ESI,308
		je BD
		CMP ESI,309
		je CD
		CMP ESI,310
		je DD
		CMP ESI,311
		je SD4
		CMP ESI,312
		je SkD1
		CMP ESI,313
		je SkD1
		CMP ESI,314
		je SkD1
		CMP ESI,315
		je SkD1
		CMP ESI,316
		je SkD1
		CMP ESI,0x0BC
		retn
FV:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],125
		MOV WORD PTR [ECX+2],175
		MOV BYTE PTR [ECX+4],AL
		retn 8
FVh:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],9
		MOV WORD PTR [ECX+2],20
		MOV BYTE PTR [ECX+4],AL
		retn 8
FVs:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],9
		MOV WORD PTR [ECX+2],19
		MOV BYTE PTR [ECX+4],AL
		retn 8
FVw:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],9
		MOV WORD PTR [ECX+2],20
		MOV BYTE PTR [ECX+4],AL
		retn 8
SV:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],8
		MOV WORD PTR [ECX+2],488
		MOV BYTE PTR [ECX+4],AL
		retn 8
UD:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],50
		MOV WORD PTR [ECX+2],90
		MOV BYTE PTR [ECX+4],AL
		retn 8
AD:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],50
		MOV WORD PTR [ECX+2],90
		MOV BYTE PTR [ECX+4],AL
		retn 8
BD:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],50
		MOV WORD PTR [ECX+2],90
		MOV BYTE PTR [ECX+4],AL
		retn 8
CD:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],50
		MOV WORD PTR [ECX+2],90
		MOV BYTE PTR [ECX+4],AL
		retn 8
DD:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],50
		MOV WORD PTR [ECX+2],90
		MOV BYTE PTR [ECX+4],AL
		retn 8
SD4:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],10
		MOV WORD PTR [ECX+2],13
		MOV BYTE PTR [ECX+4],AL
		retn 8
SkD1:
		add esp, 4
		mov eax, 1
		xor edx,edx
		MOV ECX,DWORD PTR [ESP+0xC]
		pop esi
		pop ebx
		MOV WORD PTR [ECX],12
		MOV WORD PTR [ECX+2],23
		MOV BYTE PTR [ECX+4],AL
		retn 8
	}
}

   __declspec (dllexport naked) void  NewMapFix2()
{
	__asm
	{
		MOV DX,WORD PTR [ESI+0x37FE]
		cmp di, 300
		je newmap
		cmp di, 301
		je newmap
		cmp di, 302
		je newmap
		cmp di, 303
		je newmap
		cmp di, 305
		je newmap
		cmp di, 306
		je newmap
		cmp di, 307
		je newmap
		cmp di, 308
		je newmap
		cmp di, 309
		je newmap
		cmp di, 310
		je newmap
		cmp di, 311
		je sd4
		cmp di, 312
		je newmap
		cmp di, 313
		je newmap
		cmp di, 314
		je newmap
		cmp di, 315
		je newmap
		cmp di, 316
		je newmap
		retn

newmap:
		add esp,4
		push 0x0043F04A
		retn
sd4:
		test dword ptr [esi+0x4170], 65536
		jne newmap
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix3()
{
	__asm
	{
		CMP EAX,301
		je newmap
		CMP EAX,302
		je newmap
		CMP EAX,303
		je newmap
		CMP EAX,312
		je newmap
		CMP EAX,313
		je newmap
		CMP EAX,314
		je newmap
		CMP EAX,315
		je newmap
		CMP EAX,316
		je newmap
		CMP EAX,0x0B0
		jg exit1
newmap:
		retn
exit1:
		mov dword ptr [esp], 0x00421F4B
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix4()
{
	__asm
	{
		MOV ECX,DWORD PTR [EAX+0x32C4] //st
		CMP ECX,300
		je FV
		CMP ECX,301
		je FV
		CMP ECX,302
		je FV
		CMP ECX,303
		je FV
		CMP ECX,305
		je SV
		CMP ECX,306
		je UD
		CMP ECX,307
		je AD
		CMP ECX,308
		je BD
		CMP ECX,309
		je CD
		CMP ECX,310
		je DD
		CMP ECX,311
		je SD4
		CMP ECX,312
		je UD
		CMP ECX,313
		je AD
		CMP ECX,314
		je BD
		CMP ECX,315
		je CD
		CMP ECX,316
		je DD
		retn
FV:
		mov esi, 301
		jmp exit1
SV:
		mov esi, 100
		jmp exit1
UD:
		mov esi, 148
		jmp exit1
AD:
		mov esi, 155
		jmp exit1
BD:
		mov esi, 162
		jmp exit1
CD:
		mov esi, 169
		jmp exit1
DD:
		mov esi, 176
		jmp exit1
SD4:
		mov esi, 12
		jmp exit1
exit1:
		mov dword ptr [esp], 0x0043C22E
		retn
	}
}

   __declspec (dllexport naked) void  NewSendTotalStats()// sending total stats to F2 window
{
	__asm
	{
		cmp dword ptr [esp], 0x00439E19
		je Strength
		cmp dword ptr [esp], 0x00439E49
		je Spirit
		cmp dword ptr [esp], 0x00439E79
		je Dexterity
		cmp dword ptr [esp], 0x00439EA9
		je Power
Strength:
		MOV EAX,DWORD PTR [ECX+0x4360] //st
		add eax, dword ptr [ecx+0x4310]
		retn
Spirit:
		MOV EAX,DWORD PTR [ECX+0x4364] //st
		add eax, dword ptr [ecx+0x4314]
		retn
Dexterity:
		MOV EAX,DWORD PTR [ECX+0x4368] //st
		push edx
		mov edx, dword ptr [ecx+0x4230]
		cmp eax, edx
		jb basedex
		add eax, edx
		jmp next
basedex:
		add eax, eax
next:
		pop edx
		add eax, dword ptr [ecx+0x4318]
		retn
Power:
		MOV EAX,DWORD PTR [ECX+0x436C] //st
		add eax, dword ptr [ecx+0x431C]
		retn
	}
}

   __declspec (dllexport naked) void  NewMassAnih()// providing Hierarch with mass annihilation move.
{
	__asm
	{
		MOV BL,BYTE PTR [ECX+0x482134]//st
		cmp ecx, 0x44
		je massani
		retn
massani:
		add esp, 4
		MOV ECX,DWORD PTR [ESP+0x10]
		push 1
		push 0
		push 0
		push 0xF
		push 0x3A
		call DoSkillEffect
		push 0x481BDD
		retn
	}
}

   __declspec (dllexport naked) void  NewCanRecognize()// hierarch can see invisible characters.
{
	__asm
	{
		cmp al, 0x9B
		je exit1
		MOV AX,WORD PTR [ECX+0x1C]//st
		MOV EDX,EAX//st
		retn
exit1:
		mov dword ptr [esp], 0x0047D749
		retn
	}
}

   __declspec (dllexport naked) void  NewBAUnis()// unis dont fade in ba and war
{
	__asm
	{
		MOV EBX,DWORD PTR [ESP+0x20]//stm
		cmp dword ptr [ecx+0x32C4], 35
		je nofade
		cmp dword ptr [ecx+0x32C4], 69
		je nofade
		cmp dword ptr [ecx+0x32C4], 70
		je nofade
		push eax
		push ecx
		push edx
		push 1
		mov ecx, DWORD PTR [Esi+0x4504]
		mov edx, dword ptr [esi+0x42C8]
		push edx
		call IsWar
		pop edx
		pop ecx
		cmp eax, 1
		pop eax
		jne fade
		cmp DWORD PTR [Esi+0x455C], 1
		je nofade
fade:
		MOV EDI,EAX //st
		retn
nofade:
		mov eax, 1
		MOV EDI,EAX //st
		retn
	}
}

   __declspec (dllexport naked) void  NewBAProt()//prots dont fade in ba and war
{
	__asm
	{
		je prot
		MOV DWORD PTR [ESI+EDX*4+0x4120],0//st
		CMP EDX,0x0C
		retn
prot:
		push eax
		MOV EAX,DWORD PTR [Esi+0x4504]
		MOV EAX,DWORD PTR [EAX+0x32C4]
		cmp eax, 35
		je nofade
		cmp eax, 69
		je nofade
		cmp eax, 70
		je nofade
//checkwar:
		push ecx
		push edx
		push 1
		mov ecx, DWORD PTR [Esi+0x4504]
		mov eax, dword ptr [esi+0x42C8]
		push eax
		call IsWar
		pop edx
		pop ecx
		cmp eax, 1
		jne fade
		cmp DWORD PTR [Esi+0x455C], 1
		je nofade
fade:
		pop eax
		MOV DWORD PTR [ESI+EDX*4+0x4120],0//st
		CMP EDX,0x0C
		retn
nofade:
		pop eax
		mov dword ptr [esp], 0x0042EB89
		retn
	}
}

   __declspec (dllexport naked) void  NewAccuracyFix()// new accuracy equation for all characters
{
	__asm
	{
		fild dword ptr [esp+0x2C]
		fidiv dword ptr [esp+0x30]
		fimul dword ptr [AccNum]
		fistp dword ptr [AccBuf]
		mov edi, dword ptr [AccBuf]
		cmp edi, 100
		jbe next
		mov edi, 100
next:
		MOV EBP,DWORD PTR [ESP+0x34]//stm
		XOR EAX,EAX//st
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix5()
{
	__asm
	{
		cmp dword ptr [esp], 0x004297E2
		je buyitem
		cmp dword ptr [esp], 0x0042A8C2
		je buyitem
		cmp dword ptr [esp], 0x0041EC3C
		je showbankitem
		cmp dword ptr [esp], 0x0041EBC7
		je showbankmoney
		cmp dword ptr [esp], 0x0041DF14
		je additem
		cmp dword ptr [esp], 0x0041E660
		je takeitem
		cmp dword ptr [esp], 0x0041DCA9
		je addmoney
		cmp dword ptr [esp], 0x0041E466
		je takemoney
buyitem:
		MOV EAX,DWORD PTR [EDX+0x32C4]//st
		cmp eax, 302
		je buyitemexit1
		cmp eax, 300
		je buyitemexit1
		cmp eax, 312
		je buyitemexit1
		cmp eax, 313
		je buyitemexit1
		cmp eax, 314
		je buyitemexit1
		cmp eax, 315
		je buyitemexit1
		cmp eax, 316
		je buyitemexit1
		retn
buyitemexit1:
		add dword ptr [esp], 0x18
		retn

showbankitem:
		MOV EDX,DWORD PTR [ECX+0x32C4]//st
		cmp edx, 303
		je showbankitemexit1
		retn
showbankitemexit1:
		add dword ptr[esp],0x1A
		retn

showbankmoney:
		MOV EAX,DWORD PTR [EAX+0x32C4]//st
		cmp eax, 303
		je showbankmoneyexit1
		retn
showbankmoneyexit1:
		add dword ptr[esp],0x18
		retn

additem:
		MOV EAX,DWORD PTR [ECX+0x32C4]//st
		cmp eax, 303
		je additemexit1
		retn
additemexit1:
		add dword ptr[esp],0x18
		retn

takeitem:
		MOV EAX,DWORD PTR [EDX+0x32C4]//st
		cmp eax, 303
		je takeitemexit1
		retn
takeitemexit1:
		add dword ptr[esp],0x18
		retn

addmoney:
		MOV EAX,DWORD PTR [EDX+0x32C4]//st
		cmp eax, 303
		je addmoneyexit1
		retn
addmoneyexit1:
		add dword ptr[esp],0x22
		retn

takemoney:
		MOV EDX,DWORD PTR [ECX+0x32C4]//st
		cmp edx, 303
		je takemoneyexit1
		retn
takemoneyexit1:
		add dword ptr[esp],0x24
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix6()
{
	__asm
	{
		cmp dword ptr [esp], 0x0043C99B
		je check2
		cmp dword ptr [esp], 0x0043CA2B
		je check3
		cmp dword ptr [esp], 0x004477F6
		je check4
		cmp dword ptr [esp], 0x0043CD0C
		je check5
		CMP SI,1//st
		je exit1//st
		cmp si, 300
		je exit1
		cmp si, 305
		je exit1
		retn
exit1:
		mov dword ptr [esp], 0x0043C995
		retn

check2:
		MOV EAX,DWORD PTR [EDX+0x32C4]//st
		cmp eax, 300
		je check2exit1
		cmp eax, 305
		je check2exit1
		retn
check2exit1:
		mov dword ptr [esp], 0x0043C9B3
		retn

check3:
		cmp si, 300
		je check3exit1
		cmp si, 305
		je check3exit1
		CMP SI,0x5D//st
		jb check3exit2//st
		retn
check3exit1:
		mov dword ptr [esp], 0x0043CA3F
		retn
check3exit2:
		mov dword ptr [esp], 0x0043CA31
		retn

check4:
		cmp eax, 300
		je check4exit1
		cmp eax, 305
		je check4exit1
		TEST EAX,EAX//st
		je check4exit1//st
		CMP EAX,1//st
		retn
check4exit1:
		mov dword ptr [esp], 0x004477C9
		retn

check5:
		test esi,esi//st
		je check5exit1//st
		cmp esi, 300
		je check5exit1
		cmp esi, 305
		je check5exit1
		retn
check5exit1:
		mov dword ptr [esp], 0x0043CDDF
		retn
	}
}

   __declspec (dllexport naked) void  NewSkillWeapReqFix()// disabling bullseye and quick reload for canon after he unequips needed weapon
{
	__asm
	{
		push edx
		mov edx, dword ptr [SkillsMemAddr]
finduserid:
		cmp dword ptr [edx], esi
		je checkbullseye
		add edx,96
		push edx
		sub edx, dword ptr [SkillsMemAddr]
		cmp edx, 48000
		pop edx
		ja exit1
		jmp finduserid
checkbullseye:
		cmp byte ptr [edx+0xF], 1
		jne checkquick
		mov ecx, dword ptr [esp+0x80]
		push edx
		xor eax, eax
		MOV AX,WORD PTR [ESI+0x3EBA]
		push eax
		xor eax,eax
		MOV AL,BYTE PTR [ESI+0x3EB8]
		push eax
		call GetItemInfo
		pop edx
		test eax,eax
		je disablebullseye
		mov al, byte ptr [eax+0x57]
		cmp al, 1
		je checkquick
disablebullseye:
		push 1
		push 1
		push 0x49
		mov ecx,esi
		call OnSkillEffectExpired
		mov dword ptr [esp], 1
checkquick:
		cmp byte ptr [edx+0x10], 1
		jne exit1
		mov ecx, dword ptr [esp+0x80]
		xor eax, eax
		MOV AX,WORD PTR [ESI+0x3EBA]
		push eax
		xor eax,eax
		MOV AL,BYTE PTR [ESI+0x3EB8]
		push eax
		call GetItemInfo
		test eax,eax
		je disablequick
		mov al, byte ptr [eax+0x57]
		cmp al, 0x45
		je exit1
disablequick:
		push 1
		push 1
		push 0x4A
		mov ecx,esi
		call OnSkillEffectExpired
		mov dword ptr [esp], 1
exit1:
		pop edx
		TEST BYTE PTR [ESI+0x4024],4//st
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix7()
{
	__asm
	{
		cmp dword ptr [esp], 0x004643AE
		je func1
		cmp dword ptr [esp], 0x00464473
		je func2
		jmp func3
		
func1:
		cmp eax, 311
		je func1earth
		cmp eax, 300
		jae func1sig
		CMP EAX,0x5D//st
		jl func1exit1//st
		CMP EAX,0x6C//st
		retn
func1earth:
		mov dword ptr [esp], 0x004643C0
		retn
func1sig:
		mov dword ptr [esp], 0x00464389
		retn
func1exit1:
		mov dword ptr [esp], 0x004643B2
		retn

func2:
		cmp eax, 311
		je func2earth
		cmp eax, 300
		jae func2sig
		CMP EAX,0x5D//st
		jl func2exit1//st
		CMP EAX,0x6C//st
		retn
func2earth:
		mov dword ptr [esp], 0x00464485
		retn
func2sig:
		mov dword ptr [esp], 0x00464454
		retn
func2exit1:
		mov dword ptr [esp], 0x00464477
		retn

func3:
		cmp eax, 311
		je func3earth
		cmp eax, 300
		jae func3sig
		CMP EAX,0x5D//st
		jl func3exit1//st
		CMP EAX,0x6C//st
		retn
func3earth:
		mov dword ptr [esp], 0x0046450C
		retn
func3sig:
		mov dword ptr [esp], 0x00464504
		retn
func3exit1:
		mov dword ptr [esp], 0x004644F6
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix8() //recall
{
	__asm
	{
		cmp dword ptr [esp], 0x0043A4FE
		je place1
		cmp dword ptr [esp], 0x0043A57B
		je place2
		cmp dword ptr [esp], 0x0043A5A2
		je place3
place1:
		cmp di, 300
		jae goodexit
		LEA EDX,DWORD PTR [ESI+0x37D8]//st
		retn
goodexit:
		mov dword ptr [esp], 0x0043A56F
		retn

place2:
		MOV EAX,DWORD PTR [EBX+0x32C4]//st
		cmp eax, 311
		je earth
		cmp eax, 300
		jae sig
		retn
earth:
		mov dword ptr [esp], 0x0043A59A
		retn
sig:
		mov dword ptr [esp], 0x0043A593
		retn

place3:
		cmp di, 311
		je place3earth
		cmp di, 300
		jae place3sig
		CMP DI,0x5D//st
		jb place3exit1//st
		retn
place3earth:
		mov dword ptr [esp], 0x0043A5BD
		retn
place3sig:
		mov dword ptr [esp], 0x0043A5B6
		retn
place3exit1:
		mov dword ptr [esp], 0x0043A5A8
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix9() //teleport
{
	__asm
	{
		cmp dword ptr [esp], 0x00470E9B
		je place1
//place2:
		cmp ax, 311
		je place2earth
		cmp ax, 300
		jae place2sig
		CMP AX,0x5D//st
		jl place2exit1//st
		retn
place2earth:
		mov dword ptr [esp], 0x00471308
		retn
place2sig:
		mov dword ptr [esp], 0x00470ED6
		retn
place2exit1:
		mov dword ptr [esp], 0x00470ECA
		retn
place1:
		MOV ECX,DWORD PTR [EBX+0x32C4]//st
		cmp ecx, 311
		je earth
		cmp ecx, 300
		jae sig
		retn
earth:
		mov dword ptr [esp], 0x00471308
		retn
sig:
		mov dword ptr [esp], 0x00470EB5
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix10() //army warp
{
	__asm
	{
		cmp dword ptr [esp], 0x0047120B
		je place1
//place2:
		cmp ax, 311
		je place2earth
		cmp ax, 300
		jae place2sig
		CMP AX,0x5D//st
		jl place2exit1//st
		retn
place2earth:
		mov dword ptr [esp], 0x00471308
		retn
place2sig:
		mov dword ptr [esp], 0x00471245
		retn
place2exit1:
		mov dword ptr [esp], 0x00471239
		retn
place1:
		MOV WORD PTR [ESP+0x1C],DX//st
		cmp ecx, 311
		je earth
		cmp ecx, 300
		jae sig
		CMP ECX,0x5D//st
		retn
earth:
		mov dword ptr [esp], 0x00471308
		retn
sig:
		mov dword ptr [esp], 0x00471224
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix11()
{
	__asm
	{
		cmp dword ptr [esp], 0x00419660
		je place1
//place2:
		cmp si, 311
		je place2earth
		cmp si, 300
		jae place2sig
		CMP si,0x5D//st
		jl place2exit1//st
		retn
place2earth:
		mov dword ptr [esp], 0x004196a2
		retn
place2sig:
		mov dword ptr [esp], 0x0041969b
		retn
place2exit1:
		mov dword ptr [esp], 0x0041968d
		retn
place1:
		MOV EAX,DWORD PTR [ECX+0x32C4]//st
		cmp eax, 311
		je earth
		cmp eax, 300
		jae sig
		retn
earth:
		mov dword ptr [esp], 0x0041967F
		retn
sig:
		mov dword ptr [esp], 0x00419678
		retn
	}
}

   __declspec (dllexport naked) void  NewAttackBuffsFix()// sl, will power and rabbits foot to stack with each other
{
	__asm
	{
		cmp dword ptr [esp], 0x0040FFDD
		jne PVM
		MOV BX,WORD PTR [ESI+0x84C]//st
		TEST BL,1
		je SLcheck
		MOV EDI,DWORD PTR [ESP+0x14]
		MOV EAX,0xCCCCCCCD
		MUL EDI
		SHR EDX,2
		ADD EDI,EDX
		MOV DWORD PTR [ESP+0x14], edi
SLcheck:
		MOV AX,WORD PTR [ESI+0x850]
		MOV EDX,EAX
		AND EDX,0x400
		TEST DX,DX
		je RFcheck
		MOV EDI,DWORD PTR [ESP+0x14]
		MOV EAX,0xCCCCCCCD
		MUL EDI
		SHR EDX,2
		ADD EDI,EDX
		MOV DWORD PTR [ESP+0x14], edi
RFcheck:
		MOV AX,WORD PTR [ESI+0x850]
		AND EAX,0x4000
		TEST AX,AX
		je PVPexit
		MOV EDI,DWORD PTR [ESP+0x14]
		MOV EAX,0xCCCCCCCD
		MUL EDI
		SHR EDX,2
		ADD EDI,EDX
		MOV DWORD PTR [ESP+0x14], edi
PVPexit:
		MOV EDI,DWORD PTR [ESP+0x14]
		mov dword ptr [esp],0x00410017
		retn


PVM:
		MOV CX,WORD PTR [EDI+0x84C]//st
		TEST CL,1
		je SLcheck2
		MOV ESI,DWORD PTR [ESP+0x10]
		MOV EAX,0xCCCCCCCD
		MUL ESI
		SHR EDX,2
		ADD ESI,EDX
		MOV DWORD PTR [ESP+0x10], esi
SLcheck2:
		MOV AX,WORD PTR [EDI+0x850]
		MOV EDX,EAX
		AND EDX,0x400
		TEST DX,DX
		je RFcheck2
		MOV ESI,DWORD PTR [ESP+0x10]
		MOV EAX,0xCCCCCCCD
		MUL ESI
		SHR EDX,2
		ADD ESI,EDX
		MOV DWORD PTR [ESP+0x10], esi
RFcheck2:
		MOV AX,WORD PTR [EDI+0x850]
		AND EAX,0x4000
		TEST AX,AX
		je PVMexit
		MOV ESI,DWORD PTR [ESP+0x10]
		MOV EAX,0xCCCCCCCD
		MUL ESI
		SHR EDX,2
		ADD ESI,EDX
		MOV DWORD PTR [ESP+0x10], esi
PVMexit:
		MOV ESI,DWORD PTR [ESP+0x10]
		mov dword ptr [esp],0x0047ACF6
		retn
	}
}

   __declspec (dllexport naked) void  NewSkillsSpiritFix()// skills depend on total spirit with items
{
	__asm
	{
		cmp dword ptr [esp], 0x0043C446
		je func2
		push ecx
		mov ecx, dword ptr [ESI+0x4364]
		add ecx, dword ptr [ESI+0x4314]
		cmp ecx, eax
		pop ecx
		retn

func2:
		push ecx
		mov ecx, dword ptr [EBP+0x4364]
		add ecx, dword ptr [EBP+0x4314]
		cmp ecx, eax
		pop ecx
		retn
	}
}

   __declspec (dllexport naked) void  NewMapServerChat()// global/alliance chat functions
{
	__asm
	{
		cmp dword ptr [esp], 0x004410BD
		je func1
		cmp dword ptr [esp], 0x0044186B
		je func2
		cmp dword ptr [esp], 0x00473B9F
		je func3
		cmp dword ptr [esp], 0x00441889
		je func4
func1:
			MOV EAX,DWORD PTR [ESP+0x10]//stm
			MOVSX ECX,BYTE PTR [EAX]//st
			cmp ecx, 8
			je gchat
			cmp ecx, 9
			je achat
			retn
	gchat:
			mov dword ptr [esp], 0x0044111B
			retn
	achat:
			mov dword ptr [esp], 0x0044111B
			retn

func2:
			cmp byte ptr[ebx], 8
			je func2gchat
			MOV EAX,DWORD PTR [ESI+0x42C8]
			retn
	func2gchat:
			cmp DWORD PTR [ESI+0x37F8], 10
			jae func2next
			push eax
			push ecx
			push edx
			LEA EAX,DWORD PTR [ESP+0x30]
			push 4
			push eax
			push 23
			mov ecx, esi
			MOV DWORD PTR [ESP+0x3C],10
			CALL ServerSendMessage
			pop edx
			pop ecx
			pop eax
			jmp func2exit1
	func2next:
			mov dword ptr [esp], 0x0044186F
			retn
	func2exit1:
			mov dword ptr [esp], 0x00441897
			retn

func3:
			MOV EAX,DWORD PTR [ESP+0x18]//stm
			NOT ECX//st
			mov edx,dword ptr[esp+0x14]
			cmp byte ptr[edx], 8
			je func3gchat
			cmp byte ptr[edx], 9
			je func3achat
			retn
	func3gchat:
			mov byte ptr [ebx], 8
			retn
	func3achat:
			mov byte ptr [ebx], 9
			retn

func4:
			cmp byte ptr [ebx], 9
			jne func4exit2
			add esp,8
			push edi
			xor edi,edi
	nextarmy:
			sub esp, 4
			lea ecx, dword ptr [esp]
			Call StringFunc
			mov eax, dword ptr [esi+0x42c8]
			push eax
			lea eax, dword ptr ChatString2
			push eax
			lea eax, dword ptr [esp+0x8]
			push eax
			call FormatStringMapServer
			mov ecx, dword ptr [esi+0x4504]
			add ecx, 0x3310
			mov eax, dword ptr [esp]
			mov eax, dword ptr [eax]
			mov dword ptr [esp],eax
			mov eax, dword ptr [FindArmy]
			mov eax, dword ptr [eax]
			call eax
			add esp, 0xC
			add eax, 0x14
			inc edi
			lea eax, dword ptr [eax+4*edi]
			cmp edi, 5
			ja func4exit1
			mov eax, dword ptr [eax]
			cmp eax, 0
			je nextarmy
			mov ecx, dword ptr [esi+0x4504]
			mov edx, dword ptr [esp+0x28]
			push edx
			push eax
			call SendArmyChat
			jmp nextarmy
func4exit1:
			pop edi
			push 0x00441897
			retn
func4exit2:
			add esp, 4
			push eax
			call SendArmyChat
			push 0x00441897
			retn
	}
}

   __declspec (dllexport naked) void  NewMapCenterChat()
{
	__asm
	{
		cmp dword ptr [esp], 0x00404D77
		je func1
		cmp dword ptr [esp], 0x00404F8E
		je func2
		cmp dword ptr [esp], 0x00407043
		je func3
		cmp dword ptr [esp], 0x00405243
		je func4

func1:
			cmp esi, 8
			je gchat
			cmp esi, 9
			je achat
			ADD ESI,-3//st
			CMP ESI,3//st
			retn
	gchat:
			mov dword ptr [esp], 0x00404D8D
			retn
	achat:
			mov dword ptr [esp], 0x00404DA7
			retn


func2:
			mov eax, dword ptr [esp+0x8]
			cmp eax, 8
			je func2gchat
			MOV EAX,DWORD PTR [ESI+0x21C4]//st
			retn
	func2gchat:
			mov dword ptr [esp], 0x00404FA4
			retn


func3:
			mov eax, dword ptr [esp+0x44]
			cmp eax, 8
			je func3gchat
			pop eax
			push 0x0040DA28//st
			push ecx//st
			push eax
			retn
	func3gchat:
			mov eax, dword ptr [esp+8]
	findnameend:
			cmp byte ptr [eax], 0x0A
			je next
			inc eax
			jmp findnameend
	next:
			mov byte ptr [eax],0
			add eax, 1
			mov dword ptr [esp+8], eax
			sub eax, 2
	findnamestart:
			cmp byte ptr [eax], 0x0
			je next2
			dec eax
			jmp findnamestart
	next2:
			add eax, 1
			add esp,8
			push 12
			push eax
			lea eax, dword ptr ChatString
			push eax
			push ecx
			call FormatString
			add esp,4
			push 0x00407048
			retn

func4:
			cmp dword ptr [esp+8], 9
			jne func4exit2
			mov ecx, eax
			push esi
			mov esi, dword ptr [eax-8]
	func4findsymbol:
			cmp byte ptr [ecx], 0x0A
			je func4achat
			inc ecx
			dec esi
			je func4exit1
			jmp func4findsymbol
	func4achat:
			mov byte ptr [ecx], 0x0D
	func4exit1:
			pop esi
			MOV ECX,DWORD PTR [EDI+0x21C0]//st
			retn
	func4exit2:
			MOV ECX,DWORD PTR [EDI+0x21C0]//st
			retn
	}
}


   __declspec (dllexport naked) void  NewMapFix12()
{
	__asm
	{
		MOV EAX,DWORD PTR [EAX+0x32C4]
		cmp eax, 311
		ja exit1
		cmp eax, 306
		jb exit1
		mov dword ptr [esp], 0x00430E3F
		retn
exit1:
		retn
	}
}

  __declspec (dllexport naked) void  NewGOMUpdateFix()// updating character status after he gets or loses GOM
{
	__asm
	{
		MOV DWORD PTR [ESI+0x4230],EBX//st
		push eax
		push ecx
		push edx
		mov ecx, esi
		call InitEquipment
		pop edx
		pop ecx
		pop eax
		retn
	}
}

  __declspec (dllexport naked) void  NewDBSLfix()// fixing SL to keep dexterity bonus after logging out
{
	__asm
	{
		cmp ebx, 42
		jne exit1
		mov eax, dword ptr [ebp+0xA58]
		push eax
		MOV EAX,DWORD PTR [EBP+0xA54]
		push eax
		push edx
		push ebx
		lea eax, dword ptr [SLString]
		push eax
		lea eax,DWORD PTR [ESP+0x338]
		push eax
		mov ecx, dword ptr [esp+0x18]
		mov ecx, dword ptr [ecx+0xC]
		mov ecx, dword ptr [ecx]
		call ecx
		add esp, 0x18
		add dword ptr [esp], 19
		retn
exit1:
		LEA ECX,DWORD PTR [ESP+0x324]//stm
		retn
	}
}

  __declspec (dllexport naked) void  NewDBSLfix2()
{
	__asm
	{
		cmp esi, 42
		jne exit1
		lea eax, dword ptr [SLBuf]
		push eax
		LEA EDX,DWORD PTR [ESP+0x24]
		LEA EAX,DWORD PTR [ESP+0x20]
		push edx
		LEA ECX,DWORD PTR [ESP+0x20]
		push eax
		push ecx
		xor esi, esi
		lea eax, dword ptr [SLString]
		push eax
		push edi
		MOV DWORD PTR [ESP+0x38],ESI
		MOV DWORD PTR [ESP+0x34],ESI
		MOV DWORD PTR [ESP+0x30],ESI
		mov dword ptr [SLBuf], esi
		mov eax, dword ptr [esp+0x18]
		add eax, 0x1F
		mov eax, dword ptr [eax]
		mov eax, dword ptr [eax]
		call eax
		MOV EAX,DWORD PTR [ESP+0x30]
		add esp, 0x18
		MOV ECX,DWORD PTR [ESP+0x1C]
		cmp ecx, esi
		jle exit2
		MOV EDX,DWORD PTR [ESP+0x20]
		test edx,edx
		jle exit2
		mov edx, dword ptr [SLBuf]
		mov dword ptr [ebp+0xA58], edx
		add dword ptr [esp], 0x50
		retn
exit1:
		LEA EDX,DWORD PTR [ESP+0x20]//stm
		LEA EAX,DWORD PTR [ESP+0x1C]//stm
		retn
exit2:
		add dword ptr [esp],0x2EA
		retn
	}
}

  __declspec (dllexport naked) void  NewTraderFix()// fixing old street1 trader
{
	__asm
	{
		cmp dword ptr [ebx+4], 1
		je oldtrader
		add esp, 4
		MOV EAX,DWORD PTR [ESP+0x68]//st
		push 0
		push 0x00420E22
		retn
oldtrader:
		xor eax,eax
		MOV AX,WORD PTR [EBX+4]
		mov ecx, ebp
		MOV EDX,DWORD PTR [ECX]
		push eax
		LEA EAX,DWORD PTR [ESP]
		push 1
		push eax
		push 2
		push 0x3B7
		CALL DWORD PTR [EDX+0x0C]
		add esp, 4
		mov dword ptr [esp], 0x00420E3F
		retn
	}
}

  __declspec (dllexport naked) void  NewBullseyeEffect2()// bullseye effect: makes canon's critical hit chance 100%
{
	__asm
	{
		cmp dword ptr [esp+0x34], 0x0046AF81
		je PVP
		cmp dword ptr [esp+0x34], 0x0046BFE3
		jne PVM
PVP:
		mov eax, dword ptr [esp+0x40]
		push ebx
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid:
		cmp dword ptr [ebx], eax
		je checkbullseye
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit1
		jmp finduserid
checkbullseye:
		cmp byte ptr [ebx+0xF], 1
		jne exit1
		add esi, 50
exit1:
		pop ebx
		cmp esi, 100 //st
		jle good//st
		mov esi,100//st
good:
		retn

PVM:
		mov eax, dword ptr [esp+0x2C]
		push ebx
		mov ebx, dword ptr [SkillsMemAddr]
		
		finduserid2:
		cmp dword ptr [ebx], eax
		je checkbullseye2
		add ebx,96
		push ebx
		sub ebx, dword ptr [SkillsMemAddr]
		cmp ebx, 48000
		pop ebx
		ja exit2
		jmp finduserid2
checkbullseye2:
		cmp byte ptr [ebx+0xF], 1
		jne exit2
		add esi, 50
exit2:
		pop ebx
		cmp esi, 100 //st
		jle good2//st
		mov esi,100//st
good2:
		retn
	}
}

  __declspec (dllexport naked) void  NewAttackBoostFix()// fixing issue with selion set/aryne/erynies set/minervas set giving extremly high attack bonus at some occasions
{
	__asm
	{
		sub esi, ebx
		xor ebx,ebx
		cmp esi,1
		jae good
		mov esi,1
good:
		MOV EAX,DWORD PTR [ESP+0x20]//stm
		TEST EAX,EAX
		retn
	}
}

   __declspec (dllexport naked) void  NewMapFix13() //recall/teleport m311
{
	__asm
	{
		cmp dword ptr [esp], 0x0043A415
		je RecallFrom
		cmp dword ptr [esp], 0x004474BE
		je Teleport
RecallHere:
		MOV ESI,DWORD PTR [EDX+0x3548] //st
		cmp eax, 311
		je RecallHereExit1
		retn
RecallHereExit1:
		mov dword ptr [esp], 0x00447724
		retn

RecallFrom:
		MOV EAX,DWORD PTR [EBX+0x32C4]//st
		cmp eax, 311
		je RecallFromExit1
		retn
RecallFromExit1:
		mov dword ptr [esp], 0x0043A54C
		retn

Teleport:
		MOV ECX,DWORD PTR [EDX+0x3548]//st
		cmp eax, 311
		je TeleportExit1
		retn
TeleportExit1:
		mov dword ptr [esp], 0x00447561
		retn
	}
}

   __declspec (dllexport naked) void  NewHeroFix()// making 1k hero bonus to work PVM
{
	__asm
	{
		MOV EAX,DWORD PTR [EDI+0x4374]//st
		cmp dword ptr [edi+0x37F8], 1000
		jb exit1
		add eax, 30
		cmp eax, 80
		jbe exit1
		mov eax, 80
exit1:
		retn
	}
}

   __declspec (dllexport naked) void  NewKitExpBonus()// kitara's 15% bonus exp
{
	__asm
	{
		cmp dword ptr [esp+0x78], 0
		jne exit1
		cmp byte ptr [ecx+0x37FC], 6
		jne exit1
		push eax
		push ecx
		push edx
		push 1
		mov edx, dword ptr [esp+0x84]
		push edx
		LEA ECX,DWORD PTR [EBX+0x3184]
		call GetMemberInfo
		test eax,eax
		je exit2
		mov eax, ebp
		mov ecx, 100
		xor edx,edx
		div ecx
		xor edx,edx
		mov ecx, 15
		mul ecx
		add ebp, eax
exit2:
		pop edx
		pop ecx
		pop eax
exit1:
		CMP DWORD PTR [ECX+0x43A4],2//st
		retn
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客软件开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值