CS学习笔记(续)

CS起源
暂停方法:sv_cheats 1 然后 bot_stop 1
游戏分辩论:4:3,1024x768
打开注意:游戏与辅助都要管理员身份打开

自定义数据类型表

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

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

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

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

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

.程序集 窗口程序集_启动窗口
.程序集变量 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窗口高度宽度.高度)
窗口创建 (CS窗口高度宽度.宽度, CS窗口高度宽度.高度, &窗口创建回调, hwnd)
消息循环 ()
' 调试输出 (hwnd)


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

刷新窗口 ()
高度一半 = CS窗口高度宽度.高度 ÷ 2
人数 = 内存.读整数 (进程PID, 引擎类模块 + 进制_十六到十 (“5D29BC”)) - 1
.计次循环首 (人数, i)
    本人坐标 = 获取本人坐标 (阵营)
    ' 绘制文本 (“本人x:” + 到文本 (本人坐标.x), 0, 高度一半 + 0, 转换颜色 (#红色, ))
    ' 绘制文本 (“本人y:” + 到文本 (本人坐标.y), 0, 高度一半 + 15, 转换颜色 (#红色, ))
    ' 绘制文本 (“本人z:” + 到文本 (本人坐标.z), 0, 高度一半 + 30, 转换颜色 (#红色, ))
    敌人坐标 = 获取敌人坐标 (i, 敌人血量, 敌人阵营)
    .如果 (敌人阵营 = 阵营)
        方框颜色 = 转换颜色 (#绿色, )
        ' ’这里是队友
        ' 到循环尾 ()
    .否则
        方框颜色 = 转换颜色 (#红色, )
    .如果结束
    .如果真 (敌人血量 < 2)
        到循环尾 ()
    .如果真结束
    ' 绘制文本 (“敌人x:” + 到文本 (敌人坐标.x), 0, 高度一半 + 45, 转换颜色 (#红色, ))
    ' 绘制文本 (“敌人y:” + 到文本 (敌人坐标.y), 0, 高度一半 + 60, 转换颜色 (#红色, ))
    ' 绘制文本 (“敌人z:” + 到文本 (敌人坐标.z), 0, 高度一半 + 75, 转换颜色 (#红色, ))
    FOV = 获取FOV ()
    ' 绘制文本 (“FOV :” + 到文本 (FOV), 0, 高度一半 + 90, 转换颜色 (#红色, ))
    鼠标角度 = 获取鼠标角度 ()
    ' 绘制文本 (“鼠标角度x:” + 到文本 (鼠标角度.x), 0, 高度一半 + 105, 转换颜色 (#红色, ))
    ' 绘制文本 (“鼠标角度y:” + 到文本 (鼠标角度.y), 0, 高度一半 + 120, 转换颜色 (#红色, ))
    敌我坐标差.x = 敌人坐标.x - 本人坐标.x
    敌我坐标差.y = 敌人坐标.y - 本人坐标.y
    敌我坐标差.z = 敌人坐标.z - 本人坐标.z
    敌我二维距离 = 求平方根 (求次方 (敌我坐标差.x, 2) + 求次方 (敌我坐标差.y, 2))
    ' ’先破而后立   弧度/#pi*1080     角度/180*#pi
    .判断开始 (敌我坐标差.x > 0 且 敌我坐标差.y > 0)
        ' 绘制文本 (“第一象限” + 到文本 (鼠标角度.y), 0, 高度一半 + 200, 转换颜色 (#红色, ))
        敌人与x轴线角度 = 求反正切 (取绝对值 (敌我坐标差.y) ÷ 取绝对值 (敌我坐标差.x)) ÷ #pi × 180
    .判断 (敌我坐标差.x < 0 且 敌我坐标差.y > 0)
        ' 绘制文本 (“第二象限” + 到文本 (鼠标角度.y), 0, 高度一半 + 200, 转换颜色 (#红色, ))
        敌人与x轴线角度 = 求反正切 (取绝对值 (敌我坐标差.x) ÷ 取绝对值 (敌我坐标差.y)) ÷ #pi × 180 + 90
    .判断 (敌我坐标差.x < 0 且 敌我坐标差.y < 0)
        ' 绘制文本 (“第三象限” + 到文本 (鼠标角度.y), 0, 高度一半 + 200, 转换颜色 (#红色, ))
        敌人与x轴线角度 = 求反正切 (取绝对值 (敌我坐标差.y) ÷ 取绝对值 (敌我坐标差.x)) ÷ #pi × 180 + 180
    .判断 (敌我坐标差.x > 0 且 敌我坐标差.y < 0)
        ' 绘制文本 (“第四象限” + 到文本 (鼠标角度.y), 0, 高度一半 + 200, 转换颜色 (#红色, ))
        敌人与x轴线角度 = 求反正切 (取绝对值 (敌我坐标差.x) ÷ 取绝对值 (敌我坐标差.y)) ÷ #pi × 180 + 270
    .默认

    .判断结束
    ' 绘制文本 (“敌人与x轴线角度:” + 到文本 (敌人与x轴线角度), 0, 高度一半 + 135, 转换颜色 (#红色, ))
    敌人与我鼠标之间的角度 = 鼠标角度.x - 敌人与x轴线角度
    .如果真 (敌人与我鼠标之间的角度 < -180)
        敌人与我鼠标之间的角度 = 360 - 敌人与x轴线角度 + 鼠标角度.x
    .如果真结束
    .如果真 (敌人与我鼠标之间的角度 > 180)
        敌人与我鼠标之间的角度 = 360 - 鼠标角度.x + 敌人与x轴线角度
        .如果真 (敌人与我鼠标之间的角度 > 0)
            敌人与我鼠标之间的角度 = 敌人与我鼠标之间的角度 × -1
        .如果真结束

    .如果真结束
    .如果真 (取绝对值 (敌人与我鼠标之间的角度) > 45)
        到循环尾 ()
    .如果真结束
    ' 绘制文本 (“敌人与我鼠标之间的角度:” + 到文本 (敌人与我鼠标之间的角度), 0, 高度一半 + 150, 转换颜色 (#红色, ))
    对边 = 求正弦 (敌人与我鼠标之间的角度 ÷ 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)
    ' 绘制文本 (“我鼠标与敌人之间的鼠标Y角度:” + 到文本 (我鼠标与敌人之间的鼠标Y角度), 0, 高度一半 + 175, 转换颜色 (#红色, ))
    ' 绘制文本 (“敌我二维距离:” + 到文本 (敌我二维距离), 0, 高度一半 + 220, 转换颜色 (#红色, ))
    ' 内存操作类.写小数 (进程PID, 引擎类模块 + 进制_十六到十 (“4622CC”) + 4, 敌人与x轴线角度)
    ' 内存操作类.写小数 (进程PID, 引擎类模块 + 进制_十六到十 (“4622CC”), 鼠标Y角度)
    方框大小比值 = 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”))
返回 (临时变量)