如果星际不连局域网,无论是single player还是Multiple Player,程序都能修改自己的金钱和气的数值。但是如果是在局域网网内的话,只要一修改,就会出现结束游戏(...dropped the player...),我在想星际是不是有一种什么机制来防止在局域网中的作弊呢?~~~欢迎大家交流探讨~~~~
解决方案 »
- WS_EX_COMPOSITED扩展样式问题
- 请问 如何向一个ListControl追加CImageList
- ceditview 编辑框中的文本如何判断换行?
- vs2005调试dmp文件(crash时程序用代码生成的)怎样定位到源代码,pdb文件,编译环境,源代码都有
- 请高手指点,怎样在程序中动态删除menu中的separator?
- 一个关于获取系统时间在加上时间的问题!
- 邪门问题,挑战你智力与耐心——ADO数据修改的意外问题
- VC中如何处理JPG文件,就像处理bmp那样,
- MFC编写mjpg-streamer上位机程序
- 新婚完毕,30而立,该有所作为了
- 如何让Reprot风格的CListCtrl表头的某一列宽度不能改变大小,表头其它列宽度可以随意改变?
- 请各位大虾帮忙,救急!!!!!
aabbss() ( ) aabbss() ( ) aabbss() ( ) aabbss() ( )
我和你的情况是一样的.呵呵
没想到玩星际的高人还不少啊.
双星的都有!!!!!!!!!!!!!!!!!!!!!!!!!!
暗黑和星际的确是非常经典的游戏,但是正如yaogreat所说,游戏和作弊是两码事一样,我们只讨论技术,而不会涉及到道德之类的东西。
to kpld8888(kpld) :你的话中有话啊,挺有意思。
to joise:你的话有道理,因为在你回复之前,我已经注意到这个可能性了,而且我试过不同的种族,无论使用哪一个,存钱的虚拟内存地址都是在0x00501370、0x00501374的地方,但是不是唯一的,他们随机地交替出现,而气矿的虚拟内存地址的对应为0x005013A0、0x005013A4.
并且可以肯定的一件事是存钱的数据类型是4个字节大小,这个我试过了。
(测试的星际版本是1.10)
但是如果真的是在多人模式下储存钱的那块内存有备份,怎么样能同时修改这两个内存地址为同一数值呢?我曾试着把网线拔掉,再修改内存钱,数目是对了,但是一旦把网线接上,马上又给踢掉了。请大家继续讨论~~~~~~
我想,并不是储存钱的那块内存有备份,也不是像w3guy(Jaz)所说的其他玩家的内存中有备份,
因为我曾经直接改了程序采矿加钱的部分,就是说本来每点水晶矿加8,把它改成了另外一个值。这样不管是单机还是网络,所有有关钱的数目应该一样了。在单机模式下没问题,局域网的时候一采矿就掉。
所以说根本不是当前数据有其他备份的问题,程序应该有其它的判断方法。当时没时间去弄了,不然我想应该总可以找出是什么原因的~
A 采了一点矿,它会把采了一点矿和采过后的总矿数发给其他玩家,其他玩家接受到数据后,在自己的机器上对A的数据做采一点矿的处理然后把总矿数和发来的总矿数做比较,如何不符合,则A 会被踢出。
我是指每个玩家都“存储着”其他玩家的当前状态, 不是指每次更新都要把全部数据发过去。你不要理解错了。> 星际中任何一个玩家的每一个兵或者建筑都是由一个线程
不可能的,没有任何一个即时战略游戏是这样实现的。你用任务管理器看看你的warcraft 有几个线程。>当某一个玩家的状态改变时,它最多就应该会向其他玩家发送那些状态改变了的新的数据
这就是我的意思,游戏只发送变化的东西,不是每次都把自己所有的数据都发送。关于用加速器的问题,游戏为了保证公正性,会根据其他玩家的速度自动调节你的速度的,你再怎么加用处也不会大。
关于加速器或其他手段改变采矿速度,我的意思其实是改变发送到其他玩家的采矿次数,比如说如果我知道了通信数据格式,可以欺骗性的发送采矿的数据。而对此程序又有可能也会对此判断,前后两次的时间差不能少于某个数值等等。
你可以在GOOGLE搜索“外挂教程”,那里有详细的介绍。