Guest User

fixes.inc

a guest
Jun 19th, 2019
515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 372.35 KB | None | 0 0
  1. /*
  2. ========================================================
  3. fixes.inc - Community patch for buggy SA:MP functions.
  4. ========================================================
  5. *//**
  6. <!--
  7. <transition target[^/]+/>
  8.  
  9. :::::::: README ::::::::
  10.  
  11. To read the generated XML output, copy `pawndoc.xsl` to `pawno/xml/`.
  12.  
  13. This information goes very close to the top of the generated XML documentation
  14. (because of include dependency orders), but doesn't appear in the visual output.
  15.  
  16. There is a bug in the compiler related to outputting documentation on state
  17. transitions (<a href="https://github.com/Zeex/pawn/issues/184" />). So after
  18. generation of the XML file, you should clean it up with the following RegEx
  19. replacement:
  20.  
  21. Search: <transition target[^/]+/>
  22. Replace: (nothing)
  23.  
  24. This works 99% of the time, though you may get one where the corrupted target
  25. includes the character `/`, in which case you should manually delete them. Note
  26. that YSI now includes manual documentation for transitions, but these all
  27. include the parameter `keep="true"`, which exists simply to not match that
  28. RegEx. I also put the search at the top of this block so it is easier to find
  29. in the output code.
  30. -->
  31. *//**
  32. * <library name="fixes.inc"
  33. * description="Community patches for buggy SA:MP functions.">
  34. *
  35. * <section>
  36. * Introduction
  37. * </section>
  38. *
  39. * <p>SA:MP is beta software written by a small team in their spare time, thus
  40. * it has bugs (as does all software). Some of these have been known for a long
  41. * time but are low priority due to their minor effects, others go undiscovered
  42. * for a long time. Many of these bugs have solutions which can be implemented
  43. * in PAWN (and this may be simpler than implementing them in the SA:MP source
  44. * code). This include aims to collect fixes for as many of these bugs as
  45. * possible from the community (i.e. anyone who has a fix) together in to one
  46. * easy to use place for everyone's benefit.</p>
  47. *
  48. * <section>
  49. * Use
  50. * </section>
  51. *
  52. * <p>To use this, simply include it after the default SA:MP functions, but
  53. * before third party includes:</p>
  54. *
  55. * <code>
  56. * #include &lt;a_samp&gt; <br />
  57. * // Any default re-definitions should go here. <br />
  58. * //#undef MAX_PLAYERS <br />
  59. * //#define MAX_PLAYERS 10 <br />
  60. * #include &lt;fixes&gt; <br />
  61. * #include &lt;other&gt;
  62. * </code>
  63. *
  64. * <p>To disable any fix for whatever reason simply do:</p>
  65. *
  66. * <code>#define FIX_&lt;name&gt; 0</code>
  67. *
  68. * <p>For example, to disable all the file.inc fixes if you always correctly
  69. * check the file handle, do:</p>
  70. *
  71. * <code>
  72. * #include &lt;a_samp&gt; <br />
  73. * #define FIX_file_inc 0 <br />
  74. * #include &lt;fixes&gt; <br />
  75. * #include &lt;other&gt;
  76. * </code>
  77. *
  78. * <p>All the names of the fixes are single words, and are all listed with their
  79. * fix descriptions below.</p>
  80. *
  81. * <p>If you only have one script running on your server (i.e. no
  82. * FilterScripts), you can use this define to improve the fixes.inc code:</p>
  83. *
  84. * <code>
  85. * #include &lt;a_samp&gt; <br />
  86. * #define FIXES_Single 1 <br />
  87. * #include &lt;fixes&gt; <br />
  88. * #include &lt;other&gt;
  89. * </code>
  90. *
  91. * <section>
  92. * Fixes
  93. * </section>
  94. *
  95. * <fixeslist>
  96. * <fix name="GetPlayerColor">
  97. * <problem>
  98. * Returns "0" if "SetPlayerColor" has never been called.
  99. * </problem>
  100. * <solution>
  101. * Call "SetPlayerColor" in "OnPlayerConnect".
  102. * </solution>
  103. * <see>OnPlayerConnect</see>
  104. * <author >KoczkaHUN</author>
  105. * </fix>
  106. *
  107. * <fix name="FILTERSCRIPT">
  108. * <problem>
  109. * Despite the fact that is in every new script, many people dont'
  110. * define "FILTERSCRIPT" where appropriate.
  111. * </problem>
  112. * <solution>
  113. * Provide an "IS_FILTERSCRIPT" variable (note the naming to
  114. * match the original macro).
  115. * </solution>
  116. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  117. * <see>OnFilterScriptInit</see>
  118. * <see>OnGameModeInit</see>
  119. * </fix>
  120. *
  121. * <fix name="SpawnPlayer">
  122. * <problem>
  123. * Kills the player if they are in a vehicle.
  124. * </problem>
  125. * <solution>
  126. * Remove the from the vehicle.
  127. * </solution>
  128. * <see>FIXES_SpawnPlayer</see>
  129. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  130. * </fix>
  131. *
  132. * <fix name="SetPlayerName">
  133. * <problem>
  134. * Using "SetPlayerName" when the new name only differs from the old
  135. * name in case does not alter the name at all.
  136. * </problem>
  137. * <solution>
  138. * Change their name twice - once to "_FIXES TEMP NAME" and then
  139. * to the actual required name.
  140. * </solution>
  141. * <see>OnPlayerConnect</see>
  142. * <see>FIXES_SetPlayerName</see>
  143. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  144. * <author href="https://github.com/oscar-broman/" >Slice</author>
  145. * <author href="https://github.com/simonepri/" >simonepri</author>
  146. * </fix>
  147. *
  148. * <fix name="GetPlayerSkin">
  149. * <problem>
  150. * Returns the new skin after "SetSpawnInfo" is called but before the
  151. * player actually respawns to get the new skin.
  152. * </problem>
  153. * <solution>
  154. * Record the skin in "OnPlayerSpawn" and always return that one.
  155. *
  156. * </solution>
  157. * <see>OnPlayerSpawn</see>
  158. * <see>FIXES_GetPlayerSkin</see>
  159. * <see>FIXES_SetPlayerSkin</see>
  160. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  161. * </fix>
  162. *
  163. * <fix name="GetWeaponName" fixed="0.3.7">
  164. * <problem>
  165. * Returns nothing for 18, 44, and 45.
  166. * </problem>
  167. * <solution>
  168. * Return the correct names (<c>Molotov Cocktail</c>, <c>Thermal
  169. * Goggles</c>, and <c>Night vision Goggles</c>).
  170. * </solution>
  171. * <see>FIXES_GetWeaponName</see>
  172. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  173. * </fix>
  174. *
  175. * <fix name="SetPlayerWorldBounds">
  176. * <problem>
  177. * Aiming can bypass the edge.
  178. * </problem>
  179. * <solution>
  180. * Check for the player leaving the area and reset them to their last
  181. * good position if they leave the area (aiming or not).
  182. * </solution>
  183. * <see>OnPlayerUpdate</see>
  184. * <see>FIXES_SetPlayerWorldBounds</see>
  185. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  186. * </fix>
  187. *
  188. * <fix name="TogglePlayerControllable">
  189. * <problem>
  190. * Other players see you moving on the spot.
  191. * </problem>
  192. * <solution>
  193. * Return 0 in OnPlayerUpdate.
  194. * </solution>
  195. * <see>FIXES_TogglePlayerControllable</see>
  196. * <see>OnPlayerUpdate</see>
  197. * <author href="https://github.com/oscar-broman/" >Slice</author>
  198. * <post href="http://forum.sa-mp.com/showpost.php?p=876854" />
  199. * </fix>
  200. *
  201. * <fix name="HydraSniper">
  202. * <problem>
  203. * Entering military aircraft with a sniper rifle messes up views.
  204. * </problem>
  205. * <solution>
  206. * Set their armed weapon to fists.
  207. * </solution>
  208. * <see>OnPlayerStateChange</see>
  209. * <see>FIXES_GivePlayerWeapon</see>
  210. * <see>FIXES_SetPlayerArmedWeapon</see>
  211. * <author >funky1234</author>
  212. * <post href="http://forum.sa-mp.com/showpost.php?p=965644" />
  213. * </fix>
  214. *
  215. * <fix name="IsPlayerInCheckpoint">
  216. * <problem>
  217. * Function returns an undefined value if it is called before any other
  218. * checkpoint functions are called to initialise the value.
  219. * </problem>
  220. * <solution>
  221. * Call "DisablePlayerCheckpoint" when they connect.
  222. * </solution>
  223. * <see>OnPlayerConnect</see>
  224. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  225. * </fix>
  226. *
  227. * <fix name="IsPlayerInRaceCheckpoint">
  228. * <problem>
  229. * Function returns an undefined value if it is called before any other
  230. * race checkpoint functions are called to initialise the value.
  231. * </problem>
  232. * <solution>
  233. * Call "DisablePlayerRaceCheckpoint" when they connect.
  234. * </solution>
  235. * <see>OnPlayerConnect</see>
  236. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  237. * </fix>
  238. *
  239. * <fix name="GetPlayerWeapon">
  240. * <problem>
  241. * Returns the old value after entering in a vehicle.
  242. * </problem>
  243. * <solution>
  244. * If "SetPlayerArmedWeapon" and other similar functions is called in a
  245. * vehicle, store the new value and return that instead.
  246. * </solution>
  247. * <see>OnPlayerStateChange</see>
  248. * <see>FIXES_SetPlayerArmedWeapon</see>
  249. * <see>FIXES_GetPlayerWeapon</see>
  250. * <see>FIXES_GivePlayerWeapon</see>
  251. * <see>FIXES_ResetPlayerWeapons</see>
  252. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  253. * <author href="https://github.com/ronixtey/" >ronixtey</author>
  254. * </fix>
  255. *
  256. * <fix name="PutPlayerInVehicle">
  257. * <problem>
  258. * If this is used on a passenger the driver of their old vehicle
  259. * doesn't see them in their new vehicle.
  260. * </problem>
  261. * <solution>
  262. * Remove them from the vehicle first.
  263. * </solution>
  264. * <see>OnPlayerStateChange</see>
  265. * <see>FIXES_PutPlayerInVehicle</see>
  266. * <author >leong124</author>
  267. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  268. * <post href="http://forum.sa-mp.com/showpost.php?p=1265965" />
  269. * </fix>
  270. *
  271. * <fix name="KEY_AIM">
  272. * <problem>
  273. * "KEY_AIM" isn't defined by default.
  274. * </problem>
  275. * <solution>
  276. * Define it.
  277. * </solution>
  278. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  279. * </fix>
  280. *
  281. * <fix name="SetPlayerCheckpoint">
  282. * <problem>
  283. * If a checkpoint is already set it will use the size of that
  284. * checkpoint instead of the new one.
  285. * </problem>
  286. * <solution>
  287. * Call "DisablePlayerCheckpoint" before setting the checkpoint.
  288. * </solution>
  289. * <see>FIXES_SetPlayerCheckpoint</see>
  290. * <author href="https://github.com/ziggi/" >ziggi</author>
  291. * </fix>
  292. *
  293. * <fix name="SetPlayerRaceCheckpoint">
  294. * <problem>
  295. * If a checkpoint is already set it will use the size of that
  296. * checkpoint instead of the new one.
  297. * </problem>
  298. * <solution>
  299. * Call "DisablePlayerRaceCheckpoint" before setting the checkpoint.
  300. * </solution>
  301. * <see>FIXES_SetPlayerRaceCheckpoint</see>
  302. * <author href="https://github.com/ziggi/" >ziggi</author>
  303. * </fix>
  304. *
  305. * <fix name="TextDrawCreate">
  306. * <problem>
  307. * Crashes on a blank string.
  308. * </problem>
  309. * <solution>
  310. * Intercept blank strings.
  311. * </solution>
  312. * <see>FIXES_TextDrawCreate</see>
  313. * <author >wups</author>
  314. * </fix>
  315. *
  316. * <fix name="TextDrawCreate_2">
  317. * <problem>
  318. * If the last character in the text is a space (" "), the text will all
  319. * be blank.
  320. * </problem>
  321. * <solution>
  322. * Remove space characters from the end of the string.
  323. * </solution>
  324. * <see>FIXES_TextDrawCreate</see>
  325. * <author href="https://github.com/ziggi/" >ziggi</author>
  326. * <post href="https://github.com/Open-GTO/sa-mp-fixes/issues/55" />
  327. * </fix>
  328. *
  329. * <fix name="TextDrawSetString">
  330. * <problem>
  331. * Crashes on a blank string and size greater than 1024.
  332. * </problem>
  333. * <solution>
  334. * Intercept blank strings and truncate long strings.
  335. * </solution>
  336. * <see>FIXES_TextDrawSetString</see>
  337. * <author >TomTrox</author>
  338. * </fix>
  339. *
  340. * <fix name="TextDrawSetString_2">
  341. * <problem>
  342. * If the last character in the text is a space (" "), the text will all
  343. * be blank.
  344. * </problem>
  345. * <solution>
  346. * Remove space characters from the end of the string.
  347. * </solution>
  348. * <see>FIXES_TextDrawSetString</see>
  349. * <author href="https://github.com/ziggi/" >ziggi</author>
  350. * <post href="https://github.com/Open-GTO/sa-mp-fixes/issues/55" />
  351. * </fix>
  352. *
  353. * <fix name="CreatePlayerTextDraw">
  354. * <problem>
  355. * Crashes on a blank string.
  356. * </problem>
  357. * <solution>
  358. * Intercept blank strings.
  359. * </solution>
  360. * <see>FIXES_CreatePlayerTextDraw</see>
  361. * <author >wups</author>
  362. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  363. * </fix>
  364. *
  365. * <fix name="CreatePlayerTextDraw_2">
  366. * <problem>
  367. * If the last character in the text is a space (" "), the text will all
  368. * be blank.
  369. * </problem>
  370. * <solution>
  371. * Remove space characters from the end of the string.
  372. * </solution>
  373. * <see>FIXES_CreatePlayerTextDraw</see>
  374. * <author href="https://github.com/ziggi/" >ziggi</author>
  375. * <post href="https://github.com/Open-GTO/sa-mp-fixes/issues/55" />
  376. * </fix>
  377. *
  378. * <fix name="PlayerTextDrawSetString">
  379. * <problem>
  380. * Crashes on a blank string and size greater than 1024.
  381. * </problem>
  382. * <solution>
  383. * Intercept blank strings and truncate long strings.
  384. * </solution>
  385. * <see>FIXES_PlayerTextDrawSetString</see>
  386. * <author >TomTrox</author>
  387. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  388. * </fix>
  389. *
  390. * <fix name="PlayerTextDrawSetString_2">
  391. * <problem>
  392. * If the last character in the text is a space (" "), the text will all
  393. * be blank.
  394. * </problem>
  395. * <solution>
  396. * Remove space characters from the end of the string.
  397. * </solution>
  398. * <see>FIXES_PlayerTextDrawSetString</see>
  399. * <author href="https://github.com/ziggi/" >ziggi</author>
  400. * <post href="https://github.com/Open-GTO/sa-mp-fixes/issues/55" />
  401. * </fix>
  402. *
  403. * <fix name="AllowInteriorWeapons">
  404. * <problem>
  405. * Does nothing.
  406. * </problem>
  407. * <solution>
  408. * Set the player's weapon to fists in an interior.
  409. * </solution>
  410. * <see>FIXES_AllowInteriorWeapons</see>
  411. * <see>OnGameModeInit</see>
  412. * <see>OnPlayerUpdate</see>
  413. * <author >KoczkaHUN</author>
  414. * </fix>
  415. *
  416. * <fix name="OnPlayerEnterVehicle">
  417. * <problem>
  418. * Crashes other players when people enter an invalid seat.
  419. * </problem>
  420. * <solution>
  421. * Desync the people with invalid seats.
  422. * </solution>
  423. * <see>OnPlayerStateChange</see>
  424. * <see>OnPlayerUpdate</see>
  425. * <author >RyDeR`</author>
  426. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  427. * <author href="https://github.com/NexiusTailer">NexiusTailer</author>
  428. * <post href="http://forum.sa-mp.com/showpost.php?p=1410296" />
  429. * </fix>
  430. *
  431. * <fix name="OnPlayerEnterVehicle_2">
  432. * <problem>
  433. * Crashes the server when hacks enter an invalid vehicle.
  434. * </problem>
  435. * <solution>
  436. * Desync the people with invalid vehicles.
  437. * </solution>
  438. * <see>OnPlayerEnterVehicle</see>
  439. * <author >im</author>
  440. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  441. * </fix>
  442. *
  443. * <fix name="OnPlayerEnterVehicle_3">
  444. * <problem>
  445. * No player animation when trying to enter the driver door of a locked
  446. * vehicle
  447. * </problem>
  448. * <solution>
  449. * Leave the door unlocked and activate an animation when the player
  450. * attemps to enter a 'locked' vehicle.
  451. * </solution>
  452. * <see>OnPlayerEnterVehicle</see>
  453. * <author href="https://github.com/ziggi" >ziggi</author>
  454. * <author href="https://github.com/rt-2" >rt-2</author>
  455. * <post href="http://forum.sa-mp.com/showthread.php?t=560019" />
  456. * </fix>
  457. *
  458. * <fix name="AllowTeleport">
  459. * <problem>
  460. * 0.3dRC9 removed "AllowPlayerTeleport" and "AllowAdminTeleport" in
  461. * favour of "OnPlayerClickMap". Some scripts used the old code and.
  462. * </problem>
  463. * <solution>
  464. * Teleport the player in "OnPlayerClickMap".
  465. * </solution>
  466. * <see>OnPlayerClickMap</see>
  467. * <see>FIXES_AllowPlayerTeleport</see>
  468. * <see>FIXES_AllowAdminTeleport</see>
  469. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  470. * </fix>
  471. *
  472. * <fix name="SetPlayerSpecialAction">
  473. * <problem>
  474. * Removing jetpacks from players by setting their special action to 0
  475. * causes the sound to stay until death.
  476. * </problem>
  477. * <solution>
  478. * Call "ClearAnimations" before "SetPlayerSpecialAction".
  479. * </solution>
  480. * <see>FIXES_SetPlayerSpecialAction</see>
  481. * <author >MP2</author>
  482. * </fix>
  483. *
  484. * <fix name="OnDialogResponse" fixed="0.3e RC6">
  485. * <problem>
  486. * Cheaters can spoof the dialogid they are using to respond to ones
  487. * they can't actually see.
  488. * </problem>
  489. * <solution>
  490. * Store the displayed dialogid and use that instead.
  491. * </solution>
  492. * <see>FIXES_OnDialogResponse</see>
  493. * <see>FIXES_ShowPlayerDialog</see>
  494. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  495. * </fix>
  496. *
  497. * <fix name="GetPlayerDialog" disabled="true">
  498. * <problem>
  499. * This function doesn't exist. Fixed for hidden dialogs.
  500. * </problem>
  501. * <solution>
  502. * Add it.
  503. * </solution>
  504. * <see>FIXES_GetPlayerDialog</see>
  505. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  506. * <author href="https://github.com/simonepri/" >simonepri</author>
  507. * </fix>
  508. *
  509. * <fix name="PlayerDialogResponse">
  510. * <problem>
  511. * A player's dialog doesn't hide when the gamemode restarts, causing
  512. * the server to print "Warning: PlayerDialogResponse PlayerId: 0
  513. * dialog ID doesn't match last sent dialog ID".
  514. * </problem>
  515. * <solution>
  516. * Hide it.
  517. * </solution>
  518. * <see>OnPlayerConnect</see>
  519. * <see>OnGameModeExit</see>
  520. * <author href="https://github.com/simonepri/" >simonepri</author>
  521. * </fix>
  522. *
  523. * <fix name="SetSpawnInfo">
  524. * <problem>
  525. * Kicks the player if "SpawnPlayer" is called before "SetSpawnInfo".
  526. * </problem>
  527. * <solution>
  528. * Call "SetSpawnInfo" at least once.
  529. * </solution>
  530. * <see>OnPlayerConnect</see>
  531. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  532. * </fix>
  533. *
  534. * <fix name="SetSpawnInfo_2">
  535. * <problem>
  536. * Does not set the correct team after spawn.
  537. * </problem>
  538. * <solution>
  539. * Call "SetPlayerTeam" when they spawn.
  540. * </solution>
  541. * <see>OnPlayerSpawn</see>
  542. * <author href="http://forum.sa-mp.com/member.php?u=24012" >NaS</author>
  543. * <post href="http://forum.sa-mp.com/showpost.php?p=3994248" />
  544. * </fix>
  545. *
  546. * <fix name="SetPlayerSkin">
  547. * <problem>
  548. * Breaks sitting on bikes.
  549. * </problem>
  550. * <solution>
  551. * Put them back in the vehicle after setting their skin.
  552. * </solution>
  553. * <see>FIXES_SetPlayerSkin</see>
  554. * <author >CyNiC</author>
  555. * <post href="http://forum.sa-mp.com/showpost.php?p=1756094" />
  556. * </fix>
  557. *
  558. * <fix name="HideMenuForPlayer">
  559. * <problem>
  560. * Crashes when passed an invalid menu ID.
  561. * </problem>
  562. * <solution>
  563. * Don't hide it when passed an invalid menu.
  564. * </solution>
  565. * <see>FIXES_HideMenuForPlayer</see>
  566. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  567. * <post href="http://forum.sa-mp.com/showpost.php?p=1787297" />
  568. * </fix>
  569. *
  570. * <fix name="valstr">
  571. * <problem>
  572. * Crashes on large numbers.
  573. * </problem>
  574. * <solution>
  575. * Use "format" instead.
  576. * </solution>
  577. * <see>FIXES_valstr</see>
  578. * <author href="https://github.com/oscar-broman/" >Slice</author>
  579. * </fix>
  580. *
  581. * <fix name="fclose">
  582. * <problem>
  583. * Crashes on an invalid handle.
  584. * </problem>
  585. * <solution>
  586. * Check for an invalid handle.
  587. * </solution>
  588. * <see>FIXES_fclose</see>
  589. * <author href="https://github.com/oscar-broman/" >Slice</author>
  590. * </fix>
  591. *
  592. * <fix name="fwrite">
  593. * <problem>
  594. * Crashes on an invalid handle.
  595. * </problem>
  596. * <solution>
  597. * Check for an invalid handle.
  598. * </solution>
  599. * <see>FIXES_fwrite</see>
  600. * <author href="https://github.com/oscar-broman/" >Slice</author>
  601. * </fix>
  602. *
  603. * <fix name="fread">
  604. * <problem>
  605. * Crashes on an invalid handle.
  606. * </problem>
  607. * <solution>
  608. * Check for an invalid handle.
  609. * </solution>
  610. * <see>FIXES_fread</see>
  611. * <author href="https://github.com/oscar-broman/" >Slice</author>
  612. * </fix>
  613. *
  614. * <fix name="fputchar">
  615. * <problem>
  616. * Crashes on an invalid handle.
  617. * </problem>
  618. * <solution>
  619. * Check for an invalid handle.
  620. * </solution>
  621. * <see>FIXES_fputchar</see>
  622. * <author href="https://github.com/oscar-broman/" >Slice</author>
  623. * </fix>
  624. *
  625. * <fix name="fgetchar">
  626. * <problem>
  627. * Crashes on an invalid handle.
  628. * </problem>
  629. * <solution>
  630. * Check for an invalid handle.
  631. * </solution>
  632. * <see>FIXES_fgetchar</see>
  633. * <author href="https://github.com/oscar-broman/" >Slice</author>
  634. * </fix>
  635. *
  636. * <fix name="fblockwrite">
  637. * <problem>
  638. * Crashes on an invalid handle.
  639. * </problem>
  640. * <solution>
  641. * Check for an invalid handle.
  642. * </solution>
  643. * <see>FIXES_fblockwrite</see>
  644. * <author href="https://github.com/oscar-broman/" >Slice</author>
  645. * </fix>
  646. *
  647. * <fix name="fblockread">
  648. * <problem>
  649. * Crashes on an invalid handle.
  650. * </problem>
  651. * <solution>
  652. * Check for an invalid handle.
  653. * </solution>
  654. * <see>FIXES_fblockread</see>
  655. * <author href="https://github.com/oscar-broman/" >Slice</author>
  656. * </fix>
  657. *
  658. * <fix name="fseek">
  659. * <problem>
  660. * Crashes on an invalid handle.
  661. * </problem>
  662. * <solution>
  663. * Check for an invalid handle.
  664. * </solution>
  665. * <see>FIXES_fseek</see>
  666. * <author href="https://github.com/oscar-broman/" >Slice</author>
  667. * </fix>
  668. *
  669. * <fix name="flength">
  670. * <problem>
  671. * Crashes on an invalid handle.
  672. * </problem>
  673. * <solution>
  674. * Check for an invalid handle.
  675. * </solution>
  676. * <see>FIXES_flength</see>
  677. * <author href="https://github.com/oscar-broman/" >Slice</author>
  678. * </fix>
  679. *
  680. * <fix name="file_inc" disabled="true">
  681. * <problem>
  682. * Includes or excludes all the file function fixes together (can cause
  683. * major overhead).
  684. * </problem>
  685. * <solution>
  686. * Optionally group them all under one define.
  687. * </solution>
  688. * <see>FIX_file_inc</see>
  689. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  690. * </fix>
  691. *
  692. * <fix name="SetPlayerAttachedObject">
  693. * <problem>
  694. * Doesn't remove objects when the mode ends.
  695. * </problem>
  696. * <solution>
  697. * Remove them.
  698. * </solution>
  699. * <see>OnPlayerDisconnect</see>
  700. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  701. * </fix>
  702. *
  703. * <fix name="OnPlayerDeath">
  704. * <problem>
  705. * Clients get stuck when they die with an animation applied.
  706. * </problem>
  707. * <solution>
  708. * Clear their animations.
  709. * </solution>
  710. * <see>OnPlayerDeath</see>
  711. * <see>OnPlayerUpdate</see>
  712. * <author >h02</author>
  713. * <post href="http://forum.sa-mp.com/showpost.php?p=1641144" />
  714. * </fix>
  715. *
  716. * <fix name="strins">
  717. * <problem>
  718. * Ignores the "maxlength" parameter causing possible crashes.
  719. * </problem>
  720. * <solution>
  721. * Manually check the length.
  722. * </solution>
  723. * <see>FIXES_strins</see>
  724. * <author href="https://github.com/oscar-broman/" >Slice</author>
  725. * <author href="https://github.com/Y-Less" >Y_Less</author>
  726. * </fix>
  727. *
  728. * <fix name="IsPlayerConnected">
  729. * <problem>
  730. * Only uses the lower two bytes of a passed ID.
  731. * </problem>
  732. * <solution>
  733. * Mask the numbers.
  734. * </solution>
  735. * <see>FIXES_IsPlayerConnected</see>
  736. * <author href="https://github.com/oscar-broman/" >Slice</author>
  737. * </fix>
  738. *
  739. * <fix name="TrainExit">
  740. * <problem>
  741. * When getting out of a train entered by "PutPlayerInVehicle", the
  742. * camera does not reset properly.
  743. * </problem>
  744. * <solution>
  745. * Reset the camera.
  746. * </solution>
  747. * <see>FIXES_PutPlayerInVehicle</see>
  748. * <see>FIXES_OnPlayerStateChange</see>
  749. * <author >Terminator3</author>
  750. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  751. * </fix>
  752. *
  753. * <fix name="Kick" fixed="0.3x">
  754. * <problem>
  755. * Calling "Kick" in "OnPlayerConnect" doesn't work properly.
  756. * </problem>
  757. * <solution>
  758. * Defer it.
  759. * </solution>
  760. * <see>OnPlayerConnect</see>
  761. * <see>FIXES_Kick</see>
  762. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  763. * <post href="http://forum.sa-mp.com/showpost.php?p=1989453" />
  764. * </fix>
  765. *
  766. * <fix name="OnVehicleMod">
  767. * <problem>
  768. * Crashes other players when invalid mods are applied.
  769. * </problem>
  770. * <solution>
  771. * Desync the player.
  772. * </solution>
  773. * <see>OnVehicleMod</see>
  774. * <author href="https://github.com/JernejL/" >JernejL</author>
  775. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  776. * <post href="http://forum.sa-mp.com/showpost.php?p=1671500" />
  777. * </fix>
  778. *
  779. * <fix name="random" disabled="true">
  780. * <problem>
  781. * Doesn't work with negative numbers.
  782. * </problem>
  783. * <solution>
  784. * Invert then reinvert.
  785. * </solution>
  786. * <see>FIXES_random</see>
  787. * <author href="https://github.com/simonepri/" >simonepri</author>
  788. * </fix>
  789. *
  790. * <fix name="sleep">
  791. * <problem>
  792. * Leaks bytes from the stack.
  793. * </problem>
  794. * <solution>
  795. * Call a function to store the correct value.
  796. * </solution>
  797. * <see>FIXES_sleep</see>
  798. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  799. * </fix>
  800. *
  801. * <fix name="AddMenuItem">
  802. * <problem>
  803. * Crashes when passed an invalid menu ID.
  804. * </problem>
  805. * <solution>
  806. * Don't hide it when passed an invalid menu.
  807. * </solution>
  808. * <see>FIXES_AddMenuItem</see>
  809. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  810. * </fix>
  811. *
  812. * <fix name="SetMenuColumnHeader">
  813. * <problem>
  814. * Crashes when passed an invalid menu ID.
  815. * </problem>
  816. * <solution>
  817. * Don't hide it when passed an invalid menu.
  818. * </solution>
  819. * <see>FIXES_SetMenuColumnHeader</see>
  820. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  821. * </fix>
  822. *
  823. * <fix name="ShowMenuForPlayer">
  824. * <problem>
  825. * Crashes when passed an invalid menu ID.
  826. * </problem>
  827. * <solution>
  828. * Don't hide it when passed an invalid menu.
  829. * </solution>
  830. * <see>FIXES_ShowMenuForPlayer</see>
  831. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  832. * </fix>
  833. *
  834. * <fix name="HideMenuForPlayer">
  835. * <problem>
  836. * Crashes when passed an invalid menu ID.
  837. * </problem>
  838. * <solution>
  839. * Don't hide it when passed an invalid menu.
  840. * </solution>
  841. * <see>FIXES_HideMenuForPlayer</see>
  842. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  843. * <post href="http://forum.sa-mp.com/showpost.php?p=1787297" />
  844. * </fix>
  845. *
  846. * <fix name="HideMenuForPlayer_2" disabled="true">
  847. * <problem>
  848. * Ignores the "menuid" parameter.
  849. * </problem>
  850. * <solution>
  851. * Only hide the correct menu.
  852. * </solution>
  853. * <see>FIXES_HideMenuForPlayer</see>
  854. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  855. * </fix>
  856. *
  857. * <fix name="DisableMenu">
  858. * <problem>
  859. * Crashes when passed an invalid menu ID.
  860. * </problem>
  861. * <solution>
  862. * Don't hide it when passed an invalid menu.
  863. * </solution>
  864. * <see>FIXES_DisableMenu</see>
  865. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  866. * </fix>
  867. *
  868. * <fix name="DisableMenuRow">
  869. * <problem>
  870. * Crashes when passed an invalid menu ID.
  871. * </problem>
  872. * <solution>
  873. * Don't hide it when passed an invalid menu.
  874. * </solution>
  875. * <see>FIXES_DisableMenuRow</see>
  876. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  877. * </fix>
  878. *
  879. * <fix name="Menus">
  880. * <problem>
  881. * All menu function fixes are included separately for major overhead.
  882. * </problem>
  883. * <solution>
  884. * Optionally group them all under one define.
  885. * </solution>
  886. * <see>FIX_Menus</see>
  887. * <see>_FIX_Menus</see>
  888. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  889. * </fix>
  890. *
  891. * <fix name="GetPlayerMenu">
  892. * <problem>
  893. * Returns previous menu when none is displayed.
  894. * </problem>
  895. * <solution>
  896. * Return the correct value.
  897. * </solution>
  898. * <see>FIXES_GetPlayerMenu</see>
  899. * <see>OnPlayerSelectedMenuRow</see>
  900. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  901. * </fix>
  902. *
  903. * <fix name="GetPlayerInterior">
  904. * <problem>
  905. * Always returns 0 for NPCs.
  906. * </problem>
  907. * <solution>
  908. * Return the correct value.
  909. * </solution>
  910. * <see>FIXES_GetPlayerInterior</see>
  911. * <see>FIXES_SetPlayerInterior</see>
  912. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  913. * <author href="https://github.com/simonepri/" >simonepri</author>
  914. * </fix>
  915. *
  916. * <fix name="ClearAnimations">
  917. * <problem>
  918. * Use ClearAnimation while you are in a vehicle cause the player exit
  919. * from it.
  920. * </problem>
  921. * <solution>
  922. * Apply an animation instead of clear animation.
  923. * </solution>
  924. * <see>FIXES_ClearAnimations</see>
  925. * <author href="https://github.com/simonepri/" >simonepri</author>
  926. * </fix>
  927. *
  928. * <fix name="ClearAnimations_2">
  929. * <problem>
  930. * ClearAnimations doesn't do anything when the animation ends if we
  931. * pass 1 for the freeze parameter in ApplyAnimation.
  932. * </problem>
  933. * <solution>
  934. * Apply an idle animation for stop and then use ClearAnimation.
  935. * </solution>
  936. * <see>FIXES_ClearAnimations</see>
  937. * <author href="https://github.com/simonepri/" >simonepri</author>
  938. * </fix>
  939. *
  940. * <fix name="DriveBy">
  941. * <problem>
  942. * If you press KEY_CROUCH while you're passenger and if you are armed,
  943. * the player start to aim; if you repress KEY_CROUCH the player don't
  944. * return in vehicle.
  945. * </problem>
  946. * <solution>
  947. * Apply the animation to return the player in the vehicle.
  948. * </solution>
  949. * <see>OnPlayerKeyStateChange</see>
  950. * <author href="https://github.com/simonepri/" >simonepri</author>
  951. * </fix>
  952. *
  953. * <fix name="SilentTeleport">
  954. * <problem>
  955. * Player teleports silently while trying to enter a vehicle as that vehicle teleports/changes original interior.
  956. * </problem>
  957. * <solution>
  958. * Stop the player from teleporting by using 'ClearAnimations' before the teleport happens.
  959. * </solution>
  960. * <see>OnPlayerEnterVehicle</see>
  961. * <see>OnPlayerInteriorChange</see>
  962. * <author href="https://github.com/RogueDrifter/" >RogueDrifter</author>
  963. * </fix>
  964. *
  965. * <fix name="GangZoneCreate">
  966. * <problem>
  967. * Gang zones bug on the main map for players at certain angles relative
  968. * to them.
  969. * </problem>
  970. * <solution>
  971. * Set a non floating value for the gang zone co-ordinate.
  972. * </solution>
  973. * <see>FIXES_GangZoneCreate</see>
  974. * <author href="https://github.com/simonepri/" >simonepri</author>
  975. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  976. * </fix>
  977. *
  978. * <fix name="SPECIAL_ACTION_PISSING">
  979. * <problem>
  980. * "SPECIAL_ACTION_PISSING" isn't defined by default.
  981. * </problem>
  982. * <solution>
  983. * Define it.
  984. * </solution>
  985. * <author href="https://github.com/simonepri/" >simonepri</author>
  986. * </fix>
  987. *
  988. * <fix name="IsValidVehicle">
  989. * <problem>
  990. * "IsValidVehicle" isn't defined by default.
  991. * </problem>
  992. * <solution>
  993. * Define it.
  994. * </solution>
  995. * <author href="https://github.com/simonepri/" >simonepri</author>
  996. * </fix>
  997. *
  998. * <fix name="ApplyAnimation">
  999. * <problem>
  1000. * Passing an invalid animation library in ApplyAnimation causes a
  1001. * client crash for streamed in players.
  1002. * </problem>
  1003. * <solution>
  1004. * Block ApplyAnimation when an invalid library is passed.
  1005. * </solution>
  1006. * <see>FIXES_ApplyAnimation</see>
  1007. * <author href="https://github.com/simonepri/" >simonepri</author>
  1008. * </fix>
  1009. *
  1010. * <fix name="ApplyAnimation_2">
  1011. * <problem>
  1012. * First time a library is used, it does nothing.
  1013. * </problem>
  1014. * <solution>
  1015. * Apply animations twice when first using a library.
  1016. * </solution>
  1017. * <see>FIXES_ApplyAnimation</see>
  1018. * <author href="https://github.com/simonepri/" >simonepri</author>
  1019. * <author href="https://github.com/Lordzy/" >Lordzy</author>
  1020. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1021. * </fix>
  1022. *
  1023. * <fix name="ApplyActorAnimation">
  1024. * <problem>
  1025. * Passing an invalid animation library in ApplyAnimation causes a
  1026. * client crash for streamed in players.
  1027. * </problem>
  1028. * <solution>
  1029. * Block ApplyActorAnimation when an invalid library is passed.
  1030. * </solution>
  1031. * <see>FIXES_ApplyActorAnimation</see>
  1032. * <author href="https://github.com/simonepri/" >simonepri</author>
  1033. * <author href="https://github.com/ziggi/" >ziggi</author>
  1034. * </fix>
  1035. *
  1036. * <fix name="ApplyActorAnimation_2">
  1037. * <problem>
  1038. * First time a library is used, it does nothing.
  1039. * </problem>
  1040. * <solution>
  1041. * Apply animations twice when first using a library.
  1042. * </solution>
  1043. * <see>FIXES_ApplyActorAnimation</see>
  1044. * <author href="https://github.com/simonepri/" >simonepri</author>
  1045. * <author href="https://github.com/Lordzy/" >Lordzy</author>
  1046. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1047. * <author href="https://github.com/ziggi/" >ziggi</author>
  1048. * </fix>
  1049. *
  1050. * <fix name="OnPlayerSpawn">
  1051. * <problem>
  1052. * San Andreas deducts $100 from players.
  1053. * </problem>
  1054. * <solution>
  1055. * Give them it back.
  1056. * </solution>
  1057. * <see>OnPlayerSpawn</see>
  1058. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1059. * </fix>
  1060. *
  1061. * <fix name="GetGravity">
  1062. * <problem>
  1063. * "GetGravity" isn't defined by default.
  1064. * </problem>
  1065. * <solution>
  1066. * Define it.
  1067. * </solution>
  1068. * <author href="https://github.com/Whitetigerswt" >Whitetiger</author>
  1069. * <post href="http://forum.sa-mp.com/showpost.php?p=1706447" />
  1070. * </fix>
  1071. *
  1072. * <fix name="gpci">
  1073. * <problem>
  1074. * "gpci" isn't defined by default.
  1075. * </problem>
  1076. * <solution>
  1077. * Define it.
  1078. * </solution>
  1079. * <author href="https://github.com/simonepri/" >simonepri</author>
  1080. * <post href="http://pastebin.com/VQSGpbSm" />
  1081. * </fix>
  1082. *
  1083. * <fix name="Natives">
  1084. * <problem>
  1085. * Several natives are included by default, this enables or disables
  1086. * them all. Therefore this is an umbrella fix for several fixes.
  1087. * </problem>
  1088. * <solution>
  1089. * Define them.
  1090. * </solution>
  1091. * <see>FIX_GetGravity</see>
  1092. * <see>FIX_gpci</see>
  1093. * <see>FIX_IsValidVehicle</see>
  1094. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1095. * </fix>
  1096. *
  1097. * <fix name="OnPlayerConnect">
  1098. * <problem>
  1099. * This function isn't called for players when a filterscript starts.
  1100. * </problem>
  1101. * <solution>
  1102. * Call it for all connected players.
  1103. * </solution>
  1104. * <see>FIXES_OnFilterScriptInit</see>
  1105. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1106. * </fix>
  1107. *
  1108. * <fix name="OnPlayerDisconnect">
  1109. * <problem>
  1110. * This function isn't called for players when a filterscript ends.
  1111. * </problem>
  1112. * <solution>
  1113. * Call it for all connected players.
  1114. * </solution>
  1115. * <see>FIXES_OnFilterScriptExit</see>
  1116. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1117. * </fix>
  1118. *
  1119. * <fix name="GameText">
  1120. * <problem>
  1121. * Several styles do not display for the time specified.
  1122. * </problem>
  1123. * <solution>
  1124. * Recreate the styles in Text Draws and use those instead.
  1125. * </solution>
  1126. * <see>FIXES_GameTextForAll</see>
  1127. * <see>FIXES_GameTextForPlayer</see>
  1128. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1129. * </fix>
  1130. *
  1131. * <fix name="GameTextStyles" disabled="true">
  1132. * <problem>
  1133. * San Andreas has fixed styles for area and vehicle names, but they are
  1134. * not included in the GameText styles list.
  1135. * </problem>
  1136. * <solution>
  1137. * Add them.
  1138. * </solution>
  1139. * <see>FIXES_GameTextForAll</see>
  1140. * <see>FIXES_GameTextForPlayer</see>
  1141. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1142. * <author href="https://github.com/NexiusTailer">NexiusTailer</author>
  1143. * </fix>
  1144. *
  1145. * <fix name="HideGameText">
  1146. * <problem>
  1147. * There is no "HideGameTextForXYZ" function.
  1148. * </problem>
  1149. * <solution>
  1150. * Show a single space for a game text.
  1151. * </solution>
  1152. * <see>FIXES_HideGameTextForAll</see>
  1153. * <see>FIXES_HideGameTextForPlayer</see>
  1154. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1155. * </fix>
  1156. *
  1157. * <fix name="ClearPlayerWorldBounds">
  1158. * <problem>
  1159. * There is no "ClearPlayerWorldBounds" function.
  1160. * </problem>
  1161. * <solution>
  1162. * Put the world bounds back to the default.
  1163. * </solution>
  1164. * <see>FIXES_ClearPlayerWorldBounds</see>
  1165. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1166. * </fix>
  1167. *
  1168. * <fix name="GetPlayerWorldBounds">
  1169. * <problem>
  1170. * There is no "GetPlayerWorldBounds" function.
  1171. * </problem>
  1172. * <solution>
  1173. * Store them and retrieve them.
  1174. * </solution>
  1175. * <see>FIXES_GetPlayerWorldBounds</see>
  1176. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1177. * </fix>
  1178. *
  1179. * <fix name="WEAPONS">
  1180. * <problem>
  1181. * Some weapons are not defined by default.
  1182. * </problem>
  1183. * <solution>
  1184. * Define it.
  1185. * </solution>
  1186. * <author href="https://github.com/ziggi" >ziggi</author>
  1187. * </fix>
  1188. *
  1189. * <fix name="BODYPARTS">
  1190. * <problem>
  1191. * The bodyparts to be used in OnPlayer(Take/Give)Damage are not defined
  1192. * by default
  1193. * </problem>
  1194. * <solution>
  1195. * Define it.
  1196. * </solution>
  1197. * <author href="https://github.com/Whitetigerswt" >Whitetiger</author>
  1198. * </fix>
  1199. *
  1200. * <fix name="CAMERAMODES">
  1201. * <problem>
  1202. * The camera modes for GetPlayerCameraMode are not defined by default.
  1203. * </problem>
  1204. * <solution>
  1205. * Define it.
  1206. * </solution>
  1207. * <author href="https://github.com/Whitetigerswt" >Whitetiger</author>
  1208. * <post href="http://forum.sa-mp.com/showpost.php?p=1309730" />
  1209. * </fix>
  1210. *
  1211. * <fix name="SetPlayerCamera">
  1212. * <problem>
  1213. * Using the camera functions directly after enabling spectator mode
  1214. * doesn't work.
  1215. * </problem>
  1216. * <solution>
  1217. * Defer them.
  1218. * </solution>
  1219. * <see>FIXES_SetPlayerCameraPos</see>
  1220. * <see>FIXES_SetPlayerCameraLookAt</see>
  1221. * <see>FIXES_TogglePlayerSpectating</see>
  1222. * <author href="https://github.com/emmet-jones" >Emmet_</author>
  1223. * </fix>
  1224. *
  1225. * <fix name="SetPlayerTime">
  1226. * <problem>
  1227. * Using this function under "OnPlayerConnect" doesn't work.
  1228. * </problem>
  1229. * <solution>
  1230. * Defer it.
  1231. * </solution>
  1232. * <see>FIXES_SetPlayerTime</see>
  1233. * <author href="https://github.com/emmet-jones" >Emmet_</author>
  1234. * </fix>
  1235. *
  1236. * <fix name="OnPlayerRequestClass">
  1237. * <problem>
  1238. * Random blunts and bottles sometimes appear in class selection.
  1239. * </problem>
  1240. * <solution>
  1241. * Call "RemoveBuildingForPlayer".
  1242. * </solution>
  1243. * <see>OnPlayerRequestClass</see>
  1244. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1245. * </fix>
  1246. *
  1247. * <fix name="SetPlayerColor">
  1248. * <problem>
  1249. * If used under OnPlayerConnect, the affecting player will not see the
  1250. * color in the TAB menu.
  1251. * </problem>
  1252. * <solution>
  1253. * Defer it.
  1254. * </solution>
  1255. * <see>FIXES_SetPlayerColor</see>
  1256. * <author href="https://github.com/emmet-jones" >Emmet_</author>
  1257. * <post href="http://forum.sa-mp.com/showthread.php?t=452407" />
  1258. * </fix>
  1259. *
  1260. * <fix name="FileMaths">
  1261. * <problem>
  1262. * You can write gibberish like "File:a; ++a;".
  1263. * </problem>
  1264. * <solution>
  1265. * Remove the operators.
  1266. * </solution>
  1267. * <see>File:operator</see>
  1268. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1269. * </fix>
  1270. *
  1271. * <fix name="GetPlayerWeaponData">
  1272. * <problem>
  1273. * Old weapons with no ammo left are still returned.
  1274. * </problem>
  1275. * <solution>
  1276. * Set "weapons" to 0.
  1277. * </solution>
  1278. * <see>FIXES_GetPlayerWeaponData</see>
  1279. * <author href="https://github.com/Y-Less/" >Y_Less</author>
  1280. * <post href="http://forum.sa-mp.com/showthread.php?t=567400" />
  1281. * </fix>
  1282. *
  1283. * <fix name="strcmp">
  1284. * <problem>
  1285. * Return 0 if anyone of the string is empty.
  1286. * </problem>
  1287. * <solution>
  1288. * Add a check for empty string.
  1289. * </solution>
  1290. * <see>FIXES_strcmp</see>
  1291. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1292. * </fix>
  1293. *
  1294. * <fix name="GetPVarString">
  1295. * <problem>
  1296. * Wrong symbol code for symbols with code 128 and above.
  1297. * </problem>
  1298. * <solution>
  1299. * Use logical conjunction on symbol and 0xFF.
  1300. * </solution>
  1301. * <see>FIXES_GetPVarString</see>
  1302. * <author href="https://github.com/ziggi" >ziggi</author>
  1303. * <author >Mutha_X</author>
  1304. * <author href="https://github.com/Daniel-Cortez" >Daniel_Cortez</author>
  1305. * <post href="http://forum.sa-mp.com/showthread.php?t=572724&amp;page=11" />
  1306. * <post href="http://pro-pawn.ru/showthread.php?13007" />
  1307. * </fix>
  1308. *
  1309. * <fix name="GetSVarString">
  1310. * <problem>
  1311. * Wrong symbol code for symbols with code 128 and above.
  1312. * </problem>
  1313. * <solution>
  1314. * Use logical conjunction on symbol and 0xFF.
  1315. * </solution>
  1316. * <see>FIXES_GetSVarString</see>
  1317. * <author href="https://github.com/ziggi" >ziggi</author>
  1318. * <author >Mutha_X</author>
  1319. * <author href="https://github.com/Daniel-Cortez" >Daniel_Cortez</author>
  1320. * <post href="http://forum.sa-mp.com/showthread.php?t=572724&amp;page=11" />
  1321. * <post href="http://pro-pawn.ru/showthread.php?13007" />
  1322. * </fix>
  1323. *
  1324. * <fix name="toupper">
  1325. * <problem>
  1326. * Not working on Linux for symbols with code 128 and above.
  1327. * </problem>
  1328. * <solution>
  1329. * Recreate the function.
  1330. * </solution>
  1331. * <see>FIXES_toupper</see>
  1332. * <author href="https://github.com/ziggi" >ziggi</author>
  1333. * <post href="http://pro-pawn.ru/showthread.php?13466&amp;p=72954#post72954" />
  1334. * </fix>
  1335. *
  1336. * <fix name="tolower">
  1337. * <problem>
  1338. * Not working on Linux for symbols with code 128 and above.
  1339. * </problem>
  1340. * <solution>
  1341. * Recreate the function.
  1342. * </solution>
  1343. * <see>FIXES_tolower</see>
  1344. * <author href="https://github.com/ziggi" >ziggi</author>
  1345. * <post href="http://pro-pawn.ru/showthread.php?13466&amp;p=72954#post72954" />
  1346. * </fix>
  1347. *
  1348. * <fix name="ispacked">
  1349. * <problem>
  1350. * Returns false when the string is packed and starts with a symbol with code 128 and above.
  1351. * </problem>
  1352. * <solution>
  1353. * Check the string manually.
  1354. * </solution>
  1355. * <see>FIXES_ispacked</see>
  1356. * <author href="https://github.com/Daniel-Cortez" >Daniel_Cortez</author>
  1357. * <author href="https://github.com/VVWVV" >VVWVV</author>
  1358. * </fix>
  1359. *
  1360. * <fix name="PassengerSeating">
  1361. * <problem>
  1362. * Teleporting player to passenger seat after delay.
  1363. * </problem>
  1364. * <solution>
  1365. * Call ClearAnimation after some delay.
  1366. * </solution>
  1367. * <see>OnPlayerEnterVehicle</see>
  1368. * <see>OnPlayerStateChange</see>
  1369. * <author href="https://github.com/ziggi" >ziggi</author>
  1370. * </fix>
  1371. *
  1372. * <fix name="GogglesSync">
  1373. * <problem>
  1374. * Visual effects show for all players.
  1375. * </problem>
  1376. * <solution>
  1377. * return 0 in OnPlayerUpdate after key pressed.
  1378. * </solution>
  1379. * <see>OnPlayerUpdate</see>
  1380. * <author href="https://github.com/ziggi" >ziggi</author>
  1381. * </fix>
  1382. *
  1383. * <fix name="GetPlayerPoolSize">
  1384. * <problem>
  1385. * Returns "0" even if there are no players on the server.
  1386. * </problem>
  1387. * <solution>
  1388. * Return "-1" if PlayerPoolsize is 0 but Player 0 is not connected.
  1389. * </solution>
  1390. * <see>FIXES_GetPlayerPoolSize</see>
  1391. * <author href="https://github.com/Bios-Marcel" >Bios-Marcel</author>
  1392. * </fix>
  1393. *
  1394. * <fix name="SetPlayerPos">
  1395. * <problem>
  1396. * Using this function on skydiving players kills them.
  1397. * </problem>
  1398. * <solution>
  1399. * Remove the parachute when the player is skydiving.
  1400. * </solution>
  1401. * <see>FIXES_SetPlayerPos</see>
  1402. * <see>FIXES_SetPlayerPosFindZ</see>
  1403. * <author href="https://github.com/WoutProvost" >Freaksken</author>
  1404. * </fix>
  1405. *
  1406. * <fix name="GetPlayerAmmo">
  1407. * <problem>
  1408. * Returns erroneous values over 32767 and under -32768 due to overflow.
  1409. * </problem>
  1410. * <solution>
  1411. * Prevent setting or adding ammo above 32767 and setting or removing
  1412. * ammo below 0.
  1413. * </solution>
  1414. * <see>FIXES_SetPlayerAmmo</see>
  1415. * <see>FIXES_GivePlayerWeapon</see>
  1416. * <author href="https://github.com/WoutProvost" >Freaksken</author>
  1417. * </fix>
  1418. *
  1419. * <fix name="JIT">
  1420. * <problem>
  1421. * Can't easily determine if the script is JIT compiled.
  1422. * </problem>
  1423. * <solution>
  1424. * Provide "IS_JIT" to the script for tests.
  1425. * </solution>
  1426. * <see>OnJITCompile</see>
  1427. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1428. * </fix>
  1429. *
  1430. * <fix name="OS">
  1431. * <problem>
  1432. * Can't easily determine what OS the script is running on.
  1433. * </problem>
  1434. * <solution>
  1435. * Provide "IS_WINDOWS" and "IS_LINUX" to the script for tests.
  1436. * </solution>
  1437. * <see>_FIXES_DetermineOS</see>
  1438. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1439. * </fix>
  1440. *
  1441. * <fix name="const">
  1442. * <problem>
  1443. * Some SA-MP natives don't use "const" when they could.
  1444. * </problem>
  1445. * <solution>
  1446. * Redefine the natives.
  1447. * </solution>
  1448. * <see>FIX_const</see>
  1449. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1450. * </fix>
  1451. *
  1452. * <fix name="VEHICLES">
  1453. * <problem>
  1454. * The vehicle models IDs are not defined by default.
  1455. * </problem>
  1456. * <solution>
  1457. * Define them.
  1458. * </solution>
  1459. * <author href="https://github.com/IstuntmanI" >stuntman</author>
  1460. * </fix>
  1461. *
  1462. * <fix name="GetPlayerWeather" disabled="true">
  1463. * <problem>
  1464. * This function doesn't exist.
  1465. * </problem>
  1466. * <solution>
  1467. * Add it.
  1468. * </solution>
  1469. * <see>FIXES_GetPlayerWeather</see>
  1470. * <author href="https://github.com/IstuntmanI/" >IstuntmanI</author>
  1471. * <author href="https://github.com/ziggi/" >ziggi</author>
  1472. * </fix>
  1473. *
  1474. * <fix name="GetWeather" disabled="true">
  1475. * <problem>
  1476. * This function doesn't exist.
  1477. * </problem>
  1478. * <solution>
  1479. * Add it.
  1480. * </solution>
  1481. * <see>FIXES_GetWeather</see>
  1482. * <author href="https://github.com/IstuntmanI/" >IstuntmanI</author>
  1483. * <author href="https://github.com/ziggi/" >ziggi</author>
  1484. * </fix>
  1485. *
  1486. * <fix name="GetWorldTime" disabled="true">
  1487. * <problem>
  1488. * This function doesn't exist.
  1489. * </problem>
  1490. * <solution>
  1491. * Add it.
  1492. * </solution>
  1493. * <see>FIXES_GetWorldTime</see>
  1494. * <author href="https://github.com/ziggi/" >ziggi</author>
  1495. * </fix>
  1496. *
  1497. * <fix name="GetServerVarAsString">
  1498. * <problem>
  1499. * Crashes on unknown string variables.
  1500. * </problem>
  1501. * <solution>
  1502. * Read the file manually.
  1503. * </solution>
  1504. * <see>FIXES_GetServerVarAsString</see>
  1505. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1506. * <post href="https://github.com/Open-GTO/sa-mp-fixes/issues/73" />
  1507. * </fix>
  1508. *
  1509. * <fix name="GetServerVarAsInt">
  1510. * <problem>
  1511. * Crashes on unknown int variables.
  1512. * </problem>
  1513. * <solution>
  1514. * Read the file manually.
  1515. * </solution>
  1516. * <see>FIXES_GetServerVarAsString</see>
  1517. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1518. * <post href="https://github.com/Open-GTO/sa-mp-fixes/issues/73" />
  1519. * </fix>
  1520. *
  1521. * <fix name="GetServerVarAsBool">
  1522. * <problem>
  1523. * Crashes on unknown boolean variables.
  1524. * </problem>
  1525. * <solution>
  1526. * Read the file manually.
  1527. * </solution>
  1528. * <see>FIXES_GetServerVarAsString</see>
  1529. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1530. * <post href="https://github.com/Open-GTO/sa-mp-fixes/issues/73" />
  1531. * </fix>
  1532. *
  1533. * <fix name="GetServerVarAsFloat">
  1534. * <problem>
  1535. * Doesn't even exist.
  1536. * </problem>
  1537. * <solution>
  1538. * Read the file manually.
  1539. * </solution>
  1540. * <see>FIXES_GetServerVarAsString</see>
  1541. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1542. * <post href="https://github.com/Open-GTO/sa-mp-fixes/issues/73" />
  1543. * </fix>
  1544. *
  1545. * <fix name="tabsize">
  1546. * <problem>
  1547. * Some people still use <c>tabsize 0</c>.
  1548. * </problem>
  1549. * <solution>
  1550. * Break the pragma.
  1551. * </solution>
  1552. * <see>_DUMMY_do_not_use_tabsize_0</see>
  1553. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1554. * <post href="http://forum.sa-mp.com/showpost.php?p=3929000" />
  1555. * </fix>
  1556. *
  1557. * <fix name="OnRconCommand">
  1558. * <problem>
  1559. * Is not called in the gamemode unless first called in a filterscript.
  1560. * </problem>
  1561. * <solution>
  1562. * Load a minimal (embedded) FS to bootstrap it.
  1563. * </solution>
  1564. * <see>OnGameModeInit</see>
  1565. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1566. * </fix>
  1567. *
  1568. * <fix name="OnClientCheckResponse">
  1569. * <problem>
  1570. * Is not called in the gamemode ever.
  1571. * </problem>
  1572. * <solution>
  1573. * Load a minimal (embedded) FS to bootstrap it.
  1574. * </solution>
  1575. * <see>OnGameModeInit</see>
  1576. * <author href="https://github.com/Y-Less" >Y_Less</author>
  1577. * </fix>
  1578. * </fixeslist>
  1579. *
  1580. * <section>
  1581. * Options
  1582. * </section>
  1583. *
  1584. * <p>There are a few options for improved execution of this script. Define
  1585. * these symbols as <c>1</c> before you include fixes.inc (remove them or set
  1586. * them to <c>0</c> to disable them):</p>
  1587. *
  1588. * <ul>
  1589. * <symbol name="FIXES_Single">You only have one script running (no
  1590. * filterscripts), simplify the code.</symbol>
  1591. * <symbol name="FIXES_SilentKick">When a player is kicked for illegal
  1592. * mods/vehicles, don't send them a message.</symbol>
  1593. * <symbol name="FIXES_Debug">Additional information in the server
  1594. * console.</symbol>
  1595. * </ul>
  1596. *
  1597. * <p>A few fixes are disabled by default, to enable them all do:</p>
  1598. *
  1599. * <code>
  1600. * #define GetPlayerDialog 1 <br />
  1601. * #define file_inc 1 <br />
  1602. * #define random 1 <br />
  1603. * #define HideMenuForPlayer_2 1 <br />
  1604. * #define GameTextStyles 1 <br />
  1605. * #define GetPlayerWeather 1 <br />
  1606. * #define GetWeather 1 <br />
  1607. * #define GetWorldTime 1
  1608. * </code>
  1609. *
  1610. * <p>Or more simply (and future-proof-ly):</p>
  1611. *
  1612. * <code>
  1613. * #define FIXES_EnableAll <br />
  1614. * #define FIXES_EnableDeprecated
  1615. * </code>
  1616. *
  1617. * <section>
  1618. * Expansion
  1619. * </section>
  1620. *
  1621. * <p>The file is fairly well documented, with a list of the currently
  1622. * (hopefully) fixed bugs at the top. If you know of others, or have solutions
  1623. * for others, it would be greatly appreciated if you could post them as issues
  1624. * on this repository. The fixes also need extensive testing to find bugs in
  1625. * the fixes themselves.</p>
  1626. *
  1627. * <p>Again, this is a community project, merely managed by Y_Less and others -
  1628. * if anyone has comments, contributions, criticisms etc. please again post them
  1629. * as issues on the repository. This includes additions to source code,
  1630. * documentation, presentation, translations (mainly of this documentation -
  1631. * multiple versions of the include should be avoided to reduce fragmentation),
  1632. * or any other related area you can think of.</p>
  1633. *
  1634. * <section>
  1635. * Other Fixes
  1636. * </section>
  1637. *
  1638. * <p>There are a few other includes which aim to fix issues too large to be
  1639. * included here:</p>
  1640. *
  1641. * <ul>
  1642. * <li><a href="http://forum.sa-mp.com/showthread.php?t=435525">Timerfix</a> -
  1643. * <a href="https://github.com/udan11">udan11 (Dan..)</a>'s fixes to make
  1644. * "SetTimer" and "SetTimerEx" vastly more accurate in their delays.</li>
  1645. * <li><a href="http://forum.sa-mp.com/showthread.php?t=303682">SQLitei</a> -
  1646. * <a href="https://github.com/oscar-broman/">Slice</a>'s fixes and
  1647. * improvements for many SQLite functions.</li>
  1648. * </ul>
  1649. *
  1650. * <section>
  1651. * Bugs
  1652. * </section>
  1653. *
  1654. * <p>Originally Posted by <a href="https://github.com/Y-Less/">Y_Less</a>:</p>
  1655. *
  1656. * <p><em>[This] is beta software written by a small team in their spare time,
  1657. * thus it has bugs (as does all software). This software is explicitly
  1658. * designed to solve bugs, not cause them, but there may still be bugs.</em></p>
  1659. *
  1660. * <p>The most likely cause of bugs is certain combinations of disabled fixes.
  1661. * Some fixes are inter-mixed and while they SHOULD work when the fixes they are
  1662. * combined with are disabled, not every combination has been tested. There are
  1663. * literally billions of possible combinations - if you find one that doesn't
  1664. * compile or work, please tell us.</p>
  1665. *
  1666. * <section>
  1667. * Style Rules
  1668. * </section>
  1669. *
  1670. * <ul>
  1671. * <li>All globals should be <c>static stock</c> whenever possible (so they can only be
  1672. * accessed from this one file).
  1673. * </li>
  1674. * <li>Statics must start with <c>FIXES_gs</c>, and all other globals with <c>FIXES_g</c>.
  1675. * </li>
  1676. * <li>All functions not overriding existing functions must start with <c>FIXES_</c>.
  1677. * </li>
  1678. * <li>Macros must be upper case, use underscores, and start <c>FIXES_</c>:
  1679. * <c>FIXES_LIKE_THIS</c>.
  1680. * </li>
  1681. * <li>Functions should be upper camel case (as the original functions are)
  1682. * <c>FIXES_LikeThis</c>.
  1683. * </li>
  1684. * <li>Globals (after the prefix) should be upper camel case <c>LikeThis</c>, and locals
  1685. * lower camel case <c>likeThis</c>.
  1686. * </li>
  1687. * <li>ALS should be used to hook functions and callbacks. See this topic for more
  1688. * details:
  1689. *
  1690. * http://forum.sa-mp.com/showthread.php?t=570910
  1691. * </li>
  1692. * <li>The ALS prefix for chaining is <c>FIXES_</c>.
  1693. * </li>
  1694. * <li>When redefining a native, add a <c>BAD_</c> external name declaration with the
  1695. * <c>_ALS_</c> definition so that others may use the original native if they so
  1696. * desire (with the caveat that it may break all fixes). Note the <c>BAD_</c>
  1697. * name is meant to indicate the possibility of breaking the fix, not a
  1698. * comment on the original native function.
  1699. * </li>
  1700. * <li>The ALS hook defines used here are a little different to the normal ones as
  1701. * this file assumes that it is always first. The pattern is:
  1702. * <code>
  1703. * #if defined _ALS_NameOfFixHere <br /><indent />
  1704. * #error _ALS_NameOfFixHere defined <br />
  1705. * #endif <br />
  1706. * native BAD_NameOfFixHere(params) = NameOfFixHere; <br />
  1707. * <br />
  1708. * #if FIX_NameOfFixHere <br /><indent />
  1709. * stock FIXES_NameOfFixHere(params) <br /><indent />
  1710. * { <br /><indent /><indent />
  1711. * return 0; <br /><indent />
  1712. * } <br />
  1713. * <br /><indent />
  1714. * #define _ALS_NameOfFixHere <br /><indent />
  1715. * #define NameOfFixHere( FIXES_NameOfFixHere( <br />
  1716. * #endif
  1717. * </code>
  1718. * A copyable version of this pattern is at the end of the file.
  1719. * </li>
  1720. * <li>Enums start with <c>E_</c> or <c>e_</c> depending on type, then follow rules for
  1721. * macros.
  1722. * </li>
  1723. * <li>NO libraries should be included - not even the default SA:MP ones. Let the
  1724. * user do it.
  1725. * </li>
  1726. * <li>Due to the above rule, you cannot assume any third party libraries AT ALL, so
  1727. * do not use them. This can lead to some code duplication, but also means
  1728. * that the version of the code used here can be tailored for optimisations.
  1729. * </li>
  1730. * <li>Certain terms may be shortened when dealing with long callback names to avoid
  1731. * compile truncation warnings (max symbol length is 31). Current list:
  1732. * <ul>
  1733. * <li><c>Checkpoint</c>: <c>CP</c></li>
  1734. * <li><c>Update </c>: <c>Upd</c></li>
  1735. * <li><c>TextDraw </c>: <c>TD</c></li>
  1736. * <li><c>Object </c>: <c>Obj</c></li>
  1737. * <li><c>Player </c>: <c>P</c></li>
  1738. * </ul></li>
  1739. * <li>Document all fixes at the top of the file, and highlight code.
  1740. * </li>
  1741. * <li>4 space TABS - do not edit this file in PAWNO unless you know how to correct
  1742. * the indentation.
  1743. * </li>
  1744. * <li>All rules have exceptions, but they must be justifiable. For example
  1745. * <c>IS_FILTERSCRIPT</c> is a global variable, but is not called
  1746. * <c>FIXES_gIsFilterscript</c> to better match the <c>FILTERSCRIPT</c> macro it
  1747. * replaces. Now a macro for <c>_FIXES_gIsFilterscript</c>.
  1748. * </li>
  1749. * <li>Variables which need to be fully global (i.e. not <c>static</c>), but should not
  1750. * actually be used by other people (e.g. appear inside a macro) should be
  1751. * prefixed with <c>_FIXES</c> instead of <c>FIXES</c> to indicate their private use.
  1752. * </li>
  1753. * <li>No comments beyond the end of column 80 (where the line in <c>PAWNO</c> is).
  1754. * </li>
  1755. * <li>If a bug is fixed in some version of the server it can be conditionally
  1756. * included here. This is done by checking for the existance of a native
  1757. * function introduced in the same server version. For example
  1758. * <c>TogglePlayerControllable</c> was fixed in 0.3eRC6, the same time as the
  1759. * <c>SetObjectMaterial</c> native was introduced, thus the inclusion becomes:
  1760. * <code>
  1761. * #if !defined FIX_TogglePlayerControllable <br /><indent />
  1762. * #if defined SetObjectMaterial <br /><indent /><indent />
  1763. * #define FIX_TogglePlayerControllable (0) <br /><indent />
  1764. * #else <br /><indent /><indent />
  1765. * #define FIX_TogglePlayerControllable (1) <br /><indent />
  1766. * #endif <br />
  1767. * #elseif _FIXES_IS_UNSET(FIX_TogglePlayerControllable) <br /><indent />
  1768. * #undef FIX_TogglePlayerControllable <br /><indent />
  1769. * #define FIX_TogglePlayerControllable (2) <br />
  1770. * #endif
  1771. * </code>
  1772. * This only includes this fix if that native doesn't exist. A copyable
  1773. * version of this pattern is at the end of the file.
  1774. * </li>
  1775. * <li>To reduce general memory consumption, strings in this include are stored
  1776. * globally in constant arrays and referenced. This is EXACTLY as fast as
  1777. * using the string constants directly, but means that strings are not
  1778. * stored in the assembly multiple times (unless the string is only used
  1779. * once, in which case it's more work for no gain). See this post for more
  1780. * details:
  1781. *
  1782. * <a href="http://forum.sa-mp.com/showpost.php?p=1795601" />
  1783. * </li>
  1784. * <li>DO NOT EDIT THIS FILE IN PAWNO OR ON GITHUB. Both mess up the spacing -
  1785. * GitHub in an almost irreversible way (except for the fact that nothing is
  1786. * irreversible in source control. Pawno spacing is less tricky to solve,
  1787. * and can be worked around if you know when it uses spaces and tabs - in
  1788. * short, always write code first THEN indent and you won't have a problem
  1789. * (in that editor at least, that is normally a bad way to write code).
  1790. * </li>
  1791. * </ul>
  1792. * <section>
  1793. * Documentation Explanation
  1794. * </section>
  1795. *
  1796. * <p>The <em>fixes.inc</em> code itself now contains all of the documentation
  1797. * in its header, formatted using the compiler's natively supported pawn-doc,
  1798. * plus some custom XSL. Previously <em>README.md</em> and the header had to be
  1799. * kept in sync manually. Now you can just compile a script with <c>-r</c> and
  1800. * get a large amount of XML documentation, including all of this header in a
  1801. * <c>&lt;library&gt;&lt;/library&gt;</c> pair. The repository comes with a
  1802. * file called <em>markdown.xsl</em> that, when saved as
  1803. * <em>pawno/xml/pawndoc.xsl</em>, will transform that XML to markdown to keep
  1804. * <em>README.md</em> fully up-to-data almost automatically.</p>
  1805. *
  1806. * <p>The descriptions of the fixes all look like:</p>
  1807. *
  1808. * <code lang="xml">
  1809. * &lt;fix name="Short Name" disabled="true" fixed="Optional server version of official fix where applicable"&gt; <br /><indent />
  1810. * &lt;problem&gt; <br /><indent />
  1811. * Description of problem. <br /><indent /><indent />
  1812. * &lt;/problem&gt; <br /><indent />
  1813. * &lt;solution&gt; <br /><indent /><indent />
  1814. * Description of solution. <br /><indent />
  1815. * &lt;/solution&gt; <br /><indent />
  1816. * &lt;see&gt;Relevant functions.&lt;/see&gt; <br /><indent />
  1817. * &lt;author href="Optional address of their profile"&gt;Person who wrote the fix&lt;/author&gt; <br /><indent />
  1818. * &lt;post href="Optional link to the original post where applicable." /&gt; <br />
  1819. * &lt;/fix&gt;
  1820. * </code>
  1821. *
  1822. *
  1823. *
  1824. * </library>
  1825. *//** */
  1826.  
  1827. #if defined _INC_SAMP_Community_fixes
  1828. #endinput
  1829. #endif
  1830. #define _INC_SAMP_Community_fixes
  1831.  
  1832. #if !defined _inc_fixes
  1833. #define _inc_fixes
  1834. #endif
  1835.  
  1836. #pragma tabsize 4
  1837. #pragma semicolon 1
  1838. #pragma ctrlchar '\\'
  1839. #pragma rational Float
  1840.  
  1841. #define _FIXES_ENUM enum
  1842.  
  1843. #if ((__Pawn & 0x0F) >= 0x0A) || ((__Pawn & 0xF0) >= 0xA0)
  1844. #if defined __PawnBuild
  1845. // Extra flags.
  1846. #if __PawnBuild >= 4
  1847. #pragma option -(+
  1848. #endif
  1849.  
  1850. // Use `static enum` if it is available.
  1851. #if __PawnBuild >= 2
  1852. #undef _FIXES_ENUM
  1853. #define _FIXES_ENUM static enum
  1854. #endif
  1855. #endif
  1856.  
  1857. // Stupid "warning" that should not exist ever.
  1858. #pragma warning push
  1859. #pragma warning disable 207
  1860. #pragma disablerecursion
  1861. #pragma warning pop
  1862. #pragma warning disable 238
  1863. #endif
  1864.  
  1865. #if !defined _samp_included
  1866. #tryinclude <a_samp>
  1867. #tryinclude "a_samp"
  1868. #endif
  1869. #if !defined _samp_included
  1870. #tryinclude <a_npc>
  1871. #tryinclude "a_npc"
  1872. #endif
  1873. #if !defined _samp_included
  1874. #error Could not find a_samp.inc
  1875. #endif
  1876.  
  1877. #define _FIXES_IS_UNSET(%0) ((2*%0-1+1)==-1)
  1878.  
  1879. #if !defined FIXES_EnableAll
  1880. #define FIXES_EnableAll (0)
  1881. #elseif _FIXES_IS_UNSET(FIXES_EnableAll)
  1882. #undef FIXES_EnableAll
  1883. #define FIXES_EnableAll (2)
  1884. #endif
  1885.  
  1886. #if !defined FIXES_EnableDeprecated
  1887. #define FIXES_EnableDeprecated (0)
  1888. #elseif _FIXES_IS_UNSET(FIXES_EnableDeprecated)
  1889. #undef FIXES_EnableDeprecated
  1890. #define FIXES_EnableDeprecated (2)
  1891. #endif
  1892.  
  1893. // We can add server version compiler code here to only compile fixes that apply
  1894. // to the version of the includes for which the user is compiling.
  1895. #if !defined FIX_GetPlayerColour
  1896. #if defined FIX_GetPlayerColor
  1897. #if _FIXES_IS_UNSET(FIX_GetPlayerColor)
  1898. #define FIX_GetPlayerColour (2)
  1899. #else
  1900. #define FIX_GetPlayerColour (FIX_GetPlayerColor)
  1901. #endif
  1902. #else
  1903. #define FIX_GetPlayerColour (1)
  1904. #endif
  1905. #elseif _FIXES_IS_UNSET(FIX_GetPlayerColour)
  1906. #undef FIX_GetPlayerColour
  1907. #define FIX_GetPlayerColour (2)
  1908. #endif
  1909.  
  1910. #if !defined FIX_FILTERSCRIPT
  1911. #define FIX_FILTERSCRIPT (1)
  1912. #elseif _FIXES_IS_UNSET(FIX_FILTERSCRIPT)
  1913. #undef FIX_FILTERSCRIPT
  1914. #define FIX_FILTERSCRIPT (2)
  1915. #endif
  1916.  
  1917. #if !defined FIX_SpawnPlayer
  1918. #define FIX_SpawnPlayer (1)
  1919. #elseif _FIXES_IS_UNSET(FIX_SpawnPlayer)
  1920. #undef FIX_SpawnPlayer
  1921. #define FIX_SpawnPlayer (2)
  1922. #endif
  1923.  
  1924. #if !defined FIX_SetPlayerName
  1925. #define FIX_SetPlayerName (1)
  1926. #elseif _FIXES_IS_UNSET(FIX_SetPlayerName)
  1927. #undef FIX_SetPlayerName
  1928. #define FIX_SetPlayerName (2)
  1929. #endif
  1930.  
  1931. #if !defined FIX_GetPlayerSkin
  1932. #define FIX_GetPlayerSkin (1)
  1933. #elseif _FIXES_IS_UNSET(FIX_GetPlayerSkin)
  1934. #undef FIX_GetPlayerSkin
  1935. #define FIX_GetPlayerSkin (2)
  1936. #endif
  1937.  
  1938. #if !defined FIX_GetWeaponName
  1939. #if defined GetVehicleParamsSirenState
  1940. #define FIX_GetWeaponName (FIXES_EnableDeprecated)
  1941. #else
  1942. #define FIX_GetWeaponName (1)
  1943. #endif
  1944. #elseif _FIXES_IS_UNSET(FIX_GetWeaponName)
  1945. #undef FIX_GetWeaponName
  1946. #define FIX_GetWeaponName (2)
  1947. #endif
  1948.  
  1949. #if !defined FIX_SetPlayerWorldBounds
  1950. #define FIX_SetPlayerWorldBounds (1)
  1951. #elseif _FIXES_IS_UNSET(FIX_SetPlayerWorldBounds)
  1952. #undef FIX_SetPlayerWorldBounds
  1953. #define FIX_SetPlayerWorldBounds (2)
  1954. #endif
  1955.  
  1956. #if !defined FIX_TogglePlayerControllable
  1957. #if defined SetObjectMaterial
  1958. #define FIX_TogglePlayerControllable (FIXES_EnableDeprecated)
  1959. #else
  1960. #define FIX_TogglePlayerControllable (1)
  1961. #endif
  1962. #elseif _FIXES_IS_UNSET(FIX_TogglePlayerControllable)
  1963. #undef FIX_TogglePlayerControllable
  1964. #define FIX_TogglePlayerControllable (2)
  1965. #endif
  1966.  
  1967. #if !defined FIX_HydraSniper
  1968. #define FIX_HydraSniper (1)
  1969. #elseif _FIXES_IS_UNSET(FIX_HydraSniper)
  1970. #undef FIX_HydraSniper
  1971. #define FIX_HydraSniper (2)
  1972. #endif
  1973.  
  1974. #if !defined FIX_IsPlayerInCheckpoint
  1975. #define FIX_IsPlayerInCheckpoint (1)
  1976. #elseif _FIXES_IS_UNSET(FIX_IsPlayerInCheckpoint)
  1977. #undef FIX_IsPlayerInCheckpoint
  1978. #define FIX_IsPlayerInCheckpoint (2)
  1979. #endif
  1980.  
  1981. #if !defined FIX_IsPlayerInRaceCheckpoint
  1982. #define FIX_IsPlayerInRaceCheckpoint (1)
  1983. #elseif _FIXES_IS_UNSET(FIX_IsPlayerInRaceCheckpoint)
  1984. #undef FIX_IsPlayerInRaceCheckpoint
  1985. #define FIX_IsPlayerInRaceCheckpoint (2)
  1986. #endif
  1987.  
  1988. #if !defined FIX_GetPlayerWeapon
  1989. #define FIX_GetPlayerWeapon (1)
  1990. #elseif _FIXES_IS_UNSET(FIX_GetPlayerWeapon)
  1991. #undef FIX_GetPlayerWeapon
  1992. #define FIX_GetPlayerWeapon (2)
  1993. #endif
  1994.  
  1995. #if !defined FIX_PutPlayerInVehicle
  1996. #define FIX_PutPlayerInVehicle (1)
  1997. #elseif _FIXES_IS_UNSET(FIX_PutPlayerInVehicle)
  1998. #undef FIX_PutPlayerInVehicle
  1999. #define FIX_PutPlayerInVehicle (2)
  2000. #endif
  2001.  
  2002. #if !defined FIX_KEY_AIM
  2003. #if defined KEY_AIM
  2004. #define FIX_KEY_AIM (FIXES_EnableDeprecated)
  2005. #else
  2006. #define FIX_KEY_AIM (1)
  2007. #endif
  2008. #elseif _FIXES_IS_UNSET(FIX_KEY_AIM)
  2009. #undef FIX_KEY_AIM
  2010. #define FIX_KEY_AIM (2)
  2011. #endif
  2012.  
  2013. #if !defined FIX_SPECIAL_ACTION_PISSING
  2014. #if defined SPECIAL_ACTION_PISSING
  2015. #define FIX_SPECIAL_ACTION_PISSING (FIXES_EnableDeprecated)
  2016. #else
  2017. #define FIX_SPECIAL_ACTION_PISSING (1)
  2018. #endif
  2019. #elseif _FIXES_IS_UNSET(FIX_SPECIAL_ACTION_PISSING)
  2020. #undef FIX_SPECIAL_ACTION_PISSING
  2021. #define FIX_SPECIAL_ACTION_PISSING (2)
  2022. #endif
  2023.  
  2024. #if !defined FIX_Natives
  2025. #define FIX_Natives (1)
  2026. #elseif _FIXES_IS_UNSET(FIX_Natives)
  2027. #undef FIX_Natives
  2028. #define FIX_Natives (2)
  2029. #endif
  2030.  
  2031. #if !defined FIX_IsValidVehicle
  2032. #if defined IsValidVehicle
  2033. #define FIX_IsValidVehicle (FIXES_EnableDeprecated)
  2034. #else
  2035. #define FIX_IsValidVehicle (FIX_Natives)
  2036. #endif
  2037. #elseif _FIXES_IS_UNSET(FIX_IsValidVehicle)
  2038. #undef FIX_IsValidVehicle
  2039. #define FIX_IsValidVehicle (2)
  2040. #endif
  2041.  
  2042. #if !defined FIX_GetGravity
  2043. #if defined GetGravity
  2044. #define FIX_GetGravity (FIXES_EnableDeprecated)
  2045. #else
  2046. #define FIX_GetGravity (FIX_Natives)
  2047. #endif
  2048. #elseif _FIXES_IS_UNSET(FIX_GetGravity)
  2049. #undef FIX_GetGravity
  2050. #define FIX_GetGravity (2)
  2051. #endif
  2052.  
  2053. #if !defined FIX_gpci
  2054. #if defined gpci
  2055. #define FIX_gpci (FIXES_EnableDeprecated)
  2056. #else
  2057. #define FIX_gpci (FIX_Natives)
  2058. #endif
  2059. #elseif _FIXES_IS_UNSET(FIX_gpci)
  2060. #undef FIX_gpci
  2061. #define FIX_gpci (2)
  2062. #endif
  2063.  
  2064. #if !defined FIX_WEAPONS
  2065. #if defined WEAPON_FIST
  2066. #define FIX_WEAPONS (FIXES_EnableDeprecated)
  2067. #else
  2068. #define FIX_WEAPONS (1)
  2069. #endif
  2070. #elseif _FIXES_IS_UNSET(FIX_WEAPONS)
  2071. #undef FIX_WEAPONS
  2072. #define FIX_WEAPONS (2)
  2073. #endif
  2074.  
  2075. #if !defined FIX_BODYPARTS
  2076. #if defined BODY_PART_LEFT_ARM
  2077. #define FIX_BODYPARTS (FIXES_EnableDeprecated)
  2078. #else
  2079. #define FIX_BODYPARTS (1)
  2080. #endif
  2081. #elseif _FIXES_IS_UNSET(FIX_BODYPARTS)
  2082. #undef FIX_BODYPARTS
  2083. #define FIX_BODYPARTS (2)
  2084. #endif
  2085.  
  2086. #if !defined FIX_CAMERAMODES
  2087. #if defined CAM_MODE_NONE
  2088. #define FIX_CAMERAMODES (FIXES_EnableDeprecated)
  2089. #else
  2090. #define FIX_CAMERAMODES (1)
  2091. #endif
  2092. #elseif _FIXES_IS_UNSET(FIX_CAMERAMODES)
  2093. #undef FIX_CAMERAMODES
  2094. #define FIX_CAMERAMODES (2)
  2095. #endif
  2096.  
  2097. #if !defined FIX_DriveBy
  2098. #define FIX_DriveBy (1)
  2099. #elseif _FIXES_IS_UNSET(FIX_DriveBy)
  2100. #undef FIX_DriveBy
  2101. #define FIX_DriveBy (2)
  2102. #endif
  2103.  
  2104. #if !defined FIX_SilentTeleport
  2105. #define FIX_SilentTeleport (1)
  2106. #elseif _FIXES_IS_UNSET(FIX_SilentTeleport)
  2107. #undef FIX_SilentTeleport
  2108. #define FIX_SilentTeleport (2)
  2109. #endif
  2110.  
  2111. #if !defined FIX_SetPlayerCheckpoint
  2112. #define FIX_SetPlayerCheckpoint (1)
  2113. #elseif _FIXES_IS_UNSET(FIX_SetPlayerCheckpoint)
  2114. #undef FIX_SetPlayerCheckpoint
  2115. #define FIX_SetPlayerCheckpoint (2)
  2116. #endif
  2117.  
  2118. #if !defined FIX_SetPlayerRaceCheckpoint
  2119. #define FIX_SetPlayerRaceCheckpoint (1)
  2120. #elseif _FIXES_IS_UNSET(FIX_SetPlayerRaceCheckpoint)
  2121. #undef FIX_SetPlayerRaceCheckpoint
  2122. #define FIX_SetPlayerRaceCheckpoint (2)
  2123. #endif
  2124.  
  2125. #if !defined FIX_TextDrawCreate
  2126. #define FIX_TextDrawCreate (1)
  2127. #elseif _FIXES_IS_UNSET(FIX_TextDrawCreate)
  2128. #undef FIX_TextDrawCreate
  2129. #define FIX_TextDrawCreate (2)
  2130. #endif
  2131.  
  2132. #if !defined FIX_TextDrawCreate_2
  2133. #define FIX_TextDrawCreate_2 (1)
  2134. #elseif _FIXES_IS_UNSET(FIX_TextDrawCreate_2)
  2135. #undef FIX_TextDrawCreate_2
  2136. #define FIX_TextDrawCreate_2 (2)
  2137. #endif
  2138.  
  2139. #if !defined FIX_TextDrawSetString
  2140. #define FIX_TextDrawSetString (1)
  2141. #elseif _FIXES_IS_UNSET(FIX_TextDrawSetString)
  2142. #undef FIX_TextDrawSetString
  2143. #define FIX_TextDrawSetString (2)
  2144. #endif
  2145.  
  2146. #if !defined FIX_TextDrawSetString_2
  2147. #define FIX_TextDrawSetString_2 (1)
  2148. #elseif _FIXES_IS_UNSET(FIX_TextDrawSetString_2)
  2149. #undef FIX_TextDrawSetString_2
  2150. #define FIX_TextDrawSetString_2 (2)
  2151. #endif
  2152.  
  2153. #if !defined FIX_AllowInteriorWeapons
  2154. #define FIX_AllowInteriorWeapons (1)
  2155. #elseif _FIXES_IS_UNSET(FIX_AllowInteriorWeapons)
  2156. #undef FIX_AllowInteriorWeapons
  2157. #define FIX_AllowInteriorWeapons (2)
  2158. #endif
  2159.  
  2160. #if !defined FIX_OnPlayerEnterVehicle
  2161. #if defined OnPlayerClickMap
  2162. #define FIX_OnPlayerEnterVehicle (FIXES_EnableDeprecated)
  2163. #else
  2164. #define FIX_OnPlayerEnterVehicle (1)
  2165. #endif
  2166. #elseif _FIXES_IS_UNSET(FIX_OnPlayerEnterVehicle)
  2167. #undef FIX_OnPlayerEnterVehicle
  2168. #define FIX_OnPlayerEnterVehicle (2)
  2169. #endif
  2170.  
  2171. #if !defined FIX_OnPlayerEnterVehicle_2
  2172. #define FIX_OnPlayerEnterVehicle_2 (1)
  2173. #elseif _FIXES_IS_UNSET(FIX_OnPlayerEnterVehicle_2)
  2174. #undef FIX_OnPlayerEnterVehicle_2
  2175. #define FIX_OnPlayerEnterVehicle_2 (2)
  2176. #endif
  2177.  
  2178. #if !defined FIX_OnPlayerEnterVehicle_3
  2179. #define FIX_OnPlayerEnterVehicle_3 (1)
  2180. #elseif _FIXES_IS_UNSET(FIX_OnPlayerEnterVehicle_3)
  2181. #undef FIX_OnPlayerEnterVehicle_3
  2182. #define FIX_OnPlayerEnterVehicle_3 (2)
  2183. #endif
  2184.  
  2185. #if !defined FIX_AllowTeleport
  2186. #if defined OnPlayerClickMap
  2187. #define FIX_AllowTeleport (1)
  2188. #else
  2189. #define FIX_AllowTeleport (FIXES_EnableDeprecated)
  2190. #endif
  2191. #elseif _FIXES_IS_UNSET(FIX_AllowTeleport)
  2192. #undef FIX_AllowTeleport
  2193. #define FIX_AllowTeleport (2)
  2194. #endif
  2195.  
  2196. #if !defined FIX_SetPlayerSpecialAction
  2197. #define FIX_SetPlayerSpecialAction (1)
  2198. #elseif _FIXES_IS_UNSET(FIX_SetPlayerSpecialAction)
  2199. #undef FIX_SetPlayerSpecialAction
  2200. #define FIX_SetPlayerSpecialAction (2)
  2201. #endif
  2202.  
  2203. #if !defined FIX_ClearAnimations
  2204. #define FIX_ClearAnimations (1)
  2205. #elseif _FIXES_IS_UNSET(FIX_ClearAnimations)
  2206. #undef FIX_ClearAnimations
  2207. #define FIX_ClearAnimations (2)
  2208. #endif
  2209.  
  2210. #if !defined FIX_ClearAnimations_2
  2211. #define FIX_ClearAnimations_2 (1)
  2212. #elseif _FIXES_IS_UNSET(FIX_ClearAnimations_2)
  2213. #undef FIX_ClearAnimations_2
  2214. #define FIX_ClearAnimations_2 (2)
  2215. #endif
  2216.  
  2217. #if !defined FIX_GangZoneCreate
  2218. #define FIX_GangZoneCreate (1)
  2219. #elseif _FIXES_IS_UNSET(FIX_GangZoneCreate)
  2220. #undef FIX_GangZoneCreate
  2221. #define FIX_GangZoneCreate (2)
  2222. #endif
  2223.  
  2224. #if !defined FIX_OnDialogResponse
  2225. #if defined GetVehicleModelInfo
  2226. #define FIX_OnDialogResponse (FIXES_EnableDeprecated)
  2227. #else
  2228. #define FIX_OnDialogResponse (1)
  2229. #endif
  2230. #elseif _FIXES_IS_UNSET(FIX_OnDialogResponse)
  2231. #undef FIX_OnDialogResponse
  2232. #define FIX_OnDialogResponse (2)
  2233. #endif
  2234.  
  2235. #if !defined FIX_GetPlayerDialog
  2236. #if defined GetPlayerDialog
  2237. #define FIX_GetPlayerDialog (FIXES_EnableDeprecated)
  2238. #else
  2239. #define FIX_GetPlayerDialog (FIX_Natives)
  2240. #endif
  2241. #elseif _FIXES_IS_UNSET(FIX_GetPlayerDialog)
  2242. #undef FIX_GetPlayerDialog
  2243. #define FIX_GetPlayerDialog (2)
  2244. #endif
  2245.  
  2246. #if !defined FIX_PlayerDialogResponse
  2247. #define FIX_PlayerDialogResponse (1)
  2248. #elseif _FIXES_IS_UNSET(FIX_PlayerDialogResponse)
  2249. #undef FIX_PlayerDialogResponse
  2250. #define FIX_PlayerDialogResponse (2)
  2251. #endif
  2252.  
  2253. #if !defined FIX_SetSpawnInfo
  2254. #if defined GetPlayerVersion
  2255. #define FIX_SetSpawnInfo (FIXES_EnableDeprecated)
  2256. #else
  2257. #define FIX_SetSpawnInfo (1)
  2258. #endif
  2259. #elseif _FIXES_IS_UNSET(FIX_SetSpawnInfo)
  2260. #undef FIX_SetSpawnInfo
  2261. #define FIX_SetSpawnInfo (2)
  2262. #endif
  2263.  
  2264. #if !defined FIX_SetSpawnInfo_2
  2265. #define FIX_SetSpawnInfo_2 (1)
  2266. #elseif _FIXES_IS_UNSET(FIX_SetSpawnInfo_2)
  2267. #undef FIX_SetSpawnInfo_2
  2268. #define FIX_SetSpawnInfo_2 (2)
  2269. #endif
  2270.  
  2271. #if !defined FIX_SetPlayerSkin
  2272. #define FIX_SetPlayerSkin (1)
  2273. #elseif _FIXES_IS_UNSET(FIX_SetPlayerSkin)
  2274. #undef FIX_SetPlayerSkin
  2275. #define FIX_SetPlayerSkin (2)
  2276. #endif
  2277.  
  2278. #if !defined FIX_HideMenuForPlayer
  2279. #define FIX_HideMenuForPlayer (1)
  2280. #elseif _FIXES_IS_UNSET(FIX_HideMenuForPlayer)
  2281. #undef FIX_HideMenuForPlayer
  2282. #define FIX_HideMenuForPlayer (2)
  2283. #endif
  2284.  
  2285. #if !defined FIX_valstr
  2286. #define FIX_valstr (1)
  2287. #elseif _FIXES_IS_UNSET(FIX_valstr)
  2288. #undef FIX_valstr
  2289. #define FIX_valstr (2)
  2290. #endif
  2291.  
  2292. #if !defined FIX_file_inc
  2293. #define FIX_file_inc (FIXES_EnableAll)
  2294. #elseif _FIXES_IS_UNSET(FIX_file_inc)
  2295. #undef FIX_file_inc
  2296. #define FIX_file_inc (2)
  2297. #endif
  2298.  
  2299. #if !defined FIX_fclose
  2300. #define FIX_fclose (FIX_file_inc)
  2301. #elseif _FIXES_IS_UNSET(FIX_fclose)
  2302. #undef FIX_fclose
  2303. #define FIX_fclose (2)
  2304. #endif
  2305.  
  2306. #if !defined FIX_fwrite
  2307. #define FIX_fwrite (FIX_file_inc)
  2308. #elseif _FIXES_IS_UNSET(FIX_fwrite)
  2309. #undef FIX_fwrite
  2310. #define FIX_fwrite (2)
  2311. #endif
  2312.  
  2313. #if !defined FIX_fread
  2314. #define FIX_fread (FIX_file_inc)
  2315. #elseif _FIXES_IS_UNSET(FIX_fread)
  2316. #undef FIX_fread
  2317. #define FIX_fread (2)
  2318. #endif
  2319.  
  2320. #if !defined FIX_fputchar
  2321. #define FIX_fputchar (FIX_file_inc)
  2322. #elseif _FIXES_IS_UNSET(FIX_fputchar)
  2323. #undef FIX_fputchar
  2324. #define FIX_fputchar (2)
  2325. #endif
  2326.  
  2327. #if !defined FIX_fgetchar
  2328. #define FIX_fgetchar (FIX_file_inc)
  2329. #elseif _FIXES_IS_UNSET(FIX_fgetchar)
  2330. #undef FIX_fgetchar
  2331. #define FIX_fgetchar (2)
  2332. #endif
  2333.  
  2334. #if !defined FIX_fblockwrite
  2335. #define FIX_fblockwrite (FIX_file_inc)
  2336. #elseif _FIXES_IS_UNSET(FIX_fblockwrite)
  2337. #undef FIX_fblockwrite
  2338. #define FIX_fblockwrite (2)
  2339. #endif
  2340.  
  2341. #if !defined FIX_fblockread
  2342. #define FIX_fblockread (FIX_file_inc)
  2343. #elseif _FIXES_IS_UNSET(FIX_fblockread)
  2344. #undef FIX_fblockread
  2345. #define FIX_fblockread (2)
  2346. #endif
  2347.  
  2348. #if !defined FIX_fseek
  2349. #define FIX_fseek (FIX_file_inc)
  2350. #elseif _FIXES_IS_UNSET(FIX_fseek)
  2351. #undef FIX_fseek
  2352. #define FIX_fseek (2)
  2353. #endif
  2354.  
  2355. #if !defined FIX_flength
  2356. #define FIX_flength (FIX_file_inc)
  2357. #elseif _FIXES_IS_UNSET(FIX_flength)
  2358. #undef FIX_flength
  2359. #define FIX_flength (2)
  2360. #endif
  2361.  
  2362. #if !defined FIX_SetPlayerAttachedObject
  2363. #define FIX_SetPlayerAttachedObject (1)
  2364. #elseif _FIXES_IS_UNSET(FIX_SetPlayerAttachedObject)
  2365. #undef FIX_SetPlayerAttachedObject
  2366. #define FIX_SetPlayerAttachedObject (2)
  2367. #endif
  2368.  
  2369. #if !defined FIX_OnPlayerDeath
  2370. #define FIX_OnPlayerDeath (1)
  2371. #elseif _FIXES_IS_UNSET(FIX_OnPlayerDeath)
  2372. #undef FIX_OnPlayerDeath
  2373. #define FIX_OnPlayerDeath (2)
  2374. #endif
  2375.  
  2376. #if !defined FIX_strins
  2377. #define FIX_strins (1)
  2378. #elseif _FIXES_IS_UNSET(FIX_strins)
  2379. #undef FIX_strins
  2380. #define FIX_strins (2)
  2381. #endif
  2382.  
  2383. #if !defined FIX_IsPlayerConnected
  2384. #define FIX_IsPlayerConnected (1)
  2385. #elseif _FIXES_IS_UNSET(FIX_IsPlayerConnected)
  2386. #undef FIX_IsPlayerConnected
  2387. #define FIX_IsPlayerConnected (2)
  2388. #endif
  2389.  
  2390. #if !defined FIX_TrainExit
  2391. #define FIX_TrainExit (1)
  2392. #elseif _FIXES_IS_UNSET(FIX_TrainExit)
  2393. #undef FIX_TrainExit
  2394. #define FIX_TrainExit (2)
  2395. #endif
  2396.  
  2397. #if !defined FIX_Kick
  2398. #if defined EnableVehicleFriendlyFire
  2399. #define FIX_Kick (FIXES_EnableDeprecated)
  2400. #else
  2401. #define FIX_Kick (1)
  2402. #endif
  2403. #elseif _FIXES_IS_UNSET(FIX_Kick)
  2404. #undef FIX_Kick
  2405. #define FIX_Kick (2)
  2406. #endif
  2407.  
  2408. #if !defined FIX_OnVehicleMod
  2409. #define FIX_OnVehicleMod (1)
  2410. #elseif _FIXES_IS_UNSET(FIX_OnVehicleMod)
  2411. #undef FIX_OnVehicleMod
  2412. #define FIX_OnVehicleMod (2)
  2413. #endif
  2414.  
  2415. #if !defined FIX_random
  2416. #define FIX_random (FIXES_EnableAll)
  2417. #elseif _FIXES_IS_UNSET(FIX_random)
  2418. #undef FIX_random
  2419. #define FIX_random (2)
  2420. #endif
  2421.  
  2422. #if !defined FIX_sleep
  2423. #define FIX_sleep (1)
  2424. #elseif _FIXES_IS_UNSET(FIX_sleep)
  2425. #undef FIX_sleep
  2426. #define FIX_sleep (2)
  2427. #endif
  2428.  
  2429. #if !defined FIX_Menus
  2430. #define FIX_Menus (1)
  2431. #elseif _FIXES_IS_UNSET(FIX_Menus)
  2432. #undef FIX_Menus
  2433. #define FIX_Menus (2)
  2434. #endif
  2435.  
  2436. #if !defined FIX_AddMenuItem
  2437. #define FIX_AddMenuItem (FIX_Menus)
  2438. #elseif _FIXES_IS_UNSET(FIX_AddMenuItem)
  2439. #undef FIX_AddMenuItem
  2440. #define FIX_AddMenuItem (2)
  2441. #endif
  2442.  
  2443. #if !defined FIX_SetMenuColumnHeader
  2444. #define FIX_SetMenuColumnHeader (FIX_Menus)
  2445. #elseif _FIXES_IS_UNSET(FIX_SetMenuColumnHeader)
  2446. #undef FIX_SetMenuColumnHeader
  2447. #define FIX_SetMenuColumnHeader (2)
  2448. #endif
  2449.  
  2450. #if !defined FIX_ShowMenuForPlayer
  2451. #define FIX_ShowMenuForPlayer (FIX_Menus)
  2452. #elseif _FIXES_IS_UNSET(FIX_ShowMenuForPlayer)
  2453. #undef FIX_ShowMenuForPlayer
  2454. #define FIX_ShowMenuForPlayer (2)
  2455. #endif
  2456.  
  2457. #if !defined FIX_HideMenuForPlayer
  2458. #define FIX_HideMenuForPlayer (FIX_Menus)
  2459. #elseif _FIXES_IS_UNSET(FIX_HideMenuForPlayer)
  2460. #undef FIX_HideMenuForPlayer
  2461. #define FIX_HideMenuForPlayer (2)
  2462. #endif
  2463.  
  2464. #if !defined FIX_GetPlayerMenu
  2465. #define FIX_GetPlayerMenu (1)
  2466. #elseif _FIXES_IS_UNSET(FIX_GetPlayerMenu)
  2467. #undef FIX_GetPlayerMenu
  2468. #define FIX_GetPlayerMenu (2)
  2469. #endif
  2470.  
  2471. #if !defined FIX_HideMenuForPlayer_2
  2472. #define FIX_HideMenuForPlayer_2 (FIXES_EnableAll)
  2473. #elseif _FIXES_IS_UNSET(FIX_HideMenuForPlayer_2)
  2474. #undef FIX_HideMenuForPlayer_2
  2475. #define FIX_HideMenuForPlayer_2 (2)
  2476. #elseif FIX_HideMenuForPlayer_2 && !FIX_GetPlayerMenu
  2477. #error FIX_HideMenuForPlayer_2 requires FIX_GetPlayerMenu
  2478. #endif
  2479.  
  2480. #if !defined FIX_DisableMenu
  2481. #define FIX_DisableMenu (FIX_Menus)
  2482. #elseif _FIXES_IS_UNSET(FIX_DisableMenu)
  2483. #undef FIX_DisableMenu
  2484. #define FIX_DisableMenu (2)
  2485. #endif
  2486.  
  2487. #if !defined FIX_DisableMenuRow
  2488. #define FIX_DisableMenuRow (FIX_Menus)
  2489. #elseif _FIXES_IS_UNSET(FIX_DisableMenuRow)
  2490. #undef FIX_DisableMenuRow
  2491. #define FIX_DisableMenuRow (2)
  2492. #endif
  2493.  
  2494. #if FIX_Menus || FIX_AddMenuItem || FIX_SetMenuColumnHeader || FIX_ShowMenuForPlayer || FIX_HideMenuForPlayer || FIX_DisableMenu || FIX_DisableMenuRow
  2495. #define _FIX_Menus (1)
  2496. #else
  2497. #define _FIX_Menus (2)
  2498. #endif
  2499.  
  2500. #if !defined FIX_GetPlayerInterior
  2501. #define FIX_GetPlayerInterior (1)
  2502. #elseif _FIXES_IS_UNSET(FIX_GetPlayerInterior)
  2503. #undef FIX_GetPlayerInterior
  2504. #define FIX_GetPlayerInterior (2)
  2505. #endif
  2506.  
  2507. #if !defined FIX_ApplyAnimation
  2508. #define FIX_ApplyAnimation (1)
  2509. #elseif _FIXES_IS_UNSET(FIX_ApplyAnimation)
  2510. #undef FIX_ApplyAnimation
  2511. #define FIX_ApplyAnimation (2)
  2512. #endif
  2513.  
  2514. #if !defined FIX_ApplyAnimation_2
  2515. #define FIX_ApplyAnimation_2 (1)
  2516. #elseif _FIXES_IS_UNSET(FIX_ApplyAnimation_2)
  2517. #undef FIX_ApplyAnimation_2
  2518. #define FIX_ApplyAnimation_2 (2)
  2519. #endif
  2520.  
  2521. #if !defined FIX_ApplyActorAnimation
  2522. #define FIX_ApplyActorAnimation (1)
  2523. #elseif _FIXES_IS_UNSET(FIX_ApplyActorAnimation)
  2524. #undef FIX_ApplyActorAnimation
  2525. #define FIX_ApplyActorAnimation (2)
  2526. #endif
  2527.  
  2528. #if !defined FIX_ApplyActorAnimation_2
  2529. #define FIX_ApplyActorAnimation_2 (1)
  2530. #elseif _FIXES_IS_UNSET(FIX_ApplyActorAnimation_2)
  2531. #undef FIX_ApplyActorAnimation_2
  2532. #define FIX_ApplyActorAnimation_2 (2)
  2533. #endif
  2534.  
  2535. #if !defined FIX_OnPlayerSpawn
  2536. #define FIX_OnPlayerSpawn (1)
  2537. #elseif _FIXES_IS_UNSET(FIX_OnPlayerSpawn)
  2538. #undef FIX_OnPlayerSpawn
  2539. #define FIX_OnPlayerSpawn (2)
  2540. #endif
  2541.  
  2542. #if !defined FIX_GameText
  2543. #define FIX_GameText (1)
  2544. #elseif _FIXES_IS_UNSET(FIX_GameText)
  2545. #undef FIX_GameText
  2546. #define FIX_GameText (2)
  2547. #endif
  2548.  
  2549. #if !defined FIX_HideGameText
  2550. #if defined HideGameText
  2551. #define FIX_HideGameText (FIXES_EnableDeprecated)
  2552. #else
  2553. #define FIX_HideGameText (FIX_Natives)
  2554. #endif
  2555. #elseif _FIXES_IS_UNSET(FIX_HideGameText)
  2556. #undef FIX_HideGameText
  2557. #define FIX_HideGameText (2)
  2558. #endif
  2559.  
  2560. #if !defined FIX_GetPlayerWorldBounds
  2561. #if defined GetPlayerWorldBounds
  2562. #define FIX_GetPlayerWorldBounds (FIXES_EnableDeprecated)
  2563. #else
  2564. #define FIX_GetPlayerWorldBounds (FIX_Natives)
  2565. #endif
  2566. #elseif _FIXES_IS_UNSET(FIX_GetPlayerWorldBounds)
  2567. #undef FIX_GetPlayerWorldBounds
  2568. #define FIX_GetPlayerWorldBounds (2)
  2569. #endif
  2570.  
  2571. #if !defined FIX_ClearPlayerWorldBounds
  2572. #if defined ClearPlayerWorldBounds
  2573. #define FIX_ClearPlayerWorldBounds (FIXES_EnableDeprecated)
  2574. #else
  2575. #define FIX_ClearPlayerWorldBounds (FIX_Natives)
  2576. #endif
  2577. #elseif _FIXES_IS_UNSET(FIX_ClearPlayerWorldBounds)
  2578. #undef FIX_ClearPlayerWorldBounds
  2579. #define FIX_ClearPlayerWorldBounds (2)
  2580. #endif
  2581.  
  2582. #if !defined FIX_GameTextStyles
  2583. #define FIX_GameTextStyles (FIXES_EnableAll)
  2584. #elseif _FIXES_IS_UNSET(FIX_GameTextStyles)
  2585. #undef FIX_GameTextStyles
  2586. #define FIX_GameTextStyles (2)
  2587. #elseif FIX_GameTextStyles && !FIX_GameText
  2588. #error FIX_GameTextStyles requires FIX_GameText
  2589. #endif
  2590.  
  2591. #if !defined FIX_OnPlayerConnect
  2592. #define FIX_OnPlayerConnect (1)
  2593. #elseif _FIXES_IS_UNSET(FIX_OnPlayerConnect)
  2594. #undef FIX_OnPlayerConnect
  2595. #define FIX_OnPlayerConnect (2)
  2596. #endif
  2597.  
  2598. #if !defined FIX_OnPlayerDisconnect
  2599. #define FIX_OnPlayerDisconnect (1)
  2600. #elseif _FIXES_IS_UNSET(FIX_OnPlayerDisconnect)
  2601. #undef FIX_OnPlayerDisconnect
  2602. #define FIX_OnPlayerDisconnect (2)
  2603. #endif
  2604.  
  2605. #if !defined FIX_CreatePlayerTextDraw
  2606. #define FIX_CreatePlayerTextDraw (1)
  2607. #elseif _FIXES_IS_UNSET(FIX_CreatePlayerTextDraw)
  2608. #undef FIX_CreatePlayerTextDraw
  2609. #define FIX_CreatePlayerTextDraw (2)
  2610. #endif
  2611.  
  2612. #if !defined FIX_CreatePlayerTextDraw_2
  2613. #define FIX_CreatePlayerTextDraw_2 (1)
  2614. #elseif _FIXES_IS_UNSET(FIX_CreatePlayerTextDraw_2)
  2615. #undef FIX_CreatePlayerTextDraw_2
  2616. #define FIX_CreatePlayerTextDraw_2 (2)
  2617. #endif
  2618.  
  2619. #if !defined FIX_PlayerTextDrawSetString
  2620. #define FIX_PlayerTextDrawSetString (1)
  2621. #elseif _FIXES_IS_UNSET(FIX_PlayerTextDrawSetString)
  2622. #undef FIX_PlayerTextDrawSetString
  2623. #define FIX_PlayerTextDrawSetString (2)
  2624. #endif
  2625.  
  2626. #if !defined FIX_PlayerTextDrawSetString_2
  2627. #define FIX_PlayerTextDrawSetString_2 (1)
  2628. #elseif _FIXES_IS_UNSET(FIX_PlayerTextDrawSetString_2)
  2629. #undef FIX_PlayerTextDrawSetString_2
  2630. #define FIX_PlayerTextDrawSetString_2 (2)
  2631. #endif
  2632.  
  2633. #if !defined FIX_SetPlayerCamera
  2634. #define FIX_SetPlayerCamera (1)
  2635. #elseif _FIXES_IS_UNSET(FIX_SetPlayerCamera)
  2636. #undef FIX_SetPlayerCamera
  2637. #define FIX_SetPlayerCamera (2)
  2638. #endif
  2639.  
  2640. #if !defined FIX_SetPlayerTime
  2641. #define FIX_SetPlayerTime (1)
  2642. #elseif _FIXES_IS_UNSET(FIX_SetPlayerTime)
  2643. #undef FIX_SetPlayerTime
  2644. #define FIX_SetPlayerTime (2)
  2645. #endif
  2646.  
  2647. #if !defined FIX_OnPlayerRequestClass
  2648. #define FIX_OnPlayerRequestClass (1)
  2649. #elseif _FIXES_IS_UNSET(FIX_OnPlayerRequestClass)
  2650. #undef FIX_OnPlayerRequestClass
  2651. #define FIX_OnPlayerRequestClass (2)
  2652. #endif
  2653.  
  2654. #if !defined FIX_SetPlayerColour
  2655. #if defined FIX_SetPlayerColor
  2656. #if _FIXES_IS_UNSET(FIX_SetPlayerColor)
  2657. #define FIX_SetPlayerColour (2)
  2658. #else
  2659. #define FIX_SetPlayerColour (FIX_SetPlayerColor)
  2660. #endif
  2661. #else
  2662. #define FIX_SetPlayerColour (1)
  2663. #endif
  2664. #elseif _FIXES_IS_UNSET(FIX_SetPlayerColour)
  2665. #undef FIX_SetPlayerColour
  2666. #define FIX_SetPlayerColour (2)
  2667. #endif
  2668.  
  2669. #if !defined FIX_FileMaths
  2670. #define FIX_FileMaths (1)
  2671. #elseif _FIXES_IS_UNSET(FIX_FileMaths)
  2672. #undef FIX_FileMaths
  2673. #define FIX_FileMaths (2)
  2674. #endif
  2675.  
  2676. #if !defined FIX_GetPlayerWeaponData
  2677. #define FIX_GetPlayerWeaponData (1)
  2678. #elseif _FIXES_IS_UNSET(FIX_GetPlayerWeaponData)
  2679. #undef FIX_GetPlayerWeaponData
  2680. #define FIX_GetPlayerWeaponData (2)
  2681. #endif
  2682.  
  2683. #if !defined FIX_strcmp
  2684. #define FIX_strcmp (1)
  2685. #elseif _FIXES_IS_UNSET(FIX_strcmp)
  2686. #undef FIX_strcmp
  2687. #define FIX_strcmp (2)
  2688. #endif
  2689.  
  2690. #if !defined FIX_GetPVarString
  2691. #define FIX_GetPVarString (FIXES_EnableAll)
  2692. #elseif _FIXES_IS_UNSET(FIX_GetPVarString)
  2693. #undef FIX_GetPVarString
  2694. #define FIX_GetPVarString (2)
  2695. #endif
  2696.  
  2697. #if !defined FIX_GetSVarString
  2698. #define FIX_GetSVarString (FIXES_EnableAll)
  2699. #elseif _FIXES_IS_UNSET(FIX_GetSVarString)
  2700. #undef FIX_GetSVarString
  2701. #define FIX_GetSVarString (2)
  2702. #endif
  2703.  
  2704. #if !defined FIX_toupper
  2705. #define FIX_toupper (1)
  2706. #elseif _FIXES_IS_UNSET(FIX_toupper)
  2707. #undef FIX_toupper
  2708. #define FIX_toupper (2)
  2709. #endif
  2710.  
  2711. #if !defined FIX_tolower
  2712. #define FIX_tolower (1)
  2713. #elseif _FIXES_IS_UNSET(FIX_tolower)
  2714. #undef FIX_tolower
  2715. #define FIX_tolower (2)
  2716. #endif
  2717.  
  2718. #if !defined FIX_ispacked
  2719. #define FIX_ispacked (1)
  2720. #elseif _FIXES_IS_UNSET(FIX_ispacked)
  2721. #undef FIX_ispacked
  2722. #define FIX_ispacked (2)
  2723. #endif
  2724.  
  2725. #if !defined FIX_PassengerSeating
  2726. #define FIX_PassengerSeating (1)
  2727. #elseif _FIXES_IS_UNSET(FIX_PassengerSeating)
  2728. #undef FIX_PassengerSeating
  2729. #define FIX_PassengerSeating (2)
  2730. #endif
  2731.  
  2732. #if !defined FIX_GogglesSync
  2733. #define FIX_GogglesSync (1)
  2734. #elseif _FIXES_IS_UNSET(FIX_GogglesSync)
  2735. #undef FIX_GogglesSync
  2736. #define FIX_GogglesSync (2)
  2737. #endif
  2738.  
  2739. #if !defined FIX_GetPlayerPoolSize
  2740. #define FIX_GetPlayerPoolSize (1)
  2741. #elseif _FIXES_IS_UNSET(FIX_GetPlayerPoolSize)
  2742. #undef FIX_GetPlayerPoolSize
  2743. #define FIX_GetPlayerPoolSize (2)
  2744. #endif
  2745.  
  2746. #if !defined FIX_SetPlayerPos
  2747. #define FIX_SetPlayerPos (1)
  2748. #elseif _FIXES_IS_UNSET(FIX_SetPlayerPos)
  2749. #undef FIX_SetPlayerPos
  2750. #define FIX_SetPlayerPos (2)
  2751. #endif
  2752.  
  2753. #if !defined FIX_GetPlayerAmmo
  2754. #define FIX_GetPlayerAmmo (1)
  2755. #elseif _FIXES_IS_UNSET(FIX_GetPlayerAmmo)
  2756. #undef FIX_GetPlayerAmmo
  2757. #define FIX_GetPlayerAmmo (2)
  2758. #endif
  2759.  
  2760. #if !defined FIX_JIT
  2761. #define FIX_JIT (1)
  2762. #elseif _FIXES_IS_UNSET(FIX_JIT)
  2763. #undef FIX_JIT
  2764. #define FIX_JIT (2)
  2765. #endif
  2766.  
  2767. #if !defined FIX_OS
  2768. #define FIX_OS (1)
  2769. #elseif _FIXES_IS_UNSET(FIX_OS)
  2770. #undef FIX_OS
  2771. #define FIX_OS (2)
  2772. #endif
  2773.  
  2774. #if !defined FIX_const
  2775. #define FIX_const (1)
  2776. #elseif _FIXES_IS_UNSET(FIX_const)
  2777. #undef FIX_const
  2778. #define FIX_const (2)
  2779. #endif
  2780.  
  2781. #if !defined FIX_VEHICLES
  2782. #if defined VEHICLE_INFERNUS
  2783. #define FIX_VEHICLES (FIXES_EnableDeprecated)
  2784. #else
  2785. #define FIX_VEHICLES (1)
  2786. #endif
  2787. #elseif _FIXES_IS_UNSET(FIX_VEHICLES)
  2788. #undef FIX_VEHICLES
  2789. #define FIX_VEHICLES (2)
  2790. #endif
  2791.  
  2792. #if !defined FIX_GetPlayerWeather
  2793. #if defined GetPlayerWeather
  2794. #define FIX_GetPlayerWeather (FIXES_EnableDeprecated)
  2795. #else
  2796. #define FIX_GetPlayerWeather (FIX_Natives)
  2797. #endif
  2798. #elseif _FIXES_IS_UNSET(FIX_GetPlayerWeather)
  2799. #undef FIX_GetPlayerWeather
  2800. #define FIX_GetPlayerWeather (2)
  2801. #endif
  2802.  
  2803. #if !defined FIX_GetWeather
  2804. #if defined GetWeather
  2805. #define FIX_GetWeather (FIXES_EnableDeprecated)
  2806. #else
  2807. #define FIX_GetWeather (FIX_Natives)
  2808. #endif
  2809. #elseif _FIXES_IS_UNSET(FIX_GetWeather)
  2810. #undef FIX_GetWeather
  2811. #define FIX_GetWeather (2)
  2812. #endif
  2813.  
  2814. #if !defined FIX_GetWorldTime
  2815. #if defined GetWorldTime
  2816. #define FIX_GetWorldTime (FIXES_EnableDeprecated)
  2817. #else
  2818. #define FIX_GetWorldTime (FIX_Natives)
  2819. #endif
  2820. #elseif _FIXES_IS_UNSET(FIX_GetWorldTime)
  2821. #undef FIX_GetWorldTime
  2822. #define FIX_GetWorldTime (2)
  2823. #endif
  2824.  
  2825. #if !defined FIX_GetServerVarAsString
  2826. #define FIX_GetServerVarAsString (1)
  2827. #elseif _FIXES_IS_UNSET(FIX_GetServerVarAsString)
  2828. #undef FIX_GetServerVarAsString
  2829. #define FIX_GetServerVarAsString (2)
  2830. #endif
  2831.  
  2832. #if !defined FIX_GetServerVarAsInt
  2833. #define FIX_GetServerVarAsInt (1)
  2834. #elseif _FIXES_IS_UNSET(FIX_GetServerVarAsInt)
  2835. #undef FIX_GetServerVarAsInt
  2836. #define FIX_GetServerVarAsInt (2)
  2837. #endif
  2838.  
  2839. #if !defined FIX_GetServerVarAsBool
  2840. #define FIX_GetServerVarAsBool (1)
  2841. #elseif _FIXES_IS_UNSET(FIX_GetServerVarAsBool)
  2842. #undef FIX_GetServerVarAsBool
  2843. #define FIX_GetServerVarAsBool (2)
  2844. #endif
  2845.  
  2846. #if !defined FIX_GetServerVarAsFloat
  2847. #if defined GetServerVarAsFloat
  2848. #if FIX_GetServerVarAsString
  2849. #define FIX_GetServerVarAsFloat (1)
  2850. #else
  2851. #define FIX_GetServerVarAsFloat (FIXES_EnableDeprecated)
  2852. #endif
  2853. #else
  2854. #define FIX_GetServerVarAsFloat (FIX_Natives)
  2855. #endif
  2856. #elseif _FIXES_IS_UNSET(FIX_GetServerVarAsFloat)
  2857. #undef FIX_GetServerVarAsFloat
  2858. #define FIX_GetServerVarAsFloat (2)
  2859. #endif
  2860.  
  2861. #if !defined FIX_tabsize
  2862. #define FIX_tabsize (1)
  2863. #elseif _FIXES_IS_UNSET(FIX_tabsize)
  2864. #undef FIX_tabsize
  2865. #define FIX_tabsize (2)
  2866. #endif
  2867.  
  2868. #if !defined FIX_Callbacks
  2869. #define FIX_Callbacks (1)
  2870. #elseif _FIXES_IS_UNSET(FIX_Callbacks)
  2871. #undef FIX_Callbacks
  2872. #define FIX_Callbacks (2)
  2873. #endif
  2874.  
  2875. #if !defined FIX_OnRconCommand
  2876. #define FIX_OnRconCommand (FIX_Callbacks)
  2877. #elseif _FIXES_IS_UNSET(FIX_OnRconCommand)
  2878. #undef FIX_OnRconCommand
  2879. #define FIX_OnRconCommand (2)
  2880. #endif
  2881.  
  2882. #if !defined FIX_OnClientCheckResponse
  2883. #define FIX_OnClientCheckResponse (FIX_Callbacks)
  2884. #elseif _FIXES_IS_UNSET(FIX_OnClientCheckResponse)
  2885. #undef FIX_OnClientCheckResponse
  2886. #define FIX_OnClientCheckResponse (2)
  2887. #endif
  2888.  
  2889. /**
  2890. * <remarks>
  2891. * tabsize
  2892. *
  2893. * Breaks `#pragma tabsize 0` in such a way that the compiler gives the
  2894. * following error:
  2895. *
  2896. * error 017: undefined symbol "do_not_use_tabsize_0"
  2897. *
  2898. * There is ZERO reason to use it. There are ocassionally times when an
  2899. * indentation reset is required, usually because of macros containing code that
  2900. * would otherwise appear correct. For example:
  2901. *
  2902. * #define TEST_MACRO
  2903. *
  2904. * main()
  2905. * {
  2906. * new a = 42;
  2907. * if (a)
  2908. * {
  2909. * printf("true");
  2910. * }
  2911. * #if defined TEST_MACRO
  2912. * else
  2913. * {
  2914. * printf("false");
  2915. * }
  2916. * a = 42;
  2917. * #endif
  2918. * printf("a = %d", a);
  2919. * }
  2920. *
  2921. * Even that can be fixed without `tabsize 0`, simply by restating the correct
  2922. * indentation level, which resets the internal depth tracking:
  2923. *
  2924. * #define TEST_MACRO
  2925. *
  2926. * main()
  2927. * {
  2928. * new a = 42;
  2929. * if (a)
  2930. * {
  2931. * printf("true");
  2932. * }
  2933. * #if defined TEST_MACRO
  2934. * else
  2935. * {
  2936. * printf("false");
  2937. * }
  2938. * #pragma tabsize 4
  2939. * a = 42;
  2940. * #endif
  2941. * printf("a = %d", a);
  2942. * }
  2943. *
  2944. * There is just no excuse.
  2945. * </remarks>
  2946. */
  2947.  
  2948. #if FIX_tabsize
  2949. #define tabsize%00%0\10;%0 _DUMMY_do_not_use_tabsize_0
  2950. #endif
  2951.  
  2952. /**
  2953. * <remarks>
  2954. * CHAIN_ORDER
  2955. *
  2956. * Allows y_hooks to call things in the correct order when it exists.
  2957. * </remarks>
  2958. */
  2959.  
  2960. #if !defined CHAIN_ORDER
  2961. #define CHAIN_ORDER() 0
  2962. #endif
  2963.  
  2964. /**
  2965. * <remarks>
  2966. * PRE_HOOK
  2967. *
  2968. * A method of pre-hooking callbacks to still have them called before any ones
  2969. * re-written by y_hooks.
  2970. * </remarks>
  2971. */
  2972.  
  2973. #define PRE_HOOK(%0) forward @CO_%0();public @CO_%0(){return CHAIN_ORDER()+1;}
  2974.  
  2975. PRE_HOOK(FIXES)
  2976. #undef CHAIN_ORDER
  2977. #define CHAIN_ORDER @CO_FIXES
  2978.  
  2979. /**
  2980. * <remarks>
  2981. * _FIXES_IncludeStates
  2982. *
  2983. * Define the "_ALS" states used by hooks.
  2984. * </remarks>
  2985. */
  2986.  
  2987. static stock _FIXES_IncludeStates() <_ALS : _ALS_x0, _ALS : _ALS_x1, _ALS : _ALS_x2, _ALS : _ALS_x3>
  2988. {
  2989. }
  2990.  
  2991. static stock _FIXES_IncludeStates() <_ALS : _ALS_go>
  2992. {
  2993. }
  2994.  
  2995. /**
  2996. * <remarks>
  2997. * The number of GameText styles recreated using TextDraw functions. This is 4
  2998. * by default, but can be extended to 6 if you want location and vehicle styles.
  2999. * </remarks>
  3000. */
  3001.  
  3002. #if FIX_GameText
  3003. #if FIX_GameTextStyles
  3004. #define FIXES_GT_STYLE_COUNT (14)
  3005. #else
  3006. #define FIXES_GT_STYLE_COUNT (7)
  3007. #endif
  3008. #endif
  3009.  
  3010. /**
  3011. * <remarks>
  3012. * If this define is set to 1, then players will not be given a message when
  3013. * they are kicked for cheats, instead they will just loose connection to the
  3014. * server.
  3015. * </remarks>
  3016. */
  3017.  
  3018. #if !defined FIXES_SilentKick
  3019. #define FIXES_SilentKick 0
  3020. #elseif _FIXES_IS_UNSET(FIXES_SilentKick)
  3021. #undef FIXES_SilentKick
  3022. #define FIXES_SilentKick 2
  3023. #endif
  3024.  
  3025. /**
  3026. * <remarks>
  3027. * If this define is set to 1, then debug printing is turned on for any
  3028. * functions which may use it. Otherwise, the compiler entirely removes the
  3029. * code to print anything, leaving 0 run-time overhead.
  3030. * </remarks>
  3031. */
  3032.  
  3033. #if defined FIXES_Debug
  3034. #if _FIXES_IS_UNSET(FIXES_Debug)
  3035. #undef FIXES_Debug
  3036. #elseif FIXES_Debug == 1
  3037. #define FIXES_PRINTF(%0); print(_FIXES_gIsFilterscript ? ("* FIXES_PRINTF (FS):") : ("* FIXES_PRINTF (GM):")),printf("*** " %0);
  3038. #else
  3039. #undef FIXES_Debug
  3040. #endif
  3041. #endif
  3042.  
  3043. /**
  3044. * <remarks>
  3045. * If this define is set to 1, then the server will not give a message when
  3046. * <see>GetServerVarAsString</see> and related functions are used without a
  3047. * valid directory redirect.
  3048. * </remarks>
  3049. */
  3050.  
  3051. #if !defined FIXES_ServerVarMsg
  3052. #define FIXES_ServerVarMsg 1
  3053. #elseif _FIXES_IS_UNSET(FIXES_ServerVarMsg)
  3054. #undef FIXES_ServerVarMsg
  3055. #define FIXES_ServerVarMsg 2
  3056. #endif
  3057.  
  3058. /**
  3059. * <remarks>
  3060. * A marker to indicate that this version of fixes.inc uses state-based hooks.
  3061. * </remarks>
  3062. */
  3063. #define FIXES_UseStateHooks
  3064.  
  3065. /**
  3066. * <remarks>
  3067. * A special "printf" function only compiled when "FIXES_Debug" is set.
  3068. * </remarks>
  3069. */
  3070.  
  3071. #if !defined FIXES_PRINTF
  3072. #define FIXES_Debug 0
  3073. #define FIXES_PRINTF(%0);
  3074. #endif
  3075.  
  3076. /**
  3077. * <remarks>
  3078. * INVALID_DIALOG_ID
  3079. *
  3080. * Set when a player can't see a dialog.
  3081. * </remarks>
  3082. */
  3083.  
  3084. #if !defined INVALID_DIALOG_ID
  3085. #define INVALID_DIALOG_ID (-1)
  3086. #endif
  3087.  
  3088. /**
  3089. * <remarks>
  3090. * If this define is set to 1, then the old style include is used, with no
  3091. * support for multiple scripts running at the same time on the server (i.e. no
  3092. * gamemodes and filter scripts at the same time). You can only have one or the
  3093. * other or bugs.
  3094. * </remarks>
  3095. */
  3096.  
  3097. #if !defined FIXES_Single
  3098. #define FIXES_Single (1)
  3099. #elseif _FIXES_IS_UNSET(FIXES_Single)
  3100. #undef FIXES_Single
  3101. #define FIXES_Single (2)
  3102. #endif
  3103.  
  3104. /**
  3105. * <remarks>
  3106. * _FIXES_IS_IN_CHARGE
  3107. *
  3108. * Test to see if this script is in command or not (master).
  3109. * </remarks>
  3110. */
  3111.  
  3112. #if FIXES_Single
  3113. #define _FIXES_IS_IN_CHARGE(%0)
  3114. #else
  3115. #define _FIXES_IS_IN_CHARGE(%0) if (%0(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
  3116. #endif
  3117.  
  3118. /**
  3119. */
  3120.  
  3121. #if FIXES_Single
  3122. #define FIXES_SET(%0,%1,%2) (FIXES_gs%0[%1] = %2)
  3123. #else
  3124. #define FIXES_SET(%0,%1,%2) SetPVarInt(%1, FIXES_pvar%0, %2)
  3125. #endif
  3126.  
  3127. /**
  3128. */
  3129.  
  3130. #if FIXES_Single
  3131. #define FIXES_GET(%0,%1) (FIXES_gs%0[%1])
  3132. #else
  3133. #define FIXES_GET(%0,%1) GetPVarInt(%1, FIXES_pvar%0)
  3134. #endif
  3135.  
  3136. /**
  3137. * <remarks>
  3138. * isnull
  3139. *
  3140. * Pretty standard.
  3141. * </remarks>
  3142. */
  3143.  
  3144. #define isnull(%0) ((%0[(%0[0])=='\1'])=='\0')
  3145.  
  3146. /**
  3147. * <remarks>
  3148. * E_FIXES_WORLDBOUND_DATA
  3149. *
  3150. * Store data for each player on their worldbound data.
  3151. * </remarks>
  3152. */
  3153. _FIXES_ENUM E_FIXES_WORLDBOUND_DATA
  3154. {
  3155. // "Previous".
  3156. Float:E_FIXES_WORLDBOUND_DATA_PX,
  3157. Float:E_FIXES_WORLDBOUND_DATA_PY,
  3158. Float:E_FIXES_WORLDBOUND_DATA_PZ,
  3159. // "Lower".
  3160. Float:E_FIXES_WORLDBOUND_DATA_LX,
  3161. Float:E_FIXES_WORLDBOUND_DATA_LY,
  3162. // "Upper".
  3163. Float:E_FIXES_WORLDBOUND_DATA_UX,
  3164. Float:E_FIXES_WORLDBOUND_DATA_UY
  3165. }
  3166.  
  3167. /**
  3168. * <remarks>
  3169. * e_FIXES_BOOLS
  3170. *
  3171. * Collection of boolean values for players, designed to collect multiple checks
  3172. * in to one variable to reduce memory consumption.
  3173. * </remarks>
  3174. */
  3175. _FIXES_ENUM e_FIXES_BOOLS:(<<= 1)
  3176. {
  3177. // Handy definition for nothing set.
  3178. e_FIXES_BOOLS_NONE = 0,
  3179. // Does this player have worldbounds enabled?
  3180. e_FIXES_BOOLS_UNCONTROLLABLE = 1,
  3181. e_FIXES_BOOLS_PUT_IN_VEHICLE,
  3182. e_FIXES_BOOLS_BLOCK,
  3183. e_FIXES_BOOLS_TELEPORT,
  3184. e_FIXES_BOOLS_CONNECTED,
  3185. e_FIXES_BOOLS_INTERIOR,
  3186. e_FIXES_BOOLS_PUT_IN_TRAIN,
  3187. e_FIXES_BOOLS_KICKED,
  3188. e_FIXES_BOOLS_ON_PLAYER_CONNECT,
  3189. e_FIXES_BOOLS_DRIVE_BY,
  3190. e_FIXES_BOOLS_FIRST_SPAWN,
  3191. e_FIXES_BOOLS_FIRST_CLASS,
  3192. e_FIXES_BOOLS_SPECTATING,
  3193. e_FIXES_BOOLS_DIED_TO_SPAWN,
  3194. e_FIXES_BOOLS_CP_DELAYED,
  3195. e_FIXES_BOOLS_RACE_CP_DELAYED,
  3196. e_FIXES_BOOLS_CLOCK_ENABLED,
  3197. e_FIXES_BOOLS_VEH_ENTER,
  3198. e_FIXES_BOOLS_VEH_ENTER_ANIM,
  3199. }
  3200.  
  3201. /**
  3202. * <remarks>
  3203. * e_FIXES_SETTINGS
  3204. *
  3205. * Collection of boolean values for the script as a whole. Stores a variety of
  3206. * settings that are true/false.
  3207. * </remarks>
  3208. */
  3209. _FIXES_ENUM e_FIXES_SETTINGS:(<<= 1)
  3210. {
  3211. // Handy definition for nothing set.
  3212. e_FIXES_SETTINGS_NONE = 0,
  3213. e_FIXES_SETTINGS_INTERIOR = 1,
  3214. e_FIXES_SETTINGS_ADMIN_TELEPORT,
  3215. e_FIXES_SETTINGS_IN_CHARGE,
  3216. e_FIXES_SETTINGS_DROP_ALL_DATA,
  3217. e_FIXES_SETTINGS_MENU_SET,
  3218. e_FIXES_SETTINGS_ENDING,
  3219. e_FIXES_SETTINGS_ENDED,
  3220. e_FIXES_SETTINGS_NO_GAME_TEXT,
  3221. e_FIXES_SETTINGS_SECOND_USE
  3222. }
  3223.  
  3224. /**
  3225. * <remarks>
  3226. * _FIXES_CEILDIV
  3227. *
  3228. * Do a ceiling division of the first number by the second number.
  3229. * </remarks>
  3230. */
  3231. #define _FIXES_CEILDIV(%0,%1) (((%0) + (%1) - 1) / (%1))
  3232.  
  3233. /**
  3234. * <remarks>
  3235. * _FIXES_MIN_WORLDBOUNDS
  3236. *
  3237. * Default worldbound range.
  3238. * </remarks>
  3239. */
  3240. #define _FIXES_MIN_WORLDBOUNDS (-20000.0)
  3241.  
  3242. /**
  3243. * <remarks>
  3244. * _FIXES_MAX_WORLDBOUNDS
  3245. *
  3246. * Default worldbound range.
  3247. * </remarks>
  3248. */
  3249. #define _FIXES_MAX_WORLDBOUNDS (20000.0)
  3250.  
  3251. /**
  3252. * <remarks>
  3253. * _FIXES_INFINITY
  3254. *
  3255. * IEEE 754 definition of infinity.
  3256. * </remarks>
  3257. */
  3258. #define _FIXES_INFINITY (Float:0x7F800000)
  3259.  
  3260. /**
  3261. * <remarks>
  3262. * _FIXES_N_INFINITY
  3263. *
  3264. * IEEE 754 definition of negative infinity.
  3265. * </remarks>
  3266. */
  3267. #define _FIXES_N_INFINITY (Float:0xFF800000)
  3268.  
  3269. /**
  3270. * <remarks>
  3271. * _FIXES_ATTACHMENTS
  3272. *
  3273. * The number of players whose attachment data (10-bits) can be stored in one
  3274. * cell.
  3275. * </remarks>
  3276. */
  3277. #define _FIXES_ATTACHMENTS (cellbits / MAX_PLAYER_ATTACHED_OBJECTS)
  3278.  
  3279. /**
  3280. * <remarks>
  3281. * _FIXES_FOREACH
  3282. *
  3283. * A new version of "foreach", but just for this library.
  3284. * </remarks>
  3285. */
  3286. #define _FIXES_FOREACH(%1,%0) for (new %0 = MAX_PLAYERS; (%0 = %1[%0]) != MAX_PLAYERS; )
  3287.  
  3288. /**
  3289. * <remarks>
  3290. * _FIXES_IN_RANGE
  3291. *
  3292. * Checks if the first parameter is between the other two: %1 &lt;= %0 &lt;%2 (but
  3293. * faster).
  3294. * </remarks>
  3295. */
  3296. #define _FIXES_IN_RANGE(%0,%1,%2) (((%0) - ((%1) + cellmin)) < ((%2) - ((%1) + cellmin)))
  3297.  
  3298. /**
  3299. * <remarks>
  3300. * _FIXES_NO_RANGE
  3301. *
  3302. * Checks if the first parameter is not between the other two:
  3303. * <c>!(%1 &lt;= %0 &lt; %2)</c>(but faster).
  3304. * </remarks>
  3305. */
  3306. #define _FIXES_NO_RANGE(%0,%1,%2) (((%0) - ((%1) + cellmin)) >= ((%2) - ((%1) + cellmin)))
  3307.  
  3308. /**
  3309. * <remarks>
  3310. * _FIXES_FORWARD
  3311. *
  3312. * Forwards a hooked callbacks, and defines the default state implementations.
  3313. * </remarks>
  3314. */
  3315. #define _FIXES_FORWARD%0(%1); \
  3316. forward%0(%1); \
  3317. public%0(%1) <_ALS : _ALS_x0, _ALS : _ALS_x1> { return 1; } \
  3318. public%0(%1) <> { return 1; }
  3319.  
  3320. /**
  3321. * <remarks>
  3322. * _FIXES_IS_PLAYER_CONNECTED
  3323. *
  3324. * Always valid "IsPlayerConnected" check.
  3325. * </remarks>
  3326. */
  3327. #define _FIXES_IS_PLAYER_CONNECTED(%0) (_FIXES_IN_RANGE((%0), 0, MAX_PLAYERS) && IsPlayerConnected((%0)))
  3328.  
  3329. // These varaibles are NOT pre-processor dependent as they are stock. It's just
  3330. // simpler than trying to figure out when or if a semi-colon is needed. The
  3331. // three `_FIXES_gIs...` variables always exist, they are only `static` if the
  3332. // relevant fixes are not enabled since they may still be needed in this file.
  3333. #if !FIX_FILTERSCRIPT
  3334. static
  3335. #endif
  3336. stock
  3337. /**
  3338. * <remarks>
  3339. * Runtime equivalent of "FILTERSCRIPT" for when it is not set by the user.
  3340. * </remarks>
  3341. */
  3342. bool:_FIXES_gIsFilterscript;
  3343.  
  3344. #if !FIX_JIT
  3345. static
  3346. #endif
  3347. stock
  3348. /**
  3349. * <remarks>
  3350. * True when the JIT plugin is being used.
  3351. * </remarks>
  3352. */
  3353. bool:_FIXES_gIsJIT = false;
  3354.  
  3355. #if !FIX_OS
  3356. static
  3357. #endif
  3358. stock
  3359. /**
  3360. * <remarks>
  3361. * True on Windows, false on Linux.
  3362. * </remarks>
  3363. */
  3364. bool:_FIXES_gIsWindows;
  3365.  
  3366. stock const
  3367. /**
  3368. * <remarks>
  3369. * A single re-usable null string. Const not static because it is used in
  3370. * macros `HideGameTextForAll` and `HideGameTextForPlayer`.
  3371. * </remarks>
  3372. */
  3373. FIXES_gcNull[] = "\1";
  3374.  
  3375. #if FIXES_Debug
  3376. new
  3377. #else
  3378. static stock
  3379. #endif
  3380. /**
  3381. * <remarks>
  3382. * A single re-usable space. Static not const because it is used in this
  3383. * file in functions that don't take `const` strings.
  3384. * </remarks>
  3385. */
  3386. FIXES_gsSpace[] = " ",
  3387. /**
  3388. * <remarks>
  3389. * Only determine the OS once.
  3390. * </remarks>
  3391. */
  3392. bool:FIXES_gsKnownOS = false,
  3393. /**
  3394. * <remarks>
  3395. * A record of which players are connected to the server. We ensure that
  3396. * this only exists when required, since it depends on add and remove
  3397. * functions to be called at the right time.
  3398. * </remarks>
  3399. */
  3400. #if _FIX_Menus || FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_TogglePlayerControllable
  3401. FIXES_gsPlayersIterator[MAX_PLAYERS + 1] = {0, 1, ...},
  3402. #endif
  3403. /**
  3404. * <remarks>
  3405. * A record of which menus have and haven't been shown yet.
  3406. * </remarks>
  3407. */
  3408. FIXES_gsValidMenus[_FIXES_CEILDIV(MAX_MENUS, cellbits)],
  3409. /**
  3410. * <remarks>
  3411. * A player's IP as a 32-bit integer.
  3412. * </remarks>
  3413. */
  3414. #if FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2)
  3415. FIXES_gsPlayerIP[MAX_PLAYERS] = {-1, ...},
  3416. #endif
  3417. /**
  3418. * <remarks>
  3419. * Stores the locked vehicle's id that the player
  3420. * is currently trying to enter
  3421. * </remarks>
  3422. */
  3423. #if FIX_OnPlayerEnterVehicle_3
  3424. FIXES_gsPlayerVehicleID[MAX_PLAYERS],
  3425. /**
  3426. * <remarks>
  3427. * Stores the server tick when the player started
  3428. * trying to enter the locked vehicle
  3429. * </remarks>
  3430. */
  3431. FIXES_gsPlayerVehicleTickCount[MAX_PLAYERS],
  3432. /**
  3433. * <remarks>
  3434. * Boolean: Stores if a certain vehicle is 'locked' or not
  3435. * </remarks>
  3436. */
  3437. bool:FIXES_gsVehicleIsLocked[MAX_VEHICLES],
  3438. #endif
  3439. /**
  3440. * <remarks>
  3441. * The skin the player is currently using.
  3442. * </remarks>
  3443. */
  3444. #if FIXES_Single && FIX_GetPlayerSkin
  3445. FIXES_gsPlayerSkin[MAX_PLAYERS],
  3446. #endif
  3447. /**
  3448. * <remarks>
  3449. * Collection of boolean values for players.
  3450. * </remarks>
  3451. */
  3452. e_FIXES_BOOLS:FIXES_gsPlayerBools[MAX_PLAYERS],
  3453. /**
  3454. * <remarks>
  3455. * Handle to read from server.cfg.
  3456. * </remarks>
  3457. */
  3458. File:FIXES_gsServerCFG,
  3459. /**
  3460. * <remarks>
  3461. * All data for players on where their worldbounds are and where they last
  3462. * were before they went through the bounds by crouching.
  3463. * </remarks>
  3464. */
  3465. #if FIX_SetPlayerWorldBounds || FIX_GetPlayerWorldBounds
  3466. FIXES_gsWorldbounds[MAX_PLAYERS][E_FIXES_WORLDBOUND_DATA],
  3467. #endif
  3468. /**
  3469. * <remarks>
  3470. * Stores the weapon set by "SetPlayerArmedWeapon" when in a vehicle.
  3471. * </remarks>
  3472. */
  3473. #if FIXES_Single && FIX_GetPlayerWeapon
  3474. FIXES_gsPlayerWeapon[MAX_PLAYERS],
  3475. #endif
  3476. /**
  3477. * <remarks>
  3478. * What vehicle the player is due to go in.
  3479. * </remarks>
  3480. */
  3481. FIXES_gsVehicleSeatData[MAX_PLAYERS],
  3482. /**
  3483. * <remarks>
  3484. * Stores the true ID of the dialog the player is looking at to prevent
  3485. * spoofing.
  3486. * </remarks>
  3487. */
  3488. #if FIX_OnDialogResponse || FIX_GetPlayerDialog
  3489. FIXES_gsPlayerDialog[MAX_PLAYERS] = {-1, ...},
  3490. #endif
  3491. /**
  3492. * <remarks>
  3493. * Stores the ID of the player weather.
  3494. * </remarks>
  3495. */
  3496. #if FIX_GetPlayerWeather
  3497. FIXES_gsPlayerWeather[MAX_PLAYERS] = {-1, ...},
  3498. #endif
  3499. /**
  3500. * <remarks>
  3501. * Stores the ID of the server weather.
  3502. * </remarks>
  3503. */
  3504. #if FIX_GetWeather
  3505. FIXES_gsServerWeather = 10,
  3506. #endif
  3507. /**
  3508. * <remarks>
  3509. * Stores the ID of the server weather.
  3510. * </remarks>
  3511. */
  3512. #if FIX_GetWorldTime
  3513. FIXES_gsWorldTime = 12,
  3514. #endif
  3515. /**
  3516. * <remarks>
  3517. * The player's current interior.
  3518. * </remarks>
  3519. */
  3520. #if FIXES_Single && FIX_GetPlayerInterior
  3521. FIXES_gsPlayerInterior[MAX_PLAYERS],
  3522. #endif
  3523. /**
  3524. * <remarks>
  3525. * A collection of 1-bit options, compressed together to save space.
  3526. * </remarks>
  3527. */
  3528. e_FIXES_SETTINGS:FIXES_gsSettings = e_FIXES_SETTINGS_SECOND_USE,
  3529. /**
  3530. * <remarks>
  3531. * The last animation a player used.
  3532. * </remarks>
  3533. */
  3534. #if FIX_OnPlayerDeath
  3535. FIXES_gsLastAnimation[MAX_PLAYERS],
  3536. #endif
  3537. /**
  3538. * <remarks>
  3539. * A player's cash before dying.
  3540. * </remarks>
  3541. */
  3542. #if FIX_OnPlayerSpawn
  3543. FIXES_gsPlayerLastCash[MAX_PLAYERS],
  3544. #endif
  3545. /**
  3546. * <remarks>
  3547. * The weapon to set after re-enter to vehicle.
  3548. * </remarks>
  3549. */
  3550. FIXES_gsDriveByWeapon[MAX_PLAYERS],
  3551. /**
  3552. * <remarks>
  3553. * The menu the player can currently see.
  3554. * </remarks>
  3555. */
  3556. Menu:FIXES_gsCurrentMenu[MAX_PLAYERS] = {Menu:INVALID_MENU, ...},
  3557. /**
  3558. * <remarks>
  3559. * The pre-defined TextDraw styles used to recreate the bugged GameText
  3560. * styles for GameTextForAll.
  3561. * </remarks>
  3562. */
  3563. #if FIX_GameText
  3564. Text:FIXES_gsGTStyle[FIXES_GT_STYLE_COUNT],
  3565. #endif
  3566. /**
  3567. * <remarks>
  3568. * A linked list of which players can see a certain GameText style.
  3569. * </remarks>
  3570. */
  3571. #if FIX_GameText
  3572. FIXES_gsPlayerPGTShown[FIXES_GT_STYLE_COUNT][MAX_PLAYERS + 1],
  3573. #endif
  3574. /**
  3575. * <remarks>
  3576. * The predefined TextDraw styles used to recreate the bugged GameText
  3577. * styles for GameTextForPlayer.
  3578. * </remarks>
  3579. */
  3580. #if FIX_GameText
  3581. PlayerText:FIXES_gsPGTStyle[MAX_PLAYERS][FIXES_GT_STYLE_COUNT],
  3582. #endif
  3583. /**
  3584. * <remarks>
  3585. * The timers used to hide per-player GameText messages.
  3586. * </remarks>
  3587. */
  3588. #if FIX_GameText
  3589. FIXES_gsGTTimer[FIXES_GT_STYLE_COUNT][MAX_PLAYERS + 1],
  3590. #endif
  3591. /**
  3592. * <remarks>
  3593. * Used for storing the timer ID for deferring class selection animation
  3594. * application.
  3595. * </remarks>
  3596. */
  3597. #if FIX_ApplyAnimation_2
  3598. FIXES_gsPlayerAnimTimer[MAX_PLAYERS],
  3599. #endif
  3600. /**
  3601. * <remarks>
  3602. * Used for storing the animation name.
  3603. * </remarks>
  3604. */
  3605. #if FIX_ApplyAnimation_2
  3606. FIXES_gsPlayerAnimName[MAX_PLAYERS][60],
  3607. #endif
  3608. /**
  3609. * <remarks>
  3610. * Which animation libraries the player has synced.
  3611. * </remarks>
  3612. */
  3613. #if FIX_ApplyAnimation_2
  3614. FIXES_gsPlayerAnimLibs[MAX_PLAYERS][_FIXES_CEILDIV(135, cellbits)],
  3615. #endif
  3616. /**
  3617. * <remarks>
  3618. * Used for storing the timer ID for deferring class selection animation
  3619. * application.
  3620. * </remarks>
  3621. */
  3622. #if FIX_ApplyActorAnimation_2
  3623. FIXES_gsActorAnimTimer[MAX_ACTORS],
  3624. #endif
  3625. /**
  3626. * <remarks>
  3627. * Used for storing the animation name.
  3628. * </remarks>
  3629. */
  3630. #if FIX_ApplyActorAnimation_2
  3631. FIXES_gsActorAnimName[MAX_ACTORS][60],
  3632. #endif
  3633. /**
  3634. * <remarks>
  3635. * Which animation libraries the actor has synced.
  3636. * </remarks>
  3637. */
  3638. #if FIX_ApplyActorAnimation_2
  3639. FIXES_gsActorAnimLibs[MAX_ACTORS][_FIXES_CEILDIV(135, cellbits)],
  3640. #endif
  3641. /**
  3642. * <remarks>
  3643. * The position of the character right-trimmed from a "const" string.
  3644. * </remarks>
  3645. */
  3646. FIXES_gsTrimPos,
  3647. /**
  3648. * <remarks>
  3649. * The character right-trimmed from a "const" string.
  3650. * </remarks>
  3651. */
  3652. FIXES_gsTrimChr,
  3653. /**
  3654. * <remarks>
  3655. * This variable records wether or not this player is brand new to the
  3656. * server, and not just having "OnPlayerConnect" called due to a script
  3657. * load. There are certain functions that need applying only the very first
  3658. * time they connect, then this gets set.
  3659. * </remarks>
  3660. */
  3661. #if !FIXES_Single
  3662. FIXES_pvarNotNewPlayer[] = "FIXES_pvarNotNewPlayer",
  3663. #endif
  3664. /**
  3665. * <remarks>
  3666. * Name of the pvar in which to store the player's current weapon.
  3667. * </remarks>
  3668. */
  3669. #if !FIXES_Single && FIX_GetPlayerWeapon
  3670. FIXES_pvarPlayerWeapon[] = "FIXES_pvarPlayerWeapon",
  3671. #endif
  3672. /**
  3673. * <remarks>
  3674. * Name of the pvar in which to store the player's current skin.
  3675. * </remarks>
  3676. */
  3677. #if !FIXES_Single && FIX_GetPlayerSkin
  3678. FIXES_pvarPlayerSkin[] = "FIXES_pvarPlayerSkin",
  3679. #endif
  3680. /**
  3681. * <remarks>
  3682. * Name of the pvar in which to store the player's spectator mode.
  3683. * </remarks>
  3684. */
  3685. #if !FIXES_Single && FIX_SetPlayerCamera
  3686. FIXES_pvarPlayerSpectate[] = "FIXES_pvarPlayerSpectate",
  3687. #endif
  3688. /**
  3689. * <remarks>
  3690. * Name of the kick timer function.
  3691. * </remarks>
  3692. */
  3693. #if FIX_Kick
  3694. FIXES_gscKick[] = "_FIXES_Kick",
  3695. #endif
  3696. /**
  3697. * <remarks>
  3698. * Name of the pvar in which to store a player's kick timer.
  3699. * </remarks>
  3700. */
  3701. #if FIX_Kick
  3702. FIXES_pvarKick[] = "FIXES_pvarKick",
  3703. #endif
  3704. /**
  3705. * <remarks>
  3706. * Name of the pvar in which to store the player's current dialogid.
  3707. * </remarks>
  3708. */
  3709. #if !FIXES_Single && FIX_OnDialogResponse || FIX_GetPlayerDialog
  3710. FIXES_pvarPlayerDialog[] = "FIXES_pvarPlayerDialog",
  3711. #endif
  3712. /**
  3713. * <remarks>
  3714. * Name of the pvar in which to store the player's current weather.
  3715. * </remarks>
  3716. */
  3717. #if !FIXES_Single && FIX_GetPlayerWeather
  3718. FIXES_pvarPlayerWeather[] = "FIXES_pvarPlayerWeather",
  3719. #endif
  3720. /**
  3721. * <remarks>
  3722. * A player's current interior.
  3723. * </remarks>
  3724. */
  3725. #if !FIXES_Single && FIX_GetPlayerInterior
  3726. FIXES_pvarPlayerInterior[] = "FIXES_pvarPlayerInterior",
  3727. #endif
  3728. /**
  3729. * <remarks>
  3730. * Used in OnDialogResponse to be able to get the correct ID in multiple
  3731. * scripts while still correctly resetting the ID for future use.
  3732. * </remarks>
  3733. */
  3734. #if !FIXES_Single && FIX_OnDialogResponse
  3735. FIXES_pvarCurrentDialog[] = "FIXES_pvarCurrentDialog",
  3736. #endif
  3737. /**
  3738. * <remarks>
  3739. * Used in OnPlayerDeath to save a player's cash before death.
  3740. * </remarks>
  3741. */
  3742. #if !FIXES_Single && FIX_OnPlayerSpawn
  3743. FIXES_pvarPlayerLastCash[] = "FIXES_pvarPlayerLastCash",
  3744. #endif
  3745. /**
  3746. * <remarks>
  3747. * The timers used to prevent players seating.
  3748. * </remarks>
  3749. */
  3750. #if FIX_PassengerSeating
  3751. FIXES_gsPSTimer[MAX_PLAYERS],
  3752. #endif
  3753. /**
  3754. * <remarks>
  3755. * The player id who is getting carjacked before the car teleports.
  3756. * </remarks>
  3757. */
  3758. #if FIX_SilentTeleport
  3759. FIXES_gsJackedId[MAX_PLAYERS] = {INVALID_PLAYER_ID, ...},
  3760. #endif
  3761. /**
  3762. * <remarks>
  3763. * Name of the GameText hide timer function.
  3764. * </remarks>
  3765. */
  3766. FIXES_gscHideGameTextTimer[] = "_FIXES_HideGameTextTimer",
  3767. /**
  3768. * <remarks>
  3769. * Name of the Drive-By timer function.
  3770. * </remarks>
  3771. */
  3772. FIXES_gscDriveBy[] = "_FIXES_DriveBy",
  3773. /**
  3774. * <remarks>
  3775. * Name of the SetCamera timer function.
  3776. * </remarks>
  3777. */
  3778. FIXES_gscSetCamera[] = "_FIXES_SetCamera",
  3779. /**
  3780. * <remarks>
  3781. * Name of the SetTime timer function.
  3782. * </remarks>
  3783. */
  3784. FIXES_gscSetTime[] = "_FIXES_SetTime",
  3785. /**
  3786. * <remarks>
  3787. * Name of the SetColor timer function.
  3788. * </remarks>
  3789. */
  3790. FIXES_gscSetColor[] = "_FIXES_SetColor",
  3791. /**
  3792. * <remarks>
  3793. * Name of the SetCheckpoint timer function.
  3794. * </remarks>
  3795. */
  3796. FIXES_gscSetCheckpoint[] = "_FIXES_SetCheckpoint",
  3797. /**
  3798. * <remarks>
  3799. * Name of the pvar in which to store the player's checkpoint state.
  3800. * </remarks>
  3801. */
  3802. #if !FIXES_Single && FIX_SetPlayerCheckpoint
  3803. FIXES_pvarPlayerCheckpoint[] = "FIXES_pvarPlayerCheckpoint",
  3804. #endif
  3805. /**
  3806. * <remarks>
  3807. * Name of the SetRaceCheckpoint timer function.
  3808. * </remarks>
  3809. */
  3810. FIXES_gscSetRaceCheckpoint[] = "_FIXES_SetRaceCheckpoint",
  3811. /**
  3812. * <remarks>
  3813. * Name of the pvar in which to store the player's race checkpoint state.
  3814. * </remarks>
  3815. */
  3816. #if !FIXES_Single && FIX_SetPlayerRaceCheckpoint
  3817. FIXES_pvarPlayerRaceCheckpoint[] = "FIXES_pvarPlayerRaceCheckpoint",
  3818. #endif
  3819. /**
  3820. * <remarks>
  3821. * NULL. This is stored as a global string to reduce memory usage.
  3822. * </remarks>
  3823. */
  3824. FIXES_gscNULL[] = "\1";
  3825.  
  3826. static stock const
  3827. /**
  3828. * <remarks>
  3829. * (null). This is stored as a global string to reduce memory usage.
  3830. * </remarks>
  3831. */
  3832. FIXES_gscNull[] = "(null)",
  3833. /**
  3834. * <remarks>
  3835. * A single re-usable new line.
  3836. * </remarks>
  3837. */
  3838. FIXES_gscLF[] = "\n",
  3839. /**
  3840. * <remarks>
  3841. * There are only 100 colours used by default, with SA:MP looping through
  3842. * them repeatedly.
  3843. * </remarks>
  3844. */
  3845. #if FIX_GetPlayerColour
  3846. FIXES_gscPlayerColours[100] =
  3847. {
  3848. 0xFF8C13FF, 0xC715FFFF, 0x20B2AAFF, 0xDC143CFF, 0x6495EDFF,
  3849. 0xF0E68CFF, 0x778899FF, 0xFF1493FF, 0xF4A460FF, 0xEE82EEFF,
  3850. 0xFFD720FF, 0x8B4513FF, 0x4949A0FF, 0x148B8BFF, 0x14FF7FFF,
  3851. 0x556B2FFF, 0x0FD9FAFF, 0x10DC29FF, 0x534081FF, 0x0495CDFF,
  3852. 0xEF6CE8FF, 0xBD34DAFF, 0x247C1BFF, 0x0C8E5DFF, 0x635B03FF,
  3853. 0xCB7ED3FF, 0x65ADEBFF, 0x5C1ACCFF, 0xF2F853FF, 0x11F891FF,
  3854. 0x7B39AAFF, 0x53EB10FF, 0x54137DFF, 0x275222FF, 0xF09F5BFF,
  3855. 0x3D0A4FFF, 0x22F767FF, 0xD63034FF, 0x9A6980FF, 0xDFB935FF,
  3856. 0x3793FAFF, 0x90239DFF, 0xE9AB2FFF, 0xAF2FF3FF, 0x057F94FF,
  3857. 0xB98519FF, 0x388EEAFF, 0x028151FF, 0xA55043FF, 0x0DE018FF,
  3858. 0x93AB1CFF, 0x95BAF0FF, 0x369976FF, 0x18F71FFF, 0x4B8987FF,
  3859. 0x491B9EFF, 0x829DC7FF, 0xBCE635FF, 0xCEA6DFFF, 0x20D4ADFF,
  3860. 0x2D74FDFF, 0x3C1C0DFF, 0x12D6D4FF, 0x48C000FF, 0x2A51E2FF,
  3861. 0xE3AC12FF, 0xFC42A8FF, 0x2FC827FF, 0x1A30BFFF, 0xB740C2FF,
  3862. 0x42ACF5FF, 0x2FD9DEFF, 0xFAFB71FF, 0x05D1CDFF, 0xC471BDFF,
  3863. 0x94436EFF, 0xC1F7ECFF, 0xCE79EEFF, 0xBD1EF2FF, 0x93B7E4FF,
  3864. 0x3214AAFF, 0x184D3BFF, 0xAE4B99FF, 0x7E49D7FF, 0x4C436EFF,
  3865. 0xFA24CCFF, 0xCE76BEFF, 0xA04E0AFF, 0x9F945CFF, 0xDCDE3DFF,
  3866. 0x10C9C5FF, 0x70524DFF, 0x0BE472FF, 0x8A2CD7FF, 0x6152C2FF,
  3867. 0xCF72A9FF, 0xE59338FF, 0xEEDC2DFF, 0xD8C762FF, 0xD8C762FF
  3868. },
  3869. #endif
  3870. /**
  3871. * <remarks>
  3872. * This is a compressed (4-bit) list of the maximum number of passengers in
  3873. * any vehicle, confirmed by a number of sources. "F" (15) means invalid
  3874. * vehicle.
  3875. * </remarks>
  3876. */
  3877. #if FIX_OnPlayerEnterVehicle
  3878. FIXES_gscMaxPassengers[] =
  3879. {
  3880. 0x10331113, 0x11311131, 0x11331313, 0x80133301, 0x1381F110, 0x10311103, 0x10001F10, 0x11113311, 0x13113311,
  3881. 0x31101100, 0x30002301, 0x11031311, 0x11111331, 0x10013111, 0x01131100, 0x11111110, 0x11100031, 0x11130221,
  3882. 0x33113311, 0x11111101, 0x33101133, 0x10100550, 0x03133111, 0xFF11113F, 0x13330111, 0xFF131111, 0x0000FF3F
  3883. },
  3884. #endif
  3885. /**
  3886. * <remarks>
  3887. * This is a bit array of all the valid mods (-1000) for all vehicles (-400)
  3888. * EXCEPT for vehicle 576 (Tornado), which has just TWO extra mods on it,
  3889. * that should spill over in to an extra cell of data (requiring an extra
  3890. * 848 bytes of data total to make the array work). Instead this (hopefully
  3891. * rare) case is handled explicitly in "OnVehicleMod". It seems that most
  3892. * vehicles are:
  3893. *
  3894. * 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3895. *
  3896. * I don't know yet if this can be used to our advantage to improve the code
  3897. * somehow - it seems like that would require more explicit model handling.
  3898. * </remarks>
  3899. */
  3900. #if FIX_OnVehicleMod
  3901. FIXES_gscVehicleMods[] =
  3902. {
  3903. 0x033C2700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3904. 0x021A27FA, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  3905. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3906. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3907. 0x023B2785, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3908. 0x02BC4703, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3909. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3910. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3911. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3912. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3913. 0x03BA278A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3914. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3915. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3916. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3917. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3918. 0x028E078A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3919. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3920. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3921. 0x02310744, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3922. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3923. 0x0228073A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3924. 0x02BD4701, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3925. 0x023A2780, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3926. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3927. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3928. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3929. 0x0228077A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3930. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3931. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3932. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3933. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3934. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3935. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3936. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3937. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3938. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3939. 0x027A27CA, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3940. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3941. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3942. 0x0282278A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  3943. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3944. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3945. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3946. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3947. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3948. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3949. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3950. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3951. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3952. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3953. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3954. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3955. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3956. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3957. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3958. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3959. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3960. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3961. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3962. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3963. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3964. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3965. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3966. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3967. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3968. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3969. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3970. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3971. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3972. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3973. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3974. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3975. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3976. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3977. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3978. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3979. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3980. 0x023E07C0, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3981. 0x03703730, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3982. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3983. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3984. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3985. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3986. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3987. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3988. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3989. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3990. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3991. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3992. 0x031D2775, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3993. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3994. 0x02BE4788, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  3995. 0x02010771, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3996. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  3997. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3998. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  3999. 0x029A0FCE, 0x00000000, 0x00FFFE00, 0x00000007, 0x0000C000, 0x00000000,
  4000. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4001. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4002. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4003. 0x03382700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4004. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4005. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4006. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4007. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4008. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4009. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4010. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4011. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4012. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4013. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4014. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4015. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4016. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4017. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4018. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4019. 0x023F8795, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4020. 0x029F078C, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  4021. 0x029627EA, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  4022. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4023. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4024. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4025. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4026. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4027. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4028. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4029. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4030. 0x0236C782, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4031. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4032. 0x029E1FCA, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4033. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4034. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4035. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4036. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4037. 0x02000700, 0x00000000, 0x00FFFE00, 0xFC000437, 0x00000000, 0x021C0000,
  4038. 0x02000700, 0x00000000, 0x00FFFE00, 0x03FE6007, 0x00000000, 0x00000000,
  4039. 0x02000700, 0x00000000, 0x00FFFE00, 0x00001B87, 0x00000001, 0x01E00000,
  4040. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4041. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4042. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4043. 0x039E07D2, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  4044. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4045. 0x023CC700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00030000, 0x00000000,
  4046. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4047. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4048. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4049. 0x038E07D6, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  4050. 0x023D0709, 0x00000000, 0x00FFFE00, 0x00000007, 0x0000C000, 0x00000000,
  4051. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4052. 0x029E1F8A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  4053. 0x029C077A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  4054. 0x02BD076C, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4055. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4056. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4057. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4058. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4059. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4060. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4061. 0x02000700, 0x00000000, 0xFFFFFE00, 0x00000007, 0x00000000, 0x000001F8,
  4062. 0x02000700, 0x00000000, 0x00FFFFFE, 0x00000007, 0xC0000000, 0x00002007,
  4063. 0xFE000700, 0x00000003, 0x00FFFE00, 0x00000007, 0x00003C00, 0x00000600,
  4064. 0xCE000700, 0xFF800000, 0x00FFFE01, 0x00000007, 0x3C000000, 0x00000000,
  4065. 0x02000700, 0x000003FC, 0x00FFFE00, 0x00000007, 0x003C0000, 0x00001800,
  4066. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4067. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4068. 0x02000700, 0x007FE000, 0x00FFFE00, 0x00000007, 0x03C00000, 0x00000000,
  4069. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4070. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000047, 0x0000003E, 0x3C000000,
  4071. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4072. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4073. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4074. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4075. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4076. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4077. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4078. 0x02000700, 0x00001C00, 0x00FFFE00, 0x0000000F, 0x00000000, 0x0003C000,
  4079. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x000003C0, 0xC0000000,
  4080. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4081. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4082. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4083. 0x029607C2, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4084. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4085. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4086. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4087. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4088. 0x03FFE7CF, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  4089. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4090. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4091. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4092. 0x031727F1, 0x00000000, 0x00FFFE00, 0x00000007, 0x00030000, 0x00000000,
  4093. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4094. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4095. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4096. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4097. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4098. 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  4099. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4100. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4101. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4102. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4103. 0x025627F0, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4104. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4105. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4106. 0x039E07C2, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
  4107. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4108. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4109. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4110. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4111. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4112. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4113. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
  4114. 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000
  4115. },
  4116. #endif
  4117. /**
  4118. * <remarks>
  4119. * Which index each letter starts at. Sometimes crashes the compiler...
  4120. * </remarks>
  4121. */
  4122. #if FIX_ApplyAnimation || FIX_ApplyAnimation_2 || FIX_ApplyActorAnimation || FIX_ApplyActorAnimation_2
  4123. FIXES_gscAnimIndexes[24] =
  4124. {
  4125. 0, 2, 21, 35, 42, 42, 53, 62, 64, 67, 68, 71, 75, 81, 82, 84, 94, 96, 104, 122, 127, 128, 131, 135
  4126. },
  4127. #endif
  4128. /**
  4129. * <remarks>
  4130. * List of valid animation libraries.
  4131. * </remarks>
  4132. */
  4133. #if FIX_ApplyAnimation || FIX_ApplyAnimation_2 || FIX_ApplyActorAnimation || FIX_ApplyActorAnimation_2
  4134. FIXES_gscAnimLib[135][] =
  4135. {
  4136. "AIRPORT", "ATTRACTORS", "BAR", "BASEBALL", "BD_FIRE",
  4137. "BEACH", "BENCHPRESS", "BF_INJECTION", "BIKE_DBZ", "BIKED",
  4138. "BIKEH", "BIKELEAP", "BIKES", "BIKEV", "BLOWJOBZ",
  4139. "BMX", "BOMBER", "BOX", "BSKTBALL", "BUDDY",
  4140. "BUS", "CAMERA", "CAR", "CAR_CHAT", "CARRY",
  4141. "CASINO", "CHAINSAW", "CHOPPA", "CLOTHES", "COACH",
  4142. "COLT45", "COP_AMBIENT", "COP_DVBYZ", "CRACK", "CRIB",
  4143. "DAM_JUMP", "DANCING", "DEALER", "DILDO", "DODGE",
  4144. "DOZER", "DRIVEBYS", "FAT", "FIGHT_B", "FIGHT_C",
  4145. "FIGHT_D", "FIGHT_E", "FINALE", "FINALE2", "FLAME",
  4146. "FLOWERS", "FOOD", "FREEWEIGHTS", "GANGS", "GFUNK",
  4147. "GHANDS", "GHETTO_DB", "GOGGLES", "GRAFFITI", "GRAVEYARD",
  4148. "GRENADE", "GYMNASIUM", "HAIRCUTS", "HEIST9", "INT_HOUSE",
  4149. "INT_OFFICE", "INT_SHOP", "JST_BUISNESS", "KART", "KISSING",
  4150. "KNIFE", "LAPDAN1", "LAPDAN2", "LAPDAN3", "LOWRIDER",
  4151. "MD_CHASE", "MD_END", "MEDIC", "MISC", "MTB",
  4152. "MUSCULAR", "NEVADA", "ON_LOOKERS", "OTB", "PARACHUTE",
  4153. "PARK", "PAULNMAC", "PED", "PLAYER_DVBYS", "PLAYIDLES",
  4154. "POLICE", "POOL", "POOR", "PYTHON", "QUAD",
  4155. "QUAD_DBZ", "RAPPING", "RIFLE", "RIOT", "ROB_BANK",
  4156. "ROCKET", "RUNNINGMAN", "RUSTLER", "RYDER", "SAMP",
  4157. "SCRATCHING", "SEX", "SHAMAL", "SHOP", "SHOTGUN",
  4158. "SILENCED", "SKATE", "SMOKING", "SNIPER", "SNM",
  4159. "SPRAYCAN", "STRIP", "SUNBATHE", "SWAT", "SWEET",
  4160. "SWIM", "SWORD", "TANK", "TATTOOS", "TEC",
  4161. "TRAIN", "TRUCK", "UZI", "VAN", "VENDING",
  4162. "VORTEX", "WAYFARER", "WEAPONS", "WOP", "WUZI"
  4163. },
  4164. #endif
  4165. /**
  4166. * <remarks>
  4167. * ".".
  4168. * </remarks>
  4169. */
  4170. FIXES_gscDot[] = ".",
  4171. /**
  4172. * <remarks>
  4173. * Specifier <c></c>.
  4174. * </remarks>
  4175. */
  4176. FIXES_gscSpec@[] = "",
  4177. /**
  4178. * <remarks>
  4179. * Specifier <c>i</c>.
  4180. * </remarks>
  4181. */
  4182. FIXES_gscSpec@i[] = "i",
  4183. /**
  4184. * <remarks>
  4185. * Specifier <c>ii</c>.
  4186. * </remarks>
  4187. */
  4188. FIXES_gscSpec@ii[] = "ii",
  4189. /**
  4190. * <remarks>
  4191. * Specifier <c>ai</c>.
  4192. * </remarks>
  4193. */
  4194. FIXES_gscSpec@ai[] = "ai",
  4195. /**
  4196. * <remarks>
  4197. * Specifier <c>is</c>.
  4198. * </remarks>
  4199. */
  4200. FIXES_gscSpec@is[] = "is",
  4201. /**
  4202. * <remarks>
  4203. * Specifier <c>iii</c>.
  4204. * </remarks>
  4205. */
  4206. FIXES_gscSpec@iii[] = "iii",
  4207. /**
  4208. * <remarks>
  4209. * Specifier <c>isii</c>.
  4210. * </remarks>
  4211. */
  4212. FIXES_gscSpec@isii[] = "isii",
  4213. /**
  4214. * <remarks>
  4215. * Specifier <c>ifff</c>.
  4216. * </remarks>
  4217. */
  4218. FIXES_gscSpec@ifff[] = "ifff",
  4219. /**
  4220. * <remarks>
  4221. * Specifier <c>iifff</c>.
  4222. * </remarks>
  4223. */
  4224. FIXES_gscSpec@iifff[] = "iifff",
  4225. /**
  4226. * <remarks>
  4227. * Specifier <c>iifffi</c>.
  4228. * </remarks>
  4229. */
  4230. FIXES_gscSpec@iifffi[] = "iifffi",
  4231. /**
  4232. * <remarks>
  4233. * Specifier <c>iifffffff</c>.
  4234. * </remarks>
  4235. */
  4236. FIXES_gscSpec@iifffffff[] = "iifffffff",
  4237. /**
  4238. * <remarks>
  4239. * Specifier <c>iffff</c>.
  4240. * </remarks>
  4241. */
  4242. FIXES_gscSpec@iffff[] = "iffff",
  4243. /**
  4244. * <remarks>
  4245. * Specifier <c>iiiis</c>.
  4246. * </remarks>
  4247. */
  4248. FIXES_gscSpec@iiiis[] = "iiiis",
  4249. /**
  4250. * <remarks>
  4251. * Specifier <c>iiiii</c>.
  4252. * </remarks>
  4253. */
  4254. FIXES_gscSpec@iiiii[] = "iiiii",
  4255. /**
  4256. * <remarks>
  4257. * Specifier <c>iiiiii</c>.
  4258. * </remarks>
  4259. */
  4260. FIXES_gscSpec@iiiiii[] = "iiiiii",
  4261. /**
  4262. * <remarks>
  4263. * The temporary name to give when renaming people.
  4264. * </remarks>
  4265. */
  4266. FIXES_gscTempName[] = "FIXES_TEMP_NAME",
  4267. /**
  4268. * <remarks>
  4269. * The property to check for script ordering.
  4270. * </remarks>
  4271. */
  4272. FIXES_gscOrderProperty[] = "FIXES_gscOrderProperty",
  4273. /**
  4274. * <remarks>
  4275. * Call <symbolref name="_FIXES_DetermineOrder" /> in the GM or not?
  4276. * </remarks>
  4277. */
  4278. FIXES_gscNoGMProperty[] = "FIXES_gscNoGMProperty",
  4279. /**
  4280. * <remarks>
  4281. * Name of the ordering callback.
  4282. * </remarks>
  4283. */
  4284. FIXES_gscDetermineOrder[] = "_FIXES_DetermineOrder",
  4285. /**
  4286. * <remarks>
  4287. * Name of the remote set player menu function.
  4288. * </remarks>
  4289. */
  4290. FIXES_gscSetPlayerMenu[] = "_FIXES_SetPlayerMenu",
  4291. /**
  4292. * <remarks>
  4293. * Name of the remote function to clear a player's menu set.
  4294. * </remarks>
  4295. */
  4296. FIXES_gscClearPlayerMenu[] = "_FIXES_ClearPlayerMenu",
  4297. /**
  4298. * <remarks>
  4299. * Name of the remote allow teleport function.
  4300. * </remarks>
  4301. */
  4302. FIXES_gscAllowTeleport[] = "_FIXES_AllowTeleport",
  4303. /**
  4304. * <remarks>
  4305. * Name of the remote vehicle entry function.
  4306. * </remarks>
  4307. */
  4308. FIXES_gscPutPlayerInVehicle[] = "_FIXES_PutPlayerInVehicle",
  4309. /**
  4310. * <remarks>
  4311. * Name of the remote interior weapons function.
  4312. * </remarks>
  4313. */
  4314. FIXES_gscAllowInteriorWeapons[] = "_FIXES_AllowInteriorWeapons",
  4315. /**
  4316. * <remarks>
  4317. * Name of the remote player toggle function.
  4318. * </remarks>
  4319. */
  4320. FIXES_gscTogglePlayerControl[] = "_FIXES_TogglePlayerControllable",
  4321. /**
  4322. * <remarks>
  4323. * Name of the remote player clock function.
  4324. * </remarks>
  4325. */
  4326. FIXES_gscTogglePlayerClock[] = "_FIXES_TogglePlayerClock",
  4327. /**
  4328. * <remarks>
  4329. * Name of the remote player clock function.
  4330. * </remarks>
  4331. */
  4332. FIXES_gscGetWeather[] = "_FIXES_GetWeather",
  4333. /**
  4334. * <remarks>
  4335. * Name of the remote world bounds function.
  4336. * </remarks>
  4337. */
  4338. FIXES_gscSetPlayerWorldBounds[] = "_FIXES_SetPlayerWorldBounds",
  4339. /**
  4340. * <remarks>
  4341. * Name of the remote GameText show function.
  4342. * </remarks>
  4343. */
  4344. FIXES_gscGameTextShow[] = "_FIXES_GameTextShow",
  4345. /**
  4346. * <remarks>
  4347. * The property for accurate returns.
  4348. * </remarks>
  4349. */
  4350. FIXES_gscReturnProperty[] = "FIXES_gscReturnProperty",
  4351. /**
  4352. * <remarks>
  4353. * The property for checking this is the only running script with fixes in.
  4354. * </remarks>
  4355. */
  4356. FIXES_gscSingleProperty[] = "FIXES_gscSingleProperty",
  4357. /**
  4358. * <remarks>
  4359. * The property for a player's current menu.
  4360. * </remarks>
  4361. */
  4362. FIXES_gscMenuProperty[] = "FIXES_gscMenuProperty",
  4363. /**
  4364. * <remarks>
  4365. * The property for a player's current menu.
  4366. * </remarks>
  4367. */
  4368. FIXES_gscRconFixFS[] = "callbackfix.amx",
  4369. /**
  4370. * <remarks>
  4371. * Error shown when multiple scripts are detected with <c>FIXES_SINGLE</c>.
  4372. * </remarks>
  4373. */
  4374. FIXES_gscMultiScriptError[] = "\7\7\7\7\7" "\n" \
  4375. "*** fixes.inc error: Running multiple scripts compiled with \"fixes.inc\"..." "\n" \
  4376. "*** Please compile your modes with \"#define FIXES_Single 0\" at the top, as" "\n" \
  4377. "*** this setting is no longer the default (to improve the more common case)." ;
  4378.  
  4379. /**
  4380. * <remarks>
  4381. * <c>_FIXES_KEY_AIM</c>
  4382. * <c>KEY_AIM</c>
  4383. *
  4384. * Because the default SA:MP includes missed this one.
  4385. * </remarks>
  4386. */
  4387.  
  4388. #define _FIXES_KEY_AIM (128)
  4389. #if FIX_KEY_AIM
  4390. #define KEY_AIM _FIXES_KEY_AIM
  4391. #endif
  4392.  
  4393. /**
  4394. * <remarks>
  4395. * <c>_FIXES_SPECIAL_ACTION_PISSING</c>
  4396. * <c>SPECIAL_ACTION_PISSING</c>
  4397. *
  4398. * Because the default SA:MP includes missed this one.
  4399. * </remarks>
  4400. */
  4401.  
  4402. #define _FIXES_SPECIAL_ACTION_PISSING (68)
  4403. #if FIX_SPECIAL_ACTION_PISSING
  4404. #define SPECIAL_ACTION_PISSING _FIXES_SPECIAL_ACTION_PISSING
  4405. #endif
  4406.  
  4407. /**
  4408. * <remarks>
  4409. * <c>IsValidVehicle</c>
  4410. *
  4411. * Because the default SA:MP includes missed this one.
  4412. * </remarks>
  4413. */
  4414.  
  4415. #if FIX_IsValidVehicle
  4416. native IsValidVehicle(vehicleid);
  4417. #endif
  4418.  
  4419. /**
  4420. * <remarks>
  4421. * <c>GetGravity</c>
  4422. *
  4423. * Because the default SA:MP includes missed this one.
  4424. * </remarks>
  4425. */
  4426.  
  4427. #if FIX_GetGravity
  4428. native Float:GetGravity();
  4429. #endif
  4430.  
  4431. /**
  4432. * <remarks>
  4433. * <c>gpci</c>
  4434. *
  4435. * Because the default SA:MP includes missed this one.
  4436. * </remarks>
  4437. */
  4438.  
  4439. #if FIX_gpci
  4440. native gpci(playerid, serial[], maxlen);
  4441. #endif
  4442.  
  4443. /**
  4444. * <remarks>
  4445. * <c>const</c>
  4446. *
  4447. * Better const-correctness on native functions.
  4448. * </remarks>
  4449. */
  4450.  
  4451. #if FIX_const
  4452.  
  4453. // a_actor
  4454. #if defined _ALS_ApplyActorAnimation
  4455. #error _ALS_ApplyActorAnimation defined
  4456. #endif
  4457. native CST_ApplyActorAnimation(actorid, const animlib[], const animname[], Float:fDelta, loop, lockx, locky, freeze, time) = ApplyActorAnimation;
  4458. native BAD_ApplyActorAnimation(actorid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time) = ApplyActorAnimation;
  4459. #define _ALS_ApplyActorAnimation
  4460. #define ApplyActorAnimation( CST_ApplyActorAnimation(
  4461.  
  4462. // a_http
  4463. // Try very hard to include it! The first one should be enough. Shame that
  4464. // include has no include guard in it, making it harder to use with Zeex's
  4465. // compiler.
  4466. #if !defined HTTP_ERROR_MALFORMED_RESPONSE
  4467. #tryinclude <a_http>
  4468. #endif
  4469. #if !defined HTTP_ERROR_MALFORMED_RESPONSE
  4470. #tryinclude "a_http"
  4471. #endif
  4472. #if !defined HTTP_ERROR_MALFORMED_RESPONSE
  4473. #tryinclude "..\a_http"
  4474. #endif
  4475. #if defined HTTP_ERROR_MALFORMED_RESPONSE
  4476. #if defined _ALS_HTTP
  4477. #error _ALS_HTTP defined
  4478. #endif
  4479. native CST_HTTP(index, type, const url[], const data[], const callback[]) = HTTP;
  4480. #define _ALS_HTTP
  4481. #define HTTP( CST_HTTP(
  4482. // Because a_http can be included multiple times (on one compiler),
  4483. // ensure that multiple definitions don't break (too quickly - there's
  4484. // nothing we can do if it gets included a load of times, but that's an
  4485. // issue you would get with the new compiler anyway).
  4486. #define CST_HTTP(%0,%1,%2[],%3[],%4[]); a_http_included_too_many_times(%0,%1,%2[],%3[],%4[]) = HTTP;
  4487. #endif
  4488.  
  4489. // a_npc
  4490. //
  4491. // native CONST_SetTimer(const funcname[], interval, repeating) = SetTimer;
  4492. // native CONST_SendChat(const msg[]) = SendChat;
  4493. // native CONST_SendCommand(const commandtext[]) = SendCommand;
  4494. // native CONST_StartRecordingPlayback(playbacktype, const recordname[]) = StartRecordingPlayback;
  4495. //
  4496.  
  4497. // a_objects
  4498. #if defined _ALS_SetObjectMaterial
  4499. #error _ALS_SetObjectMaterial defined
  4500. #endif
  4501. native CST_SetObjectMaterial(objectid, materialindex, modelid, const txdname[], const texturename[], materialcolor=0) = SetObjectMaterial;
  4502. #define _ALS_SetObjectMaterial
  4503. #define SetObjectMaterial( CST_SetObjectMaterial(
  4504. #if defined _ALS_SetPlayerObjectMaterial
  4505. #error _ALS_SetPlayerObjectMaterial defined
  4506. #endif
  4507. native CST_SetPlayerObjectMaterial(playerid, objectid, materialindex, modelid, const txdname[], const texturename[], materialcolor=0) = SetPlayerObjectMaterial;
  4508. #define _ALS_SetPlayerObjectMaterial
  4509. #define SetPlayerObjectMaterial( CST_SetPlayerObjectMaterial(
  4510. #if defined _ALS_SetObjectMaterialText
  4511. #error _ALS_SetObjectMaterialText defined
  4512. #endif
  4513. native CST_SetObjectMaterialText(objectid, const text[], materialindex = 0, materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0) = SetObjectMaterialText;
  4514. #define _ALS_SetObjectMaterialText
  4515. #define SetObjectMaterialText( CST_SetObjectMaterialText(
  4516. #if defined _ALS_SetPlayerObjMaterialText
  4517. #error _ALS_SetPlayerObjMaterialText defined
  4518. #endif
  4519. native CST_SetPlayerObjectMaterialText(playerid, objectid, const text[], materialindex = 0, materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0) = SetPlayerObjectMaterialText;
  4520. #define _ALS_SetPlayerObjMaterialText
  4521. #define SetPlayerObjectMaterialText( CST_SetPlayerObjectMaterialText(
  4522.  
  4523. // a_players
  4524. #if defined _ALS_PlayAudioStreamForPlayer
  4525. #error _ALS_PlayAudioStreamForPlayer defined
  4526. #endif
  4527. native CST_PlayAudioStreamForPlayer(playerid, const url[], Float:posX = 0.0, Float:posY = 0.0, Float:posZ = 0.0, Float:distance = 50.0, usepos = 0) = PlayAudioStreamForPlayer;
  4528. #define _ALS_PlayAudioStreamForPlayer
  4529. #define PlayAudioStreamForPlayer( CST_PlayAudioStreamForPlayer(
  4530. #if defined _ALS_SetPlayerShopName
  4531. #error _ALS_SetPlayerShopName defined
  4532. #endif
  4533. native CST_SetPlayerShopName(playerid, const shopname[]) = SetPlayerShopName;
  4534. #define _ALS_SetPlayerShopName
  4535. #define SetPlayerShopName( CST_SetPlayerShopName(
  4536. #if defined _ALS_CreatePlayerTextDraw
  4537. #error _ALS_CreatePlayerTextDraw defined
  4538. #endif
  4539. native PlayerText:CST_CreatePlayerTextDraw(playerid, Float:x, Float:y, const text[]) = CreatePlayerTextDraw;
  4540. native PlayerText:BAD_CreatePlayerTextDraw(playerid, Float:x, Float:y, text[]) = CreatePlayerTextDraw;
  4541. #define _ALS_CreatePlayerTextDraw
  4542. #define CreatePlayerTextDraw( CST_CreatePlayerTextDraw(
  4543. #if defined _ALS_PlayerTextDrawSetString
  4544. #error _ALS_PlayerTextDrawSetString defined
  4545. #endif
  4546. native CST_PlayerTextDrawSetString(playerid, PlayerText:text, const string[]) = PlayerTextDrawSetString;
  4547. native BAD_PlayerTextDrawSetString(playerid, PlayerText:text, string[]) = PlayerTextDrawSetString;
  4548. #define _ALS_PlayerTextDrawSetString
  4549. #define PlayerTextDrawSetString( CST_PlayerTextDrawSetString(
  4550. #if defined _ALS_SetPVarInt
  4551. #error _ALS_SetPVarInt defined
  4552. #endif
  4553. native CST_SetPVarInt(playerid, const varname[], int_value) = SetPVarInt;
  4554. #define _ALS_SetPVarInt
  4555. #define SetPVarInt( CST_SetPVarInt(
  4556. #if defined _ALS_GetPVarInt
  4557. #error _ALS_GetPVarInt defined
  4558. #endif
  4559. native CST_GetPVarInt(playerid, const varname[]) = GetPVarInt;
  4560. #define _ALS_GetPVarInt
  4561. #define GetPVarInt( CST_GetPVarInt(
  4562. #if defined _ALS_SetPVarString
  4563. #error _ALS_SetPVarString defined
  4564. #endif
  4565. native CST_SetPVarString(playerid, const varname[], const string_value[]) = SetPVarString;
  4566. #define _ALS_SetPVarString
  4567. #define SetPVarString( CST_SetPVarString(
  4568. #if defined _ALS_GetPVarString
  4569. #error _ALS_GetPVarString defined
  4570. #endif
  4571. native CST_GetPVarString(playerid, const varname[], string_return[], len) = GetPVarString;
  4572. native BAD_GetPVarString(playerid, varname[], string_return[], len) = GetPVarString;
  4573. #define _ALS_GetPVarString
  4574. #define GetPVarString( CST_GetPVarString(
  4575. #if defined _ALS_SetPVarFloat
  4576. #error _ALS_SetPVarFloat defined
  4577. #endif
  4578. native CST_SetPVarFloat(playerid, const varname[], Float:float_value) = SetPVarFloat;
  4579. #define _ALS_SetPVarFloat
  4580. #define SetPVarFloat( CST_SetPVarFloat(
  4581. #if defined _ALS_GetPVarFloat
  4582. #error _ALS_GetPVarFloat defined
  4583. #endif
  4584. native Float:CST_GetPVarFloat(playerid, const varname[]) = GetPVarFloat;
  4585. #define _ALS_GetPVarFloat
  4586. #define GetPVarFloat( CST_GetPVarFloat(
  4587. #if defined _ALS_DeletePVar
  4588. #error _ALS_DeletePVar defined
  4589. #endif
  4590. native CST_DeletePVar(playerid, const varname[]) = DeletePVar;
  4591. #define _ALS_DeletePVar
  4592. #define DeletePVar( CST_DeletePVar(
  4593. #if defined _ALS_GetPVarType
  4594. #error _ALS_GetPVarType defined
  4595. #endif
  4596. native CST_GetPVarType(playerid, const varname[]) = GetPVarType;
  4597. #define _ALS_GetPVarType
  4598. #define GetPVarType( CST_GetPVarType(
  4599. #if defined _ALS_SetPlayerChatBubble
  4600. #error _ALS_SetPlayerChatBubble defined
  4601. #endif
  4602. native CST_SetPlayerChatBubble(playerid, const text[], color, Float:drawdistance, expiretime) = SetPlayerChatBubble;
  4603. #define _ALS_SetPlayerChatBubble
  4604. #define SetPlayerChatBubble( CST_SetPlayerChatBubble(
  4605. #if defined _ALS_ApplyAnimation
  4606. #error _ALS_ApplyAnimation defined
  4607. #endif
  4608. native CST_ApplyAnimation(playerid, const animlib[], const animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0) = ApplyAnimation;
  4609. native BAD_ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0) = ApplyAnimation;
  4610. #define _ALS_ApplyAnimation
  4611. #define ApplyAnimation( CST_ApplyAnimation(
  4612. #if defined _ALS_StartRecordingPlayerData
  4613. #error _ALS_StartRecordingPlayerData defined
  4614. #endif
  4615. native CST_StartRecordingPlayerData(playerid, recordtype, const recordname[]) = StartRecordingPlayerData;
  4616. #define _ALS_StartRecordingPlayerData
  4617. #define StartRecordingPlayerData( CST_StartRecordingPlayerData(
  4618.  
  4619. // a_samp
  4620. #if defined _ALS_SetTimer
  4621. #error _ALS_SetTimer defined
  4622. #endif
  4623. native CST_SetTimer(const funcname[], interval, repeating) = SetTimer;
  4624. #define _ALS_SetTimer
  4625. #define SetTimer( CST_SetTimer(
  4626. #if defined _ALS_SetTimerEx
  4627. #error _ALS_SetTimerEx defined
  4628. #endif
  4629. native CST_SetTimerEx(const funcname[], interval, repeating, const format[], {Float,_}:...) = SetTimerEx;
  4630. #define _ALS_SetTimerEx
  4631. #define SetTimerEx( CST_SetTimerEx(
  4632. #if defined _ALS_SHA256_PassHash
  4633. #error _ALS_SHA256_PassHash defined
  4634. #endif
  4635. native CST_SHA256_PassHash(const password[], const salt[], ret_hash[], ret_hash_len) = SHA256_PassHash;
  4636. #define _ALS_SHA256_PassHash // SHA256 for password hashing
  4637. #define SHA256_PassHash( CST_SHA256_PassHash(
  4638. #if defined _ALS_SetSVarInt
  4639. #error _ALS_SetSVarInt defined
  4640. #endif
  4641. native CST_SetSVarInt(const varname[], int_value) = SetSVarInt;
  4642. #define _ALS_SetSVarInt
  4643. #define SetSVarInt( CST_SetSVarInt(
  4644. #if defined _ALS_GetSVarInt
  4645. #error _ALS_GetSVarInt defined
  4646. #endif
  4647. native CST_GetSVarInt(const varname[]) = GetSVarInt;
  4648. #define _ALS_GetSVarInt
  4649. #define GetSVarInt( CST_GetSVarInt(
  4650. #if defined _ALS_SetSVarString
  4651. #error _ALS_SetSVarString defined
  4652. #endif
  4653. native CST_SetSVarString(const varname[], const string_value[]) = SetSVarString;
  4654. #define _ALS_SetSVarString
  4655. #define SetSVarString( CST_SetSVarString(
  4656. #if defined _ALS_GetSVarString
  4657. #error _ALS_GetSVarString defined
  4658. #endif
  4659. native CST_GetSVarString(const varname[], string_return[], len) = GetSVarString;
  4660. native BAD_GetSVarString(varname[], string_return[], len) = GetSVarString;
  4661. #define _ALS_GetSVarString
  4662. #define GetSVarString( CST_GetSVarString(
  4663. #if defined _ALS_SetSVarFloat
  4664. #error _ALS_SetSVarFloat defined
  4665. #endif
  4666. native CST_SetSVarFloat(const varname[], Float:float_value) = SetSVarFloat;
  4667. #define _ALS_SetSVarFloat
  4668. #define SetSVarFloat( CST_SetSVarFloat(
  4669. #if defined _ALS_GetSVarFloat
  4670. #error _ALS_GetSVarFloat defined
  4671. #endif
  4672. native Float:CST_GetSVarFloat(const varname[]) = GetSVarFloat;
  4673. #define _ALS_GetSVarFloat
  4674. #define GetSVarFloat( CST_GetSVarFloat(
  4675. #if defined _ALS_DeleteSVar
  4676. #error _ALS_DeleteSVar defined
  4677. #endif
  4678. native CST_DeleteSVar(const varname[]) = DeleteSVar;
  4679. #define _ALS_DeleteSVar
  4680. #define DeleteSVar( CST_DeleteSVar(
  4681. #if defined _ALS_GetSVarType
  4682. #error _ALS_GetSVarType defined
  4683. #endif
  4684. native CST_GetSVarType(const varname[]) = GetSVarType;
  4685. #define _ALS_GetSVarType
  4686. #define GetSVarType( CST_GetSVarType(
  4687. #if defined _ALS_ConnectNPC
  4688. #error _ALS_ConnectNPC defined
  4689. #endif
  4690. native CST_ConnectNPC(const name[], const script[]) = ConnectNPC;
  4691. #define _ALS_ConnectNPC
  4692. #define ConnectNPC( CST_ConnectNPC(
  4693. #if defined _ALS_SendRconCommand
  4694. #error _ALS_SendRconCommand defined
  4695. #endif
  4696. native CST_SendRconCommand(const command[]) = SendRconCommand;
  4697. #define _ALS_SendRconCommand
  4698. #define SendRconCommand( CST_SendRconCommand(
  4699. // This is the only case where a variable is "const" but shouldn't be.
  4700. #if defined _ALS_GetPlayerVersion
  4701. #error _ALS_GetPlayerVersion defined
  4702. #endif
  4703. native CST_GetPlayerVersion(playerid, version[], len) = GetPlayerVersion;
  4704. #define _ALS_GetPlayerVersion
  4705. #define GetPlayerVersion( CST_GetPlayerVersion(
  4706. #if defined _ALS_BlockIpAddress
  4707. #error _ALS_BlockIpAddress defined
  4708. #endif
  4709. native CST_BlockIpAddress(const ip_address[], timems) = BlockIpAddress;
  4710. #define _ALS_BlockIpAddress
  4711. #define BlockIpAddress( CST_BlockIpAddress(
  4712. #if defined _ALS_UnBlockIpAddress
  4713. #error _ALS_UnBlockIpAddress defined
  4714. #endif
  4715. native CST_UnBlockIpAddress(const ip_address[]) = UnBlockIpAddress;
  4716. #define _ALS_UnBlockIpAddress
  4717. #define UnBlockIpAddress( CST_UnBlockIpAddress(
  4718. #if defined _ALS_TextDrawCreate
  4719. #error _ALS_TextDrawCreate defined
  4720. #endif
  4721. native Text:CST_TextDrawCreate(Float:x, Float:y, const text[]) = TextDrawCreate;
  4722. native Text:BAD_TextDrawCreate(Float:x, Float:y, text[]) = TextDrawCreate;
  4723. #define _ALS_TextDrawCreate
  4724. #define TextDrawCreate( CST_TextDrawCreate(
  4725. #if defined _ALS_TextDrawSetString
  4726. #error _ALS_TextDrawSetString defined
  4727. #endif
  4728. native CST_TextDrawSetString(Text:text, const string[]) = TextDrawSetString;
  4729. native BAD_TextDrawSetString(Text:text, string[]) = TextDrawSetString;
  4730. #define _ALS_TextDrawSetString
  4731. #define TextDrawSetString( CST_TextDrawSetString(
  4732. #if defined _ALS_Create3DTextLabel
  4733. #error _ALS_Create3DTextLabel defined
  4734. #endif
  4735. native Text3D:CST_Create3DTextLabel(const text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, virtualworld, testLOS=0) = Create3DTextLabel;
  4736. #define _ALS_Create3DTextLabel
  4737. #define Create3DTextLabel( CST_Create3DTextLabel(
  4738. #if defined _ALS_Update3DTextLabelText
  4739. #error _ALS_Update3DTextLabelText defined
  4740. #endif
  4741. native CST_Update3DTextLabelText(Text3D:id, color, const text[]) = Update3DTextLabelText;
  4742. #define _ALS_Update3DTextLabelText
  4743. #define Update3DTextLabelText( CST_Update3DTextLabelText(
  4744. #if defined _ALS_CreatePlayer3DTextLabel
  4745. #error _ALS_CreatePlayer3DTextLabel defined
  4746. #endif
  4747. native PlayerText3D:CST_CreatePlayer3DTextLabel(playerid, const text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, attachedplayer=INVALID_PLAYER_ID, attachedvehicle=INVALID_VEHICLE_ID, testLOS=0) = CreatePlayer3DTextLabel;
  4748. #define _ALS_CreatePlayer3DTextLabel
  4749. #define CreatePlayer3DTextLabel( CST_CreatePlayer3DTextLabel(
  4750. #if defined _ALS_UpdPlayer3DTextLabelText
  4751. #error _ALS_UpdPlayer3DTextLabelText defined
  4752. #endif
  4753. native CST_UpdatePlayer3DTextLabelText(playerid, PlayerText3D:id, color, const text[]) = UpdatePlayer3DTextLabelText;
  4754. #define _ALS_UpdPlayer3DTextLabelText
  4755. #define UpdatePlayer3DTextLabelText( CST_UpdatePlayer3DTextLabelText(
  4756. #if defined _ALS_ShowPlayerDialog
  4757. #error _ALS_ShowPlayerDialog defined
  4758. #endif
  4759. native CST_ShowPlayerDialog(playerid, dialogid, style, const caption[], const info[], const button1[], const button2[]) = ShowPlayerDialog;
  4760. native BAD_ShowPlayerDialog(playerid, dialog, style, title[], caption[], button1[], button2[]) = ShowPlayerDialog;
  4761. #define _ALS_ShowPlayerDialog
  4762. #define ShowPlayerDialog( CST_ShowPlayerDialog(
  4763.  
  4764. // a_sampdb
  4765. #if defined _ALS_db_open
  4766. #error _ALS_db_open defined
  4767. #endif
  4768. native DB:CST_db_open(const name[]) = db_open;
  4769. #define _ALS_db_open
  4770. #define db_open( CST_db_open(
  4771. #if defined _ALS_db_query
  4772. #error _ALS_db_query defined
  4773. #endif
  4774. native DBResult:CST_db_query(DB:db, const query[]) = db_query;
  4775. #define _ALS_db_query
  4776. #define db_query( CST_db_query(
  4777.  
  4778. // a_vehicles
  4779. #if defined _ALS_SetVehicleNumberPlate
  4780. #error _ALS_SetVehicleNumberPlate defined
  4781. #endif
  4782. native CST_SetVehicleNumberPlate(vehicleid, const numberplate[]) = SetVehicleNumberPlate;
  4783. #define _ALS_SetVehicleNumberPlate
  4784. #define SetVehicleNumberPlate( CST_SetVehicleNumberPlate(
  4785.  
  4786. #define _FIXES_MAYBE_CONST const
  4787. #else
  4788. #define _FIXES_MAYBE_CONST
  4789. #endif
  4790.  
  4791. /**
  4792. * <remarks>
  4793. * <c>WEAPONS</c>
  4794. *
  4795. * Because the default SA:MP includes missed some of these.
  4796. * </remarks>
  4797. */
  4798.  
  4799. #define _FIXES_WEAPON_FIST (0)
  4800. #define _FIXES_WEAPON_NIGHT_VIS_GOGGLES (44)
  4801. #define _FIXES_WEAPON_THERMAL_GOGGLES (45)
  4802.  
  4803. #if FIX_WEAPONS
  4804. #define WEAPON_FIST _FIXES_WEAPON_FIST
  4805. #define WEAPON_NIGHTSTICK WEAPON_NITESTICK
  4806. #define WEAPON_MOLOTOV WEAPON_MOLTOV
  4807. #define WEAPON_NIGHT_VIS_GOGGLES _FIXES_WEAPON_NIGHT_VIS_GOGGLES
  4808. #define WEAPON_THERMAL_GOGGLES _FIXES_WEAPON_THERMAL_GOGGLES
  4809. #endif
  4810.  
  4811. #define _FIXES_WEAPON_SLOTS (13)
  4812.  
  4813. /**
  4814. * <remarks>
  4815. * <c>BODYPARTS</c>
  4816. *
  4817. * Because the default SA:MP includes missed these.
  4818. * </remarks>
  4819. */
  4820.  
  4821. #if FIX_BODYPARTS
  4822. #define BODY_PART_TORSO (3)
  4823. #define BODY_PART_GROIN (4)
  4824. #define BODY_PART_LEFT_ARM (5)
  4825. #define BODY_PART_RIGHT_ARM (6)
  4826. #define BODY_PART_LEFT_LEG (7)
  4827. #define BODY_PART_RIGHT_LEG (8)
  4828. #define BODY_PART_HEAD (9)
  4829. #endif
  4830.  
  4831. /**
  4832. * <remarks>
  4833. * <c>CAMERAMODES</c>
  4834. *
  4835. * Because the default SA:MP includes missed these.
  4836. * </remarks>
  4837. */
  4838.  
  4839. #if FIX_CAMERAMODES
  4840. #define CAM_MODE_DISCONNECTED (-1)
  4841. #define CAM_MODE_NONE (0)
  4842. #define CAM_MODE_BEHINDCAR (3)
  4843. #define CAM_MODE_FOLLOWPED (4)
  4844. #define CAM_MODE_SNIPER (7)
  4845. #define CAM_MODE_ROCKETLAUNCHER (8)
  4846. #define CAM_MODE_FIXED (15)
  4847. #define CAM_MODE_1STPERSON (16)
  4848. #define CAM_MODE_CAM_ON_A_STRING (18)
  4849. #define CAM_MODE_BEHINDBOAT (22)
  4850. #define CAM_MODE_CAMERA (46)
  4851. #define CAM_MODE_ROCKETLAUNCHER_HS (51)
  4852. #define CAM_MODE_AIMWEAPON (53)
  4853. #define CAM_MODE_AIMWEAPON_FROMCAR (55)
  4854. #define CAM_MODE_DW_HELI_CHASE (56)
  4855. #endif
  4856.  
  4857. /**
  4858. * <remarks>
  4859. * <c>VEHICLES</c>
  4860. *
  4861. * Because the default SA:MP includes missed these.
  4862. * </remarks>
  4863. */
  4864.  
  4865. #if FIX_VEHICLES
  4866. #define VEHICLE_LANDSTALKER (400)
  4867. #define VEHICLE_BRAVURA (401)
  4868. #define VEHICLE_BUFFALO (402)
  4869. #define VEHICLE_LINERUNNER (403)
  4870. #define VEHICLE_PERRENIAL (404)
  4871. #define VEHICLE_SENTINEL (405)
  4872. #define VEHICLE_DUMPER (406)
  4873. #define VEHICLE_FIRETRUCK (407)
  4874. #define VEHICLE_TRASHMASTER (408)
  4875. #define VEHICLE_STRETCH (409)
  4876. #define VEHICLE_MANANA (410)
  4877. #define VEHICLE_INFERNUS (411)
  4878. #define VEHICLE_VOODOO (412)
  4879. #define VEHICLE_PONY (413)
  4880. #define VEHICLE_MULE (414)
  4881. #define VEHICLE_CHEETAH (415)
  4882. #define VEHICLE_AMBULANCE (416)
  4883. #define VEHICLE_LEVIATHAN (417)
  4884. #define VEHICLE_MOONBEAM (418)
  4885. #define VEHICLE_ESPERANTO (419)
  4886. #define VEHICLE_TAXI (420)
  4887. #define VEHICLE_WASHINGTON (421)
  4888. #define VEHICLE_BOBCAT (422)
  4889. #define VEHICLE_MRWHOOPEE (423)
  4890. #define VEHICLE_BFINJECTION (424)
  4891. #define VEHICLE_HUNTER (425)
  4892. #define VEHICLE_PREMIER (426)
  4893. #define VEHICLE_ENFORCER (427)
  4894. #define VEHICLE_SECURICAR (428)
  4895. #define VEHICLE_BANSHEE (429)
  4896. #define VEHICLE_PREDATOR (430)
  4897. #define VEHICLE_BUS (431)
  4898. #define VEHICLE_RHINO (432)
  4899. #define VEHICLE_BARRACKS (433)
  4900. #define VEHICLE_HOTKNIFE (434)
  4901. #define VEHICLE_ARTICLETRAILER1 (435)
  4902. #define VEHICLE_PREVION (436)
  4903. #define VEHICLE_COACH (437)
  4904. #define VEHICLE_CABBIE (438)
  4905. #define VEHICLE_STALLION (439)
  4906. #define VEHICLE_RUMPO (440)
  4907. #define VEHICLE_RCBANDIT (441)
  4908. #define VEHICLE_ROMERO (442)
  4909. #define VEHICLE_PACKER (443)
  4910. #define VEHICLE_MONSTER (444)
  4911. #define VEHICLE_ADMIRAL (445)
  4912. #define VEHICLE_SQUALO (446)
  4913. #define VEHICLE_SEASPARROW (447)
  4914. #define VEHICLE_PIZZABOY (448)
  4915. #define VEHICLE_TRAM (449)
  4916. #define VEHICLE_ARTICLETRAILER2 (450)
  4917. #define VEHICLE_TURISMO (451)
  4918. #define VEHICLE_SPEEDER (452)
  4919. #define VEHICLE_REEFER (453)
  4920. #define VEHICLE_TROPIC (454)
  4921. #define VEHICLE_FLATBED (455)
  4922. #define VEHICLE_YANKEE (456)
  4923. #define VEHICLE_CADDY (457)
  4924. #define VEHICLE_SOLAIR (458)
  4925. #define VEHICLE_BERKLEYSRCVAN (459)
  4926. #define VEHICLE_SKIMMER (460)
  4927. #define VEHICLE_PCJ600 (461)
  4928. #define VEHICLE_FAGGIO (462)
  4929. #define VEHICLE_FREEWAY (463)
  4930. #define VEHICLE_RCBARON (464)
  4931. #define VEHICLE_RCRAIDER (465)
  4932. #define VEHICLE_GLENDALE (466)
  4933. #define VEHICLE_OCEANIC (467)
  4934. #define VEHICLE_SANCHEZ (468)
  4935. #define VEHICLE_SPARROW (469)
  4936. #define VEHICLE_PATRIOT (470)
  4937. #define VEHICLE_QUAD (471)
  4938. #define VEHICLE_COASTGUARD (472)
  4939. #define VEHICLE_DINGHY (473)
  4940. #define VEHICLE_HERMES (474)
  4941. #define VEHICLE_SABRE (475)
  4942. #define VEHICLE_RUSTLER (476)
  4943. #define VEHICLE_ZR350 (477)
  4944. #define VEHICLE_WALTON (478)
  4945. #define VEHICLE_REGINA (479)
  4946. #define VEHICLE_COMET (480)
  4947. #define VEHICLE_BMX (481)
  4948. #define VEHICLE_BURRITO (482)
  4949. #define VEHICLE_CAMPER (483)
  4950. #define VEHICLE_MARQUIS (484)
  4951. #define VEHICLE_BAGGAGE (485)
  4952. #define VEHICLE_DOZER (486)
  4953. #define VEHICLE_MAVERICK (487)
  4954. #define VEHICLE_SANNEWSMAVERICK (488)
  4955. #define VEHICLE_RANCHER (489)
  4956. #define VEHICLE_FBIRANCHER (490)
  4957. #define VEHICLE_VIRGO (491)
  4958. #define VEHICLE_GREENWOOD (492)
  4959. #define VEHICLE_JETMAX (493)
  4960. #define VEHICLE_HOTRINGRACER (494)
  4961. #define VEHICLE_SANDKING (495)
  4962. #define VEHICLE_BLISTACOMPACT (496)
  4963. #define VEHICLE_POLICEMAVERICK (497)
  4964. #define VEHICLE_BOXVILLE (498)
  4965. #define VEHICLE_BENSON (499)
  4966. #define VEHICLE_MESA (500)
  4967. #define VEHICLE_RCGOBLIN (501)
  4968. #define VEHICLE_HOTRINGRACERA (502)
  4969. #define VEHICLE_HOTRINGRACERB (503)
  4970. #define VEHICLE_BLOODRINGBANGER (504)
  4971. #define VEHICLE_RANCHERLURE (505)
  4972. #define VEHICLE_SUPERGT (506)
  4973. #define VEHICLE_ELEGANT (507)
  4974. #define VEHICLE_JOURNEY (508)
  4975. #define VEHICLE_BIKE (509)
  4976. #define VEHICLE_MOUNTAINBIKE (510)
  4977. #define VEHICLE_BEAGLE (511)
  4978. #define VEHICLE_CROPDUST (512)
  4979. #define VEHICLE_STUNTPLANE (513)
  4980. #define VEHICLE_TANKER (514)
  4981. #define VEHICLE_ROADTRAIN (515)
  4982. #define VEHICLE_NEBULA (516)
  4983. #define VEHICLE_MAJESTIC (517)
  4984. #define VEHICLE_BUCCANEER (518)
  4985. #define VEHICLE_SHAMAL (519)
  4986. #define VEHICLE_HYDRA (520)
  4987. #define VEHICLE_FCR900 (521)
  4988. #define VEHICLE_NRG500 (522)
  4989. #define VEHICLE_HPV1000 (523)
  4990. #define VEHICLE_CEMENTTRUCK (524)
  4991. #define VEHICLE_TOWTRUCK (525)
  4992. #define VEHICLE_FORTUNE (526)
  4993. #define VEHICLE_CADRONA (527)
  4994. #define VEHICLE_FBITRUCK (528)
  4995. #define VEHICLE_WILLARD (529)
  4996. #define VEHICLE_FORKLIFT (530)
  4997. #define VEHICLE_TRACTOR (531)
  4998. #define VEHICLE_COMBINE (532)
  4999. #define VEHICLE_FELTZER (533)
  5000. #define VEHICLE_REMINGTON (534)
  5001. #define VEHICLE_SLAMVAN (535)
  5002. #define VEHICLE_BLADE (536)
  5003. #define VEHICLE_FREIGHT (537)
  5004. #define VEHICLE_BROWNSTREAK (538)
  5005. #define VEHICLE_VORTEX (539)
  5006. #define VEHICLE_VINCENT (540)
  5007. #define VEHICLE_BULLET (541)
  5008. #define VEHICLE_CLOVER (542)
  5009. #define VEHICLE_SADLER (543)
  5010. #define VEHICLE_FIRETRUCKLA (544)
  5011. #define VEHICLE_HUSTLER (545)
  5012. #define VEHICLE_INTRUDER (546)
  5013. #define VEHICLE_PRIMO (547)
  5014. #define VEHICLE_CARGOBOB (548)
  5015. #define VEHICLE_TAMPA (549)
  5016. #define VEHICLE_SUNRISE (550)
  5017. #define VEHICLE_MERIT (551)
  5018. #define VEHICLE_UTILITYVAN (552)
  5019. #define VEHICLE_NEVADA (553)
  5020. #define VEHICLE_YOSEMITE (554)
  5021. #define VEHICLE_WINDSOR (555)
  5022. #define VEHICLE_MONSTERA (556)
  5023. #define VEHICLE_MONSTERB (557)
  5024. #define VEHICLE_URANUS (558)
  5025. #define VEHICLE_JESTER (559)
  5026. #define VEHICLE_SULTAN (560)
  5027. #define VEHICLE_STRATUM (561)
  5028. #define VEHICLE_ELEGY (562)
  5029. #define VEHICLE_RAINDANCE (563)
  5030. #define VEHICLE_RCTIGER (564)
  5031. #define VEHICLE_FLASH (565)
  5032. #define VEHICLE_TAHOMA (566)
  5033. #define VEHICLE_SAVANNA (567)
  5034. #define VEHICLE_BANDITO (568)
  5035. #define VEHICLE_FREIGHTFLATTRAILER (569)
  5036. #define VEHICLE_STREAKTRAILER (570)
  5037. #define VEHICLE_KART (571)
  5038. #define VEHICLE_MOWER (572)
  5039. #define VEHICLE_DUNERIDE (573)
  5040. #define VEHICLE_SWEEPER (574)
  5041. #define VEHICLE_BROADWAY (575)
  5042. #define VEHICLE_TORNADO (576)
  5043. #define VEHICLE_AT400 (577)
  5044. #define VEHICLE_DFT30 (578)
  5045. #define VEHICLE_HUNTLEY (579)
  5046. #define VEHICLE_STAFFORD (580)
  5047. #define VEHICLE_BF400 (581)
  5048. #define VEHICLE_NEWSVAN (582)
  5049. #define VEHICLE_TUG (583)
  5050. #define VEHICLE_PETROLTRAILER (584)
  5051. #define VEHICLE_EMPEROR (585)
  5052. #define VEHICLE_WAYFARER (586)
  5053. #define VEHICLE_EUROS (587)
  5054. #define VEHICLE_HOTDOG (588)
  5055. #define VEHICLE_CLUB (589)
  5056. #define VEHICLE_FREIGHTBOXTRAILER (590)
  5057. #define VEHICLE_ARTICLETRAILER3 (591)
  5058. #define VEHICLE_ANDROMADA (592)
  5059. #define VEHICLE_DODO (593)
  5060. #define VEHICLE_RCCAM (594)
  5061. #define VEHICLE_LAUNCH (595)
  5062. #define VEHICLE_POLICECARLSPD (596)
  5063. #define VEHICLE_POLICECARSFPD (597)
  5064. #define VEHICLE_POLICECARLVPD (598)
  5065. #define VEHICLE_POLICERANGER (599)
  5066. #define VEHICLE_PICADOR (600)
  5067. #define VEHICLE_SWAT (601)
  5068. #define VEHICLE_ALPHA (602)
  5069. #define VEHICLE_PHOENIX (603)
  5070. #define VEHICLE_GLENDALESHIT (604)
  5071. #define VEHICLE_SADLERSHIT (605)
  5072. #define VEHICLE_BAGGAGETRAILERA (606)
  5073. #define VEHICLE_BAGGAGETRAILERB (607)
  5074. #define VEHICLE_TUGSTAIRSTRAILER (608)
  5075. #define VEHICLE_BOXBURG (609)
  5076. #define VEHICLE_FARMTRAILER (610)
  5077. #define VEHICLE_UTILITYTRAILER (611)
  5078. #endif
  5079.  
  5080. /**
  5081. * <remarks>
  5082. * <c>IS_JIT</c>
  5083. *
  5084. * True when the code is JIT compiled.
  5085. * </remarks>
  5086. */
  5087.  
  5088. #if FIX_JIT
  5089. #define IS_JIT (_FIXES_gIsJIT)
  5090. #endif
  5091.  
  5092. /**
  5093. * <remarks>
  5094. * <c>IS_FILTERSCRIPT</c>
  5095. *
  5096. * "FILTERSCRIPT" can't always be relied on to be set. This is not a pre-
  5097. * processor macro, but may be better than nothing (also used internally).
  5098. * </remarks>
  5099. */
  5100.  
  5101. #if FIX_FILTERSCRIPT
  5102. #define IS_FILTERSCRIPT (_FIXES_gIsFilterscript)
  5103. #endif
  5104.  
  5105. /**
  5106. * <remarks>
  5107. * <c>IS_WINDOWS</c>
  5108. *
  5109. * True when the code is running on Windows. NOT a pre-processor macro, since
  5110. * the OS you are running the code on can't be determined at compile-time.
  5111. *
  5112. * <c>IS_LINUX</c>
  5113. *
  5114. * True when the code is running on Linux. NOT a pre-processor macro, since the
  5115. * OS you are running the code on can't be determined at compile-time.
  5116. * </remarks>
  5117. */
  5118.  
  5119. #if FIX_OS
  5120. #define IS_WINDOWS (_FIXES_gIsWindows)
  5121. #define IS_LINUX (!_FIXES_gIsWindows)
  5122. #endif
  5123.  
  5124. /**
  5125. * <remarks>
  5126. * Figure out what OS this is running on.
  5127. * </remarks>
  5128. * <fixes>IS_WINDOWS</fixes>
  5129. * <fixes>IS_LINUX</fixes>
  5130. */
  5131.  
  5132. static _FIXES_DetermineOS()
  5133. {
  5134. if (FIXES_gsKnownOS)
  5135. {
  5136. return;
  5137. }
  5138. FIXES_gsKnownOS = true;
  5139. new
  5140. val;
  5141. // The code at address 0 is always `HALT`.
  5142. #emit LCTRL 0
  5143. #emit MOVE.alt
  5144. #emit LCTRL 1
  5145. #emit SUB.alt
  5146. #emit STOR.S.pri val
  5147. #emit LREF.S.alt val
  5148. #emit STOR.S.alt val
  5149. _FIXES_gIsWindows = (val == 120);
  5150. }
  5151.  
  5152. /**
  5153. * <remarks>
  5154. * File operators
  5155. *
  5156. * Forwards for operators that shouldn't exist, so they won't exist.
  5157. * </remarks>
  5158. */
  5159.  
  5160. #if FIX_FileMaths
  5161. forward File:operator++(File:a);
  5162. forward File:operator--(File:a);
  5163. forward File:operator-(File:a);
  5164. forward File:operator+(File:a, File:b);
  5165. forward File:operator+(File:a, _:b);
  5166. forward File:operator-(File:a, File:b);
  5167. forward File:operator-(_:a, File:b);
  5168. forward File:operator-(File:a, _:b);
  5169. forward File:operator*(File:a, File:b);
  5170. forward File:operator*(File:a, _:b);
  5171. forward File:operator/(File:a, File:b);
  5172. forward File:operator/(_:a, File:b);
  5173. forward File:operator/(File:a, _:b);
  5174. forward File:operator%(File:a, File:b);
  5175. forward File:operator%(_:a, File:b);
  5176. forward File:operator%(File:a, _:b);
  5177. forward bool:operator<(File:a, File:b);
  5178. forward bool:operator<(_:a, File:b);
  5179. forward bool:operator<(File:a, _:b);
  5180. forward bool:operator<=(File:a, File:b);
  5181. forward bool:operator<=(_:a, File:b);
  5182. forward bool:operator<=(File:a, _:b);
  5183. forward bool:operator>(File:a, File:b);
  5184. forward bool:operator>(_:a, File:b);
  5185. forward bool:operator>(File:a, _:b);
  5186. forward bool:operator>=(File:a, File:b);
  5187. forward bool:operator>=(_:a, File:b);
  5188. forward bool:operator>=(File:a, _:b);
  5189. #endif
  5190.  
  5191. /**
  5192. * <remarks>
  5193. * Declare the function to reset the car-jacked player id to invalid id.
  5194. * </remarks>
  5195. */
  5196.  
  5197. #if FIX_SilentTeleport
  5198. forward FIXES_RemoveJackedId(playerid);
  5199. public FIXES_RemoveJackedId(playerid) return FIXES_gsJackedId[playerid] = INVALID_PLAYER_ID;
  5200. #endif
  5201.  
  5202. /**
  5203. * <fixes>SilentTeleport</fixes>
  5204. */
  5205. #if defined _ALS_SetVehiclePos
  5206. #error _ALS_SetVehiclePos defined
  5207. #endif
  5208. native BAD_SetVehiclePos(vehicleid, Float:x, Float:y, Float:z) = SetVehiclePos;
  5209.  
  5210. /**
  5211. * <fixes>SilentTeleport</fixes>
  5212. */
  5213.  
  5214. #if FIX_SilentTeleport
  5215. stock FIXES_SetVehiclePos(vehicleid, Float:x, Float:y, Float:z)
  5216. {
  5217.  
  5218. // Validity check to prevent array out of bounds.
  5219. if (!SetVehiclePos(vehicleid, x, y, z))
  5220. {
  5221. return 0;
  5222. }
  5223.  
  5224. _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
  5225. {
  5226. if (GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerVehicleID(i) == vehicleid)
  5227. {
  5228. if (FIXES_gsJackedId[i] != INVALID_PLAYER_ID)
  5229. {
  5230. ClearAnimations(FIXES_gsJackedId[i]);
  5231. break;
  5232. }
  5233. }
  5234. }
  5235. return 1;
  5236. }
  5237.  
  5238. #define _ALS_SetVehiclePos
  5239. #define SetVehiclePos( FIXES_SetVehiclePos(
  5240. #endif
  5241.  
  5242. /**
  5243. * <remarks>
  5244. * Figure out which script is called first by callbacks.
  5245. * </remarks>
  5246. */
  5247.  
  5248. #if !FIXES_Single
  5249. forward _FIXES_DetermineOrder();
  5250.  
  5251. static FIXES_DetermineOrder()
  5252. {
  5253. deleteproperty(5, FIXES_gscOrderProperty),
  5254. // Called in the Game Mode first (thus needs correcting).
  5255. setproperty(5, FIXES_gscNoGMProperty, 1),
  5256. CallRemoteFunction(FIXES_gscDetermineOrder, FIXES_gscSpec@),
  5257. deleteproperty(5, FIXES_gscNoGMProperty),
  5258. CallRemoteFunction(FIXES_gscDetermineOrder, FIXES_gscSpec@);
  5259. }
  5260. #endif
  5261.  
  5262. /**
  5263. * <fixes>IsPlayerConnected</fixes>
  5264. */
  5265.  
  5266. #if defined _ALS_IsPlayerConnected
  5267. #error _ALS_IsPlayerConnected defined
  5268. #endif
  5269. native BAD_IsPlayerConnected(playerid) = IsPlayerConnected;
  5270.  
  5271. /**
  5272. * <fixes>IsPlayerConnected</fixes>
  5273. */
  5274.  
  5275. #if FIX_IsPlayerConnected
  5276. stock FIXES_IsPlayerConnected(playerid)
  5277. {
  5278. return _FIXES_IS_PLAYER_CONNECTED(playerid);
  5279. }
  5280.  
  5281. #define _ALS_IsPlayerConnected
  5282. #define IsPlayerConnected( FIXES_IsPlayerConnected(
  5283. #endif
  5284.  
  5285. /**
  5286. * <remarks>
  5287. * Create the text draws used to replicate game texts.
  5288. * </remarks>
  5289. * <fixes>GameText</fixes>
  5290. */
  5291.  
  5292. #if FIX_GameText
  5293. static _FIXES_CreateGameTextDraws(const playerid)
  5294. {
  5295. if (playerid == INVALID_PLAYER_ID)
  5296. {
  5297. new
  5298. Text:t;
  5299.  
  5300. #if FIX_GameTextStyles
  5301.  
  5302. // Global style 7 (vehicle name).
  5303. t = FIXES_gsGTStyle[7] = TextDrawCreate(608.000000, 344.000000, FIXES_gsSpace),
  5304. TextDrawLetterSize(t, 1.000000, 3.000000),
  5305. TextDrawAlignment(t, 3),
  5306. TextDrawColor(t, 0x36682CFF),
  5307. TextDrawSetShadow(t, 0),
  5308. TextDrawSetOutline(t, 2),
  5309. TextDrawBackgroundColor(t, 0x000000AA),
  5310. TextDrawFont(t, 2),
  5311. TextDrawSetProportional(t, 1),
  5312. TextDrawUseBox(t, true),
  5313. TextDrawBoxColor(t, 0x00000000),
  5314. TextDrawTextSize(t, 10.0, 200.0);
  5315.  
  5316. // Global style 8 (location name).
  5317. t = FIXES_gsGTStyle[8] = TextDrawCreate(608.000000, 385.800000, FIXES_gsSpace),
  5318. TextDrawLetterSize(t, 1.200000, 3.799998),
  5319. TextDrawAlignment(t, 3),
  5320. TextDrawColor(t, 0xACCBF1FF),
  5321. TextDrawSetShadow(t, 0),
  5322. TextDrawSetOutline(t, 2),
  5323. TextDrawBackgroundColor(t, 0x000000AA),
  5324. TextDrawFont(t, 0),
  5325. TextDrawSetProportional(t, 1),
  5326. TextDrawUseBox(t, true),
  5327. TextDrawBoxColor(t, 0x00000000),
  5328. TextDrawTextSize(t, 10.0, 200.0);
  5329.  
  5330. // Global style 9 (radio name).
  5331. t = FIXES_gsGTStyle[9] = TextDrawCreate(320.000000, 22.000000, FIXES_gsSpace),
  5332. TextDrawLetterSize(t, 0.600000, 1.799999),
  5333. TextDrawAlignment(t, 2),
  5334. TextDrawColor(t, 0x906210FF),
  5335. TextDrawSetShadow(t, 0),
  5336. TextDrawSetOutline(t, 1),
  5337. TextDrawBackgroundColor(t, 0x000000AA),
  5338. TextDrawFont(t, 2),
  5339. TextDrawSetProportional(t, 1),
  5340. TextDrawUseBox(t, true),
  5341. TextDrawBoxColor(t, 0x00000000),
  5342. TextDrawTextSize(t, 200.0, 620.0);
  5343.  
  5344. // Global style 10 (radio switch).
  5345. t = FIXES_gsGTStyle[10] = TextDrawCreate(320.000000, 22.000000, FIXES_gsSpace),
  5346. TextDrawLetterSize(t, 0.600000, 1.799999),
  5347. TextDrawAlignment(t, 2),
  5348. TextDrawColor(t, 0x969696FF),
  5349. TextDrawSetShadow(t, 0),
  5350. TextDrawSetOutline(t, 1),
  5351. TextDrawBackgroundColor(t, 0x000000AA),
  5352. TextDrawFont(t, 2),
  5353. TextDrawSetProportional(t, 1),
  5354. TextDrawUseBox(t, true),
  5355. TextDrawBoxColor(t, 0x00000000),
  5356. TextDrawTextSize(t, 200.0, 620.0);
  5357.  
  5358. // Global style 11 (positive money).
  5359. t = FIXES_gsGTStyle[11] = TextDrawCreate(608.000000, 77.000000, FIXES_gsSpace),
  5360. TextDrawLetterSize(t, 0.550000, 2.200000),
  5361. TextDrawAlignment(t, 3),
  5362. TextDrawColor(t, 0x36682CFF),
  5363. TextDrawSetShadow(t, 0),
  5364. TextDrawSetOutline(t, 2),
  5365. TextDrawBackgroundColor(t, 0x000000AA),
  5366. TextDrawFont(t, 3),
  5367. TextDrawSetProportional(t, 0),
  5368. TextDrawUseBox(t, true),
  5369. TextDrawBoxColor(t, 0x00000000),
  5370. TextDrawTextSize(t, 10.0, 200.0);
  5371.  
  5372. // Global style 12 (negative money).
  5373. t = FIXES_gsGTStyle[12] = TextDrawCreate(608.000000, 77.000000, FIXES_gsSpace),
  5374. TextDrawLetterSize(t, 0.550000, 2.200000),
  5375. TextDrawAlignment(t, 3),
  5376. TextDrawColor(t, 0xB4191DFF),
  5377. TextDrawSetShadow(t, 0),
  5378. TextDrawSetOutline(t, 2),
  5379. TextDrawBackgroundColor(t, 0x000000AA),
  5380. TextDrawFont(t, 3),
  5381. TextDrawSetProportional(t, 0),
  5382. TextDrawUseBox(t, true),
  5383. TextDrawBoxColor(t, 0x00000000),
  5384. TextDrawTextSize(t, 10.0, 200.0);
  5385.  
  5386. // Global style 13 (stunt).
  5387. t = FIXES_gsGTStyle[13] = TextDrawCreate(380.000000, 341.150000, FIXES_gsSpace),
  5388. TextDrawLetterSize(t, 0.579999, 2.420000),
  5389. TextDrawTextSize(t, 40.000000, 460.000000),
  5390. TextDrawAlignment(t, 2),
  5391. TextDrawColor(t, 0xDDDDDBFF),
  5392. TextDrawUseBox(t, true),
  5393. TextDrawBoxColor(t, 0),
  5394. TextDrawSetShadow(t, 2),
  5395. TextDrawSetOutline(t, 0),
  5396. TextDrawBackgroundColor(t, 0x000000AA),
  5397. TextDrawFont(t, 1),
  5398. TextDrawSetProportional(t, 1),
  5399.  
  5400. #endif
  5401.  
  5402. // Global style 0.
  5403. t = FIXES_gsGTStyle[0] = TextDrawCreate(320.0, 214.0, FIXES_gsSpace),
  5404. TextDrawLetterSize(t, 1.3, 3.6),
  5405. TextDrawAlignment(t, 2),
  5406. TextDrawColor(t, 0x906210FF),
  5407. TextDrawSetShadow(t, 0),
  5408. TextDrawSetOutline(t, 2),
  5409. TextDrawBackgroundColor(t, 0x000000AA),
  5410. TextDrawFont(t, 3),
  5411. TextDrawSetProportional(t, 1),
  5412. TextDrawUseBox(t, true),
  5413. TextDrawBoxColor(t, 0x00000000),
  5414. TextDrawTextSize(t, 200.0, 620.0);
  5415.  
  5416. // Global style 1.
  5417. t = FIXES_gsGTStyle[1] = TextDrawCreate(620.0, 310.0, FIXES_gsSpace),
  5418. TextDrawLetterSize(t, 1.0, 2.6),
  5419. TextDrawAlignment(t, 3),
  5420. TextDrawColor(t, 0x906210FF),
  5421. TextDrawSetShadow(t, 0),
  5422. TextDrawSetOutline(t, 2),
  5423. TextDrawBackgroundColor(t, 0x000000AA),
  5424. TextDrawFont(t, 3),
  5425. TextDrawSetProportional(t, 1),
  5426. TextDrawUseBox(t, true),
  5427. TextDrawBoxColor(t, 0x00000000),
  5428. TextDrawTextSize(t, 10.0, 200.0);
  5429.  
  5430. // Global style 2.
  5431. t = FIXES_gsGTStyle[2] = TextDrawCreate(320.0, 156.0, FIXES_gsSpace),
  5432. TextDrawLetterSize(t, 2.1, 4.2),
  5433. TextDrawAlignment(t, 2),
  5434. TextDrawColor(t, 0xE1E1E1FF),
  5435. TextDrawSetShadow(t, 0),
  5436. TextDrawSetOutline(t, 3),
  5437. TextDrawBackgroundColor(t, 0x000000AA),
  5438. TextDrawFont(t, 0),
  5439. TextDrawSetProportional(t, 1),
  5440. TextDrawUseBox(t, true),
  5441. TextDrawBoxColor(t, 0x00000000),
  5442. TextDrawTextSize(t, 200.0, 620.0);
  5443.  
  5444. // Global style 3.
  5445. t = FIXES_gsGTStyle[3] = TextDrawCreate(320.000000, 154.500000, FIXES_gsSpace),
  5446. TextDrawLetterSize(t, 0.600000, 2.750000),
  5447. TextDrawAlignment(t, 2),
  5448. TextDrawColor(t, 0x906210FF),
  5449. TextDrawSetShadow(t, 0),
  5450. TextDrawSetOutline(t, 2),
  5451. TextDrawBackgroundColor(t, 0x000000AA),
  5452. TextDrawFont(t, 2),
  5453. TextDrawSetProportional(t, 1),
  5454. TextDrawUseBox(t, true),
  5455. TextDrawBoxColor(t, 0x00000000),
  5456. TextDrawTextSize(t, 200.0, 620.0);
  5457.  
  5458. // Global style 4.
  5459. t = FIXES_gsGTStyle[4] = TextDrawCreate(320.000000, 115.500000, FIXES_gsSpace),
  5460. TextDrawLetterSize(t, 0.600000, 2.750000),
  5461. TextDrawAlignment(t, 2),
  5462. TextDrawColor(t, 0x906210FF),
  5463. TextDrawSetShadow(t, 0),
  5464. TextDrawSetOutline(t, 2),
  5465. TextDrawBackgroundColor(t, 0x000000AA),
  5466. TextDrawFont(t, 2),
  5467. TextDrawSetProportional(t, 1),
  5468. TextDrawUseBox(t, true),
  5469. TextDrawBoxColor(t, 0x00000000),
  5470. TextDrawTextSize(t, 200.0, 620.0);
  5471.  
  5472. // Global style 5.
  5473. t = FIXES_gsGTStyle[5] = TextDrawCreate(320.0, 217.0, FIXES_gsSpace),
  5474. TextDrawLetterSize(t, 0.6, 2.75),
  5475. TextDrawAlignment(t, 2),
  5476. TextDrawColor(t, 0xE1E1E1FF),
  5477. TextDrawSetShadow(t, 0),
  5478. TextDrawSetOutline(t, 2),
  5479. TextDrawBackgroundColor(t, 0x000000AA),
  5480. TextDrawFont(t, 2),
  5481. TextDrawSetProportional(t, 1),
  5482. TextDrawUseBox(t, true),
  5483. TextDrawBoxColor(t, 0x00000000),
  5484. TextDrawTextSize(t, 200.0, 620.0);
  5485.  
  5486. // Global style 6.
  5487. t = FIXES_gsGTStyle[6] = TextDrawCreate(320.000000, 60.000000, FIXES_gsSpace),
  5488. TextDrawLetterSize(t, 1.000000, 3.599998),
  5489. TextDrawAlignment(t, 2),
  5490. TextDrawColor(t, 0xACCBF1FF),
  5491. TextDrawSetShadow(t, 0),
  5492. TextDrawSetOutline(t, 2),
  5493. TextDrawBackgroundColor(t, 0x000000AA),
  5494. TextDrawFont(t, 3),
  5495. TextDrawSetProportional(t, 1),
  5496. TextDrawUseBox(t, true),
  5497. TextDrawBoxColor(t, 0x00000000),
  5498. TextDrawTextSize(t, 200.0, 620.0);
  5499. }
  5500. else
  5501. {
  5502. new
  5503. PlayerText:t;
  5504.  
  5505. #if FIX_GameTextStyles
  5506.  
  5507. // Global style 7 (playerid, vehicle name).
  5508. t = FIXES_gsPGTStyle[playerid][7] = CreatePlayerTextDraw(playerid, 608.000000, 344.000000, FIXES_gsSpace),
  5509. PlayerTextDrawLetterSize(playerid, t, 1.000000, 3.000000),
  5510. PlayerTextDrawAlignment(playerid, t, 3),
  5511. PlayerTextDrawColor(playerid, t, 0x36682CFF),
  5512. PlayerTextDrawSetShadow(playerid, t, 0),
  5513. PlayerTextDrawSetOutline(playerid, t, 2),
  5514. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5515. PlayerTextDrawFont(playerid, t, 2),
  5516. PlayerTextDrawSetProportional(playerid, t, 1),
  5517. PlayerTextDrawUseBox(playerid, t, true),
  5518. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5519. PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
  5520.  
  5521. // Global style 8 (playerid, location name).
  5522. t = FIXES_gsPGTStyle[playerid][8] = CreatePlayerTextDraw(playerid, 608.000000, 385.800000, FIXES_gsSpace),
  5523. PlayerTextDrawLetterSize(playerid, t, 1.200000, 3.799998),
  5524. PlayerTextDrawAlignment(playerid, t, 3),
  5525. PlayerTextDrawColor(playerid, t, 0xACCBF1FF),
  5526. PlayerTextDrawSetShadow(playerid, t, 0),
  5527. PlayerTextDrawSetOutline(playerid, t, 2),
  5528. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5529. PlayerTextDrawFont(playerid, t, 0),
  5530. PlayerTextDrawSetProportional(playerid, t, 1),
  5531. PlayerTextDrawUseBox(playerid, t, true),
  5532. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5533. PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
  5534.  
  5535. // Global style 9 (playerid, radio name).
  5536. t = FIXES_gsPGTStyle[playerid][9] = CreatePlayerTextDraw(playerid, 320.000000, 22.000000, FIXES_gsSpace),
  5537. PlayerTextDrawLetterSize(playerid, t, 0.600000, 1.799999),
  5538. PlayerTextDrawAlignment(playerid, t, 2),
  5539. PlayerTextDrawColor(playerid, t, 0x906210FF),
  5540. PlayerTextDrawSetShadow(playerid, t, 0),
  5541. PlayerTextDrawSetOutline(playerid, t, 1),
  5542. PlayerTextDrawBackgroundColor(playerid, t, 170),
  5543. PlayerTextDrawFont(playerid, t, 2),
  5544. PlayerTextDrawSetProportional(playerid, t, 1),
  5545. PlayerTextDrawUseBox(playerid, t, true),
  5546. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5547. PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
  5548.  
  5549. // Global style 10 (playerid, radio switch).
  5550. t = FIXES_gsPGTStyle[playerid][10] = CreatePlayerTextDraw(playerid, 320.000000, 22.000000, FIXES_gsSpace),
  5551. PlayerTextDrawLetterSize(playerid, t, 0.600000, 1.799999),
  5552. PlayerTextDrawAlignment(playerid, t, 2),
  5553. PlayerTextDrawColor(playerid, t, 0x969696FF),
  5554. PlayerTextDrawSetShadow(playerid, t, 0),
  5555. PlayerTextDrawSetOutline(playerid, t, 1),
  5556. PlayerTextDrawBackgroundColor(playerid, t, 170),
  5557. PlayerTextDrawFont(playerid, t, 2),
  5558. PlayerTextDrawSetProportional(playerid, t, 1),
  5559. PlayerTextDrawUseBox(playerid, t, true),
  5560. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5561. PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
  5562.  
  5563. // Global style 11 (playerid, positive money).
  5564. t = FIXES_gsPGTStyle[playerid][11] = CreatePlayerTextDraw(playerid, 608.000000, 77.000000, FIXES_gsSpace),
  5565. PlayerTextDrawLetterSize(playerid, t, 0.550000, 2.200000),
  5566. PlayerTextDrawAlignment(playerid, t, 3),
  5567. PlayerTextDrawColor(playerid, t, 0x36682CFF),
  5568. PlayerTextDrawSetShadow(playerid, t, 0),
  5569. PlayerTextDrawSetOutline(playerid, t, 2),
  5570. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5571. PlayerTextDrawFont(playerid, t, 3),
  5572. PlayerTextDrawSetProportional(playerid, t, 0),
  5573. PlayerTextDrawUseBox(playerid, t, true),
  5574. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5575. PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
  5576.  
  5577. // Global style 12 (playerid, negative money).
  5578. t = FIXES_gsPGTStyle[playerid][12] = CreatePlayerTextDraw(playerid, 608.000000, 77.000000, FIXES_gsSpace),
  5579. PlayerTextDrawLetterSize(playerid, t, 0.550000, 2.200000),
  5580. PlayerTextDrawAlignment(playerid, t, 3),
  5581. PlayerTextDrawColor(playerid, t, 0xB4191DFF),
  5582. PlayerTextDrawSetShadow(playerid, t, 0),
  5583. PlayerTextDrawSetOutline(playerid, t, 2),
  5584. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5585. PlayerTextDrawFont(playerid, t, 3),
  5586. PlayerTextDrawSetProportional(playerid, t, 0),
  5587. PlayerTextDrawUseBox(playerid, t, true),
  5588. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5589. PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
  5590.  
  5591. // Global style 13 (playerid, stunt).
  5592. t = FIXES_gsPGTStyle[playerid][13] = CreatePlayerTextDraw(playerid, 380.000000, 341.150000, FIXES_gsSpace),
  5593. PlayerTextDrawLetterSize(playerid, t, 0.579999, 2.420000),
  5594. PlayerTextDrawTextSize(playerid, t, 40.000000, 460.000000),
  5595. PlayerTextDrawAlignment(playerid, t, 2),
  5596. PlayerTextDrawColor(playerid, t, 0xDDDDDBFF),
  5597. PlayerTextDrawUseBox(playerid, t, true),
  5598. PlayerTextDrawBoxColor(playerid, t, 0),
  5599. PlayerTextDrawSetShadow(playerid, t, 2),
  5600. PlayerTextDrawSetOutline(playerid, t, 0),
  5601. PlayerTextDrawBackgroundColor(playerid, t, 170),
  5602. PlayerTextDrawFont(playerid, t, 1),
  5603. PlayerTextDrawSetProportional(playerid, t, 1);
  5604.  
  5605. #endif
  5606.  
  5607. // Global style 0.
  5608. t = FIXES_gsPGTStyle[playerid][0] = CreatePlayerTextDraw(playerid, 320.0, 214.0, FIXES_gsSpace),
  5609. PlayerTextDrawLetterSize(playerid, t, 1.3, 3.6),
  5610. PlayerTextDrawAlignment(playerid, t, 2),
  5611. PlayerTextDrawColor(playerid, t, 0x906210FF),
  5612. PlayerTextDrawSetShadow(playerid, t, 0),
  5613. PlayerTextDrawSetOutline(playerid, t, 2),
  5614. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5615. PlayerTextDrawFont(playerid, t, 3),
  5616. PlayerTextDrawSetProportional(playerid, t, 1),
  5617. PlayerTextDrawUseBox(playerid, t, true),
  5618. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5619. PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
  5620.  
  5621. // Global style 1.
  5622. t = FIXES_gsPGTStyle[playerid][1] = CreatePlayerTextDraw(playerid, 620.0, 310.0, FIXES_gsSpace),
  5623. PlayerTextDrawLetterSize(playerid, t, 1.0, 2.6),
  5624. PlayerTextDrawAlignment(playerid, t, 3),
  5625. PlayerTextDrawColor(playerid, t, 0x906210FF),
  5626. PlayerTextDrawSetShadow(playerid, t, 0),
  5627. PlayerTextDrawSetOutline(playerid, t, 2),
  5628. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5629. PlayerTextDrawFont(playerid, t, 3),
  5630. PlayerTextDrawSetProportional(playerid, t, 1),
  5631. PlayerTextDrawUseBox(playerid, t, true),
  5632. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5633. PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
  5634.  
  5635. // Global style 2.
  5636. t = FIXES_gsPGTStyle[playerid][2] = CreatePlayerTextDraw(playerid, 320.0, 156.0, FIXES_gsSpace),
  5637. PlayerTextDrawLetterSize(playerid, t, 2.1, 4.2),
  5638. PlayerTextDrawAlignment(playerid, t, 2),
  5639. PlayerTextDrawColor(playerid, t, 0xE1E1E1FF),
  5640. PlayerTextDrawSetShadow(playerid, t, 0),
  5641. PlayerTextDrawSetOutline(playerid, t, 3),
  5642. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5643. PlayerTextDrawFont(playerid, t, 0),
  5644. PlayerTextDrawSetProportional(playerid, t, 1),
  5645. PlayerTextDrawUseBox(playerid, t, true),
  5646. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5647. PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
  5648.  
  5649. // Global style 3.
  5650. t = FIXES_gsPGTStyle[playerid][3] = CreatePlayerTextDraw(playerid, 320.000000, 154.500000, FIXES_gsSpace),
  5651. PlayerTextDrawLetterSize(playerid, t, 0.600000, 2.750000),
  5652. PlayerTextDrawAlignment(playerid, t, 2),
  5653. PlayerTextDrawColor(playerid, t, 0x906210FF),
  5654. PlayerTextDrawSetShadow(playerid, t, 0),
  5655. PlayerTextDrawSetOutline(playerid, t, 2),
  5656. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5657. PlayerTextDrawFont(playerid, t, 2),
  5658. PlayerTextDrawSetProportional(playerid, t, 1),
  5659. PlayerTextDrawUseBox(playerid, t, true),
  5660. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5661. PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
  5662.  
  5663. // Global style 4.
  5664. t = FIXES_gsPGTStyle[playerid][4] = CreatePlayerTextDraw(playerid, 320.000000, 115.500000, FIXES_gsSpace),
  5665. PlayerTextDrawLetterSize(playerid, t, 0.600000, 2.750000),
  5666. PlayerTextDrawAlignment(playerid, t, 2),
  5667. PlayerTextDrawColor(playerid, t, 0x906210FF),
  5668. PlayerTextDrawSetShadow(playerid, t, 0),
  5669. PlayerTextDrawSetOutline(playerid, t, 2),
  5670. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5671. PlayerTextDrawFont(playerid, t, 2),
  5672. PlayerTextDrawSetProportional(playerid, t, 1),
  5673. PlayerTextDrawUseBox(playerid, t, true),
  5674. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5675. PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
  5676.  
  5677. // Global style 5.
  5678. t = FIXES_gsPGTStyle[playerid][5] = CreatePlayerTextDraw(playerid, 320.0, 217.0, FIXES_gsSpace),
  5679. PlayerTextDrawLetterSize(playerid, t, 0.6, 2.75),
  5680. PlayerTextDrawAlignment(playerid, t, 2),
  5681. PlayerTextDrawColor(playerid, t, 0xE1E1E1FF),
  5682. PlayerTextDrawSetShadow(playerid, t, 0),
  5683. PlayerTextDrawSetOutline(playerid, t, 2),
  5684. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5685. PlayerTextDrawFont(playerid, t, 2),
  5686. PlayerTextDrawSetProportional(playerid, t, 1),
  5687. PlayerTextDrawUseBox(playerid, t, true),
  5688. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5689. PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
  5690.  
  5691. // Global style 6.
  5692. t = FIXES_gsPGTStyle[playerid][6] = CreatePlayerTextDraw(playerid, 320.000000, 60.000000, FIXES_gsSpace),
  5693. PlayerTextDrawLetterSize(playerid, t, 1.000000, 3.599998),
  5694. PlayerTextDrawAlignment(playerid, t, 2),
  5695. PlayerTextDrawColor(playerid, t, 0xACCBF1FF),
  5696. PlayerTextDrawSetShadow(playerid, t, 0),
  5697. PlayerTextDrawSetOutline(playerid, t, 2),
  5698. PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
  5699. PlayerTextDrawFont(playerid, t, 3),
  5700. PlayerTextDrawSetProportional(playerid, t, 1),
  5701. PlayerTextDrawUseBox(playerid, t, true),
  5702. PlayerTextDrawBoxColor(playerid, t, 0x00000000),
  5703. PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
  5704. }
  5705. }
  5706. #endif
  5707.  
  5708. /**
  5709. * <remarks>
  5710. * Set "IS_JIT" to true.
  5711. * </remarks>
  5712. * <fixes>IS_JIT</fixes>
  5713. */
  5714.  
  5715. forward OnJITCompile();
  5716.  
  5717. public OnJITCompile()
  5718. {
  5719. state _ALS : _ALS_go;
  5720. _FIXES_gIsJIT = true;
  5721. _FIXES_DetermineOS();
  5722.  
  5723. return FIXES_OnJITCompile();
  5724. }
  5725.  
  5726. #if defined _ALS_OnJITCompile
  5727. #error _ALS_OnJITCompile defined
  5728. #endif
  5729. #define _ALS_OnJITCompile
  5730. #define OnJITCompile(%0) FIXES_OnJITCompile(%0) <_ALS : _ALS_go>
  5731.  
  5732. _FIXES_FORWARD FIXES_OnJITCompile();
  5733.  
  5734. static stock _FIXES_CheckServerRoot()
  5735. {
  5736. #if FIX_GetServerVarAsString || FIX_GetServerVarAsFloat || FIX_GetServerVarAsInt || FIX_GetServerVarAsBool
  5737. FIXES_gsServerCFG = fopen("DANGEROUS_SERVER_ROOT/server.cfg", io_read);
  5738. #if FIXES_ServerVarMsg
  5739. if (!FIXES_gsServerCFG)
  5740. {
  5741. print(_FIXES_gIsFilterscript ? ("* FIXES_PRINTF (FS):") : ("* FIXES_PRINTF (GM):"));
  5742. print(" ");
  5743. print("********************************************************************************");
  5744. print("* Could not open \"DANGEROUS_SERVER_ROOT/server.cfg\". Make sure your server is *");
  5745. print("* configured to allow server root access. Either via: *");
  5746. print("* *");
  5747. print("* https://github.com/Misiur/YSI/raw/master/links.rar *");
  5748. print("* *");
  5749. print("* Or (Windows - CMD): *");
  5750. print("* *");
  5751. print("* cd scriptfiles *");
  5752. print("* mklink /J DANGEROUS_SERVER_ROOT .. *");
  5753. print("* *");
  5754. print("* Or (Windows - PowerShell): *");
  5755. print("* *");
  5756. print("* cd scriptfiles *");
  5757. print("* cmd /c mklink /J DANGEROUS_SERVER_ROOT .. *");
  5758. print("* *");
  5759. print("* Or (Linux): *");
  5760. print("* *");
  5761. print("* cd scriptfiles *");
  5762. print("* ln -s .. DANGEROUS_SERVER_ROOT *");
  5763. print("* *");
  5764. print("* If you're not able to, or just don't want to make these changes you can *");
  5765. print("* suppress the warning by defining this at the top of your mode: *");
  5766. print("* *");
  5767. print("* #define FIXES_ServerVarMsg 0 *");
  5768. print("* *");
  5769. print("* Or (preferably) disable the relevant fixes with: *");
  5770. print("* *");
  5771. print("* #define FIX_GetServerVarAsString 0 *");
  5772. print("* #define FIX_GetServerVarAsFloat 0 *");
  5773. print("* #define FIX_GetServerVarAsInt 0 *");
  5774. print("* #define FIX_GetServerVarAsBool 0 *");
  5775. print("* *");
  5776. print("********************************************************************************");
  5777. print(" ");
  5778. }
  5779. #endif
  5780. #endif
  5781. }
  5782.  
  5783. /**
  5784. * <remarks>
  5785. * Set <symbolref name="IS_FILTERSCRIPT" /> to true as this callback is ONLY called if this script
  5786. * is actually a FilterScript. Then call <symbolref name="FIXES_OnScriptInit" />.
  5787. * </remarks>
  5788. * <fixes>IS_FILTERSCRIPT</fixes>
  5789. * <fixes>OnPlayerConnect</fixes>
  5790. * <fixes>GameText</fixes>
  5791. */
  5792.  
  5793. public OnFilterScriptInit()
  5794. {
  5795. // It is possible for this to be the only thing done in this function!
  5796. state _ALS : _ALS_go;
  5797. _FIXES_gIsFilterscript = true;
  5798. _FIXES_DetermineOS();
  5799. _FIXES_CheckServerRoot();
  5800. #if FIXES_Single
  5801. // Check this really IS the only script running.
  5802. if (existproperty(5, FIXES_gscSingleProperty))
  5803. {
  5804. print(FIXES_gscMultiScriptError);
  5805. }
  5806. else
  5807. {
  5808. FIXES_gsSettings &= ~e_FIXES_SETTINGS_SECOND_USE,
  5809. setproperty(5, FIXES_gscSingleProperty, 1);
  5810. }
  5811. #endif
  5812.  
  5813. // =================
  5814. // BEGIN: GameText
  5815. // =================
  5816. #if FIX_GameText
  5817. for (new i = 0; i != sizeof (FIXES_gsPlayerPGTShown); ++i)
  5818. {
  5819. FIXES_gsPlayerPGTShown[i][MAX_PLAYERS] = MAX_PLAYERS;
  5820. }
  5821. #endif
  5822. #if FIXES_Single
  5823. #if FIX_GameText
  5824. _FIXES_CreateGameTextDraws(INVALID_PLAYER_ID);
  5825. #endif
  5826. // =================
  5827. // END: GameText
  5828. // =================
  5829. #else
  5830. FIXES_DetermineOrder(),
  5831. FIXES_gsSettings &= ~e_FIXES_SETTINGS_DROP_ALL_DATA;
  5832. #endif
  5833.  
  5834. #if !FIXES_Single && FIX_GameText && FIX_OnPlayerConnect
  5835. FIXES_gsSettings |= e_FIXES_SETTINGS_NO_GAME_TEXT;
  5836. #endif
  5837. // These are all the fixes that use "_FIXES_FOREACH".
  5838. #if FIX_OnPlayerConnect || _FIX_Menus || FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_TogglePlayerControllable
  5839. for (new playerid = 0; playerid != MAX_PLAYERS; ++playerid)
  5840. {
  5841. if (BAD_IsPlayerConnected(playerid))
  5842. {
  5843. // No "defined" checks - if you don't want this fix because
  5844. // you don't have an "OnPlayerConnect", just don't use it!
  5845. // Of course, it helps that the copy of "OnPlayerConnect"
  5846. // in this include is almost always called!
  5847. #if FIX_OnPlayerConnect
  5848. // ========================
  5849. // BEGIN: OnPlayerConnect
  5850. // ========================
  5851. OnPlayerConnect(playerid);
  5852. // ========================
  5853. // END: OnPlayerConnect
  5854. // ========================
  5855. #else
  5856. _FIXES_AddInternal(FIXES_gsPlayersIterator, playerid, MAX_PLAYERS);
  5857.  
  5858. #if FIX_GameText
  5859. // =================
  5860. // BEGIN: GameText
  5861. // =================
  5862. _FIXES_IS_IN_CHARGE()
  5863. {
  5864. _FIXES_CreateGameTextDraws(playerid);
  5865. }
  5866. // =================
  5867. // END: GameText
  5868. // =================
  5869. #endif
  5870. #endif
  5871. }
  5872. }
  5873. #endif
  5874. #if !FIXES_Single && FIX_GameText && FIX_OnPlayerConnect
  5875. FIXES_gsSettings &= ~e_FIXES_SETTINGS_NO_GAME_TEXT;
  5876. #endif
  5877.  
  5878. return FIXES_OnFilterScriptInit();
  5879. }
  5880.  
  5881. #if defined _ALS_OnFilterScriptInit
  5882. #error _ALS_OnFilterScriptInit defined
  5883. #endif
  5884. #define _ALS_OnFilterScriptInit
  5885. #define OnFilterScriptInit(%0) FIXES_OnFilterScriptInit(%0) <_ALS : _ALS_go>
  5886.  
  5887. _FIXES_FORWARD FIXES_OnFilterScriptInit();
  5888.  
  5889. /**
  5890. * <remarks>
  5891. * Call <symbolref name="FIXES_OnScriptInit" /> if this is not a FilterScript.
  5892. * </remarks>
  5893. * <fixes>IS_FILTERSCRIPT</fixes>
  5894. * <fixes>AllowInteriorWeapons</fixes>
  5895. * <fixes>AllowTeleport</fixes>
  5896. */
  5897.  
  5898. public OnGameModeInit()
  5899. {
  5900. state _ALS : _ALS_go;
  5901. _FIXES_DetermineOS();
  5902.  
  5903. #if FIXES_Single
  5904. // Check this really IS the only script running. Properties reset when
  5905. // a gamemode restarts, so we don't have to worry about filterscipts
  5906. // detecting themselves.
  5907. if (FIXES_gsSettings & e_FIXES_SETTINGS_SECOND_USE)
  5908. {
  5909. if (existproperty(5, FIXES_gscSingleProperty))
  5910. {
  5911. print(FIXES_gscMultiScriptError);
  5912. }
  5913. else
  5914. {
  5915. setproperty(5, FIXES_gscSingleProperty, 1);
  5916. }
  5917. }
  5918. else
  5919. {
  5920. // When the server starts, we need to allow an FS to load with a GM
  5921. // that doesn't use fixes.inc. This is the only case where a
  5922. // property can be set while a ganemode isn't running. This will
  5923. // mean that the FS won't complain if they are both using fixes, but
  5924. // the GM still will, so all is good.
  5925. FIXES_gsSettings |= e_FIXES_SETTINGS_SECOND_USE;
  5926. }
  5927. #endif
  5928.  
  5929. // =============================
  5930. // BEGIN: AllowInteriorWeapons
  5931. // =============================
  5932. // ======================
  5933. // BEGIN: AllowTeleport
  5934. // ======================
  5935. #if FIX_AllowInteriorWeapons && FIX_AllowTeleport && !defined FILTERSCRIPT
  5936. FIXES_gsSettings &= ~(e_FIXES_SETTINGS_INTERIOR | e_FIXES_SETTINGS_ADMIN_TELEPORT);
  5937. #elseif FIX_AllowInteriorWeapons
  5938. FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
  5939. #elseif FIX_AllowTeleport && !defined FILTERSCRIPT
  5940. FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
  5941. #endif
  5942. // ======================
  5943. // END: AllowTeleport
  5944. // ======================
  5945. // ===========================
  5946. // END: AllowInteriorWeapons
  5947. // ===========================
  5948. if (!_FIXES_gIsFilterscript)
  5949. {
  5950. _FIXES_CheckServerRoot();
  5951. // =================
  5952. // BEGIN: GameText
  5953. // =================
  5954. #if FIX_GameText
  5955. for (new i = 0; i != sizeof (FIXES_gsPlayerPGTShown); ++i)
  5956. {
  5957. FIXES_gsPlayerPGTShown[i][MAX_PLAYERS] = MAX_PLAYERS;
  5958. }
  5959. #if FIXES_Single
  5960. _FIXES_CreateGameTextDraws(INVALID_PLAYER_ID);
  5961. #endif
  5962. #endif
  5963. // =================
  5964. // END: GameText
  5965. // =================
  5966. #if !FIXES_Single
  5967. FIXES_DetermineOrder();
  5968. #endif
  5969. // ======================
  5970. // BEGIN: OnRconCommand
  5971. // ======================
  5972. #if FIX_OnRconCommand || FIX_OnClientCheckResponse
  5973. // It is. Create the file.
  5974. if (!fexist(FIXES_gscRconFixFS))
  5975. {
  5976. /*
  5977. native CallRemoteFunction(const function[], const format[], {Float,_}:...);
  5978.  
  5979. forward OnRconCommand(const cmd[]);
  5980. public OnRconCommand(const cmd[]) return 0;
  5981.  
  5982. forward OnClientCheckResponse(playerid, actionid, memaddr, retndata);
  5983. public OnClientCheckResponse(playerid, actionid, memaddr, retndata) return CallRemoteFunction("FIXES_OnClientCheckResponse\0\0\0", "iiii", playerid, actionid, memaddr, retndata);
  5984. */
  5985. static
  5986. lRCFixCode[] = {
  5987. 0x000000F0, 0x0808F1E0, 0x00080014, 0x0000008C,
  5988. 0x000000F0, 0x00000180, 0x00004180, 0xFFFFFFFF,
  5989. 0x00000038, 0x00000048, 0x00000050, 0x00000050,
  5990. 0x00000050, 0x00000050, 0x00000014, 0x00000052,
  5991. 0x00000008, 0x00000068, 0x00000000, 0x00000076,
  5992. 0x6E4F001F, 0x65696C43, 0x6843746E, 0x526B6365,
  5993. 0x6F707365, 0x0065736E, 0x63526E4F, 0x6F436E6F,
  5994. 0x6E616D6D, 0x61430064, 0x65526C6C, 0x65746F6D,
  5995. 0x636E7546, 0x6E6F6974, 0x00000000, 0x2E007880,
  5996. 0x2E305980, 0x81180581, 0x05811405, 0x0C058110,
  5997. 0x277C8027, 0x80182700, 0x1C2C007B, 0x80468030,
  5998. 0x80588049, 0x80538045, 0x804F805F, 0x8043806E,
  5999. 0x8069806C, 0x806E8065, 0x80438074, 0x80658068,
  6000. 0x806B8063, 0x80658052, 0x80708073, 0x806E806F,
  6001. 0x00658073, 0x80000000, 0x80698069, 0x00698069
  6002. };
  6003. new
  6004. File:fs = fopen(FIXES_gscRconFixFS, io_write);
  6005. if (fs)
  6006. {
  6007. fblockwrite(fs, lRCFixCode);
  6008. fclose(fs);
  6009. }
  6010. }
  6011. if (fexist(FIXES_gscRconFixFS))
  6012. {
  6013. SendRconCommand("loadfs ../scriptfiles/callbackfix");
  6014. #if FIX_OnClientCheckResponse
  6015. state OnClientCheckResponse : OnClientCheckResponse_GM;
  6016. #endif
  6017. }
  6018. else
  6019. print("\7\7\7\7\7*** fixes.inc error: Could not load RconCommand/ClientCheckResponse fix FS.");
  6020. #endif
  6021. // ======================
  6022. // END: OnRconCommand
  6023. // ======================
  6024. }
  6025. #if !FIXES_Single
  6026. FIXES_gsSettings &= ~e_FIXES_SETTINGS_DROP_ALL_DATA;
  6027. #endif
  6028. return FIXES_OnGameModeInit();
  6029. }
  6030.  
  6031. #if defined _ALS_OnGameModeInit
  6032. #error _ALS_OnGameModeInit defined
  6033. #endif
  6034. #define _ALS_OnGameModeInit
  6035. #define OnGameModeInit(%0) FIXES_OnGameModeInit(%0) <_ALS : _ALS_go>
  6036.  
  6037. _FIXES_FORWARD FIXES_OnGameModeInit();
  6038.  
  6039. /**
  6040. * <remarks>
  6041. * Allow <c>OnClientCheckResponse</c> to be called in gamemodes.
  6042. * </remarks>
  6043. * <fixes>OnClientCheckResponse</fixes>
  6044. */
  6045.  
  6046. #if FIX_OnClientCheckResponse
  6047. forward OnClientCheckResponse(playerid, actionid, memaddr, retndata);
  6048. public OnClientCheckResponse(playerid, actionid, memaddr, retndata)
  6049. {
  6050. // Enable, then disable, the call in to the real version (if it exists).
  6051. state OnClientCheckResponse : OnClientCheckResponse_GM;
  6052. new
  6053. ret = FIXES_OnClientCheckResponse(playerid, actionid, memaddr, retndata);
  6054. state OnClientCheckResponse : OnClientCheckResponse_FS;
  6055. return ret;
  6056. }
  6057.  
  6058. forward FIXES_OnClientCheckResponse(playerid, actionid, memaddr, retndata);
  6059. public FIXES_OnClientCheckResponse(playerid, actionid, memaddr, retndata) <OnClientCheckResponse : OnClientCheckResponse_FS>
  6060. {
  6061. return 0;
  6062. }
  6063.  
  6064. public FIXES_OnClientCheckResponse(playerid, actionid, memaddr, retndata) <>
  6065. {
  6066. return 0;
  6067. }
  6068.  
  6069. static stock _FIXES_OnClientCheckResponse() <OnClientCheckResponse : OnClientCheckResponse_GM, OnClientCheckResponse : OnClientCheckResponse_FS>
  6070. {
  6071. // Define states only.
  6072. }
  6073.  
  6074. #if defined _ALS_OnClientCheckResponse
  6075. #error _ALS_OnClientCheckResponse defined
  6076. #endif
  6077. #define _ALS_OnClientCheckResponse
  6078. #define OnClientCheckResponse(%0) FIXES_OnClientCheckResponse(%0) <OnClientCheckResponse : OnClientCheckResponse_GM>
  6079. #endif
  6080.  
  6081. /**
  6082. * <remarks>
  6083. * Fast way of detecting not to retain any data.
  6084. * </remarks>
  6085. */
  6086.  
  6087. #if !FIXES_Single || FIX_PlayerDialogResponse
  6088. public OnGameModeExit()
  6089. {
  6090. #if !FIXES_Single
  6091. FIXES_gsSettings |= e_FIXES_SETTINGS_DROP_ALL_DATA;
  6092. if (!_FIXES_gIsFilterscript && FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
  6093. {
  6094. FIXES_gsSettings |= e_FIXES_SETTINGS_ENDING,
  6095. FIXES_DetermineOrder();
  6096. }
  6097. #endif
  6098.  
  6099. // =============================
  6100. // BEGIN: PlayerDialogResponse
  6101. // =============================
  6102. #if FIX_PlayerDialogResponse
  6103. for (new playerid = 0; playerid != MAX_PLAYERS; ++playerid)
  6104. {
  6105. ShowPlayerDialog(playerid, -1, 0, FIXES_gsSpace, FIXES_gsSpace, FIXES_gsSpace, FIXES_gsSpace);
  6106. }
  6107. #endif
  6108. // =============================
  6109. // END: PlayerDialogResponse
  6110. // =============================
  6111.  
  6112. return FIXES_OnGameModeExit();
  6113. }
  6114.  
  6115. #if defined _ALS_OnGameModeExit
  6116. #error _ALS_OnGameModeExit defined
  6117. #endif
  6118. #define _ALS_OnGameModeExit
  6119. #define OnGameModeExit(%0) FIXES_OnGameModeExit(%0) <_ALS : _ALS_go>
  6120.  
  6121. _FIXES_FORWARD FIXES_OnGameModeExit();
  6122. #endif
  6123.  
  6124. /**
  6125. * <remarks>
  6126. * Fast way of detecting not to retain any data.
  6127. * </remarks>
  6128. */
  6129.  
  6130. #if !FIXES_Single || FIX_GameText || FIX_OnPlayerDisconnect
  6131. public OnFilterScriptExit()
  6132. {
  6133. #if FIX_OnPlayerDisconnect
  6134. // Removal safe loop.
  6135. for (new next, playerid = FIXES_gsPlayersIterator[MAX_PLAYERS]; playerid != MAX_PLAYERS; playerid = next)
  6136. {
  6137. next = FIXES_gsPlayersIterator[playerid],
  6138. OnPlayerDisconnect(playerid, 4);
  6139. #if FIXES_Single
  6140. // =================
  6141. // BEGIN: GameText
  6142. // =================
  6143. #if FIX_GameText
  6144. #if FIX_GameTextStyles
  6145. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][13]),
  6146. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][12]),
  6147. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][11]),
  6148. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][10]),
  6149. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][9]),
  6150. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][8]),
  6151. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][7]),
  6152. #endif
  6153. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][6]),
  6154. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][5]),
  6155. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][4]),
  6156. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][3]),
  6157. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][2]),
  6158. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][1]),
  6159. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][0]);
  6160. #endif
  6161. #endif
  6162. }
  6163. #endif
  6164. #if FIXES_Single
  6165. // =================
  6166. // BEGIN: GameText
  6167. // =================
  6168. #if FIX_GameText
  6169. #if defined FIXES_OnFilterScriptExit
  6170. FIXES_OnFilterScriptExit();
  6171. #endif
  6172. #if !FIX_OnPlayerDisconnect
  6173. _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
  6174. {
  6175. #if FIX_GameTextStyles
  6176. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][13]),
  6177. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][12]),
  6178. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][11]),
  6179. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][10]),
  6180. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][9]),
  6181. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][8]),
  6182. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][7]),
  6183. #endif
  6184. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][6]),
  6185. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][5]),
  6186. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][4]),
  6187. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][3]),
  6188. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][2]),
  6189. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][1]),
  6190. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][0]);
  6191. }
  6192. #endif
  6193. return
  6194. #if FIX_GameTextStyles
  6195. TextDrawDestroy(FIXES_gsGTStyle[13]),
  6196. TextDrawDestroy(FIXES_gsGTStyle[12]),
  6197. TextDrawDestroy(FIXES_gsGTStyle[11]),
  6198. TextDrawDestroy(FIXES_gsGTStyle[10]),
  6199. TextDrawDestroy(FIXES_gsGTStyle[9]),
  6200. TextDrawDestroy(FIXES_gsGTStyle[8]),
  6201. TextDrawDestroy(FIXES_gsGTStyle[7]),
  6202. #endif
  6203. TextDrawDestroy(FIXES_gsGTStyle[6]),
  6204. TextDrawDestroy(FIXES_gsGTStyle[5]),
  6205. TextDrawDestroy(FIXES_gsGTStyle[4]),
  6206. TextDrawDestroy(FIXES_gsGTStyle[3]),
  6207. TextDrawDestroy(FIXES_gsGTStyle[2]),
  6208. TextDrawDestroy(FIXES_gsGTStyle[1]),
  6209. TextDrawDestroy(FIXES_gsGTStyle[0]);
  6210. #else
  6211. return FIXES_OnFilterScriptExit();
  6212. #endif
  6213. // =================
  6214. // END: GameText
  6215. // =================
  6216. #else
  6217. if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
  6218. {
  6219. FIXES_gsSettings |= e_FIXES_SETTINGS_ENDING,
  6220. FIXES_DetermineOrder();
  6221. }
  6222. return FIXES_OnFilterScriptExit();
  6223. #endif
  6224. }
  6225.  
  6226. #if defined _ALS_OnFilterScriptExit
  6227. #error _ALS_OnFilterScriptExit defined
  6228. #endif
  6229. #define _ALS_OnFilterScriptExit
  6230. #define OnFilterScriptExit(%0) FIXES_OnFilterScriptExit(%0) <_ALS : _ALS_go>
  6231.  
  6232. _FIXES_FORWARD FIXES_OnFilterScriptExit();
  6233. #endif
  6234.  
  6235. /**
  6236. * <remarks>
  6237. * Almost every fix uses this callback for initialisation. It is only
  6238. * explicitly referenced for those fixes where this is all the code. The
  6239. * inclusion code was approaching the 512 line length limit, so I shrank it.
  6240. * </remarks>
  6241. * <fixes>TogglePlayerControllable</fixes>
  6242. * <fixes>SetPlayerWorldBounds</fixes>
  6243. * <fixes>GetPlayerColor</fixes>
  6244. * <fixes>SetPlayerName</fixes>
  6245. * <fixes>GetPlayerSkin</fixes>
  6246. * <fixes>IsPlayerInCheckpoint</fixes>
  6247. * <fixes>IsPlayerInRaceCheckpoint</fixes>
  6248. * <fixes>GetPlayerWeapon</fixes>
  6249. * <fixes>PutPlayerInVehicle</fixes>
  6250. * <fixes>OnPlayerEnterVehicle</fixes>
  6251. * <fixes>AllowTeleport</fixes>
  6252. * <fixes>OnDialogResponse</fixes>
  6253. * <fixes>SetSpawnInfo</fixes>
  6254. * <fixes>AllowInteriorWeapons</fixes>
  6255. * <fixes>TrainExit</fixes>
  6256. * <fixes>Kick</fixes>
  6257. * <fixes>OnPlayerEnterVehicle_2</fixes>
  6258. * <fixes>PlayerDialogResponse</fixes>
  6259. * <fixes>OnPlayerSpawn</fixes>
  6260. * <fixes>ApplyAnimation_2</fixes>
  6261. */
  6262.  
  6263. #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_SetPlayerName || FIX_GetPlayerColour
  6264. #define _FIXES_ON_PLAYER_CONNECT
  6265. #elseif FIX_GetPlayerSkin || FIX_IsPlayerInCheckpoint || FIX_IsPlayerInRaceCheckpoint || FIX_GetPlayerWeapon
  6266. #define _FIXES_ON_PLAYER_CONNECT
  6267. #elseif FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_AllowTeleport || FIX_OnDialogResponse
  6268. #define _FIXES_ON_PLAYER_CONNECT
  6269. #elseif FIX_GetPlayerDialog || FIX_SetSpawnInfo || FIX_AllowInteriorWeapons || FIX_TrainExit
  6270. #define _FIXES_ON_PLAYER_CONNECT
  6271. #elseif FIX_Kick || FIX_OnPlayerEnterVehicle_2 || FIX_PlayerDialogResponse || FIX_GetPlayerInterior
  6272. #define _FIXES_ON_PLAYER_CONNECT
  6273. #elseif FIX_OnPlayerSpawn || FIX_ApplyAnimation_2 || FIX_GameText || _FIX_Menus
  6274. #define _FIXES_ON_PLAYER_CONNECT
  6275. #elseif FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_OnPlayerConnect || FIX_SetPlayerTime
  6276. #define _FIXES_ON_PLAYER_CONNECT
  6277. #elseif FIX_SetPlayerColour || FIX_GetPlayerWorldBounds
  6278. #define _FIXES_ON_PLAYER_CONNECT
  6279. #endif
  6280.  
  6281. #if defined _FIXES_ON_PLAYER_CONNECT
  6282. public OnPlayerConnect(playerid)
  6283. {
  6284. // ==================================
  6285. // BEGIN: ApplyAnimation_2
  6286. // ==================================
  6287. #if FIX_ApplyAnimation_2
  6288. FIXES_gsPlayerAnimLibs[playerid][0] =
  6289. FIXES_gsPlayerAnimLibs[playerid][1] =
  6290. FIXES_gsPlayerAnimLibs[playerid][2] =
  6291. FIXES_gsPlayerAnimLibs[playerid][3] =
  6292. FIXES_gsPlayerAnimLibs[playerid][4] = -1;
  6293. #endif
  6294. // ================================
  6295. // END: ApplyAnimation_2
  6296. // ================================
  6297.  
  6298. #if _FIX_Menus || FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_TogglePlayerControllable
  6299. _FIXES_AddInternal(FIXES_gsPlayersIterator, playerid, MAX_PLAYERS);
  6300. #endif
  6301.  
  6302. FIXES_PRINTF("FIXES_OnPlayerConnect: %d", playerid);
  6303. // This is only reset when the Game Mode changes or when a new
  6304. #if FIX_Kick || FIX_TogglePlayerControllable || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_AllowTeleport || FIX_AllowInteriorWeapons || FIX_TrainExit || FIX_OnPlayerEnterVehicle_2 || FIX_SetPlayerColour
  6305. // player connects, which is what we want. The other items are the
  6306. // same, but must be done only once. This variable will tend to
  6307. // hold data relevant only in the master script (the first
  6308. // filterscript).
  6309. #if FIX_Kick || FIX_SetPlayerTime || FIX_SetPlayerColour
  6310. FIXES_gsPlayerBools[playerid] = e_FIXES_BOOLS_ON_PLAYER_CONNECT;
  6311. #else
  6312. FIXES_gsPlayerBools[playerid] = e_FIXES_BOOLS_NONE;
  6313. #endif
  6314. #endif
  6315.  
  6316. // =================
  6317. // BEGIN: GameText
  6318. // =================
  6319. #if FIX_GameText
  6320. #if !FIXES_Single
  6321. if (FIXES_gsSettings & (e_FIXES_SETTINGS_NO_GAME_TEXT | e_FIXES_SETTINGS_IN_CHARGE) == e_FIXES_SETTINGS_IN_CHARGE)
  6322. #endif
  6323. {
  6324. _FIXES_CreateGameTextDraws(playerid);
  6325. }
  6326. #endif
  6327. // =================
  6328. // END: GameText
  6329. // =================
  6330.  
  6331. #if !FIXES_Single
  6332. if (!GetPVarInt(playerid, FIXES_pvarNotNewPlayer))
  6333. #endif
  6334. {
  6335. FIXES_PRINTF("FIXES_OnPlayerConnect: First (%d)", FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE);
  6336. // ======================
  6337. // BEGIN: SetPlayerName
  6338. // ======================
  6339. #if FIX_SetPlayerName
  6340. new
  6341. name[MAX_PLAYER_NAME];
  6342. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  6343. if (strcmp(name, FIXES_gscTempName) == 0)
  6344. {
  6345. Kick(playerid);
  6346. }
  6347. #endif
  6348. // ======================
  6349. // END: SetPlayerName
  6350. // ======================
  6351.  
  6352. // =============================
  6353. // BEGIN: SetPlayerWorldBounds
  6354. // =============================
  6355. #if FIX_SetPlayerWorldBounds || FIX_GetPlayerWorldBounds
  6356. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] = FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] = _FIXES_MAX_WORLDBOUNDS,
  6357. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] = FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] = _FIXES_MIN_WORLDBOUNDS;
  6358. #endif
  6359. // =============================
  6360. // END: SetPlayerWorldBounds
  6361. // =============================
  6362.  
  6363. // =======================
  6364. // BEGIN: GetPlayerColor
  6365. // =======================
  6366. #if FIX_GetPlayerColour
  6367. SetPlayerColor(playerid, FIXES_gscPlayerColours[playerid % 100]);
  6368. #endif
  6369. // =======================
  6370. // END: GetPlayerColor
  6371. // =======================
  6372.  
  6373. // ======================
  6374. // BEGIN: GetPlayerSkin
  6375. // ======================
  6376. #if FIX_GetPlayerSkin
  6377. FIXES_SET(PlayerSkin, playerid, 0);
  6378. #endif
  6379. // ======================
  6380. // END: GetPlayerSkin
  6381. // ======================
  6382.  
  6383. // =============================
  6384. // BEGIN: IsPlayerInCheckpoint
  6385. // =============================
  6386. #if FIX_IsPlayerInCheckpoint
  6387. DisablePlayerCheckpoint(playerid);
  6388. #endif
  6389. // =============================
  6390. // END: IsPlayerInCheckpoint
  6391. // =============================
  6392.  
  6393. // =================================
  6394. // BEGIN: IsPlayerInRaceCheckpoint
  6395. // =================================
  6396. #if FIX_IsPlayerInRaceCheckpoint
  6397. DisablePlayerRaceCheckpoint(playerid);
  6398. #endif
  6399. // =================================
  6400. // END: IsPlayerInRaceCheckpoint
  6401. // =================================
  6402.  
  6403. // ========================
  6404. // BEGIN: GetPlayerWeapon
  6405. // ========================
  6406. #if FIX_GetPlayerWeapon
  6407. FIXES_SET(PlayerWeapon, playerid, -1);
  6408. #endif
  6409. // ========================
  6410. // END: GetPlayerWeapon
  6411. // ========================
  6412.  
  6413. // ==========================
  6414. // BEGIN: GetPlayerInterior
  6415. // ==========================
  6416. #if FIX_GetPlayerInterior
  6417. FIXES_SET(PlayerInterior, playerid, 0);
  6418. #endif
  6419. // ==========================
  6420. // END: GetPlayerInterior
  6421. // ==========================
  6422.  
  6423. // =========================
  6424. // BEGIN: OnDialogResponse
  6425. // =========================
  6426. #if FIX_OnDialogResponse || FIX_GetPlayerDialog
  6427. FIXES_SET(PlayerDialog, playerid, INVALID_DIALOG_ID);
  6428. #endif
  6429. // =========================
  6430. // END: OnDialogResponse
  6431. // =========================
  6432.  
  6433. // =============================
  6434. // BEGIN: PlayerDialogResponse
  6435. // =============================
  6436. #if FIX_PlayerDialogResponse
  6437. ShowPlayerDialog(playerid, -1, 0, FIXES_gsSpace, FIXES_gsSpace, FIXES_gsSpace, FIXES_gsSpace);
  6438. #endif
  6439. // =============================
  6440. // END: PlayerDialogResponse
  6441. // =============================
  6442.  
  6443. // =====================
  6444. // BEGIN: SetSpawnInfo
  6445. // =====================
  6446. #if FIX_SetSpawnInfo
  6447. SetSpawnInfo(playerid, NO_TEAM, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
  6448. #endif
  6449. // =====================
  6450. // END: SetSpawnInfo
  6451. // =====================
  6452.  
  6453. // ======================
  6454. // BEGIN: OnPlayerSpawn
  6455. // ======================
  6456. #if FIX_OnPlayerSpawn
  6457. FIXES_SET(PlayerLastCash, playerid, 0);
  6458. #endif
  6459. // ======================
  6460. // END: OnPlayerSpawn
  6461. // ======================
  6462.  
  6463. // =========================
  6464. // BEGIN: GetPlayerWeather
  6465. // =========================
  6466. #if FIX_GetPlayerWeather
  6467. FIXES_SET(PlayerWeather, playerid, FIXES_gsServerWeather);
  6468. #endif
  6469. // =========================
  6470. // END: GetPlayerWeather
  6471. // =========================
  6472.  
  6473. #if !FIXES_Single
  6474. // No longer their first time.
  6475. SetPVarInt(playerid, FIXES_pvarNotNewPlayer, 1);
  6476. #endif
  6477. }
  6478. // =============
  6479. // BEGIN: Kick
  6480. // =============
  6481. #if FIX_Kick || FIX_SetPlayerTime || FIX_SetPlayerColour
  6482. new
  6483. ret = FIXES_OnPlayerConnect(playerid);
  6484. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_ON_PLAYER_CONNECT;
  6485. return ret;
  6486. #else
  6487. return FIXES_OnPlayerConnect(playerid);
  6488. #endif
  6489. // =============
  6490. // END: Kick
  6491. // =============
  6492. }
  6493.  
  6494. #if defined _ALS_OnPlayerConnect
  6495. #error _ALS_OnPlayerConnect defined
  6496. #endif
  6497. #define _ALS_OnPlayerConnect
  6498. #define OnPlayerConnect(%0) FIXES_OnPlayerConnect(%0) <_ALS : _ALS_go>
  6499.  
  6500. _FIXES_FORWARD FIXES_OnPlayerConnect(playerid);
  6501. #endif
  6502.  
  6503. /**
  6504. * <fixes>SetPlayerAttachedObject</fixes>
  6505. * <fixes>IsPlayerAttachedObjectSlotUsed</fixes>
  6506. * <fixes>Kick</fixes>
  6507. * <fixes>GetPlayerMenu</fixes>
  6508. */
  6509.  
  6510. #if FIX_Kick || FIX_SilentTeleport || (FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2)) || FIX_OnPlayerEnterVehicle_3 || FIX_GetPlayerMenu || _FIX_Menus || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_TogglePlayerControllable || FIX_ApplyAnimation_2
  6511. public OnPlayerDisconnect(playerid, reason)
  6512. {
  6513. new
  6514. ret = FIXES_OnPlayerDisconnect(playerid, reason);
  6515.  
  6516. // =========================
  6517. // BEGIN: SilentTeleport
  6518. // =========================
  6519. #if FIX_SilentTeleport
  6520. FIXES_gsJackedId[playerid] = INVALID_PLAYER_ID;
  6521. #endif
  6522. // =========================
  6523. // END: SilentTeleport
  6524. // =========================
  6525.  
  6526. // =========================
  6527. // BEGIN: ApplyAnimation_2
  6528. // =========================
  6529. #if FIX_ApplyAnimation_2
  6530. if (FIXES_gsPlayerAnimTimer[playerid])
  6531. {
  6532. KillTimer(FIXES_gsPlayerAnimTimer[playerid]),
  6533. FIXES_gsPlayerAnimTimer[playerid] = 0;
  6534. }
  6535. #endif
  6536. // =======================
  6537. // END: ApplyAnimation_2
  6538. // =======================
  6539.  
  6540. // ======================
  6541. // BEGIN: GetPlayerMenu
  6542. // ======================
  6543. #if FIX_GetPlayerMenu
  6544. FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
  6545. #endif
  6546. // ======================
  6547. // END: GetPlayerMenu
  6548. // ======================
  6549.  
  6550. // ==========================
  6551. // BEGIN: FIXES_SilentKick
  6552. // ==========================
  6553. #if FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2)
  6554. new
  6555. shift = FIXES_gsPlayerIP[playerid];
  6556. if (shift != -1)
  6557. {
  6558. // Unban the IP (timed out).
  6559. new
  6560. ip[16];
  6561. format(ip, sizeof (ip), "unbanip %d.%d.%d.%d", shift >>> 24, (shift >>> 16) & 0xFF, (shift >>> 8) & 0xFF, shift & 0xFF),
  6562. FIXES_gsPlayerIP[playerid] = -1;
  6563. }
  6564. #endif
  6565. // ==========================
  6566. // END: FIXES_SilentKick
  6567. // ==========================
  6568.  
  6569. // ================================
  6570. // BEGIN: SetPlayerAttachedObject
  6571. // ================================
  6572. #if FIX_SetPlayerAttachedObject
  6573. for (new i = 0; i != MAX_PLAYER_ATTACHED_OBJECTS; ++i)
  6574. {
  6575. if (IsPlayerAttachedObjectSlotUsed(playerid, i))
  6576. {
  6577. RemovePlayerAttachedObject(playerid, i);
  6578. }
  6579. }
  6580. #endif
  6581. // ================================
  6582. // END: SetPlayerAttachedObject
  6583. // ================================
  6584.  
  6585. // =============
  6586. // BEGIN: Kick
  6587. // =============
  6588. #if FIX_Kick
  6589. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_KICKED)
  6590. {
  6591. // Stop the timer if it is still running.
  6592. KillTimer(GetPVarInt(playerid, FIXES_pvarKick));
  6593. }
  6594. #endif
  6595. // =============
  6596. // END: Kick
  6597. // =============
  6598.  
  6599. // ===============================
  6600. // BEGIN: OnPlayerEnterVehicle_3
  6601. // ===============================
  6602. #if FIX_OnPlayerEnterVehicle_3
  6603. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_VEH_ENTER)
  6604. {
  6605. _FIXES_StopPlayerEnterVehicle(playerid);
  6606. }
  6607. #endif
  6608. // ===============================
  6609. // END: OnPlayerEnterVehicle_3
  6610. // ===============================
  6611.  
  6612. #if _FIX_Menus || FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_TogglePlayerControllable
  6613. _FIXES_RemoveInternal(FIXES_gsPlayersIterator, playerid, MAX_PLAYERS);
  6614. #endif
  6615.  
  6616. return ret;
  6617. }
  6618.  
  6619. #if defined _ALS_OnPlayerDisconnect
  6620. #error _ALS_OnPlayerDisconnect defined
  6621. #endif
  6622. #define _ALS_OnPlayerDisconnect
  6623. #define OnPlayerDisconnect(%0) FIXES_OnPlayerDisconnect(%0) <_ALS : _ALS_go>
  6624.  
  6625. _FIXES_FORWARD FIXES_OnPlayerDisconnect(playerid, reason);
  6626. #endif
  6627.  
  6628. /**
  6629. * <fixes>OnPlayerDeath</fixes>
  6630. * <fixes>OnPlayerSpawn</fixes>
  6631. */
  6632.  
  6633. #if FIX_OnPlayerDeath || FIX_OnPlayerSpawn || FIX_GameText
  6634. public OnPlayerDeath(playerid, killerid, reason)
  6635. {
  6636. _FIXES_IS_IN_CHARGE()
  6637. {
  6638. // =================
  6639. // BEGIN: GameText
  6640. // =================
  6641. #if FIX_GameText
  6642. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_DIED_TO_SPAWN;
  6643. #endif
  6644. // =================
  6645. // END: GameText
  6646. // =================
  6647.  
  6648. // ======================
  6649. // BEGIN: OnPlayerDeath
  6650. // ======================
  6651. #if FIX_OnPlayerDeath
  6652. static
  6653. sAnimlib[32],
  6654. sAnimname[32];
  6655. GetAnimationName(FIXES_gsLastAnimation[playerid], sAnimlib, sizeof (sAnimlib), sAnimname, sizeof (sAnimname));
  6656. if (strcmp(sAnimlib, "PED", true))
  6657. {
  6658. ClearAnimations(playerid);
  6659. }
  6660. #endif
  6661. // ======================
  6662. // END: OnPlayerDeath
  6663. // ======================
  6664. }
  6665.  
  6666. // ======================
  6667. // BEGIN: OnPlayerSpawn
  6668. // ======================
  6669. #if FIX_OnPlayerSpawn
  6670. new
  6671. ret = FIXES_OnPlayerDeath(playerid, killerid, reason);
  6672.  
  6673. FIXES_SET(PlayerLastCash, playerid, GetPlayerMoney(playerid));
  6674.  
  6675. return ret;
  6676. #else
  6677. return FIXES_OnPlayerDeath(playerid, killerid, reason);
  6678. #endif
  6679. // ======================
  6680. // END: OnPlayerSpawn
  6681. // ======================
  6682. }
  6683.  
  6684. #if defined _ALS_OnPlayerDeath
  6685. #error _ALS_OnPlayerDeath defined
  6686. #endif
  6687. #define _ALS_OnPlayerDeath
  6688. #define OnPlayerDeath(%0) FIXES_OnPlayerDeath(%0) <_ALS : _ALS_go>
  6689.  
  6690. _FIXES_FORWARD FIXES_OnPlayerDeath(playerid, killerid, reason);
  6691. #endif
  6692.  
  6693. /**
  6694. * <fixes>SpawnPlayer</fixes>
  6695. * <fixes>OnPlayerSpawn</fixes>
  6696. */
  6697.  
  6698. #if defined _ALS_SpawnPlayer
  6699. #error _ALS_SpawnPlayer defined
  6700. #endif
  6701. native BAD_SpawnPlayer(playerid) = SpawnPlayer;
  6702.  
  6703. /**
  6704. * <fixes>SpawnPlayer</fixes>
  6705. * <fixes>OnPlayerSpawn</fixes>
  6706. */
  6707.  
  6708. #if FIX_SpawnPlayer || FIX_OnPlayerSpawn
  6709. stock FIXES_SpawnPlayer(playerid)
  6710. {
  6711. // ======================
  6712. // BEGIN: SpawnPlayer
  6713. // ======================
  6714. #if FIX_SpawnPlayer
  6715. // Valid "playerid" check inside "GetPlayerVehicleID".
  6716. new
  6717. vid = GetPlayerVehicleID(playerid);
  6718. if (vid)
  6719. {
  6720. new
  6721. Float:x,
  6722. Float:y,
  6723. Float:z;
  6724. // Remove them without the animation.
  6725. GetVehiclePos(vid, x, y, z),
  6726. SetPlayerPos(playerid, x, y, z);
  6727. }
  6728. #endif
  6729. // ======================
  6730. // END: SpawnPlayer
  6731. // ======================
  6732.  
  6733. // ======================
  6734. // BEGIN: OnPlayerSpawn
  6735. // ======================
  6736. #if FIX_OnPlayerSpawn
  6737. FIXES_SET(PlayerLastCash, playerid, GetPlayerMoney(playerid));
  6738. #endif
  6739. // ======================
  6740. // END: OnPlayerSpawn
  6741. // ======================
  6742.  
  6743. return SpawnPlayer(playerid);
  6744. }
  6745.  
  6746. #define _ALS_SpawnPlayer
  6747. #define SpawnPlayer( FIXES_SpawnPlayer(
  6748. #endif
  6749.  
  6750. /**
  6751. * <fixes>SetPlayerName</fixes>
  6752. */
  6753.  
  6754. #if defined _ALS_SetPlayerName
  6755. #error _ALS_SetPlayerName defined
  6756. #endif
  6757. native BAD_SetPlayerName(playerid, const name[]) = SetPlayerName;
  6758.  
  6759. /**
  6760. * <fixes>SetPlayerName</fixes>
  6761. */
  6762.  
  6763. #if FIX_SetPlayerName
  6764. stock FIXES_SetPlayerName(playerid, const name[])
  6765. {
  6766. static
  6767. sOldName[MAX_PLAYER_NAME];
  6768. GetPlayerName(playerid, sOldName, sizeof (sOldName));
  6769. if (!strcmp(name, sOldName, true))
  6770. {
  6771. if (strcmp(name, sOldName, false))
  6772. {
  6773. SetPlayerName(playerid, FIXES_gscTempName);
  6774. if (SetPlayerName(playerid, name) == -1)
  6775. {
  6776. SetPlayerName(playerid, sOldName);
  6777. return -1;
  6778. }
  6779. return 1;
  6780. }
  6781. else
  6782. {
  6783. return 0;
  6784. }
  6785. }
  6786. return SetPlayerName(playerid, name);
  6787. }
  6788.  
  6789. #define _ALS_SetPlayerName
  6790. #define SetPlayerName( FIXES_SetPlayerName(
  6791. #endif
  6792.  
  6793. /**
  6794. * <fixes>OnPlayerRequestClass</fixes>
  6795. */
  6796.  
  6797. #if FIX_OnPlayerRequestClass || FIX_GameText
  6798. public OnPlayerRequestClass(playerid, classid)
  6799. {
  6800. // =================
  6801. // BEGIN: GameText
  6802. // =================
  6803. #if FIX_GameText
  6804. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_DIED_TO_SPAWN;
  6805. #endif
  6806. // =================
  6807. // END: GameText
  6808. // =================
  6809.  
  6810. // =============================
  6811. // BEGIN: OnPlayerRequestClass
  6812. // =============================
  6813. #if FIX_OnPlayerRequestClass
  6814. new
  6815. Float:x,
  6816. Float:y,
  6817. Float:z;
  6818. GetPlayerPos(playerid, x, y, z),
  6819. RemoveBuildingForPlayer(playerid, 1484, x, y, z, 10.0),
  6820. RemoveBuildingForPlayer(playerid, 1485, x, y, z, 10.0),
  6821. RemoveBuildingForPlayer(playerid, 1486, x, y, z, 10.0);
  6822. #endif
  6823. // ===========================
  6824. // END: OnPlayerRequestClass
  6825. // ===========================
  6826. return FIXES_OnPlayerRequestClass(playerid, classid);
  6827. }
  6828.  
  6829. #if defined _ALS_OnPlayerRequestClass
  6830. #error _ALS_OnPlayerRequestClass defined
  6831. #endif
  6832. #define _ALS_OnPlayerRequestClass
  6833. #define OnPlayerRequestClass(%0) FIXES_OnPlayerRequestClass(%0) <_ALS : _ALS_go>
  6834.  
  6835. _FIXES_FORWARD FIXES_OnPlayerRequestClass(playerid, classid);
  6836. #endif
  6837.  
  6838. /**
  6839. * <fixes>GetPlayerSkin</fixes>
  6840. * <fixes>TogglePlayerControllable</fixes>
  6841. * <fixes>GetPlayerInterior</fixes>
  6842. * <fixes>OnPlayerSpawn</fixes>
  6843. * <fixes>GameText</fixes>
  6844. * <fixes>SetSpawnInfo_2</fixes>
  6845. */
  6846.  
  6847. #if FIX_GetPlayerSkin || FIX_SilentTeleport || FIX_TogglePlayerControllable || FIX_GetPlayerInterior || FIX_OnPlayerSpawn || FIX_GameText || FIX_SetSpawnInfo_2
  6848. public OnPlayerSpawn(playerid)
  6849. {
  6850. _FIXES_IS_IN_CHARGE()
  6851. {
  6852. // ======================
  6853. // BEGIN: OnPlayerSpawn
  6854. // ======================
  6855. #if FIX_OnPlayerSpawn
  6856. ResetPlayerMoney(playerid);
  6857. GivePlayerMoney(playerid, FIXES_GET(PlayerLastCash, playerid));
  6858. FIXES_SET(PlayerLastCash, playerid, 0);
  6859. #endif
  6860. // ======================
  6861. // END: OnPlayerSpawn
  6862. // ======================
  6863.  
  6864. // ==========================
  6865. // BEGIN: GetPlayerInterior
  6866. // ==========================
  6867. #if FIX_GetPlayerInterior
  6868. FIXES_SET(PlayerInterior, playerid, 0);
  6869. #endif
  6870. // ==========================
  6871. // END: GetPlayerInterior
  6872. // ==========================
  6873.  
  6874. // =================
  6875. // BEGIN: GameText
  6876. // =================
  6877. #if FIX_GameText
  6878.  
  6879. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_DIED_TO_SPAWN)
  6880. {
  6881. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_DIED_TO_SPAWN;
  6882. #define _FIXES_PER_PLAYER_GT(%0) if (FIXES_gsPlayerPGTShown[%0][playerid] > playerid) PlayerTextDrawHide(playerid, FIXES_gsPGTStyle[playerid][%0]), _FIXES_RemoveInternal(FIXES_gsPlayerPGTShown[%0], playerid, MAX_PLAYERS)
  6883.  
  6884. // Per-player GTs.
  6885. #if FIX_GameTextStyles
  6886. _FIXES_PER_PLAYER_GT(13);
  6887. _FIXES_PER_PLAYER_GT(12);
  6888. _FIXES_PER_PLAYER_GT(11);
  6889. _FIXES_PER_PLAYER_GT(10);
  6890. _FIXES_PER_PLAYER_GT(9);
  6891. _FIXES_PER_PLAYER_GT(8);
  6892. _FIXES_PER_PLAYER_GT(7);
  6893. #endif
  6894. _FIXES_PER_PLAYER_GT(6);
  6895. _FIXES_PER_PLAYER_GT(5);
  6896. _FIXES_PER_PLAYER_GT(4);
  6897. _FIXES_PER_PLAYER_GT(3);
  6898. _FIXES_PER_PLAYER_GT(2);
  6899. _FIXES_PER_PLAYER_GT(1);
  6900. _FIXES_PER_PLAYER_GT(0);
  6901.  
  6902. #undef _FIXES_PER_PLAYER_GT
  6903.  
  6904. // Global GTs.
  6905. #if FIX_GameTextStyles
  6906. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[13]),
  6907. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[12]),
  6908. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[11]),
  6909. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[10]),
  6910. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[9]),
  6911. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[8]),
  6912. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[7]);
  6913. #endif
  6914. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[6]),
  6915. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[5]),
  6916. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[4]),
  6917. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[3]),
  6918. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[2]),
  6919. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[1]),
  6920. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[0]);
  6921. }
  6922.  
  6923. #endif
  6924. // =================
  6925. // END: GameText
  6926. // =================
  6927.  
  6928. // ======================
  6929. // BEGIN: GetPlayerSkin
  6930. // ======================
  6931. #if FIX_GetPlayerSkin
  6932. FIXES_SET(PlayerSkin, playerid, GetPlayerSkin(playerid));
  6933. #endif
  6934. // ======================
  6935. // END: GetPlayerSkin
  6936. // ======================
  6937.  
  6938. // =======================
  6939. // BEGIN: SetSpawnInfo_2
  6940. // =======================
  6941. #if FIX_SetSpawnInfo_2
  6942. SetPlayerTeam(playerid, GetPlayerTeam(playerid));
  6943. #endif
  6944. // =======================
  6945. // END: SetSpawnInfo_2
  6946. // =======================
  6947. }
  6948.  
  6949. // =================================
  6950. // BEGIN: TogglePlayerControllable
  6951. // =================================
  6952. #if FIX_TogglePlayerControllable
  6953. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
  6954. #endif
  6955. // =================================
  6956. // END: TogglePlayerControllable
  6957. // =================================
  6958.  
  6959. // =========================
  6960. // BEGIN: SilentTeleport
  6961. // =========================
  6962. #if FIX_SilentTeleport
  6963. FIXES_gsJackedId[playerid] = INVALID_PLAYER_ID;
  6964. #endif
  6965. // =========================
  6966. // END: SilentTeleport
  6967. // =========================
  6968.  
  6969. return FIXES_OnPlayerSpawn(playerid);
  6970. }
  6971.  
  6972. #if defined _ALS_OnPlayerSpawn
  6973. #error _ALS_OnPlayerSpawn defined
  6974. #endif
  6975. #define _ALS_OnPlayerSpawn
  6976. #define OnPlayerSpawn(%0) FIXES_OnPlayerSpawn(%0) <_ALS : _ALS_go>
  6977.  
  6978. _FIXES_FORWARD FIXES_OnPlayerSpawn(playerid);
  6979. #endif
  6980.  
  6981. /**
  6982. * <fixes>OnVehicleMod</fixes>
  6983. */
  6984.  
  6985. #if FIX_OnVehicleMod
  6986. public OnVehicleMod(playerid, vehicleid, componentid)
  6987. {
  6988. #if !FIXES_Single
  6989. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
  6990. {
  6991. return FIXES_OnVehicleMod(playerid, vehicleid, componentid);
  6992. }
  6993. #endif
  6994.  
  6995. // =====================
  6996. // BEGIN: OnVehicleMod
  6997. // =====================
  6998. new
  6999. modelid = GetVehicleModel(vehicleid);
  7000. if (_FIXES_IN_RANGE(modelid, 400, 611 + 1))
  7001. {
  7002. switch (componentid)
  7003. {
  7004. case 1000 .. 1191:
  7005. {
  7006. if (FIXES_gscVehicleMods[(modelid - 400) * 6 + (componentid - 1000 >>> 5)] & 1 << (componentid - 1000 & 0b00011111))
  7007. {
  7008. return FIXES_OnVehicleMod(playerid, vehicleid, componentid);
  7009. }
  7010. }
  7011. case 1192, 1193:
  7012. {
  7013. if (modelid == 576)
  7014. {
  7015. // This save a whole cell off EVERY other vehicle! This
  7016. // is the ONLY vehicle with any mods over "6 * 32 + 999"
  7017. // (1191), the highest value you can fit in 6 cells of a
  7018. // bit array (minus 1000).
  7019. return FIXES_OnVehicleMod(playerid, vehicleid, componentid);
  7020. }
  7021. }
  7022. }
  7023. }
  7024. // Desync the player entirely.
  7025. FIXES_BlockUpdate(playerid);
  7026. return 0;
  7027. // =====================
  7028. // END: OnVehicleMod
  7029. // =====================
  7030. }
  7031.  
  7032. #if defined _ALS_OnVehicleMod
  7033. #error _ALS_OnVehicleMod defined
  7034. #endif
  7035. #define _ALS_OnVehicleMod
  7036. #define OnVehicleMod(%0) FIXES_OnVehicleMod(%0) <_ALS : _ALS_go>
  7037.  
  7038. _FIXES_FORWARD FIXES_OnVehicleMod(playerid, vehicleid, componentid);
  7039. #endif
  7040.  
  7041. /**
  7042. * <fixes>GetPlayerSkin</fixes>
  7043. * <fixes>SetPlayerSkin</fixes>
  7044. */
  7045.  
  7046. #if defined _ALS_SetPlayerSkin
  7047. #error _ALS_SetPlayerSkin defined
  7048. #endif
  7049. native BAD_SetPlayerSkin(playerid, skinid) = SetPlayerSkin;
  7050.  
  7051. /**
  7052. * <fixes>GetPlayerSkin</fixes>
  7053. * <fixes>SetPlayerSkin</fixes>
  7054. */
  7055.  
  7056. #if FIX_GetPlayerSkin || FIX_SetPlayerSkin
  7057. stock FIXES_SetPlayerSkin(playerid, skinid)
  7058. {
  7059. // ======================
  7060. // BEGIN: SetPlayerSkin
  7061. // ======================
  7062. #if FIX_SetPlayerSkin
  7063. new
  7064. vehicleid = GetPlayerVehicleID(playerid);
  7065. if (vehicleid)
  7066. {
  7067. new
  7068. seat = GetPlayerVehicleSeat(playerid);
  7069. ClearAnimations(playerid, 1);
  7070. new
  7071. ret = SetPlayerSkin(playerid, skinid);
  7072. PutPlayerInVehicle(playerid, vehicleid, seat);
  7073.  
  7074. // ===============================
  7075. // BEGIN: DriveBy
  7076. // ===============================
  7077. #if FIX_DriveBy
  7078. _FIXES_HideDriveByWeapon(playerid);
  7079. #endif
  7080. // ======================
  7081. // END: DriveBy
  7082. // ======================
  7083.  
  7084. // ======================
  7085. // BEGIN: GetPlayerSkin
  7086. // ======================
  7087. #if FIX_GetPlayerSkin
  7088. FIXES_SET(PlayerSkin, playerid, skinid);
  7089. #endif
  7090. // ======================
  7091. // END: GetPlayerSkin
  7092. // ======================
  7093.  
  7094. return ret;
  7095. }
  7096.  
  7097. // ======================
  7098. // BEGIN: GetPlayerSkin
  7099. // ======================
  7100. #if FIX_GetPlayerSkin
  7101. else
  7102. #endif
  7103. // ======================
  7104. // END: GetPlayerSkin
  7105. // ======================
  7106. #endif
  7107. // ======================
  7108. // END: SetPlayerSkin
  7109. // ======================
  7110.  
  7111. // ======================
  7112. // BEGIN: GetPlayerSkin
  7113. // ======================
  7114. #if FIX_GetPlayerSkin
  7115. // Watch fot the "else" above if this code ever changes.
  7116. FIXES_SET(PlayerSkin, playerid, skinid);
  7117. #endif
  7118. // ======================
  7119. // END: GetPlayerSkin
  7120. // ======================
  7121.  
  7122. return SetPlayerSkin(playerid, skinid);
  7123. }
  7124.  
  7125. #define _ALS_SetPlayerSkin
  7126. #define SetPlayerSkin( FIXES_SetPlayerSkin(
  7127. #endif
  7128.  
  7129. /**
  7130. * <fixes>GetPlayerSkin</fixes>
  7131. */
  7132.  
  7133. #if defined _ALS_GetPlayerSkin
  7134. #error _ALS_GetPlayerSkin defined
  7135. #endif
  7136. native BAD_GetPlayerSkin(playerid) = GetPlayerSkin;
  7137.  
  7138. /**
  7139. * <fixes>GetPlayerSkin</fixes>
  7140. */
  7141.  
  7142. #if FIX_GetPlayerSkin
  7143. stock FIXES_GetPlayerSkin(playerid)
  7144. {
  7145. return FIXES_GET(PlayerSkin, playerid);
  7146. }
  7147.  
  7148. #define _ALS_GetPlayerSkin
  7149. #define GetPlayerSkin( FIXES_GetPlayerSkin(
  7150. #endif
  7151.  
  7152. /**
  7153. * <fixes>GetWeaponName</fixes>
  7154. */
  7155.  
  7156. #if defined _ALS_GetWeaponName
  7157. #error _ALS_GetWeaponName defined
  7158. #endif
  7159. native BAD_GetWeaponName(weaponid, weapon[], len) = GetWeaponName;
  7160.  
  7161. /**
  7162. * <fixes>GetWeaponName</fixes>
  7163. */
  7164.  
  7165. #if FIX_GetWeaponName
  7166. stock FIXES_GetWeaponName(weaponid, weapon[], len)
  7167. {
  7168. switch (weaponid)
  7169. {
  7170. case 18:
  7171. {
  7172. return
  7173. weapon[0] = 0,
  7174. strcat(weapon, "Molotov Cocktail", len),
  7175. 1;
  7176. }
  7177. case 44:
  7178. {
  7179. return
  7180. weapon[0] = 0,
  7181. strcat(weapon, "Night Vision Goggles", len),
  7182. 1;
  7183. }
  7184. case 45:
  7185. {
  7186. return
  7187. weapon[0] = 0,
  7188. strcat(weapon, "Thermal Goggles", len),
  7189. 1;
  7190. }
  7191. default:
  7192. {
  7193. return GetWeaponName(weaponid, weapon, len);
  7194. }
  7195. }
  7196. return 0;
  7197. }
  7198.  
  7199. #define _ALS_GetWeaponName
  7200. #define GetWeaponName( FIXES_GetWeaponName(
  7201. #endif
  7202.  
  7203. /**
  7204. * <fixes>SetPlayerWorldBounds</fixes>
  7205. * <fixes>TogglePlayerControllable</fixes>
  7206. * <fixes>AllowInteriorWeapons</fixes>
  7207. * <fixes>OnPlayerDeath</fixes>
  7208. * <fixes>Kick</fixes>
  7209. * <fixes>OnVehicleMod</fixes>
  7210. * <fixes>OnPlayerEnterVehicle</fixes>
  7211. * <fixes>OnPlayerEnterVehicle_2</fixes>
  7212. * <fixes>OnPlayerEnterVehicle_3</fixes>
  7213. * <fixes>PassengerSeating</fixes>
  7214. * <fixes>GogglesSync</fixes>
  7215. */
  7216.  
  7217. #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_AllowInteriorWeapons || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2 || FIX_OnPlayerEnterVehicle_3 || FIX_OnPlayerDeath || FIX_Kick || FIX_OnVehicleMod || FIX_PassengerSeating || FIX_GogglesSync
  7218. public OnPlayerUpdate(playerid)
  7219. {
  7220. // =============================
  7221. // BEGIN: OnPlayerEnterVehicle
  7222. // =============================
  7223. #if FIX_OnPlayerEnterVehicle || FIX_Kick || FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle_2
  7224. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_BLOCK)
  7225. {
  7226. return 0;
  7227. }
  7228. #endif
  7229. // =============================
  7230. // END: OnPlayerEnterVehicle
  7231. // =============================
  7232.  
  7233. // ===============================
  7234. // BEGIN: OnPlayerEnterVehicle_3
  7235. // ===============================
  7236. #if FIX_OnPlayerEnterVehicle_3
  7237. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_VEH_ENTER)
  7238. {
  7239. if (GetTickCount() >= FIXES_gsPlayerVehicleTickCount[playerid] + 4000)
  7240. {
  7241. _FIXES_StopPlayerEnterVehicle(playerid);
  7242. }
  7243. else
  7244. {
  7245. if (1020 <= GetPlayerAnimationIndex(playerid) <= 1021)
  7246. {
  7247. FIXES_gsPlayerBools[playerid] |= ~e_FIXES_BOOLS_VEH_ENTER_ANIM;
  7248. }
  7249. else if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_VEH_ENTER_ANIM)
  7250. {
  7251. _FIXES_StopPlayerEnterVehicle(playerid);
  7252. }
  7253. }
  7254. }
  7255. #endif
  7256. // ===============================
  7257. // END: OnPlayerEnterVehicle_3
  7258. // ==============================
  7259.  
  7260. #if !FIXES_Single
  7261. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
  7262. {
  7263. return FIXES_OnPlayerUpdate(playerid);
  7264. }
  7265. #endif
  7266.  
  7267. #if FIX_AllowInteriorWeapons || FIX_TogglePlayerControllable
  7268. new
  7269. e_FIXES_BOOLS:pbools = FIXES_gsPlayerBools[playerid];
  7270. #endif
  7271.  
  7272. // =============================
  7273. // BEGIN: AllowInteriorWeapons
  7274. // =============================
  7275. #if FIX_AllowInteriorWeapons
  7276. if (pbools & e_FIXES_BOOLS_INTERIOR)
  7277. {
  7278. SetPlayerArmedWeapon(playerid, 0);
  7279. }
  7280. #endif
  7281. // ============================
  7282. // END: AllowInteriorWeapons
  7283. // ============================
  7284.  
  7285. #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_GogglesSync
  7286. new
  7287. ud,
  7288. lr,
  7289. keys;
  7290. GetPlayerKeys(playerid, keys, ud, lr);
  7291. #endif
  7292.  
  7293. #if (FIX_SetPlayerWorldBounds || FIX_GogglesSync) && !FIX_TogglePlayerControllable
  7294. #pragma unused ud, lr
  7295. #endif
  7296.  
  7297. // =============================
  7298. // BEGIN: SetPlayerWorldBounds
  7299. // =============================
  7300. #if FIX_SetPlayerWorldBounds
  7301. if (keys & _FIXES_KEY_AIM)
  7302. {
  7303. new
  7304. Float:x,
  7305. Float:y,
  7306. Float:z;
  7307. GetPlayerPos(playerid, x, y, z);
  7308. if (FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] < x < FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] && FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] < y < FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY])
  7309. {
  7310. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = x,
  7311. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = y,
  7312. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = z;
  7313. }
  7314. else
  7315. {
  7316. SetPlayerPos(playerid, FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX], FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY], FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ]);
  7317. }
  7318. }
  7319. #endif
  7320. // =============================
  7321. // END: SetPlayerWorldBounds
  7322. // =============================
  7323.  
  7324. // ======================
  7325. // BEGIN: OnPlayerDeath
  7326. // ======================
  7327. #if FIX_OnPlayerDeath
  7328. FIXES_gsLastAnimation[playerid] = GetPlayerAnimationIndex(playerid);
  7329. #endif
  7330. // ======================
  7331. // END: OnPlayerDeath
  7332. // ======================
  7333.  
  7334. // =================================
  7335. // BEGIN: TogglePlayerControllable
  7336. // =================================
  7337. #if FIX_TogglePlayerControllable
  7338. // MUST come last.
  7339. if (pbools & e_FIXES_BOOLS_UNCONTROLLABLE)
  7340. {
  7341. // Keys based sync blocking, modified based on a post by Slice:
  7342. // http://forum.sa-mp.com/showpost.php?p=876854 Use "playerid"
  7343. // here as it's a variable that already exists, but note that
  7344. // after this point, you CANNOT use "playerid" as it has been
  7345. // "clobbered" (and yes, that's the technical term). This is
  7346. // just to avoid "statement has no effect" warnings. ALWAYS
  7347. // return 0 in this case, regardless of what other callbacks
  7348. // return.
  7349. playerid = FIXES_OnPlayerUpdate(playerid);
  7350. if (keys || ud || lr)
  7351. {
  7352. return 0;
  7353. }
  7354. else
  7355. {
  7356. return playerid;
  7357. }
  7358. }
  7359. #endif
  7360. // =================================
  7361. // END: TogglePlayerControllable
  7362. // =================================
  7363.  
  7364. // =================================
  7365. // BEGIN: PassengerSeating
  7366. // =================================
  7367. #if FIX_PassengerSeating
  7368. if (FIXES_gsPSTimer[playerid] != 0 && GetTickCount() > FIXES_gsPSTimer[playerid])
  7369. {
  7370. if (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_ENTER_VEHICLE)
  7371. {
  7372. #if !FIX_OnPlayerDeath
  7373. new
  7374. animation = GetPlayerAnimationIndex(playerid);
  7375. #else
  7376. new
  7377. animation = FIXES_gsLastAnimation[playerid];
  7378. #endif
  7379.  
  7380. if (_FIXES_NO_RANGE(animation, 1007, 1060 + 1) && _FIXES_NO_RANGE(animation, 225, 233 + 1))
  7381. {
  7382. ClearAnimations(playerid, 1);
  7383. FIXES_gsPSTimer[playerid] = 0;
  7384. }
  7385. }
  7386. else
  7387. {
  7388. FIXES_gsPSTimer[playerid] = 0;
  7389. }
  7390. }
  7391. #endif
  7392. // =================================
  7393. // END: PassengerSeating
  7394. // =================================
  7395.  
  7396. // =================================
  7397. // BEGIN: GogglesSync
  7398. // =================================
  7399. #if FIX_GogglesSync
  7400. switch (GetPlayerWeapon(playerid))
  7401. {
  7402. case _FIXES_WEAPON_NIGHT_VIS_GOGGLES, _FIXES_WEAPON_THERMAL_GOGGLES:
  7403. {
  7404. if ((keys & KEY_FIRE) && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  7405. {
  7406. return 0;
  7407. }
  7408. }
  7409. }
  7410. #endif
  7411. // =================================
  7412. // END: GogglesSync
  7413. // =================================
  7414.  
  7415. return FIXES_OnPlayerUpdate(playerid);
  7416. }
  7417.  
  7418. #if defined _ALS_OnPlayerUpdate
  7419. #error _ALS_OnPlayerUpdate defined
  7420. #endif
  7421. #define _ALS_OnPlayerUpdate
  7422. #define OnPlayerUpdate(%0) FIXES_OnPlayerUpdate(%0) <_ALS : _ALS_go>
  7423.  
  7424. _FIXES_FORWARD FIXES_OnPlayerUpdate(playerid);
  7425. #endif
  7426.  
  7427. /**
  7428. * <remarks>
  7429. * TODO: Modify this to remove aim animations when they get to the boundaries.
  7430. * </remarks>
  7431. * <fixes>SetPlayerWorldBounds</fixes>
  7432. */
  7433.  
  7434. #if defined _ALS_SetPlayerWorldBounds
  7435. #error _ALS_SetPlayerWorldBounds defined
  7436. #endif
  7437. native BAD_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min) = SetPlayerWorldBounds;
  7438.  
  7439. /**
  7440. * <remarks>
  7441. * TODO: Modify this to remove aim animations when they get to the boundaries.
  7442. * </remarks>
  7443. * <fixes>SetPlayerWorldBounds</fixes>
  7444. */
  7445.  
  7446. #if FIX_SetPlayerWorldBounds || FIX_GetPlayerWorldBounds
  7447. #if FIXES_Single
  7448. stock FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
  7449. {
  7450. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  7451. {
  7452. FIXES_PRINTF("Call SetPlayerWorldBounds");
  7453. if (x_max == x_min || y_max == y_min)
  7454. {
  7455. // Impossibly small area, disable checks entirely.
  7456. return
  7457. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] = FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] = _FIXES_MAX_WORLDBOUNDS,
  7458. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] = FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] = _FIXES_MIN_WORLDBOUNDS,
  7459. SetPlayerWorldBounds(playerid, _FIXES_MAX_WORLDBOUNDS, _FIXES_MIN_WORLDBOUNDS, _FIXES_MAX_WORLDBOUNDS, _FIXES_MIN_WORLDBOUNDS);
  7460. }
  7461. // This code could do with a way to mostly remove the checks. Maybe
  7462. // when setting everything to FIXES_INFINITY (with default
  7463. // parameters).
  7464. new
  7465. Float:tmp;
  7466. if (x_max < x_min)
  7467. {
  7468. tmp = x_min,
  7469. x_min = x_max,
  7470. x_max = tmp;
  7471. }
  7472. if (y_max < y_min)
  7473. {
  7474. tmp = y_min,
  7475. y_min = y_max,
  7476. y_max = tmp;
  7477. }
  7478. // Give a little leway so this fix isn't noticed if you're not
  7479. // trying to break through the world bounds. Leway removed in
  7480. // favour of keys.
  7481. return
  7482. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] = x_min,
  7483. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] = x_max,
  7484.  
  7485. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] = y_min,
  7486. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] = y_max,
  7487.  
  7488. GetPlayerPos(playerid, tmp, tmp, tmp),
  7489. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = (x_max - x_min) / 2 + x_min,
  7490. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = (y_max - y_min) / 2 + y_min,
  7491. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = tmp,
  7492.  
  7493. SetPlayerWorldBounds(playerid, x_max, x_min, y_max, y_min);
  7494. }
  7495. return 0;
  7496. }
  7497. #else
  7498. forward _FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min);
  7499.  
  7500. stock FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
  7501. {
  7502. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  7503. {
  7504. FIXES_PRINTF("Call SetPlayerWorldBounds");
  7505. // Impossibly small area, disable checks entirely.
  7506. if (x_max == x_min || y_max == y_min)
  7507. return
  7508. CallRemoteFunction(FIXES_gscSetPlayerWorldBounds, FIXES_gscSpec@iffff, playerid, _FIXES_MAX_WORLDBOUNDS, _FIXES_MIN_WORLDBOUNDS, _FIXES_MAX_WORLDBOUNDS, _FIXES_MIN_WORLDBOUNDS),
  7509. getproperty(5, FIXES_gscReturnProperty);
  7510. new
  7511. Float:tmp;
  7512. if (x_max < x_min)
  7513. {
  7514. tmp = x_min,
  7515. x_min = x_max,
  7516. x_max = tmp;
  7517. }
  7518. if (y_max < y_min)
  7519. {
  7520. tmp = y_min,
  7521. y_min = y_max,
  7522. y_max = tmp;
  7523. }
  7524. return
  7525. CallRemoteFunction(FIXES_gscSetPlayerWorldBounds, FIXES_gscSpec@iffff, playerid, x_max, x_min, y_max, y_min),
  7526. getproperty(5, FIXES_gscReturnProperty);
  7527. }
  7528. return 0;
  7529. }
  7530.  
  7531. public _FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
  7532. {
  7533. FIXES_PRINTF("_FIXES_SetPlayerWorldBounds: %d %.2f %.2f %.2f %.2f", playerid, x_max, x_min, y_max, y_min);
  7534. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] = x_min,
  7535. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] = x_max,
  7536.  
  7537. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] = y_min,
  7538. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] = y_max;
  7539.  
  7540. new
  7541. Float:tmp;
  7542. GetPlayerPos(playerid, tmp, tmp, tmp),
  7543. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = (x_max - x_min) / 2 + x_min,
  7544. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = (y_max - y_min) / 2 + y_min,
  7545. FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = tmp;
  7546.  
  7547. _FIXES_IS_IN_CHARGE()
  7548. {
  7549. setproperty(5, FIXES_gscReturnProperty, SetPlayerWorldBounds(playerid, x_max, x_min, y_max, y_min));
  7550. }
  7551. return 0;
  7552. }
  7553. #endif
  7554.  
  7555. #define _ALS_SetPlayerWorldBounds
  7556. #define SetPlayerWorldBounds( FIXES_SetPlayerWorldBounds(
  7557. #endif
  7558.  
  7559. #if FIX_GetPlayerWorldBounds
  7560. stock FIXES_GetPlayerWorldBounds(playerid, &Float:x_max, &Float:x_min, &Float:y_max, &Float:y_min)
  7561. {
  7562. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  7563. {
  7564. x_min = FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX],
  7565. x_max = FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX],
  7566. y_min = FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY],
  7567. y_max = FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY];
  7568. }
  7569. }
  7570.  
  7571. #define _ALS_GetPlayerWorldBounds
  7572. #define GetPlayerWorldBounds( FIXES_GetPlayerWorldBounds(
  7573. #endif
  7574.  
  7575. #if FIX_ClearPlayerWorldBounds
  7576. stock FIXES_ClearPlayerWorldBounds(playerid)
  7577. {
  7578. SetPlayerWorldBounds(playerid, _FIXES_MAX_WORLDBOUNDS, _FIXES_MIN_WORLDBOUNDS, _FIXES_MAX_WORLDBOUNDS, _FIXES_MIN_WORLDBOUNDS);
  7579. }
  7580.  
  7581. #define _ALS_ClearPlayerWorldBounds
  7582. #define ClearPlayerWorldBounds( FIXES_ClearPlayerWorldBounds(
  7583. #endif
  7584.  
  7585. /**
  7586. * <fixes>TogglePlayerControllable</fixes>
  7587. */
  7588.  
  7589. #if defined _ALS_TogglePlayerControllable
  7590. #error _ALS_TogglePlayerControllable defined
  7591. #endif
  7592. native BAD_TogglePlayerControllable(playerid, toggle) = TogglePlayerControllable;
  7593.  
  7594. /**
  7595. * <fixes>TogglePlayerControllable</fixes>
  7596. */
  7597.  
  7598. #if FIX_TogglePlayerControllable
  7599. #if FIXES_Single
  7600. stock FIXES_TogglePlayerControllable(playerid, toggle)
  7601. {
  7602. if (TogglePlayerControllable(playerid, toggle))
  7603. {
  7604. if (toggle)
  7605. {
  7606. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
  7607. }
  7608. else
  7609. {
  7610. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_UNCONTROLLABLE;
  7611. }
  7612. return 1;
  7613. }
  7614. return 0;
  7615. }
  7616. #else
  7617. forward _FIXES_TogglePlayerControllable(playerid, toggle);
  7618.  
  7619. stock FIXES_TogglePlayerControllable(playerid, toggle)
  7620. {
  7621. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  7622. {
  7623. return
  7624. CallRemoteFunction(FIXES_gscTogglePlayerControl, FIXES_gscSpec@ii, playerid, toggle),
  7625. getproperty(5, FIXES_gscReturnProperty);
  7626. }
  7627. return 0;
  7628. }
  7629.  
  7630. public _FIXES_TogglePlayerControllable(playerid, toggle)
  7631. {
  7632. _FIXES_IS_IN_CHARGE()
  7633. {
  7634. if (toggle)
  7635. {
  7636. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
  7637. }
  7638. else
  7639. {
  7640. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_UNCONTROLLABLE;
  7641. }
  7642. setproperty(5, FIXES_gscReturnProperty, TogglePlayerControllable(playerid, toggle));
  7643. }
  7644. }
  7645. #endif
  7646.  
  7647. #define _ALS_TogglePlayerControllable
  7648. #define TogglePlayerControllable( FIXES_TogglePlayerControllable(
  7649. #endif
  7650.  
  7651. /**
  7652. * <fixes>AllowInteriorWeapons</fixes>
  7653. * <fixes>GetPlayerInterior</fixes>
  7654. */
  7655.  
  7656. #if FIX_AllowInteriorWeapons || FIX_GetPlayerInterior || FIX_SilentTeleport
  7657. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  7658. {
  7659.  
  7660. // =============================
  7661. // BEGIN: SilentTeleport
  7662. // =============================
  7663. #if FIX_SilentTeleport
  7664. if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER && FIXES_gsJackedId[playerid] != INVALID_PLAYER_ID)
  7665. {
  7666. ClearAnimations(FIXES_gsJackedId[playerid]);
  7667. }
  7668. #endif
  7669. // =============================
  7670. // END: SilentTeleport
  7671. // =============================
  7672.  
  7673. // ==========================
  7674. // BEGIN: GetPlayerInterior
  7675. // ==========================
  7676. #if FIX_GetPlayerInterior
  7677. _FIXES_IS_IN_CHARGE()
  7678. {
  7679. FIXES_SET(PlayerInterior, playerid, newinteriorid);
  7680. }
  7681. #endif
  7682. // ==========================
  7683. // END: GetPlayerInterior
  7684. // ==========================
  7685.  
  7686. // =============================
  7687. // BEGIN: AllowInteriorWeapons
  7688. // =============================
  7689. #if FIX_AllowInteriorWeapons
  7690. if (newinteriorid)
  7691. {
  7692. if (FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR)
  7693. {
  7694. // This only needs doing here if "GetPlayerWeapon" is set.
  7695. // If it isn't, even though "AllowInteriorWeapons" can use
  7696. // this code on its own, it doesn't as "OnPlayerUpdate"
  7697. // takes care of it all.
  7698. // TODO: Rewrite this code to use a single bit to indicate
  7699. // if a player can have a weapon or not, and just use the in
  7700. // the "OnPlayerUpdate" callback, instead of several checks.
  7701. // DONE!
  7702. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_INTERIOR;
  7703. _FIXES_IS_IN_CHARGE()
  7704. {
  7705. SetPlayerArmedWeapon(playerid, 0);
  7706. #if FIX_GetPlayerWeapon
  7707. if (IsPlayerInAnyVehicle(playerid))
  7708. {
  7709. FIXES_SET(PlayerWeapon, playerid, 0);
  7710. }
  7711. #endif
  7712. }
  7713. }
  7714. }
  7715. else
  7716. {
  7717. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_INTERIOR;
  7718. }
  7719. #endif
  7720. // ===========================
  7721. // END: AllowInteriorWeapons
  7722. // ===========================
  7723. return FIXES_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
  7724. }
  7725.  
  7726. #if defined _ALS_OnPlayerInteriorChange
  7727. #error _ALS_OnPlayerInteriorChange defined
  7728. #endif
  7729. #define _ALS_OnPlayerInteriorChange
  7730. #define OnPlayerInteriorChange(%0) FIXES_OnPlayerInteriorChange(%0) <_ALS : _ALS_go>
  7731.  
  7732. _FIXES_FORWARD FIXES_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
  7733. #endif
  7734.  
  7735. /**
  7736. * <fixes>DriveBy</fixes>
  7737. */
  7738.  
  7739. #if FIX_DriveBy
  7740. forward _FIXES_DriveBy(playerid);
  7741.  
  7742. public _FIXES_DriveBy(playerid)
  7743. {
  7744. if (GetPlayerState(playerid) == PLAYER_STATE_PASSENGER)
  7745. {
  7746. SetPlayerArmedWeapon(playerid, FIXES_gsDriveByWeapon[playerid]);
  7747. }
  7748. return FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_DRIVE_BY;
  7749. }
  7750.  
  7751. static stock _FIXES_HideDriveByWeapon(playerid)
  7752. {
  7753. FIXES_gsDriveByWeapon[playerid] = GetPlayerWeapon(playerid),
  7754. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_DRIVE_BY,
  7755. SetPlayerArmedWeapon(playerid, 0),
  7756. ApplyAnimation(playerid, "PED", "CAR_GETIN_RHS", 4.1, 0, 0, 0, 0, 1, 1),
  7757. SetTimerEx(FIXES_gscDriveBy, 500, 0, FIXES_gscSpec@i, playerid);
  7758. }
  7759. #endif
  7760.  
  7761. /**
  7762. * <fixes>DriveBy</fixes>
  7763. */
  7764.  
  7765. #if FIX_DriveBy
  7766. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  7767. {
  7768. // ===============================
  7769. // BEGIN: DriveBy
  7770. // ===============================
  7771. #if FIX_DriveBy
  7772. #if !FIXES_Single
  7773. if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
  7774. #endif
  7775. {
  7776. if ((newkeys & KEY_CROUCH) && !(oldkeys & KEY_CROUCH) && GetPlayerState(playerid) == PLAYER_STATE_PASSENGER && GetPlayerCameraMode(playerid) == 55 && !(FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_DRIVE_BY))
  7777. {
  7778. _FIXES_HideDriveByWeapon(playerid);
  7779. }
  7780. }
  7781. #endif
  7782. // =============================
  7783. // END: DriveBy
  7784. // =============================
  7785.  
  7786. return FIXES_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  7787. }
  7788.  
  7789. #if defined _ALS_OnPlayerKeyStateChange
  7790. #error _ALS_OnPlayerKeyStateChange defined
  7791. #endif
  7792. #define _ALS_OnPlayerKeyStateChange
  7793. #define OnPlayerKeyStateChange(%0) FIXES_OnPlayerKeyStateChange(%0) <_ALS : _ALS_go>
  7794.  
  7795. _FIXES_FORWARD FIXES_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  7796. #endif
  7797.  
  7798. /**
  7799. * <fixes>OnPlayerEnterVehicle_2</fixes>
  7800. * <fixes>OnPlayerEnterVehicle_3</fixes>
  7801. * <fixes>PassengerSeating</fixes>
  7802. */
  7803.  
  7804. #if FIX_OnPlayerEnterVehicle_2 || FIX_OnPlayerEnterVehicle_3 || FIX_PassengerSeating || FIX_SilentTeleport
  7805. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  7806. {
  7807. // ===============================
  7808. // BEGIN: OnPlayerEnterVehicle_2
  7809. // ===============================
  7810. #if FIX_OnPlayerEnterVehicle_2
  7811. if (!(0 < vehicleid < MAX_VEHICLES))
  7812. {
  7813. FIXES_BlockUpdate(playerid);
  7814. return 0;
  7815. }
  7816. #endif
  7817. // =============================
  7818. // END: OnPlayerEnterVehicle_2
  7819. // =============================
  7820.  
  7821. // ===============================
  7822. // BEGIN: OnPlayerEnterVehicle_3
  7823. // ===============================
  7824. #if FIX_OnPlayerEnterVehicle_3
  7825. if (FIXES_gsVehicleIsLocked[vehicleid])
  7826. {
  7827. new engine, lights, alarm, doors, bonnet, boot, objective;
  7828. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  7829. SetVehicleParamsEx(vehicleid, engine, lights, alarm, VEHICLE_PARAMS_ON, bonnet, boot, objective);
  7830.  
  7831. FIXES_gsPlayerBools[playerid] |= ~e_FIXES_BOOLS_VEH_ENTER;
  7832. FIXES_gsPlayerVehicleID[playerid] = vehicleid;
  7833. FIXES_gsPlayerVehicleTickCount[playerid] = GetTickCount();
  7834. }
  7835. #endif
  7836. // =============================
  7837. // END: OnPlayerEnterVehicle_3
  7838. // =============================
  7839.  
  7840. // =============================
  7841. // BEGIN: PassengerSeating
  7842. // =============================
  7843. #if FIX_PassengerSeating
  7844. if (ispassenger)
  7845. {
  7846. new
  7847. model = GetVehicleModel(vehicleid);
  7848.  
  7849. FIXES_gsPSTimer[playerid] = GetTickCount() + ((model == 431 || model == 437) ? 8000 : 2800);
  7850. }
  7851. #endif
  7852. // =============================
  7853. // END: PassengerSeating
  7854. // =============================
  7855.  
  7856. // =============================
  7857. // BEGIN: SilentTeleport
  7858. // =============================
  7859. #if FIX_SilentTeleport
  7860. if (!ispassenger)
  7861. {
  7862. _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
  7863. {
  7864. if (GetPlayerVehicleID(i) == vehicleid && GetPlayerState(i) == PLAYER_STATE_DRIVER)
  7865. {
  7866. FIXES_gsJackedId[i] = playerid;
  7867. SetTimerEx("FIXES_RemoveJackedId", 5000, false, "d", i);
  7868. break;
  7869. }
  7870. }
  7871. }
  7872. #endif
  7873. // =============================
  7874. // END: SilentTeleport
  7875. // =============================
  7876.  
  7877. return FIXES_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
  7878. }
  7879.  
  7880. #if defined _ALS_OnPlayerEnterVehicle
  7881. #error _ALS_OnPlayerEnterVehicle defined
  7882. #endif
  7883. #define _ALS_OnPlayerEnterVehicle
  7884. #define OnPlayerEnterVehicle(%0) FIXES_OnPlayerEnterVehicle(%0) <_ALS : _ALS_go>
  7885.  
  7886. _FIXES_FORWARD FIXES_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
  7887. #endif
  7888.  
  7889. /**
  7890. * <fixes>OnPlayerEnterVehicle_2</fixes>
  7891. */
  7892.  
  7893. #if FIX_OnPlayerEnterVehicle_2
  7894. public OnPlayerExitVehicle(playerid, vehicleid)
  7895. {
  7896. // ===============================
  7897. // BEGIN: OnPlayerEnterVehicle_2
  7898. // ===============================
  7899. #if FIX_OnPlayerEnterVehicle_2
  7900. if (_FIXES_IN_RANGE(vehicleid, 1, MAX_VEHICLES))
  7901. {
  7902. return FIXES_OnPlayerExitVehicle(playerid, vehicleid);
  7903. }
  7904. FIXES_BlockUpdate(playerid);
  7905. return 0;
  7906. #endif
  7907. // =============================
  7908. // END: OnPlayerEnterVehicle_2
  7909. // =============================
  7910. }
  7911.  
  7912. #if defined _ALS_OnPlayerExitVehicle
  7913. #error _ALS_OnPlayerExitVehicle defined
  7914. #endif
  7915. #define _ALS_OnPlayerExitVehicle
  7916. #define OnPlayerExitVehicle(%0) FIXES_OnPlayerExitVehicle(%0) <_ALS : _ALS_go>
  7917.  
  7918. _FIXES_FORWARD FIXES_OnPlayerExitVehicle(playerid, vehicleid);
  7919. #endif
  7920.  
  7921. /**
  7922. * <remarks>
  7923. * Block a player from using <symbolref name="OnPlayerUpdate" /> at all.
  7924. * </remarks>
  7925. */
  7926.  
  7927. #if FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2 || FIX_Kick || FIX_OnVehicleMod
  7928. static stock FIXES_BlockUpdate(playerid, bool:kick = true)
  7929. {
  7930. if (kick)
  7931. {
  7932. #if FIXES_SilentKick
  7933. new
  7934. ip[22];
  7935. GetPlayerIp(playerid, ip, sizeof (ip)),
  7936. format(ip, sizeof (ip), "banip %s", ip),
  7937. SendRconCommand(ip),
  7938. FIXES_gsPlayerIP[playerid] = strval(ip[kick]) << 24,
  7939. kick = strfind(ip, FIXES_gscDot, false, kick) + 1,
  7940. FIXES_gsPlayerIP[playerid] |= strval(ip[kick]) << 16,
  7941. kick = strfind(ip, FIXES_gscDot, false, kick) + 1,
  7942. FIXES_gsPlayerIP[playerid] |= strval(ip[kick]) << 8,
  7943. kick = strfind(ip, FIXES_gscDot, false, kick) + 1,
  7944. FIXES_gsPlayerIP[playerid] |= strval(ip[kick]);
  7945. #else
  7946. Kick(playerid);
  7947. #endif
  7948. }
  7949. return
  7950. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_BLOCK,
  7951. 0;
  7952. }
  7953. #endif
  7954.  
  7955. /**
  7956. * <remarks>
  7957. * Block a player from entering a vehicle after the animation for a locked
  7958. * driver door
  7959. * </remarks>
  7960. * <fixes>OnPlayerEnterVehicle_3</fixes>
  7961. */
  7962.  
  7963. #if FIX_OnPlayerEnterVehicle_3
  7964. static stock _FIXES_StopPlayerEnterVehicle(playerid)
  7965. {
  7966. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_VEH_ENTER;
  7967. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_VEH_ENTER_ANIM;
  7968.  
  7969. new
  7970. vehicleid = FIXES_gsPlayerVehicleID[playerid],
  7971. engine, lights, alarm, doors, bonnet, boot, objective;
  7972.  
  7973. GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  7974. SetVehicleParamsEx(vehicleid, engine, lights, alarm, VEHICLE_PARAMS_OFF, bonnet, boot, objective);
  7975.  
  7976. ClearAnimations(playerid);
  7977. }
  7978. #endif
  7979.  
  7980. /**
  7981. * <fixes>GetPlayerMenu</fixes>
  7982. */
  7983.  
  7984. #if FIX_GetPlayerMenu
  7985. public OnPlayerSelectedMenuRow(playerid, row)
  7986. {
  7987. // ======================
  7988. // BEGIN: GetPlayerMenu
  7989. // ======================
  7990. #if FIXES_Single
  7991. FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
  7992. new
  7993. ret = FIXES_OnPlayerSelectedMenuRow(playerid, row);
  7994. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
  7995. {
  7996. FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
  7997. }
  7998. return ret;
  7999. #else
  8000. new
  8001. Menu:cur = FIXES_gsCurrentMenu[playerid];
  8002. _FIXES_IS_IN_CHARGE()
  8003. {
  8004. setproperty(5, FIXES_gscMenuProperty, _:cur);
  8005. CallRemoteFunction(FIXES_gscClearPlayerMenu, FIXES_gscSpec@i, playerid);
  8006. FIXES_gsCurrentMenu[playerid] = cur;
  8007. new
  8008. ret = FIXES_OnPlayerSelectedMenuRow(playerid, row);
  8009. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
  8010. {
  8011. FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
  8012. }
  8013. return ret;
  8014. }
  8015. else
  8016. {
  8017. FIXES_gsCurrentMenu[playerid] = Menu:getproperty(5, FIXES_gscMenuProperty);
  8018. FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
  8019. new
  8020. ret = FIXES_OnPlayerSelectedMenuRow(playerid, row);
  8021. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
  8022. {
  8023. FIXES_gsCurrentMenu[playerid] = cur;
  8024. }
  8025. return ret;
  8026. }
  8027. #endif
  8028. // ======================
  8029. // END: GetPlayerMenu
  8030. // ======================
  8031. }
  8032.  
  8033. #if defined _ALS_OnPlayerSelectedMenuRow
  8034. #error _ALS_OnPlayerSelectedMenuRow defined
  8035. #endif
  8036. #define _ALS_OnPlayerSelectedMenuRow
  8037. #define OnPlayerSelectedMenuRow(%0) FIXES_OnPlayerSelectedMenuRow(%0) <_ALS : _ALS_go>
  8038.  
  8039. _FIXES_FORWARD FIXES_OnPlayerSelectedMenuRow(playerid, row);
  8040. #endif
  8041.  
  8042. /**
  8043. * <fixes>GetPlayerMenu</fixes>
  8044. */
  8045.  
  8046. #if FIX_GetPlayerMenu
  8047. public OnPlayerExitedMenu(playerid)
  8048. {
  8049. // ======================
  8050. // BEGIN: GetPlayerMenu
  8051. // ======================
  8052. #if FIXES_Single
  8053. FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
  8054. new
  8055. ret = FIXES_OnPlayerExitedMenu(playerid);
  8056. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
  8057. {
  8058. FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
  8059. }
  8060. return ret;
  8061. #else
  8062. new
  8063. Menu:cur = FIXES_gsCurrentMenu[playerid];
  8064. _FIXES_IS_IN_CHARGE()
  8065. {
  8066. setproperty(5, FIXES_gscMenuProperty, _:cur);
  8067. CallRemoteFunction(FIXES_gscClearPlayerMenu, FIXES_gscSpec@i, playerid);
  8068. FIXES_gsCurrentMenu[playerid] = cur;
  8069. new
  8070. ret = FIXES_OnPlayerExitedMenu(playerid);
  8071. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
  8072. {
  8073. FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
  8074. }
  8075. return ret;
  8076. }
  8077. else
  8078. {
  8079. FIXES_gsCurrentMenu[playerid] = Menu:getproperty(5, FIXES_gscMenuProperty);
  8080. FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
  8081. new
  8082. ret = FIXES_OnPlayerExitedMenu(playerid);
  8083. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
  8084. {
  8085. FIXES_gsCurrentMenu[playerid] = cur;
  8086. }
  8087. return ret;
  8088. }
  8089. #endif
  8090. // ======================
  8091. // END: GetPlayerMenu
  8092. // ======================
  8093. }
  8094.  
  8095. #if defined _ALS_OnPlayerExitedMenu
  8096. #error _ALS_OnPlayerExitedMenu defined
  8097. #endif
  8098. #define _ALS_OnPlayerExitedMenu
  8099. #define OnPlayerExitedMenu(%0) FIXES_OnPlayerExitedMenu(%0) <_ALS : _ALS_go>
  8100.  
  8101. _FIXES_FORWARD FIXES_OnPlayerExitedMenu(playerid);
  8102. #endif
  8103.  
  8104. /**
  8105. * <fixes>Menus</fixes>
  8106. */
  8107.  
  8108. #if _FIX_Menus
  8109. #define FIXES_IS_VALID_MENU(%0) (_FIXES_IN_RANGE(_:(%0), 0, MAX_MENUS) && (FIXES_gsValidMenus[_:(%0) >>> 5] & (1 << (_:(%0) & 0x1F))))
  8110. #endif
  8111.  
  8112. /**
  8113. * <fixes>Menus</fixes>
  8114. */
  8115.  
  8116. #if defined _ALS_CreateMenu
  8117. #error _ALS_CreateMenu defined
  8118. #endif
  8119. native Menu:BAD_CreateMenu(const title[], columns, Float:x, Float:y, Float:col1width, Float:col2width = 0.0) = CreateMenu;
  8120.  
  8121. #if _FIX_Menus
  8122. #if !FIXES_Single
  8123. forward _FIXES_CreateMenu(ret);
  8124.  
  8125. public _FIXES_CreateMenu(ret)
  8126. {
  8127. FIXES_gsValidMenus[ret >>> 5] |= 1 << (ret & 0x1F);
  8128. }
  8129. #endif
  8130.  
  8131. stock Menu:FIXES_CreateMenu(const title[], columns, Float:x, Float:y, Float:col1width, Float:col2width = 0.0)
  8132. {
  8133. new
  8134. Menu:ret = CreateMenu(title, columns, x, y, col1width, col2width);
  8135. if (_FIXES_IN_RANGE(_:ret, 0, MAX_MENUS))
  8136. {
  8137. #if FIXES_Single
  8138. FIXES_gsValidMenus[_:ret >>> 5] |= 1 << (_:ret & 0x1F);
  8139. #else
  8140. CallRemoteFunction("_FIXES_CreateMenu", FIXES_gscSpec@i, _:ret);
  8141. #endif
  8142. }
  8143. return ret;
  8144. }
  8145.  
  8146. #define _ALS_CreateMenu
  8147. #define CreateMenu( FIXES_CreateMenu(
  8148. #endif
  8149.  
  8150. /**
  8151. * <fixes>GetPlayerMenu</fixes>
  8152. */
  8153.  
  8154. #if FIX_GetPlayerMenu && !FIXES_Single
  8155. forward _FIXES_SetPlayerMenu(playerid, Menu:menuid);
  8156.  
  8157. public _FIXES_SetPlayerMenu(playerid, Menu:menuid)
  8158. {
  8159. FIXES_gsSettings |= e_FIXES_SETTINGS_MENU_SET;
  8160. FIXES_gsCurrentMenu[playerid] = menuid;
  8161. }
  8162. #endif
  8163.  
  8164. /**
  8165. * <fixes>GetPlayerMenu</fixes>
  8166. */
  8167.  
  8168. #if FIX_GetPlayerMenu && !FIXES_Single
  8169. forward _FIXES_ClearPlayerMenu(playerid);
  8170.  
  8171. public _FIXES_ClearPlayerMenu(playerid)
  8172. {
  8173. FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
  8174. FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
  8175. }
  8176. #endif
  8177.  
  8178. /**
  8179. * <fixes>GetPlayerMenu</fixes>
  8180. */
  8181.  
  8182. #if defined _ALS_DestroyMenu
  8183. #error _ALS_DestroyMenu defined
  8184. #endif
  8185. native BAD_DestroyMenu(Menu:menuid) = DestroyMenu;
  8186.  
  8187. /**
  8188. * <fixes>GetPlayerMenu</fixes>
  8189. */
  8190.  
  8191. #if _FIX_Menus || FIX_GetPlayerMenu
  8192. #if _FIX_Menus && !FIXES_Single
  8193. forward _FIXES_DestroyMenu(ret);
  8194.  
  8195. public _FIXES_DestroyMenu(ret)
  8196. {
  8197. FIXES_gsValidMenus[ret >>> 5] &= ~(1 << (ret & 0x1F));
  8198. }
  8199. #endif
  8200.  
  8201. stock FIXES_DestroyMenu(Menu:menuid)
  8202. {
  8203. #if _FIX_Menus
  8204. if (FIXES_IS_VALID_MENU(menuid))
  8205. #endif
  8206. {
  8207. if (DestroyMenu(Menu:menuid))
  8208. {
  8209. #if _FIX_Menus
  8210. #if FIXES_Single
  8211. FIXES_gsValidMenus[_:menuid >>> 5] &= ~(1 << (_:menuid & 0x1F));
  8212. #else
  8213. CallRemoteFunction("_FIXES_DestroyMenu", FIXES_gscSpec@i, _:menuid);
  8214. #endif
  8215. #endif
  8216. _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
  8217. {
  8218. if (FIXES_gsCurrentMenu[playerid] == menuid)
  8219. {
  8220. if (HideMenuForPlayer(menuid, playerid))
  8221. {
  8222. #if FIXES_Single
  8223. FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
  8224. FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
  8225. #else
  8226. CallRemoteFunction(FIXES_gscSetPlayerMenu, FIXES_gscSpec@ii, playerid, INVALID_MENU);
  8227. #endif
  8228. }
  8229. }
  8230. }
  8231. return 1;
  8232. }
  8233. }
  8234. return 0;
  8235. }
  8236.  
  8237. #define _ALS_DestroyMenu
  8238. #define DestroyMenu( FIXES_DestroyMenu(
  8239. #endif
  8240.  
  8241. /**
  8242. * <fixes>AddMenuItem</fixes>
  8243. */
  8244.  
  8245. #if defined _ALS_AddMenuItem
  8246. #error _ALS_AddMenuItem defined
  8247. #endif
  8248. native BAD_AddMenuItem(Menu:menuid, column, const menutext[]) = AddMenuItem;
  8249.  
  8250. /**
  8251. * <fixes>AddMenuItem</fixes>
  8252. */
  8253.  
  8254. #if FIX_AddMenuItem
  8255. stock FIXES_AddMenuItem(Menu:menuid, column, const menutext[])
  8256. {
  8257. if (FIXES_IS_VALID_MENU(menuid))
  8258. {
  8259. return AddMenuItem(menuid, column, menutext);
  8260. }
  8261. return 0;
  8262. }
  8263.  
  8264. #define _ALS_AddMenuItem
  8265. #define AddMenuItem( FIXES_AddMenuItem(
  8266. #endif
  8267.  
  8268. /**
  8269. * <fixes>SetMenuColumnHeader</fixes>
  8270. */
  8271.  
  8272. #if defined _ALS_SetMenuColumnHeader
  8273. #error _ALS_SetMenuColumnHeader defined
  8274. #endif
  8275. native BAD_SetMenuColumnHeader(Menu:menuid, column, const columnheader[]) = SetMenuColumnHeader;
  8276.  
  8277. /**
  8278. * <fixes>SetMenuColumnHeader</fixes>
  8279. */
  8280.  
  8281. #if FIX_SetMenuColumnHeader
  8282. stock FIXES_SetMenuColumnHeader(Menu:menuid, column, const columnheader[])
  8283. {
  8284. if (FIXES_IS_VALID_MENU(menuid))
  8285. {
  8286. return SetMenuColumnHeader(menuid, column, columnheader);
  8287. }
  8288. return 0;
  8289. }
  8290.  
  8291. #define _ALS_SetMenuColumnHeader
  8292. #define SetMenuColumnHeader( FIXES_SetMenuColumnHeader(
  8293. #endif
  8294.  
  8295. /**
  8296. * <fixes>ShowMenuForPlayer</fixes>
  8297. * <fixes>GetPlayerMenu</fixes>
  8298. */
  8299.  
  8300. #if defined _ALS_ShowMenuForPlayer
  8301. #error _ALS_ShowMenuForPlayer defined
  8302. #endif
  8303. native BAD_ShowMenuForPlayer(Menu:menuid, playerid) = ShowMenuForPlayer;
  8304.  
  8305. /**
  8306. * <fixes>ShowMenuForPlayer</fixes>
  8307. * <fixes>GetPlayerMenu</fixes>
  8308. */
  8309.  
  8310. #if FIX_ShowMenuForPlayer || FIX_GetPlayerMenu
  8311. stock FIXES_ShowMenuForPlayer(Menu:menuid, playerid)
  8312. {
  8313. #if FIX_ShowMenuForPlayer
  8314. if (FIXES_IS_VALID_MENU(menuid))
  8315. #endif
  8316. {
  8317. #if FIX_GetPlayerMenu
  8318. if (ShowMenuForPlayer(menuid, playerid))
  8319. {
  8320. #if FIXES_Single
  8321. FIXES_gsSettings |= e_FIXES_SETTINGS_MENU_SET;
  8322. FIXES_gsCurrentMenu[playerid] = menuid;
  8323. #else
  8324. CallRemoteFunction(FIXES_gscSetPlayerMenu, FIXES_gscSpec@ii, playerid, _:menuid);
  8325. #endif
  8326. return 1;
  8327. }
  8328. #else
  8329. return ShowMenuForPlayer(menuid, playerid);
  8330. #endif
  8331. }
  8332. return 0;
  8333. }
  8334.  
  8335. #define _ALS_ShowMenuForPlayer
  8336. #define ShowMenuForPlayer( FIXES_ShowMenuForPlayer(
  8337. #endif
  8338.  
  8339. /**
  8340. * <fixes>HideMenuForPlayer</fixes>
  8341. * <fixes>HideMenuForPlayer_2</fixes>
  8342. * <fixes>GetPlayerMenu</fixes>
  8343. */
  8344.  
  8345. #if defined _ALS_HideMenuForPlayer
  8346. #error _ALS_HideMenuForPlayer defined
  8347. #endif
  8348. native BAD_HideMenuForPlayer(Menu:menuid, playerid) = HideMenuForPlayer;
  8349.  
  8350. /**
  8351. * <fixes>HideMenuForPlayer</fixes>
  8352. * <fixes>HideMenuForPlayer_2</fixes>
  8353. * <fixes>GetPlayerMenu</fixes>
  8354. */
  8355.  
  8356. #if FIX_HideMenuForPlayer || FIX_GetPlayerMenu
  8357. stock FIXES_HideMenuForPlayer(Menu:menuid, playerid)
  8358. {
  8359. #if FIX_HideMenuForPlayer
  8360. if (FIXES_IS_VALID_MENU(menuid))
  8361. #endif
  8362. {
  8363. #if FIX_GetPlayerMenu
  8364. #if FIX_HideMenuForPlayer_2
  8365. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS) && FIXES_gsCurrentMenu[playerid] == menuid)
  8366. #else
  8367. if (FIXES_gsCurrentMenu[playerid] == menuid && HideMenuForPlayer(menuid, playerid))
  8368. #endif
  8369. {
  8370. #if FIXES_Single
  8371. FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
  8372. FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
  8373. #else
  8374. CallRemoteFunction(FIXES_gscSetPlayerMenu, FIXES_gscSpec@ii, playerid, INVALID_MENU);
  8375. #endif
  8376. #if FIX_HideMenuForPlayer_2
  8377. return HideMenuForPlayer(menuid, playerid);
  8378. #else
  8379. return 1;
  8380. #endif
  8381. }
  8382. #else
  8383. return HideMenuForPlayer(menuid, playerid);
  8384. #endif
  8385. }
  8386. return 0;
  8387. }
  8388.  
  8389. #define _ALS_HideMenuForPlayer
  8390. #define HideMenuForPlayer( FIXES_HideMenuForPlayer(
  8391. #endif
  8392.  
  8393. /**
  8394. * <fixes>DisableMenu</fixes>
  8395. */
  8396.  
  8397. #if defined _ALS_DisableMenu
  8398. #error _ALS_DisableMenu defined
  8399. #endif
  8400. native BAD_DisableMenu(Menu:menuid) = DisableMenu;
  8401.  
  8402. /**
  8403. * <fixes>DisableMenu</fixes>
  8404. */
  8405.  
  8406. #if FIX_DisableMenu
  8407. stock FIXES_DisableMenu(Menu:menuid)
  8408. {
  8409. if (FIXES_IS_VALID_MENU(menuid))
  8410. {
  8411. return DisableMenu(menuid);
  8412. }
  8413. return 0;
  8414. }
  8415.  
  8416. #define _ALS_DisableMenu
  8417. #define DisableMenu( FIXES_DisableMenu(
  8418. #endif
  8419.  
  8420. /**
  8421. * <fixes>DisableMenuRow</fixes>
  8422. */
  8423.  
  8424. #if defined _ALS_DisableMenuRow
  8425. #error _ALS_DisableMenuRow defined
  8426. #endif
  8427. native BAD_DisableMenuRow(Menu:menuid, row) = DisableMenuRow;
  8428.  
  8429. /**
  8430. * <fixes>DisableMenuRow</fixes>
  8431. */
  8432.  
  8433. #if FIX_DisableMenuRow
  8434. stock FIXES_DisableMenuRow(Menu:menuid, row)
  8435. {
  8436. if (FIXES_IS_VALID_MENU(menuid))
  8437. {
  8438. return DisableMenuRow(menuid, row);
  8439. }
  8440. return 0;
  8441. }
  8442.  
  8443. #define _ALS_DisableMenuRow
  8444. #define DisableMenuRow( FIXES_DisableMenuRow(
  8445. #endif
  8446.  
  8447. /**
  8448. * <fixes>GetPlayerMenu</fixes>
  8449. */
  8450.  
  8451. #if defined _ALS_GetPlayerMenu
  8452. #error _ALS_GetPlayerMenu defined
  8453. #endif
  8454. native BAD_GetPlayerMenu(playerid) = GetPlayerMenu;
  8455.  
  8456. /**
  8457. * <fixes>GetPlayerMenu</fixes>
  8458. */
  8459.  
  8460. #if FIX_GetPlayerMenu
  8461. stock Menu:FIXES_GetPlayerMenu(playerid)
  8462. {
  8463. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  8464. {
  8465. return FIXES_gsCurrentMenu[playerid];
  8466. }
  8467. return Menu:INVALID_MENU;
  8468. }
  8469.  
  8470. #define _ALS_GetPlayerMenu
  8471. #define GetPlayerMenu( FIXES_GetPlayerMenu(
  8472. #endif
  8473.  
  8474. /**
  8475. * <fixes>HydraSniper</fixes>
  8476. * <fixes>GetPlayerWeapon</fixes>
  8477. * <fixes>PutPlayerInVehicle</fixes>
  8478. * <fixes>TrainExit</fixes>
  8479. */
  8480.  
  8481. #if FIX_HydraSniper || FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_TrainExit
  8482. public OnPlayerStateChange(playerid, newstate, oldstate)
  8483. {
  8484. #if !FIXES_Single
  8485. if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
  8486. {
  8487. return FIXES_OnPlayerStateChange(playerid, newstate, oldstate);
  8488. }
  8489. #endif
  8490.  
  8491. // =============================
  8492. // BEGIN: OnPlayerEnterVehicle
  8493. // =============================
  8494. #if FIX_OnPlayerEnterVehicle
  8495. if (newstate == PLAYER_STATE_PASSENGER)
  8496. {
  8497. new
  8498. model = GetVehicleModel(GetPlayerVehicleID(playerid)) - 400;
  8499. if (_FIXES_IN_RANGE(model, 0, 211 + 1))
  8500. {
  8501. new
  8502. seat = GetPlayerVehicleSeat(playerid);
  8503. if (seat != 128)
  8504. {
  8505. model = (FIXES_gscMaxPassengers[model >>> 3] >>> ((model & 7) << 2)) & 0xF;
  8506. if (model == 0 || model == 15)
  8507. {
  8508. // Shouldn't be in this vehicle at all.
  8509. FIXES_BlockUpdate(playerid);
  8510. }
  8511. else if (!(0 < seat <= model)) // Slower with "_FIXES_NO_RANGE".
  8512. {
  8513. // In an out of range seat.
  8514. FIXES_BlockUpdate(playerid);
  8515. }
  8516. }
  8517. }
  8518. else
  8519. {
  8520. FIXES_BlockUpdate(playerid);
  8521. }
  8522. }
  8523. else if (newstate == PLAYER_STATE_DRIVER)
  8524. {
  8525. new
  8526. model = GetPlayerVehicleSeat(playerid);
  8527. if (model != 128)
  8528. {
  8529. if (model == 0)
  8530. {
  8531. model = GetVehicleModel(GetPlayerVehicleID(playerid)) - 400;
  8532. if (_FIXES_NO_RANGE(model, 0, 211 + 1) || FIXES_gscMaxPassengers[model >>> 3] >>> ((model & 7) << 2) & 0xF == 15)
  8533. {
  8534. // In an invalid vehicle (one you can't drive).
  8535. FIXES_BlockUpdate(playerid);
  8536. }
  8537. }
  8538. else
  8539. {
  8540. // They are a driver, but not in the driver's seat.
  8541. FIXES_BlockUpdate(playerid);
  8542. }
  8543. }
  8544. #if FIX_HydraSniper
  8545. else
  8546. {
  8547. model = GetVehicleModel(GetPlayerVehicleID(playerid));
  8548. }
  8549. #endif
  8550. #if !FIX_HydraSniper && !FIX_GetPlayerWeapon
  8551. }
  8552. #endif
  8553. #endif
  8554. // =============================
  8555. // END: OnPlayerEnterVehicle
  8556. // =============================
  8557.  
  8558. // ====================
  8559. // BEGIN: HydraSniper
  8560. // ====================
  8561. #if FIX_HydraSniper
  8562. #if !FIX_OnPlayerEnterVehicle
  8563. // Only called if the same check above isn't called.
  8564. if (newstate == PLAYER_STATE_DRIVER)
  8565. {
  8566. new
  8567. model = GetVehicleModel(GetPlayerVehicleID(playerid));
  8568. #endif
  8569. if (GetPlayerWeapon(playerid) == 34 && (model == 520 || model == 425))
  8570. {
  8571. SetPlayerArmedWeapon(playerid, 0);
  8572. #if FIX_GetPlayerWeapon
  8573. // This is the first cross-dependednt fix.
  8574. FIXES_SET(PlayerWeapon, playerid, 0);
  8575. #endif
  8576. }
  8577. #if !FIX_GetPlayerWeapon
  8578. }
  8579. #endif
  8580. #endif
  8581. // ====================
  8582. // END: HydraSniper
  8583. // ====================
  8584.  
  8585. // ========================
  8586. // BEGIN: GetPlayerWeapon
  8587. // ========================
  8588. #if FIX_GetPlayerWeapon
  8589. #if !FIX_OnPlayerEnterVehicle && !FIX_HydraSniper
  8590. // Only called if the same check above isn't called.
  8591. if (newstate == PLAYER_STATE_DRIVER)
  8592. {
  8593. #endif
  8594. new
  8595. weapon,
  8596. ammo;
  8597. GetPlayerWeaponData(playerid, 4, weapon, ammo);
  8598. if (weapon)
  8599. {
  8600. SetPlayerArmedWeapon(playerid, weapon);
  8601. FIXES_SET(PlayerWeapon, playerid, weapon);
  8602. }
  8603. }
  8604. #endif
  8605. // ========================
  8606. // END: GetPlayerWeapon
  8607. // ========================
  8608.  
  8609. #if FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_TrainExit
  8610. #if PLAYER_STATE_PASSENGER != PLAYER_STATE_DRIVER + 1
  8611. #error FIX_GetPlayerWeapon/FIX_PutPlayerInVehicle/FIX_TrainExit state assertation failed.
  8612. #endif
  8613. if (_FIXES_IN_RANGE(oldstate, PLAYER_STATE_DRIVER, PLAYER_STATE_PASSENGER + 1))
  8614. {
  8615. #if FIX_PutPlayerInVehicle || FIX_TrainExit
  8616. new
  8617. e_FIXES_BOOLS:bools = FIXES_gsPlayerBools[playerid];
  8618. #endif
  8619.  
  8620. // ========================
  8621. // BEGIN: GetPlayerWeapon
  8622. // ========================
  8623. #if FIX_GetPlayerWeapon
  8624. FIXES_SET(PlayerWeapon, playerid, -1);
  8625. #endif
  8626. // ========================
  8627. // END: GetPlayerWeapon
  8628. // ========================
  8629.  
  8630. // ==================
  8631. // BEGIN: TrainExit
  8632. // ==================
  8633. #if FIX_TrainExit
  8634. FIXES_PRINTF("train exit");
  8635. if (bools & e_FIXES_BOOLS_PUT_IN_TRAIN)
  8636. {
  8637. FIXES_PRINTF("OK");
  8638. SetCameraBehindPlayer(playerid),
  8639. bools &= ~e_FIXES_BOOLS_PUT_IN_TRAIN;
  8640. }
  8641. #endif
  8642. // ==================
  8643. // END: TrainExit
  8644. // ==================
  8645.  
  8646. // ===========================
  8647. // BEGIN: PutPlayerInVehicle
  8648. // ===========================
  8649. #if FIX_PutPlayerInVehicle
  8650. // Update their vehicle once we KNOW the client has done the
  8651. // removal from the vehicle.
  8652. if (bools & e_FIXES_BOOLS_PUT_IN_VEHICLE)
  8653. {
  8654. new
  8655. vid = FIXES_gsVehicleSeatData[playerid] & 0x00FFFFFF;
  8656. // Limited to "only" 16777216 vehicles and 256 seats.
  8657. PutPlayerInVehicle(playerid, vid, FIXES_gsVehicleSeatData[playerid] >>> 24),
  8658. bools &= ~e_FIXES_BOOLS_PUT_IN_VEHICLE;
  8659. #if FIX_TrainExit
  8660. switch (GetVehicleModel(vid))
  8661. {
  8662. case 449, 537, 538:
  8663. {
  8664. bools |= e_FIXES_BOOLS_PUT_IN_TRAIN;
  8665. }
  8666. }
  8667. #endif
  8668. }
  8669. #endif
  8670. // ===========================
  8671. // END: PutPlayerInVehicle
  8672. // ===========================
  8673.  
  8674. #if FIX_PutPlayerInVehicle || FIX_TrainExit
  8675. FIXES_gsPlayerBools[playerid] = bools;
  8676. #endif
  8677. }
  8678. #endif
  8679.  
  8680. // =================================
  8681. // BEGIN: PassengerSeating
  8682. // =================================
  8683. #if FIX_PassengerSeating
  8684. if (newstate == PLAYER_STATE_PASSENGER && FIXES_gsPSTimer[playerid] != 0)
  8685. {
  8686. FIXES_gsPSTimer[playerid] = 0;
  8687. }
  8688. #endif
  8689. // =================================
  8690. // END: PassengerSeating
  8691. // =================================
  8692.  
  8693. return FIXES_OnPlayerStateChange(playerid, newstate, oldstate);
  8694. }
  8695.  
  8696. #if defined _ALS_OnPlayerStateChange
  8697. #error _ALS_OnPlayerStateChange defined
  8698. #endif
  8699. #define _ALS_OnPlayerStateChange
  8700. #define OnPlayerStateChange(%0) FIXES_OnPlayerStateChange(%0) <_ALS : _ALS_go>
  8701.  
  8702. _FIXES_FORWARD FIXES_OnPlayerStateChange(playerid, newstate, oldstate);
  8703. #endif
  8704.  
  8705. /**
  8706. * <fixes>HydraSniper</fixes>
  8707. * <fixes>GetPlayerWeapon</fixes>
  8708. * <fixes>GetPlayerAmmo</fixes>
  8709. */
  8710.  
  8711. #if defined _ALS_GivePlayerWeapon
  8712. #error _ALS_GivePlayerWeapon defined
  8713. #endif
  8714. native BAD_GivePlayerWeapon(playerid, weaponid, ammo) = GivePlayerWeapon;
  8715.  
  8716. /**
  8717. * <fixes>HydraSniper</fixes>
  8718. * <fixes>GetPlayerWeapon</fixes>
  8719. * <fixes>GetPlayerAmmo</fixes>
  8720. */
  8721.  
  8722. #if FIX_HydraSniper || FIX_GetPlayerWeapon || FIX_GetPlayerAmmo
  8723. stock FIXES_GivePlayerWeapon(playerid, weaponid, ammo)
  8724. {
  8725. #if FIX_GetPlayerAmmo
  8726. new
  8727. currentAmmo = GetPlayerAmmo(playerid);
  8728. if (currentAmmo + ammo > 32767)
  8729. {
  8730. ammo = 32767 - currentAmmo;
  8731. }
  8732. else if (currentAmmo + ammo < 0)
  8733. {
  8734. ammo = -currentAmmo;
  8735. }
  8736. #endif
  8737.  
  8738. new
  8739. vid = GetPlayerVehicleID(playerid);
  8740. if (vid)
  8741. {
  8742. #if FIX_HydraSniper
  8743. vid = GetVehicleModel(vid);
  8744. if (weaponid == 34 && (vid == 520 || vid == 425))
  8745. {
  8746. vid = GivePlayerWeapon(playerid, weaponid, ammo),
  8747. SetPlayerArmedWeapon(playerid, 0);
  8748. #if FIX_GetPlayerWeapon
  8749. FIXES_SET(PlayerWeapon, playerid, 0);
  8750. #endif
  8751. return vid;
  8752. }
  8753. #endif
  8754.  
  8755. #if FIX_GetPlayerWeapon
  8756. FIXES_SET(PlayerWeapon, playerid, weaponid);
  8757. #endif
  8758. }
  8759. return GivePlayerWeapon(playerid, weaponid, ammo);
  8760. }
  8761.  
  8762. #define _ALS_GivePlayerWeapon
  8763. #define GivePlayerWeapon( FIXES_GivePlayerWeapon(
  8764. #endif
  8765.  
  8766.  
  8767. /**
  8768. * <fixes>GetPlayerWeapon</fixes>
  8769. */
  8770.  
  8771. #if defined _ALS_ResetPlayerWeapons
  8772. #error _ALS_ResetPlayerWeapons defined
  8773. #endif
  8774. native BAD_ResetPlayerWeapons(playerid) = ResetPlayerWeapons;
  8775.  
  8776.  
  8777. /**
  8778. * <fixes>GetPlayerWeapon</fixes>
  8779. */
  8780.  
  8781. #if FIX_GetPlayerWeapon
  8782. stock FIXES_ResetPlayerWeapons(playerid)
  8783. {
  8784. if (IsPlayerInAnyVehicle(playerid))
  8785. {
  8786. FIXES_SET(PlayerWeapon, playerid, 0);
  8787. }
  8788. return ResetPlayerWeapons(playerid);
  8789. }
  8790.  
  8791. #define _ALS_ResetPlayerWeapons
  8792. #define ResetPlayerWeapons( FIXES_ResetPlayerWeapons(
  8793. #endif
  8794.  
  8795. /**
  8796. * <fixes>GetPlayerWeapon</fixes>
  8797. */
  8798.  
  8799. #if defined _ALS_SetPlayerArmedWeapon
  8800. #error _ALS_SetPlayerArmedWeapon defined
  8801. #endif
  8802. native BAD_SetPlayerArmedWeapon(playerid, weaponid) = SetPlayerArmedWeapon;
  8803.  
  8804. /**
  8805. * <fixes>GetPlayerWeapon</fixes>
  8806. */
  8807.  
  8808. #if FIX_GetPlayerWeapon || FIX_AllowInteriorWeapons || FIX_HydraSniper
  8809. stock FIXES_SetPlayerArmedWeapon(playerid, weaponid)
  8810. {
  8811. #if FIX_AllowInteriorWeapons
  8812. if (FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR && GetPlayerInterior(playerid))
  8813. {
  8814. // Not allowed weapons.
  8815. return 0;
  8816. }
  8817. #endif
  8818. new
  8819. vid = GetPlayerVehicleID(playerid);
  8820. if (vid)
  8821. {
  8822. #if FIX_HydraSniper
  8823. vid = GetVehicleModel(vid);
  8824. if (weaponid == 34 && (vid == 520 || vid == 425))
  8825. {
  8826. return 0;
  8827. }
  8828. #endif
  8829.  
  8830. #if FIX_GetPlayerWeapon
  8831. FIXES_SET(PlayerWeapon, playerid, weaponid);
  8832. #endif
  8833. }
  8834. return SetPlayerArmedWeapon(playerid, weaponid);
  8835. }
  8836.  
  8837. #define _ALS_SetPlayerArmedWeapon
  8838. #define SetPlayerArmedWeapon( FIXES_SetPlayerArmedWeapon(
  8839. #endif
  8840.  
  8841. /**
  8842. * <fixes>GetPlayerWeapon</fixes>
  8843. */
  8844.  
  8845. #if defined _ALS_GetPlayerWeapon
  8846. #error _ALS_GetPlayerWeapon defined
  8847. #endif
  8848. native BAD_GetPlayerWeapon(playerid) = GetPlayerWeapon;
  8849.  
  8850. /**
  8851. * <fixes>GetPlayerWeapon</fixes>
  8852. */
  8853.  
  8854. #if FIX_GetPlayerWeapon
  8855. stock FIXES_GetPlayerWeapon(playerid)
  8856. {
  8857. new
  8858. ret = FIXES_GET(PlayerWeapon, playerid);
  8859. if (ret == -1)
  8860. {
  8861. return GetPlayerWeapon(playerid);
  8862. }
  8863. return ret;
  8864. }
  8865.  
  8866. #define _ALS_GetPlayerWeapon
  8867. #define GetPlayerWeapon( FIXES_GetPlayerWeapon(
  8868. #endif
  8869.  
  8870. /**
  8871. * <fixes>PutPlayerInVehicle</fixes>
  8872. */
  8873.  
  8874. #if defined _ALS_PutPlayerInVehicle
  8875. #error _ALS_PutPlayerInVehicle defined
  8876. #endif
  8877. native BAD_PutPlayerInVehicle(playerid, vehicleid, seatid) = PutPlayerInVehicle;
  8878.  
  8879. /**
  8880. * <fixes>PutPlayerInVehicle</fixes>
  8881. */
  8882.  
  8883. #if FIX_PutPlayerInVehicle || FIX_TrainExit
  8884. #if FIXES_Single
  8885. stock FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid)
  8886. {
  8887. // ==================
  8888. // BEGIN: TrainExit
  8889. // ==================
  8890. #if FIX_TrainExit
  8891. FIXES_PRINTF("TrainExit %d", GetVehicleModel(vehicleid));
  8892. switch (GetVehicleModel(vehicleid))
  8893. {
  8894. case 449, 537, 538:
  8895. {
  8896. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
  8897. }
  8898. }
  8899. #endif
  8900. // ==================
  8901. // END: TrainExit
  8902. // ==================
  8903.  
  8904. // ===========================
  8905. // BEGIN: PutPlayerInVehicle
  8906. // ===========================
  8907. #if FIX_PutPlayerInVehicle
  8908. new
  8909. vid = GetPlayerVehicleID(playerid);
  8910. if (vid)
  8911. {
  8912. new
  8913. Float:x,
  8914. Float:y,
  8915. Float:z;
  8916. // Remove them without the animation.
  8917. return
  8918. GetVehiclePos(vid, x, y, z),
  8919. SetPlayerPos(playerid, x, y, z),
  8920. FIXES_gsVehicleSeatData[playerid] = seatid << 24 | vehicleid,
  8921. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_VEHICLE,
  8922. 1;
  8923. }
  8924. #endif
  8925. // ===========================
  8926. // END: PutPlayerInVehicle
  8927. // ===========================
  8928. return PutPlayerInVehicle(playerid, vehicleid, seatid);
  8929. }
  8930. #else
  8931. forward _FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid, from, data);
  8932.  
  8933. stock FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid)
  8934. {
  8935. FIXES_PRINTF("NOT SINGLE");
  8936. // ===========================
  8937. // BEGIN: PutPlayerInVehicle
  8938. // ===========================
  8939. #if FIX_PutPlayerInVehicle
  8940. new
  8941. vid = GetPlayerVehicleID(playerid);
  8942. if (vid)
  8943. {
  8944. new
  8945. Float:x,
  8946. Float:y,
  8947. Float:z;
  8948. // Remove them without the animation.
  8949. return
  8950. GetVehiclePos(vid, x, y, z),
  8951. SetPlayerPos(playerid, x, y, z),
  8952. CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iiiii, playerid, vehicleid, seatid, 1, vid),
  8953. 1;
  8954. }
  8955. #endif
  8956. // ===========================
  8957. // END: PutPlayerInVehicle
  8958. // ===========================
  8959.  
  8960. // ==================
  8961. // BEGIN: TrainExit
  8962. // ==================
  8963. #if FIX_TrainExit
  8964. new
  8965. model = GetVehicleModel(vehicleid);
  8966. switch (model)
  8967. {
  8968. case 449, 537, 538:
  8969. {
  8970. CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iiiii, playerid, vehicleid, seatid, 0, model);
  8971. //FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
  8972. }
  8973. }
  8974. #endif
  8975. // ==================
  8976. // END: TrainExit
  8977. // ==================
  8978. return PutPlayerInVehicle(playerid, vehicleid, seatid);
  8979. }
  8980.  
  8981. public _FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid, from, data)
  8982. {
  8983. FIXES_PRINTF("IN CHARGE: %d", (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE));
  8984. _FIXES_IS_IN_CHARGE()
  8985. {
  8986. // ===========================
  8987. // BEGIN: PutPlayerInVehicle
  8988. // ===========================
  8989. #if FIX_PutPlayerInVehicle
  8990. if (from)
  8991. {
  8992. FIXES_gsVehicleSeatData[playerid] = seatid << 24 | vehicleid,
  8993. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_VEHICLE;
  8994. }
  8995. #endif
  8996. // ===========================
  8997. // END: PutPlayerInVehicle
  8998. // ===========================
  8999.  
  9000. // ==================
  9001. // BEGIN: TrainExit
  9002. // ==================
  9003. #if FIX_TrainExit
  9004. #if FIX_PutPlayerInVehicle
  9005. else
  9006. #else
  9007. if (!from)
  9008. #endif
  9009. {
  9010. switch (data)
  9011. {
  9012. case 449, 537, 538:
  9013. {
  9014. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
  9015. }
  9016. }
  9017. }
  9018. #endif
  9019. // ==================
  9020. // END: TrainExit
  9021. // ==================
  9022. }
  9023. return 1;
  9024. }
  9025. #endif
  9026.  
  9027. #define _ALS_PutPlayerInVehicle
  9028. #define PutPlayerInVehicle( FIXES_PutPlayerInVehicle(
  9029. #endif
  9030.  
  9031. /**
  9032. * <fixes>SetPlayerCheckpoint</fixes>
  9033. */
  9034.  
  9035. #if FIX_SetPlayerCheckpoint
  9036. forward _FIXES_SetCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size);
  9037.  
  9038. public _FIXES_SetCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size)
  9039. {
  9040. #if FIXES_Single
  9041. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_CP_DELAYED)
  9042. #else
  9043. if (GetPVarInt(playerid, FIXES_pvarPlayerCheckpoint))
  9044. #endif
  9045. {
  9046. return
  9047. #if FIXES_Single
  9048. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_CP_DELAYED,
  9049. #else
  9050. DeletePVar(playerid, FIXES_pvarPlayerCheckpoint),
  9051. #endif
  9052. SetPlayerCheckpoint(playerid, x, y, z, size);
  9053. }
  9054. return 0;
  9055. }
  9056. #endif
  9057.  
  9058. /**
  9059. * <fixes>SetPlayerCheckpoint</fixes>
  9060. */
  9061.  
  9062. #if defined _ALS_SetPlayerCheckpoint
  9063. #error _ALS_SetPlayerCheckpoint defined
  9064. #endif
  9065. native BAD_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size) = SetPlayerCheckpoint;
  9066.  
  9067. /**
  9068. * <fixes>SetPlayerCheckpoint</fixes>
  9069. */
  9070.  
  9071. #if FIX_SetPlayerCheckpoint
  9072. stock FIXES_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size)
  9073. {
  9074. return
  9075. #if FIXES_Single
  9076. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_CP_DELAYED,
  9077. #else
  9078. SetPVarInt(playerid, FIXES_pvarPlayerCheckpoint, 1),
  9079. #endif
  9080. DisablePlayerCheckpoint(playerid),
  9081. SetTimerEx(FIXES_gscSetCheckpoint, 50, 0, FIXES_gscSpec@iffff, playerid, x, y, z, size),
  9082. 1;
  9083. }
  9084.  
  9085. #define _ALS_SetPlayerCheckpoint
  9086. #define SetPlayerCheckpoint( FIXES_SetPlayerCheckpoint(
  9087. #endif
  9088.  
  9089. /**
  9090. * <fixes>SetPlayerCheckpoint</fixes>
  9091. */
  9092.  
  9093. #if defined _ALS_DisablePlayerCheckpoint
  9094. #error _ALS_DisablePlayerCheckpoint defined
  9095. #endif
  9096. native BAD_DisablePlayerCheckpoint(playerid) = DisablePlayerCheckpoint;
  9097.  
  9098. /**
  9099. * <fixes>SetPlayerCheckpoint</fixes>
  9100. */
  9101.  
  9102. #if FIX_SetPlayerCheckpoint
  9103. stock FIXES_DisablePlayerCheckpoint(playerid)
  9104. {
  9105. return
  9106. #if FIXES_Single
  9107. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_CP_DELAYED,
  9108. #else
  9109. DeletePVar(playerid, FIXES_pvarPlayerCheckpoint),
  9110. #endif
  9111. DisablePlayerCheckpoint(playerid);
  9112. }
  9113.  
  9114. #define _ALS_DisablePlayerCheckpoint
  9115. #define DisablePlayerCheckpoint( FIXES_DisablePlayerCheckpoint(
  9116. #endif
  9117.  
  9118. /**
  9119. * <fixes>SetPlayerRaceCheckpoint</fixes>
  9120. */
  9121.  
  9122. #if FIX_SetPlayerRaceCheckpoint
  9123. forward _FIXES_SetRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size);
  9124.  
  9125. public _FIXES_SetRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size)
  9126. {
  9127. #if FIXES_Single
  9128. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_RACE_CP_DELAYED)
  9129. #else
  9130. if (GetPVarInt(playerid, FIXES_pvarPlayerRaceCheckpoint))
  9131. #endif
  9132. {
  9133. return
  9134. #if FIXES_Single
  9135. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_RACE_CP_DELAYED,
  9136. #else
  9137. DeletePVar(playerid, FIXES_pvarPlayerRaceCheckpoint),
  9138. #endif
  9139. SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nextz, size);
  9140. }
  9141. return 0;
  9142. }
  9143. #endif
  9144.  
  9145. /**
  9146. * <fixes>SetPlayerRaceCheckpoint</fixes>
  9147. */
  9148.  
  9149. #if defined _ALS_SetPlayerRaceCheckpoint
  9150. #error _ALS_SetPlayerRaceCheckpoint defined
  9151. #endif
  9152. native BAD_SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size) = SetPlayerRaceCheckpoint;
  9153.  
  9154. /**
  9155. * <fixes>SetPlayerRaceCheckpoint</fixes>
  9156. */
  9157.  
  9158. #if FIX_SetPlayerRaceCheckpoint
  9159. stock FIXES_SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size)
  9160. {
  9161. return
  9162. #if FIXES_Single
  9163. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_RACE_CP_DELAYED,
  9164. #else
  9165. SetPVarInt(playerid, FIXES_pvarPlayerRaceCheckpoint, 1),
  9166. #endif
  9167. DisablePlayerRaceCheckpoint(playerid),
  9168. SetTimerEx(FIXES_gscSetRaceCheckpoint, 50, 0, FIXES_gscSpec@iifffffff, playerid, type, x, y, z, nextx, nexty, nextz, size),
  9169. 1;
  9170. }
  9171.  
  9172. #define _ALS_SetPlayerRaceCheckpoint
  9173. #define SetPlayerRaceCheckpoint( FIXES_SetPlayerRaceCheckpoint(
  9174. #endif
  9175.  
  9176. /**
  9177. * <fixes>SetPlayerRaceCheckpoint</fixes>
  9178. */
  9179.  
  9180. #if defined _ALS_DisablePlayerRaceCP
  9181. #error _ALS_DisablePlayerRaceCP defined
  9182. #endif
  9183. native BAD_DisablePlayerRaceCheckpoint(playerid) = DisablePlayerRaceCheckpoint;
  9184.  
  9185. /**
  9186. * <fixes>SetPlayerRaceCheckpoint</fixes>
  9187. */
  9188.  
  9189. #if FIX_SetPlayerRaceCheckpoint
  9190. stock FIXES_DisablePlayerRaceCP(playerid)
  9191. {
  9192. return
  9193. #if FIXES_Single
  9194. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_RACE_CP_DELAYED,
  9195. #else
  9196. DeletePVar(playerid, FIXES_pvarPlayerRaceCheckpoint),
  9197. #endif
  9198. DisablePlayerRaceCheckpoint(playerid);
  9199. }
  9200.  
  9201. #define _ALS_DisablePlayerRaceCP
  9202. #define DisablePlayerRaceCheckpoint( FIXES_DisablePlayerRaceCP(
  9203. #endif
  9204.  
  9205. /**
  9206. * <remarks>
  9207. * Hides a GameText style for one or more players, and accounts for the fact
  9208. * that they may have different messages being shown.
  9209. * </remarks>
  9210. * <fixes>GameText</fixes>
  9211. */
  9212.  
  9213. #if FIX_GameText
  9214. static stock _FIXES_HideGameTextForPlayer(playerid, style, parr[], timers[])
  9215. {
  9216. if (playerid == MAX_PLAYERS)
  9217. {
  9218. // Remove the global GameText for everyone that can see it.
  9219. if (timers[MAX_PLAYERS] != 0)
  9220. KillTimer(timers[MAX_PLAYERS]);
  9221. timers[MAX_PLAYERS] = 0,
  9222. TextDrawHideForAll(FIXES_gsGTStyle[style]);
  9223. }
  9224. else if (playerid == INVALID_PLAYER_ID)
  9225. {
  9226. // Remove all GameTexts of this style for everyone.
  9227. if (timers[MAX_PLAYERS] != 0)
  9228. KillTimer(timers[MAX_PLAYERS]);
  9229. timers[MAX_PLAYERS] = 0,
  9230. TextDrawHideForAll(FIXES_gsGTStyle[style]),
  9231. playerid = parr[MAX_PLAYERS],
  9232. parr[MAX_PLAYERS] = MAX_PLAYERS;
  9233. for (new next; playerid != MAX_PLAYERS; playerid = next)
  9234. {
  9235. if (timers[playerid] != 0)
  9236. KillTimer(timers[playerid]);
  9237. PlayerTextDrawHide(playerid, FIXES_gsPGTStyle[playerid][style]),
  9238. next = parr[playerid],
  9239. timers[playerid] = parr[playerid] = 0;
  9240. }
  9241. }
  9242. else //if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  9243. {
  9244. // Remove.
  9245. if (timers[playerid] != 0)
  9246. KillTimer(timers[playerid]);
  9247. timers[playerid] = 0,
  9248. TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[style]),
  9249. PlayerTextDrawHide(playerid, FIXES_gsPGTStyle[playerid][style]),
  9250. _FIXES_RemoveInternal(parr, playerid, MAX_PLAYERS);
  9251. }
  9252. return 1;
  9253. }
  9254. #endif
  9255.  
  9256. /**
  9257. * <fixes>GameText</fixes>
  9258. */
  9259.  
  9260. #if FIX_GameText
  9261. forward _FIXES_HideGameTextTimer(playerid, style);
  9262.  
  9263. public _FIXES_HideGameTextTimer(playerid, style)
  9264. {
  9265. return _FIXES_HideGameTextForPlayer(playerid, style, FIXES_gsPlayerPGTShown[style], FIXES_gsGTTimer[style]);
  9266. }
  9267. #endif
  9268.  
  9269. /**
  9270. * <fixes>GameText</fixes>
  9271. */
  9272.  
  9273. #if FIX_GameText
  9274. forward _FIXES_GameTextShow(playerid, const string[], time, style);
  9275.  
  9276. public _FIXES_GameTextShow(playerid, const string[], time, style)
  9277. {
  9278. _FIXES_IS_IN_CHARGE()
  9279. {
  9280. if (playerid == MAX_PLAYERS)
  9281. {
  9282. _FIXES_HideGameTextForPlayer(INVALID_PLAYER_ID, style, FIXES_gsPlayerPGTShown[style], FIXES_gsGTTimer[style]),
  9283. TextDrawSetString(FIXES_gsGTStyle[style], string),
  9284. TextDrawShowForAll(FIXES_gsGTStyle[style]);
  9285. }
  9286. else
  9287. {
  9288. _FIXES_HideGameTextForPlayer(playerid, style, FIXES_gsPlayerPGTShown[style], FIXES_gsGTTimer[style]),
  9289. PlayerTextDrawSetString(playerid, FIXES_gsPGTStyle[playerid][style], string),
  9290. PlayerTextDrawShow(playerid, FIXES_gsPGTStyle[playerid][style]),
  9291. _FIXES_AddInternal(FIXES_gsPlayerPGTShown[style], playerid, MAX_PLAYERS);
  9292. }
  9293. if (time)
  9294. FIXES_gsGTTimer[style][playerid] = SetTimerEx(FIXES_gscHideGameTextTimer, time, false, FIXES_gscSpec@ii, playerid, style);
  9295. }
  9296. return 1;
  9297. }
  9298. #endif
  9299.  
  9300. /**
  9301. * <fixes>GameText</fixes>
  9302. */
  9303.  
  9304. #if defined _ALS_GameTextForAll
  9305. #error _ALS_GameTextForAll defined
  9306. #endif
  9307. native BAD_GameTextForAll(const string[], time, style) = GameTextForAll;
  9308.  
  9309. /**
  9310. * <fixes>GameText</fixes>
  9311. */
  9312.  
  9313. #if FIX_GameText
  9314. stock FIXES_GameTextForAll(const string[], time, style)
  9315. {
  9316. if (_FIXES_IN_RANGE(style, 0, FIXES_GT_STYLE_COUNT))
  9317. {
  9318. // FINALLY come up with a better IsNull check!
  9319. if (isnull(string))
  9320. {
  9321. #if FIXES_Single
  9322. return _FIXES_HideGameTextTimer(INVALID_PLAYER_ID, style);
  9323. #else
  9324. return CallRemoteFunction(FIXES_gscHideGameTextTimer, FIXES_gscSpec@ii, INVALID_PLAYER_ID, style);
  9325. #endif
  9326. }
  9327. else
  9328. {
  9329. #if FIXES_Single
  9330. return _FIXES_GameTextShow(MAX_PLAYERS, string, time, style);
  9331. #else
  9332. return CallRemoteFunction(FIXES_gscGameTextShow, FIXES_gscSpec@isii, MAX_PLAYERS, string, time, style);
  9333. #endif
  9334. }
  9335. }
  9336. return 0;
  9337. }
  9338.  
  9339. #define _ALS_GameTextForAll
  9340.  
  9341. #define GameTextForAll( FIXES_GameTextForAll(
  9342. #endif
  9343.  
  9344. /**
  9345. * <fixes>GameText</fixes>
  9346. */
  9347.  
  9348. #if defined _ALS_GameTextForPlayer
  9349. #error _ALS_GameTextForPlayer defined
  9350. #endif
  9351. native BAD_GameTextForPlayer(playerid, const string[], time, style) = GameTextForPlayer;
  9352.  
  9353. /**
  9354. * <fixes>GameText</fixes>
  9355. */
  9356.  
  9357. #if FIX_GameText
  9358. stock FIXES_GameTextForPlayer(playerid, const string[], time, style)
  9359. {
  9360. if (_FIXES_IN_RANGE(style, 0, FIXES_GT_STYLE_COUNT) && _FIXES_IS_PLAYER_CONNECTED(playerid))
  9361. {
  9362. if (isnull(string))
  9363. {
  9364. #if FIXES_Single
  9365. return _FIXES_HideGameTextTimer(playerid, style);
  9366. #else
  9367. return CallRemoteFunction(FIXES_gscHideGameTextTimer, FIXES_gscSpec@ii, playerid, style);
  9368. #endif
  9369. }
  9370. else
  9371. {
  9372. #if FIXES_Single
  9373. return _FIXES_GameTextShow(playerid, string, time, style);
  9374. #else
  9375. return CallRemoteFunction(FIXES_gscGameTextShow, FIXES_gscSpec@isii, playerid, string, time, style);
  9376. #endif
  9377. }
  9378. }
  9379. return 0;
  9380. }
  9381.  
  9382. #define _ALS_GameTextForPlayer
  9383.  
  9384. #define GameTextForPlayer( FIXES_GameTextForPlayer(
  9385. #endif
  9386.  
  9387. /**
  9388. * <fixes>HideGameText</fixes>
  9389. */
  9390.  
  9391. #if defined _ALS_HideGameTextForAll
  9392. #error _ALS_HideGameTextForAll defined
  9393. #endif
  9394.  
  9395. #if FIX_HideGameText
  9396. //stock FIXES_HideGameTextForAll(style)
  9397. //{
  9398. // if (FIXES_gsGTTimer[style][MAX_PLAYERS] != 0)
  9399. // {
  9400. // KillTimer(FIXES_gsGTTimer[style][MAX_PLAYERS]);
  9401. // FIXES_gsGTTimer[style][MAX_PLAYERS] = 0;
  9402. // }
  9403. // return GameTextForAll(FIXES_gcSpace, 0, style);
  9404. //}
  9405.  
  9406. #define _ALS_HideGameTextForAll
  9407. #define HideGameTextForAll(%0) GameTextForAll(FIXES_gcNull, 0, (%0))
  9408. #endif
  9409.  
  9410. /**
  9411. * <fixes>HideGameText</fixes>
  9412. */
  9413.  
  9414. #if defined _ALS_HideGameTextForPlayer
  9415. #error _ALS_HideGameTextForPlayer defined
  9416. #endif
  9417.  
  9418. #if FIX_HideGameText
  9419. //stock FIXES_HideGameTextForPlayer(playerid, style)
  9420. //{
  9421. // if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  9422. // {
  9423. // if (FIXES_gsGTTimer[style][playerid] != 0)
  9424. // {
  9425. // KillTimer(FIXES_gsGTTimer[style][playerid]);
  9426. // FIXES_gsGTTimer[style][playerid] = 0;
  9427. // }
  9428. // return GameTextForPlayer(playerid, FIXES_gcSpace, 0, style);
  9429. // }
  9430. // return 0;
  9431. //}
  9432.  
  9433. #define _ALS_HideGameTextForPlayer
  9434. #define HideGameTextForPlayer(%0,%1) GameTextForPlayer((%0), FIXES_gcNull, 0, (%1))
  9435. #endif
  9436.  
  9437. /**
  9438. * <fixes>CreatePlayerTextDraw</fixes>
  9439. * <fixes>CreatePlayerTextDraw_2</fixes>
  9440. */
  9441.  
  9442. #if !FIX_const
  9443. #if defined _ALS_CreatePlayerTextDraw
  9444. #error _ALS_CreatePlayerTextDraw defined
  9445. #endif
  9446. native PlayerText:BAD_CreatePlayerTextDraw(playerid, Float:x, Float:y, text[]) = CreatePlayerTextDraw;
  9447. #endif
  9448.  
  9449. #if FIX_CreatePlayerTextDraw || FIX_CreatePlayerTextDraw_2
  9450.  
  9451. #if FIX_CreatePlayerTextDraw
  9452. #define _FIXES_PASS_STRING(%0(%1,%2,%3,%4)) (isnull(%4) ? %0(%1,%2,%3,FIXES_gsSpace) : %0(%1,%2,%3,%4))
  9453. #else
  9454. #define _FIXES_PASS_STRING(%0) %0
  9455. #endif
  9456. #if FIX_CreatePlayerTextDraw_2
  9457. #define _FIXES_RETURN_STRING(%0) new PlayerText:ret = _FIXES_PASS_STRING(%0)
  9458. #else
  9459. #define _FIXES_RETURN_STRING(%0) return _FIXES_PASS_STRING(%0)
  9460. #endif
  9461.  
  9462. stock PlayerText:FIXES_CreatePlayerTextDraw(playerid, Float:x, Float:y, _FIXES_MAYBE_CONST text[])
  9463. {
  9464. #if FIX_CreatePlayerTextDraw_2
  9465. _FIXES_rtrim(text);
  9466. #endif
  9467. _FIXES_RETURN_STRING(CreatePlayerTextDraw(playerid, x, y, text));
  9468. #if FIX_CreatePlayerTextDraw_2
  9469. _FIXES_untrim(text);
  9470. return ret;
  9471. #endif
  9472. }
  9473.  
  9474. #undef _FIXES_PASS_STRING
  9475. #undef _FIXES_RETURN_STRING
  9476.  
  9477. #if defined _ALS_CreatePlayerTextDraw
  9478. #undef CreatePlayerTextDraw
  9479. #else
  9480. #define _ALS_CreatePlayerTextDraw
  9481. #endif
  9482. #define CreatePlayerTextDraw( FIXES_CreatePlayerTextDraw(
  9483. #endif
  9484.  
  9485. /**
  9486. * <fixes>PlayerTextDrawSetString</fixes>
  9487. * <fixes>PlayerTextDrawSetString_2</fixes>
  9488. */
  9489.  
  9490. #if !FIX_const
  9491. #if defined _ALS_PlayerTextDrawSetString
  9492. #error _ALS_PlayerTextDrawSetString defined
  9493. #endif
  9494. native BAD_PlayerTextDrawSetString(playerid, PlayerText:text, string[]) = PlayerTextDrawSetString;
  9495. #endif
  9496.  
  9497. /**
  9498. * <fixes>PlayerTextDrawSetString</fixes>
  9499. * <fixes>PlayerTextDrawSetString_2</fixes>
  9500. */
  9501.  
  9502. #if FIX_PlayerTextDrawSetString || FIX_PlayerTextDrawSetString_2
  9503.  
  9504. #if FIX_PlayerTextDrawSetString
  9505. #define _FIXES_PASS_STRING(%0(%2,%3,%4)) (isnull(%4) ? %0(%2,%3,FIXES_gsSpace) : %0(%2,%3,%4))
  9506. #else
  9507. #define _FIXES_PASS_STRING(%0) %0
  9508. #endif
  9509. #if FIX_PlayerTextDrawSetString_2
  9510. #define _FIXES_RETURN_STRING(%0) new ret = _FIXES_PASS_STRING(%0)
  9511. #else
  9512. #define _FIXES_RETURN_STRING(%0) return _FIXES_PASS_STRING(%0)
  9513. #endif
  9514.  
  9515. stock FIXES_PlayerTextDrawSetString(playerid, PlayerText:text, _FIXES_MAYBE_CONST string[])
  9516. {
  9517. #if FIX_PlayerTextDrawSetString_2
  9518. _FIXES_rtrim(string);
  9519. #endif
  9520. _FIXES_RETURN_STRING(PlayerTextDrawSetString(playerid, text, string));
  9521. #if FIX_PlayerTextDrawSetString_2
  9522. _FIXES_untrim(string);
  9523. return ret;
  9524. #endif
  9525. }
  9526.  
  9527. #undef _FIXES_PASS_STRING
  9528. #undef _FIXES_RETURN_STRING
  9529.  
  9530. #if defined _ALS_PlayerTextDrawSetString
  9531. #undef PlayerTextDrawSetString
  9532. #else
  9533. #define _ALS_PlayerTextDrawSetString
  9534. #endif
  9535. #define PlayerTextDrawSetString( FIXES_PlayerTextDrawSetString(
  9536. #endif
  9537.  
  9538. /**
  9539. * <fixes>TextDrawCreate</fixes>
  9540. * <fixes>TextDrawCreate_2</fixes>
  9541. */
  9542.  
  9543. #if !FIX_const
  9544. #if defined _ALS_TextDrawCreate
  9545. #error _ALS_TextDrawCreate defined
  9546. #endif
  9547. native Text:BAD_TextDrawCreate(Float:x, Float:y, text[]) = TextDrawCreate;
  9548. #endif
  9549.  
  9550. #if FIX_TextDrawCreate || FIX_TextDrawCreate_2
  9551.  
  9552. #if FIX_TextDrawCreate
  9553. #define _FIXES_PASS_STRING(%0(%2,%3,%4)) (isnull(%4) ? %0(%2,%3,FIXES_gsSpace) : %0(%2,%3,%4))
  9554. #else
  9555. #define _FIXES_PASS_STRING(%0) %0
  9556. #endif
  9557. #if FIX_TextDrawCreate_2
  9558. #define _FIXES_RETURN_STRING(%0) new Text:ret = _FIXES_PASS_STRING(%0)
  9559. #else
  9560. #define _FIXES_RETURN_STRING(%0) return _FIXES_PASS_STRING(%0)
  9561. #endif
  9562.  
  9563. stock Text:FIXES_TextDrawCreate(Float:x, Float:y, _FIXES_MAYBE_CONST text[])
  9564. {
  9565. #if FIX_TextDrawCreate_2
  9566. _FIXES_rtrim(text);
  9567. #endif
  9568. _FIXES_RETURN_STRING(TextDrawCreate(x, y, text));
  9569. #if FIX_TextDrawCreate_2
  9570. _FIXES_untrim(text);
  9571. return ret;
  9572. #endif
  9573. }
  9574.  
  9575. #undef _FIXES_PASS_STRING
  9576. #undef _FIXES_RETURN_STRING
  9577.  
  9578. #if defined _ALS_TextDrawCreate
  9579. #undef TextDrawCreate
  9580. #else
  9581. #define _ALS_TextDrawCreate
  9582. #endif
  9583. #define TextDrawCreate( FIXES_TextDrawCreate(
  9584. #endif
  9585.  
  9586. /**
  9587. * <fixes>TextDrawSetString</fixes>
  9588. * <fixes>TextDrawSetString_2</fixes>
  9589. */
  9590.  
  9591. #if !FIX_const
  9592. #if defined _ALS_TextDrawSetString
  9593. #error _ALS_TextDrawSetString defined
  9594. #endif
  9595. native BAD_TextDrawSetString(Text:text, string[]) = TextDrawSetString;
  9596. #endif
  9597.  
  9598. /**
  9599. * <fixes>TextDrawSetString</fixes>
  9600. * <fixes>TextDrawSetString_2</fixes>
  9601. */
  9602.  
  9603. #if FIX_TextDrawSetString || FIX_TextDrawSetString_2
  9604.  
  9605. #if FIX_TextDrawSetString
  9606. #define _FIXES_PASS_STRING(%0(%3,%4)) (isnull(%4) ? %0(%3,FIXES_gsSpace) : %0(%3,%4))
  9607. #else
  9608. #define _FIXES_PASS_STRING(%0) %0
  9609. #endif
  9610. #if FIX_TextDrawSetString_2
  9611. #define _FIXES_RETURN_STRING(%0) new ret = _FIXES_PASS_STRING(%0)
  9612. #else
  9613. #define _FIXES_RETURN_STRING(%0) return _FIXES_PASS_STRING(%0)
  9614. #endif
  9615.  
  9616. stock FIXES_TextDrawSetString(Text:text, _FIXES_MAYBE_CONST string[])
  9617. {
  9618. #if FIX_TextDrawSetString_2
  9619. _FIXES_rtrim(string);
  9620. #endif
  9621. _FIXES_RETURN_STRING(TextDrawSetString(text, string));
  9622. #if FIX_TextDrawSetString_2
  9623. _FIXES_untrim(string);
  9624. return ret;
  9625. #endif
  9626. }
  9627.  
  9628. #undef _FIXES_PASS_STRING
  9629. #undef _FIXES_RETURN_STRING
  9630.  
  9631. #if defined _ALS_TextDrawSetString
  9632. #undef TextDrawSetString
  9633. #else
  9634. #define _ALS_TextDrawSetString
  9635. #endif
  9636. #define TextDrawSetString( FIXES_TextDrawSetString(
  9637. #endif
  9638.  
  9639. /**
  9640. * <fixes>AllowInteriorWeapons</fixes>
  9641. */
  9642.  
  9643. #if defined _ALS_AllowInteriorWeapons
  9644. #error _ALS_AllowInteriorWeapons defined
  9645. #endif
  9646. native BAD_AllowInteriorWeapons(allow) = AllowInteriorWeapons;
  9647.  
  9648. /**
  9649. * <fixes>AllowInteriorWeapons</fixes>
  9650. */
  9651.  
  9652. #if FIX_AllowInteriorWeapons
  9653. #if FIXES_Single
  9654. stock FIXES_AllowInteriorWeapons(allow)
  9655. {
  9656. if (allow)
  9657. {
  9658. FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
  9659. _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
  9660. {
  9661. FIXES_gsPlayerBools[i] &= ~e_FIXES_BOOLS_INTERIOR;
  9662. }
  9663. }
  9664. else
  9665. {
  9666. FIXES_gsSettings |= e_FIXES_SETTINGS_INTERIOR;
  9667. _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
  9668. {
  9669. if (GetPlayerInterior(i))
  9670. {
  9671. FIXES_gsPlayerBools[i] |= e_FIXES_BOOLS_INTERIOR;
  9672. }
  9673. }
  9674. }
  9675. return allow;
  9676. }
  9677. #else
  9678. forward _FIXES_AllowInteriorWeapons(allow);
  9679.  
  9680. stock FIXES_AllowInteriorWeapons(allow)
  9681. {
  9682. CallRemoteFunction(FIXES_gscAllowInteriorWeapons, FIXES_gscSpec@i, allow);
  9683. return allow;
  9684. }
  9685.  
  9686. public _FIXES_AllowInteriorWeapons(allow)
  9687. {
  9688. if (allow)
  9689. {
  9690. FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
  9691. _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
  9692. {
  9693. FIXES_gsPlayerBools[i] &= ~e_FIXES_BOOLS_INTERIOR;
  9694. }
  9695. }
  9696. else
  9697. {
  9698. FIXES_gsSettings |= e_FIXES_SETTINGS_INTERIOR;
  9699. _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
  9700. {
  9701. if (GetPlayerInterior(i))
  9702. {
  9703. FIXES_gsPlayerBools[i] |= e_FIXES_BOOLS_INTERIOR;
  9704. }
  9705. }
  9706. }
  9707. return allow;
  9708. }
  9709. #endif
  9710.  
  9711. #define _ALS_AllowInteriorWeapons
  9712. #define AllowInteriorWeapons( FIXES_AllowInteriorWeapons(
  9713. #endif
  9714.  
  9715. /**
  9716. * <fixes>GetPlayerInterior</fixes>
  9717. */
  9718.  
  9719. #if defined _ALS_GetPlayerInterior
  9720. #error _ALS_GetPlayerInterior defined
  9721. #endif
  9722. native BAD_GetPlayerInterior(playerid) = GetPlayerInterior;
  9723.  
  9724. /**
  9725. * <fixes>GetPlayerInterior</fixes>
  9726. */
  9727.  
  9728. #if FIX_GetPlayerInterior
  9729. stock FIXES_GetPlayerInterior(playerid)
  9730. {
  9731. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  9732. {
  9733. return FIXES_GET(PlayerInterior, playerid);
  9734. }
  9735. return 0;
  9736. }
  9737.  
  9738. #define _ALS_GetPlayerInterior
  9739. #define GetPlayerInterior( FIXES_GetPlayerInterior(
  9740. #endif
  9741.  
  9742. /**
  9743. * <fixes>GetPlayerInterior</fixes>
  9744. */
  9745.  
  9746. #if defined _ALS_SetPlayerInterior
  9747. #error _ALS_SetPlayerInterior defined
  9748. #endif
  9749. native BAD_SetPlayerInterior(playerid, interiorid) = SetPlayerInterior;
  9750.  
  9751. /**
  9752. * <fixes>GetPlayerInterior</fixes>
  9753. */
  9754.  
  9755. #if FIX_GetPlayerInterior
  9756. stock FIXES_SetPlayerInterior(playerid, interiorid)
  9757. {
  9758. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  9759. {
  9760. FIXES_SET(PlayerInterior, playerid, interiorid);
  9761. return SetPlayerInterior(playerid, interiorid);
  9762. }
  9763. return 0;
  9764. }
  9765.  
  9766. #define _ALS_SetPlayerInterior
  9767. #define SetPlayerInterior( FIXES_SetPlayerInterior(
  9768. #endif
  9769.  
  9770. /**
  9771. * <fixes>AllowTeleport</fixes>
  9772. */
  9773.  
  9774. #if FIX_AllowTeleport && !defined FILTERSCRIPT
  9775. forward _FIXES_AllowTeleport(playerid, allow);
  9776.  
  9777. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  9778. {
  9779. // ======================
  9780. // BEGIN: AllowTeleport
  9781. // ======================
  9782. #if FIX_AllowTeleport
  9783. if (!_FIXES_gIsFilterscript)
  9784. {
  9785. // Unusually, the call order here is always Game Mode first -
  9786. // most callbacks are Filter Script first.
  9787. if ((FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_TELEPORT) || ((FIXES_gsSettings & e_FIXES_SETTINGS_ADMIN_TELEPORT) && (IsPlayerAdmin(playerid))))
  9788. {
  9789. SetPlayerPosFindZ(playerid, fX, fY, fZ);
  9790. }
  9791. }
  9792. #endif
  9793. // ======================
  9794. // END: AllowTeleport
  9795. // ======================
  9796. return FIXES_OnPlayerClickMap(playerid, fX, fY, fZ);
  9797. }
  9798.  
  9799. #if defined _ALS_OnPlayerClickMap
  9800. #error _ALS_OnPlayerClickMap defined
  9801. #endif
  9802. #define _ALS_OnPlayerClickMap
  9803. #define OnPlayerClickMap(%0) FIXES_OnPlayerClickMap(%0) <_ALS : _ALS_go>
  9804.  
  9805. _FIXES_FORWARD FIXES_OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ);
  9806. #endif
  9807.  
  9808. /**
  9809. * <fixes>AllowTeleport</fixes>
  9810. */
  9811.  
  9812. #if defined _ALS_AllowPlayerTeleport
  9813. #error _ALS_AllowPlayerTeleport defined
  9814. #endif
  9815. native BAD_AllowPlayerTeleport(playerid, allow) = AllowPlayerTeleport;
  9816.  
  9817. /**
  9818. * <fixes>AllowTeleport</fixes>
  9819. */
  9820.  
  9821. #if FIX_AllowTeleport
  9822. #if FIXES_Single
  9823. stock FIXES_AllowPlayerTeleport(playerid, allow)
  9824. {
  9825. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  9826. {
  9827. if (allow)
  9828. {
  9829. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_TELEPORT;
  9830. }
  9831. else
  9832. {
  9833. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_TELEPORT;
  9834. }
  9835. }
  9836. return 0;
  9837. }
  9838. #else
  9839. stock FIXES_AllowPlayerTeleport(playerid, allow)
  9840. {
  9841. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  9842. {
  9843. CallRemoteFunction(FIXES_gscAllowTeleport, FIXES_gscSpec@ii, playerid, allow);
  9844. }
  9845. return 0;
  9846. }
  9847. #endif
  9848.  
  9849. #define _ALS_AllowPlayerTeleport
  9850. #define AllowPlayerTeleport( FIXES_AllowPlayerTeleport(
  9851. #endif
  9852.  
  9853. /**
  9854. * <fixes>AllowTeleport</fixes>
  9855. */
  9856.  
  9857. #if defined _ALS_AllowAdminTeleport
  9858. #error _ALS_AllowAdminTeleport defined
  9859. #endif
  9860. native BAD_AllowAdminTeleport(allow) = AllowAdminTeleport;
  9861.  
  9862. /**
  9863. * <fixes>AllowTeleport</fixes>
  9864. */
  9865.  
  9866. #if FIX_AllowTeleport
  9867. #if FIXES_Single
  9868. stock FIXES_AllowAdminTeleport(allow)
  9869. {
  9870. if (allow)
  9871. {
  9872. FIXES_gsSettings |= e_FIXES_SETTINGS_ADMIN_TELEPORT;
  9873. }
  9874. else
  9875. {
  9876. FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
  9877. }
  9878. return allow;
  9879. }
  9880. #else
  9881. stock FIXES_AllowAdminTeleport(allow)
  9882. {
  9883. return
  9884. CallRemoteFunction(FIXES_gscAllowTeleport, FIXES_gscSpec@ii, INVALID_PLAYER_ID, allow),
  9885. allow;
  9886. }
  9887. #endif
  9888.  
  9889. #define _ALS_AllowAdminTeleport
  9890. #define AllowAdminTeleport( FIXES_AllowAdminTeleport(
  9891. #endif
  9892.  
  9893. /**
  9894. * <fixes>AllowTeleport</fixes>
  9895. */
  9896.  
  9897. #if FIX_AllowTeleport && !defined FILTERSCRIPT && !FIXES_Single
  9898. public _FIXES_AllowTeleport(playerid, allow)
  9899. {
  9900. if (!_FIXES_gIsFilterscript)
  9901. {
  9902. if (playerid == INVALID_PLAYER_ID)
  9903. {
  9904. if (allow)
  9905. {
  9906. FIXES_gsSettings |= e_FIXES_SETTINGS_ADMIN_TELEPORT;
  9907. }
  9908. else
  9909. {
  9910. FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
  9911. }
  9912. }
  9913. else
  9914. {
  9915. if (allow)
  9916. {
  9917. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_TELEPORT;
  9918. }
  9919. else
  9920. {
  9921. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_TELEPORT;
  9922. }
  9923. }
  9924. }
  9925. }
  9926. #endif
  9927.  
  9928. /**
  9929. * <fixes>SetPlayerSpecialAction</fixes>
  9930. */
  9931.  
  9932. #if defined _ALS_SetPlayerSpecialAction
  9933. #error _ALS_SetPlayerSpecialAction defined
  9934. #endif
  9935. native BAD_SetPlayerSpecialAction(playerid, actionid) = SetPlayerSpecialAction;
  9936.  
  9937. /**
  9938. * <fixes>SetPlayerSpecialAction</fixes>
  9939. */
  9940.  
  9941. #if FIX_SetPlayerSpecialAction
  9942. stock FIXES_SetPlayerSpecialAction(playerid, actionid)
  9943. {
  9944. if (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
  9945. {
  9946. ClearAnimations(playerid);
  9947. }
  9948. SetPlayerSpecialAction(playerid, actionid);
  9949. return 1;
  9950. }
  9951.  
  9952. #define _ALS_SetPlayerSpecialAction
  9953. #define SetPlayerSpecialAction( FIXES_SetPlayerSpecialAction(
  9954. #endif
  9955.  
  9956. /**
  9957. * <fixes>ClearAnimations</fixes>
  9958. */
  9959.  
  9960. #if defined _ALS_ClearAnimations
  9961. #error _ALS_ClearAnimations defined
  9962. #endif
  9963. native BAD_ClearAnimations(playerid, forcesync = 0) = ClearAnimations;
  9964.  
  9965. /**
  9966. * <fixes>ClearAnimations</fixes>
  9967. */
  9968.  
  9969. #if FIX_ClearAnimations || FIX_ClearAnimations_2
  9970. stock FIXES_ClearAnimations(playerid, forcesync = 0)
  9971. {
  9972. #if FIX_ClearAnimations || FIX_ClearAnimations_2
  9973. if (IsPlayerInAnyVehicle(playerid))
  9974. #endif
  9975. #if FIX_ClearAnimations
  9976. {
  9977. return ApplyAnimation(playerid, "PED", "CAR_SIT", 4.0, 0, 0, 0, 0, 1, forcesync);
  9978. }
  9979. #endif
  9980. #if FIX_ClearAnimations + FIX_ClearAnimations_2 == 1 // XOR
  9981. {
  9982. return ClearAnimations(playerid, forcesync);
  9983. }
  9984. #endif
  9985. #if FIX_ClearAnimations_2
  9986. new
  9987. ret = ClearAnimations(playerid, forcesync);
  9988. ApplyAnimation(playerid, "PED", "IDLE_STANCE", 4.0, 0, 0, 0, 0, 1, forcesync);
  9989. ApplyAnimation(playerid, "PED", "IDLE_CHAT", 4.0, 0, 0, 0, 0, 1, forcesync);
  9990. ApplyAnimation(playerid, "PED", "WALK_PLAYER", 4.0, 0, 0, 0, 0, 1, forcesync);
  9991. return ret;
  9992. #endif
  9993. }
  9994.  
  9995. #define _ALS_ClearAnimations
  9996. #define ClearAnimations( FIXES_ClearAnimations(
  9997. #endif
  9998.  
  9999. /**
  10000. * <fixes>GangZoneCreate</fixes>
  10001. */
  10002.  
  10003. #if defined _ALS_GangZoneCreate
  10004. #error _ALS_GangZoneCreate defined
  10005. #endif
  10006. native BAD_GangZoneCreate(Float:minx, Float:miny, Float:maxx, Float:maxy) = GangZoneCreate;
  10007.  
  10008. /**
  10009. * <fixes>GangZoneCreate</fixes>
  10010. */
  10011.  
  10012. #if FIX_GangZoneCreate
  10013. stock FIXES_GangZoneCreate(Float:minx, Float:miny, Float:maxx, Float:maxy)
  10014. {
  10015. return GangZoneCreate(floatsub(minx, floatfract(minx)), floatsub(miny, floatfract(miny)), floatsub(maxx, floatfract(maxx)), floatsub(maxy, floatfract(maxy)));
  10016. }
  10017.  
  10018. #define _ALS_GangZoneCreate
  10019. #define GangZoneCreate( FIXES_GangZoneCreate(
  10020. #endif
  10021.  
  10022. /**
  10023. * <fixes>OnDialogResponse</fixes>
  10024. * <fixes>GetPlayerDialog</fixes>
  10025. */
  10026.  
  10027. #if !FIX_const
  10028. #if defined _ALS_ShowPlayerDialog
  10029. #error _ALS_ShowPlayerDialog defined
  10030. #endif
  10031. native BAD_ShowPlayerDialog(playerid, dialog, style, title[], caption[], button1[], button2[]) = ShowPlayerDialog;
  10032. #endif
  10033.  
  10034. /**
  10035. * <fixes>OnDialogResponse</fixes>
  10036. * <fixes>GetPlayerDialog</fixes>
  10037. */
  10038.  
  10039. #if FIX_OnDialogResponse || FIX_GetPlayerDialog
  10040. stock FIXES_ShowPlayerDialog(playerid, dialog, style, _FIXES_MAYBE_CONST title[], _FIXES_MAYBE_CONST caption[], _FIXES_MAYBE_CONST button1[], _FIXES_MAYBE_CONST button2[])
  10041. {
  10042. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  10043. {
  10044. FIXES_SET(PlayerDialog, playerid, dialog);
  10045. return ShowPlayerDialog(playerid, dialog, style, title, caption, button1, button2);
  10046. }
  10047. return 0;
  10048. }
  10049.  
  10050. #if defined _ALS_ShowPlayerDialog
  10051. #undef ShowPlayerDialog
  10052. #else
  10053. #define _ALS_ShowPlayerDialog
  10054. #endif
  10055. #define ShowPlayerDialog( FIXES_ShowPlayerDialog(
  10056. #endif
  10057.  
  10058. /**
  10059. * <fixes>OnDialogResponse</fixes>
  10060. * <fixes>GetPlayerDialog</fixes>
  10061. */
  10062.  
  10063. #if FIX_OnDialogResponse || FIX_GetPlayerDialog
  10064. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  10065. {
  10066. // =========================
  10067. // BEGIN: OnDialogResponse
  10068. // =========================
  10069. #if FIX_OnDialogResponse || FIX_GetPlayerDialog
  10070. #if FIXES_Single
  10071. #if FIX_OnDialogResponse
  10072. dialogid = FIXES_gsPlayerDialog[playerid];
  10073. #endif
  10074. FIXES_gsPlayerDialog[playerid] = INVALID_DIALOG_ID;
  10075. #elseif FIX_OnDialogResponse
  10076. _FIXES_IS_IN_CHARGE()
  10077. {
  10078. // If there are multiple scripts, we can't just wipe the
  10079. // current dialog data or subsequent scripts will display
  10080. // the wrong value.
  10081. dialogid = GetPVarInt(playerid, FIXES_pvarPlayerDialog),
  10082. SetPVarInt(playerid, FIXES_pvarCurrentDialog, dialogid),
  10083. SetPVarInt(playerid, FIXES_pvarPlayerDialog, INVALID_DIALOG_ID);
  10084. }
  10085. else
  10086. {
  10087. dialogid = GetPVarInt(playerid, FIXES_pvarCurrentDialog);
  10088. }
  10089. #else
  10090. SetPVarInt(playerid, FIXES_pvarPlayerDialog, INVALID_DIALOG_ID);
  10091. #endif
  10092. return FIXES_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
  10093. #endif
  10094. // =========================
  10095. // END: OnDialogResponse
  10096. // =========================
  10097. }
  10098.  
  10099. #if defined _ALS_OnDialogResponse
  10100. #error _ALS_OnDialogResponse defined
  10101. #endif
  10102. #define _ALS_OnDialogResponse
  10103. #define OnDialogResponse(%0) FIXES_OnDialogResponse(%0) <_ALS : _ALS_go>
  10104.  
  10105. _FIXES_FORWARD FIXES_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
  10106. #endif
  10107.  
  10108. /**
  10109. * <fixes>GetPlayerDialog</fixes>
  10110. */
  10111.  
  10112. #if defined _ALS_GetPlayerDialog
  10113. #error _ALS_GetPlayerDialog defined
  10114. #endif
  10115.  
  10116. #if FIX_GetPlayerDialog
  10117. stock FIXES_GetPlayerDialog(playerid)
  10118. {
  10119. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  10120. {
  10121. return FIXES_GET(PlayerDialog, playerid);
  10122. }
  10123. return -1;
  10124. }
  10125.  
  10126. #define _ALS_GetPlayerDialog
  10127. #define GetPlayerDialog( FIXES_GetPlayerDialog(
  10128. #endif
  10129.  
  10130. /**
  10131. * <fixes>valstr</fixes>
  10132. */
  10133.  
  10134. #if defined _ALS_valstr
  10135. #error _ALS_valstr defined
  10136. #endif
  10137. native BAD_valstr(dest[], value, bool:pack = false) = valstr;
  10138.  
  10139. /**
  10140. * <fixes>valstr</fixes>
  10141. */
  10142.  
  10143. #if FIX_valstr
  10144. stock FIXES_valstr(dest[], value, bool:pack = false)
  10145. {
  10146. // "format" can't handle cellmin properly.
  10147. static const
  10148. sc_szCellmin[] = !"-2147483648";
  10149. if (value == cellmin)
  10150. {
  10151. pack && strpack(dest, sc_szCellmin, 12) || strunpack(dest, sc_szCellmin, 12);
  10152. }
  10153. else
  10154. {
  10155. format(dest, 12, "%d", value),
  10156. pack && strpack(dest, dest, 12);
  10157. }
  10158. return 0;
  10159. }
  10160.  
  10161. #define _ALS_valstr
  10162. #define valstr( FIXES_valstr(
  10163. #endif
  10164.  
  10165. /**
  10166. * <fixes>fclose</fixes>
  10167. */
  10168.  
  10169. #if defined _ALS_fclose
  10170. #error _ALS_fclose defined
  10171. #endif
  10172. native BAD_fclose(File:handle) = fclose;
  10173.  
  10174. /**
  10175. * <fixes>fclose</fixes>
  10176. */
  10177.  
  10178. #if FIX_fclose
  10179. stock bool:FIXES_fclose(File:handle)
  10180. {
  10181. return handle && fclose(handle);
  10182. }
  10183.  
  10184. #define _ALS_fclose
  10185. #define fclose( FIXES_fclose(
  10186. #endif
  10187.  
  10188. /**
  10189. * <fixes>fwrite</fixes>
  10190. */
  10191.  
  10192. #if defined _ALS_fwrite
  10193. #error _ALS_fwrite defined
  10194. #endif
  10195. native BAD_fwrite(File:handle, const string[]) = fwrite;
  10196.  
  10197. /**
  10198. * <fixes>fwrite</fixes>
  10199. */
  10200.  
  10201. #if FIX_fwrite
  10202. stock FIXES_fwrite(File:handle, const string[])
  10203. {
  10204. return handle ? fwrite(handle, string) : 0;
  10205. }
  10206.  
  10207. #define _ALS_fwrite
  10208. #define fwrite( FIXES_fwrite(
  10209. #endif
  10210.  
  10211. /**
  10212. * <fixes>fread</fixes>
  10213. */
  10214.  
  10215. #if defined _ALS_fread
  10216. #error _ALS_fread defined
  10217. #endif
  10218. native BAD_fread(File:handle, string[], size = sizeof (string), bool:pack = false) = fread;
  10219.  
  10220. /**
  10221. * <fixes>fread</fixes>
  10222. */
  10223.  
  10224. #if FIX_fread
  10225. stock FIXES_fread(File:handle, string[], size = sizeof (string), bool:pack = false)
  10226. {
  10227. return handle ? fread(handle, string, size, pack) : 0;
  10228. }
  10229.  
  10230. #define _ALS_fread
  10231. #define fread( FIXES_fread(
  10232. #endif
  10233.  
  10234. /**
  10235. * <fixes>fputchar</fixes>
  10236. */
  10237.  
  10238. #if defined _ALS_fputchar
  10239. #error _ALS_fputchar defined
  10240. #endif
  10241. native BAD_fputchar(File:handle, value, bool:utf8 = true) = fputchar;
  10242.  
  10243. /**
  10244. * <fixes>fputchar</fixes>
  10245. */
  10246.  
  10247. #if FIX_fputchar
  10248. stock bool:FIXES_fputchar(File:handle, value, bool:utf8 = true)
  10249. {
  10250. return handle && fputchar(handle, value, utf8);
  10251. }
  10252.  
  10253. #define _ALS_fputchar
  10254. #define fputchar( FIXES_fputchar(
  10255. #endif
  10256.  
  10257. /**
  10258. * <fixes>fgetchar</fixes>
  10259. */
  10260.  
  10261. #if defined _ALS_fgetchar
  10262. #error _ALS_fgetchar defined
  10263. #endif
  10264. native BAD_fgetchar(File:handle, value, bool:utf8 = true) = fgetchar;
  10265.  
  10266. /**
  10267. * <fixes>fgetchar</fixes>
  10268. */
  10269.  
  10270. #if FIX_fgetchar
  10271. stock FIXES_fgetchar(File:handle, value, bool:utf8 = true)
  10272. {
  10273. return handle ? fgetchar(handle, value, utf8) : '\0';
  10274. }
  10275.  
  10276. #define _ALS_fgetchar
  10277. #define fgetchar( FIXES_fgetchar(
  10278. #endif
  10279.  
  10280. /**
  10281. * <fixes>fblockwrite</fixes>
  10282. */
  10283.  
  10284. #if defined _ALS_fblockwrite
  10285. #error _ALS_fblockwrite defined
  10286. #endif
  10287. native BAD_fblockwrite(File:handle, const buffer[], size = sizeof (buffer)) = fblockwrite;
  10288.  
  10289. /**
  10290. * <fixes>fblockwrite</fixes>
  10291. */
  10292.  
  10293. #if FIX_fblockwrite
  10294. stock FIXES_fblockwrite(File:handle, const buffer[], size = sizeof (buffer))
  10295. {
  10296. return handle ? fblockwrite(handle, buffer, size) : 0;
  10297. }
  10298.  
  10299. #define _ALS_fblockwrite
  10300. #define fblockwrite( FIXES_fblockwrite(
  10301. #endif
  10302.  
  10303. /**
  10304. * <fixes>fblockread</fixes>
  10305. */
  10306.  
  10307. #if defined _ALS_fblockread
  10308. #error _ALS_fblockread defined
  10309. #endif
  10310. native BAD_fblockread(File:handle, buffer[], size = sizeof (buffer)) = fblockread;
  10311.  
  10312. /**
  10313. * <fixes>fblockread</fixes>
  10314. */
  10315.  
  10316. #if FIX_fblockread
  10317. stock FIXES_fblockread(File:handle, buffer[], size = sizeof (buffer))
  10318. {
  10319. return handle ? fblockread(handle, buffer, size) : 0;
  10320. }
  10321.  
  10322. #define _ALS_fblockread
  10323. #define fblockread( FIXES_fblockread(
  10324. #endif
  10325.  
  10326. /**
  10327. * <fixes>fseek</fixes>
  10328. */
  10329.  
  10330. #if defined _ALS_fseek
  10331. #error _ALS_fseek defined
  10332. #endif
  10333. native BAD_fseek(File:handle, position = 0, seek_whence:whence = seek_start) = fseek;
  10334.  
  10335. /**
  10336. * <fixes>fseek</fixes>
  10337. */
  10338.  
  10339. #if FIX_fseek
  10340. stock FIXES_fseek(File:handle, position = 0, seek_whence:whence = seek_start)
  10341. {
  10342. return handle ? fseek(handle, position, whence) : 0;
  10343. }
  10344.  
  10345. #define _ALS_fseek
  10346. #define fseek( FIXES_fseek(
  10347. #endif
  10348.  
  10349. /**
  10350. * <fixes>flength</fixes>
  10351. */
  10352.  
  10353. #if defined _ALS_flength
  10354. #error _ALS_flength defined
  10355. #endif
  10356. native BAD_flength(File:handle) = flength;
  10357.  
  10358. /**
  10359. * <fixes>flength</fixes>
  10360. */
  10361.  
  10362. #if FIX_flength
  10363. stock FIXES_flength(File:handle)
  10364. {
  10365. return handle ? flength(handle) : 0;
  10366. }
  10367.  
  10368. #define _ALS_flength
  10369. #define flength( FIXES_flength(
  10370. #endif
  10371.  
  10372. /**
  10373. * <fixes>Kick</fixes>
  10374. */
  10375.  
  10376. #if defined _ALS_Kick
  10377. #error _ALS_Kick defined
  10378. #endif
  10379. native BAD_Kick(playerid) = Kick;
  10380.  
  10381. /**
  10382. * <fixes>Kick</fixes>
  10383. */
  10384.  
  10385. #if FIX_Kick
  10386. forward _FIXES_Kick(playerid);
  10387.  
  10388. public _FIXES_Kick(playerid)
  10389. {
  10390. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_KICKED,
  10391. Kick(playerid);
  10392. }
  10393.  
  10394. #if !FIXES_Single
  10395. forward @FIXES_Kick(playerid);
  10396.  
  10397. public @FIXES_Kick(playerid)
  10398. {
  10399. FIXES_BlockUpdate(playerid, false);
  10400. }
  10401. #endif
  10402.  
  10403. stock FIXES_Kick(playerid)
  10404. {
  10405. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
  10406. {
  10407. // Disable as much of the server as possible quickly.
  10408. return
  10409. #if FIXES_Single
  10410. FIXES_BlockUpdate(playerid, false),
  10411. #else
  10412. CallRemoteFunction("@FIXES_Kick", "i", playerid),
  10413. #endif
  10414. TogglePlayerSpectating(playerid, true),
  10415. TogglePlayerControllable(playerid, false),
  10416. SetPVarInt(playerid, FIXES_pvarKick, SetTimerEx(FIXES_gscKick, 1000, 0, FIXES_gscSpec@i, playerid)),
  10417. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_KICKED,
  10418. 1;
  10419. }
  10420. else
  10421. {
  10422. return Kick(playerid);
  10423. }
  10424. }
  10425.  
  10426. #define _ALS_Kick
  10427. #define Kick( FIXES_Kick(
  10428. #endif
  10429.  
  10430. /**
  10431. * <remarks>
  10432. * Figure out which the first filterscript to be called is so that it can do the
  10433. * majority of the work. More detail: Several pieces of code for some fixes
  10434. * rely on things like blocking <symbolref name="OnPlayerUpdate" />. This
  10435. * should be done in the first script in which
  10436. * <symbolref name="OnPlayerUpdate" /> is called only, so we need to find out
  10437. * in advance which script will be called first (at least out of all the fixed
  10438. * scripts).
  10439. * </remarks>
  10440. */
  10441.  
  10442. #if !FIXES_Single
  10443. public _FIXES_DetermineOrder()
  10444. {
  10445. // TODO: Graceful handoff. I thought I was past all this rubbish!
  10446. if (!_FIXES_gIsFilterscript)
  10447. {
  10448. if (existproperty(5, FIXES_gscNoGMProperty))
  10449. {
  10450. return 0;
  10451. }
  10452. // Make sure certain data is synced with what the GM thinks it is.
  10453. // =============================
  10454. // BEGIN: AllowInteriorWeapons
  10455. // =============================
  10456. #if FIX_AllowInteriorWeapons
  10457. CallRemoteFunction(FIXES_gscAllowInteriorWeapons, FIXES_gscSpec@i, !(FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR));
  10458. #endif
  10459. // =============================
  10460. // END: AllowInteriorWeapons
  10461. // =============================
  10462. }
  10463. if (existproperty(5, FIXES_gscOrderProperty))
  10464. {
  10465. // Either this is a Filter Script (1) and we don't want gamemodes
  10466. // (1) or this isn't a filterscript (0) and we do want gamemodes
  10467. // (0). All other cases return here due to a logic mismatch. This
  10468. // is to rectify the difference in call orders between
  10469. // "CallRemoteFunction" and normal callbacks. Now DOESN'T end on
  10470. // the second time round for filterscripts to correctly pass on the
  10471. // data to GameModes.
  10472. if (!existproperty(5, FIXES_gscNoGMProperty) && _FIXES_gIsFilterscript == bool:getproperty(5, FIXES_gscOrderProperty))
  10473. {
  10474. // The game mode is not in charge, which means we are checking
  10475. // the filterscripts a second time and shouldn't be.
  10476. return 0;
  10477. }
  10478. // If this script was previously the owner, and we are not ending
  10479. // the game mode (in which case discard all data), and if we are
  10480. // only dealing with filterscripts or the gamemode is now the
  10481. // master.
  10482. if (FIXES_gsSettings & (e_FIXES_SETTINGS_IN_CHARGE | e_FIXES_SETTINGS_DROP_ALL_DATA) == e_FIXES_SETTINGS_IN_CHARGE)
  10483. {
  10484. FIXES_PRINTF("_FIXES_DetermineOrder: Was in charge");
  10485. // This script is currently in charge, but a new script has
  10486. // usurped it! Pass all relevant data over to the new script.
  10487. // Also, this wasn't triggered by a game mode change (where we
  10488. // just want to dump and reset all data). There is no need to
  10489. // reset the admin teleport data as that is always handled by
  10490. // the Game Mode, so it will either be correct, or it will be
  10491. // blank.
  10492. FIXES_gsSettings &= ~e_FIXES_SETTINGS_IN_CHARGE;
  10493. #if FIX_PutPlayerInVehicle || FIX_GameText || FIX_TogglePlayerControllable
  10494. _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
  10495. {
  10496. // =================
  10497. // BEGIN: GameText
  10498. // =================
  10499. #if FIX_GameText
  10500. for (new j = 0; j != FIXES_GT_STYLE_COUNT; ++j)
  10501. {
  10502. PlayerTextDrawDestroy(i, FIXES_gsPGTStyle[i][j]);
  10503. }
  10504. #endif
  10505. // =================
  10506. // END: GameText
  10507. // =================
  10508.  
  10509. // =================================
  10510. // BEGIN: TogglePlayerControllable
  10511. // =================================
  10512. #if FIX_TogglePlayerControllable
  10513. CallRemoteFunction(FIXES_gscTogglePlayerControl, FIXES_gscSpec@ii, i, !(FIXES_gsPlayerBools[i] & e_FIXES_BOOLS_UNCONTROLLABLE));
  10514. #endif
  10515. // =================================
  10516. // END: TogglePlayerControllable
  10517. // =================================
  10518.  
  10519. // ===========================
  10520. // BEGIN: PutPlayerInVehicle
  10521. // ===========================
  10522. #if FIX_PutPlayerInVehicle
  10523. if (FIXES_gsPlayerBools[i] & e_FIXES_BOOLS_PUT_IN_VEHICLE)
  10524. {
  10525. CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iii, i, FIXES_gsVehicleSeatData[i] & 0x00FFFFFF, FIXES_gsVehicleSeatData[i] >>> 24);
  10526. }
  10527. #endif
  10528. // ===========================
  10529. // END: PutPlayerInVehicle
  10530. // ===========================
  10531. }
  10532. #endif
  10533.  
  10534. // =================
  10535. // BEGIN: GameText
  10536. // =================
  10537. #if FIX_GameText
  10538. #if FIX_GameTextStyles
  10539. TextDrawDestroy(FIXES_gsGTStyle[13]),
  10540. TextDrawDestroy(FIXES_gsGTStyle[12]),
  10541. TextDrawDestroy(FIXES_gsGTStyle[11]),
  10542. TextDrawDestroy(FIXES_gsGTStyle[10]),
  10543. TextDrawDestroy(FIXES_gsGTStyle[9]),
  10544. TextDrawDestroy(FIXES_gsGTStyle[8]),
  10545. TextDrawDestroy(FIXES_gsGTStyle[7]),
  10546. #endif
  10547. TextDrawDestroy(FIXES_gsGTStyle[6]),
  10548. TextDrawDestroy(FIXES_gsGTStyle[5]),
  10549. TextDrawDestroy(FIXES_gsGTStyle[4]),
  10550. TextDrawDestroy(FIXES_gsGTStyle[3]),
  10551. TextDrawDestroy(FIXES_gsGTStyle[2]),
  10552. TextDrawDestroy(FIXES_gsGTStyle[1]),
  10553. TextDrawDestroy(FIXES_gsGTStyle[0]);
  10554. #endif
  10555. // =================
  10556. // END: GameText
  10557. // =================
  10558.  
  10559. FIXES_PRINTF("_FIXES_DetermineOrder: Not in charge");
  10560. return 0;
  10561. }
  10562. else
  10563. {
  10564. FIXES_gsSettings &= ~e_FIXES_SETTINGS_IN_CHARGE;
  10565. FIXES_PRINTF("_FIXES_DetermineOrder: Not in charge");
  10566. return 0;
  10567. }
  10568. }
  10569. else if (!(FIXES_gsSettings & e_FIXES_SETTINGS_ENDING))
  10570. {
  10571. setproperty(5, FIXES_gscOrderProperty, _FIXES_gIsFilterscript);
  10572. #if FIXES_Debug
  10573. if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
  10574. {
  10575. FIXES_PRINTF("_FIXES_DetermineOrder: Already in charge");
  10576. }
  10577. #endif
  10578. FIXES_gsSettings |= e_FIXES_SETTINGS_IN_CHARGE;
  10579. FIXES_PRINTF("_FIXES_DetermineOrder: Now in charge");
  10580.  
  10581. // =================
  10582. // BEGIN: GameText
  10583. // =================
  10584. #if FIX_GameText
  10585. // Create all the relevant TextDraws.
  10586. _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
  10587. {
  10588. _FIXES_CreateGameTextDraws(playerid);
  10589. }
  10590. _FIXES_CreateGameTextDraws(INVALID_PLAYER_ID);
  10591. #endif
  10592. // =================
  10593. // END: GameText
  10594. // =================
  10595. return 1;
  10596. }
  10597. else if (!(FIXES_gsSettings & e_FIXES_SETTINGS_ENDED))
  10598. {
  10599. // Only called when a filterscript that is currently master (and
  10600. // thus called first by "CallRemoteFunction") ends. This doesn't
  10601. // get triggered when a gamemode is master, but that doesn't matter
  10602. // because in that case all the textdraws are destroyed anyway.
  10603.  
  10604. // =================
  10605. // BEGIN: GameText
  10606. // =================
  10607. #if FIX_GameText
  10608. // Destroy all the relevant TextDraws.
  10609. _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
  10610. {
  10611. #if FIX_GameTextStyles
  10612. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][13]),
  10613. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][12]),
  10614. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][11]),
  10615. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][10]),
  10616. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][9]),
  10617. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][8]),
  10618. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][7]),
  10619. #endif
  10620. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][6]),
  10621. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][5]),
  10622. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][4]),
  10623. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][3]),
  10624. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][2]),
  10625. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][1]),
  10626. PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][0]);
  10627. }
  10628. #if FIX_GameTextStyles
  10629. TextDrawDestroy(FIXES_gsGTStyle[13]),
  10630. TextDrawDestroy(FIXES_gsGTStyle[12]),
  10631. TextDrawDestroy(FIXES_gsGTStyle[11]),
  10632. TextDrawDestroy(FIXES_gsGTStyle[10]),
  10633. TextDrawDestroy(FIXES_gsGTStyle[9]),
  10634. TextDrawDestroy(FIXES_gsGTStyle[8]),
  10635. TextDrawDestroy(FIXES_gsGTStyle[7]),
  10636. #endif
  10637. TextDrawDestroy(FIXES_gsGTStyle[6]),
  10638. TextDrawDestroy(FIXES_gsGTStyle[5]),
  10639. TextDrawDestroy(FIXES_gsGTStyle[4]),
  10640. TextDrawDestroy(FIXES_gsGTStyle[3]),
  10641. TextDrawDestroy(FIXES_gsGTStyle[2]),
  10642. TextDrawDestroy(FIXES_gsGTStyle[1]),
  10643. TextDrawDestroy(FIXES_gsGTStyle[0]);
  10644. #endif
  10645. // =================
  10646. // END: GameText
  10647. // =================
  10648.  
  10649. #if FIXES_Debug
  10650. FIXES_PRINTF("_FIXES_DetermineOrder: Ending");
  10651. #endif
  10652.  
  10653. FIXES_gsSettings |= e_FIXES_SETTINGS_ENDED;
  10654. }
  10655. return 0;
  10656. }
  10657. #endif
  10658.  
  10659. /**
  10660. * <fixes>strins</fixes>
  10661. */
  10662.  
  10663. #if defined _ALS_strins
  10664. #error _ALS_strins defined
  10665. #endif
  10666. native BAD_strins(string[], const substr[], pos, maxlength = sizeof string) = strins;
  10667.  
  10668. /**
  10669. * <fixes>strins</fixes>
  10670. */
  10671.  
  10672. #if FIX_strins
  10673. stock FIXES_strins(string[], const substr[], pos, maxlength = sizeof string)
  10674. {
  10675. if (string[0] > 255)
  10676. {
  10677. new
  10678. strlength = strlen(string),
  10679. sublength = strlen(substr),
  10680. m4 = maxlength * 4;
  10681. // Packed - format doesn't like these strings.
  10682. if (strlength + sublength >= m4)
  10683. {
  10684. if (pos + sublength >= m4)
  10685. {
  10686. return
  10687. string{pos} = '\0',
  10688. // Hopefully this doesn't ignore maxlength and does packed.
  10689. strcat(string, substr, maxlength);
  10690. }
  10691. else
  10692. {
  10693. // pos + sublength is less than maxlength, so this sum MUST
  10694. // be positive and gte than "pos", so there's no need for
  10695. // additional checks.
  10696. string{maxlength - sublength - 1} = '\0';
  10697. }
  10698. }
  10699. return strins(string, substr, pos, maxlength);
  10700. }
  10701. else if (substr[0] > 255)
  10702. {
  10703. new
  10704. strlength = strlen(string),
  10705. sublength = strlen(substr);
  10706. // Packed - format doesn't like these strings.
  10707. if (strlength + sublength >= maxlength)
  10708. {
  10709. if (pos + sublength >= maxlength)
  10710. {
  10711. return
  10712. string[pos] = '\0',
  10713. // Hopefully this doesn't ignore maxlength and does packed.
  10714. strcat(string, substr, maxlength);
  10715. }
  10716. else
  10717. {
  10718. // pos + sublength is less than maxlength, so this sum MUST
  10719. // be positive and gte than "pos", so there's no need for
  10720. // additional checks.
  10721. string[maxlength - sublength - 1] = '\0';
  10722. }
  10723. }
  10724. return strins(string, substr, pos, maxlength);
  10725. }
  10726. else
  10727. {
  10728. return format(string, maxlength, "%.*s%s%s", pos, string, substr, string[pos]);
  10729. }
  10730. }
  10731.  
  10732. #define _ALS_strins
  10733. #define strins( FIXES_strins(
  10734. #endif
  10735.  
  10736. /**
  10737. * <fixes>ApplyAnimation</fixes>
  10738. * <fixes>ApplyAnimation_2</fixes>
  10739. * <fixes>ApplyActorAnimation</fixes>
  10740. * <fixes>ApplyActorAnimation_2</fixes>
  10741. */
  10742.  
  10743. #if FIX_ApplyAnimation || FIX_ApplyAnimation_2 || FIX_ApplyActorAnimation || FIX_ApplyActorAnimation_2
  10744. static stock _FIXES_GetAnimLibIndex(const animlib[])
  10745. {
  10746. new
  10747. diff,
  10748. idx = animlib[0] & ~0x20;
  10749. // Uses a sort of optimised binary search. The code first identifies the area in the array
  10750. // in which libraries with this first letter are, then does a binary search using only that
  10751. // subset of the array. This used to use an N-ary search that just went linearly through
  10752. // the identified subset of the array, and that was 5x faster than a simple linear loop over
  10753. // the whole array. This new version is 50% faster than even that was. "E" has no
  10754. // libraries, but we don't check for that explicitly as it would slow down the more common
  10755. // code path - and it ends fairly quickly anyway as "upper == lower".
  10756. if (_FIXES_IN_RANGE(idx, 'A', 'W' + 1))
  10757. {
  10758. new
  10759. upper = FIXES_gscAnimIndexes[idx - ('A' - 1)],
  10760. lower = FIXES_gscAnimIndexes[idx - 'A'];
  10761. while (upper != lower)
  10762. {
  10763. idx = (upper - lower) / 2 + lower;
  10764. if ((diff = strcmp(FIXES_gscAnimLib[idx], animlib, true)))
  10765. {
  10766. if (diff > 0) upper = idx;
  10767. else lower = idx + 1;
  10768. }
  10769. else
  10770. {
  10771. return idx;
  10772. }
  10773. }
  10774. }
  10775.  
  10776. return -1;
  10777. }
  10778. #endif
  10779.  
  10780. /**
  10781. * <fixes>ApplyAnimation_2</fixes>
  10782. */
  10783.  
  10784. #if FIX_ApplyAnimation_2
  10785. static stock _FIXES_ApplyAnimationDelay(const animname[], playerid, idx, Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0)
  10786. {
  10787. if (FIXES_gsPlayerAnimTimer[playerid])
  10788. {
  10789. KillTimer(FIXES_gsPlayerAnimTimer[playerid]),
  10790. FIXES_gsPlayerAnimTimer[playerid] = 0;
  10791. }
  10792. if (FIXES_gsPlayerAnimLibs[playerid][idx >>> 5] & (1 << (idx & 0x1F)))
  10793. {
  10794. FIXES_gsPlayerAnimLibs[playerid][idx >>> 5] &= ~(1 << (idx & 0x1F)),
  10795. FIXES_gsPlayerAnimName[playerid][0] = '\0',
  10796. strcat(FIXES_gsPlayerAnimName[playerid], animname),
  10797. FIXES_gsPlayerAnimTimer[playerid] = SetTimerEx("_FIXES_ApplyAnimation", 350, false, "ddfdddddd", playerid, idx, fDelta, loop, lockx, locky, freeze, time, forcesync);
  10798. }
  10799. }
  10800. #endif
  10801.  
  10802. /**
  10803. * <fixes>ApplyAnimation_2</fixes>
  10804. */
  10805.  
  10806. #if FIX_ApplyAnimation_2
  10807. forward _FIXES_ApplyAnimation(playerid, animlib, Float:fDelta, loop, lockx, locky, freeze, time, forcesync);
  10808.  
  10809. public _FIXES_ApplyAnimation(playerid, animlib, Float:fDelta, loop, lockx, locky, freeze, time, forcesync)
  10810. {
  10811. ApplyAnimation(playerid, FIXES_gscAnimLib[animlib], FIXES_gsPlayerAnimName[playerid], fDelta, loop, lockx, locky, freeze, time, forcesync),
  10812. FIXES_gsPlayerAnimTimer[playerid] = 0;
  10813. }
  10814. #endif
  10815.  
  10816. /**
  10817. * <fixes>ApplyAnimation</fixes>
  10818. * <fixes>ApplyAnimation_2</fixes>
  10819. */
  10820.  
  10821. #if !FIX_const
  10822. #if defined _ALS_ApplyAnimation
  10823. #error _ALS_ApplyAnimation defined
  10824. #endif
  10825. native BAD_ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0) = ApplyAnimation;
  10826. #endif
  10827.  
  10828. /**
  10829. * <fixes>ApplyAnimation</fixes>
  10830. * <fixes>ApplyAnimation_2</fixes>
  10831. */
  10832.  
  10833. #if FIX_ApplyAnimation || FIX_ApplyAnimation_2
  10834. stock FIXES_ApplyAnimation(playerid, _FIXES_MAYBE_CONST animlib[], _FIXES_MAYBE_CONST animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0)
  10835. {
  10836. new
  10837. idx;
  10838.  
  10839. idx = _FIXES_GetAnimLibIndex(animlib);
  10840.  
  10841. if (idx != -1)
  10842. {
  10843. #if FIX_ApplyAnimation_2
  10844. _FIXES_ApplyAnimationDelay(animname, playerid, idx, fDelta, loop, lockx, locky, freeze, time, forcesync);
  10845. #endif
  10846. return ApplyAnimation(playerid, animlib, animname, fDelta, loop, lockx, locky, freeze, time, forcesync);
  10847. }
  10848.  
  10849. return 0;
  10850. }
  10851.  
  10852. #if defined _ALS_ApplyAnimation
  10853. #undef ApplyAnimation
  10854. #else
  10855. #define _ALS_ApplyAnimation
  10856. #endif
  10857. #define ApplyAnimation( FIXES_ApplyAnimation(
  10858. #endif
  10859.  
  10860. /**
  10861. * <fixes>ApplyActorAnimation_2</fixes>
  10862. */
  10863.  
  10864. #if FIX_ApplyActorAnimation_2
  10865. static stock _FIXES_ApplyActorAnimationDelay(const animname[], actorid, idx, Float:fDelta, loop, lockx, locky, freeze, time)
  10866. {
  10867. if (FIXES_gsActorAnimTimer[actorid])
  10868. {
  10869. KillTimer(FIXES_gsActorAnimTimer[actorid]),
  10870. FIXES_gsActorAnimTimer[actorid] = 0;
  10871. }
  10872. if (FIXES_gsActorAnimLibs[actorid][idx >>> 5] & (1 << (idx & 0x1F)))
  10873. {
  10874. FIXES_gsActorAnimLibs[actorid][idx >>> 5] &= ~(1 << (idx & 0x1F)),
  10875. FIXES_gsActorAnimName[actorid][0] = '\0',
  10876. strcat(FIXES_gsActorAnimName[actorid], animname),
  10877. FIXES_gsActorAnimTimer[actorid] = SetTimerEx("_FIXES_ApplyActorAnimation", 350, false, "ddfdddddd", actorid, idx, fDelta, loop, lockx, locky, freeze, time);
  10878. }
  10879. }
  10880. #endif
  10881.  
  10882. /**
  10883. * <fixes>ApplyActorAnimation_2</fixes>
  10884. */
  10885.  
  10886. #if FIX_ApplyActorAnimation_2
  10887. forward _FIXES_ApplyActorAnimation(actorid, animlib, Float:fDelta, loop, lockx, locky, freeze, time);
  10888.  
  10889. public _FIXES_ApplyActorAnimation(actorid, animlib, Float:fDelta, loop, lockx, locky, freeze, time)
  10890. {
  10891. ApplyActorAnimation(actorid, FIXES_gscAnimLib[animlib], FIXES_gsActorAnimName[actorid], fDelta, loop, lockx, locky, freeze, time),
  10892. FIXES_gsActorAnimTimer[actorid] = 0;
  10893. }
  10894. #endif
  10895.  
  10896. /**
  10897. * <fixes>ApplyActorAnimation</fixes>
  10898. * <fixes>ApplyActorAnimation_2</fixes>
  10899. */
  10900.  
  10901. #if !FIX_const
  10902. #if defined _ALS_ApplyActorAnimation
  10903. #error _ALS_ApplyActorAnimation defined
  10904. #endif
  10905. native BAD_ApplyActorAnimation(actorid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time) = ApplyActorAnimation;
  10906. #endif
  10907.  
  10908. /**
  10909. * <fixes>ApplyActorAnimation</fixes>
  10910. * <fixes>ApplyActorAnimation_2</fixes>
  10911. */
  10912.  
  10913. #if FIX_ApplyActorAnimation || FIX_ApplyActorAnimation_2
  10914. stock FIXES_ApplyActorAnimation(actorid, _FIXES_MAYBE_CONST animlib[], _FIXES_MAYBE_CONST animname[], Float:fDelta, loop, lockx, locky, freeze, time)
  10915. {
  10916. new
  10917. idx;
  10918.  
  10919. idx = _FIXES_GetAnimLibIndex(animlib);
  10920.  
  10921. if (idx != -1)
  10922. {
  10923. #if FIX_ApplyActorAnimation_2
  10924. _FIXES_ApplyActorAnimationDelay(animname, actorid, idx, fDelta, loop, lockx, locky, freeze, time);
  10925. #endif
  10926. return ApplyActorAnimation(actorid, animlib, animname, fDelta, loop, lockx, locky, freeze, time);
  10927. }
  10928.  
  10929. return 0;
  10930. }
  10931.  
  10932. #if defined _ALS_ApplyActorAnimation
  10933. #undef ApplyActorAnimation
  10934. #else
  10935. #define _ALS_ApplyActorAnimation
  10936. #endif
  10937. #define ApplyActorAnimation( FIXES_ApplyActorAnimation(
  10938. #endif
  10939.  
  10940. /**
  10941. * <fixes>ApplyActorAnimation_2</fixes>
  10942. */
  10943.  
  10944. #if defined _ALS_CreateActor
  10945. #error _ALS_CreateActor defined
  10946. #endif
  10947. native BAD_CreateActor(modelid, Float:X, Float:Y, Float:Z, Float:Rotation) = CreateActor;
  10948.  
  10949. /**
  10950. * <fixes>ApplyActorAnimation_2</fixes>
  10951. */
  10952.  
  10953. #if FIX_ApplyActorAnimation_2
  10954. stock FIXES_CreateActor(modelid, Float:X, Float:Y, Float:Z, Float:Rotation)
  10955. {
  10956. new
  10957. actorid;
  10958.  
  10959. actorid = CreateActor(modelid, X, Y, Z, Rotation);
  10960.  
  10961. if (actorid == INVALID_ACTOR_ID)
  10962. {
  10963. return INVALID_ACTOR_ID;
  10964. }
  10965.  
  10966. FIXES_gsActorAnimLibs[actorid][0] =
  10967. FIXES_gsActorAnimLibs[actorid][1] =
  10968. FIXES_gsActorAnimLibs[actorid][2] =
  10969. FIXES_gsActorAnimLibs[actorid][3] =
  10970. FIXES_gsActorAnimLibs[actorid][4] = -1;
  10971.  
  10972. return actorid;
  10973. }
  10974.  
  10975. #define _ALS_CreateActor
  10976. #define CreateActor( FIXES_CreateActor(
  10977. #endif
  10978.  
  10979. /**
  10980. * <fixes>ApplyActorAnimation_2</fixes>
  10981. */
  10982.  
  10983. #if defined _ALS_DestroyActor
  10984. #error _ALS_DestroyActor defined
  10985. #endif
  10986. native BAD_DestroyActor(actorid) = DestroyActor;
  10987.  
  10988. /**
  10989. * <fixes>ApplyActorAnimation_2</fixes>
  10990. */
  10991.  
  10992. #if FIX_ApplyActorAnimation_2
  10993. stock FIXES_DestroyActor(actorid)
  10994. {
  10995. if (FIXES_gsActorAnimTimer[actorid])
  10996. {
  10997. KillTimer(FIXES_gsActorAnimTimer[actorid]),
  10998. FIXES_gsActorAnimTimer[actorid] = 0;
  10999. }
  11000.  
  11001. return DestroyActor(actorid);
  11002. }
  11003.  
  11004. #define _ALS_DestroyActor
  11005. #define DestroyActor( FIXES_DestroyActor(
  11006. #endif
  11007.  
  11008. /**
  11009. * <fixes>OnPlayerEnterVehicle_3</fixes>
  11010. */
  11011.  
  11012. #if defined _ALS_SetVehicleParamsEx
  11013. #error _ALS_SetVehicleParamsEx defined
  11014. #endif
  11015. native BAD_SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective) = SetVehicleParamsEx;
  11016.  
  11017. /**
  11018. * <fixes>OnPlayerEnterVehicle_3</fixes>
  11019. */
  11020.  
  11021. #if FIX_OnPlayerEnterVehicle_3
  11022. stock FIXES_SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective)
  11023. {
  11024. FIXES_gsVehicleIsLocked[vehicleid] = doors == VEHICLE_PARAMS_ON;
  11025. return SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  11026. }
  11027.  
  11028. #define _ALS_SetVehicleParamsEx
  11029. #define SetVehicleParamsEx( FIXES_SetVehicleParamsEx(
  11030. #endif
  11031.  
  11032. /**
  11033. * <fixes>OnPlayerEnterVehicle_3</fixes>
  11034. */
  11035.  
  11036. #if defined _ALS_GetVehicleParamsEx
  11037. #error _ALS_GetVehicleParamsEx defined
  11038. #endif
  11039. native BAD_GetVehicleParamsEx(vehicleid, &engine, &lights, &alarm, &doors, &bonnet, &boot, &objective) = GetVehicleParamsEx;
  11040.  
  11041. /**
  11042. * <fixes>OnPlayerEnterVehicle_3</fixes>
  11043. */
  11044.  
  11045. #if FIX_OnPlayerEnterVehicle_3
  11046. stock FIXES_GetVehicleParamsEx(vehicleid, &engine, &lights, &alarm, &doors, &bonnet, &boot, &objective)
  11047. {
  11048. new
  11049. ret = GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  11050. #if FIXES_Single
  11051. doors = FIXES_gsVehicleIsLocked[vehicleid] ? VEHICLE_PARAMS_ON : VEHICLE_PARAMS_OFF;
  11052. #else
  11053. #if !defined FILTERSCRIPT
  11054. doors = _FIXES_GetVehicleDoorsEx(vehicleid) ? VEHICLE_PARAMS_ON : VEHICLE_PARAMS_OFF;
  11055. #else
  11056. doors = CallRemoteFunction("_FIXES_GetVehicleDoorsEx", "i", vehicleid) ? VEHICLE_PARAMS_ON : VEHICLE_PARAMS_OFF;
  11057. #endif
  11058. #endif
  11059. return ret;
  11060. }
  11061.  
  11062. #define _ALS_GetVehicleParamsEx
  11063. #define GetVehicleParamsEx( FIXES_GetVehicleParamsEx(
  11064. #endif
  11065.  
  11066. /**
  11067. * <fixes>OnPlayerEnterVehicle_3</fixes>
  11068. */
  11069. #if FIX_OnPlayerEnterVehicle_3 && !FIXES_Single && !defined FILTERSCRIPT
  11070. forward _FIXES_GetVehicleDoorsEx(vehicleid);
  11071.  
  11072. public _FIXES_GetVehicleDoorsEx(vehicleid)
  11073. {
  11074. return FIXES_gsVehicleIsLocked[vehicleid];
  11075. }
  11076. #endif
  11077.  
  11078. /**
  11079. * <fixes>random</fixes>
  11080. */
  11081.  
  11082. #if defined _ALS_random
  11083. #error _ALS_random defined
  11084. #endif
  11085. native BAD_random(max) = random;
  11086.  
  11087. /**
  11088. * <fixes>random</fixes>
  11089. */
  11090.  
  11091. #if FIX_random
  11092. stock FIXES_random(max)
  11093. {
  11094. if (max < 0)
  11095. {
  11096. return -random(-max);
  11097. }
  11098. else
  11099. {
  11100. return random(max);
  11101. }
  11102. }
  11103.  
  11104. #define _ALS_random
  11105. #define random( FIXES_random(
  11106. #endif
  11107.  
  11108. /**
  11109. * <fixes>sleep</fixes>
  11110. */
  11111.  
  11112. // Uses a little trick to consume part of the line and thus not match
  11113. // our hooked version.
  11114. #if defined _ALS_sleep
  11115. #error _ALS_sleep defined
  11116. #endif
  11117. #define BAD_sleep%0\n%9 sleep%0
  11118.  
  11119. #if FIX_sleep
  11120. stock FIXES_sleep(ms)
  11121. {
  11122. // Call a native function that does very little, but saves the current
  11123. // heap pointer. Then return to save the accurate stack pointer.
  11124. return heapspace(), ms;
  11125. }
  11126.  
  11127. #define _ALS_sleep
  11128.  
  11129. #define sleep%0\n%9 sleep FIXES_sleep(%0)
  11130. // This fixes another BIZZARE bug. Just doing:
  11131. //
  11132. // #define FIXES_sleep(%0;) FIXES_sleep(%0)
  11133. //
  11134. // Results in:
  11135. //
  11136. // FIXES_sleep(n));
  11137. //
  11138. // Which clearly it shouldn't. I've stepped through the compilation and that
  11139. // extra bracket comes from nowhere!
  11140. #define FIXES_sleep(%0;) FIXES_sleep _FIXES_SLEEP_BRACKET %0);
  11141. #define _FIXES_SLEEP_BRACKET (
  11142. #endif
  11143.  
  11144. /**
  11145. * <remarks>
  11146. * _FIXES_SetCamera
  11147. * </remarks>
  11148. * <fixes>SetPlayerCamera</fixes>
  11149. */
  11150.  
  11151. #if FIX_SetPlayerCamera
  11152. forward _FIXES_SetCamera(playerid, type, Float:x, Float:y, Float:z, cut);
  11153.  
  11154. public _FIXES_SetCamera(playerid, type, Float:x, Float:y, Float:z, cut)
  11155. {
  11156. if (type)
  11157. {
  11158. SetPlayerCameraPos(playerid, x, y, z);
  11159. }
  11160. else
  11161. {
  11162. SetPlayerCameraLookAt(playerid, x, y, z, cut);
  11163. }
  11164. return 0;
  11165. }
  11166. #endif
  11167.  
  11168. /**
  11169. * <fixes>SetPlayerCamera</fixes>
  11170. */
  11171.  
  11172. #if defined _ALS_SetPlayerCameraPos
  11173. #error _ALS_SetPlayerCameraPos defined
  11174. #endif
  11175. native BAD_SetPlayerCameraPos(playerid, Float:x, Float:y, Float:z) = SetPlayerCameraPos;
  11176.  
  11177. /**
  11178. * <fixes>SetPlayerCamera</fixes>
  11179. */
  11180.  
  11181. #if FIX_SetPlayerCamera
  11182. stock FIXES_SetPlayerCameraPos(playerid, Float:x, Float:y, Float:z)
  11183. {
  11184. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  11185. {
  11186. #if FIXES_Single
  11187. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_SPECTATING || GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
  11188. #else
  11189. if (GetPVarInt(playerid, FIXES_pvarPlayerSpectate) || GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
  11190. #endif
  11191. {
  11192. SetTimerEx(FIXES_gscSetCamera, 300, 0, FIXES_gscSpec@iifff, playerid, 1, x, y, z);
  11193. }
  11194. else
  11195. {
  11196. SetPlayerCameraPos(playerid, x, y, z);
  11197. }
  11198. }
  11199. return 0;
  11200. }
  11201.  
  11202. #define _ALS_SetPlayerCameraPos
  11203. #define SetPlayerCameraPos( FIXES_SetPlayerCameraPos(
  11204. #endif
  11205.  
  11206. /**
  11207. * <fixes>SetPlayerCamera</fixes>
  11208. */
  11209.  
  11210. #if defined _ALS_SetPlayerCameraLookAt
  11211. #error _ALS_SetPlayerCameraLookAt defined
  11212. #endif
  11213. native BAD_SetPlayerCameraLookAt(playerid, Float:x, Float:y, Float:z) = SetPlayerCameraLookAt;
  11214.  
  11215. /**
  11216. * <fixes>SetPlayerCamera</fixes>
  11217. */
  11218.  
  11219. #if FIX_SetPlayerCamera
  11220. stock FIXES_SetPlayerCameraLookAt(playerid, Float:x, Float:y, Float:z, cut = CAMERA_CUT)
  11221. {
  11222. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  11223. {
  11224. #if FIXES_Single
  11225. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_SPECTATING || GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
  11226. #else
  11227. if (GetPVarInt(playerid, FIXES_pvarPlayerSpectate) || GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
  11228. #endif
  11229. {
  11230. SetTimerEx(FIXES_gscSetCamera, 300, 0, FIXES_gscSpec@iifffi, playerid, 0, x, y, z, cut);
  11231. }
  11232. else
  11233. {
  11234. SetPlayerCameraLookAt(playerid, x, y, z, cut);
  11235. }
  11236. }
  11237. return 0;
  11238. }
  11239.  
  11240. #define _ALS_SetPlayerCameraLookAt
  11241. #define SetPlayerCameraLookAt( FIXES_SetPlayerCameraLookAt(
  11242. #endif
  11243.  
  11244. /**
  11245. * <fixes>SetPlayerCamera</fixes>
  11246. */
  11247.  
  11248. #if defined _ALS_TogglePlayerSpectating
  11249. #error _ALS_TogglePlayerSpectating defined
  11250. #endif
  11251. native BAD_TogglePlayerSpectating(playerid, toggle) = TogglePlayerSpectating;
  11252.  
  11253. /**
  11254. * <fixes>SetPlayerCamera</fixes>
  11255. */
  11256.  
  11257. #if FIX_SetPlayerCamera
  11258. stock FIXES_TogglePlayerSpectating(playerid, toggle)
  11259. {
  11260. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  11261. {
  11262. if (toggle)
  11263. {
  11264. #if FIXES_Single
  11265. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_SPECTATING;
  11266. #else
  11267. SetPVarInt(playerid, FIXES_pvarPlayerSpectate, 1);
  11268. #endif
  11269. }
  11270. else
  11271. {
  11272. #if FIXES_Single
  11273. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_SPECTATING;
  11274. #else
  11275. DeletePVar(playerid, FIXES_pvarPlayerSpectate);
  11276. #endif
  11277. }
  11278. return TogglePlayerSpectating(playerid, toggle);
  11279. }
  11280. return 0;
  11281. }
  11282.  
  11283. #define _ALS_TogglePlayerSpectating
  11284. #define TogglePlayerSpectating( FIXES_TogglePlayerSpectating(
  11285. #endif
  11286.  
  11287. /**
  11288. * <fixes>SetPlayerTime</fixes>
  11289. */
  11290.  
  11291. #if defined _ALS_SetPlayerTime
  11292. #error _ALS_SetPlayerTime defined
  11293. #endif
  11294. native BAD_SetPlayerTime(playerid, hour, minute) = SetPlayerTime;
  11295.  
  11296. /**
  11297. * <fixes>SetPlayerTime</fixes>
  11298. */
  11299.  
  11300. #if FIX_SetPlayerTime
  11301. forward _FIXES_SetTime(playerid, hour, minute);
  11302.  
  11303. public _FIXES_SetTime(playerid, hour, minute)
  11304. {
  11305. return SetPlayerTime(playerid, hour, minute);
  11306. }
  11307.  
  11308. stock FIXES_SetPlayerTime(playerid, hour, minute)
  11309. {
  11310. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  11311. {
  11312. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
  11313. {
  11314. return SetTimerEx(FIXES_gscSetTime, 250, 0, FIXES_gscSpec@iii, playerid, hour, minute);
  11315. }
  11316. return SetPlayerTime(playerid, hour, minute);
  11317. }
  11318. return 0;
  11319. }
  11320.  
  11321. #define _ALS_SetPlayerTime
  11322. #define SetPlayerTime( FIXES_SetPlayerTime(
  11323. #endif
  11324.  
  11325. /**
  11326. * <fixes>SetPlayerColor</fixes>
  11327. */
  11328.  
  11329. #if defined _ALS_SetPlayerColor
  11330. #error _ALS_SetPlayerColor defined
  11331. #endif
  11332. native BAD_SetPlayerColor(playerid, color) = SetPlayerColor;
  11333.  
  11334. /**
  11335. * <fixes>SetPlayerColor</fixes>
  11336. */
  11337.  
  11338. #if FIX_SetPlayerColour
  11339. forward _FIXES_SetColor(playerid, color);
  11340.  
  11341. public _FIXES_SetColor(playerid, color)
  11342. {
  11343. return SetPlayerColor(playerid, color);
  11344. }
  11345.  
  11346. stock FIXES_SetPlayerColor(playerid, color)
  11347. {
  11348. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  11349. {
  11350. if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
  11351. {
  11352. return SetTimerEx(FIXES_gscSetColor, 300, 0, FIXES_gscSpec@ii, playerid, color);
  11353. }
  11354. return SetPlayerColor(playerid, color);
  11355. }
  11356. return 0;
  11357. }
  11358.  
  11359. #define _ALS_SetPlayerColor
  11360. #define SetPlayerColor( FIXES_SetPlayerColor(
  11361. #endif
  11362.  
  11363. /**
  11364. * <fixes>GetPlayerWeaponData</fixes>
  11365. */
  11366.  
  11367. #if defined _ALS_GetPlayerWeaponData
  11368. #error _ALS_GetPlayerWeaponData defined
  11369. #endif
  11370. native BAD_GetPlayerWeaponData(playerid, slot, &weapons, &ammo) = GetPlayerWeaponData;
  11371.  
  11372. /**
  11373. * <fixes>GetPlayerWeaponData</fixes>
  11374. */
  11375.  
  11376. #if FIX_GetPlayerWeaponData
  11377. stock FIXES_GetPlayerWeaponData(playerid, slot, &weapons, &ammo)
  11378. {
  11379. // This reuses the "slot" variable so we don't have to declare a new one
  11380. // and can put all the code in a single statement.
  11381. return
  11382. slot = GetPlayerWeaponData(playerid, slot, weapons, ammo),
  11383. weapons = ammo ? weapons : 0,
  11384. slot;
  11385. }
  11386.  
  11387. #define _ALS_GetPlayerWeaponData
  11388. #define GetPlayerWeaponData( FIXES_GetPlayerWeaponData(
  11389. #endif
  11390.  
  11391. /**
  11392. * <fixes>strcmp</fixes>
  11393. */
  11394.  
  11395. #if defined _ALS_strcmp
  11396. #error _ALS_strcmp defined
  11397. #endif
  11398. native BAD_strcmp(const string1[], const string2[], bool:ignorecase=false, length=cellmax) = strcmp;
  11399.  
  11400. /**
  11401. * <fixes>strcmp</fixes>
  11402. */
  11403.  
  11404. #if FIX_strcmp
  11405. stock FIXES_strcmp(const string1[], const string2[], bool:ignorecase=false, length=cellmax)
  11406. {
  11407. if (length == 0)
  11408. return 0;
  11409. if (string1[0])
  11410. {
  11411. if (string2[0])
  11412. {
  11413. return clamp(strcmp(string1, string2, ignorecase, length), -1, 1);
  11414. }
  11415. else
  11416. {
  11417. // Positive as st1 is greater (strcmp spec).
  11418. return 1;
  11419. }
  11420. }
  11421. else
  11422. {
  11423. if (string2[0])
  11424. {
  11425. // Negative as str2 is greater.
  11426. return -1;
  11427. }
  11428. else
  11429. {
  11430. // The strings are the same (empty).
  11431. return 0;
  11432. }
  11433. }
  11434. }
  11435.  
  11436. #define _ALS_strcmp
  11437. #define strcmp( FIXES_strcmp(
  11438. #endif
  11439.  
  11440. /**
  11441. * <fixes>GetPVarString</fixes>
  11442. */
  11443.  
  11444. #if !FIX_const
  11445. #if defined _ALS_GetPVarString
  11446. #error _ALS_GetPVarString defined
  11447. #endif
  11448. native BAD_GetPVarString(playerid, varname[], string_return[], len) = GetPVarString;
  11449. #endif
  11450.  
  11451. /**
  11452. * <fixes>GetPVarString</fixes>
  11453. */
  11454.  
  11455. #if FIX_GetPVarString
  11456. stock FIXES_GetPVarString(playerid, _FIXES_MAYBE_CONST varname[], string_return[], len)
  11457. {
  11458. len = GetPVarString(playerid, varname, string_return, len);
  11459. static i; i = -1;
  11460. do {} while ((string_return[++i] &= 0xFF) != '\0');
  11461. return len;
  11462. }
  11463.  
  11464. #if defined _ALS_GetPVarString
  11465. #undef GetPVarString
  11466. #else
  11467. #define _ALS_GetPVarString
  11468. #endif
  11469. #define GetPVarString( FIXES_GetPVarString(
  11470. #endif
  11471.  
  11472. /**
  11473. * <fixes>GetSVarString</fixes>
  11474. */
  11475.  
  11476. #if !FIX_const
  11477. #if defined _ALS_GetSVarString
  11478. #error _ALS_GetSVarString defined
  11479. #endif
  11480. native BAD_GetSVarString(varname[], string_return[], len) = GetSVarString;
  11481. #endif
  11482.  
  11483. /**
  11484. * <fixes>GetSVarString</fixes>
  11485. */
  11486.  
  11487. #if FIX_GetSVarString
  11488. stock FIXES_GetSVarString(_FIXES_MAYBE_CONST varname[], string_return[], len)
  11489. {
  11490. len = GetSVarString(varname, string_return, len);
  11491. static i; i = -1;
  11492. do {} while ((string_return[++i] &= 0xFF) != '\0');
  11493. return len;
  11494. }
  11495.  
  11496. #if defined _ALS_GetSVarString
  11497. #undef GetSVarString
  11498. #else
  11499. #define _ALS_GetSVarString
  11500. #endif
  11501. #define GetSVarString( FIXES_GetSVarString(
  11502. #endif
  11503.  
  11504. /**
  11505. * <fixes>toupper</fixes>
  11506. */
  11507.  
  11508. #if defined _ALS_toupper
  11509. #error _ALS_toupper defined
  11510. #endif
  11511. native BAD_toupper(c) = toupper;
  11512.  
  11513. /**
  11514. * <fixes>toupper</fixes>
  11515. */
  11516.  
  11517. #if FIX_toupper
  11518. stock FIXES_toupper(c)
  11519. {
  11520. switch (c)
  11521. {
  11522. case 'a'..'z', 224..255:
  11523. {
  11524. return c - 32;
  11525. }
  11526. case 168:
  11527. {
  11528. return c - 16;
  11529. }
  11530. }
  11531. return c;
  11532. }
  11533.  
  11534. #define _ALS_toupper
  11535. #define toupper( FIXES_toupper(
  11536. #endif
  11537.  
  11538. /**
  11539. * <fixes>tolower</fixes>
  11540. */
  11541.  
  11542. #if defined _ALS_tolower
  11543. #error _ALS_tolower defined
  11544. #endif
  11545. native BAD_tolower(c) = tolower;
  11546.  
  11547. /**
  11548. * <fixes>tolower</fixes>
  11549. */
  11550.  
  11551. #if FIX_tolower
  11552. stock FIXES_tolower(c)
  11553. {
  11554. switch (c)
  11555. {
  11556. case 'A'..'Z', 192..223:
  11557. {
  11558. return c + 32;
  11559. }
  11560. case 184:
  11561. {
  11562. return c + 16;
  11563. }
  11564. }
  11565. return c;
  11566. }
  11567.  
  11568. #define _ALS_tolower
  11569. #define tolower( FIXES_tolower(
  11570. #endif
  11571.  
  11572. /**
  11573. * <fixes>ispacked</fixes>
  11574. */
  11575.  
  11576. #if defined _ALS_ispacked
  11577. #error _ALS_ispacked defined
  11578. #endif
  11579. native bool:BAD_ispacked(const string[]) = ispacked;
  11580.  
  11581. /**
  11582. * <fixes>ispacked</fixes>
  11583. */
  11584.  
  11585. #if FIX_ispacked
  11586. stock bool:FIXES_ispacked(const string[])
  11587. {
  11588. return (string[0] & ~0xFF) != 0;
  11589. }
  11590.  
  11591. #define _ALS_ispacked
  11592. #define ispacked( FIXES_ispacked(
  11593. #endif
  11594.  
  11595. /**
  11596. * <fixes>GetPlayerPoolSize</fixes>
  11597. */
  11598.  
  11599. #if defined _ALS_GetPlayerPoolSize
  11600. #error _ALS_GetPlayerPoolSize defined
  11601. #endif
  11602. native BAD_GetPlayerPoolSize() = GetPlayerPoolSize;
  11603.  
  11604. /**
  11605. * <fixes>GetPlayerPoolSize</fixes>
  11606. */
  11607.  
  11608. #if FIX_GetPlayerPoolSize
  11609. stock FIXES_GetPlayerPoolSize()
  11610. {
  11611. new
  11612. size = GetPlayerPoolSize();
  11613. return size == 0 && !IsPlayerConnected(0) ? -1 : size;
  11614. }
  11615.  
  11616. #define _ALS_GetPlayerPoolSize
  11617. #define GetPlayerPoolSize( FIXES_GetPlayerPoolSize(
  11618. #endif
  11619.  
  11620. /**
  11621. * <fixes>SetPlayerPos</fixes>
  11622. * <fixes>* NOTE:</fixes>
  11623. * <fixes>"PARACHUTE", "FALL_skyDive", 958</fixes>
  11624. * <fixes>"PARACHUTE", "FALL_SkyDive_Accel", 959</fixes>
  11625. * <fixes>"PARACHUTE", "FALL_skyDive_DIE", 960</fixes>
  11626. * <fixes>"PARACHUTE", "FALL_SkyDive_L", 961</fixes>
  11627. * <fixes>"PARACHUTE", "FALL_SkyDive_R", 962</fixes>
  11628. * <fixes>"ped", "FALL_skyDive", 1134</fixes>
  11629. */
  11630.  
  11631. #if defined _ALS_SetPlayerPos
  11632. #error _ALS_SetPlayerPos defined
  11633. #endif
  11634. native BAD_SetPlayerPos(playerid, Float:x, Float:y, Float:z) = SetPlayerPos;
  11635.  
  11636. /**
  11637. * <fixes>SetPlayerPos</fixes>
  11638. * <fixes>* NOTE:</fixes>
  11639. * <fixes>"PARACHUTE", "FALL_skyDive", 958</fixes>
  11640. * <fixes>"PARACHUTE", "FALL_SkyDive_Accel", 959</fixes>
  11641. * <fixes>"PARACHUTE", "FALL_skyDive_DIE", 960</fixes>
  11642. * <fixes>"PARACHUTE", "FALL_SkyDive_L", 961</fixes>
  11643. * <fixes>"PARACHUTE", "FALL_SkyDive_R", 962</fixes>
  11644. * <fixes>"ped", "FALL_skyDive", 1134</fixes>
  11645. */
  11646.  
  11647. #if FIX_SetPlayerPos
  11648. stock FIXES_SetPlayerPos(playerid, Float:x, Float:y, Float:z)
  11649. {
  11650. new
  11651. ret = SetPlayerPos(playerid, x, y, z);
  11652. if (ret)
  11653. {
  11654. _FIXES_RemoveFlyingParachute(playerid);
  11655. }
  11656. return ret;
  11657. }
  11658.  
  11659. #define _ALS_SetPlayerPos
  11660. #define SetPlayerPos( FIXES_SetPlayerPos(
  11661. #endif
  11662.  
  11663. /**
  11664. * <fixes>SetPlayerPos</fixes>
  11665. */
  11666.  
  11667. #if defined _ALS_SetPlayerPosFindZ
  11668. #error _ALS_SetPlayerPosFindZ defined
  11669. #endif
  11670. native BAD_SetPlayerPosFindZ(playerid, Float:x, Float:y, Float:z) = SetPlayerPosFindZ;
  11671.  
  11672. /**
  11673. * <fixes>SetPlayerPos</fixes>
  11674. */
  11675.  
  11676. #if FIX_SetPlayerPos
  11677. stock FIXES_SetPlayerPosFindZ(playerid, Float:x, Float:y, Float:z)
  11678. {
  11679. new
  11680. ret = SetPlayerPosFindZ(playerid, x, y, z);
  11681. if (ret)
  11682. {
  11683. _FIXES_RemoveFlyingParachute(playerid);
  11684. }
  11685. return ret;
  11686. }
  11687.  
  11688. #define _ALS_SetPlayerPosFindZ
  11689. #define SetPlayerPosFindZ( FIXES_SetPlayerPosFindZ(
  11690. #endif
  11691.  
  11692. /**
  11693. * <fixes>SetPlayerPos</fixes>
  11694. */
  11695.  
  11696. #if FIX_SetPlayerPos
  11697. static stock _FIXES_RemoveFlyingParachute(playerid)
  11698. {
  11699. #if FIX_OnPlayerDeath
  11700. switch (FIXES_gsLastAnimation[playerid])
  11701. #else
  11702. switch (GetPlayerAnimationIndex(playerid))
  11703. #endif
  11704. {
  11705. case 958, 959, 960, 961, 962, 1134:
  11706. {
  11707. new
  11708. slot,
  11709. weapons[_FIXES_WEAPON_SLOTS][2];
  11710. for (slot = 0; slot < sizeof(weapons); slot++)
  11711. {
  11712. GetPlayerWeaponData(playerid, slot, weapons[slot][0], weapons[slot][1]);
  11713. }
  11714. weapons[11][0] = 0;
  11715. ResetPlayerWeapons(playerid);
  11716. for (slot = 0; slot < sizeof(weapons); slot++)
  11717. {
  11718. GivePlayerWeapon(playerid, weapons[slot][0], weapons[slot][1]);
  11719. }
  11720. }
  11721. }
  11722. }
  11723. #endif
  11724. /**
  11725. * <fixes>GetPlayerAmmo</fixes>
  11726. */
  11727.  
  11728. #if defined _ALS_SetPlayerAmmo
  11729. #error _ALS_SetPlayerAmmo defined
  11730. #endif
  11731. native BAD_SetPlayerAmmo(playerid, weaponid, ammo) = SetPlayerAmmo;
  11732. /**
  11733. * <fixes>GetPlayerAmmo</fixes>
  11734. */
  11735.  
  11736. #if FIX_GetPlayerAmmo
  11737. stock FIXES_SetPlayerAmmo(playerid, weaponid, ammo)
  11738. {
  11739. if (ammo > 32767)
  11740. {
  11741. ammo = 32767;
  11742. }
  11743. else if (ammo < 0)
  11744. {
  11745. ammo = 0;
  11746. }
  11747. return SetPlayerAmmo(playerid, weaponid, ammo);
  11748. }
  11749.  
  11750. #define _ALS_SetPlayerAmmo
  11751. #define SetPlayerAmmo( FIXES_SetPlayerAmmo(
  11752. #endif
  11753.  
  11754. /*
  11755. * _FIXES_Bernstein()
  11756. *
  11757. * Convert a string to a number (hash it).
  11758. *
  11759. * FIXES:
  11760. * ChangeVehicleColor
  11761. * GetServerVarAsString
  11762. * GetServerVarAsBool
  11763. * GetServerVarAsInt
  11764. */
  11765.  
  11766. static stock _FIXES_Bernstein(const name[])
  11767. {
  11768. new
  11769. i = -1,
  11770. ch,
  11771. hash = -1;
  11772. // In carcols.dat the vehicle names end at ",". That makes this code
  11773. // very specific to a few use-cases. It also works for hashing server vars,
  11774. // since they don't have commas. Now case-insensitive.
  11775. while ((ch = name[++i]) >= '0')
  11776. {
  11777. hash = (hash * 33) + (ch | 0x20);
  11778. }
  11779. return hash;
  11780. }
  11781.  
  11782. /**
  11783. * <fixes>GetPlayerWeather</fixes>
  11784. */
  11785.  
  11786. #if defined _ALS_GetPlayerWeather
  11787. #error _ALS_GetPlayerWeather defined
  11788. #endif
  11789.  
  11790. #if FIX_GetPlayerWeather
  11791. stock FIXES_GetPlayerWeather(playerid)
  11792. {
  11793. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS) && !(FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_CLOCK_ENABLED))
  11794. {
  11795. return FIXES_GET(PlayerWeather, playerid);
  11796. }
  11797. return -1;
  11798. }
  11799.  
  11800. #define _ALS_GetPlayerWeather
  11801. #define GetPlayerWeather( FIXES_GetPlayerWeather(
  11802. #endif
  11803.  
  11804. /**
  11805. * <fixes>GetPlayerWeather</fixes>
  11806. */
  11807.  
  11808. #if defined _ALS_SetPlayerWeather
  11809. #error _ALS_SetPlayerWeather defined
  11810. #endif
  11811. native BAD_SetPlayerWeather(playerid, weather) = SetPlayerWeather;
  11812.  
  11813. /**
  11814. * <fixes>GetPlayerWeather</fixes>
  11815. */
  11816.  
  11817. #if FIX_GetPlayerWeather
  11818. stock FIXES_SetPlayerWeather(playerid, weather)
  11819. {
  11820. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  11821. {
  11822. FIXES_SET(PlayerWeather, playerid, weather);
  11823. return SetPlayerWeather(playerid, weather);
  11824. }
  11825. return 0;
  11826. }
  11827.  
  11828. #if defined _ALS_SetPlayerWeather
  11829. #undef SetPlayerWeather
  11830. #else
  11831. #define _ALS_SetPlayerWeather
  11832. #endif
  11833. #define SetPlayerWeather( FIXES_SetPlayerWeather(
  11834. #endif
  11835.  
  11836. /**
  11837. * <fixes>GetPlayerWeather</fixes>
  11838. */
  11839.  
  11840. #if defined _ALS_TogglePlayerClock
  11841. #error _ALS_TogglePlayerClock defined
  11842. #endif
  11843. native BAD_TogglePlayerClock(playerid, toggle) = TogglePlayerClock;
  11844.  
  11845. /**
  11846. * <fixes>GetPlayerWeather</fixes>
  11847. */
  11848.  
  11849. #if FIX_GetPlayerWeather
  11850. #if FIXES_Single
  11851. stock FIXES_TogglePlayerClock(playerid, toggle)
  11852. {
  11853. if (TogglePlayerClock(playerid, toggle))
  11854. {
  11855. if (toggle)
  11856. {
  11857. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_CLOCK_ENABLED;
  11858. }
  11859. else
  11860. {
  11861. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_CLOCK_ENABLED;
  11862. }
  11863. return 1;
  11864. }
  11865. return 0;
  11866. }
  11867. #else
  11868. forward _FIXES_TogglePlayerClock(playerid, toggle);
  11869.  
  11870. stock FIXES_TogglePlayerClock(playerid, toggle)
  11871. {
  11872. if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
  11873. {
  11874. return
  11875. CallRemoteFunction(FIXES_gscTogglePlayerControl, FIXES_gscSpec@ii, playerid, toggle),
  11876. getproperty(5, FIXES_gscReturnProperty);
  11877. }
  11878. return 0;
  11879. }
  11880.  
  11881. public _FIXES_TogglePlayerClock(playerid, toggle)
  11882. {
  11883. _FIXES_IS_IN_CHARGE()
  11884. {
  11885. if (toggle)
  11886. {
  11887. FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_CLOCK_ENABLED;
  11888. }
  11889. else
  11890. {
  11891. FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_CLOCK_ENABLED;
  11892. }
  11893. setproperty(5, FIXES_gscReturnProperty, TogglePlayerClock(playerid, toggle));
  11894. }
  11895. }
  11896. #endif
  11897.  
  11898. #if defined _ALS_TogglePlayerClock
  11899. #undef TogglePlayerClock
  11900. #else
  11901. #define _ALS_TogglePlayerClock
  11902. #endif
  11903. #define TogglePlayerClock( FIXES_TogglePlayerClock(
  11904. #endif
  11905.  
  11906. /**
  11907. * <fixes>GetWeather</fixes>
  11908. */
  11909.  
  11910. #if defined _ALS_GetWeather
  11911. #error _ALS_GetWeather defined
  11912. #endif
  11913.  
  11914. #if FIX_GetWeather
  11915. #if FIXES_Single
  11916. stock FIXES_GetWeather()
  11917. {
  11918. return FIXES_gsServerWeather;
  11919. }
  11920. #else
  11921. forward _FIXES_GetWeather();
  11922.  
  11923. stock FIXES_GetWeather()
  11924. {
  11925. return
  11926. CallRemoteFunction(FIXES_gscGetWeather, FIXES_gscSpec@),
  11927. getproperty(5, FIXES_gscReturnProperty);
  11928. }
  11929.  
  11930. public _FIXES_GetWeather()
  11931. {
  11932. _FIXES_IS_IN_CHARGE()
  11933. {
  11934. setproperty(5, FIXES_gscReturnProperty, FIXES_gsServerWeather);
  11935. }
  11936. }
  11937. #endif
  11938.  
  11939. #define _ALS_GetWeather
  11940. #define GetWeather( FIXES_GetWeather(
  11941. #endif
  11942.  
  11943. /**
  11944. * <fixes>GetPlayerWeather</fixes>
  11945. */
  11946.  
  11947. #if defined _ALS_SetWeather
  11948. #error _ALS_SetWeather defined
  11949. #endif
  11950. native BAD_SetWeather(weather) = SetWeather;
  11951.  
  11952. /**
  11953. * <fixes>GetPlayerWeather</fixes>
  11954. */
  11955.  
  11956. #if FIX_GetWeather
  11957. stock FIXES_SetWeather(weather)
  11958. {
  11959. FIXES_gsServerWeather = weather;
  11960. #if FIX_GetPlayerWeather
  11961. _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
  11962. {
  11963. FIXES_SET(PlayerWeather, playerid, weather);
  11964. }
  11965. #endif
  11966. return SetWeather(weather);
  11967. }
  11968.  
  11969. #if defined _ALS_SetWeather
  11970. #undef SetWeather
  11971. #else
  11972. #define _ALS_SetWeather
  11973. #endif
  11974. #define SetWeather( FIXES_SetWeather(
  11975. #endif
  11976.  
  11977. /**
  11978. * <fixes>GetWorldTime</fixes>
  11979. */
  11980.  
  11981. #if defined _ALS_SetWorldTime
  11982. #error _ALS_SetWorldTime defined
  11983. #endif
  11984. native BAD_SetWorldTime(hour) = SetWorldTime;
  11985.  
  11986. /**
  11987. * <fixes>GetWorldTime</fixes>
  11988. */
  11989.  
  11990. #if FIX_GetWorldTime
  11991. stock FIXES_SetWorldTime(hour)
  11992. {
  11993. FIXES_gsWorldTime = hour;
  11994. return SetWorldTime(hour);
  11995. }
  11996.  
  11997. #if defined _ALS_SetWorldTime
  11998. #undef SetWorldTime
  11999. #else
  12000. #define _ALS_SetWorldTime
  12001. #endif
  12002. #define SetWorldTime( FIXES_SetWorldTime(
  12003. #endif
  12004.  
  12005. /**
  12006. * <fixes>GetWorldTime</fixes>
  12007. */
  12008.  
  12009. #if defined _ALS_GetWorldTime
  12010. #error _ALS_GetWorldTime defined
  12011. #endif
  12012.  
  12013. #if FIX_GetWorldTime
  12014. stock FIXES_GetWorldTime()
  12015. {
  12016. return FIXES_gsWorldTime;
  12017. }
  12018.  
  12019. #define _ALS_GetWorldTime
  12020. #define GetWorldTime( FIXES_GetWorldTime(
  12021. #endif
  12022.  
  12023. /**
  12024. * <fixes>GetServerVarAsString</fixes>
  12025. */
  12026. #if defined _ALS_GetServerVarAsString
  12027. #error _ALS_GetServerVarAsString defined
  12028. #endif
  12029. native BAD_GetServerVarAsString(const varname[], buffer[], len) = GetServerVarAsString;
  12030.  
  12031. /**
  12032. * <fixes>GetServerVarAsString</fixes>
  12033. */
  12034. #if FIX_GetServerVarAsString || FIX_GetServerVarAsFloat || FIX_GetServerVarAsInt || FIX_GetServerVarAsBool
  12035. stock bool:FIXES_GetServerVarAsString(const varname[], buffer[], len = sizeof (buffer))
  12036. {
  12037. buffer[0] = '\0';
  12038. if (!FIXES_gsServerCFG) switch (_FIXES_Bernstein(varname))
  12039. {
  12040. case 0x191078CE, // gamemode0
  12041. 0x191078CF, // gamemode1
  12042. 0x191078D0, // gamemode2
  12043. 0x191078D1, // gamemode3
  12044. 0x191078D2, // gamemode4
  12045. 0x191078D3, // gamemode5
  12046. 0x191078D4, // gamemode6
  12047. 0x191078D5, // gamemode7
  12048. 0x191078D6, // gamemode8
  12049. 0x191078D7, // gamemode9
  12050. 0x3B1F92DF, // gamemode10
  12051. 0x3B1F92E0, // gamemode11
  12052. 0x3B1F92E1, // gamemode12
  12053. 0x3B1F92E2, // gamemode13
  12054. 0x3B1F92E3, // gamemode14
  12055. 0x3B1F92E4, // gamemode15
  12056. 0xDD087136, // worldtime
  12057. 0x82FEFA05, // version
  12058. 0x77143DA2, // lagcomp
  12059. 0xAB471B39, // logtimeformat
  12060. 0xBBB6B44D, // nosign
  12061. 0xC5A55EC1, // plugins
  12062. 0x3E60E28D, // filterscripts
  12063. 0x81757563, // gamemodetext
  12064. 0xCEC61D0F, // weather
  12065. 0x1D768025, // gravity
  12066. 0x715D9343, // rcon_password
  12067. 0xCFF70EF0, // weburl
  12068. 0xC4B7237E, // mapname
  12069. 0x6A3B86C3, // language
  12070. 0xFB74B99E, // hostname
  12071. 0x27C72132, // password
  12072. 0x002571DC: // bind
  12073. return bool:GetServerVarAsString(varname, buffer, len);
  12074. default:
  12075. return false;
  12076. }
  12077. fseek(FIXES_gsServerCFG, 0, seek_start);
  12078. // Read the file line-by-line. Take care of very long lines.
  12079. new
  12080. cmpLen = strlen(varname),
  12081. readOffset,
  12082. line[128],
  12083. lineLen,
  12084. lineState = 0;
  12085. while ((lineLen = fread(FIXES_gsServerCFG, line)))
  12086. {
  12087. // Start of line, do a normal check.
  12088. if (lineState == 0)
  12089. {
  12090. // There is no explicit comments (#) check, since a commented
  12091. // line simply won't match the parameter varname.
  12092. if (lineLen < cmpLen || strcmp(line, varname, true, cmpLen) || line[cmpLen] > ' ')
  12093. lineState = 2; // The varname didn't match exactly.
  12094. else
  12095. {
  12096. readOffset = cmpLen;
  12097. // Skip whitespace.
  12098. while ('\0' < line[readOffset] <= ' ')
  12099. ++readOffset;
  12100. lineState = 1;
  12101. }
  12102. }
  12103. else if (lineState == 1)
  12104. readOffset = 0;
  12105. if (lineState == 1)
  12106. {
  12107. while (lineLen && (line[lineLen - 1] == '\r' || line[lineLen - 1] == '\n'))
  12108. {
  12109. line[--lineLen] = '\0';
  12110. lineState = 3;
  12111. }
  12112. // The read offset start is found be skipping all whitespace.
  12113. // Then the new lines are removed. If there was only
  12114. // whitespace, the read offset will actually be beyond the new
  12115. // end of the string, but we know that it will also point to a
  12116. // NULL, so that's fine.
  12117. strcat(buffer, line[readOffset], len);
  12118. if (lineState == 3)
  12119. return true;
  12120. }
  12121. else if (line[lineLen - 1] == '\r' || line[lineLen - 1] == '\n')
  12122. lineState = 0; // Ignored line ended with a line feed.
  12123. }
  12124. return true;
  12125. }
  12126. #endif
  12127.  
  12128. #if FIX_GetServerVarAsString
  12129. #define _ALS_GetServerVarAsString
  12130. #define GetServerVarAsString( FIXES_GetServerVarAsString(
  12131. #endif
  12132.  
  12133. /**
  12134. * <fixes>GetServerVarAsInt</fixes>
  12135. */
  12136. #if defined _ALS_GetServerVarAsInt
  12137. #error _ALS_GetServerVarAsInt defined
  12138. #endif
  12139. native BAD_GetServerVarAsInt(const varname[]) = GetServerVarAsInt;
  12140.  
  12141. /**
  12142. * <fixes>GetServerVarAsInt</fixes>
  12143. */
  12144. #if FIX_GetServerVarAsInt
  12145. stock FIXES_GetServerVarAsInt(const varname[])
  12146. {
  12147. if (!FIXES_gsServerCFG) switch (_FIXES_Bernstein(varname))
  12148. {
  12149. case 0x2CAD71B6, // cookielogging
  12150. 0x779863BF, // concookies
  12151. 0x05E98D75, // db_log_queries
  12152. 0x002E1E91, // db_logging
  12153. 0xD24E879F, // conseedtime
  12154. 0x65E02253, // lagcompmode
  12155. 0xBA15F385, // minconnectiontime
  12156. 0xB4A6E9E0, // playertimeout
  12157. 0xE0BF17AC, // ackslimit
  12158. 0xAF759823, // messageslimit
  12159. 0xD6D5A0EB, // messageholelimit
  12160. 0xA32CD2AF, // chatlogging
  12161. 0x3C9BE967, // weapon_rate
  12162. 0xBD571922, // incar_rate
  12163. 0x9EC6E5F3, // onfoot_rate
  12164. 0xBD480020, // maxnpc
  12165. 0x3E1BBFD6, // sleep
  12166. 0x4D50EBEB, // stream_rate
  12167. 0xBB2D5AE6: // maxplayers
  12168. return GetServerVarAsInt(varname);
  12169. default:
  12170. return 0;
  12171. }
  12172. new
  12173. buffer[16];
  12174. if (FIXES_GetServerVarAsString(varname, buffer, sizeof (buffer)))
  12175. return strval(buffer);
  12176. return 0;
  12177. }
  12178.  
  12179. #define _ALS_GetServerVarAsInt
  12180. #define GetServerVarAsInt( FIXES_GetServerVarAsInt(
  12181. #endif
  12182.  
  12183. /**
  12184. * <fixes>GetServerVarAsBool</fixes>
  12185. */
  12186. #if defined _ALS_GetServerVarAsBool
  12187. #error _ALS_GetServerVarAsBool defined
  12188. #endif
  12189. native BAD_GetServerVarAsBool(const varname[]) = GetServerVarAsBool;
  12190.  
  12191. /**
  12192. * <fixes>GetServerVarAsBool</fixes>
  12193. */
  12194. #if FIX_GetServerVarAsBool
  12195. stock bool:FIXES_GetServerVarAsBool(const varname[])
  12196. {
  12197. if (!FIXES_gsServerCFG) switch (_FIXES_Bernstein(varname))
  12198. {
  12199. case 0x4D532D94, // announce
  12200. 0xC99B1697, // lanmode
  12201. 0xAEF7F19F, // query
  12202. 0xB86708E6, // rcon
  12203. 0x0608CD58, // logqueries
  12204. 0xD1E9B9B6, // timestamp
  12205. 0x0C5ACC88: // myriad
  12206. return bool:GetServerVarAsBool(varname);
  12207. default:
  12208. return false;
  12209. }
  12210. new
  12211. buffer[16];
  12212. if (FIXES_GetServerVarAsString(varname, buffer, sizeof (buffer)))
  12213. return strval(buffer) != 0;
  12214. return false;
  12215. }
  12216.  
  12217. #define _ALS_GetServerVarAsBool
  12218. #define GetServerVarAsBool( FIXES_GetServerVarAsBool(
  12219. #endif
  12220.  
  12221. /**
  12222. * <fixes>GetServerVarAsFloat</fixes>
  12223. */
  12224. #if defined _ALS_GetServerVarAsFloat
  12225. #error _ALS_GetServerVarAsFloat defined
  12226. #endif
  12227. #if defined GetServerVarAsFloat
  12228. native BAD_GetServerVarAsFloat(const varname[]) = GetServerVarAsFloat;
  12229. #endif
  12230.  
  12231. /**
  12232. * <fixes>GetServerVarAsFloat</fixes>
  12233. */
  12234. #if FIX_GetServerVarAsFloat
  12235. stock Float:FIXES_GetServerVarAsFloat(const varname[])
  12236. {
  12237. if (!FIXES_gsServerCFG) // 0x03A253F3 = stream_distance.
  12238. return 0.0;
  12239. new
  12240. buffer[16];
  12241. if (FIXES_GetServerVarAsString(varname, buffer, sizeof (buffer)))
  12242. return floatstr(buffer);
  12243. return 0.0;
  12244. }
  12245.  
  12246. #define _ALS_GetServerVarAsFloat
  12247. #define GetServerVarAsFloat( FIXES_GetServerVarAsFloat(
  12248. #endif
  12249.  
  12250. /**
  12251. * <remarks>
  12252. * Modify a constant reference.
  12253. * </remarks>
  12254. */
  12255.  
  12256. static stock _FIXES_ConstMod(const &target, chr)
  12257. {
  12258. #pragma unused target, chr
  12259. #emit LOAD.S.pri chr
  12260. #emit SREF.S.pri target
  12261. }
  12262.  
  12263. /**
  12264. * <remarks>
  12265. * Removes whitespace from the right side of a string. Modifies <c>const</c>
  12266. * strings to make it appear that nothing changes, so needs some tricky playing
  12267. * to make it work.
  12268. * </remarks>
  12269. */
  12270.  
  12271. static stock _FIXES_rtrim(const string[])
  12272. {
  12273. new
  12274. length = strlen(string);
  12275. while (length--)
  12276. {
  12277. if (string[length] > ' ')
  12278. break;
  12279. }
  12280. FIXES_gsTrimPos = length + 1,
  12281. FIXES_gsTrimChr = string[FIXES_gsTrimPos],
  12282. _FIXES_ConstMod(string[FIXES_gsTrimPos], '\0');
  12283. }
  12284.  
  12285. /**
  12286. * <remarks>
  12287. * Puts whitespace back on the right side of a string. Makes certain functions
  12288. * appear <c>const</c> because the string ends up the same as it started.
  12289. * </remarks>
  12290. */
  12291.  
  12292. static stock _FIXES_untrim(const string[])
  12293. {
  12294. _FIXES_ConstMod(string[FIXES_gsTrimPos], FIXES_gsTrimChr);
  12295. }
  12296.  
  12297. /**
  12298. * <remarks>
  12299. * Add something to an internal linked list.
  12300. * </remarks>
  12301. */
  12302.  
  12303. static stock _FIXES_AddInternal(array[], value, size)
  12304. {
  12305. if (array[value] <= value)
  12306. {
  12307. new
  12308. last = size,
  12309. next = array[last];
  12310. while (next < value)
  12311. {
  12312. last = next,
  12313. next = array[last];
  12314. }
  12315. array[next - 1] = value + 1,
  12316. array[(value - 1) % (size + 1)] = (last + 1) % (size + 1),
  12317. array[last] = value,
  12318. array[value] = next;
  12319. }
  12320. }
  12321.  
  12322. /**
  12323. * <remarks>
  12324. * Remove something from an internal linked list.
  12325. * </remarks>
  12326. */
  12327.  
  12328. static stock _FIXES_RemoveInternal(array[], value, size)
  12329. {
  12330. if (array[value] > value)
  12331. {
  12332. static
  12333. last;
  12334. // Adjustment for easier "mod"ing.
  12335. ++size,
  12336. last = (array[(value - 1) % size] - 1) % size,
  12337. // Store the reverse value here as well as in the previous slot.
  12338. array[value] =
  12339. // Copy the next value to the last value.
  12340. array[(array[last] = array[value]) - 1] =
  12341. // Set the reverse iterator value.
  12342. (last + 1) % size;
  12343. }
  12344. }
  12345.  
  12346. #undef _FIXES_CEILDIV
  12347. #undef _FIXES_INFINITY
  12348. #undef _FIXES_N_INFINITY
  12349. #undef _FIXES_MIN_WORLDBOUNDS
  12350. #undef _FIXES_MAX_WORLDBOUNDS
  12351. #undef _FIXES_ATTACHMENTS
  12352. #undef _FIXES_FOREACH
  12353. #undef _FIXES_IS_UNSET
  12354. #undef _FIXES_IS_IN_CHARGE
  12355. #undef _FIXES_IN_RANGE
  12356. #undef _FIXES_NO_RANGE
  12357. #undef _FIXES_FORWARD
  12358. #undef _FIXES_IS_PLAYER_CONNECTED
  12359. #undef _FIXES_ENUM
  12360. #undef FIXES_PRINTF
  12361.  
  12362. #endinput
  12363.  
  12364. // Fix documentation template.
  12365.  
  12366. /**
  12367. * <fix name="" disabled="true" fixed="">
  12368. * <problem>
  12369. * problem
  12370. * </problem>
  12371. * <solution>
  12372. * solution
  12373. * </solution>
  12374. * <see></see>
  12375. * <author href=""></author>
  12376. * <post href="" />
  12377. * </fix>
  12378. */
  12379.  
  12380. // Fix inclusion template.
  12381.  
  12382. #if !defined FIX_NameOfFixHere
  12383. #define FIX_NameOfFixHere (1)
  12384. #elseif _FIXES_IS_UNSET(FIX_NameOfFixHere)
  12385. #undef FIX_NameOfFixHere
  12386. #define FIX_NameOfFixHere (2)
  12387. #endif
  12388.  
  12389. // Fix function template.
  12390.  
  12391. /**
  12392. * <remarks>Information about fix here</remarks>
  12393. * <fixes>NameOfFixHere</fixes>
  12394. */
  12395.  
  12396. #if defined _ALS_NameOfFixHere
  12397. #error _ALS_NameOfFixHere defined
  12398. #endif
  12399. native BAD_NameOfFixHere(params) = NameOfFixHere;
  12400.  
  12401. /**
  12402. * <remarks>Information about fix here</remarks>
  12403. * <fixes>NameOfFixHere</fixes>
  12404. */
  12405.  
  12406. #if FIX_NameOfFixHere
  12407. stock FIXES_NameOfFixHere(params)
  12408. {
  12409. return 0;
  12410. }
  12411.  
  12412. #define _ALS_NameOfFixHere
  12413. #define NameOfFixHere( FIXES_NameOfFixHere(
  12414. #endif
Add Comment
Please, Sign In to add comment