Npc洗红 C++源码
main.cpp : #include "main.h"
extern "C" _declspec(dllexport) void Init() {
DWORD OldProtect;
if (VirtualProtect(LPVOID(0x00400000), 1085439, PAGE_EXECUTE_READWRITE, &OldProtect))
{
MessageBoxA(0, "NPC洗红 Init();", "CyAiNy", MB_OK);
HookThis((DWORD)&NPCTalk, 0x00401B27);
}
else {
MessageBoxA(0, "囧囧囧囧囧", "CyAiNy", MB_OK);
}
}
void HookThis(DWORD dwMyFuncOffset, DWORD dwJmpOffset) {
*(DWORD*)(dwJmpOffset+1) = dwMyFuncOffset - (dwJmpOffset+5);
} |
Npc.cpp: #include "main.h"
void PKClear(OBJECTSTRUCT* lpObj, OBJECTSTRUCT * lpNpc) {
int ClearHMWitches = GetPrivateProfileIntA("GSInfo", "PKClear", 1, MU_INI);
int ClearHMMoney = GetPrivateProfileIntA("GSInfo", "ClearHMMoney", 50, MU_INI);
ClearHMMoney = ClearHMMoney * 1000000;
if (!ClearHMWitches) { return; }
if (lpObj->PK_Level < 4) {
ChatNpc(lpNpc, "[系统提示]你不是红名!", lpObj->m_Index);
//GCServerMsgStringSend("[系统提示]你不是红名!", lpObj->m_Index, 1);
return;
}
if(lpObj->Money < ClearHMMoney) {
char tmp[100];
sprintf(tmp, "[系统提示]需要%MU币才能洗红!", (ClearHMMoney / 1000000));
ChatNpc(lpNpc, tmp, lpObj->m_Index);
//GCServerMsgStringSend(tmp, lpObj->m_Index, 1);
return;
}
lpObj->Money -= ClearHMMoney;
lpObj->PK_Level = 3;
//GCServerMsgStringSend("恭喜你!红名已成功清除!", lpObj->m_Index, 1);
ChatNpc(lpNpc, "恭喜你!红名已成功清除!", lpObj->m_Index);
GCPKLevelSend(lpObj->m_Index,3);
GCMoneySend(lpObj->m_Index, lpObj->Money);
}
void NPCTalk(OBJECTSTRUCT* lpNpc, OBJECTSTRUCT* lpObj) {
switch (lpNpc->Class) {
case 249: {
PKClear(lpObj, lpNpc); return;
break;
}
}
NpcTalkEx(lpNpc, lpObj);
}
|
Main.h: #ifndef HOTIC3_H
#define HOTIC3_H
#include <windows.h>
#include <iostream>
#pragma warning(disable: 4996)
#define MU_INI "./hotic3.ini"
#define ChatNpc ((void(*) (OBJECTSTRUCT * lpNpc, char * Msg, int senduser)) 0x0040147E)
#define GCPKLevelSend ((void(*) (int, int)) 0x00401D7F)
#define GCMoneySend ((void(*) (DWORD, int)) 0x004185C0)
#define NpcTalkEx ((void(*) (OBJECTSTRUCT* lpNpc, OBJECTSTRUCT* lpObj)) 0x00487A50)
#define GCServerMsgStringSend ((void(*)(char* Text, DWORD PlayerID, int Type)) 0x00416430)
#define OBJECT_BASE 0x4CEE778
#define OBJECT_SIZE 0x0D0C
#define OBJECT_MIN 0x12C0
#define OBJECT_MAX 0x15E0
#define OBJECT_POINTER(aIndex) ((aIndex * OBJECT_SIZE) + OBJECT_BASE)
#define OBJECT_TABINDEX(lpObj) ((lpObj - OBJECT_BASE) / OBJECT_SIZE)
struct OBJECTSTRUCT {
/*0x0*/ /*|0x4|*/ int m_Index;
/*0x4*/ /*|0x4|*/ int Connected;
/*0x8*/ /*|0x0C|*/ char unk1[12];
/*0x14*/ /*|0x10|*/ char Ip_addr[16];
/*0x24*/ /*|0x3D|*/ char unk2[59];
/*0x5F*/ /*|0x0D|*/ char Login[11];
/*0x6A*/ /*|0x0D|*/ char Nick[11];
/*0x75*/ /*|0x11|*/ char unk3[14];
/*0x83*/ /*|0x1|*/ unsigned char Class;
/*0x84*/ /*|0x1|*/ unsigned char DbClass;
/*0x85*/ /*|0x1|*/ unsigned char ChangeUP;
/*0x86*/ /*|0x2|*/ short Level;
/*0x88*/ /*|0x4|*/ int LevelUpPoints;
/*0x8C*/ /*|0x4|*/ unsigned long Experience;
/*0x90*/ /*|0x4|*/ unsigned long NextExp;
/*0x94*/ /*|0x4|*/ int Money;
/*0x98*/ /*|0x2|*/ short Strength;
/*0x9A*/ /*|0x2|*/ short Dexterity;
/*0x9C*/ /*|0x2|*/ short Vitality;
/*0x9E*/ /*|0x2|*/ short Energy;
/*0xA0*/ /*|0x4|*/ float Life;
/*0xA4*/ /*|0x4|*/ float MaxLife;
/*0xA8*/ /*|0x8|*/ char unk4[8];
/*0xB0*/ /*|0x4|*/ float Mana;
/*0xB4*/ /*|0x4|*/ float MaxMana;
/*0xB8*/ /*|0x4|*/ int Stamina;
/*0xBC*/ /*|0x4|*/ int MaxStamina;
/*0xC0*/ /*|0x4|*/ int MaxStamina2;
/*0xC4*/ /*|0x16|*/ char unk5[8];
/*0xCC*/ /*|0x1|*/ char PK_Count;
/*0xCD*/ /*|0x1|*/ char PK_Level;
/*0xD0*/ /*|0x4|*/ int PK_Time;
/*0xD4*/ /*|0x2|*/ short X;
/*0xD6*/ /*|0x2|*/ short Y;
/*0xD8*/ /*|0x1|*/ unsigned char Dir;
/*0xD9*/ /*|0x1|*/ unsigned char MapNumber;
/*0xDA*/ /*|0xC|*/ char unk7[12];
/*0xE6*/ /*|0x2|*/ short StartX;
/*0xE8*/ /*|0x2|*/ short StartY;
/*0xEA*/ /*|0x2|*/ short m_OldX;
/*0xEC*/ /*|0x2|*/ short m_OldY;
/*0xEE*/ /*|0x97|*/ char unk8[130];
/*0x170*//*|0x1|*/ char CtlCode;
/*NEAR ALL MUCH 0x171 */ char unk9[2739];
/*0xC24*//*|0x4|*/ //ITEMSTRUCT *pInventory;
/*0xC28*//*ALL*/ char ALL[212];
};
extern OBJECTSTRUCT *ObjTab;
void HookThis(DWORD dwMyFuncOffset, DWORD dwJmpOffset);
void NPCTalk(OBJECTSTRUCT* lpNpc, OBJECTSTRUCT* lpObj);
void PKClear(OBJECTSTRUCT* lpObj, OBJECTSTRUCT * lpNpc);
#endif
|