1
0

streamer.inc 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. /*
  2. SA-MP Streamer Plugin v2.6.1
  3. Copyright © 2012 Incognito
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 3 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. #include <a_samp>
  16. // Definitions
  17. #define STREAMER_TYPE_OBJECT (0)
  18. #define STREAMER_TYPE_PICKUP (1)
  19. #define STREAMER_TYPE_CP (2)
  20. #define STREAMER_TYPE_RACE_CP (3)
  21. #define STREAMER_TYPE_MAP_ICON (4)
  22. #define STREAMER_TYPE_3D_TEXT_LABEL (5)
  23. #define STREAMER_TYPE_AREA (6)
  24. #define STREAMER_AREA_TYPE_CIRCLE (0)
  25. #define STREAMER_AREA_TYPE_RECTANGLE (1)
  26. #define STREAMER_AREA_TYPE_SPHERE (2)
  27. #define STREAMER_AREA_TYPE_CUBE (3)
  28. #define STREAMER_AREA_TYPE_POLYGON (4)
  29. #define STREAMER_OBJECT_TYPE_GLOBAL (0)
  30. #define STREAMER_OBJECT_TYPE_PLAYER (1)
  31. #define STREAMER_OBJECT_TYPE_DYNAMIC (2)
  32. #if !defined FLOAT_INFINITY
  33. #define FLOAT_INFINITY (Float:0x7F800000)
  34. #endif
  35. // Include File Version
  36. public Streamer_IncludeFileVersion = 0x26104;
  37. #pragma unused Streamer_IncludeFileVersion
  38. // Enumerator
  39. enum
  40. {
  41. E_STREAMER_ATTACHED_OBJECT,
  42. E_STREAMER_ATTACHED_PLAYER,
  43. E_STREAMER_ATTACHED_VEHICLE,
  44. E_STREAMER_ATTACH_OFFSET_X,
  45. E_STREAMER_ATTACH_OFFSET_Y,
  46. E_STREAMER_ATTACH_OFFSET_Z,
  47. E_STREAMER_ATTACH_R_X,
  48. E_STREAMER_ATTACH_R_Y,
  49. E_STREAMER_ATTACH_R_Z,
  50. E_STREAMER_ATTACH_X,
  51. E_STREAMER_ATTACH_Y,
  52. E_STREAMER_ATTACH_Z,
  53. E_STREAMER_COLOR,
  54. E_STREAMER_DRAW_DISTANCE,
  55. E_STREAMER_EXTRA_ID,
  56. E_STREAMER_INTERIOR_ID,
  57. E_STREAMER_MAX_X,
  58. E_STREAMER_MAX_Y,
  59. E_STREAMER_MAX_Z,
  60. E_STREAMER_MIN_X,
  61. E_STREAMER_MIN_Y,
  62. E_STREAMER_MIN_Z,
  63. E_STREAMER_MODEL_ID,
  64. E_STREAMER_MOVE_R_X,
  65. E_STREAMER_MOVE_R_Y,
  66. E_STREAMER_MOVE_R_Z,
  67. E_STREAMER_MOVE_SPEED,
  68. E_STREAMER_MOVE_X,
  69. E_STREAMER_MOVE_Y,
  70. E_STREAMER_MOVE_Z,
  71. E_STREAMER_NEXT_X,
  72. E_STREAMER_NEXT_Y,
  73. E_STREAMER_NEXT_Z,
  74. E_STREAMER_PLAYER_ID,
  75. E_STREAMER_R_X,
  76. E_STREAMER_R_Y,
  77. E_STREAMER_R_Z,
  78. E_STREAMER_SIZE,
  79. E_STREAMER_STREAM_DISTANCE,
  80. E_STREAMER_STYLE,
  81. E_STREAMER_TEST_LOS,
  82. E_STREAMER_TYPE,
  83. E_STREAMER_WORLD_ID,
  84. E_STREAMER_X,
  85. E_STREAMER_Y,
  86. E_STREAMER_Z
  87. }
  88. // Setting Natives
  89. native Streamer_TickRate(rate);
  90. native Streamer_MaxItems(type, items);
  91. native Streamer_VisibleItems(type, items);
  92. native Streamer_CellDistance(Float:distance);
  93. native Streamer_CellSize(Float:size);
  94. // Update Natives
  95. native Streamer_ProcessActiveItems();
  96. native Streamer_ToggleIdleUpdate(playerid, toggle);
  97. native Streamer_Update(playerid);
  98. native Streamer_UpdateEx(playerid, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1);
  99. // Data Manipulation Natives
  100. native Streamer_GetFloatData(type, {Text3D,_}:id, data, &Float:result);
  101. native Streamer_SetFloatData(type, {Text3D,_}:id, data, Float:value);
  102. native Streamer_GetIntData(type, {Text3D,_}:id, data);
  103. native Streamer_SetIntData(type, {Text3D,_}:id, data, value);
  104. native Streamer_GetArrayData(type, {Text3D,_}:id, data, dest[], maxlength = sizeof dest);
  105. native Streamer_SetArrayData(type, {Text3D,_}:id, data, const src[], maxlength = sizeof src);
  106. native Streamer_IsInArrayData(type, {Text3D,_}:id, data, value);
  107. native Streamer_AppendArrayData(type, {Text3D,_}:id, data, value);
  108. native Streamer_RemoveArrayData(type, {Text3D,_}:id, data, value);
  109. native Streamer_GetUpperBound(type);
  110. // Miscellaneous Natives
  111. native Streamer_GetDistanceToItem(Float:x, Float:y, Float:z, type, {Text3D,_}:id, &Float:distance);
  112. native Streamer_IsItemVisible(playerid, type, {Text3D,_}:id);
  113. native Streamer_DestroyAllVisibleItems(playerid, type);
  114. native Streamer_CountVisibleItems(playerid, type);
  115. // Object Natives
  116. native CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 300.0);
  117. native DestroyDynamicObject(objectid);
  118. native IsValidDynamicObject(objectid);
  119. native SetDynamicObjectPos(objectid, Float:x, Float:y, Float:z);
  120. native GetDynamicObjectPos(objectid, &Float:x, &Float:y, &Float:z);
  121. native SetDynamicObjectRot(objectid, Float:rx, Float:ry, Float:rz);
  122. native GetDynamicObjectRot(objectid, &Float:rx, &Float:ry, &Float:rz);
  123. native MoveDynamicObject(objectid, Float:x, Float:y, Float:z, Float:speed, Float:rx = -1000.0, Float:ry = -1000.0, Float:rz = -1000.0);
  124. native StopDynamicObject(objectid);
  125. native IsDynamicObjectMoving(objectid);
  126. native AttachCameraToDynamicObject(playerid, objectid);
  127. native AttachDynamicObjectToVehicle(objectid, vehicleid, Float:offsetx, Float:offsety, Float:offsetz, Float:rx, Float:ry, Float:rz);
  128. native EditDynamicObject(playerid, objectid);
  129. native GetDynamicObjectMaterial(objectid, materialindex, &modelid, txdname[], texturename[], &materialcolor, maxtxdname = sizeof txdname, maxtexturename = sizeof texturename);
  130. native SetDynamicObjectMaterial(objectid, materialindex, modelid, const txdname[], const texturename[], materialcolor = 0);
  131. native GetDynamicObjectMaterialText(objectid, materialindex, text[], &materialsize, fontface[], &fontsize, &bold, &fontcolor, &backcolor, &textalignment, maxtext = sizeof text, maxfontface = sizeof fontface);
  132. native SetDynamicObjectMaterialText(objectid, materialindex, const text[], materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0);
  133. native DestroyAllDynamicObjects();
  134. native CountDynamicObjects();
  135. // Pickup Natives
  136. native CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
  137. native DestroyDynamicPickup(pickupid);
  138. native IsValidDynamicPickup(pickupid);
  139. native DestroyAllDynamicPickups();
  140. native CountDynamicPickups();
  141. // Checkpoint Natives
  142. native CreateDynamicCP(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
  143. native DestroyDynamicCP(checkpointid);
  144. native IsValidDynamicCP(checkpointid);
  145. native TogglePlayerDynamicCP(playerid, checkpointid, toggle);
  146. native TogglePlayerAllDynamicCPs(playerid, toggle);
  147. native IsPlayerInDynamicCP(playerid, checkpointid);
  148. native GetPlayerVisibleDynamicCP(playerid);
  149. native DestroyAllDynamicCPs();
  150. native CountDynamicCPs();
  151. // Race Checkpoint Natives
  152. native CreateDynamicRaceCP(type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
  153. native DestroyDynamicRaceCP(checkpointid);
  154. native IsValidDynamicRaceCP(checkpointid);
  155. native TogglePlayerDynamicRaceCP(playerid, checkpointid, toggle);
  156. native TogglePlayerAllDynamicRaceCPs(playerid, toggle);
  157. native IsPlayerInDynamicRaceCP(playerid, checkpointid);
  158. native GetPlayerVisibleDynamicRaceCP(playerid);
  159. native DestroyAllDynamicRaceCPs();
  160. native CountDynamicRaceCPs();
  161. // Map Icon Natives
  162. native CreateDynamicMapIcon(Float:x, Float:y, Float:z, type, color, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
  163. native DestroyDynamicMapIcon(iconid);
  164. native IsValidDynamicMapIcon(iconid);
  165. native DestroyAllDynamicMapIcons();
  166. native CountDynamicMapIcons();
  167. // 3D Text Label Natives
  168. native Text3D:CreateDynamic3DTextLabel(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
  169. native DestroyDynamic3DTextLabel(Text3D:id);
  170. native IsValidDynamic3DTextLabel(Text3D:id);
  171. native GetDynamic3DTextLabelText(Text3D:id, text[], maxlength = sizeof text);
  172. native UpdateDynamic3DTextLabelText(Text3D:id, color, const text[]);
  173. native DestroyAllDynamic3DTextLabels();
  174. native CountDynamic3DTextLabels();
  175. // Area Natives
  176. native CreateDynamicCircle(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1, playerid = -1);
  177. native CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -1);
  178. native CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1);
  179. native CreateDynamicCube(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1, playerid = -1);
  180. native CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);
  181. native DestroyDynamicArea(areaid);
  182. native IsValidDynamicArea(areaid);
  183. native TogglePlayerDynamicArea(playerid, areaid, toggle);
  184. native TogglePlayerAllDynamicAreas(playerid, toggle);
  185. native IsPlayerInDynamicArea(playerid, areaid);
  186. native IsPlayerInAnyDynamicArea(playerid);
  187. native IsPointInDynamicArea(areaid, Float:x, Float:y, Float:z);
  188. native IsPointInAnyDynamicArea(Float:x, Float:y, Float:z);
  189. native AttachDynamicAreaToObject(areaid, objectid, type = STREAMER_OBJECT_TYPE_DYNAMIC, playerid = INVALID_PLAYER_ID);
  190. native AttachDynamicAreaToPlayer(areaid, playerid);
  191. native AttachDynamicAreaToVehicle(areaid, vehicleid);
  192. native DestroyAllDynamicAreas();
  193. native CountDynamicAreas();
  194. // Extended Natives
  195. native CreateDynamicObjectEx(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:drawdistance = 0.0, Float:streamdistance = 200.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  196. native CreateDynamicPickupEx(modelid, type, Float:x, Float:y, Float:z, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  197. native CreateDynamicCPEx(Float:x, Float:y, Float:z, Float:size, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  198. native CreateDynamicRaceCPEx(type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  199. native CreateDynamicMapIconEx(Float:x, Float:y, Float:z, type, color, style = MAPICON_LOCAL, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  200. native Text3D:CreateDynamic3DTextLabelEx(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, Float:streamdistance = 100.0, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  201. native CreateDynamicCircleEx(Float:x, Float:y, Float:size, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  202. native CreateDynamicRectangleEx(Float:minx, Float:miny, Float:maxx, Float:maxy, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  203. native CreateDynamicSphereEx(Float:x, Float:y, Float:z, Float:size, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  204. native CreateDynamicCubeEx(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  205. native CreateDynamicPolygonEx(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worlds[] = { -1 }, interiors[] = { -1 }, players[] = { -1 }, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players);
  206. // Internal Natives
  207. native Streamer_CallbackHook(callback, {Float,_}:...);
  208. // Callbacks
  209. forward OnDynamicObjectMoved(objectid);
  210. forward OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz);
  211. forward OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z);
  212. forward OnPlayerPickUpDynamicPickup(playerid, pickupid);
  213. forward OnPlayerEnterDynamicCP(playerid, checkpointid);
  214. forward OnPlayerLeaveDynamicCP(playerid, checkpointid);
  215. forward OnPlayerEnterDynamicRaceCP(playerid, checkpointid);
  216. forward OnPlayerLeaveDynamicRaceCP(playerid, checkpointid);
  217. forward OnPlayerEnterDynamicArea(playerid, areaid);
  218. forward OnPlayerLeaveDynamicArea(playerid, areaid);
  219. // Callback Hook Section
  220. #define STREAMER_OPC (0)
  221. #define STREAMER_OPDC (1)
  222. #define STREAMER_OPEO (2)
  223. #define STREAMER_OPSO (3)
  224. #define STREAMER_OPPP (4)
  225. #define STREAMER_OPEC (5)
  226. #define STREAMER_OPLC (6)
  227. #define STREAMER_OPERC (7)
  228. #define STREAMER_OPLRC (8)
  229. static bool:Streamer_g_OPC = false;
  230. static bool:Streamer_g_OPDC = false;
  231. static bool:Streamer_g_OPEO = false;
  232. static bool:Streamer_g_OPSO = false;
  233. static bool:Streamer_g_OPPP = false;
  234. static bool:Streamer_g_OPEC = false;
  235. static bool:Streamer_g_OPLC = false;
  236. static bool:Streamer_g_OPERC = false;
  237. static bool:Streamer_g_OPLRC = false;
  238. public OnFilterScriptInit()
  239. {
  240. Streamer_g_OPC = funcidx("Streamer_OnPlayerConnect") != -1;
  241. Streamer_g_OPDC = funcidx("Streamer_OnPlayerDisconnect") != -1;
  242. Streamer_g_OPEO = funcidx("Streamer_OnPlayerEditObject") != -1;
  243. Streamer_g_OPSO = funcidx("Streamer_OnPlayerSelectObject") != -1;
  244. Streamer_g_OPPP = funcidx("Streamer_OnPlayerPickUpPickup") != -1;
  245. Streamer_g_OPEC = funcidx("Streamer_OnPlayerEnterCP") != -1;
  246. Streamer_g_OPLC = funcidx("Streamer_OnPlayerLeaveCP") != -1;
  247. Streamer_g_OPERC = funcidx("Streamer_OnPlayerEnterRaceCP") != -1;
  248. Streamer_g_OPLRC = funcidx("Streamer_OnPlayerLeaveRaceCP") != -1;
  249. if (funcidx("Streamer_OnFilterScriptInit") != -1)
  250. {
  251. return CallLocalFunction("Streamer_OnFilterScriptInit", "");
  252. }
  253. return 1;
  254. }
  255. #if defined _ALS_OnFilterScriptInit
  256. #undef OnFilterScriptInit
  257. #else
  258. #define _ALS_OnFilterScriptInit
  259. #endif
  260. #define OnFilterScriptInit Streamer_OnFilterScriptInit
  261. forward Streamer_OnFilterScriptInit();
  262. public OnGameModeInit()
  263. {
  264. Streamer_g_OPC = funcidx("Streamer_OnPlayerConnect") != -1;
  265. Streamer_g_OPDC = funcidx("Streamer_OnPlayerDisconnect") != -1;
  266. Streamer_g_OPEO = funcidx("Streamer_OnPlayerEditObject") != -1;
  267. Streamer_g_OPSO = funcidx("Streamer_OnPlayerSelectObject") != -1;
  268. Streamer_g_OPPP = funcidx("Streamer_OnPlayerPickUpPickup") != -1;
  269. Streamer_g_OPEC = funcidx("Streamer_OnPlayerEnterCP") != -1;
  270. Streamer_g_OPLC = funcidx("Streamer_OnPlayerLeaveCP") != -1;
  271. Streamer_g_OPERC = funcidx("Streamer_OnPlayerEnterRaceCP") != -1;
  272. Streamer_g_OPLRC = funcidx("Streamer_OnPlayerLeaveRaceCP") != -1;
  273. if (funcidx("Streamer_OnGameModeInit") != -1)
  274. {
  275. return CallLocalFunction("Streamer_OnGameModeInit", "");
  276. }
  277. return 1;
  278. }
  279. #if defined _ALS_OnGameModeInit
  280. #undef OnGameModeInit
  281. #else
  282. #define _ALS_OnGameModeInit
  283. #endif
  284. #define OnGameModeInit Streamer_OnGameModeInit
  285. forward Streamer_OnGameModeInit();
  286. public OnPlayerConnect(playerid)
  287. {
  288. if (!IsPlayerNPC(playerid))
  289. {
  290. Streamer_CallbackHook(STREAMER_OPC, playerid);
  291. }
  292. if (Streamer_g_OPC)
  293. {
  294. return CallLocalFunction("Streamer_OnPlayerConnect", "d", playerid);
  295. }
  296. return 1;
  297. }
  298. #if defined _ALS_OnPlayerConnect
  299. #undef OnPlayerConnect
  300. #else
  301. #define _ALS_OnPlayerConnect
  302. #endif
  303. #define OnPlayerConnect Streamer_OnPlayerConnect
  304. forward Streamer_OnPlayerConnect(playerid);
  305. public OnPlayerDisconnect(playerid, reason)
  306. {
  307. if (!IsPlayerNPC(playerid))
  308. {
  309. Streamer_CallbackHook(STREAMER_OPDC, playerid, reason);
  310. }
  311. if (Streamer_g_OPDC)
  312. {
  313. return CallLocalFunction("Streamer_OnPlayerDisconnect", "dd", playerid, reason);
  314. }
  315. return 1;
  316. }
  317. #if defined _ALS_OnPlayerDisconnect
  318. #undef OnPlayerDisconnect
  319. #else
  320. #define _ALS_OnPlayerDisconnect
  321. #endif
  322. #define OnPlayerDisconnect Streamer_OnPlayerDisconnect
  323. forward Streamer_OnPlayerDisconnect(playerid, reason);
  324. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  325. {
  326. if (!IsPlayerNPC(playerid) && playerobject)
  327. {
  328. Streamer_CallbackHook(STREAMER_OPEO, playerid, playerobject, objectid, response, fX, fY, fZ, fRotX, fRotY, fRotZ);
  329. }
  330. if (Streamer_g_OPEO)
  331. {
  332. return CallLocalFunction("Streamer_OnPlayerEditObject", "ddddffffff", playerid, playerobject, objectid, response, fX, fY, fZ, fRotX, fRotY, fRotZ);
  333. }
  334. return 1;
  335. }
  336. #if defined _ALS_OnPlayerEditObject
  337. #undef OnPlayerEditObject
  338. #else
  339. #define _ALS_OnPlayerEditObject
  340. #endif
  341. #define OnPlayerEditObject Streamer_OnPlayerEditObject
  342. forward Streamer_OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ);
  343. public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
  344. {
  345. if (!IsPlayerNPC(playerid) && type == SELECT_OBJECT_PLAYER_OBJECT)
  346. {
  347. Streamer_CallbackHook(STREAMER_OPSO, playerid, type, objectid, modelid, fX, fY, fZ);
  348. }
  349. if (Streamer_g_OPSO)
  350. {
  351. return CallLocalFunction("Streamer_OnPlayerSelectObject", "ddddfff", playerid, type, objectid, modelid, fX, fY, fZ);
  352. }
  353. return 1;
  354. }
  355. #if defined _ALS_OnPlayerSelectObject
  356. #undef OnPlayerSelectObject
  357. #else
  358. #define _ALS_OnPlayerSelectObject
  359. #endif
  360. #define OnPlayerSelectObject Streamer_OnPlayerSelectObject
  361. forward Streamer_OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ);
  362. public OnPlayerPickUpPickup(playerid, pickupid)
  363. {
  364. if (!IsPlayerNPC(playerid))
  365. {
  366. Streamer_CallbackHook(STREAMER_OPPP, playerid, pickupid);
  367. }
  368. if (Streamer_g_OPPP)
  369. {
  370. return CallLocalFunction("Streamer_OnPlayerPickUpPickup", "dd", playerid, pickupid);
  371. }
  372. return 1;
  373. }
  374. #if defined _ALS_OnPlayerPickUpPickup
  375. #undef OnPlayerPickUpPickup
  376. #else
  377. #define _ALS_OnPlayerPickUpPickup
  378. #endif
  379. #define OnPlayerPickUpPickup Streamer_OnPlayerPickUpPickup
  380. forward Streamer_OnPlayerPickUpPickup(playerid, pickupid);
  381. public OnPlayerEnterCheckpoint(playerid)
  382. {
  383. if (!IsPlayerNPC(playerid))
  384. {
  385. Streamer_CallbackHook(STREAMER_OPEC, playerid);
  386. }
  387. if (Streamer_g_OPEC)
  388. {
  389. return CallLocalFunction("Streamer_OnPlayerEnterCP", "d", playerid);
  390. }
  391. return 1;
  392. }
  393. #if defined _ALS_OnPlayerEnterCheckpoint
  394. #undef OnPlayerEnterCheckpoint
  395. #else
  396. #define _ALS_OnPlayerEnterCheckpoint
  397. #endif
  398. #define OnPlayerEnterCheckpoint Streamer_OnPlayerEnterCP
  399. forward Streamer_OnPlayerEnterCP(playerid);
  400. public OnPlayerLeaveCheckpoint(playerid)
  401. {
  402. if (!IsPlayerNPC(playerid))
  403. {
  404. Streamer_CallbackHook(STREAMER_OPLC, playerid);
  405. }
  406. if (Streamer_g_OPLC)
  407. {
  408. return CallLocalFunction("Streamer_OnPlayerLeaveCP", "d", playerid);
  409. }
  410. return 1;
  411. }
  412. #if defined _ALS_OnPlayerLeaveCheckpoint
  413. #undef OnPlayerLeaveCheckpoint
  414. #else
  415. #define _ALS_OnPlayerLeaveCheckpoint
  416. #endif
  417. #define OnPlayerLeaveCheckpoint Streamer_OnPlayerLeaveCP
  418. forward Streamer_OnPlayerLeaveCP(playerid);
  419. public OnPlayerEnterRaceCheckpoint(playerid)
  420. {
  421. if (!IsPlayerNPC(playerid))
  422. {
  423. Streamer_CallbackHook(STREAMER_OPERC, playerid);
  424. }
  425. if (Streamer_g_OPERC)
  426. {
  427. return CallLocalFunction("Streamer_OnPlayerEnterRaceCP", "d", playerid);
  428. }
  429. return 1;
  430. }
  431. #if defined _ALS_OnPlayerEnterRaceCP
  432. #undef OnPlayerEnterRaceCheckpoint
  433. #else
  434. #define _ALS_OnPlayerEnterRaceCP
  435. #endif
  436. #define OnPlayerEnterRaceCheckpoint Streamer_OnPlayerEnterRaceCP
  437. forward Streamer_OnPlayerEnterRaceCP(playerid);
  438. public OnPlayerLeaveRaceCheckpoint(playerid)
  439. {
  440. if (!IsPlayerNPC(playerid))
  441. {
  442. Streamer_CallbackHook(STREAMER_OPLRC, playerid);
  443. }
  444. if (Streamer_g_OPLRC)
  445. {
  446. return CallLocalFunction("Streamer_OnPlayerLeaveRaceCP", "d", playerid);
  447. }
  448. return 1;
  449. }
  450. #if defined _ALS_OnPlayerLeaveRaceCP
  451. #undef OnPlayerLeaveRaceCheckpoint
  452. #else
  453. #define _ALS_OnPlayerLeaveRaceCP
  454. #endif
  455. #define OnPlayerLeaveRaceCheckpoint Streamer_OnPlayerLeaveRaceCP
  456. forward Streamer_OnPlayerLeaveRaceCP(playerid);