Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*==============================================================================
- PICKUP BUG FIX BY USING KEY
- key_pickupfix.inc v1.2.2
- Author: whale (a.k.a Twixxx / Twixyck)
- Copyright (c) 2018 Nikita Shtimenko (whale)
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the
- use of this software.
- Permission is granted to anyone to use this software for
- any purpose, including commercial applications, and to alter it and
- redistribute it freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software in
- a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- ==============================================================================*/
- #if defined _key_pickupfix_included
- #endinput
- #endif
- #define _key_pickupfix_included
- #if __Pawn >= 0x3A && defined __PawnBuild
- #if __Pawn == 0x3A && __PawnBuild >= 2 || __Pawn > 0x3A
- #define static_enum static enum
- #endif
- #endif
- #if !defined static_enum
- #define static_enum enum
- #endif
- #define KEY_PICKUPFIX_INVALID_PICKUP_ID (-1)
- #define KEY_PICKUPFIX_INVALID_USED_KEY (-1)
- #if defined Streamer_IncludeFileVersion
- #define KEY_PICKUPFIX_PICK_TYPE_INVALID (-1)
- #define KEY_PICKUPFIX_PICK_TYPE_DEFAULT (0)
- #define KEY_PICKUPFIX_PICK_TYPE_STREAM (1)
- #endif
- #define key_pickupfix_PRESSED(%0) \
- (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
- #if defined Streamer_IncludeFileVersion
- static_enum key_pickupfix_e_PlayerPickupDat
- {
- key_pickupfix_pickupID,
- key_pickupfix_pickupType,
- key_pickupfix_pickupTimestamp,
- bool:key_pickupfix_IsPickupUsed
- };
- static
- key_pickupfix_playerPickupData[MAX_PLAYERS][key_pickupfix_e_PlayerPickupDat];
- static const
- NULL_PLAYER_PICKUP_DATA[key_pickupfix_e_PlayerPickupDat] = {KEY_PICKUPFIX_INVALID_PICKUP_ID, KEY_PICKUPFIX_PICK_TYPE_INVALID, 0, false};
- #else
- static_enum key_pickupfix_e_PlayerPickupDat
- {
- key_pickupfix_pickupID,
- key_pickupfix_pickupTimestamp,
- bool:key_pickupfix_IsPickupUsed
- };
- static
- key_pickupfix_playerPickupData[MAX_PLAYERS][key_pickupfix_e_PlayerPickupDat];
- static const
- NULL_PLAYER_PICKUP_DATA[key_pickupfix_e_PlayerPickupDat] = {KEY_PICKUPFIX_INVALID_PICKUP_ID, 0, false};
- #endif
- static
- key_pickupfix_pickupUsedKey[MAX_PICKUPS] = {KEY_PICKUPFIX_INVALID_USED_KEY, ...};
- public OnPlayerConnect(playerid)
- {
- key_pickupfix_playerPickupData[playerid] = NULL_PLAYER_PICKUP_DATA;
- #if defined key_pickupfix_OnPlayerConnect
- key_pickupfix_OnPlayerConnect(playerid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect key_pickupfix_OnPlayerConnect
- #if defined key_pickupfix_OnPlayerConnect
- forward key_pickupfix_OnPlayerConnect(playerid);
- #endif
- public OnPlayerPickUpPickup(playerid, pickupid)
- {
- if(key_pickupfix_pickupUsedKey[pickupid] != KEY_PICKUPFIX_INVALID_USED_KEY)
- {
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID] = pickupid;
- #if defined Streamer_IncludeFileVersion
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_DEFAULT;
- #endif
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupTimestamp] = gettime();
- }
- if(false == key_pickupfix_playerPickupData[playerid][key_pickupfix_IsPickupUsed] && key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID] != KEY_PICKUPFIX_INVALID_PICKUP_ID)
- return 1;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID] = KEY_PICKUPFIX_INVALID_PICKUP_ID;
- #if defined Streamer_IncludeFileVersion
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_INVALID;
- #endif
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupTimestamp] = 0;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_IsPickupUsed] = false;
- #if defined key_pickupfix_OnPlayerPickUpPi
- key_pickupfix_OnPlayerPickUpPi(playerid, pickupid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerPickUpPickup
- #undef OnPlayerPickUpPickup
- #else
- #define _ALS_OnPlayerPickUpPickup
- #endif
- #define OnPlayerPickUpPickup key_pickupfix_OnPlayerPickUpPi
- #if defined key_pickupfix_OnPlayerPickUpPi
- forward key_pickupfix_OnPlayerPickUpPi(playerid, pickupid);
- #endif
- #if defined Streamer_IncludeFileVersion
- public OnPlayerPickUpDynamicPickup(playerid, pickupid)
- {
- if(key_pickupfix_pickupUsedKey[pickupid] != KEY_PICKUPFIX_INVALID_USED_KEY)
- {
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID] = pickupid;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_STREAM;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupTimestamp] = gettime();
- }
- if(false == key_pickupfix_playerPickupData[playerid][key_pickupfix_IsPickupUsed] && key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID] != KEY_PICKUPFIX_INVALID_PICKUP_ID)
- return 1;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID] = KEY_PICKUPFIX_INVALID_PICKUP_ID;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_INVALID;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupTimestamp] = 0;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_IsPickupUsed] = false;
- #if defined key_pickupfix_OnPlayerPickUpDy
- key_pickupfix_OnPlayerPickUpDy(playerid, pickupid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerPickUpDynamicPicku
- #undef OnPlayerPickUpDynamicPickup
- #else
- #define _ALS_OnPlayerPickUpDynamicPicku
- #endif
- #define OnPlayerPickUpDynamicPickup key_pickupfix_OnPlayerPickUpDy
- #if defined key_pickupfix_OnPlayerPickUpDy
- forward key_pickupfix_OnPlayerPickUpDy(playerid, pickupid);
- #endif
- #endif
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID] != KEY_PICKUPFIX_INVALID_PICKUP_ID)
- {
- if(key_pickupfix_PRESSED(key_pickupfix_pickupUsedKey[key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID]]))
- {
- if(false == key_pickupfix_playerPickupData[playerid][key_pickupfix_IsPickupUsed])
- {
- if(0 <= (gettime() - key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupTimestamp]) <= 1)
- {
- key_pickupfix_playerPickupData[playerid][key_pickupfix_IsPickupUsed] = true;
- #if defined Streamer_IncludeFileVersion
- if(key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupType] == KEY_PICKUPFIX_PICK_TYPE_DEFAULT)
- CallRemoteFunction("OnPlayerPickUpPickup", "dd", playerid, key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID]);
- else
- CallRemoteFunction("OnPlayerPickUpDynamicPickup", "dd", playerid, key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID]);
- #else
- CallRemoteFunction("OnPlayerPickUpPickup", "dd", playerid, key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID]);
- #endif
- }
- else
- {
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupID] = KEY_PICKUPFIX_INVALID_PICKUP_ID;
- #if defined Streamer_IncludeFileVersion
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_INVALID;
- #endif
- key_pickupfix_playerPickupData[playerid][key_pickupfix_pickupTimestamp] = 0;
- key_pickupfix_playerPickupData[playerid][key_pickupfix_IsPickupUsed] = false;
- return 1;
- }
- }
- }
- }
- #if defined key_pickupfix_OnPlayerKeyState
- key_pickupfix_OnPlayerKeyState(playerid, newkeys, oldkeys);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerKeyStateChange
- #undef OnPlayerKeyStateChange
- #else
- #define _ALS_OnPlayerKeyStateChange
- #endif
- #define OnPlayerKeyStateChange key_pickupfix_OnPlayerKeyState
- #if defined key_pickupfix_OnPlayerKeyState
- forward key_pickupfix_OnPlayerKeyState(playerid, newkeys, oldkeys);
- #endif
- stock key_CreatePickup(model, type, Float:X, Float:Y, Float:Z, virtualworld = 0, usedkey = KEY_PICKUPFIX_INVALID_USED_KEY)
- {
- #if defined KEY_PICKUPFIX_USED_KEY
- usedkey = KEY_PICKUPFIX_USED_KEY;
- #endif
- new
- pickup = CreatePickup(model, type, X, Y, Z, virtualworld);
- key_pickupfix_pickupUsedKey[pickup] = usedkey;
- return pickup;
- }
- #if defined Streamer_IncludeFileVersion
- stock key_CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_PICKUP_SD, areaid = -1, priority = 0, usedkey = KEY_PICKUPFIX_INVALID_USED_KEY)
- {
- #if defined KEY_PICKUPFIX_USED_KEY
- usedkey = KEY_PICKUPFIX_USED_KEY;
- #endif
- new
- pickup = CreateDynamicPickup(modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance, areaid, priority);
- key_pickupfix_pickupUsedKey[pickup] = usedkey;
- return pickup;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement