Results 1 to 3 of 3

Thread: Cannot see the problem.

  1. #1
    Private First Class
    Join Date
    Oct 2013
    Posts
    219
    Thanks
    56
    Thanked 105 Times in 66 Posts

    Cannot see the problem.

    So I need a bit more control over which dropped weapons get auto deleted by the server.

    I have taken the stock function;
    PHP Code:
    int __usercall sub_8103B6A@<eax>(long double a1@<st0>)
    {
      
    int v3// [sp+14h] [bp-24h]@1
      
    void *s// [sp+1Ch] [bp-1Ch]@3
      
    float v5// [sp+20h] [bp-18h]@1
      
    float v6// [sp+24h] [bp-14h]@9
      
    float v7// [sp+28h] [bp-10h]@5
      
    int v8// [sp+2Ch] [bp-Ch]@1
      
    int j// [sp+30h] [bp-8h]@5
      
    int i// [sp+34h] [bp-4h]@1

      
    v8 0;
      
    v5 = -1.0;
      
    v3 = *(_DWORD *)(dword_8793DB8 8);
      for ( 
    0v3; ++)
      {
        
    = (void *)dword_859D158[i];
        if ( !
    )
          return 
    i;
        
    v7 9.9999803e11;
        for ( 
    0dword_859B5E4; ++)
        {
          if ( *(
    _DWORD *)(dword_859B400 10404 9924) == && !*(_DWORD *)(dword_859B400 10404 9896) )
          {
            
    v6 sub_80A1DB2(560 140924344, (int)((char *)312));
            if ( 
    v7 > (long double)v6 )
              
    v7 v6;
          }
        }
        
    a1 v5;
        if ( 
    v7 > (long double)v5 )
        {
          
    v5 v7;
          
    v8 i;
        }
      }
      
    sub_811C9C0(a1, (void *)dword_859D158[v8]);
      
    dword_859D158[v8] = 0;
      return 
    v8;

    and imported it to libcod

    PHP Code:
    cHook *hook_delete_weapon;
    int delete_weapon(long double a1)
    {
        
    long double (*sub_80A1DB2)(int a2int a3);
        *(
    int *)&sub_80A1DB2 0x080A1DB2;
        
        
    int (*sub_811C9C0)(long double a4void *d);
        *(
    int *)&sub_811C9C0 0x0811C9C0;
        
        
    int *dword_8793DB8 = (int *)0x8793DB8;
        
    int *dword_859D158 = (int *)0x859D158;
        
    int *dword_859B5E4 = (int *)0x859B5E4;
        
    int *dword_859B400 = (int *)0x859B400;
        
        
    int v3;
        
    void *s;
        
    float v5;
        
    float v6;
        
    float v7;
        
    int v8;
        
    int j;
        
    int i;
        
        
    v8 0;
        
    v5 = -1.0;
        
    v3 int(dword_8793DB8 8);
        for ( 
    0v3; ++)
        {
            
    = (void *)dword_859D158[i];
            if ( !
    )
                return 
    i;
            
    v7 9.9999803e11;
            for ( 
    0int(dword_859B5E4); ++)
            {
                if ( 
    int(dword_859B400 10404 9924) == && !int(dword_859B400 10404 9896) )
                {
                    
    v6 sub_80A1DB2(560 140924344, (int)((char *)312));
                    if ( 
    v7 > (long double)v6 )
                        
    v7 v6;
                }
            }
            
    a1 v5;
            if ( 
    v7 > (long double)v5 )
            {
                
    v5 v7;
                
    v8 i;
            }
        }
        
    sub_811C9C0(a1, (void *)dword_859D158[v8]);
        
    dword_859D158[v8] = 0;
        return 
    v8;

    Currently it will not reach sub_811C9C0(a1, (void *)dword_859D158[v8]); and lags more and more depending on how many weapons are dropped in the map.

    Example;
    Weapon 1 dropped.
    Weapon 2 dropped.
    Hitch warning: 627 msec frame time
    Weapon 3 dropped.
    Hitch warning: 920 msec frame time
    Weapon 4 dropped.
    Hitch warning: 1188 msec frame time
    Weapon 5 dropped.
    Hitch warning: 1494 msec frame time

    Any ideas what I could have done wrong?
    Last edited by filthy_freak_; 12th June 2015 at 23:01.

  2. #2
    Global Mossaderator Mitch's Avatar
    Join Date
    Nov 2012
    Posts
    654
    Thanks
    204
    Thanked 450 Times in 305 Posts
    When i decompile that function then i get a bit different code.

    Edit: it might be useful to make code callback function like player commands (ClientCommand).
    Then you can decide in CoD if you remove the weapon or not.

    Edit 2: this is the problem
    PHP Code:
    v3 int(dword_8793DB8 8); 
    It should be
    PHP Code:
    v3 = *(_DWORD *)(dword_8793DB8 8); 
    libcod
    PHP Code:
    v3 = *(int *)(*(int *)0x08793DB8 8); 
    Also add a printf to test if you get the right value.

    How the function gets called
    PHP Code:
    int __cdecl sub_8103D3C(int a1int a2int a3int a4)
    {
      
    int v4// ST14_4@1
      
    int v6// [sp+10h] [bp-8h]@1

      
    v4 = -1171354717 * ((a1 - (signed int)&unk_8164C20) >> 2);
      
    sub_8104C84(-1171354717 * ((a1 - (signed int)&unk_8164C20) >> 2), 1);
      
    v6 sub_811C546();
      
    dword_859D158[sub_8103B6A()] = v6;
      *(
    _DWORD *)(v6 4) = 3;
      *(
    _DWORD *)(v6 140) = v4;
      
    sub_8103CB2(a1v6 360);
      *(
    _WORD *)(v6 428) = v4
    The actual function in 1.0
    PHP Code:
    int __cdecl sub_8103B6A()
    {
      
    int v2// [sp+14h] [bp-24h]@1
      
    int s// [sp+1Ch] [bp-1Ch]@3
      
    float v4// [sp+20h] [bp-18h]@1
      
    float v5// [sp+24h] [bp-14h]@9
      
    float v6// [sp+28h] [bp-10h]@5
      
    int v7// [sp+2Ch] [bp-Ch]@1
      
    int j// [sp+30h] [bp-8h]@5
      
    int i// [sp+34h] [bp-4h]@1

      
    v7 0;
      
    v4 = -1.0;
      
    v2 = *(_DWORD *)(dword_8793DB8 8);
      for ( 
    0v2; ++)
      {
        
    dword_859D158[i];
        if ( !
    )
          return 
    i;
        
    v6 9.9999803e11;
        for ( 
    0dword_859B5E4; ++)
        {
          if ( *(
    _DWORD *)(dword_859B400 10404 9924) == )
          {
            if ( !*(
    _DWORD *)(dword_859B400 10404 9896) )
            {
              
    v5 sub_80A1DB2((char *)&unk_86655B8 560 j312);
              if ( 
    v6 > (long double)v5 )
                
    v6 v5;
            }
          }
        }
        if ( 
    v6 > (long double)v4 )
        {
          
    v4 v6;
          
    v7 i;
        }
      }
      
    sub_811C9C0((void *)dword_859D158[v7]);
      
    dword_859D158[v7] = 0;
      return 
    v7;

    Last edited by Mitch; 13th June 2015 at 08:08.

  3. The Following User Says Thank You to Mitch For This Useful Post:

    filthy_freak_ (13th June 2015)

  4. #3
    Private First Class
    Join Date
    Oct 2013
    Posts
    219
    Thanks
    56
    Thanked 105 Times in 66 Posts
    That fixed it, i'm starting to get the hang of c++ and pointers. Tyvm!

  5. The Following User Says Thank You to filthy_freak_ For This Useful Post:

    Mitch (13th June 2015)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •