Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * ===============
- * INTRODUCTION:
- * ===============
- *
- * fixes.inc - Community patch for buggy SA:MP functions.
- *
- * ================
- * LIST OF FIXES:
- * ================
- *
- * FIX: GetPlayerColor
- * PROBLEM: Returns "0" if "SetPlayerColor" has never been called.
- * SOLUTION: Call "SetPlayerColor" in "OnPlayerConnect".
- * SEE: "OnPlayerConnect".
- * AUTHOR: KoczkaHUN
- * POST: http://forum.sa-mp.com/showpost.php?p=1486048
- *
- * FIX: FILTERSCRIPT
- * PROBLEM: Despite the fact that is in every new script, many people don't
- * define "FILTERSCRIPT" where appropriate.
- * SOLUTION: Provide an "IS_FILTERSCRIPT" variable (note the naming to match
- * the original macro).
- * AUTHOR: Y_Less
- * SEE: "OnFilterScriptInit" and "OnGameModeInit".
- *
- * FIX: SpawnPlayer
- * PROBLEM: Kills the player if they are in a vehicle.
- * SOLUTION: Remove the from the vehicle.
- * SEE: "FIXES_SpawnPlayer".
- * AUTHOR: Y_Less
- *
- * FIX: SetPlayerName
- * PROBLEM: Using "SetPlayerName" when the new name only differs from the old
- * name in case does not alter the name at all.
- * SOLUTION: Change their name twice - once to "_FIXES TEMP NAME" and then to
- * the actual required name.
- * SEE: "OnPlayerConnect" and "FIXES_SetPlayerName".
- * AUTHOR: Y_Less/Slice
- *
- * FIX: GetPlayerSkin
- * PROBLEM: Returns the new skin after "SetSpawnInfo" is called but before the
- * player actually respawns to get the new skin.
- * SOLUTION: Record the skin in "OnPlayerSpawn" and always return that one.
- * SEE: "OnPlayerSpawn", "FIXES_GetPlayerSkin" and "FIXES_SetPlayerSkin".
- * AUTHOR: Y_Less
- *
- * FIX: GetWeaponName
- * PROBLEM: Returns nothing for 18, 44, and 45.
- * SOLUTION: Return the correct names ("Molotov Cocktail", "Thermal Goggles",
- * and "Night vision Goggles").
- * SEE: "FIXES_GetWeaponName".
- * AUTHOR: Y_Less
- *
- * FIX: SetPlayerWorldBounds
- * PROBLEM: Aiming can bypass the edge.
- * SOLUTION: Check for the player leaving the area and reset them to their last
- * good position if they leave the area (aiming or not).
- * SEE: "OnPlayerUpdate" and "FIXES_SetPlayerWorldBounds".
- * AUTHOR: Y_Less
- *
- * FIX: TogglePlayerControllable
- * PROBLEM: Other players see you moving on the spot.
- * SOLUTION: Return 0 in OnPlayerUpdate.
- * SEE: "FIXES_TogglePlayerControllable" and "OnPlayerUpdate".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=876854
- *
- * FIX: HydraSniper
- * PROBLEM: Entring military aircraft with a sniper rifle messes up vies.
- * SOLUTION: Set their armed weapon to fists.
- * SEE: "OnPlayerStateChange", "FIXES_GivePlayerWeapon",
- * "FIXES_SetPlayerArmedWeapon".
- * AUTHOR: funky1234
- * POST: http://forum.sa-mp.com/showpost.php?p=965644
- *
- * FIX: IsPlayerInCheckpoint
- * PROBLEM: Function returns an undefined value if it is called before any
- * other checkpoint functions are called to initialise the value.
- * SOLUTION: Call "DisablePlayerCheckpoint" when they connect.
- * SEE: "OnPlayerConnect".
- * AUTHOR: Y_Less
- *
- * FIX: IsPlayerInRaceCheckpoint
- * PROBLEM: Function returns an undefined value if it is called before any
- * other race checkpoint functions are called to initialise the value.
- * SOLUTION: Call "DisablePlayerRaceCheckpoint" when they connect.
- * SEE: "OnPlayerConnect".
- * AUTHOR: Y_Less
- *
- * FIX: GetPlayerWeapon
- * PROBLEM: Returns the old value after using "SetPlayerArmedWeapon" when they
- * are in a vehicle.
- * SOLUTION: If "SetPlayerArmedWeapon" is called in a vehicle, store the new
- * value and return that instead.
- * SEE: "OnPlayerStateChange", "FIXES_SetPlayerArmedWeapon", and
- * "FIXES_GetPlayerWeapon".
- * AUTHOR: Y_Less
- *
- * FIX: PutPlayerInVehicle
- * PROBLEM: If this is used on a passenger the driver of their old vehicle
- * doesn't see them in their new vehicle.
- * SOLUTION: Remove them from the vehicle first.
- * SEE: "OnPlayerStateChange" and "FIXES_PutPlayerInVehicle".
- * AUTHOR: leong124/Y_Less
- * POST: http://forum.sa-mp.com/showpost.php?p=1265965
- *
- * FIX: KEY_AIM
- * PROBLEM: "KEY_AIM" isn't defined by default.
- * SOLUTION: Define it.
- * SEE: N/A.
- * AUTHOR: Y_Less
- *
- * FIX: SetPlayerCheckpoint
- * PROBLEM: If a checkpoint is already set it will use the size of that
- * checkpoint instead of the new one.
- * SOLUTION: Call "DisablePlayerCheckpoint" before setting the checkpoint.
- * SEE: "FIXES_SetPlayerCheckpoint".
- * AUTHOR: KoczkaHUN
- * POST: http://forum.sa-mp.com/showpost.php?p=1482401
- *
- * FIX: SetPlayerRaceCheckpoint
- * PROBLEM: If a checkpoint is already set it will use the size of that
- * checkpoint instead of the new one.
- * SOLUTION: Call "DisablePlayerRaceCheckpoint" before setting the checkpoint.
- * SEE: "FIXES_SetPlayerRaceCheckpoint".
- * AUTHOR: KoczkaHUN
- * POST: http://forum.sa-mp.com/showpost.php?p=1482401
- *
- * FIX: TextDrawCreate
- * PROBLEM: Crashes on a blank string.
- * SOLUTION: Intercept blank strings.
- * SEE: "FIXES_TextDrawCreate".
- * AUTHOR: wups
- * POST: http://forum.sa-mp.com/showpost.php?p=1484008
- *
- * FIX: TextDrawSetString
- * PROBLEM: Crashes on a blank string and size greater than 1024.
- * SOLUTION: Intercept blank strings and truncate long strings.
- * SEE: "FIXES_TextDrawSetString".
- * AUTHOR: TomTrox
- * POST: http://forum.sa-mp.com/showpost.php?p=1487870
- *
- * FIX: AllowInteriorWeapons
- * PROBLEM: Does nothing.
- * SOLUTION: Set the player's weapon to fists in an interior.
- * SEE: "FIXES_AllowInteriorWeapons", "OnGameModeInit" and
- * "OnPlayerUpdate".
- * AUTHOR: KoczkaHUN
- * POST: http://forum.sa-mp.com/showpost.php?p=1502696
- *
- * FIX: OnPlayerEnterVehicle
- * PROBLEM: Crashes other players when people enter an invalid seat.
- * SOLUTION: Desync the people with invalid seats.
- * SEE: "OnPlayerStateChange" and "OnPlayerUpdate".
- * AUTHOR: RyDeR`/Y_Less
- * POST: http://forum.sa-mp.com/showpost.php?p=1410296
- *
- * FIX: AllowTeleport
- * PROBLEM: 0.3dRC9 removed "AllowPlayerTeleport" and "AllowAdminTeleport" in
- * favour of "OnPlayerClickMap". Some scripts used the old code and.
- * SOLUTION: Teleport the player in "OnPlayerClickMap".
- * SEE: "OnPlayerClickMap", "FIXES_AllowPlayerTeleport", and
- * "FIXES_AllowAdminTeleport".
- * AUTHOR: Y_Less
- *
- * FIX: SetPlayerSpecialAction
- * PROBLEM: Removing jetpacks from players by setting their special action to 0
- * causes the sound to stay until death.
- * SOLUTION: Call "ClearAnimations" before "SetPlayerSpecialAction".
- * SEE: "FIXES_SetPlayerSpecialAction".
- * AUTHOR: MP2
- * POST: Private message from MP2.
- *
- * FIX: OnDialogResponse
- * PROBLEM: Cheaters can spoof the dialogid they are using to respond to ones
- * they can't actually see.
- * SOLUTION: Store the displayed dialogid and use that instead.
- * SEE: "FIXES_OnDialogResponse", "FIXES_ShowPlayerDialog".
- * AUTHOR: Y_Less
- * FIXED IN: 0.3e RC6
- *
- * FIX: GetPlayerDialog
- * PROBLEM: This function doesn't exist. Fixed for hidden dialogs.
- * SOLUTION: Add it. DEFAULTS TO FALSE!
- * SEE: "FIXES_GetPlayerDialog".
- * AUTHOR: Y_Less/xX_Simon_Xx
- * POST: http://forum.sa-mp.com/showpost.php?p=2141254
- *
- * FIX: SetSpawnInfo
- * PROBLEM: Kicks the player if "SpawnPlayer" is called before "SetSpawnInfo".
- * SOLUTION: Call "SetSpawnInfo" at least once.
- * SEE: "OnPlayerConnect".
- * AUTHOR: Y_Less
- *
- * FIX: SetPlayerSkin
- * PROBLEM: Breaks sitting on bikes.
- * SOLUTION: Put them back in the vehicle after setting their skin.
- * SEE: "FIXES_SetPlayerSkin".
- * AUTHOR: CyNiC
- * POST: http://forum.sa-mp.com/showpost.php?p=1756094
- *
- * FIX: HideMenuForPlayer
- * PROBLEM: Crashes when passed an invalid menu ID.
- * SOLUTION: Don't hide it when passed an invalid menu.
- * SEE: "FIXES_HideMenuForPlayer".
- * AUTHOR: Y_Less
- * POST: http://forum.sa-mp.com/showpost.php?p=1787297
- *
- * FIX: valstr
- * PROBLEM: Crashes on large numbers.
- * SOLUTION: Use "format" instead.
- * SEE: "FIXES_valstr".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: fclose
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fclose".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: fwrite
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fwrite".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: fread
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fread".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: fputchar
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fputchar".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: fgetchar
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fgetchar".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: fblockwrite
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fblockwrite".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: fblockread
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fblockread".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: fseek
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fseek".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: flength
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_flength".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1790300
- *
- * FIX: file_inc
- * PROBLEM: All file.inc fixes are included separately for major overhead.
- * SOLUTION: Optionally group them all under one define. DEFAULTS TO FALSE!
- * SEE: "FIX_file_inc".
- * AUTHOR: Y_Less
- *
- * FIX: IsPlayerAttachedObjectSlotUsed
- * PROBLEM: Doesn't work in OnPlayerDisconnect.
- * SOLUTION: Maintain an internal record of slots used.
- * SEE: "FIXES_SetPlayerAttachedObject",
- * "FIXES_RemovePlayerAttachedObject",
- * "FIXES_IsPAttachedObjectSlotUsed", and
- * "OnPlayerDisconnect".
- * AUTHOR: Y_Less
- *
- * FIX: SetPlayerAttachedObject
- * PROBLEM: Doesn't remove objects when the mode ends.
- * SOLUTION: Remove them.
- * SEE: "FIXES_SetPlayerAttachedObject",
- * "FIXES_RemovePlayerAttachedObject", and
- * "OnPlayerDisconnect".
- * AUTHOR: Y_Less
- *
- * FIX: OnPlayerDeath
- * PROBLEM: Clients get stuck when they die with an animation applied.
- * SOLUTION: Clear their animations.
- * SEE: "OnPlayerDeath" and "OnPlayerUpdate".
- * AUTHOR: h02
- * POST: http://forum.sa-mp.com/showpost.php?p=1641144
- *
- * FIX: strins
- * PROBLEM: Ignores the "maxlength" parameter causing possible crashes.
- * SOLUTION: Manually check the length.
- * SEE: "FIXES_strins".
- * AUTHOR: Slice/Y_Less
- * POST: http://forum.sa-mp.com/showpost.php?p=1860495
- * POST: http://forum.sa-mp.com/showpost.php?p=1864706
- *
- * FIX: IsPlayerConnected
- * PROBLEM: Only uses the lower two bytes of a passed ID.
- * SOLUTION: Mask the numbers.
- * SEE: "FIXES_IsPlayerConnected".
- * AUTHOR: Slice
- * POST: http://forum.sa-mp.com/showpost.php?p=1860464
- *
- * FIX: OnPlayerCommandText
- * PROBLEM: Can crash ZCMD when passed a null string.
- * SOLUTION: Pass NULL if invalid inputs given.
- * SEE: "OnPlayerCommandText".
- * AUTHOR: Y_Less
- * POST: http://forum.sa-mp.com/showpost.php?p=1909511
- *
- * FIX: TrainExit
- * PROBLEM: When getting out of a train entered by "PutPlayerInVehicle", the
- * camera does not reset properly.
- * SOLUTION: Reset the camera.
- * SEE: "FIXES_PutPlayerInVehicle", "FIXES_OnPlayerStateChange".
- * AUTHOR: Terminator3/Y_Less
- * POST: http://forum.sa-mp.com/showpost.php?p=1980214
- *
- * FIX: Kick
- * PROBLEM: Calling "Kick" in "OnPlayerConnect" doesn't work properly.
- * SOLUTION: Defer it.
- * SEE: "OnPlayerConnect", "FIXES_Kick".
- * AUTHOR: Y_Less
- * POST: http://forum.sa-mp.com/showpost.php?p=1989453
- *
- * FIX: OnVehicleMod
- * PROBLEM: Crashes other players when invalid mods are applied.
- * SOLUTION: Desync the player.
- * SEE: "OnVehicleMod".
- * AUTHOR: JernejL/Y_Less
- * POST: http://forum.sa-mp.com/showpost.php?p=1671500
- *
- * FIX: random
- * PROBLEM: Doesn't work with negative numbers.
- * SOLUTION: Invert then reinvert. DEFAULTS TO FALSE!
- * SEE: "FIXES_random".
- * AUTHOR: xX_Simon_Xx
- * POST: http://forum.sa-mp.com/showpost.php?p=2141254
- *
- * ==============
- * STYLE RULES:
- * ==============
- *
- * All globals should be "static stock" whenever possible (so they can only be
- * accessed from this one file).
- *
- * Statics must start with "FIXES_gs", and all other globals with "FIXES_g".
- *
- * All functions not overriding existing functions must start with "FIXES_".
- *
- * Macros must be upper case, use underscores, and start "FIXES_":
- * "FIXES_LIKE_THIS".
- *
- * Functions should be upper camel case (as the original functions are)
- * "FIXES_LikeThis".
- *
- * Globals (after the prefix) should be upper camel case, and locals lower camel
- * case "likeThis".
- *
- * ALS should be used to hook functions and callbacks.
- *
- * The ALS prefix for chaining is also "FIXES_"
- *
- * Enums start with "E_" or "e_" depending on type, then follow rules for
- * macros.
- *
- * Use "FIXES_gsCallbackHooks" and "E_FIXES_CALLBACK_HOOKS" for ALS chaining.
- *
- * NO libraries should be included - not even the default SA:MP ones. Let the
- * user do it.
- *
- * Due to the above rule, you cannot assume any third party libraries AT ALL, so
- * do not use them.
- *
- * Certain terms may be shortened when dealing with long callback names to avoid
- * compile truncation warnings (max symbol length is 31). Current list:
- *
- * "Checkpoint" -> "CP"
- * "Update" -> "Upd"
- * "TextDraw" -> "TD"
- * "Object" -> "Obj"
- * "Player" -> "P"
- *
- * Document all fixes at the top of the file, and highlight code.
- *
- * 4 space TABS - do not edit this file in PAWNO unless you know how to correct
- * the indentation.
- *
- * All rules have exceptions, but they must be justifiable. For example
- * "IS_FILTERSCRIPT" is a global variable, but is not called
- * "FIXES_gIsFilterscript" to better match the "FILTERSCRIPT" macro it
- * replaces. Now a macro for "_FIXES_gIsFilterscript".
- *
- * Variables which need to be fully global (i.e. not "static"), but should not
- * actually be used by other people (e.g. appear inside a macro) should be
- * prefixed with "_FIXES" instead of "FIXES" to indicate their private use.
- *
- * No comments beyond the end of column 80 (where the line in "PAWNO" is).
- *
- * When redefining a native, add a "BAD_" external name declaration with the
- * "_ALS_" definition so that others may use the original native if they so
- * desire (with the caveat that it may break all fixes). Note the "BAD_"
- * name is meant to indicate the possibility of breaking the fix, not a
- * comment on the original native function.
- *
- * If a bug is fixed in some version of the server it can be conditionally
- * included here. This is done by checking for the existance of a native
- * function introduced in the same server version. For example
- * "TogglePlayerControllable" was fixed in 0.3eRC6, the same time as the
- * "SetObjectMaterial" native was introduced, thus the inclusion becomes:
- *
- * #if !defined FIX_TogglePlayerControllable
- * #define FIX_TogglePlayerControllable (!defined SetObjectMaterial)
- * #endif
- *
- * This only includes this fix if that native doesn't exist.
- *
- * To reduce general memory consumption, strings in this include are stored
- * globally in constant arrays and referenced. This is EXACTLY as fast as
- * using the string constants directly, but means that strings are not
- * stored in the assembly multiple times (unless the string is only used
- * once, in which case it's more work for no gain). See this post for more
- * details:
- *
- * http://forum.sa-mp.com/showpost.php?p=1795601
- *
- * Documentation explanation:
- *
- * FIX: <Short name>
- * PROBLEM: <Description of problem>
- * SOLUTION: <Description of solution>
- * SEE: <List of relevant functions>
- * AUTHOR: <Person who wrote the fix>
- * POST: <Link to the original post where applicable>
- * FIXED IN: <Server version of official fix where applicable>
- */
- #define _FIXES_IS_UNSET(%0) ((2*%0-1+1)==-1)
- // We can add server version compiler code here to only compile fixes that apply
- // to the version of the includes for which the user is compiling.
- #if !defined FIX_GetPlayerColor
- #if defined FIX_GetPlayerColour
- #define FIX_GetPlayerColor (FIX_GetPlayerColour)
- #else
- #define FIX_GetPlayerColor (1)
- #endif
- #endif
- #if _FIXES_IS_UNSET(FIX_GetPlayerColor)
- #undef FIX_GetPlayerColor
- #define FIX_GetPlayerColor (0)
- #endif
- #if !defined FIX_FILTERSCRIPT
- #define FIX_FILTERSCRIPT (1)
- #elseif _FIXES_IS_UNSET(FIX_FILTERSCRIPT)
- #undef FIX_FILTERSCRIPT
- #define FIX_FILTERSCRIPT (0)
- #endif
- #if !defined FIX_SpawnPlayer
- #define FIX_SpawnPlayer (1)
- #elseif _FIXES_IS_UNSET(FIX_SpawnPlayer)
- #undef FIX_SpawnPlayer
- #define FIX_SpawnPlayer (0)
- #endif
- #if !defined FIX_SetPlayerName
- #define FIX_SetPlayerName (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerName)
- #undef FIX_SetPlayerName
- #define FIX_SetPlayerName (0)
- #endif
- #if !defined FIX_GetPlayerSkin
- #define FIX_GetPlayerSkin (1)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerSkin)
- #undef FIX_GetPlayerSkin
- #define FIX_GetPlayerSkin (0)
- #endif
- #if !defined FIX_GetWeaponName
- #define FIX_GetWeaponName (1)
- #elseif _FIXES_IS_UNSET(FIX_GetWeaponName)
- #undef FIX_GetWeaponName
- #define FIX_GetWeaponName (0)
- #endif
- #if !defined FIX_SetPlayerWorldBounds
- #define FIX_SetPlayerWorldBounds (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerWorldBounds)
- #undef FIX_SetPlayerWorldBounds
- #define FIX_SetPlayerWorldBounds (0)
- #endif
- #if !defined FIX_TogglePlayerControllable
- #if defined SetObjectMaterial
- #define FIX_TogglePlayerControllable (0)
- #else
- #define FIX_TogglePlayerControllable (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_TogglePlayerControllable)
- #undef FIX_TogglePlayerControllable
- #define FIX_TogglePlayerControllable (0)
- #endif
- #if !defined FIX_HydraSniper
- #define FIX_HydraSniper (1)
- #elseif _FIXES_IS_UNSET(FIX_HydraSniper)
- #undef FIX_HydraSniper
- #define FIX_HydraSniper (0)
- #endif
- #if !defined FIX_IsPlayerInCheckpoint
- #define FIX_IsPlayerInCheckpoint (1)
- #elseif _FIXES_IS_UNSET(FIX_IsPlayerInCheckpoint)
- #undef FIX_IsPlayerInCheckpoint
- #define FIX_IsPlayerInCheckpoint (0)
- #endif
- #if !defined FIX_IsPlayerInRaceCheckpoint
- #define FIX_IsPlayerInRaceCheckpoint (1)
- #elseif _FIXES_IS_UNSET(FIX_IsPlayerInRaceCheckpoint)
- #undef FIX_IsPlayerInRaceCheckpoint
- #define FIX_IsPlayerInRaceCheckpoint (0)
- #endif
- #if !defined FIX_GetPlayerWeapon
- #define FIX_GetPlayerWeapon (1)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerWeapon)
- #undef FIX_GetPlayerWeapon
- #define FIX_GetPlayerWeapon (0)
- #endif
- #if !defined FIX_PutPlayerInVehicle
- #define FIX_PutPlayerInVehicle (1)
- #elseif _FIXES_IS_UNSET(FIX_PutPlayerInVehicle)
- #undef FIX_PutPlayerInVehicle
- #define FIX_PutPlayerInVehicle (0)
- #endif
- #if !defined FIX_KEY_AIM
- #if defined KEY_AIM
- #define FIX_KEY_AIM (0)
- #else
- #define FIX_KEY_AIM (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_KEY_AIM)
- #undef FIX_KEY_AIM
- #define FIX_KEY_AIM (0)
- #endif
- #if !defined FIX_SetPlayerCheckpoint
- #define FIX_SetPlayerCheckpoint (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerCheckpoint)
- #undef FIX_SetPlayerCheckpoint
- #define FIX_SetPlayerCheckpoint (0)
- #endif
- #if !defined FIX_SetPlayerRaceCheckpoint
- #define FIX_SetPlayerRaceCheckpoint (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerRaceCheckpoint)
- #undef FIX_SetPlayerRaceCheckpoint
- #define FIX_SetPlayerRaceCheckpoint (0)
- #endif
- #if !defined FIX_TextDrawCreate
- #define FIX_TextDrawCreate (1)
- #elseif _FIXES_IS_UNSET(FIX_TextDrawCreate)
- #undef FIX_TextDrawCreate
- #define FIX_TextDrawCreate (0)
- #endif
- #if !defined FIX_TextDrawSetString
- #define FIX_TextDrawSetString (1)
- #elseif _FIXES_IS_UNSET(FIX_TextDrawSetString)
- #undef FIX_TextDrawSetString
- #define FIX_TextDrawSetString (0)
- #endif
- #if !defined FIX_AllowInteriorWeapons
- #define FIX_AllowInteriorWeapons (1)
- #elseif _FIXES_IS_UNSET(FIX_AllowInteriorWeapons)
- #undef FIX_AllowInteriorWeapons
- #define FIX_AllowInteriorWeapons (0)
- #endif
- #if !defined FIX_OnPlayerEnterVehicle
- #if defined OnPlayerClickMap
- #define FIX_OnPlayerEnterVehicle (0)
- #else
- #define FIX_OnPlayerEnterVehicle (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerEnterVehicle)
- #undef FIX_OnPlayerEnterVehicle
- #define FIX_OnPlayerEnterVehicle (0)
- #endif
- #if !defined FIX_AllowTeleport
- #if defined OnPlayerClickMap
- #define FIX_AllowTeleport (1)
- #else
- #define FIX_AllowTeleport (0)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_AllowTeleport)
- #undef FIX_AllowTeleport
- #define FIX_AllowTeleport (0)
- #endif
- #if !defined FIX_SetPlayerSpecialAction
- #define FIX_SetPlayerSpecialAction (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerSpecialAction)
- #undef FIX_SetPlayerSpecialAction
- #define FIX_SetPlayerSpecialAction (0)
- #endif
- #if !defined FIX_OnDialogResponse
- #if defined GetVehicleModelInfo
- #define FIX_OnDialogResponse (0)
- #else
- #define FIX_OnDialogResponse (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_OnDialogResponse)
- #undef FIX_OnDialogResponse
- #define FIX_OnDialogResponse (0)
- #endif
- #if !defined FIX_GetPlayerDialog
- #define FIX_GetPlayerDialog (0)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerDialog)
- #undef FIX_GetPlayerDialog
- #define FIX_GetPlayerDialog (0)
- #endif
- #if !defined FIX_SetSpawnInfo
- #if defined GetPlayerVersion
- #define FIX_SetSpawnInfo (0)
- #else
- #define FIX_SetSpawnInfo (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_SetSpawnInfo)
- #undef FIX_SetSpawnInfo
- #define FIX_SetSpawnInfo (0)
- #endif
- #if !defined FIX_SetPlayerSkin
- #define FIX_SetPlayerSkin (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerSkin)
- #undef FIX_SetPlayerSkin
- #define FIX_SetPlayerSkin (0)
- #endif
- #if !defined FIX_HideMenuForPlayer
- #define FIX_HideMenuForPlayer (1)
- #elseif _FIXES_IS_UNSET(FIX_HideMenuForPlayer)
- #undef FIX_HideMenuForPlayer
- #define FIX_HideMenuForPlayer (0)
- #endif
- #if !defined FIX_valstr
- #define FIX_valstr (1)
- #elseif _FIXES_IS_UNSET(FIX_valstr)
- #undef FIX_valstr
- #define FIX_valstr (0)
- #endif
- #if !defined FIX_file_inc
- #define FIX_file_inc (0)
- #elseif _FIXES_IS_UNSET(FIX_file_inc)
- #undef FIX_file_inc
- #define FIX_file_inc (0)
- #endif
- #if !defined FIX_fclose
- #define FIX_fclose (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fclose)
- #undef FIX_fclose
- #define FIX_fclose (0)
- #endif
- #if !defined FIX_fwrite
- #define FIX_fwrite (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fwrite)
- #undef FIX_fwrite
- #define FIX_fwrite (0)
- #endif
- #if !defined FIX_fread
- #define FIX_fread (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fread)
- #undef FIX_fread
- #define FIX_fread (0)
- #endif
- #if !defined FIX_fputchar
- #define FIX_fputchar (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fputchar)
- #undef FIX_fputchar
- #define FIX_fputchar (0)
- #endif
- #if !defined FIX_fgetchar
- #define FIX_fgetchar (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fgetchar)
- #undef FIX_fgetchar
- #define FIX_fgetchar (0)
- #endif
- #if !defined FIX_fblockwrite
- #define FIX_fblockwrite (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fblockwrite)
- #undef FIX_fblockwrite
- #define FIX_fblockwrite (0)
- #endif
- #if !defined FIX_fblockread
- #define FIX_fblockread (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fblockread)
- #undef FIX_fblockread
- #define FIX_fblockread (0)
- #endif
- #if !defined FIX_fseek
- #define FIX_fseek (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fseek)
- #undef FIX_fseek
- #define FIX_fseek (0)
- #endif
- #if !defined FIX_flength
- #define FIX_flength (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_flength)
- #undef FIX_flength
- #define FIX_flength (0)
- #endif
- #if !defined FIX_IsPlayerAttachedObjSlotUsed
- #define FIX_IsPlayerAttachedObjSlotUsed (1)
- #elseif _FIXES_IS_UNSET(FIX_IsPlayerAttachedObjSlotUsed)
- #undef FIX_IsPlayerAttachedObjSlotUsed
- #define FIX_IsPlayerAttachedObjSlotUsed (0)
- #endif
- #if !defined FIX_SetPlayerAttachedObject
- #define FIX_SetPlayerAttachedObject (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerAttachedObject)
- #undef FIX_SetPlayerAttachedObject
- #define FIX_SetPlayerAttachedObject (0)
- #endif
- #if !defined FIX_OnPlayerDeath
- #define FIX_OnPlayerDeath (1)
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerDeath)
- #undef FIX_OnPlayerDeath
- #define FIX_OnPlayerDeath (0)
- #endif
- #if !defined FIX_strins
- #define FIX_strins (1)
- #elseif _FIXES_IS_UNSET(FIX_strins)
- #undef FIX_strins
- #define FIX_strins (0)
- #endif
- #if !defined FIX_IsPlayerConnected
- #define FIX_IsPlayerConnected (1)
- #elseif _FIXES_IS_UNSET(FIX_IsPlayerConnected)
- #undef FIX_IsPlayerConnected
- #define FIX_IsPlayerConnected (0)
- #endif
- #if !defined FIX_OnPlayerCommandText
- #if defined _ALS_OnPlayerCommandText
- #define FIX_OnPlayerCommandText (0)
- #else
- #define FIX_OnPlayerCommandText (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerCommandText)
- #undef FIX_OnPlayerCommandText
- #define FIX_OnPlayerCommandText (0)
- #endif
- #if !defined FIX_TrainExit
- #define FIX_TrainExit (1)
- #elseif _FIXES_IS_UNSET(FIX_TrainExit)
- #undef FIX_TrainExit
- #define FIX_TrainExit (0)
- #endif
- #if !defined FIX_Kick
- #define FIX_Kick (1)
- #elseif _FIXES_IS_UNSET(FIX_Kick)
- #undef FIX_Kick
- #define FIX_Kick (0)
- #endif
- #if !defined FIX_OnVehicleMod
- #define FIX_OnVehicleMod (1)
- #elseif _FIXES_IS_UNSET(FIX_OnVehicleMod)
- #undef FIX_OnVehicleMod
- #define FIX_OnVehicleMod (0)
- #endif
- #if !defined FIX_random
- #define FIX_random (0)
- #elseif _FIXES_IS_UNSET(FIX_random)
- #undef FIX_random
- #define FIX_random (0)
- #endif
- /*
- * FIXES_SilentKick
- *
- * If this define is set to 1, then players will not be given a message when
- * they are kicked for cheats, instead they will just loose connection to the
- * server.
- */
- #if !defined FIXES_SilentKick
- #define FIXES_SilentKick 0
- #elseif _FIXES_IS_UNSET(FIXES_SilentKick)
- #undef FIXES_SilentKick
- #define FIXES_SilentKick 0
- #endif
- /*
- * FIXES_Debug
- *
- * If this define is set to 1, then debug printing is turned on for any
- * functions which may use it. Otherwise, the compiler entirely removes the
- * code to print anything, leaving 0 run-time overhead.
- */
- #if defined FIXES_Debug
- #if _FIXES_IS_UNSET(FIXES_Debug)
- #undef FIXES_Debug
- #elseif FIXES_Debug == 1
- #define FIXES_PRINTF(%0); print(_FIXES_gIsFilterscript ? ("* FIXES_PRINTF (FS):") : ("* FIXES_PRINTF (GM):")),printf("*** " %0);
- #else
- #undef FIXES_Debug
- #endif
- #endif
- #if !defined FIXES_PRINTF
- #define FIXES_Debug 0
- #define FIXES_PRINTF(%0);
- #endif
- /*
- * INVALID_DIALOG_ID
- *
- * Set when a player can't see a dialog.
- */
- #if !defined INVALID_DIALOG_ID
- #define INVALID_DIALOG_ID (-1)
- #endif
- /*
- * FIXES_Single
- *
- * If this define is set to 1, then the old style include is used, with no
- * support for multiple scripts running at the same time on the server (i.e. no
- * gamemodes and filter scripts at the same time). You can only have one or the
- * other or bugs.
- */
- #if !defined FIXES_Single
- #define FIXES_Single (0)
- #elseif _FIXES_IS_UNSET(FIXES_Single)
- #undef FIXES_Single
- #define FIXES_Single (1)
- #endif
- /*
- * E_FIXES_CALLBACK_HOOKS_1
- * E_FIXES_CALLBACK_HOOKS_2
- *
- * Two enums to define the bits used to efficiently store wether of not the next
- * callback in the ALS chain exists. Breaks naming convention for elements from
- * "E_FIXES_ON_GAME_MODE_INIT" to "E_FIXES_OnGameModeInit" for compatibility
- * with existing names. Note that "Checkpoint" and "Update" have been shortened
- * to "CP" and "Upd" in certain symbols to stay below the 31 character limit.
- */
- enum E_FIXES_CALLBACK_HOOKS_1 (<<= 1)
- {
- E_FIXES_OnGameModeInit = 1,
- E_FIXES_OnGameModeExit,
- E_FIXES_OnFilterScriptInit,
- E_FIXES_OnFilterScriptExit,
- E_FIXES_OnPlayerConnect,
- E_FIXES_OnPlayerDisconnect,
- E_FIXES_OnPlayerSpawn,
- E_FIXES_OnPlayerDeath,
- E_FIXES_OnVehicleSpawn,
- E_FIXES_OnVehicleDeath,
- E_FIXES_OnPlayerText,
- E_FIXES_OnPlayerCommandText,
- E_FIXES_OnPlayerRequestClass,
- E_FIXES_OnPlayerEnterVehicle,
- E_FIXES_OnPlayerExitVehicle,
- E_FIXES_OnPlayerStateChange,
- E_FIXES_OnPlayerEnterCheckpoint,
- E_FIXES_OnPlayerLeaveCheckpoint,
- E_FIXES_OnPlayerEnterRaceCP,
- E_FIXES_OnPlayerLeaveRaceCP,
- E_FIXES_OnRconCommand,
- E_FIXES_OnPlayerRequestSpawn,
- E_FIXES_OnObjectMoved,
- E_FIXES_OnPlayerObjectMoved,
- E_FIXES_OnPlayerPickUpPickup,
- E_FIXES_OnVehicleMod,
- E_FIXES_OnEnterExitModShop,
- E_FIXES_OnVehiclePaintjob,
- E_FIXES_OnVehicleRespray,
- E_FIXES_OnVehicleDamageStatusUp,
- E_FIXES_OnPlayerSelectedMenuRow,
- E_FIXES_OnPlayerExitedMenu
- }
- enum E_FIXES_CALLBACK_HOOKS_2 (<<= 1)
- {
- E_FIXES_OnPlayerInteriorChange = 1,
- E_FIXES_OnPlayerKeyStateChange,
- E_FIXES_OnRconLoginAttempt,
- E_FIXES_OnPlayerUpdate,
- E_FIXES_OnPlayerStreamIn,
- E_FIXES_OnPlayerStreamOut,
- E_FIXES_OnVehicleStreamIn,
- E_FIXES_OnVehicleStreamOut,
- E_FIXES_OnDialogResponse,
- E_FIXES_OnPlayerClickPlayer,
- E_FIXES_OnPlayerClickMap,
- E_FIXES_OnPlayerClickTextDraw,
- E_FIXES_OnPlayerClickPlayerTD,
- E_FIXES_OnPlayerEditObject,
- E_FIXES_OnPlayerEditAttachedObj,
- E_FIXES_OnPlayerSelectObject,
- E_FIXES_OnPlayerTakeDamage,
- E_FIXES_OnPlayerGiveDamage
- }
- /*
- * E_FIXES_WORLDBOUND_DATA
- *
- * Store data for each player on their worldbound data.
- */
- enum E_FIXES_WORLDBOUND_DATA
- {
- // "Previous".
- Float:E_FIXES_WORLDBOUND_DATA_PX,
- Float:E_FIXES_WORLDBOUND_DATA_PY,
- Float:E_FIXES_WORLDBOUND_DATA_PZ,
- // "Lower".
- Float:E_FIXES_WORLDBOUND_DATA_LX,
- Float:E_FIXES_WORLDBOUND_DATA_LY,
- // "Upper".
- Float:E_FIXES_WORLDBOUND_DATA_UX,
- Float:E_FIXES_WORLDBOUND_DATA_UY
- }
- /*
- * e_FIXES_BOOLS
- *
- * Collection of boolean values for players, designed to collect multiple checks
- * in to one variable to reduce memory consumption.
- */
- enum e_FIXES_BOOLS (<<= 1)
- {
- // Handy definition for nothing set.
- e_FIXES_BOOLS_NONE = 0,
- // Does this player have worldbounds enabled?
- e_FIXES_BOOLS_WORLDBOUNDS = 1,
- e_FIXES_BOOLS_UNCONTROLLABLE,
- e_FIXES_BOOLS_PUT_IN_VEHICLE,
- e_FIXES_BOOLS_BLOCK,
- e_FIXES_BOOLS_TELEPORT,
- e_FIXES_BOOLS_CONNECTED,
- e_FIXES_BOOLS_INTERIOR,
- e_FIXES_BOOLS_PUT_IN_TRAIN,
- e_FIXES_BOOLS_KICKED,
- e_FIXES_BOOLS_ON_PLAYER_CONNECT
- }
- /*
- * e_FIXES_SETTINGS
- *
- * Collection of boolean values for the script as a whole. Stores a variety of
- * settings that are true/false.
- */
- enum e_FIXES_SETTINGS (<<= 1)
- {
- // Handy definition for nothing set.
- e_FIXES_SETTINGS_NONE = 0,
- e_FIXES_SETTINGS_INTERIOR = 1,
- e_FIXES_SETTINGS_ADMIN_TELEPORT,
- e_FIXES_SETTINGS_IN_CHARGE,
- e_FIXES_SETTINGS_DROP_ALL_DATA,
- e_FIXES_SETTINGS_ENDING
- }
- /*
- * _FIXES_CEILDIV
- *
- * Do a ceiling division of the first number by the second number.
- */
- #define _FIXES_CEILDIV(%0,%1) (((%0) + (%1) - 1) / (%1))
- /*
- * _FIXES_INFINITY
- *
- * IEEE 754 definition of infinity.
- */
- #define _FIXES_INFINITY (Float:0x7F800000)
- /*
- * _FIXES_N_INFINITY
- *
- * IEEE 754 definition of negative infinity.
- */
- #define _FIXES_N_INFINITY (Float:0xFF800000)
- /*
- * _FIXES_ATTACHMENTS
- *
- * The number of players whose attachment data (10-bits) can be stored in one
- * cell.
- */
- #define _FIXES_ATTACHMENTS (cellbits / MAX_PLAYER_ATTACHED_OBJECTS)
- // These varaibles are NOT pre-processor dependent as they are stock. It's just
- // simpler than trying to figure out when or if a semi-colon is needed.
- #if !FIX_FILTERSCRIPT
- static
- #endif
- stock
- /*
- * bool:_FIXES_gIsFilterscript
- *
- * Runtime equivalent of "FILTERSCRIPT" for when it is not set by the user.
- */
- bool:_FIXES_gIsFilterscript;
- static stock
- /*
- * E_FIXES_CALLBACK_HOOKS_1:FIXES_gsCallbackHooks1
- * E_FIXES_CALLBACK_HOOKS_1:FIXES_gsCallbackHooks2
- *
- * Bit arrays of callbacks. You can only have 32 callbacks per variable,
- * and there are more than that many, so we need more than one variable.
- * Add new callback detection to "FIXES_ScriptInit" - only actually used
- * callbacks are currently hooked.
- */
- E_FIXES_CALLBACK_HOOKS_1:FIXES_gsCallbackHooks1,
- E_FIXES_CALLBACK_HOOKS_2:FIXES_gsCallbackHooks2,
- /*
- * FIXES_gsPlayerIP[MAX_PLAYERS]
- *
- * A player's IP as a 32-bit integer.
- */
- FIXES_gsPlayerIP[MAX_PLAYERS] = {-1, ...},
- /*
- * FIXES_gsPlayerSkin[MAX_PLAYERS]
- *
- * The skin the player is currently using.
- */
- FIXES_gsPlayerSkin[MAX_PLAYERS],
- /*
- * e_FIXES_BOOLEAN_DATA:FIXES_gsPlayerBools[MAX_PLAYERS]
- *
- * Collection of boolean values for players.
- */
- e_FIXES_BOOLS:FIXES_gsPlayerBools[MAX_PLAYERS],
- /*
- * FIXES_gsWorldbounds[MAX_PLAYERS][E_FIXES_WORLDBOUND_DATA]
- *
- * All data for players on where their worldbounds are and where they last
- * were before they went through the bounds by crouching.
- */
- FIXES_gsWorldbounds[MAX_PLAYERS][E_FIXES_WORLDBOUND_DATA],
- /*
- * FIXES_gsPlayerWeapon[MAX_PLAYERS]
- *
- * Stores the weapon set by "SetPlayerArmedWeapon" when in a vehicle.
- */
- FIXES_gsPlayerWeapon[MAX_PLAYERS],
- /*
- * FIXES_gsVehicleSeatData[MAX_PLAYERS]
- *
- * What vehicle the player is due to go in.
- */
- FIXES_gsVehicleSeatData[MAX_PLAYERS],
- /*
- * FIXES_gsVehicleLocked[(MAX_PLAYERS * MAX_VEHICLES + cellbits - 1) / cellbits]
- *
- * Is this vehicle locked for a player. This is a compressed 2D binary
- * array, made by concatenating many bits together (saves 1kb-3kb)! Is
- * there a reason this array exists?
- */
- //FIXES_gsVehicleLocked[_FIXES_CEILDIV(MAX_PLAYERS * MAX_VEHICLES, cellbits)],
- /*
- * FIXES_gsDialogID[MAX_PLAYERS]
- *
- * Stores the true ID of the dialog the player is looking at to prevent
- * spoofing.
- */
- FIXES_gsDialogID[MAX_PLAYERS] = {-1, ...},
- /*
- * e_FIXES_SETTINGS:FIXES_gsSettings
- *
- * A collection of 1-bit options, compressed together to save space.
- */
- e_FIXES_SETTINGS:FIXES_gsSettings,
- /*
- * FIXES_gsObjectSlots[_FIXES_CEILDIV(MAX_PLAYERS, _FIXES_ATTACHMENTS)]
- *
- * A record of which attached object slots a player has used.
- */
- FIXES_gsObjectSlots[_FIXES_CEILDIV(MAX_PLAYERS, _FIXES_ATTACHMENTS)],
- /*
- * FIXES_gsLastAnimation[MAX_PLAYERS]
- *
- * The last animation a player used.
- */
- FIXES_gsLastAnimation[MAX_PLAYERS];
- static stock const
- /*
- * FIXES_gscPlayerColours[100]
- *
- * There are only 100 colours used by default, with SA:MP looping through
- * them repeatedly.
- */
- FIXES_gscPlayerColours[100] =
- {
- 0xFF8C13FF, 0xC715FFFF, 0x20B2AAFF, 0xDC143CFF, 0x6495EDFF,
- 0xF0E68CFF, 0x778899FF, 0xFF1493FF, 0xF4A460FF, 0xEE82EEFF,
- 0xFFD720FF, 0x8B4513FF, 0x4949A0FF, 0x148B8BFF, 0x14FF7FFF,
- 0x556B2FFF, 0x0FD9FAFF, 0x10DC29FF, 0x534081FF, 0x0495CDFF,
- 0xEF6CE8FF, 0xBD34DAFF, 0x247C1BFF, 0x0C8E5DFF, 0x635B03FF,
- 0xCB7ED3FF, 0x65ADEBFF, 0x5C1ACCFF, 0xF2F853FF, 0x11F891FF,
- 0x7B39AAFF, 0x53EB10FF, 0x54137DFF, 0x275222FF, 0xF09F5BFF,
- 0x3D0A4FFF, 0x22F767FF, 0xD63034FF, 0x9A6980FF, 0xDFB935FF,
- 0x3793FAFF, 0x90239DFF, 0xE9AB2FFF, 0xAF2FF3FF, 0x057F94FF,
- 0xB98519FF, 0x388EEAFF, 0x028151FF, 0xA55043FF, 0x0DE018FF,
- 0x93AB1CFF, 0x95BAF0FF, 0x369976FF, 0x18F71FFF, 0x4B8987FF,
- 0x491B9EFF, 0x829DC7FF, 0xBCE635FF, 0xCEA6DFFF, 0x20D4ADFF,
- 0x2D74FDFF, 0x3C1C0DFF, 0x12D6D4FF, 0x48C000FF, 0x2A51E2FF,
- 0xE3AC12FF, 0xFC42A8FF, 0x2FC827FF, 0x1A30BFFF, 0xB740C2FF,
- 0x42ACF5FF, 0x2FD9DEFF, 0xFAFB71FF, 0x05D1CDFF, 0xC471BDFF,
- 0x94436EFF, 0xC1F7ECFF, 0xCE79EEFF, 0xBD1EF2FF, 0x93B7E4FF,
- 0x3214AAFF, 0x184D3BFF, 0xAE4B99FF, 0x7E49D7FF, 0x4C436EFF,
- 0xFA24CCFF, 0xCE76BEFF, 0xA04E0AFF, 0x9F945CFF, 0xDCDE3DFF,
- 0x10C9C5FF, 0x70524DFF, 0x0BE472FF, 0x8A2CD7FF, 0x6152C2FF,
- 0xCF72A9FF, 0xE59338FF, 0xEEDC2DFF, 0xD8C762FF, 0xD8C762FF
- },
- /*
- * FIXES_gscMaxPassengers[]
- *
- * This is a compressed (4-bit) list of the maximum number of passengers in
- * any vehicle, confirmed by a number of sources. "F" (15) means invalid
- * vehicle.
- */
- FIXES_gscMaxPassengers[] =
- {
- 0x10331113, 0x11311131, 0x11331313, 0x80133301, 0x1381F110, 0x10311103, 0x10001F10, 0x11113311, 0x13113311,
- 0x31101100, 0x30001301, 0x11031311, 0x11111331, 0x10013111, 0x01131100, 0x11111110, 0x11100031, 0x11130221,
- 0x33113311, 0x11111101, 0x33101133, 0x101001F0, 0x03133111, 0xFF11113F, 0x13330111, 0xFF131111, 0x0000FF3F
- },
- /*
- * FIXES_gscVehicleMods[][]
- *
- * This is a bit array of all the valid mods (-1000) for all vehicles (-400)
- * EXCEPT for vehicle 576 (Tornado), which has just TWO extra mods on it,
- * that should spill over in to an extra cell of data (requiring an extra
- * 848 bytes of data total to make the array work). Instead this (hopefully
- * rare) case is handled explicitly in "OnVehicleMod".
- */
- FIXES_gscVehicleMods[][] =
- {
- {0b00000011001111000010011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000110100010011111111010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001110110010011110000101, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010101111000100011100000011, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000011101110100010011110001010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010100011100000011110001010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001100010000011101000100, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001010000000011100111010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010101111010100011100000001, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001110100010011110000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001010000000011101111010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010011110100010011111001010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010100000100010011110001010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001111100000011111000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000011011100000011011100110000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000011000111010010011101110101, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010101111100100011110001000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000010000011101110001, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010100110100000111111001110, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000001100000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000011001110000010011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001111111000011110010101, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010100111110000011110001100, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010100101100010011111101010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001101101100011110000010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010100111100001111111001010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b11111100000000000000010000110111, 0b00000000000000000000000000000000, 0b00000010000111000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000011111111100110000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000001101110000111, 0b00000000000000000000000000000001, 0b00000001111000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000011100111100000011111010010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010001111001100011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000110000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000011100011100000011111010110, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010001111010000011100001001, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000001100000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010100111100001111110001010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010100111000000011101111010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010101111010000011101101100, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b11111111111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000111111000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111111111110, 0b00000000000000000000000000000111, 0b11000000000000000000000000000000, 0b00000000000000000010000000000111},
- {0b11111110000000000000011100000000, 0b00000000000000000000000000000011, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000011110000000000, 0b00000000000000000000011000000000},
- {0b11001110000000000000011100000000, 0b11111111100000000000000000000000, 0b00000000111111111111111000000001, 0b00000000000000000000000000000111, 0b00111100000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000001111111100, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000001111000000000000000000, 0b00000000000000000001100000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000011111111110000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000011110000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000001000111, 0b00000000000000000000000000111110, 0b00111100000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000001110000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000001111, 0b00000000000000000000000000000000, 0b00000000000000111100000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000001111000000, 0b11000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010100101100000011111000010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000011000101110010011111110001, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000110000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010010101100010011111110000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000011100111100000011111000010, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000111100000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000},
- {0b00000010000000000000011100000000, 0b00000000000000000000000000000000, 0b00000000111111111111111000000000, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000}
- },
- /*
- * FIXES_gscNULL[]
- *
- * NULL. This is stored as a global string to reduce memory usage.
- */
- FIXES_gscNULL[] = "\1\0",
- /*
- * FIXES_gscDot[]
- *
- * ".".
- */
- FIXES_gscDot[] = ".",
- /*
- * FIXES_gscSpec@[]
- *
- * Specifier "".
- */
- FIXES_gscSpec@[] = "",
- /*
- * FIXES_gscSpec@i[]
- *
- * Specifier "i".
- */
- FIXES_gscSpec@i[] = "i",
- /*
- * FIXES_gscSpec@ii[]
- *
- * Specifier "ii".
- */
- FIXES_gscSpec@ii[] = "ii",
- /*
- * FIXES_gscSpec@iii[]
- *
- * Specifier "iii".
- */
- FIXES_gscSpec@iii[] = "iii",
- /*
- * FIXES_gscSpec@ifff[]
- *
- * Specifier "ifff".
- */
- FIXES_gscSpec@ifff[] = "ifff",
- /*
- * FIXES_gscSpec@iffff[]
- *
- * Specifier "iffff".
- */
- FIXES_gscSpec@iffff[] = "iffff",
- /*
- * FIXES_gscSpec@is[]
- *
- * Specifier "is".
- */
- FIXES_gscSpec@is[] = "is",
- /*
- * FIXES_gscSpec@iiiis[]
- *
- * Specifier "iiiis".
- */
- FIXES_gscSpec@iiiis[] = "iiiis",
- /*
- * FIXES_gscSpec@iiiii[]
- *
- * Specifier "iiiii".
- */
- FIXES_gscSpec@iiiii[] = "iiiii",
- /*
- * FIXES_gscTempName[]
- *
- * The temporary name to give when renaming people.
- */
- FIXES_gscTempName[] = "FIXES_TEMP_NAME",
- /*
- * FIXES_gscOrderProperty[]
- *
- * The property to check for script ordering.
- */
- FIXES_gscOrderProperty[] = "FIXES_gscOrderProperty",
- /*
- * FIXES_gscNoGMProperty[]
- *
- * Call "_FIXES_DetermineOrder" in the GM or not?
- */
- FIXES_gscNoGMProperty[] = "FIXES_gscNoGMProperty",
- /*
- * FIXES_gscDetermineOrder[]
- *
- * Name of the ordering callback.
- */
- FIXES_gscDetermineOrder[] = "_FIXES_DetermineOrder",
- /*
- * FIXES_gscAllowTeleport[]
- *
- * Name of the remote allow teleport function.
- */
- FIXES_gscAllowTeleport[] = "_FIXES_AllowTeleport",
- /*
- * FIXES_gscPutPlayerInVehicle[]
- *
- * Name of the remote vehicle entry function.
- */
- FIXES_gscPutPlayerInVehicle[] = "_FIXES_PutPlayerInVehicle",
- /*
- * FIXES_gscAllowInteriorWeapons[]
- *
- * Name of the remote interior weapons function.
- */
- FIXES_gscAllowInteriorWeapons[] = "_FIXES_AllowInteriorWeapons",
- /*
- * FIXES_gscSetPlayerAttachedObj[]
- *
- * Name of the remote attache object function.
- */
- FIXES_gscSetPlayerAttachedObj[] = "_FIXES_SetPlayerAttachedObject",
- /*
- * FIXES_gscTogglePlayerControl[]
- *
- * Name of the remote player toggle function.
- */
- FIXES_gscTogglePlayerControl[] = "_FIXES_TogglePlayerControllable",
- /*
- * FIXES_gscSetPlayerWorldBounds[]
- *
- * Name of the remote world bounds function.
- */
- FIXES_gscSetPlayerWorldBounds[] = "_FIXES_SetPlayerWorldBounds",
- /*
- * FIXES_gscReturnProperty[]
- *
- * The property for accurate returns.
- */
- FIXES_gscReturnProperty[] = "FIXES_gscReturnProperty";
- static stock
- /*
- * FIXES_pvarNotNewPlayer[]
- *
- * This variable records wether or not this player is brand new to the
- * server, and not just having "OnPlayerConnect" called due to a script
- * load. There are certain functions that need applying only the very first
- * time they connect, then this gets set.
- */
- FIXES_pvarNotNewPlayer[] = "FIXES_pvarNotNewPlayer",
- /*
- * FIXES_pvarPlayerWeapon[]
- *
- * Name of the pvar in which to store the player's current weapon.
- */
- FIXES_pvarPlayerWeapon[] = "FIXES_pvarPlayerWeapon",
- /*
- * FIXES_pvarPlayerSkin[]
- *
- * Name of the pvar in which to store the player's current skin.
- */
- FIXES_pvarPlayerSkin[] = "FIXES_pvarPlayerSkin",
- /*
- * FIXES_gscKick[]
- *
- * Name of the kick timer function.
- */
- FIXES_gscKick[] = "_FIXES_Kick",
- /*
- * FIXES_pvarKick[]
- *
- * Name of the pvar in which to store a player's kick timer.
- */
- FIXES_pvarKick[] = "FIXES_pvarKick",
- /*
- * FIXES_pvarPlayerDialog[]
- *
- * Name of the pvar in which to store the player's current dialogid.
- */
- FIXES_pvarPlayerDialog[] = "FIXES_pvarPlayerDialog",
- /*
- * FIXES_pvarCurrentDialog[]
- *
- * Used in OnDialogResponse to be able to get the correct ID in multiple
- * scripts while still correctly resetting the ID for future use.
- */
- FIXES_pvarCurrentDialog[] = "FIXES_pvarCurrentDialog";
- /*
- * FIXES_DEFINE_STRING(callback)
- *
- * Define strings for every callback name. This macro creates "static stock
- * const" strings for every next callback name (i.e. the ones called to continue
- * the chain after "fixes.inc" is done. This is done this way to only need to
- * include every callback name ONCE in the compiled ".amx" file, the old method
- * had multiple copies of the same string literal in the final code.
- */
- #define FIXES_DEFINE_STRING(%0On%1) static stock const FIXES_gsc%1[] = "FIXES_On"#%1
- FIXES_DEFINE_STRING(OnGameModeInit);
- FIXES_DEFINE_STRING(OnGameModeExit);
- FIXES_DEFINE_STRING(OnFilterScriptInit);
- FIXES_DEFINE_STRING(OnFilterScriptExit);
- FIXES_DEFINE_STRING(OnPlayerConnect);
- FIXES_DEFINE_STRING(OnPlayerDisconnect);
- FIXES_DEFINE_STRING(OnPlayerSpawn);
- FIXES_DEFINE_STRING(OnPlayerDeath);
- FIXES_DEFINE_STRING(OnVehicleSpawn);
- FIXES_DEFINE_STRING(OnVehicleDeath);
- FIXES_DEFINE_STRING(OnPlayerText);
- FIXES_DEFINE_STRING(OnPlayerCommandText);
- FIXES_DEFINE_STRING(OnPlayerRequestClass);
- FIXES_DEFINE_STRING(OnPlayerEnterVehicle);
- FIXES_DEFINE_STRING(OnPlayerExitVehicle);
- FIXES_DEFINE_STRING(OnPlayerStateChange);
- FIXES_DEFINE_STRING(OnPlayerEnterCheckpoint);
- FIXES_DEFINE_STRING(OnPlayerLeaveCheckpoint);
- FIXES_DEFINE_STRING(OnPlayerEnterRaceCP);
- FIXES_DEFINE_STRING(OnPlayerLeaveRaceCP);
- FIXES_DEFINE_STRING(OnRconCommand);
- FIXES_DEFINE_STRING(OnPlayerRequestSpawn);
- FIXES_DEFINE_STRING(OnObjectMoved);
- FIXES_DEFINE_STRING(OnPlayerObjectMoved);
- FIXES_DEFINE_STRING(OnPlayerPickUpPickup);
- FIXES_DEFINE_STRING(OnVehicleMod);
- FIXES_DEFINE_STRING(OnEnterExitModShop);
- FIXES_DEFINE_STRING(OnVehiclePaintjob);
- FIXES_DEFINE_STRING(OnVehicleRespray);
- FIXES_DEFINE_STRING(OnVehicleDamageStatusUp);
- FIXES_DEFINE_STRING(OnPlayerSelectedMenuRow);
- FIXES_DEFINE_STRING(OnPlayerExitedMenu);
- FIXES_DEFINE_STRING(OnPlayerInteriorChange);
- FIXES_DEFINE_STRING(OnPlayerKeyStateChange);
- FIXES_DEFINE_STRING(OnRconLoginAttempt);
- FIXES_DEFINE_STRING(OnPlayerUpdate);
- FIXES_DEFINE_STRING(OnPlayerStreamIn);
- FIXES_DEFINE_STRING(OnPlayerStreamOut);
- FIXES_DEFINE_STRING(OnVehicleStreamIn);
- FIXES_DEFINE_STRING(OnVehicleStreamOut);
- FIXES_DEFINE_STRING(OnDialogResponse);
- FIXES_DEFINE_STRING(OnPlayerClickPlayer);
- FIXES_DEFINE_STRING(OnPlayerClickMap);
- FIXES_DEFINE_STRING(OnPlayerClickTextDraw);
- FIXES_DEFINE_STRING(OnPlayerClickPlayerTD);
- FIXES_DEFINE_STRING(OnPlayerEditObject);
- FIXES_DEFINE_STRING(OnPlayerEditAttachedObj);
- FIXES_DEFINE_STRING(OnPlayerSelectObject);
- FIXES_DEFINE_STRING(OnPlayerTakeDamage);
- FIXES_DEFINE_STRING(OnPlayerGiveDamage);
- #undef FIXES_DEFINE_STRING
- /*
- * _FIXES_KEY_AIM
- * KEY_AIM
- *
- * Because the default SA:MP includes missed this one.
- */
- #define _FIXES_KEY_AIM (128)
- #if FIX_KEY_AIM
- #define KEY_AIM _FIXES_KEY_AIM
- #endif
- /*
- * IS_FILTERSCRIPT
- *
- * "FILTERSCRIPT" can't always be relied on to be set. This is not a pre-
- * processor macro, but may be better than nothing (also used internally).
- */
- #if FIX_FILTERSCRIPT
- #define IS_FILTERSCRIPT _FIXES_gIsFilterscript
- #endif
- /*
- * FIXES_DETECT_CALLBACK_1(callback)
- * FIXES_DETECT_CALLBACK_2(callback)
- *
- * Macro to make detecting callbacks simpler. The number relates to which
- * variable the callback is found it. This explicity detects the "On" part of
- * the callback because some scripts redefine the callback names and we need to
- * always correctly detect them, and always have "FIXES_On"#%0 work without
- * using the redefined name (e.g. if a prior script uses ALS).
- */
- #define FIXES_DETECT_CALLBACK_1(%0On%1) (FIXES_gsCallbackHooks1|=E_FIXES_On%1*E_FIXES_CALLBACK_HOOKS_1:(funcidx(FIXES_gsc%1)!=-1))
- #define FIXES_DETECT_CALLBACK_2(%0On%1) (FIXES_gsCallbackHooks2|=E_FIXES_On%1*E_FIXES_CALLBACK_HOOKS_2:(funcidx(FIXES_gsc%1)!=-1))
- /*
- * FIXES_CALL_CALLBACK_1(callback, default, format[], ...)
- * FIXES_CALL_CALLBACK_2(callback, default, format[], ...)
- *
- * Macro to make calling callbacks simpler. This takes the name of a callback
- * to chain - if it exists then it is called, if it doesn't exist the default
- * is returned. Note that this DOES NOT end the current function, use in
- * conjunction with "return", or store the value to call the next element in the
- * chain before some bits of processing.
- */
- #define FIXES_CALL_CALLBACK_1(%0On%1,%2,%3) ((FIXES_gsCallbackHooks1&E_FIXES_On%1)?(CallLocalFunction(FIXES_gsc%1,%3)):(%2))
- #define FIXES_CALL_CALLBACK_2(%0On%1,%2,%3) ((FIXES_gsCallbackHooks2&E_FIXES_On%1)?(CallLocalFunction(FIXES_gsc%1,%3)):(%2))
- /*
- * FIXES_DetermineOrder()
- *
- * Figure out which script is called first by callbacks.
- */
- #if !FIXES_Single
- forward _FIXES_DetermineOrder();
- static FIXES_DetermineOrder()
- {
- deleteproperty(5, FIXES_gscOrderProperty);
- // Called in the Game Mode first (thus needs correcting).
- setproperty(5, FIXES_gscNoGMProperty, 1);
- CallRemoteFunction(FIXES_gscDetermineOrder, FIXES_gscSpec@);
- deleteproperty(5, FIXES_gscNoGMProperty);
- //if (!existproperty(5, FIXES_gscOrderProperty))
- //{
- CallRemoteFunction(FIXES_gscDetermineOrder, FIXES_gscSpec@);
- //}
- }
- #endif
- /*
- * FIXES_IsPlayerConnected(playerid)
- *
- * FIXES:
- * IsPlayerConnected
- */
- #if FIX_IsPlayerConnected
- stock FIXES_IsPlayerConnected(playerid)
- {
- if (playerid & 0xFFFF0000)
- {
- return false;
- }
- return IsPlayerConnected(playerid);
- }
- #if defined _ALS_IsPlayerConnected
- #undef IsPlayerConnected
- #else
- native BAD_IsPlayerConnected(playerid) = IsPlayerConnected;
- #define _ALS_IsPlayerConnected
- #endif
- #define IsPlayerConnected FIXES_IsPlayerConnected
- #endif
- /*
- * FIXES_OnScriptInit()
- *
- * Do all initialisation code in here. Is called once when the script starts,
- * regardless of HOW the script is started (FilterScript or GameMode). Add
- * detection of new callbacks here.
- *
- * FIXES:
- */
- static FIXES_OnScriptInit()
- {
- #if !FIXES_Single
- FIXES_DetermineOrder();
- #endif
- // Called in the Game Mode first.
- FIXES_DETECT_CALLBACK_1(OnGameModeInit);
- #if !FIXES_Single
- FIXES_DETECT_CALLBACK_1(OnGameModeExit);
- #endif
- FIXES_DETECT_CALLBACK_1(OnFilterScriptInit);
- #if !FIXES_Single
- FIXES_DETECT_CALLBACK_1(OnFilterScriptExit);
- #endif
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_SetPlayerName || FIX_GetPlayerColor || FIX_GetPlayerSkin || FIX_IsPlayerInCheckpoint || FIX_IsPlayerInRaceCheckpoint || FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_AllowTeleport || FIX_OnDialogResponse || FIX_GetPlayerDialog || FIX_SetSpawnInfo || FIX_AllowInteriorWeapons || FIX_TrainExit || FIX_Kick
- // Not called after "loadfs" or "reloadfs" (useful for us).
- FIXES_DETECT_CALLBACK_1(OnPlayerConnect);
- #endif
- #if FIX_SetPlayerAttachedObject || FIX_IsPlayerAttachedObjSlotUsed || FIX_Kick || (FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle))
- // Called in the Game Mode first when the mode changes, in Filter
- // Scripts when the player leaves.
- FIXES_DETECT_CALLBACK_1(OnPlayerDisconnect);
- #endif
- #if FIX_GetPlayerSkin || FIX_TogglePlayerControllable
- FIXES_DETECT_CALLBACK_1(OnPlayerSpawn);
- #endif
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_AllowInteriorWeapons || FIX_OnPlayerEnterVehicle || FIX_OnPlayerDeath || FIX_OnVehicleMod
- FIXES_DETECT_CALLBACK_2(OnPlayerUpdate);
- #endif
- #if FIX_HydraSniper || FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_TrainExit
- FIXES_DETECT_CALLBACK_1(OnPlayerStateChange);
- #endif
- #if FIX_AllowTeleport && !defined FILTERSCRIPT
- // Called in the Game Mode first.
- FIXES_DETECT_CALLBACK_2(OnPlayerClickMap);
- #endif
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- FIXES_DETECT_CALLBACK_2(OnDialogResponse);
- #endif
- #if FIX_OnPlayerDeath
- FIXES_DETECT_CALLBACK_1(OnPlayerDeath);
- #endif
- #if FIX_AllowInteriorWeapons
- FIXES_DETECT_CALLBACK_2(OnPlayerInteriorChange);
- #endif
- #if FIX_OnPlayerCommandText
- FIXES_DETECT_CALLBACK_1(OnPlayerCommandText);
- #endif
- #if FIX_OnVehicleMod
- FIXES_DETECT_CALLBACK_1(OnVehicleMod);
- #endif
- }
- /*
- * OnFilterScriptInit()
- *
- * Set "IS_FILTERSCRIPT" to true as this callback is ONLY called if this script
- * is actually a FilterScript. Then call "FIXES_OnScriptInit".
- *
- * FIXES:
- * IS_FILTERSCRIPT
- */
- public OnFilterScriptInit()
- {
- _FIXES_gIsFilterscript = true;
- FIXES_OnScriptInit();
- #if !FIXES_Single
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_DROP_ALL_DATA;
- #endif
- return FIXES_CALL_CALLBACK_1(OnFilterScriptInit, 1, FIXES_gscSpec@);
- }
- #if defined _ALS_OnFilterScriptInit
- #undef OnFilterScriptInit
- #else
- #define _ALS_OnFilterScriptInit
- #endif
- #define OnFilterScriptInit FIXES_OnFilterScriptInit
- forward OnFilterScriptInit();
- /*
- * OnGameModeInit()
- *
- * Call "FIXES_OnScriptInit" if this is not a FilterScript.
- *
- * FIXES:
- * IS_FILTERSCRIPT
- * AllowInteriorWeapons
- * AllowTeleport
- */
- public OnGameModeInit()
- {
- // =============================
- // START: AllowInteriorWeapons
- // =============================
- #if FIX_AllowInteriorWeapons
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
- #endif
- // ===========================
- // END: AllowInteriorWeapons
- // ===========================
- // ======================
- // START: AllowTeleport
- // ======================
- #if FIX_AllowTeleport && !defined FILTERSCRIPT
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
- #endif
- // ======================
- // END: AllowTeleport
- // ======================
- if (!_FIXES_gIsFilterscript)
- {
- FIXES_OnScriptInit();
- }
- #if !FIXES_Single
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_DROP_ALL_DATA;
- #endif
- return FIXES_CALL_CALLBACK_1(OnGameModeInit, 1, FIXES_gscSpec@);
- }
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- #define OnGameModeInit FIXES_OnGameModeInit
- forward OnGameModeInit();
- /*
- * OnGameModeExit()
- *
- * Fast way of detecting not to retain any data.
- */
- #if !FIXES_Single
- public OnGameModeExit()
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_DROP_ALL_DATA;
- if (!_FIXES_gIsFilterscript && FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_ENDING;
- FIXES_DetermineOrder();
- }
- return FIXES_CALL_CALLBACK_1(OnGameModeExit, 1, FIXES_gscSpec@);
- }
- #if defined _ALS_OnGameModeExit
- #undef OnGameModeExit
- #else
- #define _ALS_OnGameModeExit
- #endif
- #define OnGameModeExit FIXES_OnGameModeExit
- forward OnGameModeExit();
- #endif
- /*
- * OnFilterScriptExit()
- *
- * Fast way of detecting not to retain any data.
- */
- #if !FIXES_Single
- public OnFilterScriptExit()
- {
- if (_FIXES_gIsFilterscript && FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_ENDING;
- FIXES_DetermineOrder();
- }
- return FIXES_CALL_CALLBACK_1(OnFilterScriptExit, 1, FIXES_gscSpec@);
- }
- #if defined _ALS_OnFilterScriptExit
- #undef OnFilterScriptExit
- #else
- #define _ALS_OnFilterScriptExit
- #endif
- #define OnFilterScriptExit FIXES_OnFilterScriptExit
- forward OnFilterScriptExit();
- #endif
- /*
- * OnPlayerCommandText(playerid, cmdtext[])
- *
- * FIXES:
- * OnPlayerCommandText
- */
- #if FIX_OnPlayerCommandText
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- // ============================
- // START: OnPlayerCommandText
- // ============================
- #if FIX_OnPlayerCommandText
- if (cmdtext[0] == '\0' || (cmdtext[0] == '\1' && cmdtext[1] == '\0'))
- {
- return FIXES_CALL_CALLBACK_1(OnPlayerCommandText, 1, FIXES_gscSpec@is, playerid, FIXES_gscNULL);
- }
- else
- {
- return FIXES_CALL_CALLBACK_1(OnPlayerCommandText, 1, FIXES_gscSpec@is, playerid, cmdtext);
- }
- #endif
- // ============================
- // START: OnPlayerCommandText
- // ============================
- }
- #if defined _ALS_OnPlayerCommandText
- #undef OnPlayerCommandText
- #else
- #define _ALS_OnPlayerCommandText
- #endif
- #define OnPlayerCommandText FIXES_OnPlayerCommandText
- forward OnPlayerCommandText(playerid, cmdtext[]);
- #endif
- /*
- * OnPlayerConnect(playerid)
- *
- * Almost every fix uses this callback for initialisation. It is only
- * explicitly referenced for those fixes where this is all the code.
- *
- * FIXES:
- * TogglePlayerControllable
- * SetPlayerWorldBounds
- * GetPlayerColor
- * SetPlayerName
- * GetPlayerSkin
- * IsPlayerInCheckpoint
- * IsPlayerInRaceCheckpoint
- * GetPlayerWeapon
- * PutPlayerInVehicle
- * OnPlayerEnterVehicle
- * AllowTeleport
- * OnDialogResponse
- * SetSpawnInfo
- * AllowInteriorWeapons
- * TrainExit
- * Kick
- */
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_SetPlayerName || FIX_GetPlayerColor || FIX_GetPlayerSkin || FIX_IsPlayerInCheckpoint || FIX_IsPlayerInRaceCheckpoint || FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_AllowTeleport || FIX_OnDialogResponse || FIX_GetPlayerDialog || FIX_SetSpawnInfo || FIX_AllowInteriorWeapons || FIX_TrainExit || FIX_Kick
- public OnPlayerConnect(playerid)
- {
- FIXES_PRINTF("FIXES_OnPlayerConnect: %d", playerid);
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_AllowTeleport || FIX_AllowInteriorWeapons || FIX_TrainExit
- // This is only reset when the Game Mode changes or when a new
- // player connects, which is what we want. The other items are the
- // same, but must be done only once. This variable will tend to
- // hold data relevant only in the master script (the first
- // filterscript).
- #if FIX_Kick
- FIXES_gsPlayerBools[playerid] = e_FIXES_BOOLS_ON_PLAYER_CONNECT;
- #else
- FIXES_gsPlayerBools[playerid] = e_FIXES_BOOLS_NONE;
- #endif
- #endif
- #if !FIXES_Single
- if (!GetPVarInt(playerid, FIXES_pvarNotNewPlayer))
- #endif
- {
- FIXES_PRINTF("FIXES_OnPlayerConnect: First (%d)", FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE);
- // ======================
- // START: SetPlayerName
- // ======================
- #if FIX_SetPlayerName
- new
- name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, MAX_PLAYER_NAME);
- if (strcmp(name, FIXES_gscTempName) == 0)
- {
- Kick(playerid);
- }
- #endif
- // ======================
- // END: SetPlayerName
- // ======================
- // =============================
- // START: SetPlayerWorldBounds
- // =============================
- #if FIX_SetPlayerWorldBounds && !FIXES_Single
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] =
- 0.0;
- #endif
- // =============================
- // END: SetPlayerWorldBounds
- // =============================
- // =======================
- // START: SetPlayerColor
- // =======================
- #if FIX_GetPlayerColor
- SetPlayerColor(playerid, FIXES_gscPlayerColours[playerid % 100]);
- #endif
- // =======================
- // END: SetPlayerColor
- // =======================
- // ======================
- // START: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- #if FIXES_Single
- FIXES_gsPlayerSkin[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSkin, 0);
- #endif
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- // =============================
- // START: IsPlayerInCheckpoint
- // =============================
- #if FIX_IsPlayerInCheckpoint
- DisablePlayerCheckpoint(playerid);
- #endif
- // =============================
- // END: IsPlayerInCheckpoint
- // =============================
- // =================================
- // START: IsPlayerInRaceCheckpoint
- // =================================
- #if FIX_IsPlayerInRaceCheckpoint
- DisablePlayerRaceCheckpoint(playerid);
- #endif
- // =================================
- // END: IsPlayerInRaceCheckpoint
- // =================================
- // ========================
- // START: GetPlayerWeapon
- // ========================
- #if FIX_GetPlayerWeapon
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = -1;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, -1);
- #endif
- #endif
- // ========================
- // END: GetPlayerWeapon
- // ========================
- // =========================
- // START: OnDialogResponse
- // =========================
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- #if FIXES_Single
- FIXES_gsDialogID[playerid] = INVALID_DIALOG_ID;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerDialog, INVALID_DIALOG_ID);
- #endif
- #endif
- // =========================
- // END: OnDialogResponse
- // =========================
- // =====================
- // START: SetSpawnInfo
- // =====================
- #if FIX_SetSpawnInfo
- SetSpawnInfo(playerid, NO_TEAM, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
- #endif
- // =====================
- // END: SetSpawnInfo
- // =====================
- #if !FIXES_Single
- // No longer their first time.
- SetPVarInt(playerid, FIXES_pvarNotNewPlayer, 1);
- #endif
- }
- // =============
- // START: Kick
- // =============
- #if FIX_Kick
- new
- ret = FIXES_CALL_CALLBACK_1(OnPlayerConnect, 1, FIXES_gscSpec@i, playerid);
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_ON_PLAYER_CONNECT;
- return ret;
- #else
- return FIXES_CALL_CALLBACK_1(OnPlayerConnect, 1, FIXES_gscSpec@i, playerid);
- #endif
- // =============
- // END: Kick
- // =============
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect FIXES_OnPlayerConnect
- forward OnPlayerConnect(playerid);
- #endif
- /*
- * OnPlayerDisonnect(playerid, reason)
- *
- * FIXES:
- * SetPlayerAttachedObject
- * IsPlayerAttachedObjectSlotUsed
- * Kick
- */
- #if FIX_SetPlayerAttachedObject || FIX_IsPlayerAttachedObjSlotUsed || FIX_Kick || (FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle))
- public OnPlayerDisconnect(playerid, reason)
- {
- new
- ret = FIXES_CALL_CALLBACK_1(OnPlayerDisconnect, 1, FIXES_gscSpec@ii, playerid, reason);
- // ==========================
- // START: FIXES_SilentKick
- // ==========================
- #if FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle)
- new
- shift = FIXES_gsPlayerIP[playerid];
- if (shift != -1)
- {
- // Unban the IP (timed out).
- new
- ip[16];
- format(ip, sizeof (ip), "unbanip %d.%d.%d.%d", shift >>> 24, (shift >>> 16) & 0xFF, (shift >>> 8) & 0xFF, shift & 0xFF);
- FIXES_gsPlayerIP[playerid] = -1;
- }
- #endif
- // ==========================
- // END: FIXES_SilentKick
- // ==========================
- // ================================
- // START: SetPlayerAttachedObject
- // ================================
- #if FIX_SetPlayerAttachedObject
- #if !(FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle))
- new
- #endif
- shift = playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS;
- #pragma tabsize 4
- new
- slot = playerid / _FIXES_ATTACHMENTS;
- #if !FIXES_Single
- if (!_FIXES_gIsFilterscript)
- #endif
- {
- for (new i = 0; i != MAX_PLAYER_ATTACHED_OBJECTS; ++i)
- {
- if (FIXES_gsObjectSlots[slot] & 1 << shift + i)
- {
- RemovePlayerAttachedObject(playerid, i);
- }
- }
- }
- #pragma tabsize 4
- FIXES_gsObjectSlots[slot] &= ~((1 << MAX_PLAYER_ATTACHED_OBJECTS) - 1 << shift);
- #endif
- // ================================
- // END: SetPlayerAttachedObject
- // ================================
- // =======================================
- // START: IsPlayerAttachedObjectSlotUsed
- // =======================================
- #if FIX_IsPlayerAttachedObjSlotUsed && !FIX_SetPlayerAttachedObject
- FIXES_gsObjectSlots[playerid / _FIXES_ATTACHMENTS] &= ~((1 << MAX_PLAYER_ATTACHED_OBJECTS) - 1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS);
- #endif
- // =======================================
- // END: IsPlayerAttachedObjectSlotUsed
- // =======================================
- // =============
- // START: Kick
- // =============
- #if FIX_Kick
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_KICKED)
- {
- // Stop the timer if it is still running.
- KillTimer(GetPVarInt(playerid, FIXES_pvarKick));
- }
- #endif
- // =============
- // END: Kick
- // =============
- return ret;
- }
- #if defined _ALS_OnPlayerDisconnect
- #undef OnPlayerDisconnect
- #else
- #define _ALS_OnPlayerDisconnect
- #endif
- #define OnPlayerDisconnect FIXES_OnPlayerDisconnect
- forward OnPlayerDisconnect(playerid, reason);
- #endif
- /*
- * OnPlayerDeath(playerid, killerid, reason)
- *
- * FIXES:
- * OnPlayerDeath
- */
- #if FIX_OnPlayerDeath
- public OnPlayerDeath(playerid, killerid, reason)
- {
- #if !FIXES_Single
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- #endif
- {
- // ======================
- // START: OnPlayerDeath
- // ======================
- #if FIX_OnPlayerDeath
- static
- sAnimlib[32],
- sAnimname[32];
- GetAnimationName(FIXES_gsLastAnimation[playerid], sAnimlib, sizeof (sAnimlib), sAnimname, sizeof (sAnimname));
- if (!strcmp(sAnimlib, "PED", true))
- {
- ClearAnimations(playerid);
- }
- #endif
- // ======================
- // END: OnPlayerDeath
- // ======================
- }
- return FIXES_CALL_CALLBACK_1(OnPlayerDeath, 1, FIXES_gscSpec@iii, playerid, killerid, reason);
- }
- #if defined _ALS_OnPlayerDeath
- #undef OnPlayerDeath
- #else
- #define _ALS_OnPlayerDeath
- #endif
- #define OnPlayerDeath FIXES_OnPlayerDeath
- forward OnPlayerDeath(playerid, killerid, reason);
- #endif
- /*
- * FIXES_SpawnPlayer(playerid)
- *
- * FIXES:
- * SpawnPlayer
- */
- #if FIX_SpawnPlayer
- stock FIXES_SpawnPlayer(playerid)
- {
- // Valid "playerid" check inside "GetPlayerVehicleID".
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- new
- Float:x,
- Float:y,
- Float:z;
- // Remove them without the animation.
- GetVehiclePos(vid, x, y, z);
- SetPlayerPos(playerid, x, y, z);
- }
- return SpawnPlayer(playerid);
- }
- #if defined _ALS_SpawnPlayer
- #undef SpawnPlayer
- #else
- native BAD_SpawnPlayer(playerid) = SpawnPlayer;
- #define _ALS_SpawnPlayer
- #endif
- #define SpawnPlayer FIXES_SpawnPlayer
- #endif
- /*
- * FIXES_SetPlayerName(playerid, name[])
- *
- * FIXES:
- * SetPlayerName
- */
- #if FIX_SetPlayerName
- stock FIXES_SetPlayerName(playerid, name[])
- {
- if (strcmp(name, FIXES_gscTempName) == 0)
- {
- return 0;
- }
- static
- sOldName[MAX_PLAYER_NAME];
- GetPlayerName(playerid, sOldName, sizeof (sOldName));
- if (strcmp(name, sOldName, true) == 0)
- {
- return 0;
- }
- SetPlayerName(playerid, FIXES_gscTempName);
- new
- retval = SetPlayerName(playerid, name);
- if (retval != 1)
- {
- SetPlayerName(playerid, sOldName);
- }
- return retval;
- }
- #if defined _ALS_SetPlayerName
- #undef SetPlayerName
- #else
- native BAD_SetPlayerName(playerid, const name[]) = SetPlayerName;
- #define _ALS_SetPlayerName
- #endif
- #define SetPlayerName FIXES_SetPlayerName
- #endif
- /*
- * OnPlayerSpawn(playerid)
- *
- * FIXES:
- * GetPlayerSkin
- * TogglePlayerControllable
- */
- #if FIX_GetPlayerSkin || FIX_TogglePlayerControllable
- public OnPlayerSpawn(playerid)
- {
- // ======================
- // START: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- #if FIXES_Single
- FIXES_gsPlayerSkin[playerid] = GetPlayerSkin(playerid);
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSkin, GetPlayerSkin(playerid));
- #endif
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- // =================================
- // START: TogglePlayerControllable
- // =================================
- #if FIX_TogglePlayerControllable
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
- #endif
- // =================================
- // END: TogglePlayerControllable
- // =================================
- return FIXES_CALL_CALLBACK_1(OnPlayerSpawn, 1, FIXES_gscSpec@i, playerid);
- }
- #if defined _ALS_OnPlayerSpawn
- #undef OnPlayerSpawn
- #else
- #define _ALS_OnPlayerSpawn
- #endif
- #define OnPlayerSpawn FIXES_OnPlayerSpawn
- forward OnPlayerSpawn(playerid);
- #endif
- /*
- * OnVehicleMod(playerid, vehicleid, componentid)
- *
- * FIXES:
- * OnVehicleMod
- */
- #if FIX_OnVehicleMod
- public OnVehicleMod(playerid, vehicleid, componentid)
- {
- #if !FIXES_Single
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
- {
- return FIXES_CALL_CALLBACK_1(OnVehicleMod, 1, FIXES_gscSpec@iii, playerid, vehicleid, componentid);
- }
- #endif
- // =====================
- // START: OnVehicleMod
- // =====================
- new
- modelid = GetVehicleModel(vehicleid);
- if (400 <= modelid <= 611)
- {
- switch (componentid)
- {
- case 1000 .. 1191:
- {
- if (FIXES_gscVehicleMods[modelid - 400][(componentid - 1000) >>> 5] & (1 << ((componentid - 1000) & 0b00011111)))
- {
- return FIXES_CALL_CALLBACK_1(OnVehicleMod, 1, FIXES_gscSpec@iii, playerid, vehicleid, componentid);
- }
- }
- case 1192, 1193:
- {
- if (modelid == 576)
- {
- // This save a whole cell off EVERY other vehicle! This
- // is the ONLY vehicle with any mods over "6 * 32 + 999"
- // (1191), the highest value you can fit in 6 cells of a
- // bit array (minus 1000).
- return FIXES_CALL_CALLBACK_1(OnVehicleMod, 1, FIXES_gscSpec@iii, playerid, vehicleid, componentid);
- }
- }
- }
- }
- // Desync the player entirely.
- FIXES_BlockUpdate(playerid, true);
- return 0;
- // =====================
- // END: OnVehicleMod
- // =====================
- }
- #if defined _ALS_OnVehicleMod
- #undef OnVehicleMod
- #else
- #define _ALS_OnVehicleMod
- #endif
- #define OnVehicleMod FIXES_OnVehicleMod
- forward OnVehicleMod(playerid, vehicleid, componentid);
- #endif
- /*
- * FIXES_SetPlayerSkin(playerid, skinid)
- *
- * FIXES:
- * GetPlayerSkin
- * SetPlayerSkin
- */
- #if FIX_GetPlayerSkin || FIX_SetPlayerSkin
- stock FIXES_SetPlayerSkin(playerid, skinid)
- {
- // ======================
- // START: SetPlayerSkin
- // ======================
- #if FIX_SetPlayerSkin
- new
- vehicleid = GetPlayerVehicleID(playerid);
- if (vehicleid)
- {
- new
- seat = GetPlayerVehicleSeat(playerid);
- ClearAnimations(playerid);
- new
- ret = SetPlayerSkin(playerid, skinid);
- PutPlayerInVehicle(playerid, vehicleid, seat);
- // ======================
- // START: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- #if FIXES_Single
- FIXES_gsPlayerSkin[playerid] = skinid;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSkin, skinid);
- #endif
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- return ret;
- }
- // ======================
- // START: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- else
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- #endif
- // ======================
- // END: SetPlayerSkin
- // ======================
- // ======================
- // START: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- #if FIXES_Single
- FIXES_gsPlayerSkin[playerid] = skinid;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSkin, skinid);
- #endif
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- return SetPlayerSkin(playerid, skinid);
- }
- #if defined _ALS_SetPlayerSkin
- #undef SetPlayerSkin
- #else
- native BAD_SetPlayerSkin(playerid, skinid) = SetPlayerSkin;
- #define _ALS_SetPlayerSkin
- #endif
- #define SetPlayerSkin FIXES_SetPlayerSkin
- #endif
- /*
- * FIXES_GetPlayerSkin(playerid, skinid)
- *
- * FIXES:
- * GetPlayerSkin
- */
- #if FIX_GetPlayerSkin
- stock FIXES_GetPlayerSkin(playerid)
- {
- #if FIXES_Single
- return FIXES_gsPlayerSkin[playerid];
- #else
- return GetPVarInt(playerid, FIXES_pvarPlayerSkin);
- #endif
- }
- #if defined _ALS_GetPlayerSkin
- #undef GetPlayerSkin
- #else
- native BAD_GetPlayerSkin(playerid) = GetPlayerSkin;
- #define _ALS_GetPlayerSkin
- #endif
- #define GetPlayerSkin FIXES_GetPlayerSkin
- #endif
- /*
- * FIXES_GetWeaponName(weaponid, weapon[], len)
- *
- * FIXES:
- * GetWeaponName
- */
- #if FIX_GetWeaponName
- stock FIXES_GetWeaponName(weaponid, weapon[], len)
- {
- switch (weaponid)
- {
- case 18:
- {
- weapon[0] = 0;
- strcat(weapon, "Molotov Cocktail", len);
- return 1;
- }
- case 44:
- {
- weapon[0] = 0;
- strcat(weapon, "Thermal Goggles", len);
- return 1;
- }
- case 45:
- {
- weapon[0] = 0;
- strcat(weapon, "Night Vision Goggles", len);
- return 1;
- }
- default:
- {
- return GetWeaponName(weaponid, weapon, len);
- }
- }
- return 0;
- }
- #if defined _ALS_GetWeaponName
- #undef GetWeaponName
- #else
- native BAD_GetWeaponName(weaponid, weapon[], len) = GetWeaponName;
- #define _ALS_GetWeaponName
- #endif
- #define GetWeaponName FIXES_GetWeaponName
- #endif
- /*
- * OnPlayerUpdate(playerid)
- *
- * FIXES:
- * SetPlayerWorldBounds
- * TogglePlayerControllable
- * AllowInteriorWeapons
- * OnPlayerDeath
- * Kick
- * OnVehicleMod
- */
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_AllowInteriorWeapons || FIX_OnPlayerEnterVehicle || FIX_OnPlayerDeath || FIX_Kick || FIX_OnVehicleMod
- public OnPlayerUpdate(playerid)
- {
- // =============================
- // BEGIN: OnPlayerEnterVehicle
- // =============================
- #if FIX_OnPlayerEnterVehicle || FIX_Kick || FIX_OnVehicleMod
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_BLOCK)
- {
- return 0;
- }
- #endif
- // =============================
- // END: OnPlayerEnterVehicle
- // =============================
- #if !FIXES_Single
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
- {
- return FIXES_CALL_CALLBACK_2(OnPlayerUpdate, 1, FIXES_gscSpec@i, playerid);
- }
- #endif
- #if FIX_OnPlayerEnterVehicle || FIX_AllowInteriorWeapons || FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- new
- e_FIXES_BOOLS:pbools = FIXES_gsPlayerBools[playerid];
- #endif
- // =============================
- // START: AllowInteriorWeapons
- // =============================
- #if FIX_AllowInteriorWeapons
- //if (FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR && GetPlayerInterior(playerid) && GetPlayerWeapon(playerid))
- if (pbools & e_FIXES_BOOLS_INTERIOR)
- {
- // DONE: May need integration with "FIX_GetPlayerWeapon".
- SetPlayerArmedWeapon(playerid, 0);
- }
- #endif
- // ============================
- // END: AllowInteriorWeapons
- // ============================
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- new
- ud,
- lr,
- keys;
- GetPlayerKeys(playerid, keys, ud, lr);
- #endif
- #if FIX_SetPlayerWorldBounds && !FIX_TogglePlayerControllable
- #pragma unused ud, lr
- #endif
- // =============================
- // START: SetPlayerWorldBounds
- // =============================
- #if FIX_SetPlayerWorldBounds
- if (pbools & e_FIXES_BOOLS_WORLDBOUNDS && keys & _FIXES_KEY_AIM)
- {
- new
- Float:x,
- Float:y,
- Float:z;
- GetPlayerPos(playerid, x, y, z);
- 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])
- {
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = x;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = y;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = z;
- }
- else
- {
- 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]);
- }
- }
- #endif
- // =============================
- // END: SetPlayerWorldBounds
- // =============================
- // ======================
- // START: OnPlayerDeath
- // ======================
- #if FIX_OnPlayerDeath
- FIXES_gsLastAnimation[playerid] = GetPlayerAnimationIndex(playerid);
- #endif
- // ======================
- // END: OnPlayerDeath
- // ======================
- // =================================
- // START: TogglePlayerControllable
- // =================================
- #if FIX_TogglePlayerControllable
- // MUST come last.
- if (pbools & e_FIXES_BOOLS_UNCONTROLLABLE)
- {
- // Keys based sync blocking, modified based on a post by Slice:
- // http://forum.sa-mp.com/showpost.php?p=876854&postcount=1
- // Use "playerid" here as it's a variable that already exists,
- // but note that after this point, you CANNOT use "playerid" as
- // it has been "clobbered" (and yes, that's the technical term).
- // This is just to avoid "statement has no effect" warnings.
- // ALWAYS return 0 in this case, regardless of what other
- // callbacks return.
- playerid = FIXES_CALL_CALLBACK_2(OnPlayerUpdate, 1, FIXES_gscSpec@i, playerid);
- if (keys || ud || lr)
- {
- return 0;
- }
- else
- {
- return playerid;
- }
- }
- #endif
- // =================================
- // END: TogglePlayerControllable
- // =================================
- return FIXES_CALL_CALLBACK_2(OnPlayerUpdate, 1, FIXES_gscSpec@i, playerid);
- }
- #if defined _ALS_OnPlayerUpdate
- #undef OnPlayerUpdate
- #else
- #define _ALS_OnPlayerUpdate
- #endif
- #define OnPlayerUpdate FIXES_OnPlayerUpdate
- forward OnPlayerUpdate(playerid);
- #endif
- /*
- * FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
- *
- * TODO: Modify this to remove aim animations when they get to the boundaries.
- *
- * FIXES:
- * SetPlayerWorldBounds
- */
- #if FIX_SetPlayerWorldBounds
- #if FIXES_Single
- stock FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
- {
- if (0 <= playerid < MAX_PLAYERS)
- {
- FIXES_PRINTF("Call SetPlayerWorldBounds");
- if (x_max == x_min || y_max == y_min)
- {
- // Impossibly small area, disable checks entirely.
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_WORLDBOUNDS;
- return SetPlayerWorldBounds(playerid, _FIXES_INFINITY, _FIXES_N_INFINITY, _FIXES_INFINITY, _FIXES_N_INFINITY);
- }
- // This code could do with a way to mostly remove the checks. Maybe
- // when setting everything to FIXES_INFINITY (with default
- // parameters).
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_WORLDBOUNDS;
- new
- Float:tmp;
- if (x_max < x_min)
- {
- tmp = x_min;
- x_min = x_max;
- x_max = tmp;
- }
- if (y_max < y_min)
- {
- tmp = y_min;
- y_min = y_max;
- y_max = tmp;
- }
- // Give a little leway so this fix isn't noticed if you're not
- // trying to break through the world bounds. Leway removed in
- // favour of keys.
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] = x_min;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] = x_max;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] = y_min;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] = y_max;
- GetPlayerPos(playerid, tmp, tmp, tmp);
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = (x_max - x_min) / 2 + x_min;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = (y_max - y_min) / 2 + y_min;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = tmp;
- return SetPlayerWorldBounds(playerid, x_max, x_min, y_max, y_min);
- }
- return 0;
- }
- #else
- forward _FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min);
- stock FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
- {
- if (0 <= playerid < MAX_PLAYERS)
- {
- FIXES_PRINTF("Call SetPlayerWorldBounds");
- CallRemoteFunction(FIXES_gscSetPlayerWorldBounds, FIXES_gscSpec@iffff, playerid, x_max, x_min, y_max, y_min);
- return getproperty(5, FIXES_gscReturnProperty);
- }
- return 0;
- }
- public _FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
- {
- FIXES_PRINTF("_FIXES_SetPlayerWorldBounds: %d %.2f %.2f %.2f %.2f", playerid, x_max, x_min, y_max, y_min);
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_PRINTF("SetPlayerWorldBounds");
- //if (x_max == _FIXES_INFINITY && x_min == _FIXES_INFINITY && y_max == _FIXES_INFINITY && y_min == _FIXES_INFINITY)
- if (x_max == x_min || y_max == y_min)
- {
- // Impossibly small area, disable checks entirely.
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_WORLDBOUNDS;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] =
- 0.0;
- setproperty(5, FIXES_gscReturnProperty, SetPlayerWorldBounds(playerid, _FIXES_INFINITY, _FIXES_N_INFINITY, _FIXES_INFINITY, _FIXES_N_INFINITY));
- return -1;
- }
- // This code could do with a way to mostly remove the checks. Maybe
- // when setting everything to FIXES_INFINITY (with default
- // parameters).
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_WORLDBOUNDS;
- new
- Float:tmp;
- if (x_max < x_min)
- {
- tmp = x_min;
- x_min = x_max;
- x_max = tmp;
- }
- if (y_max < y_min)
- {
- tmp = y_min;
- y_min = y_max;
- y_max = tmp;
- }
- // Give a little leway so this fix isn't noticed if you're not
- // trying to break through the world bounds. Leway removed in
- // favour of keys.
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] = x_min;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] = x_max;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] = y_min;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] = y_max;
- GetPlayerPos(playerid, tmp, tmp, tmp);
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = (x_max - x_min) / 2 + x_min;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = (y_max - y_min) / 2 + y_min;
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = tmp;
- setproperty(5, FIXES_gscReturnProperty, SetPlayerWorldBounds(playerid, x_max, x_min, y_max, y_min));
- }
- return 0;
- }
- #endif
- #if defined _ALS_SetPlayerWorldBounds
- #undef SetPlayerWorldBounds
- #else
- native BAD_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min) = SetPlayerWorldBounds;
- #define _ALS_SetPlayerWorldBounds
- #endif
- #define SetPlayerWorldBounds FIXES_SetPlayerWorldBounds
- #endif
- /*
- * FIXES_TogglePlayerControllable(playerid, toggle)
- *
- * FIXES:
- * TogglePlayerControllable
- */
- #if FIX_TogglePlayerControllable
- #if FIXES_Single
- stock FIXES_TogglePlayerControllable(playerid, toggle)
- {
- if (TogglePlayerControllable(playerid, toggle))
- {
- if (toggle)
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_UNCONTROLLABLE;
- }
- return 1;
- }
- return 0;
- }
- #else
- forward _FIXES_TogglePlayerControllable(playerid, toggle);
- stock FIXES_TogglePlayerControllable(playerid, toggle)
- {
- if (0 <= playerid < MAX_PLAYERS)
- {
- CallRemoteFunction(FIXES_gscTogglePlayerControl, FIXES_gscSpec@ii, playerid, toggle);
- return getproperty(5, FIXES_gscReturnProperty);
- }
- return 0;
- }
- public _FIXES_TogglePlayerControllable(playerid, toggle)
- {
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- if (toggle)
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_UNCONTROLLABLE;
- }
- setproperty(5, FIXES_gscReturnProperty, TogglePlayerControllable(playerid, toggle));
- }
- }
- #endif
- #if defined _ALS_TogglePlayerControllable
- #undef TogglePlayerControllable
- #else
- native BAD_TogglePlayerControllable(playerid, toggle) = TogglePlayerControllable;
- #define _ALS_TogglePlayerControllable
- #endif
- #define TogglePlayerControllable FIXES_TogglePlayerControllable
- #endif
- #if FIX_AllowInteriorWeapons
- public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
- {
- // =============================
- // BEGIN: AllowInteriorWeapons
- // =============================
- #if FIX_AllowInteriorWeapons
- if (newinteriorid)
- {
- if (FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR)
- {
- // This only needs doing here if "GetPlayerWeapon" is set.
- // If it isn't, even though "AllowInteriorWeapons" can use
- // this code on its own, it doesn't as "OnPlayerUpdate"
- // takes care of it all.
- // TODO: Rewrite this code to use a single bit to indicate
- // if a player can have a weapon or not, and just use the in
- // the "OnPlayerUpdate" callback, instead of several checks.
- // DONE!
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_INTERIOR;
- #if !FIXES_Single
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- #endif
- {
- SetPlayerArmedWeapon(playerid, 0);
- #if FIX_GetPlayerWeapon
- if (IsPlayerInAnyVehicle(playerid))
- {
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, 0);
- #endif
- }
- #endif
- }
- }
- }
- else
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_INTERIOR;
- }
- #endif
- // ===========================
- // END: AllowInteriorWeapons
- // ===========================
- return FIXES_CALL_CALLBACK_2(OnPlayerInteriorChange, 1, FIXES_gscSpec@iii, playerid, newinteriorid, oldinteriorid);
- }
- #if defined _ALS_OnPlayerInteriorChange
- #undef OnPlayerInteriorChange
- #else
- #define _ALS_OnPlayerInteriorChange
- #endif
- #define OnPlayerInteriorChange FIXES_OnPlayerInteriorChange
- forward OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
- #endif
- /*
- * FIXES_BlockUpdate(playerid, bool:block)
- *
- * Block a player from using OnPlayerUpdate at all.
- */
- #if FIX_OnPlayerEnterVehicle || FIX_Kick || FIX_OnVehicleMod
- static stock FIXES_BlockUpdate(playerid, bool:block, kick = 6)
- {
- if (kick)
- {
- #if FIXES_SilentKick
- new
- ip[22];
- GetPlayerIp(playerid, ip, sizeof (ip));
- format(ip, sizeof (ip), "banip %s", ip);
- SendRconCommand(ip);
- FIXES_gsPlayerIP[playerid] = strval(ip[kick]) << 24;
- kick = strfind(ip, FIXES_gscDot, false, kick) + 1;
- FIXES_gsPlayerIP[playerid] |= strval(ip[kick]) << 16;
- kick = strfind(ip, FIXES_gscDot, false, kick) + 1;
- FIXES_gsPlayerIP[playerid] |= strval(ip[kick]) << 8;
- kick = strfind(ip, FIXES_gscDot, false, kick) + 1;
- FIXES_gsPlayerIP[playerid] |= strval(ip[kick]);
- #else
- Kick(playerid);
- #endif
- }
- if (block)
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_BLOCK;
- return 0;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_BLOCK;
- return 1;
- }
- }
- #endif
- /*
- * OnPlayerStateChange(playerid, newstate, oldstate)
- *
- * FIXES:
- * HydraSniper
- * GetPlayerWeapon
- * PutPlayerInVehicle
- * TrainExit
- */
- #if FIX_HydraSniper || FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_TrainExit
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- #if !FIXES_Single
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
- {
- return FIXES_CALL_CALLBACK_1(OnPlayerStateChange, 1, FIXES_gscSpec@iii, playerid, newstate, oldstate);
- }
- #endif
- // =============================
- // BEGIN: OnPlayerEnterVehicle
- // =============================
- #if FIX_OnPlayerEnterVehicle
- if (newstate == PLAYER_STATE_PASSENGER)
- {
- new
- model = GetVehicleModel(GetPlayerVehicleID(playerid)) - 400;
- if (0 <= model <= 211)
- {
- new
- seat = GetPlayerVehicleSeat(playerid);
- if (seat != 128)
- {
- model = (FIXES_gscMaxPassengers[model >>> 3] >>> ((model & 7) << 2)) & 0xF;
- if (model == 0 || model == 15)
- {
- // Shouldn't be in this vehicle at all.
- FIXES_BlockUpdate(playerid, true);
- }
- else if (!(0 < seat <= model))
- {
- // In an out of range seat.
- FIXES_BlockUpdate(playerid, true);
- }
- }
- }
- else
- {
- FIXES_BlockUpdate(playerid, true);
- }
- }
- else if (newstate == PLAYER_STATE_DRIVER)
- {
- new
- model = GetPlayerVehicleSeat(playerid);
- if (model != 128)
- {
- if (model == 0)
- {
- model = GetVehicleModel(GetPlayerVehicleID(playerid)) - 400;
- if (!(0 <= model <= 211) || FIXES_gscMaxPassengers[model >>> 3] >>> ((model & 7) << 2) & 0xF == 15)
- {
- // In an invalid vehicle (one you can't drive).
- FIXES_BlockUpdate(playerid, true);
- }
- }
- else
- {
- // They are a driver, but not in the driver's seat.
- FIXES_BlockUpdate(playerid, true);
- }
- }
- #if FIX_HydraSniper
- else
- {
- model = GetVehicleModel(GetPlayerVehicleID(playerid));
- }
- #endif
- #if !FIX_HydraSniper
- }
- #endif
- #endif
- // =============================
- // END: OnPlayerEnterVehicle
- // =============================
- // ====================
- // BEGIN: HydraSniper
- // ====================
- #if FIX_HydraSniper
- #if !FIX_OnPlayerEnterVehicle
- // Only called if the same check above isn't called.
- if (newstate == PLAYER_STATE_DRIVER)
- {
- new
- model = GetVehicleModel(GetPlayerVehicleID(playerid));
- #endif
- if (GetPlayerWeapon(playerid) == 34 && (model == 520 || model == 425))
- {
- SetPlayerArmedWeapon(playerid, 0);
- #if FIX_GetPlayerWeapon
- // This is the first cross-dependednt fix.
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, 0);
- #endif
- #endif
- }
- }
- #endif
- // ====================
- // END: HydraSniper
- // ====================
- #if FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_TrainExit
- #if PLAYER_STATE_PASSENGER != PLAYER_STATE_DRIVER + 1
- #error FIX_GetPlayerWeapon/FIX_PutPlayerInVehicle state assertation failed.
- #endif
- if (PLAYER_STATE_DRIVER <= oldstate <= PLAYER_STATE_PASSENGER)
- //if (oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
- {
- #if FIX_PutPlayerInVehicle || FIX_TrainExit
- new
- e_FIXES_BOOLS:bools = FIXES_gsPlayerBools[playerid];
- #endif
- // ========================
- // BEGIN: GetPlayerWeapon
- // ========================
- #if FIX_GetPlayerWeapon
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = -1;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, -1);
- #endif
- #endif
- // ========================
- // END: GetPlayerWeapon
- // ========================
- // ==================
- // BEGIN: TrainExit
- // ==================
- #if FIX_TrainExit
- FIXES_PRINTF("train exit");
- if (bools & e_FIXES_BOOLS_PUT_IN_TRAIN)
- {
- FIXES_PRINTF("OK");
- SetCameraBehindPlayer(playerid);
- bools &= ~e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- #endif
- // ==================
- // END: TrainExit
- // ==================
- // ===========================
- // START: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- // Update their vehicle once we KNOW the client has done the
- // removal from the vehicle.
- if (bools & e_FIXES_BOOLS_PUT_IN_VEHICLE)
- {
- new
- vid = FIXES_gsVehicleSeatData[playerid] & 0x00FFFFFF;
- // Limited to "only" 16777216 vehicles and 256 seats.
- PutPlayerInVehicle(playerid, vid, FIXES_gsVehicleSeatData[playerid] >>> 24);
- bools &= ~e_FIXES_BOOLS_PUT_IN_VEHICLE;
- #if FIX_TrainExit
- switch (GetVehicleModel(vid))
- {
- case 449, 537, 538:
- {
- bools |= e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- }
- #endif
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle || FIX_TrainExit
- FIXES_gsPlayerBools[playerid] = bools;
- #endif
- }
- #endif
- return FIXES_CALL_CALLBACK_1(OnPlayerStateChange, 1, FIXES_gscSpec@iii, playerid, newstate, oldstate);
- }
- #if defined _ALS_OnPlayerStateChange
- #undef OnPlayerStateChange
- #else
- #define _ALS_OnPlayerStateChange
- #endif
- #define OnPlayerStateChange FIXES_OnPlayerStateChange
- forward OnPlayerStateChange(playerid, newstate, oldstate);
- #endif
- /*
- * FIXES_GivePlayerWeapon(playerid, weaponid, ammo)
- *
- * FIXES:
- * HydraSniper
- */
- #if FIX_HydraSniper
- stock FIXES_GivePlayerWeapon(playerid, weaponid, ammo)
- {
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- vid = GetVehicleModel(vid);
- if (weaponid == 34 && (vid == 520 || vid == 425))
- {
- vid = GivePlayerWeapon(playerid, weaponid, ammo);
- SetPlayerArmedWeapon(playerid, 0);
- #if FIX_GetPlayerWeapon
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, 0);
- #endif
- #endif
- return vid;
- }
- }
- return GivePlayerWeapon(playerid, weaponid, ammo);
- }
- #if defined _ALS_GivePlayerWeapon
- #undef GivePlayerWeapon
- #else
- native BAD_GivePlayerWeapon(playerid, weaponid, ammo) = GivePlayerWeapon;
- #define _ALS_GivePlayerWeapon
- #endif
- #define GivePlayerWeapon FIXES_GivePlayerWeapon
- #endif
- /*
- * FIXES_SetPlayerArmedWeapon(playerid, weaponid)
- *
- * FIXES:
- * GetPlayerWeapon
- */
- #if FIX_GetPlayerWeapon
- stock FIXES_SetPlayerArmedWeapon(playerid, weaponid)
- {
- #if FIX_AllowInteriorWeapons
- if (FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR && GetPlayerInterior(playerid))
- {
- // Not allowed weapons.
- return 0;
- }
- #endif
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- #if FIX_HydraSniper
- vid = GetVehicleModel(vid);
- if (weaponid == 34 && (vid == 520 || vid == 425))
- {
- return 0;
- }
- #endif
- //FIXES_gsPlayerWeapon[playerid] = weaponid;
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = weaponid;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, weaponid);
- #endif
- }
- return SetPlayerArmedWeapon(playerid, weaponid);
- }
- #if defined _ALS_SetPlayerArmedWeapon
- #undef SetPlayerArmedWeapon
- #else
- native BAD_SetPlayerArmedWeapon(playerid, weaponid) = SetPlayerArmedWeapon;
- #define _ALS_SetPlayerArmedWeapon
- #endif
- #define SetPlayerArmedWeapon FIXES_SetPlayerArmedWeapon
- #endif
- /*
- * FIXES_GetPlayerWeapon(playerid)
- *
- * FIXES:
- * GetPlayerWeapon
- */
- #if FIX_GetPlayerWeapon
- stock FIXES_GetPlayerWeapon(playerid)
- {
- #if FIXES_Single
- new
- ret = FIXES_gsPlayerWeapon[playerid];
- #else
- new
- ret = GetPVarInt(playerid, FIXES_pvarPlayerWeapon);
- #endif
- if (ret == -1)
- {
- return GetPlayerWeapon(playerid);
- }
- return ret;
- }
- #if defined _ALS_GetPlayerWeapon
- #undef GetPlayerWeapon
- #else
- native BAD_GetPlayerWeapon(playerid) = GetPlayerWeapon;
- #define _ALS_GetPlayerWeapon
- #endif
- #define GetPlayerWeapon FIXES_GetPlayerWeapon
- #endif
- /*
- * FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid)
- *
- * FIXES:
- * PutPlayerInVehicle
- */
- #if FIX_PutPlayerInVehicle || FIX_TrainExit
- #if FIXES_Single
- stock FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid)
- {
- // ==================
- // BEGIN: TrainExit
- // ==================
- #if FIX_TrainExit
- FIXES_PRINTF("TrainExit %d", GetVehicleModel(vehicleid));
- switch (GetVehicleModel(vehicleid))
- {
- case 449, 537, 538:
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- }
- #endif
- // ==================
- // END: TrainExit
- // ==================
- // ===========================
- // BEGIN: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- new
- Float:x,
- Float:y,
- Float:z;
- // Remove them without the animation.
- GetVehiclePos(vid, x, y, z);
- SetPlayerPos(playerid, x, y, z);
- FIXES_gsVehicleSeatData[playerid] = seatid << 24 | vehicleid;
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_VEHICLE;
- return 1;
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- return PutPlayerInVehicle(playerid, vehicleid, seatid);
- }
- #else
- forward _FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid, from, data);
- stock FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid)
- {
- FIXES_PRINTF("NOT SINGLE");
- // ===========================
- // BEGIN: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- new
- Float:x,
- Float:y,
- Float:z;
- // Remove them without the animation.
- GetVehiclePos(vid, x, y, z);
- SetPlayerPos(playerid, x, y, z);
- CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iiiii, playerid, vehicleid, seatid, 1, vid);
- return 1;
- }
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- // ==================
- // BEGIN: TrainExit
- // ==================
- #if FIX_TrainExit
- new
- model = GetVehicleModel(vehicleid);
- switch (model)
- {
- case 449, 537, 538:
- {
- CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iiiii, playerid, vehicleid, seatid, 0, model);
- //FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- }
- #endif
- // ==================
- // END: TrainExit
- // ==================
- return PutPlayerInVehicle(playerid, vehicleid, seatid);
- }
- public _FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid, from, data)
- {
- FIXES_PRINTF("IN CHARGE: %d", (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE));
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- // ===========================
- // BEGIN: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- if (from)
- {
- FIXES_gsVehicleSeatData[playerid] = seatid << 24 | vehicleid;
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_VEHICLE;
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- // ==================
- // BEGIN: TrainExit
- // ==================
- #if FIX_TrainExit
- #if FIX_PutPlayerInVehicle
- else
- #else
- if (!from)
- #endif
- {
- switch (data)
- {
- case 449, 537, 538:
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- }
- }
- #endif
- // ==================
- // END: TrainExit
- // ==================
- }
- return 1;
- }
- #endif
- #if defined _ALS_PutPlayerInVehicle
- #undef PutPlayerInVehicle
- #else
- native BAD_PutPlayerInVehicle(playerid, vehicleid, seatid) = PutPlayerInVehicle;
- #define _ALS_PutPlayerInVehicle
- #endif
- #define PutPlayerInVehicle FIXES_PutPlayerInVehicle
- #endif
- /*
- * FIXES_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size)
- *
- * FIXES:
- * SetPlayerCheckpoint
- */
- #if FIX_SetPlayerCheckpoint
- stock FIXES_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size)
- {
- DisablePlayerCheckpoint(playerid);
- return SetPlayerCheckpoint(playerid, x, y, z, size);
- }
- #if defined _ALS_SetPlayerCheckpoint
- #undef SetPlayerCheckpoint
- #else
- native BAD_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size) = SetPlayerCheckpoint;
- #define _ALS_SetPlayerCheckpoint
- #endif
- #define SetPlayerCheckpoint FIXES_SetPlayerCheckpoint
- #endif
- /*
- * FIXES_SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size)
- *
- * FIXES:
- * SetPlayerRaceCheckpoint
- */
- #if FIX_SetPlayerRaceCheckpoint
- stock FIXES_SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size)
- {
- DisablePlayerRaceCheckpoint(playerid);
- return SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nextz, size);
- }
- #if defined _ALS_SetPlayerRaceCheckpoint
- #undef SetPlayerRaceCheckpoint
- #else
- native BAD_SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size) = SetPlayerRaceCheckpoint;
- #define _ALS_SetPlayerRaceCheckpoint
- #endif
- #define SetPlayerRaceCheckpoint FIXES_SetPlayerRaceCheckpoint
- #endif
- /*
- * Text:FIXES_TextDrawCreate(Float:x, Float:y, text[])
- *
- * FIXES:
- * TextDrawCreate
- */
- #if FIX_TextDrawCreate
- stock Text:FIXES_TextDrawCreate(Float:x, Float:y, text[])
- {
- if (text[0] == '\0' || text[0] == '\1' && text[1] == '\0')
- {
- return TextDrawCreate(x, y, " ");
- }
- else
- {
- return TextDrawCreate(x, y, text);
- }
- }
- #if defined _ALS_TextDrawCreate
- #undef TextDrawCreate
- #else
- native Text:BAD_TextDrawCreate(Float:x, Float:y, text[]) = TextDrawCreate;
- #define _ALS_TextDrawCreate
- #endif
- #define TextDrawCreate FIXES_TextDrawCreate
- #endif
- /*
- * FIXES_TextDrawSetString(Text:text, string[])
- *
- * FIXES:
- * TextDrawSetString
- */
- #if FIX_TextDrawSetString
- stock FIXES_TextDrawSetString(Text:text, string[])
- {
- if (string[0] == '\0' || string[0] == '\1' && string[1] == '\0')
- {
- return TextDrawSetString(text, " ");
- }
- else
- {
- return TextDrawSetString(text, string);
- }
- }
- #if defined _ALS_TextDrawSetString
- #undef TextDrawSetString
- #else
- native BAD_TextDrawSetString(Text:text, string[]) = TextDrawSetString;
- #define _ALS_TextDrawSetString
- #endif
- #define TextDrawSetString FIXES_TextDrawSetString
- #endif
- /*
- * FIXES_AllowInteriorWeapons(allow)
- *
- * FIXES:
- * AllowInteriorWeapons
- */
- #if FIX_AllowInteriorWeapons
- #if FIXES_Single
- stock FIXES_AllowInteriorWeapons(allow)
- {
- if (allow)
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
- for (new i = 0; i != MAX_PLAYERS; ++i)
- {
- FIXES_gsPlayerBools[i] &= ~e_FIXES_BOOLS_INTERIOR;
- }
- }
- else
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_INTERIOR;
- for (new i = 0; i != MAX_PLAYERS; ++i)
- {
- if (GetPlayerInterior(i))
- {
- FIXES_gsPlayerBools[i] |= e_FIXES_BOOLS_INTERIOR;
- }
- }
- }
- return allow;
- }
- #else
- forward _FIXES_AllowInteriorWeapons(allow);
- stock FIXES_AllowInteriorWeapons(allow)
- {
- CallRemoteFunction(FIXES_gscAllowInteriorWeapons, FIXES_gscSpec@i, allow);
- return allow;
- }
- public _FIXES_AllowInteriorWeapons(allow)
- {
- if (allow)
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
- for (new i = 0; i != MAX_PLAYERS; ++i)
- {
- FIXES_gsPlayerBools[i] &= ~e_FIXES_BOOLS_INTERIOR;
- }
- }
- else
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_INTERIOR;
- for (new i = 0; i != MAX_PLAYERS; ++i)
- {
- if (GetPlayerInterior(i))
- {
- FIXES_gsPlayerBools[i] |= e_FIXES_BOOLS_INTERIOR;
- }
- }
- }
- return allow;
- }
- #endif
- #if defined _ALS_AllowInteriorWeapons
- #undef AllowInteriorWeapons
- #else
- native BAD_AllowInteriorWeapons(allow) = AllowInteriorWeapons;
- #define _ALS_AllowInteriorWeapons
- #endif
- #define AllowInteriorWeapons FIXES_AllowInteriorWeapons
- #endif
- /*
- * OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
- *
- * FIXES:
- * AllowTeleport
- */
- #if FIX_AllowTeleport && !defined FILTERSCRIPT
- forward _FIXES_AllowTeleport(playerid, allow);
- public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
- {
- // ======================
- // BEGIN: AllowTeleport
- // ======================
- #if FIX_AllowTeleport
- if (!_FIXES_gIsFilterscript)
- {
- // Unusually, the call order here is always Game Mode first -
- // most callbacks are Filter Script first.
- if ((FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_TELEPORT) || ((FIXES_gsSettings & e_FIXES_SETTINGS_ADMIN_TELEPORT) && (IsPlayerAdmin(playerid))))
- {
- SetPlayerPosFindZ(playerid, fX, fY, fZ);
- }
- }
- #endif
- // ======================
- // END: AllowTeleport
- // ======================
- return FIXES_CALL_CALLBACK_2(OnPlayerClickMap, 1, FIXES_gscSpec@ifff, playerid, fX, fY, fZ);
- }
- #if defined _ALS_OnPlayerClickMap
- #undef OnPlayerClickMap
- #else
- #define _ALS_OnPlayerClickMap
- #endif
- #define OnPlayerClickMap FIXES_OnPlayerClickMap
- forward OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ);
- #endif
- /*
- * FIXES_AllowPlayerTeleport(playerid, allow)
- *
- * FIXES:
- * AllowTeleport
- */
- #if FIX_AllowTeleport
- #if FIXES_Single
- stock FIXES_AllowPlayerTeleport(playerid, allow)
- {
- if (0 <= playerid < MAX_PLAYERS)
- {
- if (allow)
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_TELEPORT;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_TELEPORT;
- }
- }
- return 0;
- }
- #else
- stock FIXES_AllowPlayerTeleport(playerid, allow)
- {
- if (0 <= playerid < MAX_PLAYERS)
- {
- CallRemoteFunction(FIXES_gscAllowTeleport, FIXES_gscSpec@ii, playerid, allow)
- }
- return 0;
- }
- #endif
- #if defined _ALS_AllowPlayerTeleport
- #undef AllowPlayerTeleport
- #else
- native BAD_AllowPlayerTeleport(playerid, allow) = AllowPlayerTeleport;
- #define _ALS_AllowPlayerTeleport
- #endif
- #define AllowPlayerTeleport FIXES_AllowPlayerTeleport
- #endif
- /*
- * FIXES_AllowAdminTeleport(allow)
- *
- * FIXES:
- * AllowTeleport
- */
- #if FIX_AllowTeleport
- #if FIXES_Single
- stock FIXES_AllowAdminTeleport(allow)
- {
- if (allow)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_ADMIN_TELEPORT;
- }
- else
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
- }
- return allow;
- }
- #else
- stock FIXES_AllowAdminTeleport(allow)
- {
- CallRemoteFunction(FIXES_gscAllowTeleport, FIXES_gscSpec@ii, INVALID_PLAYER_ID, allow)
- return allow;
- }
- #endif
- #if defined _ALS_AllowAdminTeleport
- #undef AllowAdminTeleport
- #else
- native BAD_AllowAdminTeleport(allow) = AllowAdminTeleport;
- #define _ALS_AllowAdminTeleport
- #endif
- #define AllowAdminTeleport FIXES_AllowAdminTeleport
- #endif
- /*
- * FIXES_AllowAdminTeleport(allow)
- *
- * FIXES:
- * AllowTeleport
- */
- #if FIX_AllowTeleport && !defined FILTERSCRIPT && !FIXES_Single
- public _FIXES_AllowTeleport(playerid, allow)
- {
- if (!_FIXES_gIsFilterscript)
- {
- if (playerid == INVALID_PLAYER_ID)
- {
- if (allow)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_ADMIN_TELEPORT;
- }
- else
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
- }
- }
- else
- {
- if (allow)
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_TELEPORT;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_TELEPORT;
- }
- }
- }
- }
- #endif
- /*
- * FIXES_SetPlayerSpecialAction(playerid, actionid)
- *
- * FIXES:
- * SetPlayerSpecialAction
- */
- #if FIX_SetPlayerSpecialAction
- stock FIXES_SetPlayerSpecialAction(playerid, actionid)
- {
- if (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
- {
- ClearAnimations(playerid);
- }
- SetPlayerSpecialAction(playerid, actionid);
- return 1;
- }
- #if defined _ALS_SetPlayerSpecialAction
- #undef SetPlayerSpecialAction
- #else
- native BAD_SetPlayerSpecialAction(playerid, actionid) = SetPlayerSpecialAction;
- #define _ALS_SetPlayerSpecialAction
- #endif
- #define SetPlayerSpecialAction FIXES_SetPlayerSpecialAction
- #endif
- /*
- * FIXES_ShowPlayerDialog(playerid, dialog, style, title[], caption[], button1[], button2[])
- *
- * FIXES:
- * OnDialogResponse
- * GetPlayerDialog
- */
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- stock FIXES_ShowPlayerDialog(playerid, dialog, style, title[], caption[], button1[], button2[])
- {
- if (0 <= playerid < MAX_PLAYERS)
- {
- #if FIXES_Single
- FIXES_gsDialogID[playerid] = dialog;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerDialog, dialog);
- #endif
- return ShowPlayerDialog(playerid, dialog, style, title, caption, button1, button2);
- }
- return 0;
- }
- #if defined _ALS_ShowPlayerDialog
- #undef ShowPlayerDialog
- #else
- native BAD_ShowPlayerDialog(playerid, dialog, style, title[], caption[], button1[], button2[]) = ShowPlayerDialog;
- #define _ALS_ShowPlayerDialog
- #endif
- #define ShowPlayerDialog FIXES_ShowPlayerDialog
- #endif
- /*
- * OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- *
- * FIXES:
- * OnDialogResponse
- * GetPlayerDialog
- */
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- // =========================
- // BEGIN: OnDialogResponse
- // =========================
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- #if FIXES_Single
- #if FIX_OnDialogResponse
- dialogid = FIXES_gsDialogID[playerid];
- #endif
- FIXES_gsDialogID[playerid] = INVALID_DIALOG_ID;
- #elseif FIX_OnDialogResponse
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- // If there are multiple scripts, we can't just wipe the
- // current dialog data or subsequent scripts will display
- // the wrong value.
- dialogid = GetPVarInt(playerid, FIXES_pvarPlayerDialog);
- SetPVarInt(playerid, FIXES_pvarCurrentDialog, dialogid);
- SetPVarInt(playerid, FIXES_pvarPlayerDialog, INVALID_DIALOG_ID);
- }
- else
- {
- dialogid = GetPVarInt(playerid, FIXES_pvarCurrentDialog);
- }
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerDialog, INVALID_DIALOG_ID);
- #endif
- if (inputtext[0])
- {
- return FIXES_CALL_CALLBACK_2(OnDialogResponse, 1, FIXES_gscSpec@iiiis, playerid, dialogid, response, listitem, inputtext);
- }
- else
- {
- return FIXES_CALL_CALLBACK_2(OnDialogResponse, 1, FIXES_gscSpec@iiiis, playerid, dialogid, response, listitem, FIXES_gscNULL);
- }
- #endif
- // =========================
- // END: OnDialogResponse
- // =========================
- }
- #if defined _ALS_OnDialogResponse
- #undef OnDialogResponse
- #else
- #define _ALS_OnDialogResponse
- #endif
- #define OnDialogResponse FIXES_OnDialogResponse
- forward OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
- #endif
- /*
- * FIXES_GetPlayerDialog(playerid)
- *
- * FIXES:
- * GetPlayerDialog
- */
- #if FIX_GetPlayerDialog
- stock FIXES_GetPlayerDialog(playerid)
- {
- if (0 <= playerid < MAX_PLAYERS)
- {
- #if FIXES_Single
- return FIXES_gsDialogID[playerid];
- #else
- return GetPVarInt(playerid, FIXES_pvarPlayerDialog);
- #endif
- }
- return -1;
- }
- #if defined _ALS_GetPlayerDialog
- #undef GetPlayerDialog
- #else
- #define _ALS_GetPlayerDialog
- #endif
- #define GetPlayerDialog FIXES_GetPlayerDialog
- #endif
- /*
- * FIXES_HideMenuForPlayer(Menu:menuid, playerid
- *
- * FIXES:
- * HideMenuForPlayer
- */
- #if FIX_HideMenuForPlayer
- stock FIXES_HideMenuForPlayer(Menu:menuid, playerid)
- {
- if (IsValidMenu(menuid))
- {
- return HideMenuForPlayer(menuid, playerid);
- }
- return 0;
- }
- #if defined _ALS_HideMenuForPlayer
- #undef HideMenuForPlayer
- #else
- native BAD_HideMenuForPlayer(Menu:menuid, playerid) = HideMenuForPlayer;
- #define _ALS_HideMenuForPlayer
- #endif
- #define HideMenuForPlayer FIXES_HideMenuForPlayer
- #endif
- /*
- * FIXES_valstr(dest[], value, bool:pack = false)
- *
- * FIXES:
- * valstr
- */
- #if FIX_valstr
- stock FIXES_valstr(dest[], value, bool:pack = false)
- {
- // "format" can't handle cellmin properly.
- static const
- sc_szCellmin[] = !"-2147483648";
- if (value == cellmin)
- {
- pack && strpack(dest, sc_szCellmin, 12) || strunpack(dest, sc_szCellmin, 12);
- }
- else
- {
- format(dest, 12, "%d", value);
- pack && strpack(dest, dest, 12);
- }
- return 0;
- }
- #if defined _ALS_valstr
- #undef valstr
- #else
- native BAD_valstr(dest[], value, bool:pack = false) = valstr;
- #define _ALS_valstr
- #endif
- #define valstr FIXES_valstr
- #endif
- /*
- * FIXES_fclose(File:handle)
- *
- * FIXES:
- * fclose
- */
- #if FIX_fclose
- stock bool:FIXES_fclose(File:handle)
- {
- if (handle)
- {
- return fclose(handle);
- }
- return false;
- }
- #if defined _ALS_fclose
- #undef fclose
- #else
- native BAD_fclose(File:handle) = fclose;
- #define _ALS_fclose
- #endif
- #define fclose FIXES_fclose
- #endif
- /*
- * FIXES_fwrite(File:handle, const string[])
- *
- * FIXES:
- * fwrite
- */
- #if FIX_fwrite
- stock FIXES_fwrite(File:handle, const string[])
- {
- if (handle)
- {
- return fwrite(handle, string);
- }
- return 0;
- }
- #if defined _ALS_fwrite
- #undef fwrite
- #else
- native BAD_fwrite(File:handle, const string[]) = fwrite;
- #define _ALS_fwrite
- #endif
- #define fwrite FIXES_fwrite
- #endif
- /*
- * FIXES_fread(File:handle, string[], size = sizeof (string), bool:pack = false)
- *
- * FIXES:
- * fread
- */
- #if FIX_fread
- stock FIXES_fread(File:handle, string[], size = sizeof (string), bool:pack = false)
- {
- if (handle)
- {
- return fread(handle, string, size, pack);
- }
- return 0;
- }
- #if defined _ALS_fread
- #undef fread
- #else
- native BAD_fread(File:handle, string[], size = sizeof (string), bool:pack = false) = fread;
- #define _ALS_fread
- #endif
- #define fread FIXES_fread
- #endif
- /*
- * FIXES_fputchar(File:handle, value, bool:utf8 = true)
- *
- * FIXES:
- * fputchar
- */
- #if FIX_fputchar
- stock bool:FIXES_fputchar(File:handle, value, bool:utf8 = true)
- {
- if (handle)
- {
- return fputchar(handle, value, utf8);
- }
- return false;
- }
- #if defined _ALS_fputchar
- #undef fputchar
- #else
- native BAD_fputchar(File:handle, value, bool:utf8 = true) = fputchar;
- #define _ALS_fputchar
- #endif
- #define fputchar FIXES_fputchar
- #endif
- /*
- * FIXES_fgetchar(File:handle, value, bool:utf8 = true)
- *
- * FIXES:
- * fgetchar
- */
- #if FIX_fgetchar
- stock FIXES_fgetchar(File:handle, value, bool:utf8 = true)
- {
- if (handle)
- {
- return fgetchar(handle, value, utf8);
- }
- return 0;
- }
- #if defined _ALS_fgetchar
- #undef fgetchar
- #else
- native BAD_fgetchar(File:handle, value, bool:utf8 = true) = fgetchar;
- #define _ALS_fgetchar
- #endif
- #define fgetchar FIXES_fgetchar
- #endif
- /*
- * FIXES_fblockwrite(File:handle, const buffer[], size = sizeof (buffer))
- *
- * FIXES:
- * fblockwrite
- */
- #if FIX_fblockwrite
- stock FIXES_fblockwrite(File:handle, const buffer[], size = sizeof (buffer))
- {
- if (handle)
- {
- return fblockwrite(handle, buffer, size);
- }
- return 0;
- }
- #if defined _ALS_fblockwrite
- #undef fblockwrite
- #else
- native BAD_fblockwrite(File:handle, const buffer[], size = sizeof (buffer)) = fblockwrite;
- #define _ALS_fblockwrite
- #endif
- #define fblockwrite FIXES_fblockwrite
- #endif
- /*
- * FIXES_fblockread(File:handle, buffer[], size = sizeof (buffer))
- *
- * FIXES:
- * fblockread
- */
- #if FIX_fblockread
- stock FIXES_fblockread(File:handle, buffer[], size = sizeof (buffer))
- {
- if (handle)
- {
- return fblockread(handle, buffer, size);
- }
- return 0;
- }
- #if defined _ALS_fblockread
- #undef fblockread
- #else
- native BAD_fblockread(File:handle, buffer[], size = sizeof (buffer)) = fblockread;
- #define _ALS_fblockread
- #endif
- #define fblockread FIXES_fblockread
- #endif
- /*
- * FIXES_fseek(File:handle, position = 0, seek_whence:whence = seek_start)
- *
- * FIXES:
- * fseek
- */
- #if FIX_fseek
- stock FIXES_fseek(File:handle, position = 0, seek_whence:whence = seek_start)
- {
- if (handle)
- {
- return fseek(handle, position, whence);
- }
- return 0;
- }
- #if defined _ALS_fseek
- #undef fseek
- #else
- native BAD_fseek(File:handle, position = 0, seek_whence:whence = seek_start) = fseek;
- #define _ALS_fseek
- #endif
- #define fseek FIXES_fseek
- #endif
- /*
- * FIXES_flength(File:handle)
- *
- * FIXES:
- * flength
- */
- #if FIX_flength
- stock FIXES_flength(File:handle)
- {
- if (handle)
- {
- return flength(handle);
- }
- return 0;
- }
- #if defined _ALS_flength
- #undef flength
- #else
- native BAD_flength(File:handle) = flength;
- #define _ALS_flength
- #endif
- #define flength FIXES_flength
- #endif
- /*
- * FIXES_Kick(playerid)
- *
- * FIXES:
- * Kick
- */
- #if FIX_Kick
- forward _FIXES_Kick(playerid);
- public _FIXES_Kick(playerid)
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_KICKED;
- Kick(playerid);
- }
- #if !FIXES_Single
- forward @FIXES_Kick(playerid);
- public @FIXES_Kick(playerid)
- {
- FIXES_BlockUpdate(playerid, true, 0);
- }
- #endif
- stock FIXES_Kick(playerid)
- {
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
- {
- // Disable as much of the server as possible quickly.
- #if FIXES_Single
- FIXES_BlockUpdate(playerid, true, 0);
- #else
- CallRemoteFunction("@FIXES_Kick", "i", playerid);
- #endif
- TogglePlayerSpectating(playerid, true);
- TogglePlayerControllable(playerid, false);
- SetPVarInt(playerid, FIXES_pvarKick, SetTimerEx(FIXES_gscKick, 1000, 0, FIXES_gscSpec@i, playerid));
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_KICKED;
- return 1;
- }
- else
- {
- return Kick(playerid);
- }
- }
- #if defined _ALS_Kick
- #undef Kick
- #else
- native BAD_Kick(playerid) = Kick;
- #define _ALS_Kick
- #endif
- #define Kick FIXES_Kick
- #endif
- /*
- * FIXES_IsPAttachedObjectSlotUsed(playerid, index)
- *
- * FIXES:
- * IsPlayerAttachedObjectSlotUsed
- */
- #if FIX_IsPlayerAttachedObjSlotUsed
- stock FIXES_IsPAttachedObjectSlotUsed(playerid, index)
- {
- if (IsPlayerConnected(playerid))
- {
- return FIXES_gsObjectSlots[playerid / _FIXES_ATTACHMENTS] & 1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index;
- }
- return 0;
- }
- #if defined _ALS_IsPAttachedObjSlotUsed
- #undef IsPlayerAttachedObjectSlotUsed
- #else
- native BAD_IsPlayerAttachedObjSlotUsed(playerid, index) = IsPlayerAttachedObjectSlotUsed;
- #define _ALS_IsPAttachedObjSlotUsed
- #endif
- #define IsPlayerAttachedObjectSlotUsed FIXES_IsPAttachedObjectSlotUsed
- #endif
- /*
- * _FIXES_SetPlayerAttachedObject(slot, to)
- *
- * FIXES:
- * IsPlayerAttachedObjectSlotUsed
- */
- #if (FIX_IsPlayerAttachedObjSlotUsed || FIX_SetPlayerAttachedObject) && !FIXES_Single
- forward _FIXES_SetPlayerAttachedObject(slot, to);
- public _FIXES_SetPlayerAttachedObject(slot, to)
- {
- FIXES_gsObjectSlots[slot] = to;
- }
- #endif
- /*
- * FIXES_SetPlayerAttachedObject(playerid, index, modelid, bone, Float:fOffsetX = 0.0, Float:fOffsetY = 0.0, Float:fOffsetZ = 0.0, Float:fRotX = 0.0, Float:fRotY = 0.0, Float:fRotZ = 0.0, Float:fScaleX = 1.0, Float:fScaleY = 1.0, Float:fScaleZ = 1.0)
- *
- * FIXES:
- * IsPlayerAttachedObjectSlotUsed
- * SetPlayerAttachedObject
- */
- #if FIX_IsPlayerAttachedObjSlotUsed || FIX_SetPlayerAttachedObject
- stock FIXES_SetPlayerAttachedObject(playerid, index, modelid, bone, Float:fOffsetX = 0.0, Float:fOffsetY = 0.0, Float:fOffsetZ = 0.0, Float:fRotX = 0.0, Float:fRotY = 0.0, Float:fRotZ = 0.0, Float:fScaleX = 1.0, Float:fScaleY = 1.0, Float:fScaleZ = 1.0, materialcolor1 = 0, materialcolor2 = 0)
- {
- if (SetPlayerAttachedObject(playerid, index, modelid, bone, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ, materialcolor1, materialcolor2))
- {
- #if FIXES_Single
- FIXES_gsObjectSlots[playerid / _FIXES_ATTACHMENTS] |= (1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index);
- #else
- new
- slot = playerid / _FIXES_ATTACHMENTS;
- CallRemoteFunction(FIXES_gscSetPlayerAttachedObj, FIXES_gscSpec@ii, slot, FIXES_gsObjectSlots[slot] | (1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index));
- #endif
- return 1;
- }
- return 0;
- }
- #if defined _ALS_SetPlayerAttachedObject
- #undef SetPlayerAttachedObject
- #else
- native BAD_SetPlayerAttachedObject(playerid, index, modelid, bone, Float:fOffsetX = 0.0, Float:fOffsetY = 0.0, Float:fOffsetZ = 0.0, Float:fRotX = 0.0, Float:fRotY = 0.0, Float:fRotZ = 0.0, Float:fScaleX = 1.0, Float:fScaleY = 1.0, Float:fScaleZ = 1.0, materialcolor1 = 0, materialcolor2 = 0) = SetPlayerAttachedObject;
- #define _ALS_SetPlayerAttachedObject
- #endif
- #define SetPlayerAttachedObject FIXES_SetPlayerAttachedObject
- #endif
- /*
- * FIXES_RemovePlayerAttachedObj(playerid, index)
- *
- * FIXES:
- * IsPlayerAttachedObjectSlotUsed
- */
- #if FIX_IsPlayerAttachedObjSlotUsed || FIX_SetPlayerAttachedObject
- stock FIXES_RemovePlayerAttachedObj(playerid, index)
- {
- if (RemovePlayerAttachedObject(playerid, index))
- {
- #if FIXES_Single
- FIXES_gsObjectSlots[playerid / _FIXES_ATTACHMENTS] &= ~(1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index);
- #else
- new
- slot = playerid / _FIXES_ATTACHMENTS;
- CallRemoteFunction(FIXES_gscSetPlayerAttachedObj, FIXES_gscSpec@ii, slot, FIXES_gsObjectSlots[slot] & ~(1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index));
- #endif
- return 1;
- }
- return 0;
- }
- #if defined _ALS_RemovePlayerAttachedObject
- #undef RemovePlayerAttachedObject
- #else
- native BAD_RemovePlayerAttachedObject(playerid, index) = RemovePlayerAttachedObject;
- #define _ALS_RemovePlayerAttachedObject
- #endif
- #define RemovePlayerAttachedObject FIXES_RemovePlayerAttachedObj
- #endif
- /*
- * FIXES_%%%!!!
- *
- * FIXES:
- * %%%
- */
- /*#if FIX_%%%
- stock FIXES_%%%!!!
- {
- return 0;
- }
- #if defined _ALS_%%%
- #undef %%%
- #else
- native BAD_%%%!!! = %%%;
- #define _ALS_%%%
- #endif
- #define %%% FIXES_%%%
- #endif
- */
- /*
- * _FIXES_DetermineOrder()
- *
- * Figure out which the first filterscript to be called is so that it can do the
- * majority of the work. More detail: Serveral pieces of code for some fixes
- * rely on things like blocking "OnPlayerUpdate". This should be done in the
- * first script in which "OnPlayerUpdate" is called only, so we need to find out
- * in advance which script will be called first (at least out of all the fixed
- * scripts).
- */
- #if !FIXES_Single
- public _FIXES_DetermineOrder()
- {
- // TODO: Graceful handoff. I thought I was past all this rubbish!
- if (!_FIXES_gIsFilterscript)
- {
- /*if (!existproperty(5, FIXES_gscNoGMProperty))
- {
- // Either this is a Filter Script (1) and we don't want Game
- // Modes (1) or this isn't a filterscript (0) and we do want
- // Game Modes (0). All other cases return here due to a logic
- // mismatch. This is to rectify the difference in call orders
- // between "CallRemoteFunction" and normal callbacks.
- return 0;
- }
- }
- else
- {*/
- if (existproperty(5, FIXES_gscNoGMProperty))
- {
- // Either this is a Filter Script (1) and we don't want Game
- // Modes (1) or this isn't a filterscript (0) and we do want
- // Game Modes (0). All other cases return here due to a logic
- // mismatch. This is to rectify the difference in call orders
- // between "CallRemoteFunction" and normal callbacks.
- // Now DOESN'T end on the second time round for filterscripts to
- // correctly pass on the data to GameModes.
- return 0;
- }
- // Make sure certain data is synced with what the GM thinks it is.
- // =============================
- // START: AllowInteriorWeapons
- // =============================
- #if FIX_AllowInteriorWeapons
- CallRemoteFunction(FIXES_gscAllowInteriorWeapons, FIXES_gscSpec@i, !(FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR));
- #endif
- // =============================
- // START: AllowInteriorWeapons
- // =============================
- // ================================
- // START: SetPlayerAttachedObject
- // ================================
- #if FIX_IsPlayerAttachedObjSlotUsed || FIX_SetPlayerAttachedObject
- for (new i = 0; i != _FIXES_ATTACHMENTS; ++i)
- {
- CallRemoteFunction(FIXES_gscSetPlayerAttachedObj, FIXES_gscSpec@ii, i, FIXES_gsObjectSlots[i]);
- }
- #endif
- // ==============================
- // END: SetPlayerAttachedObject
- // ==============================
- }
- if (existproperty(5, FIXES_gscOrderProperty))
- {
- if (!existproperty(5, FIXES_gscNoGMProperty) && _FIXES_gIsFilterscript == bool:getproperty(5, FIXES_gscOrderProperty))
- {
- // The game mode is not in charge, which means we are checking
- // the filterscripts a second time and shouldn't be.
- return 0;
- }
- // If this script was previously the owner, and we are not ending
- // the game mode (in which case discard all data), and if we are
- // only dealing with filterscripts or the gamemode is now the
- // master.
- if (FIXES_gsSettings & (e_FIXES_SETTINGS_IN_CHARGE | e_FIXES_SETTINGS_DROP_ALL_DATA) == e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_PRINTF("_FIXES_DetermineOrder: Was in charge");
- // This script is currently in charge, but a new script has
- // usurped it! Pass all relevant data over to the new script.
- // Also, this wasn't triggered by a game mode change (where we
- // just want to dump and reset all data). There is no need to
- // reset the admin teleport data as that is always handled by
- // the Game Mode, so it will either be correct, or it will be
- // blank.
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_IN_CHARGE;
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- for (new i = 0; i != MAX_PLAYERS; ++i)
- {
- if (IsPlayerConnected(i))
- {
- // =============================
- // START: SetPlayerWorldBounds
- // =============================
- #if FIX_SetPlayerWorldBounds
- //if (FIXES_gsPlayerBools[i] & e_FIXES_BOOLS_WORLDBOUNDS)
- //{
- // I realised that you could have the GM in
- // charge, set their bounds, load an FS, remove
- // their bounds then unload the FS again and it
- // would result in the old GM setting of them
- // HAVING bounds being re-applied, so the check
- // was removed and.
- CallRemoteFunction(FIXES_gscSetPlayerWorldBounds, FIXES_gscSpec@iffff, i, FIXES_gsWorldbounds[i][E_FIXES_WORLDBOUND_DATA_UX], FIXES_gsWorldbounds[i][E_FIXES_WORLDBOUND_DATA_LX], FIXES_gsWorldbounds[i][E_FIXES_WORLDBOUND_DATA_UY], FIXES_gsWorldbounds[i][E_FIXES_WORLDBOUND_DATA_LY]);
- //}
- #endif
- // =============================
- // END: SetPlayerWorldBounds
- // =============================
- // =================================
- // START: TogglePlayerControllable
- // =================================
- #if FIX_TogglePlayerControllable
- CallRemoteFunction(FIXES_gscTogglePlayerControl, FIXES_gscSpec@ii, i, !(FIXES_gsPlayerBools[i] & e_FIXES_BOOLS_UNCONTROLLABLE));
- #endif
- // =================================
- // END: TogglePlayerControllable
- // =================================
- // ===========================
- // START: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- if (FIXES_gsPlayerBools[i] & e_FIXES_BOOLS_PUT_IN_VEHICLE)
- {
- CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iii, i, FIXES_gsVehicleSeatData[i] & 0x00FFFFFF, FIXES_gsVehicleSeatData[i] >>> 24);
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- }
- }
- #endif
- FIXES_PRINTF("_FIXES_DetermineOrder: Not in charge");
- return 0;
- }
- else
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_IN_CHARGE;
- FIXES_PRINTF("_FIXES_DetermineOrder: Not in charge");
- return 0;
- }
- }
- else if (!(FIXES_gsSettings & e_FIXES_SETTINGS_ENDING))
- {
- setproperty(5, FIXES_gscOrderProperty, _FIXES_gIsFilterscript);
- #if FIXES_Debug
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_PRINTF("_FIXES_DetermineOrder: Already in charge");
- }
- #endif
- FIXES_gsSettings |= e_FIXES_SETTINGS_IN_CHARGE;
- FIXES_PRINTF("_FIXES_DetermineOrder: Now in charge");
- return 1;
- }
- #if FIXES_Debug
- else
- {
- FIXES_PRINTF("_FIXES_DetermineOrder: Ending");
- }
- #endif
- return 0;
- }
- #endif
- /*
- * FIXES_strins(string[], const substr[], pos, maxlength = sizeof string)
- *
- * FIXES:
- * strins
- */
- #if FIX_strins
- stock FIXES_strins(string[], const substr[], pos, maxlength = sizeof string)
- {
- if (string[0] > 255)
- {
- new
- strlength = strlen(string),
- sublength = strlen(substr),
- m4 = maxlength * 4;
- // Packed - format doesn't like these strings.
- if (strlength + sublength >= m4)
- {
- if (pos + sublength >= m4)
- {
- string{pos} = '\0';
- // Hopefully this doesn't ignore maxlength and does packed.
- return strcat(string, substr, maxlength);
- }
- else
- {
- // pos + sublength is less than maxlength, so this sum MUST
- // be positive and gte than "pos", so there's no need for
- // additional checks.
- string{maxlength - sublength - 1} = '\0';
- }
- }
- return strins(string, substr, pos, maxlength);
- }
- else if (substr[0] > 255)
- {
- new
- strlength = strlen(string),
- sublength = strlen(substr);
- // Packed - format doesn't like these strings.
- if (strlength + sublength >= maxlength)
- {
- if (pos + sublength >= maxlength)
- {
- string[pos] = '\0';
- // Hopefully this doesn't ignore maxlength and does packed.
- return strcat(string, substr, maxlength);
- }
- else
- {
- // pos + sublength is less than maxlength, so this sum MUST
- // be positive and gte than "pos", so there's no need for
- // additional checks.
- string[maxlength - sublength - 1] = '\0';
- }
- }
- return strins(string, substr, pos, maxlength);
- }
- else
- {
- return format(string, maxlength, "%.*s%s%s", pos, string, substr, string[pos]);
- }
- }
- #if defined _ALS_strins
- #undef strins
- #else
- native BAD_strins(string[], const substr[], pos, maxlength = sizeof string) = strins;
- #define _ALS_strins
- #endif
- #define strins FIXES_strins
- #endif
- /*
- * FIXES_random(const maxint)
- *
- * FIXES:
- * random
- */
- #if FIX_random
- stock FIXES_random(max)
- {
- if (max < 0)
- {
- return -random(-max);
- }
- else
- {
- return random(max);
- }
- }
- #if defined _ALS_random
- #undef random
- #else
- native BAD_random(max) = random;
- #define _ALS_random
- #endif
- #define random FIXES_random
- #endif
- #undef _FIXES_CEILDIV
- #undef _FIXES_INFINITY
- #undef _FIXES_N_INFINITY
- #undef _FIXES_ATTACHMENTS
- #undef _FIXES_IS_UNSET
- #undef FIXES_DETECT_CALLBACK_1
- #undef FIXES_DETECT_CALLBACK_2
- #undef FIXES_CALL_CALLBACK_1
- #undef FIXES_CALL_CALLBACK_2
- #undef FIXES_PRINTF
Add Comment
Please, Sign In to add comment