Advertisement
BigETI

Example native in plugin

Apr 12th, 2013
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. // An example native of my plugin passing arguments by reference <- of course works
  2. cell AMX_NATIVE_CALL AMX_GetBObjectPosEx(AMX *amx, cell *params) // GetBObjectPosEx(bobjectid, &Float:x, &Float:y, &Float:z, &Float:rx, &Float:ry, &Float:rz)
  3. {
  4.     if(IsInvalidBObject(params[1])) return 0;
  5.     vector_foreach(B_STREAM, b_stream, amx_it)
  6.     {
  7.         if(amx_it->amx_ptr != amx) continue;
  8.         B_OBJECT *object_ptr = &amx_it->object.at(params[1]);
  9.         //if(t_object.id != params[1]) continue;
  10.         if(!object_ptr->is) return 0;
  11.         cell *addr[6] = {NULL, NULL, NULL, NULL, NULL, NULL};
  12.         amx_GetAddr(amx, params[2], &addr[0]);
  13.         amx_GetAddr(amx, params[3], &addr[1]);
  14.         amx_GetAddr(amx, params[4], &addr[2]);
  15.         amx_GetAddr(amx, params[5], &addr[3]);
  16.         amx_GetAddr(amx, params[6], &addr[4]);
  17.         amx_GetAddr(amx, params[7], &addr[5]);
  18.         if(object_ptr->is_moving)
  19.         {
  20.             clock_t current_clock = clock();
  21.             if(object_ptr->move_start+object_ptr->move_time > current_clock)
  22.             {
  23.                 float multiplicate_time = (float)(current_clock-object_ptr->move_start)/(float)object_ptr->move_time, result = (multiplicate_time*(object_ptr->move_to_x-object_ptr->x))+object_ptr->x;
  24.                 *addr[0] = amx_ftoc(result);
  25.                 result = (multiplicate_time*(object_ptr->move_to_y-object_ptr->y))+object_ptr->y;
  26.                 *addr[1] = amx_ftoc(result);
  27.                 result = (multiplicate_time*(object_ptr->move_to_z-object_ptr->z))+object_ptr->z;
  28.                 *addr[2] = amx_ftoc(result);
  29.                 result = (multiplicate_time*(object_ptr->move_to_rx-object_ptr->rx))+object_ptr->rx;
  30.                 *addr[3] = amx_ftoc(result);
  31.                 result = (multiplicate_time*(object_ptr->move_to_ry-object_ptr->ry))+object_ptr->ry;
  32.                 *addr[4] = amx_ftoc(result);
  33.                 result = (multiplicate_time*(object_ptr->move_to_rz-object_ptr->rz))+object_ptr->rz;
  34.                 *addr[5] = amx_ftoc(result);
  35.             }
  36.             else
  37.             {
  38.                 *addr[0] = amx_ftoc(object_ptr->move_to_x);
  39.                 *addr[1] = amx_ftoc(object_ptr->move_to_y);
  40.                 *addr[2] = amx_ftoc(object_ptr->move_to_z);
  41.                 *addr[3] = amx_ftoc(object_ptr->move_to_rx);
  42.                 *addr[4] = amx_ftoc(object_ptr->move_to_ry);
  43.                 *addr[5] = amx_ftoc(object_ptr->move_to_rz);
  44.             }
  45.         }
  46.         else
  47.         {
  48.             *addr[0] = amx_ftoc(object_ptr->x);
  49.             *addr[1] = amx_ftoc(object_ptr->y);
  50.             *addr[2] = amx_ftoc(object_ptr->z);
  51.             *addr[3] = amx_ftoc(object_ptr->rx);
  52.             *addr[4] = amx_ftoc(object_ptr->ry);
  53.             *addr[5] = amx_ftoc(object_ptr->rz);
  54.         }
  55.         return 1;
  56.     }
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement