18702773952 发表于 2024-3-23 19:01:57

CS1.6矩阵转屏幕坐标的问题

大佬们 帮我看看问题 源码能正确画线,我抄的就是乱花,自己对比没找出问题.版本 2

进程id = 取进程ID (“cstrike.exe”)
窗口句柄 = 取句柄 (“cstrike.exe”, , )
窗口宽 = 取窗口宽度 (窗口句柄)
窗口高 = 取窗口高度 (窗口句柄)
进程句柄 = 进程_打开1 (进程id)

客户端模块 = 取模块句柄 (进程id, “cstrike.exe”)
矩阵基地址 = 客户端模块 + 十六到十 (“1820100”)
矩阵基地址 = 46268992
基址1 = 读内存整数型 (进程id, 客户端模块 + 十六到十 (“1117C64”), )
敌人基址 = 读内存整数型 (进程id, 十六到十 (“9cac”) + 基址1, )
偏移2 = 读内存整数型 (进程id, 敌人基址 + 十六到十 (“7c”), )
偏移3 = 读内存整数型 (进程id, 偏移2 + 十六到十 (“4”), )
敌人基地址 = 偏移3
窗口创建 (窗口宽, 窗口高, &窗口回调, hwnd)


.子程序 窗口回调

世界坐标转到屏幕坐标 ()
刷新绘制区 (窗口句柄)


.子程序 世界坐标转到屏幕坐标
.局部变量 敌人坐标, D3D坐标
.局部变量 world, 小数型, , "4,4"
.局部变量 相机z, 小数型
.局部变量 缩放比例, 小数型
.局部变量 视角宽, 小数型
.局部变量 视角高, 小数型
.局部变量 相机x, 小数型
.局部变量 相机y, 小数型
.局部变量 相机y2, 小数型
.局部变量 方框高宽, 小数型
.局部变量 方框宽, 小数型

视角宽 = 窗口宽 ÷ 2
视角高 = 窗口高 ÷ 2
敌人坐标.X = 读内存小数型 (进程id, 敌人基地址 + 8, )
敌人坐标.Y = 读内存小数型 (进程id, 敌人基地址 + 12, )
敌人坐标.Z = 读内存小数型 (进程id, 敌人基地址 + 16, )

ReadProcessMemoryWorld (进程句柄, 矩阵基地址, world , 64, 0)

相机z = world × 敌人坐标.X + world × 敌人坐标.Y + world × 敌人坐标.Z + world
缩放比例 = 1 ÷ 相机z
.如果真 (相机z > 0)
    返回 ()

.如果真结束
相机x = 视角宽 + world × 敌人坐标.X + world × 敌人坐标.Y + world × 敌人坐标.Z + world × 缩放比例 × 视角宽
相机y = 视角高 - world × 敌人坐标.X + world × 敌人坐标.Y + world × (敌人坐标.Z + 20) + world × 缩放比例 × 视角高 × 1.31
相机y2 = 视角高 - world × 敌人坐标.X + world × 敌人坐标.Y + world × (敌人坐标.Z - 45) + world × 缩放比例 × 视角高 × 1.31

方框高宽 = 相机y2 - 相机y
方框宽 = 方框高宽 ÷ 2

绘制矩形 (相机x - 方框宽 ÷ 2, 相机y, 方框宽, 方框高宽, 1, RGB2ARGB (#黄色, ))


.子程序 RGB2ARGB, 整数型, , 转换成GDI 的颜色值
.参数 RGB颜色, 整数型
.参数 透明度, 整数型, 可空, 0-255
.局部变量 Color, 字节集

.如果真 (是否为空 (透明度))
    透明度 = 255
.如果真结束
Color = 到字节集 (RGB颜色)
RGB颜色 = 位或 (Color + Color × 256 + Color × 65536, 左移 (透明度, 24))
返回 (RGB颜色)


18702773952 发表于 2024-3-23 19:17:42

上面
矩阵基地址 = 46268992   测试时我删除了这个不算错误
页: [1]
查看完整版本: CS1.6矩阵转屏幕坐标的问题