您的位置:首页 > 科技 > IT业 > 整合营销案例_建设哪里看额度_搜索引擎营销就是seo_seo优化工具大全

整合营销案例_建设哪里看额度_搜索引擎营销就是seo_seo优化工具大全

2025/1/9 11:23:41 来源:https://blog.csdn.net/qq_36301061/article/details/144951647  浏览:    关键词:整合营销案例_建设哪里看额度_搜索引擎营销就是seo_seo优化工具大全
整合营销案例_建设哪里看额度_搜索引擎营销就是seo_seo优化工具大全

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:51.第二阶段x86游戏实战2-继续寻找lua_游戏的lua怎么找

现在的辅助界面,如下图

修改的代码

通用.h文件的修改,新加 TFunScene 结构体、FUN_GetSceneID 函数

#pragma once
void Call_输出调试信息(char*pszFormat, ...);
DWORD ReadDword(DWORD Adress);
BYTE ReadByte(DWORD Adress);
char* ReadStr(char *TextAdress);
FLOAT ReadFloat(DWORD Adress);
WORD ReadWord(DWORD Adress);
struct TFunScene
{char szName[20];int nSceneId;
};int  FUN_GetSceneID(const char* szSceneName);

通用.cpp文件的修改,新加 FUN_GetSceneID 函数、gScene_Array变量(地图名与地图id的对应关系)

#include "pch.h"
#include "通用.h"/**... 是可变参数,意思是可以给Call_输出调式信息函数传递无限个参数
*/
void Call_输出调试信息(char * pszFormat, ...)
{
#ifdef _DEBUGchar szbufFormat[0x1000];char szbufFormat_Game[0x1100] = "";va_list argList;/**当前函数 Call_输出调式信息(char * pszFormat, ...)这样声明的va_start(argList, pszFormat);意思是获取 ... 这个可变参数它会把 pszFormat 后面都会当做成可变参数赋值给 argList*/va_start(argList, pszFormat);/**vsprintf_s(szbufFormat, pszFormat, argList);意思是把 pszFormat 和 argList数据进行拼接,拼接完放到 szbufFormat 这种通过 vsprintf_s 让Call_输出调式信息函数支持了 %d 替换成数字这样的功能*/vsprintf_s(szbufFormat, pszFormat, argList);/**strcat_s(szbufFormat_Game, szbufFormat);意思是把 szbufFormat 的内容放到 szbufFormat_Game 中*/strcat_s(szbufFormat_Game, szbufFormat);/**OutputDebugStringA(szbufFormat_Game);把 szbufFormat_Game 它的内容打印到日志这个日志可以通过 Dbgview.exe 查看Dbgview放到百度网盘了*/OutputDebugStringA(szbufFormat_Game);// va_end(argList);表示可变参数使用完了va_end(argList);
#endif // _DEBUG}FLOAT ReadFloat(DWORD Adress)
{//判断内存是否可以读 (参数1: 读取的地址,  参数2 : 长度) 返回值 0的话就是可以if (IsBadReadPtr((void*)Adress, sizeof(FLOAT)) == 0)return *(FLOAT*)Adress;return 0;}WORD ReadWord(DWORD Adress)
{//判断内存是否可以读 (参数1: 读取的地址,  参数2 : 长度) 返回值 0的话就是可以if (IsBadReadPtr((void*)Adress, sizeof(WORD)) == 0)return *(WORD*)Adress;return 0;}DWORD ReadDword(DWORD Adress) {/*(void*)Adress意思是把Adress的值转成void*也就是void的地址类型也就是把Adress它的值当成内存地址IsBadReadPtr函数是判断传的内存地址是否可读,可以直接复制IsBadReadPtr去百度搜,答案一大堆*(DWORD*)Adress;这个意思(DWORD*)Adress它把Adress的值当成了内存地址然后*(DWORD*)Adress,这个最左边的*意思是把内存地址的值取出来*/if (IsBadReadPtr((void*)Adress, sizeof(DWORD)) == 0)return *(DWORD*)Adress;return 0;
}BYTE ReadByte(DWORD Adress)
{//判断内存是否可以读 (参数1: 读取的地址,  参数2 : 长度) 返回值 0的话就是可以if (IsBadReadPtr((void*)Adress, sizeof(BYTE)) == 0)return *(BYTE*)Adress;return 0;}char* ReadStr(char *TextAdress)
{//判断内存是否可以读 (参数1: 读取的地址,  参数2 : 长度) 返回值 0的话就是可以读if (IsBadReadPtr((void*)TextAdress, sizeof(char)) == 0)return TextAdress;//OutDebugStringA("内存不能读=%x", TextAdress);return "NULL";}TFunScene gScene_Array[]//地图场景数组
{{"洛阳", 0},{ "苏州", 1 },{ "大理", 2 },{ "嵩山", 3 },{ "太湖", 4 },{ "镜湖", 5 },{ "无量山", 6 },{ "剑阁", 7 },{ "敦煌", 8 },{ "少林寺", 9 },{ "丐帮总舵", 0xA },{ "光明殿", 0xB },{ "武当山", 0xC },{ "天龙寺", 0xD },{ "凌波洞", 0xE },{ "峨嵋山", 0xF },{ "星宿海", 0x10 },{ "天山", 0x11 },{ "雁南", 0x12 },{ "西湖", 0x1E },{ "洱海", 0x18 },{ "宝藏洞一层",166},{"雁北",19},{"草原",20},{"辽西",21},{"长白山",22},{"黄龙府",23},{"洱海",24},{"苍山",25},{"石林",26},{"玉溪",27},{"南诏",28},{"苗疆",29},{"西湖",30},{"龙泉",31},{"武夷",32},{"梅岭",33},{"南海",34},{"琼州",35},{"聚贤庄",36},{"燕子坞",37},{"一品堂",38},{"叛军营地",42},{"木人巷",47},{"珍珑棋局",61},{"水牢",66},{"地府",77},{"沙漠要塞",78},{"宋辽边境",79},{"野外匪寨",80},{"竹林",81},{"擂台",82},{"擂台",92},{"光明洞",102},{"逍遥谷底",103},{"灵性峰",104},{"丐帮酒窖",105},{"桃花阵",106},{"塔林",107},{"五神洞",108},{"折梅峰",109},{"墓穴",110},{"塔底",111},{"玄武岛",112},{"擂鼓山",116},{"擂鼓山",117},{"万劫谷",118},{"万劫谷",119},{"苍茫山",120},{"苍茫山",121},{"小木人巷",122},{"后花园",123},{"集市",124},{"矿场",125},{"牧场",126},{"书阁",127},{"市集",128},{"雁南山洞",129},{"雁北山洞",130},{"西湖山洞",131},{"苍山山洞",132},{"光明洞",133},{"逍遥谷底",134},{"灵性峰",135},{"丐帮酒窖",136},{"桃花阵",137},{"塔林",138},{"五神洞",139},{"折梅峰",140},{"塔底",141},{"光明洞",142},{"逍遥谷底",143},{"灵性峰",144},{"丐帮酒窖",145},{"桃花阵",146},{"塔林",147},{"五神洞",148},{"折梅峰",149},{"塔底",150},{"市集",151},{"市集",152},{"工地",153},{"校场",154},{"衙门",155},{"三春幻境",156},{"三夏幻境",157},{"三秋幻境",158},{"三冬幻境",159},{"边关阵地山头",160},{"边关阵地山头",161},{"边关阵地山头",162},{"边关阵地山头",163},{"西湖",164},{"藏经阁",165},{"宝藏洞一层",166},{"考场",167},{"华山绝顶",168},{"宝藏洞二层",169},{"贼寇营地",170},{"藏经阁",171},{"藏经阁",172},{"少林寺",173},{"丐帮总舵",174},{"光明殿",175},{"武当山",176},{"天龙寺",177},{"凌波洞",178},{"峨嵋山",179},{"星宿海",180},{"天山",181},{"少林寺",182},{"丐帮总舵",183},{"光明殿",184},{"武当山",185},{"天龙寺",186},{"凌波洞",187},{"峨嵋山",188},{"星宿海",189},{"天山",190},{"宝藏洞三层",191},{"宝藏洞四层",192},{"宝藏洞五层",193},{"监狱",194},{"比武会场",195},{"普通礼堂",196},{"高级礼堂",197},{"豪华礼堂",198},{"大军草料场",199},{"苗人洞",200},{"圣兽山",201},{"燕王古墓一层",202},{"燕王古墓二层",203},{"燕王古墓三层",204},{"燕王古墓四层",205},{"燕王古墓五层",206},{"燕王古墓六层",207},{"燕王古墓七层",208},{"燕王古墓八层",209},{"燕王古墓九层",210},{"山洞船坞",211},{"剑冢",212},{"摩崖洞",213},{"野人沟",214},{"温泉洞",215},{"黄龙洞",216},{"水晶湖",217},{"先王坟",218},{"天坑树洞",219},{"桃花源",220},{"海贼洞",221},{"雪狼湖",222},{"凤凰古镇",223},{"钱庄",224},{"银皑雪原",229},{"镜湖匪寨",230},{"野猪农场",231},{"圣兽山",232},{"牡丹碗",233},{"竞技场",234},{"盐湖",235},{"燕子坞",236},{"白沙盐坑",237},{"洛阳第一休息室",238},{"洛阳第二休息室",239},{"大理休息室",240},{"苏州休息室",241},{"寒玉谷",243},{"火焰山",244},{"高昌",245},{"楼兰",246},{"塔里木",247},{"昆仑山",248},{"大宛",249},{"撒马尔罕",250},{"火焰谷",251},{"高昌迷宫",252},{"塔克拉玛干",253},{"昆仑福地",254},{"汗血岭",255},{"圣火宫",256},{"足球场",257},{"篮球场",258},{"排球场",259},{"束河古镇",260},{"缥缈峰",261},{"秦皇地宫一层",262},{"秦皇地宫二层",263},{"秦皇地宫三层",264},{"玄雷坡",265},{"毒障泽地",266},{"熔岩之地",267},{"玄武岛",268},{"楼兰藏宝洞",269},{"逐鹿",270},{"亮马驿",271},{"藏经阁",272},{"天劫楼一层",273},{"天劫楼二层",274},{"天劫楼三层",275},{"天劫楼四层",276},{"天劫楼五层",277},{"天劫楼六层",278},{"天劫楼七层",279},{"凤凰平原",280},{"凤凰陵墓",281},{"清源",282},{"清源山洞",283},{"慕容山庄",284},{"藏书水阁",285},{"藏书水阁",286},{"藏书水阁",287},{"慕容山庄",288},{"慕容山庄",289},{"华山之巅",290},{"四绝庄",291},{"秦皇地宫四层",292},{"拈花木人阵",293},{"兵圣奇阵",294},{"通天塔地宫",295},{"通天塔1层",296},{"通天塔2层",297},{"通天塔3层",298},{"通天塔塔顶",299},{"天龙幻境",300},{"争霸赛休息室",301},{"团队比武会场",302},{"总决赛一号场地",303},{"总决赛二号场地",304},{"总决赛三号场地",305},{"总决赛四号场地",306},{"生死擂台",546},{"珍珑棋局",550},
{ "贼寇营地",551 },{"少林寺",552},{"丐帮总舵",553},{"光明殿",554},{"武当山",555},{"天龙寺",556},{"凌波洞",557},{"峨嵋山",558},{"星宿海",559},{"天山",560},{"慕容山庄",561},{"宋辽边境",562},{"野外匪寨",563},{"竹林",564},{"比武会场",567},{"林海溪谷",569},{"钧天王陵",570},{"罗浮王陵",571},{"潮京王陵",572},{"漠南青原",573},{"忘川花海",574},{"天岐南淮",575},{"藏经阁",576},{"监狱",577},{"地府",578},{"新洛阳",579},{"凤鸣镇",580},{"钧天城",581},{"罗浮城",582},{"潮京城",583},{"少林寺",584},{"丐帮总舵",585},{"光明殿",586},{"武当山",587},{"天龙寺",588},{"凌波洞",589},{"峨嵋山",590},{"星宿海",591},{"天山",592},{"慕容山庄",593},{"天荒地宫",598},{"擂台",599},{"凤鸣王陵",600},{"光明洞",601},{"逍遥谷底",602},{"灵性峰",603},{"丐帮酒窖",604},{"桃花阵",605},{"塔林",606},{"五神洞",607},{"折梅峰",608},{"塔底",609},{"藏书水阁",610},{"唐家堡",615},{"雁南正南",615},
};int  FUN_GetSceneID(const char* szSceneName)//通过名称获取地图场景ID
{size_t Count = sizeof(gScene_Array) / sizeof(gScene_Array[0]);for (size_t i = 0; i < Count; i++){if (strcmp(gScene_Array[i].szName, szSceneName) == 0)//名称完全匹配{return gScene_Array[i].nSceneId;}}return -1;//没有就返回-1
}

结构.h文件的修改,新加 ClientInfo结构体、打怪线程函数(暂时没用后面会用到)、AutomaticPlayStrange函数、Endthread函数(暂时没用后面会用到)

#pragma once
#include <string>#define  BLZW (DWORD)GetModuleHandleA("Game.exe") + 0x59EFA4//遍历周围 和人物状态同一个
using namespace std;
struct R_人物属性
{DWORD 状态;FLOAT 血量;DWORD 最大血量;FLOAT fX;FLOAT fY;DWORD id;DWORD dwObject;DWORD PType;DWORD M_走路包;FLOAT 距离;DWORD M_通用包;PCHAR pName = "";void 初始化();
};struct R_背包属性 {DWORD dwObject;string pName;BYTE p数量;string 简介;DWORD p使用等级;
};struct R_背包类
{BYTE 背包数量 = 0;
};struct R_遍历背包 {R_背包类 背包[0x3];R_背包属性 列表[0x100];DWORD d数量 = 0;void 遍历背包();
};struct 坐标 {FLOAT x;FLOAT y;
};struct R_周围遍历
{R_人物属性 列表[0x100];DWORD d数量 = 0;void 周围二叉数(DWORD Tree, R_人物属性 dw);void AsmGetMonsterData();R_人物属性 遍历最近怪物();};struct R_技能属性
{DWORD dwObject;string pName;DWORD 冷却ID;DWORD pID;string 冷却;
};struct R_遍历技能
{R_技能属性 列表[0x100];DWORD d数量 = 0;void 技能二叉数2(DWORD Tree);void AsmGetMonster();void 技能二叉数(DWORD Tree);void AsmGetMonsterData();
};struct ClientInfo// 自动打怪需要的数据
{int x;// x坐标int y;// y坐标string id;// 地图idstring a;
};void 打怪线程(LPVOID lpParam);
void AutomaticPlayStrange(int x, int y, string name, string pname, string xx);
void Endthread();#define  JNLQ (DWORD)GetModuleHandleA("Game.exe") + 0x59F4F8//技能冷却数组
#define  JNECS (DWORD)GetModuleHandleA("Game.exe") + 0x59F008//技能二叉数
#define  JNECS2 (DWORD)GetModuleHandleA("Game.exe") + 0x34cb88//技能二叉数2

结构.cpp文件的修改,新加 AutomaticPlayStrange函数(它用来实现自动打怪)

#include "pch.h"
#include "结构.h"DWORD g_打怪线程 = 0;
HANDLE hProce = 0;DWORD R_rwjz = *(DWORD*)((DWORD)GetModuleHandleA("Game.exe") + 0x5A6AF4);//人物基地址
DWORD R_jnecs2 = *(DWORD*)(JNECS2);
DWORD R_jnecs = *(DWORD*)(JNECS);
DWORD R_jnlq = *(DWORD*)(JNLQ);void R_人物属性::初始化()
{__try {/**GetModuleHandleA("Game.exe")返回Game.exe模块的模块基址*///DWORD 状态基址 = (DWORD)GetModuleHandleA("Game.exe") + 0x59EF6C;/**(DWORD*)状态基址 的意思是把 状态基址 的值当成内存地址*(DWORD*)状态基址 意思把内存地址里的值取出来*//*	DWORD 状态偏移 = *(DWORD*)状态基址 + 0x60;DWORD 状态偏移1 = *(DWORD*)状态偏移 + 0x14C;状态 = *(DWORD*)状态偏移1;*/DWORD RW偏移 = ReadDword(R_rwjz + 0xc);M_通用包 = ReadWord(RW偏移 + 0x2c);M_走路包 = ReadWord(RW偏移 + 0x30);//状态 = ReadDword(状态偏移1);fX = ReadFloat(RW偏移 + 0x3C);fY = ReadFloat(RW偏移 + 0x44);pName = "";pName = ReadStr((char*)(ReadDword(ReadDword(RW偏移 + 0x148) + 0x10) + 0x2c));血量 = ReadFloat(ReadDword(ReadDword(RW偏移 + 0x148) + 0x10) + 0x8);}__except (1) {Call_输出调试信息("读物人物信息异常\r\n");}
}void R_遍历背包::遍历背包()
{try {DWORD s = 0;//DWORD JZ = (DWORD)GetModuleHandleA("Game.exe") + 0x59F458;DWORD JZ = (DWORD)GetModuleHandleA("Game.exe") + 0x59F490;DWORD JZpy = ReadDword(ReadDword(JZ) + 0x181C4);背包[0].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x14); // 道具背包数量背包[1].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x15); // 材料背包数量背包[2].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x16);// 任务背包数量for (int i = 0; i < 3; i++){CString str;str.Format(L"数量2:%d %d %d", 背包[0].背包数量, 背包[1].背包数量, 背包[2].背包数量);//AfxMessageBox(str);for (int  j = 0; j < 背包[i].背包数量; j++){if (i == 0) {s = j;}if (i == 1)s = j + 背包[0].背包数量;if (i == 2)s = j + 背包[0].背包数量 + 背包[1].背包数量;列表[s].dwObject = ReadDword(JZpy + j * 4);if (列表[s].dwObject != 0) {DWORD 值 = ReadDword(列表[s].dwObject + 0x2C);列表[s].pName = ReadStr((char*)ReadDword(值 + 0x18));列表[s].p使用等级 = ReadDword(值 + 0x20);列表[s].简介 = ReadStr((char*)ReadDword(值 + 0x1c));;列表[s].p数量 = (BYTE)ReadByte(ReadDword(列表[s].dwObject + 0x14) + 0x58);}else{列表[s].pName = "";列表[s].p数量 = 0;列表[s].简介 = "";列表[s].p使用等级 = 0;}d数量++;}JZpy = JZpy + 0x80;// 扩展背包大小,写死0x80,扩展背包大小0x80/0x47=十进制的32}}catch (...){Call_输出调试信息("tlhj   返回背包信息异常\r\n");}}void R_周围遍历::周围二叉数(DWORD Tree, R_人物属性 rw)
{try{int ss = 0;ss++;if (ss < 5000){BYTE data = -1;data = ReadByte(Tree + 0xd);DWORD 左子树 = ReadDword(Tree + 0x0);DWORD 右子树 = ReadDword(Tree + 0x8);if (data == 0){列表[d数量].dwObject = ReadDword(Tree + 0x14);列表[d数量].id = ReadDword(列表[d数量].dwObject + 0x2c);列表[d数量].fX = ReadFloat(列表[d数量].dwObject + 0x3c);//坐标X列表[d数量].fY = ReadFloat(列表[d数量].dwObject + 0x44);列表[d数量].PType = ReadByte(ReadDword(列表[d数量].dwObject + 0x24) + 0x14);if ((int)列表[d数量].fX == 100 && (int)列表[d数量].fY == 100){}else{// 计算最近距离的公式,所有游戏通用,看不懂死记住就行,小学的公式列表[d数量].距离 = sqrt((rw.fX - 列表[d数量].fX)*(rw.fX - 列表[d数量].fX) + (rw.fY - 列表[d数量].fY)*(rw.fY - 列表[d数量].fY));列表[d数量].pName = "";//Call_输出调试信息("-----r2-------%x", AA);列表[d数量].pName = ReadStr((char *)(ReadDword(ReadDword(列表[d数量].dwObject + 0x148) + 0x10) + 0x2c));列表[d数量].血量 = ReadFloat(ReadDword(ReadDword(列表[d数量].dwObject + 0x148) + 0x10) + 0x8);d数量++;}周围二叉数(左子树, rw);周围二叉数(右子树, rw);}}}catch (...){Call_输出调试信息("tlhj   遍历二叉数异常\r\n");}
}
DWORD R_blzw = *(DWORD*)((DWORD)GetModuleHandleA("Game.exe") + 0x5BB7E8);
void R_周围遍历::AsmGetMonsterData()
{Sleep(10);try{DWORD dwTreeBase = *(DWORD*)(R_blzw + 0x54);dwTreeBase = *(DWORD*)(dwTreeBase + 0x4);DWORD dwEnvTreeBase = dwTreeBase;Call_输出调试信息("-----q-------");if (dwEnvTreeBase) {R_人物属性 rw;rw.初始化();d数量 = 0;周围二叉数(dwEnvTreeBase, rw);//遍历二叉树}//正确取到二叉树基址}catch (...){Call_输出调试信息("tlhj   得到二叉数根结点异常\r\n");}
}R_人物属性 R_周围遍历::遍历最近怪物()
{this->AsmGetMonsterData();R_人物属性 a;R_人物属性 人物;人物.初始化();try{if (this->d数量 > 0){for (int i = 0; i < (int)this->d数量; i++){for (int j = i + 1; j < (int)this->d数量; j++){if (this->列表[i].距离 > this->列表[j].距离){a = this->列表[j];this->列表[j] = this->列表[i];this->列表[i] = a;}}}if (d数量 >= 1){return this->列表[d数量 - 2];}else{return 人物;}}return 人物;}catch (...){Call_输出调试信息("tlhj   返回最近怪物信息异常\r\n");}
}void R_遍历技能::技能二叉数2(DWORD Tree)
{try{BYTE data = 0;data = ReadByte(Tree + 0xd);DWORD 左子树 = ReadDword(Tree + 0x0);DWORD 右子树 = ReadDword(Tree + 0x8);if (data == 0){列表[d数量].dwObject = ReadDword(Tree + 0x14);列表[d数量].pName = ReadStr((char *)ReadDword(Tree + 0x14) + 0x8);d数量++;技能二叉数2(左子树);技能二叉数2(右子树);}}catch (...){Call_输出调试信息("tl怀旧   遍历二叉数异常\r\n");}
}void R_遍历技能::AsmGetMonster()
{try{DWORD dwTreeBase = ReadDword(R_jnecs2 + 0x28);dwTreeBase = ReadDword(dwTreeBase + 0x4);DWORD dwEnvTreeBase = dwTreeBase;if (dwEnvTreeBase) {d数量 = 0;技能二叉数2(dwEnvTreeBase);//遍历二叉树}//正确取到二叉树基址}catch (...){Call_输出调试信息("tl怀旧   得到二叉数根结点异常\r\n");}
}void R_遍历技能::技能二叉数(DWORD Tree)
{try{BYTE data = 0;data = ReadByte(Tree + 0xd);DWORD 左子树 = ReadDword(Tree + 0x0);DWORD 右子树 = ReadDword(Tree + 0x8);if (data == 0){列表[d数量].dwObject = Tree;列表[d数量].pID = ReadByte(Tree + 0x10);列表[d数量].pName = ReadStr((char *)ReadDword(ReadDword(Tree + 0x18) + 0xc));列表[d数量].冷却ID = ReadDword(ReadDword(Tree + 0x18) + 0x40);DWORD dwTreeBase = ReadDword(R_jnlq + 0x18164);DWORD 冷却时间 = ReadDword(dwTreeBase + 列表[d数量].冷却ID * 3 * 4);char* a = "";if (冷却时间 == 0 || 冷却时间 == 0xffffffff) {a = "未冷却";}else {a = "冷却";}列表[d数量].冷却 = a;d数量++;技能二叉数(左子树);技能二叉数(右子树);}}catch (...){Call_输出调试信息("tl怀旧   遍历二叉数异常\r\n");}
}void R_遍历技能::AsmGetMonsterData()
{try{DWORD	dwTreeBase = ReadDword(R_jnecs + 0x60);dwTreeBase = ReadDword(dwTreeBase + 0x148);dwTreeBase = ReadDword(dwTreeBase + 0x10);dwTreeBase = ReadDword(dwTreeBase + 0x2A44);dwTreeBase = ReadDword(dwTreeBase + 0x4);DWORD dwEnvTreeBase = dwTreeBase;if (dwEnvTreeBase) {d数量 = 0;技能二叉数(dwEnvTreeBase);//遍历二叉树}//正确取到二叉树基址}catch (...){Call_输出调试信息("tl怀旧   得到二叉数根结点异常\r\n");}
}void AutomaticPlayStrange(int x, int y, string name, string pname, string xx)
{ClientInfo*pClientInfo = new  ClientInfo;pClientInfo->a = pname;pClientInfo->x = x;pClientInfo->y = y;pClientInfo->id = name;Lua_lu(x, y, name);
}

CMeLua.h文件的修改,新加 Lua_lu函数

#pragma once
#include "pch.h"
#include "LuaPlus.h"
using namespace LuaPlus;
class CMeLua
{
public:CMeLua() {};~CMeLua() {};
public:int LUA_Xulu(LuaState* pState);} ;void Lua_lu(int x, int y, string  Scene);

CMeLua.cpp文件的修改,新加 Lua_lu函数、pMsg变量

#include "pch.h"
#include "CMeLua.h"extern CMessage* pMsg;// 前面带 extern 说明是全局变量,也就是说在其它文件中对 pMsg 这个名字的变量进行的修改那么这里也会被影响到int CMeLua::LUA_Xulu(LuaState * pState)
{LuaStack args(pState);DWORD x = args[1].GetInteger();DWORD y = args[2].GetInteger();Msg_xl(x, y);return 0;
}void Lua_lu(int x, int y, string Scene)
{int SceneId = FUN_GetSceneID(Scene.c_str());
}

CM.h文件的修改,新加 edi_Name变量、edi_pName变量、OnBnClickedButton8函数(自动打怪按钮的点击事件处理函数)

#pragma once// CM 对话框class CM : public CDialogEx
{DECLARE_DYNAMIC(CM)public:CM(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CM();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_DIALOG1 };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton3();afx_msg void OnBnClickedButton4();afx_msg void OnBnClickedButton5();afx_msg void OnBnClickedButton6();afx_msg void OnBnClickedButton7();CString edi_x;CString edi_y;CString edi_Name;CString edi_pName;afx_msg void OnBnClickedButton8();
};

CM.cpp文件的修改,新加 OnBnClickedButton8函数(自动打怪按钮的点击事件处理函数)

// CM.cpp: 实现文件
//#include "pch.h"
#include "tl.h"
#include "CM.h"
#include "afxdialogex.h"// CM 对话框CScriptSystem* pScriptSystem = new CScriptSystem;IMPLEMENT_DYNAMIC(CM, CDialogEx)
CMessage* pMsg = new CMessage;CM::CM(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DIALOG1, pParent), edi_x(_T("")), edi_y(_T("")), edi_Name(_T("")), edi_pName(_T(""))
{pMsg->Init();pScriptSystem->LUA_ScriptSystemInitial();
}CM::~CM()
{
}void CM::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT3, edi_x);DDX_Text(pDX, IDC_EDIT4, edi_y);DDX_Text(pDX, IDC_EDIT5, edi_Name);DDX_Text(pDX, IDC_EDIT6, edi_pName);
}BEGIN_MESSAGE_MAP(CM, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &CM::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CM::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON3, &CM::OnBnClickedButton3)ON_BN_CLICKED(IDC_BUTTON4, &CM::OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTON5, &CM::OnBnClickedButton5)ON_BN_CLICKED(IDC_BUTTON6, &CM::OnBnClickedButton6)ON_BN_CLICKED(IDC_BUTTON7, &CM::OnBnClickedButton7)ON_BN_CLICKED(IDC_BUTTON8, &CM::OnBnClickedButton8)
END_MESSAGE_MAP()// CM 消息处理程序void CM::OnBnClickedButton1()
{R_人物属性 a;a.初始化();Call_输出调试信息("人物信息:人物状态%d",a.状态);
}void CM::OnBnClickedButton2()
{UpdateData(TRUE);CString str1 = edi_x;CString str2 = edi_y;// strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);把字符串转成int数字类型int x = strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);int y = strtol((const char*)CW2A(str2.GetBuffer(0)), NULL, 10);Msg_xl(x, y);
}void CM::OnBnClickedButton3()
{R_遍历背包 a;a.遍历背包();// 遍历背包CString str;str.Format(L"a数量 %d", a.d数量);AfxMessageBox(str);for (int i = 0; i < a.d数量; i++){Call_输出调试信息("tl怀旧   背包信息 dwObject -------------%X----------------\r\n", a.列表[i].dwObject);Call_输出调试信息("tl怀旧   背包信息 名字:%s\r\n", a.列表[i].pName.c_str());Call_输出调试信息("tl怀旧   背包信息 使用等级:%d\r\n", a.列表[i].p使用等级);Call_输出调试信息("tl怀旧   背包信息 简介:%s\r\n", a.列表[i].简介.c_str());Call_输出调试信息("tl怀旧   背包信息 数量:%d\r\n", a.列表[i].p数量);}}void CM::OnBnClickedButton4()
{// TODO: 在此添加控件通知处理程序代码R_周围遍历 a;a.遍历最近怪物();// 让怪物重新排列for (int i = 0; i < a.d数量; i++){Call_输出调试信息("人物信息:---------------------%s-----%x---------------------", a.列表[i].pName, a.列表[i].dwObject);Call_输出调试信息("人物信息:人物id:%x", a.列表[i].id);Call_输出调试信息("人物信息:人物X:%f 人物Y:%f", a.列表[i].fX, a.列表[i].fY);Call_输出调试信息("人物信息:人物类型:%x  人物距离:%f", a.列表[i].PType, a.列表[i].距离);}
}void CM::OnBnClickedButton5()
{// TODO: 在此添加控件通知处理程序代码R_遍历技能 a;a.AsmGetMonsterData();// 遍历技能for (int i = 0; i < a.d数量; i++){Call_输出调试信息("tl怀旧   技能信息 名字:---------------%s-----------------------\r\n", a.列表[i].pName.c_str());Call_输出调试信息("tl怀旧   技能信息 ID:%d\r\n", a.列表[i].pID);Call_输出调试信息("tl怀旧   技能信息 是否冷却:%s\r\n", a.列表[i].冷却.c_str());Call_输出调试信息("tl怀旧   技能信息 冷却ID:%x\r\n", a.列表[i].冷却ID);Call_输出调试信息("tl怀旧   技能信息 对象地址:%x\r\n", a.列表[i].dwObject);}
}void CM::OnBnClickedButton6()
{Call_Hook主线程();
}void CM::OnBnClickedButton7()
{string a = "F:\\代码存放地\\c\\tl\\lua\\1.lua";pScriptSystem->LUA_DoFile(a.c_str());
}void CM::OnBnClickedButton8()
{UpdateData(TRUE);CString str1 = edi_x;CString str2 = edi_y;int x = strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);int y = strtol((const char*)CW2A(str2.GetBuffer(0)), NULL, 10);char name[100];memset(name, 0, 100);sprintf(name, "%s", (char*)CW2A(edi_Name.GetBuffer(0)));char pname[100];memset(pname, 0, 100);sprintf(pname, "%s", (char*)CW2A(edi_pName.GetBuffer(0)));edi_pName.ReleaseBuffer();string xx = "无";AutomaticPlayStrange(x, y, name, pname, xx);
}

上方的代码不全,只有手写的代码

完整代码:以 它的代码为基础进行修改

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg?pwd=q9n5

提取码:q9n5

复制这段内容后打开百度网盘手机App,操作更方便哦


img

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com