callbacks.inc 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042
  1. /*
  2. * New SA-MP callbacks by Emmet
  3. * Created on Sunday, January 26, 2014 at 11:58 AM.
  4. *
  5. * Last Update: March 16, 2015 @ 5:57 AM.
  6. */
  7. #if !defined POTENTIAL_CRASH_DAMAGE
  8. #define POTENTIAL_CRASH_DAMAGE (55.0)
  9. #endif
  10. #if !defined POTENTIAL_SPEED_DROP
  11. #define POTENTIAL_SPEED_DROP (5.0)
  12. #endif
  13. #define BitFlag_Status(%0,%1) \
  14. ((%0) & %1)
  15. #define BitFlag_Unset(%0,%1) \
  16. ((%0) &= ~%1)
  17. #define BitFlag_Set(%0,%1) \
  18. ((%0) |= %1)
  19. #define PLAYER_ACTION_NONE (0)
  20. #define PLAYER_ACTION_SHOOTING (1)
  21. #define PLAYER_ACTION_SWIMMING (2)
  22. #define PLAYER_ACTION_SKYDIVING (3)
  23. #define PLAYER_ACTION_JUMPING (4)
  24. // Player variables
  25. enum e_cbPlayerData {
  26. e_cbPlayerFlags:e_cbFlags,
  27. Float:e_cbPacket,
  28. e_cbHoldingTimer,
  29. e_cbFrames,
  30. e_cbDrunkLevel,
  31. e_cbTarget,
  32. e_cbAction,
  33. e_cbAnimation,
  34. e_cbHoverColor,
  35. e_cbShotCounter[4],
  36. e_cbLastWeapon,
  37. e_cbLastAmmo,
  38. e_cbLastVehicle
  39. };
  40. // Used for storing tick counts (GetTickCount).
  41. enum e_cbPlayerTicks {
  42. e_cbTickCount,
  43. e_cbBurnTick,
  44. e_cbUpdateTick,
  45. e_cbVendingTick,
  46. e_cbShootTick
  47. };
  48. // Vehicle variables
  49. enum e_cbCarData {
  50. e_vPanels,
  51. e_vDoors,
  52. e_vLights,
  53. Float:e_vHealth,
  54. Float:e_vSpeed
  55. };
  56. // Player flags
  57. enum e_cbPlayerFlags (<<= 1) {
  58. e_cbUpdate = 1,
  59. e_cbPaused,
  60. e_cbHolding,
  61. e_cbSelection,
  62. e_cbAnimationSet,
  63. e_cbReloading,
  64. e_cbBurning,
  65. e_cbAiming,
  66. e_cbPressed
  67. };
  68. static const
  69. g_sCallbackList[][] = {
  70. {"OnPlayerPause"}, {"OnPlayerResume"}, {"OnPlayerHoldingKey"},
  71. {"OnPlayerReleaseKey"}, {"OnPlayerFall"}, {"OnPlayerPacketLoss"},
  72. {"OnPlayerUseVending"}, {"OnPlayerCrashVehicle"}, {"OnPlayerFPSChange"},
  73. {"OnPlayerJackVehicle"}, {"OnPlayerEmptyWeapon"}, {"OnPlayerFriendlyFire"},
  74. {"OnPlayerTargetPlayer"}, {"OnPlayerHideCursor"}, {"OnPlayerAntiReload"},
  75. {"OnPlayerAnimationPlay"}, {"OnPlayerReloadWeapon"}, {"OnPlayerBurning"},
  76. {"OnPlayerAiming"}, {"OnPlayerRamPlayer"}, {"OnPlayerActionChange"},
  77. {"OnPlayerUseCamera"}, {"OnPlayerSprayAtVehicle"}
  78. },
  79. Float:g_aVendingLocations[62][3] = {
  80. {2480.9548, -1958.5217, 13.5830}, {2325.9185, -1645.9553, 14.8270},
  81. {2352.9932, -1357.1597, 24.3984}, {2153.8535, -1015.7230, 62.8835},
  82. {2140.2710, -1161.4998, 23.9922}, {2224.4141, -1153.4441, 1025.7969},
  83. {2060.1152, -1898.4554, 13.5538}, {1634.0741, -2238.2815, 13.5078},
  84. {1729.7947, -1943.8628, 13.5687}, {-16.1516, -90.8512, 1003.5469},
  85. {-17.5205, -90.9663, 1003.5469}, {1929.5516, -1772.4803, 13.5469},
  86. {496.0115, -23.5306, 1000.6797}, {500.6090, -2.1074, 1000.6797},
  87. {501.7604, -2.2185, 1000.6797}, {-19.1310, -57.0453, 1003.5469},
  88. {-36.1302, -57.1351, 1003.5469}, {1153.9125, -1460.9729, 15.7969},
  89. {1788.3973, -1369.2472, 15.7578}, {2575.7300, -1284.6108, 1060.9844},
  90. {662.4797, -551.4141, 16.3359}, {200.2021, -107.5868, 1.5513},
  91. {1278.5977, 372.2211, 19.5547}, {2271.7053, -77.2283, 26.5810},
  92. {-2119.4229, -422.2747, 35.5313}, {-2119.7649, -423.4770, 35.5313},
  93. {-2068.6082, -397.5225, 35.5313}, {-2039.8768, -397.5218, 35.5313},
  94. {-2011.1292, -397.5222, 35.5313}, {-2005.6145, -490.8686, 35.5313},
  95. {-2034.4011, -490.8754, 35.5313}, {-2063.2300, -490.8705, 35.5313},
  96. {-2092.0771, -490.8697, 35.5313}, {-2229.1521, 287.1645, 35.3203},
  97. {-1981.6025, 142.6991, 27.6875}, {-1349.2971, 492.2820, 11.1953},
  98. {-1349.3674, 493.9295, 11.1953}, {-2419.5833, 984.5712, 45.2969},
  99. {-2419.5457, 986.0020, 45.2969}, {-1455.0173, 2592.4175, 55.8359},
  100. {-252.9913, 2599.6885, 62.8582}, {-252.9274, 2597.8921, 62.8582},
  101. {-862.7581, 1537.4230, 22.5870}, {-75.2812, 1227.9269, 19.7359},
  102. {-14.7254, 1176.1750, 19.5634}, {1398.8198, 2223.3601, 11.0234},
  103. {1659.4318, 1722.0974, 10.8281}, {1519.3350, 1055.2886, 10.8203},
  104. {2503.1318, 1244.5094, 10.8203}, {2647.7424, 1128.9138, 11.1797},
  105. {2845.7429, 1294.2975, 11.3906}, {2320.0618, 2532.0364, 10.8203},
  106. {2086.5894, 2071.4111, 11.0579}, {-32.5264, -185.9041, 1003.5469},
  107. {-33.8699, -186.0213, 1003.5469}, {361.6433, 159.3575, 1008.3828},
  108. {374.7823, 188.2360, 1008.3893}, {351.6473, 206.1147, 1008.3828},
  109. {371.6005, 177.7106, 1019.9844}, {373.8686, -178.9308, 1000.6328},
  110. {378.2982, -178.9220, 1000.6328}, {315.9102, -140.5504, 999.6016}
  111. },
  112. g_aMaximumClip[11] = {34, 17, 7, 1, 4, 7, 100, 30, 30, 50, 100},
  113. g_aClipIndex[11] = {0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 2};
  114. static g_aPlayerData[MAX_PLAYERS][e_cbPlayerData];
  115. static g_aPlayerTicks[MAX_PLAYERS][e_cbPlayerTicks];
  116. static g_aVehicleData[MAX_VEHICLES][e_cbCarData];
  117. static g_bCallbackDefined[sizeof(g_sCallbackList)];
  118. // Called when a player pauses their game.
  119. forward OnPlayerPause(playerid);
  120. // Called when a player returns to the game.
  121. forward OnPlayerResume(playerid, time);
  122. // Called when a player starts holding a key.
  123. forward OnPlayerHoldingKey(playerid, keys);
  124. // Called when a player releases a key.
  125. forward OnPlayerReleaseKey(playerid, keys, time);
  126. // Called when a player falls from a tall height.
  127. forward OnPlayerFall(playerid, Float:damage);
  128. // Called when a player loses packets.
  129. forward OnPlayerPacketLoss(playerid, Float:oldloss, Float:newloss);
  130. // Called when a player crashes their vehicle.
  131. forward OnPlayerCrashVehicle(playerid, vehicleid, Float:damage);
  132. // Called when a player uses a vending machine.
  133. forward OnPlayerUseVending(playerid);
  134. // Called when a player's FPS change.
  135. forward OnPlayerFPSChange(playerid, oldfps, newfps);
  136. // Called when a player jacks another player's vehicle.
  137. forward OnPlayerJackVehicle(playerid, targetid, vehicleid);
  138. // Called when a player completely uses up all ammo in their weapon.
  139. forward OnPlayerEmptyWeapon(playerid, weaponid);
  140. // Called when a player shoots another player in their team.
  141. forward OnPlayerFriendlyFire(playerid, targetid, weaponid);
  142. // Called when a player aims at another player.
  143. forward OnPlayerTargetPlayer(playerid, targetid, weaponid);
  144. // Called when a player explicitly disables textdraw selection mode.
  145. forward OnPlayerHideCursor(playerid, hovercolor);
  146. // Called when a player shoots more ammo than their weapon's clip can hold.
  147. forward OnPlayerAntiReload(playerid, weaponid);
  148. // Called when an animation is finished.
  149. forward OnPlayerAnimationPlay(playerid, animlib[], animname[]);
  150. // Called when a player is reloading their weapon.
  151. forward OnPlayerReloadWeapon(playerid, weaponid, ammo);
  152. // Called when a player is burning from fire.
  153. forward OnPlayerBurning(playerid, status);
  154. // Called when a player aims a weapon.
  155. forward OnPlayerAiming(playerid, weaponid, status);
  156. // Called when a player's action changes;
  157. forward OnPlayerActionChange(playerid, oldaction, newaction);
  158. // Called when a player rams another player.
  159. forward OnPlayerRamPlayer(playerid, driverid, vehicleid, Float:damage);
  160. // Called when a player uses a camera to take a picture.
  161. forward OnPlayerUseCamera(playerid);
  162. // Called when a player sprays a spraycan towards a vehicle.
  163. forward OnPlayerSprayAtVehicle(playerid, vehicleid);
  164. stock IsPlayerNearVending(playerid)
  165. {
  166. for (new i = 0; i < sizeof(g_aVendingLocations); i ++)
  167. {
  168. if (IsPlayerInRangeOfPoint(playerid, 3.0, g_aVendingLocations[i][0], g_aVendingLocations[i][1], g_aVendingLocations[i][2]))
  169. {
  170. return 1;
  171. }
  172. }
  173. return 0;
  174. }
  175. stock IsPlayerPaused(playerid)
  176. {
  177. return BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbPaused);
  178. }
  179. stock IsPlayerBurning(playerid)
  180. {
  181. return BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbBurning);
  182. }
  183. stock IsPlayerAiming(playerid)
  184. {
  185. return BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbAiming);
  186. }
  187. stock IsPlayerSwimming(playerid)
  188. {
  189. return (1538 <= GetPlayerAnimationIndex(playerid) <= 1544);
  190. }
  191. stock IsPlayerSkydiving(playerid)
  192. {
  193. return (GetPlayerWeapon(playerid) == 46 && GetPlayerAnimationIndex(playerid) == 1134);
  194. }
  195. stock GetPlayerFPS(playerid)
  196. {
  197. return g_aPlayerData[playerid][e_cbFrames];
  198. }
  199. stock GetPlayerPausedTime(playerid)
  200. {
  201. return (GetTickCount() - g_aPlayerTicks[playerid][e_cbTickCount]);
  202. }
  203. stock CB_ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0)
  204. {
  205. new
  206. ret = ApplyAnimation(playerid, animlib, animname, fDelta, loop, lockx, locky, freeze, time, forcesync);
  207. if (ret)
  208. {
  209. SetTimerEx("Callback_Animation", 100, false, "d", playerid);
  210. }
  211. return ret;
  212. }
  213. stock CB_SelectTextDraw(playerid, hovercolor)
  214. {
  215. new
  216. ret = SelectTextDraw(playerid, hovercolor);
  217. if (ret)
  218. {
  219. g_aPlayerData[playerid][e_cbHoverColor] = hovercolor;
  220. BitFlag_Set(g_aPlayerData[playerid][e_cbFlags], e_cbSelection);
  221. }
  222. return ret;
  223. }
  224. stock CB_CancelSelectTextDraw(playerid)
  225. {
  226. new
  227. ret = CancelSelectTextDraw(playerid);
  228. if (ret)
  229. {
  230. g_aPlayerData[playerid][e_cbHoverColor] = 0;
  231. BitFlag_Unset(g_aPlayerData[playerid][e_cbFlags], e_cbSelection);
  232. }
  233. return ret;
  234. }
  235. stock static Callback_GetDriver(vehicleid)
  236. {
  237. for (new i = 0; i < MAX_PLAYERS; i ++)
  238. {
  239. if (GetPlayerState(i) == PLAYER_STATE_DRIVER && IsPlayerInVehicle(i, vehicleid))
  240. {
  241. return i;
  242. }
  243. }
  244. return INVALID_PLAYER_ID;
  245. }
  246. stock static Float:Callback_GetSpeed(vehicleid)
  247. {
  248. // This is only for basic speed calculations. No need to get the real speed.
  249. new
  250. Float:fX,
  251. Float:fY,
  252. Float:fZ
  253. ;
  254. GetVehicleVelocity(vehicleid, fX, fY, fZ);
  255. return (floatsqroot((fX * fX) + (fY * fY) + (fZ * fZ)) * 100);
  256. }
  257. stock static CB_IsVehicleInRangeOfPoint(vehicleid, Float:range, Float:x, Float:y, Float:z)
  258. {
  259. new Float:fX, Float:fY, Float:fZ;
  260. GetVehiclePos(vehicleid, fX, fY, fZ);
  261. fX -= x;
  262. fY -= y;
  263. fZ -= z;
  264. return ((fX * fX) + (fY * fY) + (fZ * fZ)) < (range * range);
  265. }
  266. stock static CB_GetVehicleInFrontOfPlayer(playerid)
  267. {
  268. new Float:fX, Float:fY, Float:fZ, Float:fAngle;
  269. GetPlayerPos(playerid, fX, fY, fZ);
  270. GetPlayerFacingAngle(playerid, fAngle);
  271. for (new i = 0; i < MAX_VEHICLES; i ++)
  272. {
  273. if (!IsVehicleStreamedIn(i, playerid))
  274. {
  275. continue;
  276. }
  277. else if (CB_IsVehicleInRangeOfPoint(i, 2.0, (fX + (2.0 * floatsin(-fAngle, degrees))), (fY + (2.0 * floatcos(-fAngle, degrees))), fZ))
  278. {
  279. return i;
  280. }
  281. }
  282. return INVALID_VEHICLE_ID;
  283. }
  284. stock IsPlayerSprayingVehicle(playerid, vehicleid)
  285. {
  286. if (IsVehicleStreamedIn(vehicleid, playerid))
  287. {
  288. new
  289. index = GetPlayerAnimationIndex(playerid);
  290. if ((1160 <= index <= 1163) || index == 1167 || index == 640)
  291. {
  292. return CB_GetVehicleInFrontOfPlayer(playerid) == vehicleid;
  293. }
  294. }
  295. return 0;
  296. }
  297. stock static Callback_IsDefined(const name[])
  298. {
  299. for (new i = 0; i < sizeof(g_sCallbackList); i ++)
  300. {
  301. if (!strcmp(g_sCallbackList[i], name) && g_bCallbackDefined[i])
  302. {
  303. return 1;
  304. }
  305. }
  306. return 0;
  307. }
  308. stock static Callback_Initialize()
  309. {
  310. for (new i = 0; i < sizeof(g_sCallbackList); i ++)
  311. {
  312. if (funcidx(g_sCallbackList[i]) != -1)
  313. {
  314. g_bCallbackDefined[i] = true;
  315. }
  316. }
  317. if (Callback_IsDefined("OnPlayerPause") || Callback_IsDefined("OnPlayerResume"))
  318. {
  319. SetTimer("Callback_TabCheck", 600, true);
  320. }
  321. }
  322. public OnPlayerDisconnect(playerid, reason)
  323. {
  324. if (BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbHolding))
  325. {
  326. KillTimer(g_aPlayerData[playerid][e_cbHoldingTimer]);
  327. }
  328. g_aPlayerTicks[playerid][e_cbUpdateTick] = 0;
  329. g_aPlayerTicks[playerid][e_cbTickCount] = 0;
  330. g_aPlayerTicks[playerid][e_cbBurnTick] = 0;
  331. g_aPlayerTicks[playerid][e_cbVendingTick] = 0;
  332. g_aPlayerTicks[playerid][e_cbShootTick] = 0;
  333. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_NONE;
  334. g_aPlayerData[playerid][e_cbLastWeapon] = 0;
  335. g_aPlayerData[playerid][e_cbLastAmmo] = 0;
  336. g_aPlayerData[playerid][e_cbFrames] = 0;
  337. g_aPlayerData[playerid][e_cbDrunkLevel] = 0;
  338. g_aPlayerData[playerid][e_cbTarget] = 0;
  339. g_aPlayerData[playerid][e_cbAnimation] = 0;
  340. g_aPlayerData[playerid][e_cbHoverColor] = 0;
  341. g_aPlayerData[playerid][e_cbPacket] = 0.0;
  342. g_aPlayerData[playerid][e_cbFlags] = e_cbPlayerFlags:0;
  343. for (new i = 0; i < 4; i ++)
  344. {
  345. g_aPlayerData[playerid][e_cbShotCounter][i] = 0;
  346. }
  347. #if defined CB_OnPlayerDisconnect
  348. return CB_OnPlayerDisconnect(playerid, reason);
  349. #else
  350. return 1;
  351. #endif
  352. }
  353. public OnFilterScriptInit()
  354. {
  355. Callback_Initialize();
  356. #if defined CB_OnFilterScriptInit
  357. return CB_OnFilterScriptInit();
  358. #else
  359. return 1;
  360. #endif
  361. }
  362. public OnGameModeInit()
  363. {
  364. Callback_Initialize();
  365. #if defined CB_OnGameModeInit
  366. return CB_OnGameModeInit();
  367. #else
  368. return 1;
  369. #endif
  370. }
  371. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  372. {
  373. if (Callback_IsDefined("OnPlayerFriendlyFire"))
  374. {
  375. new teamid = GetPlayerTeam(playerid);
  376. if ((teamid != NO_TEAM && hittype == BULLET_HIT_TYPE_PLAYER) && GetPlayerTeam(hitid) == teamid)
  377. {
  378. CallLocalFunction("OnPlayerFriendlyFire", "ddd", playerid, hitid, weaponid);
  379. }
  380. }
  381. if (Callback_IsDefined("OnPlayerEmptyWeapon"))
  382. {
  383. if (GetPlayerWeaponState(playerid) == WEAPONSTATE_LAST_BULLET && GetPlayerAmmo(playerid) == 1)
  384. {
  385. CallLocalFunction("OnPlayerEmptyWeapon", "dd", playerid, weaponid);
  386. }
  387. }
  388. if (Callback_IsDefined("OnPlayerAntiReload") && (WEAPON_COLT45 <= weaponid <= WEAPON_TEC9) && weaponid != WEAPON_SHOTGUN)
  389. {
  390. new
  391. clip = g_aMaximumClip[weaponid - WEAPON_COLT45],
  392. slot = g_aClipIndex[weaponid - WEAPON_COLT45];
  393. if (++ g_aPlayerData[playerid][e_cbShotCounter][slot] > clip && (g_aPlayerData[playerid][e_cbShotCounter][slot] - clip) >= 5)
  394. {
  395. CallLocalFunction("OnPlayerAntiReload", "dd", playerid, weaponid);
  396. g_aPlayerData[playerid][e_cbShotCounter][slot] = 0;
  397. }
  398. }
  399. if (Callback_IsDefined("OnPlayerActionChange"))
  400. {
  401. if (g_aPlayerData[playerid][e_cbAction] != PLAYER_ACTION_SHOOTING)
  402. {
  403. CallLocalFunction("OnPlayerActionChange", "ddd", playerid, g_aPlayerData[playerid][e_cbAction], PLAYER_ACTION_SHOOTING);
  404. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_SHOOTING;
  405. }
  406. g_aPlayerTicks[playerid][e_cbShootTick] = GetTickCount();
  407. }
  408. #if defined CB_OnPlayerWeaponShot
  409. return CB_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, fX, fY, fZ);
  410. #else
  411. return 1;
  412. #endif
  413. }
  414. public OnPlayerUpdate(playerid)
  415. {
  416. new
  417. weaponid = GetPlayerWeapon(playerid),
  418. level = GetPlayerDrunkLevel(playerid),
  419. Float:health
  420. ;
  421. if (Callback_IsDefined("OnPlayerActionChange"))
  422. {
  423. if (IsPlayerSkydiving(playerid) && g_aPlayerData[playerid][e_cbAction] != PLAYER_ACTION_SKYDIVING)
  424. {
  425. CallLocalFunction("OnPlayerActionChange", "ddd", playerid, g_aPlayerData[playerid][e_cbAction], PLAYER_ACTION_SKYDIVING);
  426. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_SKYDIVING;
  427. }
  428. else if (!IsPlayerSkydiving(playerid) && g_aPlayerData[playerid][e_cbAction] == PLAYER_ACTION_SKYDIVING)
  429. {
  430. CallLocalFunction("OnPlayerActionChange", "ddd", playerid, g_aPlayerData[playerid][e_cbAction], PLAYER_ACTION_NONE);
  431. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_SKYDIVING;
  432. }
  433. else if (IsPlayerSwimming(playerid) && g_aPlayerData[playerid][e_cbAction] != PLAYER_ACTION_SWIMMING)
  434. {
  435. CallLocalFunction("OnPlayerActionChange", "ddd", playerid, g_aPlayerData[playerid][e_cbAction], PLAYER_ACTION_SWIMMING);
  436. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_SWIMMING;
  437. }
  438. else if (!IsPlayerSwimming(playerid) && g_aPlayerData[playerid][e_cbAction] == PLAYER_ACTION_SWIMMING)
  439. {
  440. CallLocalFunction("OnPlayerActionChange", "ddd", playerid, g_aPlayerData[playerid][e_cbAction], PLAYER_ACTION_NONE);
  441. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_NONE;
  442. }
  443. else if (GetPlayerAnimationIndex(playerid) == 1195 && g_aPlayerData[playerid][e_cbAction] != PLAYER_ACTION_JUMPING)
  444. {
  445. CallLocalFunction("OnPlayerActionChange", "ddd", playerid, g_aPlayerData[playerid][e_cbAction], PLAYER_ACTION_JUMPING);
  446. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_JUMPING;
  447. }
  448. else if (GetPlayerAnimationIndex(playerid) != 1195 && g_aPlayerData[playerid][e_cbAction] == PLAYER_ACTION_JUMPING)
  449. {
  450. CallLocalFunction("OnPlayerActionChange", "ddd", playerid, g_aPlayerData[playerid][e_cbAction], PLAYER_ACTION_NONE);
  451. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_NONE;
  452. }
  453. else if (g_aPlayerData[playerid][e_cbAction] == PLAYER_ACTION_SHOOTING && (GetTickCount() - g_aPlayerTicks[playerid][e_cbShootTick]) > 1200)
  454. {
  455. CallLocalFunction("OnPlayerActionChange", "ddd", playerid, g_aPlayerData[playerid][e_cbAction], PLAYER_ACTION_NONE);
  456. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_NONE;
  457. }
  458. }
  459. if (Callback_IsDefined("OnPlayerBurning") && BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbBurning))
  460. {
  461. if ((GetTickCount() - g_aPlayerTicks[playerid][e_cbBurnTick]) >= 1500)
  462. {
  463. BitFlag_Unset(g_aPlayerData[playerid][e_cbFlags], e_cbBurning);
  464. CallLocalFunction("OnPlayerBurning", "dd", playerid, 0);
  465. }
  466. }
  467. if (GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  468. {
  469. if (Callback_IsDefined("OnPlayerTargetPlayer"))
  470. {
  471. if (!g_aPlayerData[playerid][e_cbTarget] && GetPlayerTargetPlayer(playerid) == INVALID_PLAYER_ID)
  472. {
  473. g_aPlayerData[playerid][e_cbTarget] = INVALID_PLAYER_ID;
  474. }
  475. else if (GetPlayerTargetPlayer(playerid) != g_aPlayerData[playerid][e_cbTarget])
  476. {
  477. CallLocalFunction("OnPlayerTargetPlayer", "ddd", playerid, g_aPlayerData[playerid][e_cbTarget], GetPlayerWeapon(playerid));
  478. g_aPlayerData[playerid][e_cbTarget] = GetPlayerTargetPlayer(playerid);
  479. }
  480. }
  481. if (Callback_IsDefined("OnPlayerReloadWeapon"))
  482. {
  483. if (!BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbReloading) && (WEAPON_COLT45 <= weaponid <= WEAPON_SNIPER) && GetPlayerWeaponState(playerid) == WEAPONSTATE_RELOADING)
  484. {
  485. BitFlag_Set(g_aPlayerData[playerid][e_cbFlags], e_cbReloading);
  486. CallLocalFunction("OnPlayerReloadWeapon", "ddd", playerid, weaponid, GetPlayerAmmo(playerid));
  487. }
  488. else if (GetPlayerWeaponState(playerid) != WEAPONSTATE_RELOADING)
  489. {
  490. BitFlag_Unset(g_aPlayerData[playerid][e_cbFlags], e_cbReloading);
  491. }
  492. }
  493. if (Callback_IsDefined("OnPlayerUseVending") && IsPlayerNearVending(playerid))
  494. {
  495. if (GetPlayerAnimationIndex(playerid) == 1660 && (GetTickCount() - g_aPlayerTicks[playerid][e_cbVendingTick]) > 3500)
  496. {
  497. CallLocalFunction("OnPlayerUseVending", "d", playerid);
  498. g_aPlayerTicks[playerid][e_cbVendingTick] = GetTickCount();
  499. }
  500. }
  501. }
  502. else if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  503. {
  504. if (Callback_IsDefined("OnPlayerCrashVehicle"))
  505. {
  506. new
  507. vehicleid = GetPlayerVehicleID(playerid);
  508. GetVehicleHealth(vehicleid, health);
  509. if (g_aVehicleData[vehicleid][e_vHealth] > health && floatabs(g_aVehicleData[vehicleid][e_vHealth] - health) >= POTENTIAL_CRASH_DAMAGE && floatabs(g_aVehicleData[vehicleid][e_vSpeed] - Callback_GetSpeed(vehicleid)) >= POTENTIAL_SPEED_DROP)
  510. {
  511. new
  512. panels,
  513. doors,
  514. lights,
  515. tires
  516. ;
  517. GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
  518. if (g_aVehicleData[vehicleid][e_vPanels] != panels || g_aVehicleData[vehicleid][e_vDoors] != doors || g_aVehicleData[vehicleid][e_vLights] != lights)
  519. {
  520. CallLocalFunction("OnPlayerCrashVehicle", "ddf", playerid, vehicleid, floatsub(g_aVehicleData[vehicleid][e_vHealth], health));
  521. }
  522. GetVehicleDamageStatus(vehicleid, g_aVehicleData[vehicleid][e_vPanels], g_aVehicleData[vehicleid][e_vDoors], g_aVehicleData[vehicleid][e_vLights], tires);
  523. }
  524. g_aVehicleData[vehicleid][e_vHealth] = health;
  525. g_aVehicleData[vehicleid][e_vSpeed] = Callback_GetSpeed(vehicleid);
  526. }
  527. }
  528. if (Callback_IsDefined("OnPlayerFPSChange"))
  529. {
  530. if (GetPlayerDrunkLevel(playerid) < 100)
  531. {
  532. SetPlayerDrunkLevel(playerid, 2000);
  533. }
  534. else if (g_aPlayerData[playerid][e_cbDrunkLevel] != level)
  535. {
  536. new
  537. amount = (g_aPlayerData[playerid][e_cbDrunkLevel] - level);
  538. if ((0 <= amount <= 200) && g_aPlayerData[playerid][e_cbFrames] != amount)
  539. {
  540. if (g_aPlayerData[playerid][e_cbFrames] < 0)
  541. {
  542. g_aPlayerData[playerid][e_cbFrames] = 0;
  543. }
  544. CallLocalFunction("OnPlayerFPSChange", "ddd", playerid, g_aPlayerData[playerid][e_cbFrames], amount);
  545. }
  546. g_aPlayerData[playerid][e_cbFrames] = amount;
  547. g_aPlayerData[playerid][e_cbDrunkLevel] = level;
  548. }
  549. }
  550. if (Callback_IsDefined("OnPlayerPacketLoss"))
  551. {
  552. new
  553. Float:packet = NetStats_PacketLossPercent(playerid);
  554. if (floatcmp(packet, 0.0) != 0 && floatcmp(packet, g_aPlayerData[playerid][e_cbPacket]) != 0)
  555. {
  556. CallLocalFunction("OnPlayerPacketLoss", "dff", playerid, g_aPlayerData[playerid][e_cbPacket], packet);
  557. g_aPlayerData[playerid][e_cbPacket] = packet;
  558. }
  559. }
  560. if (Callback_IsDefined("OnPlayerAnimationPlay"))
  561. {
  562. if (BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbAnimationSet) && g_aPlayerData[playerid][e_cbAnimation] != GetPlayerAnimationIndex(playerid))
  563. {
  564. new
  565. animname[32],
  566. animlib[32];
  567. BitFlag_Unset(g_aPlayerData[playerid][e_cbFlags], e_cbAnimationSet);
  568. GetAnimationName(g_aPlayerData[playerid][e_cbAnimation], animlib, sizeof(animlib), animname, sizeof(animname));
  569. CallLocalFunction("OnPlayerAnimationPlay", "dss", playerid, animlib, animname);
  570. }
  571. }
  572. if (Callback_IsDefined("OnPlayerUseCamera") || Callback_IsDefined("OnPlayerSprayAtVehicle"))
  573. {
  574. new
  575. ammo = GetPlayerAmmo(playerid);
  576. if (g_aPlayerData[playerid][e_cbLastAmmo] != ammo)
  577. {
  578. if (GetPlayerWeapon(playerid) == WEAPON_CAMERA && g_aPlayerData[playerid][e_cbLastAmmo] > ammo)
  579. {
  580. CallLocalFunction("OnPlayerUseCamera", "d", playerid);
  581. }
  582. else if (GetPlayerWeapon(playerid) == WEAPON_SPRAYCAN && g_aPlayerData[playerid][e_cbLastAmmo] > ammo)
  583. {
  584. new id = CB_GetVehicleInFrontOfPlayer(playerid);
  585. if (id != INVALID_VEHICLE_ID && IsPlayerSprayingVehicle(playerid, id))
  586. {
  587. CallLocalFunction("OnPlayerSprayAtVehicle", "dd", playerid, id);
  588. }
  589. }
  590. g_aPlayerData[playerid][e_cbLastAmmo] = ammo;
  591. }
  592. }
  593. if (Callback_IsDefined("OnPlayerAntiReload"))
  594. {
  595. if (g_aPlayerData[playerid][e_cbLastWeapon] != weaponid)
  596. {
  597. new
  598. lastgun = g_aPlayerData[playerid][e_cbLastWeapon];
  599. if ((WEAPON_COLT45 <= lastgun <= WEAPON_TEC9) && lastgun != WEAPON_SHOTGUN)
  600. {
  601. g_aPlayerData[playerid][e_cbShotCounter][g_aClipIndex[lastgun - WEAPON_COLT45]] = 0;
  602. }
  603. g_aPlayerData[playerid][e_cbLastWeapon] = weaponid;
  604. }
  605. else
  606. {
  607. if ((WEAPON_COLT45 <= weaponid <= WEAPON_TEC9) && weaponid != WEAPON_SHOTGUN && GetPlayerWeaponState(playerid) == WEAPONSTATE_RELOADING)
  608. {
  609. g_aPlayerData[playerid][e_cbShotCounter][g_aClipIndex[weaponid - WEAPON_COLT45]] = 0;
  610. }
  611. }
  612. }
  613. BitFlag_Set(g_aPlayerData[playerid][e_cbFlags], e_cbUpdate);
  614. g_aPlayerTicks[playerid][e_cbUpdateTick] = GetTickCount();
  615. #if defined CB_OnPlayerUpdate
  616. return CB_OnPlayerUpdate(playerid);
  617. #else
  618. return 1;
  619. #endif
  620. }
  621. public OnPlayerStateChange(playerid, newstate, oldstate)
  622. {
  623. new vehicleid = GetPlayerVehicleID(playerid);
  624. if (Callback_IsDefined("OnPlayerCrashVehicle"))
  625. {
  626. if (newstate == PLAYER_STATE_DRIVER)
  627. {
  628. GetVehicleHealth(vehicleid, g_aVehicleData[vehicleid][e_vHealth]);
  629. }
  630. }
  631. if (Callback_IsDefined("OnPlayerJackVehicle"))
  632. {
  633. if (newstate == PLAYER_STATE_DRIVER)
  634. {
  635. g_aPlayerData[playerid][e_cbLastVehicle] = vehicleid;
  636. }
  637. else if (newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER)
  638. {
  639. new
  640. driverid = Callback_GetDriver(g_aPlayerData[playerid][e_cbLastVehicle]);
  641. if (driverid != INVALID_PLAYER_ID)
  642. {
  643. CallLocalFunction("OnPlayerJackVehicle", "ddd", driverid, playerid, g_aPlayerData[playerid][e_cbLastVehicle]);
  644. }
  645. g_aPlayerData[playerid][e_cbLastVehicle] = INVALID_VEHICLE_ID;
  646. }
  647. }
  648. if (newstate == PLAYER_STATE_WASTED)
  649. {
  650. g_aPlayerData[playerid][e_cbAction] = PLAYER_ACTION_NONE;
  651. }
  652. #if defined CB_OnPlayerStateChange
  653. return CB_OnPlayerStateChange(playerid, newstate, oldstate);
  654. #else
  655. return 1;
  656. #endif
  657. }
  658. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  659. {
  660. new weaponid = GetPlayerWeapon(playerid);
  661. if (GetPlayerState(playerid) != PLAYER_STATE_SPECTATING && GetPlayerState(playerid) != PLAYER_STATE_SPAWNED && GetPlayerState(playerid) != PLAYER_STATE_WASTED)
  662. {
  663. if (Callback_IsDefined("OnPlayerHoldingKey"))
  664. {
  665. if (!BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbHolding))
  666. {
  667. BitFlag_Set(g_aPlayerData[playerid][e_cbFlags], e_cbHolding);
  668. g_aPlayerTicks[playerid][e_cbTickCount] = GetTickCount();
  669. g_aPlayerData[playerid][e_cbHoldingTimer] = SetTimerEx("Callback_HoldTimer", 200, true, "dd", playerid, newkeys);
  670. }
  671. }
  672. if (Callback_IsDefined("OnPlayerAiming"))
  673. {
  674. if (GetPlayerState(playerid) == PLAYER_STATE_ONFOOT && (WEAPON_COLT45 <= weaponid <= WEAPON_CAMERA) && weaponid != WEAPON_BOMB)
  675. {
  676. if (!BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbAiming) && (newkeys & KEY_HANDBRAKE) & KEY_HANDBRAKE)
  677. {
  678. BitFlag_Set(g_aPlayerData[playerid][e_cbFlags], e_cbAiming);
  679. CallLocalFunction("OnPlayerAiming", "ddd", playerid, weaponid, 1);
  680. }
  681. else if ((newkeys & KEY_HANDBRAKE) != KEY_HANDBRAKE && (oldkeys & KEY_HANDBRAKE) == KEY_HANDBRAKE)
  682. {
  683. BitFlag_Unset(g_aPlayerData[playerid][e_cbFlags], e_cbAiming);
  684. CallLocalFunction("OnPlayerAiming", "ddd", playerid, weaponid, 0);
  685. }
  686. }
  687. }
  688. }
  689. #if defined CB_OnPlayerKeyStateChange
  690. return CB_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  691. #else
  692. return 1;
  693. #endif
  694. }
  695. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  696. {
  697. if (Callback_IsDefined("OnPlayerHideCursor"))
  698. {
  699. if (clickedid == Text:INVALID_TEXT_DRAW && BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbSelection))
  700. {
  701. BitFlag_Unset(g_aPlayerData[playerid][e_cbFlags], e_cbSelection);
  702. CallLocalFunction("OnPlayerHideCursor", "dd", playerid, g_aPlayerData[playerid][e_cbHoverColor]);
  703. }
  704. }
  705. #if defined CB_OnPlayerClickTextDraw
  706. return CB_OnPlayerClickTextDraw(playerid, clickedid);
  707. #else
  708. return 0;
  709. #endif
  710. }
  711. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  712. {
  713. if (Callback_IsDefined("OnPlayerFall") && weaponid == WEAPON_COLLISION)
  714. {
  715. if (bodypart == 3 && issuerid == INVALID_PLAYER_ID)
  716. {
  717. new Float:health;
  718. GetPlayerHealth(playerid, health);
  719. if (amount >= 10.0 && health > amount)
  720. {
  721. CallLocalFunction("OnPlayerFall", "df", playerid, amount);
  722. }
  723. }
  724. }
  725. if (Callback_IsDefined("OnPlayerRamPlayer") && weaponid == WEAPON_VEHICLE && issuerid != INVALID_PLAYER_ID)
  726. {
  727. CallLocalFunction("OnPlayerRamPlayer", "dddf", playerid, issuerid, GetPlayerVehicleID(issuerid), amount);
  728. }
  729. if (Callback_IsDefined("OnPlayerBurning") && weaponid == WEAPON_FLAMETHROWER)
  730. {
  731. if (!BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbBurning))
  732. {
  733. BitFlag_Set(g_aPlayerData[playerid][e_cbFlags], e_cbBurning);
  734. CallLocalFunction("OnPlayerBurning", "dd", playerid, 1);
  735. }
  736. g_aPlayerTicks[playerid][e_cbBurnTick] = GetTickCount();
  737. }
  738. #if defined CB_OnPlayerTakeDamage
  739. return CB_OnPlayerTakeDamage(playerid, issuerid, amount, weaponid, bodypart);
  740. #else
  741. return 1;
  742. #endif
  743. }
  744. forward Callback_Animation(playerid);
  745. public Callback_Animation(playerid)
  746. {
  747. g_aPlayerData[playerid][e_cbAnimation] = GetPlayerAnimationIndex(playerid);
  748. BitFlag_Set(g_aPlayerData[playerid][e_cbFlags], e_cbAnimationSet);
  749. }
  750. forward Callback_HoldTimer(playerid, key);
  751. public Callback_HoldTimer(playerid, key)
  752. {
  753. new keys, ud, lr;
  754. GetPlayerKeys(playerid, keys, ud, lr);
  755. if (keys & key)
  756. {
  757. if (!BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbPressed))
  758. {
  759. BitFlag_Set(g_aPlayerData[playerid][e_cbFlags], e_cbPressed);
  760. }
  761. CallLocalFunction("OnPlayerHoldingKey", "dd", playerid, key);
  762. }
  763. else
  764. {
  765. if (Callback_IsDefined("OnPlayerReleaseKey") && BitFlag_Status(g_aPlayerData[playerid][e_cbFlags], e_cbPressed))
  766. {
  767. CallLocalFunction("OnPlayerReleaseKey", "ddd", playerid, key, (GetTickCount() - g_aPlayerTicks[playerid][e_cbTickCount]));
  768. }
  769. KillTimer(g_aPlayerData[playerid][e_cbHoldingTimer]);
  770. BitFlag_Unset(g_aPlayerData[playerid][e_cbFlags], e_cbPressed);
  771. BitFlag_Unset(g_aPlayerData[playerid][e_cbFlags], e_cbHolding);
  772. }
  773. }
  774. forward Callback_TabCheck();
  775. public Callback_TabCheck()
  776. {
  777. for (new i = 0, l = GetMaxPlayers(); i != l; i ++)
  778. {
  779. switch (GetPlayerState(i))
  780. {
  781. case PLAYER_STATE_ONFOOT, PLAYER_STATE_DRIVER, PLAYER_STATE_PASSENGER:
  782. {
  783. if (BitFlag_Status(g_aPlayerData[i][e_cbFlags], e_cbUpdate))
  784. {
  785. if (Callback_IsDefined("OnPlayerResume") && BitFlag_Status(g_aPlayerData[i][e_cbFlags], e_cbPaused))
  786. {
  787. CallLocalFunction("OnPlayerResume", "dd", i, GetTickCount() - g_aPlayerTicks[i][e_cbTickCount]);
  788. }
  789. BitFlag_Unset(g_aPlayerData[i][e_cbFlags], e_cbUpdate);
  790. BitFlag_Unset(g_aPlayerData[i][e_cbFlags], e_cbPaused);
  791. }
  792. else if (Callback_IsDefined("OnPlayerPause"))
  793. {
  794. if (!BitFlag_Status(g_aPlayerData[i][e_cbFlags], e_cbPaused) && (GetTickCount() - g_aPlayerTicks[i][e_cbUpdateTick]) >= 4000)
  795. {
  796. g_aPlayerTicks[i][e_cbTickCount] = GetTickCount();
  797. BitFlag_Set(g_aPlayerData[i][e_cbFlags], e_cbPaused);
  798. CallLocalFunction("OnPlayerPause", "d", i);
  799. }
  800. }
  801. }
  802. }
  803. }
  804. }
  805. #if defined _ALS_ApplyAnimation
  806. #undef ApplyAnimation
  807. #else
  808. #define _ALS_ApplyAnimation
  809. #endif
  810. #if defined _ALS_SelectTextDraw
  811. #undef SelectTextDraw
  812. #else
  813. #define _ALS_SelectTextDraw
  814. #endif
  815. #if defined _ALS_CancelSelectTextDraw
  816. #undef CancelSelectTextDraw
  817. #else
  818. #define _ALS_CancelSelectTextDraw
  819. #endif
  820. #if defined _ALS_OnFilterScriptInit
  821. #undef OnFilterScriptInit
  822. #else
  823. #define _ALS_OnFilterScriptInit
  824. #endif
  825. #if defined _ALS_OnGameModeInit
  826. #undef OnGameModeInit
  827. #else
  828. #define _ALS_OnGameModeInit
  829. #endif
  830. #if defined _ALS_OnPlayerDisconnect
  831. #undef OnPlayerDisconnect
  832. #else
  833. #define _ALS_OnPlayerDisconnect
  834. #endif
  835. #if defined _ALS_OnPlayerStateChange
  836. #undef OnPlayerStateChange
  837. #else
  838. #define _ALS_OnPlayerStateChange
  839. #endif
  840. #if defined _ALS_OnPlayerKeyStateChange
  841. #undef OnPlayerKeyStateChange
  842. #else
  843. #define _ALS_OnPlayerKeyStateChange
  844. #endif
  845. #if defined _ALS_OnPlayerUpdate
  846. #undef OnPlayerUpdate
  847. #else
  848. #define _ALS_OnPlayerUpdate
  849. #endif
  850. #if defined _ALS_OnPlayerWeaponShot
  851. #undef OnPlayerWeaponShot
  852. #else
  853. #define _ALS_OnPlayerWeaponShot
  854. #endif
  855. #if defined _ALS_OnPlayerClickTextDraw
  856. #undef OnPlayerClickTextDraw
  857. #else
  858. #define _ALS_OnPlayerClickTextDraw
  859. #endif
  860. #if defined _ALS_OnPlayerTakeDamage
  861. #undef OnPlayerTakeDamage
  862. #else
  863. #define _ALS_OnPlayerTakeDamage
  864. #endif
  865. #define ApplyAnimation CB_ApplyAnimation
  866. #define SelectTextDraw CB_SelectTextDraw
  867. #define CancelSelectTextDraw CB_CancelSelectTextDraw
  868. #define OnFilterScriptInit CB_OnFilterScriptInit
  869. #define OnGameModeInit CB_OnGameModeInit
  870. #define OnPlayerDisconnect CB_OnPlayerDisconnect
  871. #define OnPlayerUpdate CB_OnPlayerUpdate
  872. #define OnPlayerStateChange CB_OnPlayerStateChange
  873. #define OnPlayerKeyStateChange CB_OnPlayerKeyStateChange
  874. #define OnPlayerWeaponShot CB_OnPlayerWeaponShot
  875. #define OnPlayerClickTextDraw CB_OnPlayerClickTextDraw
  876. #define OnPlayerTakeDamage CB_OnPlayerTakeDamage
  877. #if defined CB_OnPlayerUpdate
  878. forward CB_OnPlayerUpdate(playerid);
  879. #endif
  880. #if defined CB_OnFilterScriptInit
  881. forward CB_OnFilterScriptInit();
  882. #endif
  883. #if defined CB_OnGameModeInit
  884. forward CB_OnGameModeInit();
  885. #endif
  886. #if defined CB_OnPlayerDisconnect
  887. forward CB_OnPlayerDisconnect(playerid, reason);
  888. #endif
  889. #if defined CB_OnPlayerStateChange
  890. forward CB_OnPlayerStateChange(playerid, newstate, oldstate);
  891. #endif
  892. #if defined CB_OnPlayerKeyStateChange
  893. forward CB_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  894. #endif
  895. #if defined CB_OnPlayerWeaponShot
  896. forward CB_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  897. #endif
  898. #if defined CB_OnPlayerClickTextDraw
  899. forward CB_OnPlayerClickTextDraw(playerid, Text:clickedid);
  900. #endif
  901. #if defined CB_OnPlayerTakeDamage
  902. forward CB_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
  903. #endif