metahook吧 关注:755贴子:11,756
  • 5回复贴,共1

[钻石星辰拳]【笔记】破解512visedict限制

只看楼主收藏回复

首先替换R_DrawEntitiesOnList,把
for (i = 0; i < cl_numvisedicts; i++)
{
currententity = cl_visedicts[i];
此处替换掉
还有内层循环
for (j = 0; j < cl_numvisedicts; j++)
{
if (cl_visedicts[j]->index == currententity->curstate.aiment)
{
currententity = cl_visedicts[j];
也要替换。
虽然感觉这种循环并不是很好,时间复杂度有n^2了,既然是查表不然直接GetEntityByIndex(currententity->curstate.aiment)
后面画sprite的循环也要替换
r_blend = 1.0;
for (i = 0; i < cl_numvisedicts; i++)
{
currententity = cl_visedicts[i];


IP属地:江苏1楼2015-03-10 16:26回复
    int ClientDLL_AddEntity(int type, struct cl_entity_s *ent)
    里面也有cl_visedict
    if (cl_numvisedicts < MAX_VISEDICTS)
    {
    cl_visedicts[cl_numvisedicts] = ent;
    cl_numvisedicts++;
    }
    这里替换掉
    int CL_CreateVisibleEntity(int type, struct cl_entity_s *ent)
    里也有一样的
    CL_MoveAiments这里也有
    for (i = 0; i < cl_numvisedicts; i++)
    {
    ent = cl_visedicts[i];
    if (ent->curstate.aiment && ent->curstate.movetype == MOVETYPE_FOLLOW)
    VectorCopy(cl_entities[ent->curstate.aiment].curstate.origin, ent->curstate.origin);
    }
    不替换没关系FOLLOWENT不会跟着跑而已


    IP属地:江苏2楼2015-03-10 16:29
    回复
      void CL_LinkPlayers(void)
      里面比较棘手
      在大循环里面有
      if (cl_numvisedicts == MAX_VISEDICTS)
      break;
      ent = cl_visedicts[j + 1];
      如果要完全自己弄一个数据结构的话这里肯定不行,1~32号cl_visedicts会出问题
      而且这个函数也很长里面引用的东西很多都没导出, 直接替换函数也不靠谱
      比较靠谱的方法是直接替换内存里的cl_visedicts地址


      IP属地:江苏4楼2015-03-10 16:34
      回复
        留名!


        IP属地:广东来自Android客户端5楼2015-03-10 17:09
        回复
          好⊙ω⊙


          来自iPhone客户端6楼2015-03-10 22:48
          回复
            留名


            IP属地:广东7楼2015-03-10 23:25
            回复