Guest User

Bank Robbery

a guest
Aug 28th, 2015
2,394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 17.87 KB | None | 0 0
  1. #define     FILTERSCRIPT
  2. #include    <a_samp>
  3. #include    <streamer>
  4. #include    <zcmd>
  5.  
  6. #define     VAULT_VIRTUALWORLD      (69)
  7. #define     PICKUP_COOLDOWN         (3)
  8. #define     DEPOSIT_MIN             (3500)
  9. #define     DEPOSIT_MAX             (10000)
  10.  
  11. enum    e_objecttypes
  12. {
  13.     TYPE_LASER1 = 2,
  14.     TYPE_LASER2,
  15.     TYPE_LASER3,
  16.     TYPE_VAULTDOOR = 6
  17. };
  18.  
  19. enum    e_labeltypes
  20. {
  21.     Text3D: TYPE_KEYPAD,
  22.     Text3D: TYPE_EXPLOSIVE,
  23.     Text3D: TYPE_TIMELOCK
  24. };
  25.  
  26. enum    e_bankcontrols
  27. {
  28.     bool: Alarm,
  29.     bool: LasersOn,
  30.     VaultDoorState,
  31.     KeypadHackTime,
  32.     DoorInteractionTime
  33. };
  34.  
  35. new
  36.     BankEntryPickup = -1, BankExitPickup = -1, VaultEntryPickup = -1, VaultExitPickup = -1,
  37.     AlarmArea = -1,
  38.     VaultObjects[8] = {INVALID_OBJECT_ID, ...},
  39.     Text3D: VaultLabels[e_labeltypes] = {Text3D: INVALID_3DTEXT_ID, ...},
  40.     Text3D: InsideVaultLabels[8] = {Text3D: INVALID_3DTEXT_ID, ...},
  41.     BankControls[e_bankcontrols],
  42.     bool: DepositRobbed[8];
  43.    
  44. new
  45.     RobberyTimer[MAX_PLAYERS] = {-1, ...},
  46.     RobberyCounter[MAX_PLAYERS],
  47.     RobberyType[MAX_PLAYERS],
  48.     RobberyCash[MAX_PLAYERS],
  49.     RobberyEscape[MAX_PLAYERS] = {-1, ...};
  50.  
  51. new
  52.     Float: DepositCoords[8][3] = {
  53.         {2141.9255, 1629.3380, 993.5761},
  54.         {2141.9255, 1633.2180, 993.5761},
  55.         {2141.9255, 1637.0980, 993.5761},
  56.         {2141.9255, 1640.9780, 993.5761},
  57.         {2146.5600, 1629.3040, 993.5761},
  58.         {2146.5600, 1633.1840, 993.5761},
  59.         {2146.5600, 1637.0640, 993.5761},
  60.         {2146.5600, 1640.9440, 993.5761}
  61.     };
  62.    
  63. new
  64.     Float: GetawayLocations[][3] = {
  65.         {405.4649, 2451.4956, 16.5000},
  66.         {-1647.8981, 2497.6980, 86.2031},
  67.         {-911.9169, -498.3112, 25.9609}
  68.     };
  69.  
  70. forward RobberyUpdate(playerid);
  71. forward ResetLasers();
  72. forward OpenVaultDoor(type, seconds);
  73. forward ResetVaultDoor();
  74. forward DisableAlarm();
  75.  
  76. stock ConvertToMinutes(time)
  77. {
  78.     // http://forum.sa-mp.com/showpost.php?p=3223897&postcount=11
  79.     new string[15];//-2000000000:00 could happen, so make the string 15 chars to avoid any errors
  80.     format(string, sizeof(string), "%02d:%02d", time / 60, time % 60);
  81.     return string;
  82. }
  83.  
  84. stock ResetRobbery(playerid, destroy = 0)
  85. {
  86.     if(RobberyTimer[playerid] != -1) KillTimer(RobberyTimer[playerid]);
  87.     RobberyTimer[playerid] = -1;
  88.     RobberyCounter[playerid] = 0;
  89.     RobberyType[playerid] = 0;
  90.     if(destroy)
  91.     {
  92.         if(IsValidDynamicCP(RobberyEscape[playerid])) DestroyDynamicCP(RobberyEscape[playerid]);
  93.         RobberyEscape[playerid] = -1;
  94.         RobberyCash[playerid] = 0;
  95.     }
  96.    
  97.     return 1;
  98. }
  99.  
  100. stock GetClosestDeposit(playerid, Float: range = 2.0)
  101. {
  102.     new id = -1, Float: dist = range, Float: tempdist;
  103.     for(new i; i < sizeof(DepositCoords); ++i)
  104.     {
  105.         tempdist = GetPlayerDistanceFromPoint(playerid, DepositCoords[i][0], DepositCoords[i][1], DepositCoords[i][2]);
  106.         if(tempdist > range) continue;
  107.         if(tempdist <= dist)
  108.         {
  109.             dist = tempdist;
  110.             id = i;
  111.             break;
  112.         }
  113.     }
  114.    
  115.     return id;
  116. }
  117.  
  118. stock RandomEx(min, max)
  119.     return random(max - min) + min;
  120.  
  121. stock TriggerAlarm(reason = 0)
  122. {
  123.     if(BankControls[Alarm]) return 1;
  124.     for(new i; i < GetMaxPlayers(); ++i)
  125.     {
  126.         if(!IsPlayerConnected(i)) continue;
  127.         if(RobberyType[i] == 1)
  128.         {
  129.             ResetRobbery(i);
  130.             ClearAnimations(i, 1);
  131.         }
  132.        
  133.         if(!GetPVarInt(i, "InsideBank")) continue;
  134.         SetPVarInt(i, "Alarm", 1);
  135.         PlayerPlaySound(i, 3401, 0.0, 0.0, 0.0);
  136.     }
  137.    
  138.     SetTimer("DisableAlarm", 120000, false);
  139.     BankControls[Alarm] = true;
  140.     SendClientMessageToAll(-1, (reason == 1) ? ("Bank security heard an explosion in the vault room!") : ("Bank security detected criminals in the vault room!"));
  141.     return 1;
  142. }
  143.  
  144. public OnFilterScriptInit()
  145. {
  146.     BankEntryPickup = CreatePickup(19197, 1, 2303.1777, -16.1625, 27.0);
  147.     BankExitPickup = CreatePickup(19197, 1, 2305.5591, -16.1253, 27.0, -1);
  148.     VaultEntryPickup = CreatePickup(19197, 1, 2315.5637, -0.1449, 27.0, -1);
  149.     VaultExitPickup = CreatePickup(19197, 1, 2144.2788, 1602.5975, 998.0, VAULT_VIRTUALWORLD);
  150.    
  151.     AlarmArea = CreateDynamicRectangle(2130.6169, 1607.9010, 2156.9197,1625.2343, VAULT_VIRTUALWORLD, 1);
  152.    
  153.     VaultObjects[0] = CreateDynamicObject(19446, 2144.333, 1601.475, 1001.387, 90.000, 90.199, 0.000, VAULT_VIRTUALWORLD); // wall
  154.     VaultObjects[1] = CreateDynamicObject(2947, 2145.037, 1601.421, 996.776, 0.000, 0.000, -89.500, VAULT_VIRTUALWORLD); // door
  155.     VaultObjects[TYPE_LASER1] = CreateDynamicObject(18643, 2142.983, 1606.679, 993.188, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
  156.     VaultObjects[TYPE_LASER2] = CreateDynamicObject(18643, 2142.983, 1606.679, 993.938, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
  157.     VaultObjects[TYPE_LASER3] = CreateDynamicObject(18643, 2142.983, 1606.679, 994.688, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
  158.     VaultObjects[5] = CreateDynamicObject(19273, 2146.116, 1604.895, 994.118, 0.000, 0.000, 270.000, VAULT_VIRTUALWORLD); // keypad
  159.     VaultObjects[TYPE_VAULTDOOR] = CreateDynamicObject(19799, 2143.185, 1626.965, 994.298, 0.000, -0.400, -180.000, VAULT_VIRTUALWORLD); // vault door
  160.     VaultObjects[7] = CreateDynamicObject(2922, 2140.361, 1626.826, 993.978, 0.000, 0.000, 180.000, VAULT_VIRTUALWORLD); // timelock
  161.  
  162.     VaultLabels[TYPE_KEYPAD] = CreateDynamic3DTextLabel("Keypad\n{FFFFFF}/starthack to disable lasers", 0xF39C12FF, 2145.85, 1604.9456, 993.5684, 15.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
  163.     VaultLabels[TYPE_EXPLOSIVE] = CreateDynamic3DTextLabel("Vault Door - Option 1\n{FFFFFF}/plantbomb to blow up vault door (fast & loud)", 0xF39C12FF, 2144.1624, 1626.25, 993.6882, 10.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
  164.     VaultLabels[TYPE_TIMELOCK] = CreateDynamic3DTextLabel("Vault Door - Option 2\n{FFFFFF}/timelock to start time lock (slow & silent)", 0xF39C12FF, 2140.2610, 1626.25, 993.6882, 10.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
  165.  
  166.     for(new i; i < sizeof(InsideVaultLabels); ++i)
  167.     {
  168.         InsideVaultLabels[i] = CreateDynamic3DTextLabel("Deposit Boxes\n{FFFFFF}/emptydeposit", 0x2ECC71FF, DepositCoords[i][0], DepositCoords[i][1], DepositCoords[i][2], 15.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
  169.     }
  170.  
  171.     BankControls[LasersOn] = true;
  172.     return 1;
  173. }
  174.  
  175. public OnFilterScriptExit()
  176. {
  177.     DestroyPickup(BankEntryPickup);
  178.     DestroyPickup(BankExitPickup);
  179.     DestroyPickup(VaultEntryPickup);
  180.     DestroyPickup(VaultExitPickup);
  181.  
  182.     for(new i; i < GetMaxPlayers(); ++i)
  183.     {
  184.         if(!IsPlayerConnected(i)) continue;
  185.         if(GetPVarInt(i, "Alarm"))
  186.         {
  187.             SetPVarInt(i, "Alarm", 0);
  188.             PlayerPlaySound(i, 3402, 0.0, 0.0, 0.0);
  189.         }
  190.        
  191.         ClearAnimations(i, 1);
  192.         ResetRobbery(i, 1);
  193.     }
  194.    
  195.     return 1;
  196. }
  197.  
  198. public OnPlayerDisconnect(playerid, reason)
  199. {
  200.     ResetRobbery(playerid, 1);
  201.     return 1;
  202. }
  203.  
  204. public OnPlayerDeath(playerid, killerid, reason)
  205. {
  206.     ResetRobbery(playerid, 1);
  207.     return 1;
  208. }
  209.  
  210. public OnPlayerPickUpPickup(playerid, pickupid)
  211. {
  212.     if(GetPVarInt(playerid, "BankPickupCooldown") > gettime()) return 1;
  213.     if(pickupid == BankEntryPickup) {
  214.         SetPVarInt(playerid, "InsideBank", 1);
  215.         SetPlayerPos(playerid, 2305.5591, -16.1253, 26.7496);
  216.         SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
  217.        
  218.         if(BankControls[Alarm])
  219.         {
  220.             SetPVarInt(playerid, "Alarm", 1);
  221.             PlayerPlaySound(playerid, 3401, 0.0, 0.0, 0.0);
  222.         }
  223.     }else if(pickupid == BankExitPickup) {
  224.         SetPVarInt(playerid, "InsideBank", 0);
  225.         SetPlayerPos(playerid, 2303.1777, -16.1625, 26.4844);
  226.         SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
  227.        
  228.         if(GetPVarInt(playerid, "Alarm"))
  229.         {
  230.             SetPVarInt(playerid, "Alarm", 0);
  231.             PlayerPlaySound(playerid, 3402, 0.0, 0.0, 0.0);
  232.         }
  233.        
  234.         if(RobberyCash[playerid] > 0 && !IsValidDynamicCP(RobberyEscape[playerid]))
  235.         {
  236.             new id = random(sizeof(GetawayLocations));
  237.             RobberyEscape[playerid] = CreateDynamicCP(GetawayLocations[id][0], GetawayLocations[id][1], GetawayLocations[id][2], 3.0, .playerid = playerid, .streamdistance = 5000.0);
  238.             SendClientMessage(playerid, -1, "Go to the marked location to get your money. If you die you'll lose it.");
  239.         }
  240.     }else if(pickupid == VaultEntryPickup) {
  241.         if(!GetPVarInt(playerid, "animsloaded"))
  242.         {
  243.             ApplyAnimation(playerid, "BOMBER", "null", 0.0, 0, 0, 0, 0, 0);
  244.             ApplyAnimation(playerid, "COP_AMBIENT", "null", 0.0, 0, 0, 0, 0, 0);
  245.             ApplyAnimation(playerid, "ROB_BANK", "null", 0.0, 0, 0, 0, 0, 0);
  246.             SetPVarInt(playerid, "animsloaded", 1);
  247.         }
  248.        
  249.         SetPlayerInterior(playerid, 1);
  250.         SetPlayerVirtualWorld(playerid, VAULT_VIRTUALWORLD);
  251.         SetPlayerPos(playerid, 2144.2788, 1602.5975, 997.7766);
  252.         SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
  253.     }else if(pickupid == VaultExitPickup) {
  254.         SetPlayerInterior(playerid, 0);
  255.         SetPlayerVirtualWorld(playerid, 0);
  256.         SetPlayerPos(playerid, 2315.5637, -0.1449, 26.7422);
  257.         SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
  258.     }
  259.    
  260.     return 1;
  261. }
  262.  
  263. public OnPlayerEnterDynamicArea(playerid, areaid)
  264. {
  265.     if(areaid == AlarmArea && BankControls[LasersOn] && !BankControls[Alarm]) TriggerAlarm();
  266.     return 1;
  267. }
  268.  
  269. public OnPlayerEnterDynamicCP(playerid, checkpointid)
  270. {
  271.     if(checkpointid == RobberyEscape[playerid])
  272.     {
  273.         new string[128];
  274.         format(string, sizeof(string), "Robbery successful! You've robbed {2ECC71}$%d.", RobberyCash[playerid]);
  275.         SendClientMessage(playerid, -1, string);
  276.        
  277.         GivePlayerMoney(playerid, RobberyCash[playerid]);
  278.         RobberyCash[playerid] = 0;
  279.         DestroyDynamicCP(RobberyEscape[playerid]);
  280.         RobberyEscape[playerid] = -1;
  281.     }
  282.    
  283.     return 1;
  284. }
  285.  
  286. public RobberyUpdate(playerid)
  287. {
  288.     if(RobberyCounter[playerid] > 1) {
  289.         RobberyCounter[playerid]--;
  290.  
  291.         new string[32];
  292.         switch(RobberyType[playerid])
  293.         {
  294.             case 1: format(string, sizeof(string), "~w~Hacking: %s%d", (RobberyCounter[playerid] <= 5) ? ("~r~~h~") : ("~y~"), RobberyCounter[playerid]);
  295.             case 2: format(string, sizeof(string), "~w~Emptying: %s%d", (RobberyCounter[playerid] <= 3) ? ("~r~~h~") : ("~y~"), RobberyCounter[playerid]);
  296.         }
  297.  
  298.         GameTextForPlayer(playerid, string, 1000, 4);
  299.     }else if(RobberyCounter[playerid] == 1) {
  300.         switch(RobberyType[playerid])
  301.         {
  302.             case 1:
  303.             {
  304.                 BankControls[LasersOn] = false;
  305.                 SetDynamicObjectPos(VaultObjects[TYPE_LASER1], 2142.983, 1606.679, 990.0);
  306.                 SetDynamicObjectPos(VaultObjects[TYPE_LASER2], 2142.983, 1606.679, 990.0);
  307.                 SetDynamicObjectPos(VaultObjects[TYPE_LASER3], 2142.983, 1606.679, 990.0);
  308.                 SetTimer("ResetLasers", 240000, false);
  309.                 SendClientMessage(playerid, -1, "You've disabled the lasers. Now you can go to the vault door without raising the alarm.");
  310.                 SendClientMessage(playerid, -1, "Lasers will turn back on in 4 minutes.");
  311.             }
  312.  
  313.             case 2:
  314.             {
  315.                 new cash = RandomEx(DEPOSIT_MIN, DEPOSIT_MAX), string[128];
  316.                 if(BankControls[VaultDoorState] == 2) cash -= floatround(cash * 0.1, floatround_floor); // explosion damaged deposit boxes, 10% damage penalty
  317.                 RobberyCash[playerid] += cash;
  318.                 format(string, sizeof(string), "You've emptied a set of deposit boxes and stole {2ECC71}$%d {FFFFFF}worth of stuff.", cash);
  319.                 SendClientMessage(playerid, -1, string);
  320.                 SendClientMessage(playerid, -1, "You can leave the bank to get your money or keep robbing.");
  321.             }
  322.         }
  323.  
  324.         ClearAnimations(playerid, 1);
  325.         ResetRobbery(playerid);
  326.     }
  327.  
  328.     return 1;
  329. }
  330.  
  331. public ResetLasers()
  332. {
  333.     BankControls[LasersOn] = true;
  334.     SetDynamicObjectPos(VaultObjects[TYPE_LASER1], 2142.983, 1606.679, 993.188);
  335.     SetDynamicObjectPos(VaultObjects[TYPE_LASER2], 2142.983, 1606.679, 993.938);
  336.     SetDynamicObjectPos(VaultObjects[TYPE_LASER3], 2142.983, 1606.679, 994.688);
  337.  
  338.     if(IsAnyPlayerInDynamicArea(AlarmArea, 1)) TriggerAlarm();
  339.     return 1;
  340. }
  341.  
  342. public OpenVaultDoor(type, seconds)
  343. {
  344.     if(seconds > 1) {
  345.         seconds--;
  346.  
  347.         new string[128];
  348.         switch(type)
  349.         {
  350.             case 2: format(string, sizeof(string), "Vault Door - Option 1\n{FFFFFF}/plantbomb to blow up vault door (fast & loud)\n{2ECC71}%s", ConvertToMinutes(seconds));
  351.             case 3: format(string, sizeof(string), "Vault Door - Option 2\n{FFFFFF}/timelock to start time lock (slow & silent)\n{2ECC71}%s", ConvertToMinutes(seconds));
  352.         }
  353.  
  354.         UpdateDynamic3DTextLabelText((type == 2) ? VaultLabels[TYPE_EXPLOSIVE] : VaultLabels[TYPE_TIMELOCK], 0xF39C12FF, string);
  355.         SetTimerEx("OpenVaultDoor", 1000, false, "ii", type, seconds);
  356.     }else if(seconds == 1) {
  357.         BankControls[VaultDoorState] = type;
  358.         SetTimer("ResetVaultDoor", 120000, false);
  359.  
  360.         switch(type)
  361.         {
  362.             case 2:
  363.             {
  364.                 // explosive
  365.                 CreateExplosion(2144.1624, 1626.25, 993.6882, 11, 5.0);
  366.                 SetDynamicObjectPos(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 985.298);
  367.                 UpdateDynamic3DTextLabelText(VaultLabels[TYPE_EXPLOSIVE], 0xF39C12FF, "Vault Door - Option 1\n{FFFFFF}/plantbomb to blow up vault door (fast & loud)");
  368.                 TriggerAlarm(1);
  369.             }
  370.  
  371.             case 3:
  372.             {
  373.                 // timelock
  374.                 MoveDynamicObject(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.35, 0.01, 0.000, -0.400, -270.0);
  375.                 UpdateDynamic3DTextLabelText(VaultLabels[TYPE_TIMELOCK], 0xF39C12FF, "Vault Door - Option 2\n{FFFFFF}/timelock to start time lock (slow & silent)");
  376.             }
  377.         }
  378.     }
  379.  
  380.     return 1;
  381. }
  382.  
  383. public ResetVaultDoor()
  384. {
  385.     switch(BankControls[VaultDoorState])
  386.     {
  387.         case 2: SetDynamicObjectPos(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.298);
  388.         case 3: MoveDynamicObject(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.298, 0.01, 0.000, -0.400, -180.0);
  389.     }
  390.  
  391.     for(new i; i < sizeof(DepositCoords); ++i)
  392.     {
  393.         DepositRobbed[i] = false;
  394.         Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, InsideVaultLabels[i], E_STREAMER_COLOR, 0x2ECC71FF);
  395.     }
  396.    
  397.     BankControls[VaultDoorState] = 0; // closed
  398.     return 1;
  399. }
  400.  
  401. public DisableAlarm()
  402. {
  403.     BankControls[Alarm] = false;
  404.     for(new i; i < GetMaxPlayers(); ++i)
  405.     {
  406.         if(!IsPlayerConnected(i)) continue;
  407.         if(!GetPVarInt(i, "Alarm")) continue;
  408.         SetPVarInt(i, "Alarm", 0);
  409.         PlayerPlaySound(i, 3402, 0.0, 0.0, 0.0);
  410.     }
  411.  
  412.     return 1;
  413. }
  414.  
  415. CMD:starthack(playerid, params[])
  416. {
  417.     if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2145.85, 1604.9456, 993.5684)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near the keypad.");
  418.     if(BankControls[Alarm]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Alarm went off, you can't hack the keypad.");
  419.     if(!BankControls[LasersOn]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Keypad has been hacked already.");
  420.     if(BankControls[KeypadHackTime] > gettime())
  421.     {
  422.         new string[72];
  423.         format(string, sizeof(string), "ERROR: {FFFFFF}You have to wait %s to hack the keypad again.", ConvertToMinutes(BankControls[KeypadHackTime] - gettime()));
  424.         SendClientMessage(playerid, 0xE74C3CFF, string);
  425.         return 1;
  426.     }
  427.    
  428.     ApplyAnimation(playerid, "COP_AMBIENT", "COPBROWSE_LOOP", 4.1, 1, 0, 0, 0, 0, 1);
  429.     BankControls[KeypadHackTime] = gettime() + 600;
  430.     RobberyType[playerid] = 1;
  431.     RobberyCounter[playerid] = 20;
  432.     RobberyTimer[playerid] = SetTimerEx("RobberyUpdate", 1000, true, "i", playerid);
  433.     return 1;
  434. }
  435.  
  436. CMD:plantbomb(playerid, params[])
  437. {
  438.     if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2144.1624, 1626.25, 993.6882)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near the vault door.");
  439.     if(BankControls[VaultDoorState] != 0) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Vault door is already open/opening.");
  440.     if(BankControls[DoorInteractionTime] > gettime())
  441.     {
  442.         new string[72];
  443.         format(string, sizeof(string), "ERROR: {FFFFFF}You have to wait %s to open the vault door again.", ConvertToMinutes(BankControls[DoorInteractionTime] - gettime()));
  444.         SendClientMessage(playerid, 0xE74C3CFF, string);
  445.         return 1;
  446.     }
  447.    
  448.     ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.1, 0, 1, 1, 0, 0, 1);
  449.     BankControls[DoorInteractionTime] = gettime() + 600;
  450.     BankControls[VaultDoorState] = 1; // opening
  451.     SetTimerEx("OpenVaultDoor", 1000, false, "ii", 2, 6);
  452.     SendClientMessage(playerid, -1, "Bomb has been planted and it'll explode in 6 seconds. Take cover!");
  453.     return 1;
  454. }
  455.  
  456. CMD:timelock(playerid, params[])
  457. {
  458.     if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2140.2610, 1626.25, 993.6882)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near the time lock.");
  459.     if(BankControls[Alarm]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Time lock disabled because of alarm.");
  460.     if(BankControls[VaultDoorState] != 0) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Vault door is already open/opening.");
  461.     if(BankControls[DoorInteractionTime] > gettime())
  462.     {
  463.         new string[72];
  464.         format(string, sizeof(string), "ERROR: {FFFFFF}You have to wait %s to open the vault door again.", ConvertToMinutes(BankControls[DoorInteractionTime] - gettime()));
  465.         SendClientMessage(playerid, 0xE74C3CFF, string);
  466.         return 1;
  467.     }
  468.  
  469.     BankControls[DoorInteractionTime] = gettime() + 600;
  470.     BankControls[VaultDoorState] = 1; // opening
  471.     SetTimerEx("OpenVaultDoor", 1000, false, "ii", 3, 30);
  472.     SendClientMessage(playerid, -1, "You've started the time lock, vault door will open in 30 seconds.");
  473.     return 1;
  474. }
  475.  
  476. CMD:emptydeposit(playerid, params[])
  477. {
  478.     if(BankControls[VaultDoorState] < 2) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't empty deposit boxes when the vault door isn't open.");
  479.     new id = GetClosestDeposit(playerid);
  480.     if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near any deposit boxes.");
  481.     if(DepositRobbed[id]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Deposit boxes you're trying to rob are already robbed.");
  482.     DepositRobbed[id] = true;
  483.     Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, InsideVaultLabels[id], E_STREAMER_COLOR, 0xE74C3CFF);
  484.     ApplyAnimation(playerid, "ROB_BANK", "CAT_Safe_Rob", 4.0, 1, 0, 0, 0, 0, 1);
  485.     RobberyType[playerid] = 2;
  486.     RobberyCounter[playerid] = 10;
  487.     RobberyTimer[playerid] = SetTimerEx("RobberyUpdate", 1000, true, "i", playerid);
  488.     return 1;
  489. }
Advertisement
Add Comment
Please, Sign In to add comment