YashasSamaga

Untitled

Feb 8th, 2017
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. __forceinline cell ExecuteFunctionCC1O2(AMX *amx, functionID *fid, cell cparam)
  2. {
  3.     cell retval = 0;
  4.     switch (fid->type)
  5.     {
  6.     case FUNCTION_ID_TYPE_NATIVE:
  7.         cell params[4];
  8.         cell (*func)(AMX *amx, cell params[]) = (cell(*)(AMX *amx, cell params[]))(fid->address);
  9.  
  10.         switch (fid->argc)
  11.         {
  12.         case 1:
  13.             params[0] = 4;
  14.             params[1] = cparam;
  15.             break;
  16.         case 2:
  17.             params[0] = 8;
  18.             if (fid->IsFlagSet(FUNCTION_FLAG_BIND1))
  19.             {              
  20.                 params[1] = fid->params[0];
  21.                 params[2] = cparam;
  22.             }
  23.             else if (fid->IsFlagSet(FUNCTION_FLAG_BIND2))
  24.             {
  25.                 params[1] = cparam;
  26.                 params[2] = fid->params[1];
  27.             }
  28.             break;
  29.         case 3:
  30.             params[0] = 12;
  31.             params[1] = fid->params[0];
  32.             params[2] = fid->params[1];
  33.             break;
  34.         }      
  35.         retval = func(amx, params);
  36.         break;
  37.     case FUNCTION_ID_TYPE_PUBLIC:
  38.     {
  39.         switch (fid->argc)
  40.         {
  41.         case 1:
  42.             amx_Push(amx, cparam);
  43.             break;
  44.         case 2:
  45.             if (fid->IsFlagSet(FUNCTION_FLAG_BIND1))
  46.             {
  47.                 amx_Push(amx, cparam);
  48.                 amx_Push(amx, fid->params[0]);
  49.             }
  50.             else if (fid->IsFlagSet(FUNCTION_FLAG_BIND2))
  51.             {
  52.                 amx_Push(amx, fid->params[1]);
  53.                 amx_Push(amx, cparam);
  54.             }
  55.             break;
  56.         case 3:
  57.             amx_Push(amx, fid->params[0]);
  58.             amx_Push(amx, fid->params[1]);
  59.             amx_Push(amx, cparam);
  60.             break;
  61.         }
  62.         amx_Exec(amx, &retval, fid->address);
  63.         break;
  64.     }
  65.     case FUNCTION_ID_TYPE_DEFAULT:
  66.     {
  67.         switch (fid->argc)
  68.         {
  69.         case 1:
  70.             retval = unary_functions[fid->address](cparam);
  71.             break;
  72.         case 2:
  73.             if (fid->IsFlagSet(FUNCTION_FLAG_BIND1))
  74.                 retval = binary_functions[fid->address](fid->params[0], cparam);
  75.             else if (fid->IsFlagSet(FUNCTION_FLAG_BIND2))
  76.                 retval = binary_functions[fid->address](cparam, fid->params[1]);
  77.             break;
  78.         }
  79.         break;
  80.     }
  81.     }
  82.     if (fid->IsFlagSet(FUNCTION_FLAG_NOT)) return !retval;
  83.     return retval;
  84. }
Add Comment
Please, Sign In to add comment