Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- pickfix | v1.5
- Исправление повторения срабатывания пикапов
- Edwin, 2016 RU
- Важно: инклуд требует наличия плагина streamer от Incognito.
- Коллбэки:
- OnPlayerPickupExit (playerid) // Срабатывает при выходе игрока из пикапа
- OnPlayerDynamicPickupExit (playerid) // Срабатывает при выходе игрока из динамического пикапа
- */
- #if !defined Streamer_IncludeFileVersion
- #error streamer must be included before pickfix
- #else
- #if !defined MAX_DYNAMIC_PICKUPS
- #define MAX_DYNAMIC_PICKUPS 4096
- #endif
- forward OnPlayerPickupExit(playerid);
- forward OnPlayerDynamicPickupExit(playerid);
- static Float:pos_pickup[MAX_PICKUPS][3],
- PlayerOnPickup[MAX_PLAYERS char];
- public OnPlayerPickUpPickup(playerid, pickupid)
- {
- if(PlayerOnPickup{playerid}) return 1;
- PlayerOnPickup{playerid} = 1;
- SetPVarInt(playerid, "PickZone",
- CreateDynamicSphere(pos_pickup[pickupid][0], pos_pickup[pickupid][1], pos_pickup[pickupid][2], 1.3, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)));
- #if defined pickfix__OnPlayerPickUpPickup
- return pickfix__OnPlayerPickUpPickup(playerid, pickupid);
- #endif
- }
- public OnPlayerPickUpDynamicPickup(playerid, pickupid)
- {
- if(PlayerOnPickup{playerid}) return 1;
- PlayerOnPickup{playerid} = 1;
- new Float:pick_posit[3];
- Streamer_GetFloatData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_X, pick_posit[0]);
- Streamer_GetFloatData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_Y, pick_posit[1]);
- Streamer_GetFloatData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_Z, pick_posit[2]);
- SetPVarInt(playerid, "DynPickZone",
- CreateDynamicSphere(pick_posit[0], pick_posit[1], pick_posit[2], 1.3, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)));
- #if defined pickfix__OnPlayerPickUpDynamicP
- return pickfix__OnPlayerPickUpDynamicP(playerid, pickupid);
- #endif
- }
- #if defined _ALS_OnPlayerPickUpPickup
- #undef OnPlayerPickUpPickup
- #else
- #define _ALS_OnPlayerPickUpPickup
- #endif
- #define OnPlayerPickUpPickup pickfix__OnPlayerPickUpPickup
- #if defined pickfix__OnPlayerPickUpPickup
- forward pickfix__OnPlayerPickUpPickup(playerid, pickupid);
- #endif
- #if defined _ALS_OnPlayerPickUpDynamicP
- #undef OnPlayerPickUpDynamicP
- #else
- #define _ALS_OnPlayerPickUpDynamicP
- #endif
- #define OnPlayerPickUpDynamicPickup pickfix__OnPlayerPickUpDynamicP
- #if defined pickfix__OnPlayerPickUpDynamicP
- forward pickfix__OnPlayerPickUpDynamicP(playerid, pickupid);
- #endif
- // ------>
- stock pickfix__CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld)
- {
- new pickupid = CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld);
- if(pickupid == -1) return -1;
- pos_pickup[pickupid][0] = X;
- pos_pickup[pickupid][1] = Y;
- pos_pickup[pickupid][2] = Z;
- return pickupid;
- }
- #if defined _ALS_CreatePickup
- #undef CreatePickup
- #else
- #define _ALS_CreatePickup
- #endif
- #define CreatePickup pickfix__CreatePickup
- // ------>
- public OnPlayerLeaveDynamicArea(playerid, areaid)
- {
- if(GetPVarInt(playerid, "PickZone") == areaid)
- {
- DeletePVar(playerid, "PickZone");
- CallRemoteFunction("OnPlayerPickupExit", "i", playerid);
- PlayerOnPickup{playerid} = 0;
- DestroyDynamicArea(areaid);
- }
- else if(GetPVarInt(playerid, "DynPickZone") == areaid)
- {
- DeletePVar(playerid, "DynPickZone");
- CallRemoteFunction("OnPlayerDynamicPickupExit", "i", playerid);
- PlayerOnPickup{playerid} = 0;
- DestroyDynamicArea(areaid);
- }
- #if defined pickfix__OnPlayerLeaveDynamicAr
- return pickfix__OnPlayerLeaveDynamicAr(playerid, areaid);
- #endif
- }
- #if defined _ALS_OnPlayerLeaveDynamicArea
- #undef OnPlayerLeaveDynamicArea
- #else
- #define _ALS_OnPlayerLeaveDynamicArea
- #endif
- #define OnPlayerLeaveDynamicArea pickfix__OnPlayerLeaveDynamicAr
- #if defined pickfix__OnPlayerLeaveDynamicAr
- forward pickfix__OnPlayerLeaveDynamicAr(playerid, areaid);
- #endif
- public OnPlayerDisconnect(playerid, reason)
- {
- if(PlayerOnPickup{playerid})
- {
- PlayerOnPickup{playerid} = 0;
- DestroyDynamicArea(IsPlayerInDynamicArea(playerid, GetPVarInt(playerid, "PickZone")) ?
- GetPVarInt(playerid, "PickZone") : GetPVarInt(playerid, "DynPickZone"));
- }
- #if defined pickfix__OnPlayerDisconnect
- return pickfix__OnPlayerDisconnect(playerid, reason);
- #endif
- }
- #if defined pickfix__OnPlayerDisconnect
- forward pickfix__OnPlayerDisconnect(playerid, reason);
- #endif
- #if defined _ALS_OnPlayerDisconnect
- #undef OnPlayerDisconnect
- #else
- #define _ALS_OnPlayerDisconnect
- #endif
- #define OnPlayerDisconnect pickfix__OnPlayerDisconnect
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement