CS学习笔记(续)

CS起源
暂停方法:sv_cheats 1 然后 bot_stop 1
游戏分辩论:4:3,1024x768
打开注意:游戏与辅助都要管理员身份打开
思路总结:
零、读入敌人坐标,玩家坐标,玩家偏航角,玩家俯仰角,玩家视场角,屏幕尺寸
一、计算玩家当前偏航角与瞄准敌人方向的偏航角之差,以及俯仰角之差
二、结合玩家视场角与屏幕尺寸,计算敌人在当前屏幕的透视方框中心(最核心的一步)
三、由敌我坐标计算敌我距离,决定透视方框大小即可绘制

自定义数据类型表

.数据类型 宽度高度数据
    .成员 高度, 整数型, , , 高度
    .成员 宽度, 整数型, , , 宽度

.数据类型 三维坐标
    .成员 x, 小数型
    .成员 y, 小数型
    .成员 z, 小数型

.数据类型 二维坐标
    .成员 x, 小数型
    .成员 y, 小数型

全局变量表
.全局变量 内存操作类, 类_内存

主程序(界面就一个按钮)

.版本 2

.程序集 窗口程序集_启动窗口
.程序集变量 hwnd, 整数型
.程序集变量 CS矩形信息, 精易_矩形
.程序集变量 CS窗口高度宽度, 宽度高度数据
.程序集变量 进程PID, 整数型
.程序集变量 服务类模块, 整数型
.程序集变量 引擎类模块, 整数型
.程序集变量 客户端类模块, 整数型
.程序集变量 CS句柄, 整数型

.子程序 _按钮1_被单击

解决黑屏 ()
CS句柄 = 窗口_取句柄 (, , “Valve001”, “Counter-Strike Source”)
CS矩形信息 = 窗口_取客户区矩形 (CS句柄)
CS窗口高度宽度.高度 = CS矩形信息.底边 - CS矩形信息.顶边
CS窗口高度宽度.宽度 = CS矩形信息.右边 - CS矩形信息.左边
进程PID = 进程_名取ID (“hl2.exe”, )
服务类模块 = 追风_取模块句柄 (进程PID, “server.dll”)
引擎类模块 = 追风_取模块句柄 (进程PID, “engine.dll”)
客户端类模块 = 追风_取模块句柄 (进程PID, “client.dll”)
窗口创建 (CS窗口高度宽度.宽度, CS窗口高度宽度.高度, &窗口创建回调, hwnd)
消息循环 ()


.子程序 窗口创建回调
.局部变量 本人坐标, 三维坐标
.局部变量 敌人坐标, 三维坐标
.局部变量 FOV, 小数型
.局部变量 鼠标角度, 二维坐标
.局部变量 敌我坐标差, 三维坐标
.局部变量 敌人与x轴线角度, 小数型
.局部变量 敌人与我鼠标之间的角度, 小数型
.局部变量 敌我二维距离, 小数型
.局部变量 邻边, 小数型
.局部变量 屏幕坐标x, 小数型
.局部变量 对边, 小数型
.局部变量 鼠标Y角度, 小数型
.局部变量 我鼠标与敌人之间的鼠标Y角度, 小数型
.局部变量 对边y, 小数型
.局部变量 屏幕坐标y, 整数型
.局部变量 要减少的值, 小数型
.局部变量 方框大小比值, 双精度小数型
.局部变量 人数, 整数型
.局部变量 i, 整数型
.局部变量 敌人血量, 整数型
.局部变量 阵营, 整数型
.局部变量 敌人阵营, 整数型
.局部变量 方框颜色, 整数型
.局部变量 zhys, 整数型
.局部变量 方框数据, 方框数据

刷新窗口 ()
人数 = 内存.读整数 (进程PID, 引擎类模块 + 进制_十六到十 (“5D29BC”)) - 1

.计次循环首 (人数, i)
    本人坐标 = 获取本人坐标 (阵营)
    敌人坐标 = 获取敌人坐标 (i, 敌人血量, 敌人阵营)
    .如果 (敌人阵营 = 阵营)
        方框颜色 = 转换颜色 (#绿色, )
    .否则
        方框颜色 = 转换颜色 (#红色, )
    .如果结束
    .如果真 (敌人血量 < 2)
        到循环尾 ()
    .如果真结束

    FOV = 获取FOV ()
    鼠标角度 = 获取鼠标角度 ()
    敌我坐标差.x = 敌人坐标.x - 本人坐标.x
    敌我坐标差.y = 敌人坐标.y - 本人坐标.y
    敌我坐标差.z = 敌人坐标.z - 本人坐标.z
    敌我二维距离 = 求平方根 (求次方 (敌我坐标差.x, 2) + 求次方 (敌我坐标差.y, 2))

    .判断开始 (敌我坐标差.x > 0 且 敌我坐标差.y > 0)
        敌人与x轴线角度 = 求反正切 (取绝对值 (敌我坐标差.y) ÷ 取绝对值 (敌我坐标差.x)) ÷ #pi × 180
    .判断 (敌我坐标差.x < 0 且 敌我坐标差.y > 0)
        敌人与x轴线角度 = 求反正切 (取绝对值 (敌我坐标差.x) ÷ 取绝对值 (敌我坐标差.y)) ÷ #pi × 180 + 90
    .判断 (敌我坐标差.x < 0 且 敌我坐标差.y < 0)
        敌人与x轴线角度 = 求反正切 (取绝对值 (敌我坐标差.y) ÷ 取绝对值 (敌我坐标差.x)) ÷ #pi × 180 + 180
    .判断 (敌我坐标差.x > 0 且 敌我坐标差.y < 0)
        敌人与x轴线角度 = 求反正切 (取绝对值 (敌我坐标差.x) ÷ 取绝对值 (敌我坐标差.y)) ÷ #pi × 180 + 270
    .默认

    .判断结束

    敌人与我鼠标之间的角度 = 鼠标角度.x - 敌人与x轴线角度

    .如果真 (敌人与我鼠标之间的角度 < -180)
        敌人与我鼠标之间的角度 = 360 - 敌人与x轴线角度 + 鼠标角度.x
    .如果真结束
    .如果真 (敌人与我鼠标之间的角度 > 180)
        敌人与我鼠标之间的角度 = 360 - 鼠标角度.x + 敌人与x轴线角度
        .如果真 (敌人与我鼠标之间的角度 > 0)
            敌人与我鼠标之间的角度 = 敌人与我鼠标之间的角度 × -1
        .如果真结束

    .如果真结束
    .如果真 (取绝对值 (敌人与我鼠标之间的角度) > 45)
        到循环尾 ()
    .如果真结束

    对边 = 求正弦 (敌人与我鼠标之间的角度 ÷ 180 × #pi) × 敌我二维距离
    邻边 = 求余弦 (敌人与我鼠标之间的角度 ÷ 180 × #pi) × 敌我二维距离
    要减少的值 = 42 ÷ (敌我二维距离 ÷ 200)
    屏幕坐标x = 512 + 对边 ÷ 邻边 × 512 - 要减少的值
    对边y = 求正切 (鼠标角度.y ÷ 180 × #pi) × 敌我二维距离 + 敌我坐标差.z
    屏幕坐标y = 384 - 对边y × 512 ÷ 敌我二维距离
    我鼠标与敌人之间的鼠标Y角度 = (取绝对值 (求反正切 ((本人坐标.z - 敌人坐标.z) ÷ 敌我二维距离) ÷ #pi × 180) + 鼠标角度.y) × -1
    鼠标Y角度 = 取绝对值 (求反正切 ((本人坐标.z - 敌人坐标.z) ÷ 敌我二维距离) ÷ #pi × 180)
    方框大小比值 = 178 ÷ 敌我二维距离
    绘制矩形2 (屏幕坐标x, 屏幕坐标y, 100 × 方框大小比值, 200 × 方框大小比值, 1, 方框颜色)

    方框数据.左边 = 屏幕坐标x
    方框数据.顶边 = 屏幕坐标y
    方框数据.宽度 = 100 × 方框大小比值
    方框数据.高度 = 200 × 方框大小比值
    横向血条 (方框数据, 敌人血量, 转换颜色 (#红色, ))
.计次循环尾 ()


.子程序 获取FOV, 小数型

返回 (内存操作类.读小数 (进程PID, 客户端类模块 + 进制_十六到十 (“5046F0”)))

.子程序 获取鼠标角度, 二维坐标
.局部变量 临时变量, 二维坐标

临时变量.x = 内存操作类.读小数 (进程PID, 引擎类模块 + 进制_十六到十 (“4622CC”) + 4)
.如果真 (临时变量.x < 0)
    临时变量.x = 临时变量.x + 360
.如果真结束
临时变量.y = 内存操作类.读小数 (进程PID, 引擎类模块 + 进制_十六到十 (“4622CC”))
返回 (临时变量)


.子程序 刷新窗口

CS矩形信息 = 窗口_取客户区矩形 (CS句柄)
移动窗口 (hwnd, CS矩形信息.左边, CS矩形信息.顶边, CS窗口高度宽度.宽度, CS窗口高度宽度.高度, 真)
窗口_置顶 (hwnd)


.子程序 获取本人坐标, 三维坐标
.参数 阵营, 整数型, 参考
.局部变量 临时变量, 三维坐标
.局部变量 本人对象地址, 整数型

本人对象地址 = 内存操作类.读整数 (进程PID, 服务类模块 + 进制_十六到十 (“4F2FEC”))
临时变量.x = 内存操作类.读小数 (进程PID, 本人对象地址 + 进制_十六到十 (“280”))
临时变量.y = 内存操作类.读小数 (进程PID, 本人对象地址 + 进制_十六到十 (“284”))
临时变量.z = 内存操作类.读小数 (进程PID, 本人对象地址 + 进制_十六到十 (“288”))
阵营 = 内存操作类.读整数 (进程PID, 本人对象地址 + 进制_十六到十 (“1F4”))
返回 (临时变量)


.子程序 获取敌人坐标, 三维坐标
.参数 第几个, 整数型
.参数 血量, 整数型, 参考
.参数 阵营, 整数型, 参考
.局部变量 临时变量, 三维坐标
.局部变量 本人对象地址, 整数型

本人对象地址 = 内存操作类.读整数 (进程PID, 服务类模块 + 进制_十六到十 (“4F2FEC”) + 16 × 第几个)
临时变量.x = 内存操作类.读小数 (进程PID, 本人对象地址 + 进制_十六到十 (“280”))
临时变量.y = 内存操作类.读小数 (进程PID, 本人对象地址 + 进制_十六到十 (“284”))
临时变量.z = 内存操作类.读小数 (进程PID, 本人对象地址 + 进制_十六到十 (“288”))
血量 = 内存操作类.读整数 (进程PID, 本人对象地址 + 进制_十六到十 (“E4”))
阵营 = 内存操作类.读整数 (进程PID, 本人对象地址 + 进制_十六到十 (“1F4”))
返回 (临时变量)




关于内存自瞄透视的易语言版CS学习笔记到此完结
https://www.bilibili.com/video/BV1xZ4y1P7qj/

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值