文档章节

C#开发 植物大战僵尸 修改阳光值 源码无私分享

编程码农
 编程码农
发布于 2016/05/15 11:31
字数 445
阅读 46
收藏 0

源代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//Win32 API
using System.Runtime.InteropServices;
using System.Timers;

/**
 *uint PROCESS_ALL_ACCESS = 0x001F0FFF; 
 */

namespace plantsVsZombiesAux
{
    public partial class Form1 : Form
    {
        public bool isStart = false;
        public bool isCheckStar = false;
        public uint processGame;
        public const string gameName = "PlantsVsZombies";
        public const uint PROCESS_ALL_ACCESS  = 0x001F0FFF;
        public const uint lpGameBaseAddr = 0x007794f8;
        public uint lpGameAddr = 0;
        public uint smallThreshold = 500;
        public uint bigThreshold = 50000;

        //导入win32 API
        [DllImport("kernel32.dll")]
        /**/
        public static extern uint ReadProcessMemory(
        uint hProcess,
        uint lpBaseAddress,
        uint[] lpBuffer,
        uint nSize,
        uint lpNumberOfBytesWritten
        );
        [DllImport("kernel32.dll")]
        public static extern uint OpenProcess(
        uint dwDesiredAccess, //渴望得到的访问权限(标志)
        bool bInheritHandle, // 是否继承句柄
        uint dwProcessId// 进程标示符
        );
        [DllImport("kernel32.dll")]
        public static extern uint WriteProcessMemory(
            uint hProcess,
            uint lpBaseAddress,
            string lpBuffer,
            UInt32 nSize,
            uint lpNumberOfBytesWritten
        );
        /**/
        public Form1()
        {
            InitializeComponent();
            
        }
        public static uint readMemory(uint processId,uint add)
        {
            uint[] r = new uint[1];
            try
            {
                ReadProcessMemory(processId, add, r, 4, 0);
                return r[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return 0;
            }
        }

        public void initGamesInfo()
        {
            uint lpBuffer = 0;
            lpBuffer = readMemory(this.processGame, lpGameBaseAddr);
            uint lpBufferSec;
            lpBufferSec = lpBuffer + 0x868;
            lpBufferSec = readMemory(this.processGame, lpBufferSec);
            lpBuffer = lpBufferSec + 0x5578;
            //Convert.ToInt32(lpBuffer, 16);
            this.lpGameAddr = lpBuffer;
        }
        public uint getGamesSonValue(string sonVal = "")
        {
            if (sonVal.Length > 0)
            {
                WriteProcessMemory(this.processGame, this.lpGameAddr, sonVal, (UInt32)sonVal.Length, 0);
                return 1;
            }
            uint lpBuffer = 0;
            try
            {
                lpBuffer = readMemory(this.processGame,this.lpGameAddr);
               
                string valStr = lpBuffer.ToString();
                //更新控件变量
                sonValTextInput.Text = valStr;
                uint resVal = 0;
                uint.TryParse(valStr, out resVal);
                //更新控件
                Refresh();
                return resVal;

            }catch(Exception ex){
                MessageBox.Show(ex.ToString());
                return 0;
            }
            
        }
        //定时器自动修改阳光值
        private void autoSetTimer_Tick(object sender, EventArgs e)
        {
            this.isCheckStar = autoSetcheckBox.Checked;
            if (this.isStart && this.isCheckStar)
            {
                uint currSonVal = getGamesSonValue();
                if(currSonVal <= smallThreshold)
                {
                    getGamesSonValue(bigThreshold.ToString());
                }
            }
        }
        //点击开始按钮
        private void startButton_Click(object sender, EventArgs e)
        {
            this.isStart = true;
            /**/
            System.Diagnostics.Process[] GamesProcess
                = System.Diagnostics.Process.GetProcessesByName(gameName);
            if (GamesProcess.Length == 0)
            {
                MessageBox.Show("请运行植物大战僵尸!再启动本辅助!!");
                return;
            }
            uint ProcessID = (uint)GamesProcess[0].Id;
            /* */
            /*
            IntPtr hWnd = ::FindWindow(0,gameName);  //查找窗口句柄
            if(hWnd.ToInt32() == 0) return;
            
            uint ProcessID;
            GetWindowThreadProcessId(hWnd,&ProcessID);  //取得进程ID
             */
            this.processGame = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
            this.isCheckStar = autoSetcheckBox.Checked;
            //初始化游戏相关基址
            initGamesInfo();
            //获取阳光的值
            getGamesSonValue();

        }
        //暂停按钮
        private void pauseButton_Click(object sender, EventArgs e)
        {
            this.isStart = false;
        }
    }
}

效果图:

 

 

 

 

 

 

 

 

游戏参考:

http://www.pc6.com/z/zwdzjs2/

 

源码下载:

http://www.oschina.net/code/snippet_2697322_56153

 

© 著作权归作者所有

共有 人打赏支持
编程码农
粉丝 1
博文 19
码字总数 13170
作品 0
杭州
后端工程师
游戏AI的开发框架组件--Behaviac

Behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持行为树BT,状态机FSM,HTN等多种范式,方便的编辑和调试。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发。 编...

匿名
2016/03/29
14.9K
5
scratch中植物大战僵尸之会收集太阳的的太阳花

昨天我们已经学习了如何收集豌豆,那么太阳花如果想生产太阳的话,那么太阳怎么出现呢,我们该如何做呢?这个需要怎么实现呢,那么,这就需要考验大家对于昨天的收集豌豆的小游戏是不是完全掌...

h_snow_1
03/23
0
0
丁小未/Aladdin_XLua

#Aladdin_XLua [Unity XLua]热更新XLua入门(一)-基础篇 前言 前段时间腾讯开源了一个内部热更框架XLua在Unity开发群里引起一阵热议,也受到广大开发者的热捧,然后我当然也抱着好奇的心去学习...

丁小未
2017/01/14
0
0
简婶活动 | 看了你的代码,我......

学霸程序员召唤计划 众所周知,简书平台拥有大量优质的程序员作者,许多开发同学无私地将自己的技术经验分享在简书平台上以供他人参考学习。 正是因为有这些乐于分享的程序员作者,才让简书的...

简书大婶
2017/12/08
0
0
iphone客户端的简介

@叶园 你好,想跟你请教个问题:我是刚刚入门ios开发,最近下载oschina的iphone客户端的源码,有很多地方都不明白,看到您写了一个项目介绍,希望您能给我权限让我看一下,希望能提高自己。同...

名字都被用了
2012/11/19
350
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
18
4
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部