求pvz2植物代码大战僵尸一代data代码的修改方法。

植物大战僵尸通关存档求发_百度知道
植物大战僵尸通关存档求发
植物大战僵尸通关存档求发年度版...
植物大战僵尸通关存档求发年度版
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
鬼淼淼迷知道合伙人
来自娱乐休闲类芝麻团
采纳数:760
获赞数:449
参与团队:
xp用户 默认在 plants vs zombies游戏目录 userdata vista和WIN7用户 默认在 C:ProgramDPopCap GPlantsVsZsuserdata (ProgramData是隐藏的,如果没找到就把隐藏文件打开就行了)Mac用户(苹果机):默认在:/Library/Application Support/PopCap/PlantsVsZombiesMac/userdata 只要把存档覆盖掉替换掉原来的存档就行了!!!
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。从之前的文章中,可以知道如何找到植物大战僵尸的游戏基址,以及其全部内存地址。。
下面将其实现出来。。
说明:通过游戏基址,再加上偏移量,修改游戏在内存中的值。实现无限阳光‘、无限金币、免CD、免暂停的功能。。。。,本例子的游戏是植物大战僵尸-----英文原版。
注意:不同版本的游戏的游戏基址不一定相同。’
1.打开进程,并获取进程句柄。
  方式:1.可以遍历当前所有的进程。
    CreateToolhelp32Snapshot(),Process32First(),Process32Next(),OpenProcess()。
     2.直接利用VS的SPY++,得到进程的句柄。(或者得到进程的标题、类名,再通过标题得到窗口句柄,再得到进程ID,再得到进程句柄)
    FindWindow(),GetWindowThreadProcessId(),OpenProcess().
2.根据游戏基址+偏移量,得到修改地址。将值修改成自定义值。(具体偏移多少次,看之前的文章----游戏内存地址)
主要用到函数:
ReadProcessMemory(),读取内存
WriteProcessMemory(),修改内存修改内存权限后,在写入。。。。。
VirtualProtectEx(g_hProcess, pCode, 4, PAGE_EXECUTE_READWRITE, &dwOldProtect);
WriteProcessMemory(g_hProcess, pCode, opCode, 4, NULL);
VirtualProtectEx(g_hProcess, pCode, 4, dwOldProtect, NULL);
// jsConsole.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include &Windows.h&
//游戏基址
int g_nBaseAddr = <span style="color: #x006A9EC0;
//游戏句柄
HANDLE g_hP
//根据基址计算出两次偏移后的地址
int *get2Point(int g_nBaseAddr, int p1, int p2)
int iBase, iP1, *iP2;
if (!ReadProcessMemory(g_hProcess, (LPVOID)g_nBaseAddr, &iBase, <span style="color: #, NULL))
return NULL;
if (!ReadProcessMemory(g_hProcess, (LPVOID)(iBase + p1), &iP1, <span style="color: #, NULL))
return NULL;
//返回最终地址
iP2 = (int *)(iP1 + p2);
return iP2;
//根据基址计算出三次偏移后的地址
int *get3Point(int g_nBaseAddr, int p1, int p2, int p3)
int iBase, iP1, iP2, *iP3;
if (!ReadProcessMemory(g_hProcess, (LPVOID)g_nBaseAddr, &iBase, <span style="color: #, NULL))
return NULL;
if (!ReadProcessMemory(g_hProcess, (LPVOID)(iBase + p1), &iP1, <span style="color: #, NULL))
return NULL;
if (!ReadProcessMemory(g_hProcess, (LPVOID)(iP1 + p2), &iP2, <span style="color: #, NULL))
return NULL;
iP3 = (int *)(iP2 + p3);
return iP3;
//改变阳光值
void ModifySun()
//获取阳光所在地址
int *pSun = get2Point(g_nBaseAddr, <span style="color: #x768, <span style="color: #x5560);
//将阳光改为多少
int nSunValue = <span style="color: #9999;
WriteProcessMemory(g_hProcess, pSun, &nSunValue, <span style="color: #, NULL);
//修改关卡
void ModifyGuanka()
int *pGuanka = get2Point(g_nBaseAddr, <span style="color: #x82C, <span style="color: #x24);
int guankaValue = <span style="color: #;
WriteProcessMemory(g_hProcess, pGuanka, &guankaValue, <span style="color: #, NULL);
//修改金币
void ModifyMoney()
int *pMoney = get2Point(g_nBaseAddr, <span style="color: #x82C, <span style="color: #x28);
int moneyValue = <span style="color: #9999;
WriteProcessMemory(g_hProcess, pMoney, &moneyValue, <span style="color: #, NULL);
//点击其他程序,游戏不会暂停。免暂停
void ModifyPause()
unsigned char *pCode = (unsigned char *)<span style="color: #x4502C0;
//修改内存读写权限
DWORD dwOldP
VirtualProtectEx(g_hProcess, pCode, <span style="color: #, PAGE_EXECUTE_READWRITE, &dwOldProtect);
unsigned char opCode[] = "\xC3\x04\x00";
WriteProcessMemory(g_hProcess, pCode, opCode, <span style="color: #, NULL);
VirtualProtectEx(g_hProcess, pCode, <span style="color: #, dwOldProtect, NULL);
//利用线程不断更新阳光和金币、免CD。实现无限金币
DWORD WINAPI ModifyCDThread(
LPVOID lpParameter
// thread data
while (<span style="color: #)
//修改阳光
ModifySun();
//获取卡槽数目地址
int *pCount = get3Point(g_nBaseAddr, <span style="color: #x768, <span style="color: #x144, <span style="color: #x24);
if (pCount == NULL)
//获取第一个卡槽地址
int *pFirst = get3Point(g_nBaseAddr, <span style="color: #x768, <span style="color: #x144, <span style="color: #x4C);
if (pFirst == NULL)
//获取卡槽数目
int nCount = <span style="color: #;
ReadProcessMemory(g_hProcess, pCount, &nCount, <span style="color: #, NULL);
//对每一个卡槽进行免CD
for (int i = <span style="color: #; i & nC i++)
//pFirst[0] = pFirst[1];//读和写
int nRecoveryT
ReadProcessMemory(g_hProcess, pFirst + <span style="color: #, &nRecoveryTime, <span style="color: #, NULL);
WriteProcessMemory(g_hProcess, pFirst, &nRecoveryTime, <span style="color: #, NULL);
//卡槽间的偏移量为50
pFirst = (int *)((int)pFirst + <span style="color: #x50);
Sleep(<span style="color: #0);
void ModifyCD()
CreateThread(<span style="color: #, <span style="color: #, ModifyCDThread, <span style="color: #, <span style="color: #, <span style="color: #);
int _tmain(int argc, _TCHAR* argv[])
//获取游戏窗口所在进程的进程ID,也就是PID
HWND hWnd = FindWindow(NULL, TEXT("植物大战僵尸中文版"));
if (NULL == hWnd)
printf("查找窗口失败\n");
return <span style="color: #;
DWORD dwProcessId;
GetWindowThreadProcessId(hWnd, &dwProcessId);
printf("进程ID:%d\n", dwProcessId);
//获取进程句柄
g_hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
if (NULL == g_hProcess)
printf("打开进程失败\n");
return <span style="color: #;
ModifySun();
ModifyGuanka();
ModifyMoney();
ModifyPause();
ModifyCDThread(<span style="color: #);
getchar();
return <span style="color: #;
阅读(...) 评论()植物大战僵尸修改器v3.1怎么样存档屋顶无尽版_百度知道
植物大战僵尸修改器v3.1怎么样存档屋顶无尽版
植物大战僵尸修改器v3.1怎么样存档屋顶无尽版...
植物大战僵尸修改器v3.1怎么样存档屋顶无尽版
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
赤血破长空知道合伙人
赤血破长空
采纳数:2170
获赞数:7812
先用修改器的生存模式跳关到15进入游戏再退出找到存档文件夹userdata里面会新生成一个存档game1_15.dat 的再将game1_15.dat 改成game1_13.dat(这个是泳池无尽版的存档,你要先备份好)再从泳池无尽版进入游戏,就屋顶的了。存档说明:
game1_11.dat 生存模式 白天(无尽)
game1_12.dat 生存模式 黑夜(无尽)
game1_13.dat 生存模式 泳池(无尽)
game1_14.dat 生存模式 浓雾(无尽)
game1_15.dat 生存模式 屋顶(无尽)存档位置 xp用户 默认在 plants vs zombies游戏目录 userdata vista或者Win7用户 (隐藏文件夹)默认在 C:&#92;ProgramData&#92;PopCap Games&#92;PlantsVsZombies&#92;userdataMac用户(苹果机):默认在:/Library/Application Support/PopCap/PlantsVsZombiesMac/userdata
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。恐龙危机21-23天简单模式 植物大战僵尸2 僵尸游戏植物大战僵尸通关存档下载 完美版_ - pc6下载站}

我要回帖

更多关于 单机植物大战僵中文版 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信