Advertisement
GArtem

Pickup Portal System

Jul 17th, 2015
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.10 KB | None | 0 0
  1. /*
  2.     Copyright 2015 _[Bupyc]_
  3.  
  4.     Licensed under the Apache License, Version 2.0 (the "License");
  5.     you may not use this file except in compliance with the License.
  6.     You may obtain a copy of the License at
  7.  
  8.     http://www.apache.org/licenses/LICENSE-2.0
  9.  
  10.     Unless required by applicable law or agreed to in writing, software
  11.     distributed under the License is distributed on an "AS IS" BASIS,
  12.     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.     See the License for the specific language governing permissions and
  14.     limitations under the License.
  15. */
  16.  
  17. #if defined _PPS_included
  18.     #endinput
  19. #endif
  20. #define _PPS_included
  21.  
  22. #define pps_Model       1318    // Модель пикапа
  23. #define pps_Type        1       // Тип пикапа
  24. #define pps_Deact       1500    // Время деактивации после прохода через портал (мс)
  25.  
  26. #define MAX_PORTALS     100     // Максимальное кол-во порталов
  27.  
  28. static pps_number = 0;
  29.  
  30. enum ppsData
  31. {
  32.     pps_id,
  33.     Float:pps_X,
  34.     Float:pps_Y,
  35.     Float:pps_Z,
  36.     Float:pps_A,
  37.     pps_Int,
  38.     pps_Virt,
  39.     pps_Toid,
  40.     Float:pps_ToX,
  41.     Float:pps_ToY,
  42.     Float:pps_ToZ,
  43.     Float:pps_ToA,
  44.     pps_ToInt,
  45.     pps_ToVirt,
  46.     pps_Key,
  47. }
  48. new ppsInfo[MAX_PORTALS][ppsData];
  49.  
  50. forward pps_PickupDeactivationTime(playerid);
  51. forward OnPlayerPortal(playerid, portalid, side);
  52.  
  53. public OnPlayerPickUpPickup(playerid, pickupid)
  54. {
  55.     if(!pps_number)
  56.     {
  57.         if(funcidx("pps_OnPlayerPickUpPickup") != -1) return CallLocalFunction("pps_OnPlayerPickUpPickup", "ii", playerid, pickupid);
  58.         return 1;
  59.     }
  60.     for(new num = 0; num <= pps_number; num++)
  61.     {
  62.         if(ppsInfo[num][pps_Key] != -1) continue;
  63.         if(pickupid == ppsInfo[num][pps_id] && GetPVarInt(playerid, "pps_Deactivation") == 0)
  64.         {
  65.             SetPlayerPos(playerid, ppsInfo[num][pps_ToX], ppsInfo[num][pps_ToY], ppsInfo[num][pps_ToZ]);
  66.             SetPlayerFacingAngle(playerid, ppsInfo[num][pps_ToA]);
  67.             SetPlayerInterior(playerid, ppsInfo[num][pps_ToInt]);
  68.             SetPlayerVirtualWorld(playerid, ppsInfo[num][pps_ToVirt]);
  69.             SetPVarInt(playerid, "pps_Deactivation", 1), SetTimerEx("pps_PickupDeactivationTime", pps_Deact, false, "i", playerid);
  70.             if(funcidx("OnPlayerPortal") != -1) CallLocalFunction("OnPlayerPortal", "iii", playerid, num, 1);
  71.             break;
  72.         }
  73.         else if(pickupid == ppsInfo[num][pps_Toid] && GetPVarInt(playerid, "pps_Deactivation") == 0)
  74.         {
  75.             SetPlayerPos(playerid, ppsInfo[num][pps_X], ppsInfo[num][pps_Y], ppsInfo[num][pps_Z]);
  76.             SetPlayerFacingAngle(playerid, ppsInfo[num][pps_A]);
  77.             SetPlayerInterior(playerid, ppsInfo[num][pps_Int]);
  78.             SetPlayerVirtualWorld(playerid, ppsInfo[num][pps_Virt]);
  79.             SetPVarInt(playerid, "pps_Deactivation", 1), SetTimerEx("pps_PickupDeactivationTime", pps_Deact, false, "i", playerid);
  80.             if(funcidx("OnPlayerPortal") != -1) CallLocalFunction("OnPlayerPortal", "iii", playerid, num, 0);
  81.             break;
  82.         }
  83.     }
  84.     if(funcidx("pps_OnPlayerPickUpPickup") != -1) return CallLocalFunction("pps_OnPlayerPickUpPickup", "ii", playerid, pickupid);
  85.     return 1;
  86. }
  87.  
  88. public pps_PickupDeactivationTime(playerid) { SetPVarInt(playerid, "pps_Deactivation", 0); return 1; }
  89.  
  90. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  91. {
  92.     if(!pps_number)
  93.     {
  94.         if(funcidx("pps_OnPlayerKeyStateChange") != -1) return CallLocalFunction("pps_OnPlayerKeyStateChange", "iii", playerid, newkeys, oldkeys);
  95.         return 1;
  96.     }
  97.     for(new num = 0; num <= pps_number; num++)
  98.     {
  99.         if(newkeys & ppsInfo[num][pps_Key])
  100.         {
  101.             if(ppsInfo[num][pps_Key] == -1) continue;
  102.             if(IsPlayerInRangeOfPoint(playerid, 1.0, ppsInfo[num][pps_X], ppsInfo[num][pps_Y], ppsInfo[num][pps_Z]) && GetPlayerVirtualWorld(playerid) == ppsInfo[num][pps_Virt])
  103.             {
  104.                 SetPlayerInterior(playerid, ppsInfo[num][pps_ToInt]);
  105.                 SetPlayerPos(playerid, ppsInfo[num][pps_ToX], ppsInfo[num][pps_ToY], ppsInfo[num][pps_ToZ]);
  106.                 SetPlayerFacingAngle(playerid, ppsInfo[num][pps_ToA]);
  107.                 SetPlayerVirtualWorld(playerid, ppsInfo[num][pps_ToVirt]);
  108.                 if(funcidx("OnPlayerPortal") != -1) CallLocalFunction("OnPlayerPortal", "iii", playerid, num, 1);
  109.                 break;
  110.             }
  111.             else if(IsPlayerInRangeOfPoint(playerid, 1.0, ppsInfo[num][pps_ToX], ppsInfo[num][pps_ToY], ppsInfo[num][pps_ToZ]) && GetPlayerVirtualWorld(playerid) == ppsInfo[num][pps_ToVirt])
  112.             {
  113.                 SetPlayerPos(playerid, ppsInfo[num][pps_X], ppsInfo[num][pps_Y], ppsInfo[num][pps_Z]);
  114.                 SetPlayerFacingAngle(playerid, ppsInfo[num][pps_A]);
  115.                 SetPlayerInterior(playerid, ppsInfo[num][pps_Int]);
  116.                 SetPlayerVirtualWorld(playerid, ppsInfo[num][pps_Virt]);
  117.                 if(funcidx("OnPlayerPortal") != -1) CallLocalFunction("OnPlayerPortal", "iii", playerid, num, 0);
  118.                 break;
  119.             }
  120.         }
  121.     }
  122.     if(funcidx("pps_OnPlayerKeyStateChange") != -1) return CallLocalFunction("pps_OnPlayerKeyStateChange", "iii", playerid, newkeys, oldkeys);
  123.     return 1;
  124. }
  125.  
  126. stock CreatePortal(Float:X, Float:Y, Float:Z, Float:A, Int, Virt, Float:ToX, Float:ToY, Float:ToZ, Float:ToA, ToInt, ToVirt, Key = -1)
  127. {
  128.     pps_number++;
  129.     ppsInfo[pps_number][pps_Key] = Key;
  130.     ppsInfo[pps_number][pps_id] = CreatePickup(pps_Model, pps_Type, X, Y, Z, Virt);
  131.     ppsInfo[pps_number][pps_Toid] = CreatePickup(pps_Model, pps_Type, ToX, ToY, ToZ, ToVirt);
  132.    
  133.     ppsInfo[pps_number][pps_X] = X, ppsInfo[pps_number][pps_Y] = Y, ppsInfo[pps_number][pps_Z] = Z, ppsInfo[pps_number][pps_A] = A;
  134.     ppsInfo[pps_number][pps_Int] = Int, ppsInfo[pps_number][pps_Virt] = Virt;
  135.    
  136.     ppsInfo[pps_number][pps_ToX] = ToX, ppsInfo[pps_number][pps_ToY] = ToY, ppsInfo[pps_number][pps_ToZ] = ToZ, ppsInfo[pps_number][pps_ToA] = ToA;
  137.     ppsInfo[pps_number][pps_ToInt] = ToInt, ppsInfo[pps_number][pps_ToVirt] = ToVirt;
  138.     return pps_number;
  139. }
  140.  
  141. #if defined _ALS_OnPlayerPickUpPickup
  142.   #undef OnPlayerPickUpPickup
  143. #else
  144.   #define _ALS_OnPlayerPickUpPickup
  145. #endif
  146. #define OnPlayerPickUpPickup pps_OnPlayerPickUpPickup
  147. forward pps_OnPlayerPickUpPickup(playerid, newkeys, oldkeys);
  148.  
  149. #if defined _ALS_OnPlayerKeyStateChange
  150.   #undef OnPlayerKeyStateChange
  151. #else
  152.   #define _ALS_OnPlayerKeyStateChange
  153. #endif
  154. #define OnPlayerKeyStateChange pps_OnPlayerKeyStateChange
  155. forward pps_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement