-
CS
外挂的实现
CS
外挂的实现
实现功能
1
:透视
透视是我们做
CS
作弊器中的重中之重。
在被你用
API
p>
钩子钩住的
glBegin
函数里,
如果拦截到的参数
mode
是
GL_TRIANGLE_STRIP
,
或
GL_TRIANGLE_FAN
,那么
CS
p>
就有可能是准备画一个模型(人物,武器
等)
,那么我们
可以用
glDisab
le(GL_DEPTH_TEST)
来告诉
OpenGL
p>
:我们想颠倒这个模型的绘制顺序。在
游戏中就可以看到,
墙壁后背的人物,
模型等全跑到了墙壁的前面。
这看上去图象顺序有点
乱,但这正是我们作弊器
“
透视
”
的原理所在!
有些人在绘制所有模型之前调用这个函数,
< br>那就会把你的整个游戏画面都打乱了,
请大家务
必注意。
p>
实现功能
2
:高亮显示
由于光线的问题,
在暗处人物也会显得很暗,
那怎样把他变得更亮,
以便我们游戏时容易发
现目
标呢?为了达到这种效果,就得钩住
glVertex3f
,然
后在原有函数
(
区别于我们钩住的
函数
)
调用前加上这行代码:
glColor4f(1.0f, 1.0f, 1.0f,
1.0f)
就这么简单就达到了我们想要的功能。
实现功能
3
:去除烟幕
烟幕弹发出的灰烟有的时候会挡住我们的视线,使
敌人有可乘之机。所以去除烟幕是
CS
作
弊器中必不可少的功能之一。
实现这个功能必须做的就是钩住
glBegin
和
glVertex3fv
,然后定义一个
bool
变量
< br>bSmoke
来作为开关。在钩住的
glBegin
p>
中,检查当前参数
mode
的值是否为
p>
GL_QUADS
。如果是的
话,取当前颜
色:
glGetFloatv(GL_CURRENT_COLOR, &curcol)
现在我
们看
curcol
是否为灰色
(灰色就
是
R=G=B
)
。
然后就是要排除
1.0
和
0.0<
/p>
,
因为这样才
能不把某些其他物体去除了
。
所以如果当前颜色是灰色,并且
不是白色(
1.0
)
、黑色(
0.0
)时,我们就把
bSmoke
设为
true
。当然在别的时候或不是绘制烟幕时
,要把
bSmoke
设为
false<
/p>
。
现在就可
以在
glVertex3fv
中判断
b
Smoke
是否为
true
,如果是,
直接
return
不处理它。这
样去除
烟幕的功能便算完成了。
实现功能
4
:去除闪光
闪光的影响比烟幕的还
大,
白屏相信大家都不喜欢。
所以去除它是必然的。
实现这个功能要
钩两个函数:
glBegin
p>
和
glVertex2f
。
CS
在画控制台和某些文
字时也会用到
glVertex2f
,所以我们在做这个功能时
要小心不要把
不该屏蔽的东西屏蔽了。
其实闪光的原理就是把一
张白色方形贴到屏幕上,
然后随着时间改
变
Alpha
透明度,所以我们就要检查看有没有白色的
QU
AD
并且覆盖了你的整个屏幕,如
果有,那就要留意了。
在
glBegi
n
中,检查
mode
是否为
GL_QUADS
,如果是,取当前颜色:
glGetFloatv(GL_CURRENT_COLOR, &curcol)
现在来
看看什么是纯白:
纯白就是
R=1,G=1,B=1,
如果检测到符合这些条件的话,
那就很有
可能现
在画的就是闪光,但是还是不敢确定到底是不是,所以我们要同时从别处入手。
当一个
OpenGL
程序调用
glBegin
时,接着将会调用
glVertex*
来画模型的顶点,绘制完成
后
将调用
glEnd
来收尾。我研究发现
CS
画简单的方型是用
glVertex2f
< br>,所以同样我们也要
钩住这个函数。
为了联系
glBegin
和
glVertex2f
,
我们用
bool
变量
bFlash<
/p>
来表示是否为一个白色的方型
(即
是否是
烟幕效果)
。下一步是获取当前屏幕的尺寸:
glGetFloatv(GL_VIEWPORT
,
&coords)
这样屏幕就保存在了
coords
里:
coords[0] = 0
coords[1] = 0
coords[2] =
宽
coords[3] =
高
现在在
我们钩住的
glVertex2f
里,如果不符合
“
闪光
”
的条件,调用回原
有的函数,如果符合
的话,就比较
glVertex2f
传给我们的第二个参数
y
和
< br>coords[3]
(屏幕高度)是否一样,如
果是,则
表明
CS
准备绘制白色闪光或全屏模式的控制台,但是这两者实
在是不好区分,所
以只有把阿尔法值设置得很小,这将不会影响到控制台,同时也把白色
闪光去掉了:
glColor4f(curcol[0], curcol[1],
curcol[2], 0.01f)
大家可以试试。
< br>/////////////////////////////////////////////// /////////////////////
//
高亮
void __stdcall NEWglEnable( GLenum cap
)
{
if(cheat_fullbright)
{
if(cap == GL_TEXTURE_2D)
return;
}
// End
Fullbright
////////////////////////////
////////////////////////////////////////
///////////////////////////
/////////////////////////////////////////
//
自设准心
if(cheat_crosshair)
{
glGetFloatv(GL_CURRENT_COLOR, color);
glPushMatrix();
glLoadIdentity();
glDisable(GL_TEXTURE_2D);
glGetIntegerv(GL_VIEWPORT
,
iDim);
glColor4f(1.0f,
1.0f, 0.0f, 0.7f);
glLineWidth(1.5f);
glBegin(GL_LINES);
glVertex2i(iDim[2]/2,
(iDim[3]/2)-12);
glVertex2i(iDim[2]/2, (iDim[3]/2)-5);
glVertex2i(iDim[2]/2, (iDim[3]/2)+5);
glVertex2i(iDim[2]/2,
(iDim[3]/2)+12);
glVertex2i((iDim[2]/2)-12, iDim[3]/2);
glVertex2i((iDim[2]/2)-5,
iDim[3]/2);
glVertex2i((iDim[2]/2)+5, iDim[3]/2);
glVertex2i((iDim[2]/2)+12,
iDim[3]/2);
glEnd();
glColor3f(color[0], color[1],
color[2]);
glBegin(GL_POINTS);
glVertex2i((iDim[2]/2)-3, iDim[3]/2);
glVertex2i((iDim[2]/2)+3,
iDim[3]/2);
glVertex2i(iDim[2]/2, (iDim[3]/2)-3);
glVertex2i(iDim[2]/2,
(iDim[3]/2)+3);
glEnd();
glEnable(GL_TEXTURE_2D);
glPopMatrix();
}
// End Crosshaircheat
//////
//////////////////////////////////////////////////
////////////
glEnable(cap);
}
// End hole function
///////
//////////////////////////////////////////////////
///////////
///////////////
//////////////////////////////////////////////////
///
// glDisable function?? Uneeded??
// Keeps track of which settings are
enabled.
void __stdcall
NEWglDisable( GLenum cap )
{
glDisable(cap);
}
// End hole function
///////
//////////////////////////////////////////////////
///////////
///////////////
//////////////////////////////////////////////////
/////
// glBegin function
//
Here is where the hack really happens.
//
透视
+
地图高亮
void __stdcall
NEWglBegin( GLenum e )
-
-
-
-
-
-
-
-
-
上一篇:【高中英语】高考英语单词记忆短文(40)
下一篇:反恐精英1.5秘籍大全