GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

Soygun Sistemi Yardım

Başlatan xXDieForGameXx, 04 Mayıs 2017, 17:01:04

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

xXDieForGameXx

#define FILTERSCRIPT
#include <a_samp>
#include    <streamer>
#include    <zcmd>

#define     VAULT_VIRTUALWORLD      (69)
#define     PICKUP_COOLDOWN         (3)
#define     DEPOSIT_MIN             (3500)
#define     DEPOSIT_MAX             (100000)

enum    e_objecttypes
{
TYPE_LASER1 = 2,
TYPE_LASER2,
TYPE_LASER3,
TYPE_VAULTDOOR = 6
};

enum e_labeltypes
{
Text3D: TYPE_KEYPAD,
Text3D: TYPE_EXPLOSIVE,
Text3D: TYPE_TIMELOCK
};

enum    e_bankcontrols
{
bool: Alarm,
bool: LasersOn,
VaultDoorState,
KeypadHackTime,
DoorInteractionTime
};



new
BankEntryPickup = -1, BankExitPickup = -1, VaultEntryPickup = -1, VaultExitPickup = -1,
AlarmArea = -1,
    VaultObjects[8] = {INVALID_OBJECT_ID, ...},
Text3D: VaultLabels[e_labeltypes] = {Text3D: INVALID_3DTEXT_ID, ...},
Text3D: InsideVaultLabels[8] = {Text3D: INVALID_3DTEXT_ID, ...},
BankControls[e_bankcontrols],
bool: DepositRobbed[8];

new
RobberyTimer[MAX_PLAYERS] = {-1, ...},
RobberyCounter[MAX_PLAYERS],
RobberyType[MAX_PLAYERS],
RobberyCash[MAX_PLAYERS],
RobberyEscape[MAX_PLAYERS] = {-1, ...};

new
Float: DepositCoords[8][3] = {
{2141.9255, 1629.3380, 993.5761},
{2141.9255, 1633.2180, 993.5761},
{2141.9255, 1637.0980, 993.5761},
{2141.9255, 1640.9780, 993.5761},
{2146.5600, 1629.3040, 993.5761},
{2146.5600, 1633.1840, 993.5761},
{2146.5600, 1637.0640, 993.5761},
{2146.5600, 1640.9440, 993.5761}
};

new
Float: GetawayLocations[][3] = {
        {405.4649, 2451.4956, 16.5000},
        {-1647.8981, 2497.6980, 86.2031},
        {-911.9169, -498.3112, 25.9609}
};

forward RobberyUpdate(playerid);
forward ResetLasers();
forward OpenVaultDoor(type, seconds);
forward ResetVaultDoor();
forward DisableAlarm();

stock ConvertToMinutes(time)
{
    // https://forum.sa-mp.com/showpost.php?p=3223897&postcount=11
    new string[15];//-2000000000:00 could happen, so make the string 15 chars to avoid any errors
    format(string, sizeof(string), "%02d:%02d", time / 60, time % 60);
    return string;
}

stock ResetRobbery(playerid, destroy = 0)
{
if(RobberyTimer[playerid] != -1) KillTimer(RobberyTimer[playerid]);
    RobberyTimer[playerid] = -1;
    RobberyCounter[playerid] = 0;
    RobberyType[playerid] = 0;
    if(destroy)
    {
if(IsValidDynamicCP(RobberyEscape[playerid])) DestroyDynamicCP(RobberyEscape[playerid]);
RobberyEscape[playerid] = -1;
RobberyCash[playerid] = 0;
}

return 1;
}

stock GetClosestDeposit(playerid, Float: range = 2.0)
{
new id = -1, Float: dist = range, Float: tempdist;
for(new i; i < sizeof(DepositCoords); ++i)
{
    tempdist = GetPlayerDistanceFromPoint(playerid, DepositCoords[i][0], DepositCoords[i][1], DepositCoords[i][2]);
if(tempdist > range) continue;
if(tempdist <= dist)
{
dist = tempdist;
id = i;
break;
}
}

return id;
}

stock RandomEx(min, max)
return random(max - min) + min;

stock TriggerAlarm(reason = 0)
{
if(BankControls[Alarm]) return 1;
    for(new i; i < GetMaxPlayers(); ++i)
{
if(!IsPlayerConnected(i)) continue;
if(RobberyType[i] == 1)
{
ResetRobbery(i);
ClearAnimations(i, 1);
}

if(!GetPVarInt(i, "InsideBank")) continue;
SetPVarInt(i, "Alarm", 1);
        PlayerPlaySound(i, 3401, 0.0, 0.0, 0.0);
}

SetTimer("DisableAlarm", 120000, false);
BankControls[Alarm] = true;
SendClientMessageToAll(-1, (reason == 1) ? ("Banka Güvenliği Tehlikede! Bir Patlama Sesi Duyuldu!") : ("Banka Güvenliği Tehlikede Suçlular Kasa Odasında!"));
return 1;
}

public OnFilterScriptInit()
{
BankEntryPickup = CreatePickup(19197, 1, 2303.1777, -16.1625, 27.0);
BankExitPickup = CreatePickup(19197, 1, 2305.5591, -16.1253, 27.0, -1);
VaultEntryPickup = CreatePickup(19197, 1, 2315.5637, -0.1449, 27.0, -1);
VaultExitPickup = CreatePickup(19197, 1, 2144.2788, 1602.5975, 998.0, VAULT_VIRTUALWORLD);

AlarmArea = CreateDynamicRectangle(2130.6169, 1607.9010, 2156.9197,1625.2343, VAULT_VIRTUALWORLD, 1);

VaultObjects[0] = CreateDynamicObject(19446, 2144.333, 1601.475, 1001.387, 90.000, 90.199, 0.000, VAULT_VIRTUALWORLD); // wall
VaultObjects[1] = CreateDynamicObject(2947, 2145.037, 1601.421, 996.776, 0.000, 0.000, -89.500, VAULT_VIRTUALWORLD); // door
VaultObjects[TYPE_LASER1] = CreateDynamicObject(18643, 2142.983, 1606.679, 993.188, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
VaultObjects[TYPE_LASER2] = CreateDynamicObject(18643, 2142.983, 1606.679, 993.938, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
VaultObjects[TYPE_LASER3] = CreateDynamicObject(18643, 2142.983, 1606.679, 994.688, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
VaultObjects[5] = CreateDynamicObject(19273, 2146.116, 1604.895, 994.118, 0.000, 0.000, 270.000, VAULT_VIRTUALWORLD); // keypad
VaultObjects[TYPE_VAULTDOOR] = CreateDynamicObject(19799, 2143.185, 1626.965, 994.298, 0.000, -0.400, -180.000, VAULT_VIRTUALWORLD); // vault door
VaultObjects[7] = CreateDynamicObject(2922, 2140.361, 1626.826, 993.978, 0.000, 0.000, 180.000, VAULT_VIRTUALWORLD); // timelock

VaultLabels[TYPE_KEYPAD] = CreateDynamic3DTextLabel("Hack Aleti\n{FFFFFF} Lazerleri Kapatmak İçin /hack Kullanın ", 0xF39C12FF, 2145.85, 1604.9456, 993.5684, 15.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
    VaultLabels[TYPE_EXPLOSIVE] = CreateDynamic3DTextLabel("Banka Kapısı - Seçenek 1\n{FFFFFF}Kapıyı Patlatmak İçin /bombakur Kullanın (Hızlı & Sesli)", 0xF39C12FF, 2144.1624, 1626.25, 993.6882, 10.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
    VaultLabels[TYPE_TIMELOCK] = CreateDynamic3DTextLabel("Banka Kapısı - Seçenek 2\n{FFFFFF}Şifreyi Kırmak İçin {FF0000}/sifrekir Kullanın  (Yavaş & Sessiz)", 0xF39C12FF, 2140.2610, 1626.25, 993.6882, 10.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);

for(new i; i < sizeof(InsideVaultLabels); ++i)
{
InsideVaultLabels[i] = CreateDynamic3DTextLabel("Para Kasaları\n{FFFFFF}/soy", 0x2ECC71FF, DepositCoords[i][0], DepositCoords[i][1], DepositCoords[i][2], 15.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
}

BankControls[LasersOn] = true;
return 1;
}

public OnFilterScriptExit()
{
DestroyPickup(BankEntryPickup);
DestroyPickup(BankExitPickup);
DestroyPickup(VaultEntryPickup);
    DestroyPickup(VaultExitPickup);

for(new i; i < GetMaxPlayers(); ++i)
{
    if(!IsPlayerConnected(i)) continue;
    if(GetPVarInt(i, "Alarm"))
    {
  SetPVarInt(i, "Alarm", 0);
        PlayerPlaySound(i, 3402, 0.0, 0.0, 0.0);
}

    ClearAnimations(i, 1);
ResetRobbery(i, 1);
}

return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    ResetRobbery(playerid, 1);
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    ResetRobbery(playerid, 1);
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(GetPVarInt(playerid, "BankPickupCooldown") > gettime()) return 1;
if(pickupid == BankEntryPickup) {
    SetPVarInt(playerid, "InsideBank", 1);
SetPlayerPos(playerid, 2305.5591, -16.1253, 26.7496);
    SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
   
    if(BankControls[Alarm])
{
            SetPVarInt(playerid, "Alarm", 1);
        PlayerPlaySound(playerid, 3401, 0.0, 0.0, 0.0);
}
}else if(pickupid == BankExitPickup) {
    SetPVarInt(playerid, "InsideBank", 0);
SetPlayerPos(playerid, 2303.1777, -16.1625, 26.4844);
    SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
   
if(GetPVarInt(playerid, "Alarm"))
{
            SetPVarInt(playerid, "Alarm", 0);
        PlayerPlaySound(playerid, 3402, 0.0, 0.0, 0.0);
}
   
    if(RobberyCash[playerid] > 0 && !IsValidDynamicCP(RobberyEscape[playerid]))
    {
        new id = random(sizeof(GetawayLocations));
        RobberyEscape[playerid] = CreateDynamicCP(GetawayLocations[id][0], GetawayLocations[id][1], GetawayLocations[id][2], 3.0, .playerid = playerid, .streamdistance = 5000.0);
        SendClientMessage(playerid, -1, "Haritada Kırmızı İle İşaretlenen Yere Git.Eğer Ölürsen Parayı Kaybedersin.");
    }
}else if(pickupid == VaultEntryPickup) {
    if(!GetPVarInt(playerid, "animsloaded"))
    {
        ApplyAnimation(playerid, "BOMBER", "null", 0.0, 0, 0, 0, 0, 0);
        ApplyAnimation(playerid, "COP_AMBIENT", "null", 0.0, 0, 0, 0, 0, 0);
            ApplyAnimation(playerid, "ROB_BANK", "null", 0.0, 0, 0, 0, 0, 0);
SetPVarInt(playerid, "animsloaded", 1);
}

    SetPlayerInterior(playerid, 1);
    SetPlayerVirtualWorld(playerid, VAULT_VIRTUALWORLD);
        SetPlayerPos(playerid, 2144.2788, 1602.5975, 997.7766);
    SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
}else if(pickupid == VaultExitPickup) {
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
        SetPlayerPos(playerid, 2315.5637, -0.1449, 26.7422);
    SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
}

return 1;
}

public OnPlayerEnterDynamicArea(playerid, areaid)
{
if(areaid == AlarmArea && BankControls[LasersOn] && !BankControls[Alarm]) TriggerAlarm();
return 1;
}

public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
if(checkpointid == RobberyEscape[playerid])
{
    new string[128];
format(string, sizeof(string), "Soygun Başarılı! Şu Kadar Para Çaldın {2ECC71}$%d.", RobberyCash[playerid]);
SendClientMessage(playerid, -1, string);

GivePlayerMoney(playerid, RobberyCash[playerid]);
RobberyCash[playerid] = 0;
DestroyDynamicCP(RobberyEscape[playerid]);
RobberyEscape[playerid] = -1;
}

return 1;
}

public RobberyUpdate(playerid)
{
if(RobberyCounter[playerid] > 1) {
    RobberyCounter[playerid]--;

      new string[32];
switch(RobberyType[playerid])
{
case 1: format(string, sizeof(string), "~w~Hackleniyor: %s%d", (RobberyCounter[playerid] <= 5) ? ("~r~~h~") : ("~y~"), RobberyCounter[playerid]);
case 2: format(string, sizeof(string), "~w~Bosaltiliyor: %s%d", (RobberyCounter[playerid] <= 3) ? ("~r~~h~") : ("~y~"), RobberyCounter[playerid]);
}

GameTextForPlayer(playerid, string, 1000, 4);
}else if(RobberyCounter[playerid] == 1) {
        switch(RobberyType[playerid])
{
case 1:
{
BankControls[LasersOn] = false;
SetDynamicObjectPos(VaultObjects[TYPE_LASER1], 2142.983, 1606.679, 990.0);
SetDynamicObjectPos(VaultObjects[TYPE_LASER2], 2142.983, 1606.679, 990.0);
SetDynamicObjectPos(VaultObjects[TYPE_LASER3], 2142.983, 1606.679, 990.0);
SetTimer("ResetLasers", 240000, false);
SendClientMessage(playerid, -1, "Lazerleri Kapattın. Artık Alarm Çalmadan Kasa Kapısınıa Gidebilirsiniz.");
SendClientMessage(playerid, -1, "Lazerler 4 Dakika İçinde Aktif Olacak.");
}

case 2:
{
    new cash = RandomEx(DEPOSIT_MIN, DEPOSIT_MAX), string[128];
    if(BankControls[VaultDoorState] == 2) cash -= floatround(cash * 0.1, floatround_floor); // explosion damaged deposit boxes, 10% damage penalty
RobberyCash[playerid] += cash;
format(string, sizeof(string), "Para Kasalarını Boşalttın  Ve {2ECC71}$%d {FFFFFF} Para Kazandın.", cash);
SendClientMessage(playerid, -1, string);
SendClientMessage(playerid, -1, "Şu Anda Parayı Alıp Gidebilirsin Veya Hepsini Soyabilirsin.");
}
}

ClearAnimations(playerid, 1);
ResetRobbery(playerid);
}

return 1;
}

public OpenVaultDoor(type, seconds)
{
if(seconds > 1) {
    seconds--;

    new string[128];
        switch(type)
{
case 2: format(string, sizeof(string), "Banka Kapısı - Seçenek 1\n{FFFFFF}Kasa Kapısını Patlatmak İçin /bombakur Kullanın  (Hızlı & Sesli)\n{2ECC71}%s", ConvertToMinutes(seconds));
case 3: format(string, sizeof(string), "Banka Kapısı - Seçenek 2\n{FFFFFF}Kasa Kapısını Hacklemek İçin /sifrekir Kullanın  (Yavaş & Sessiz)\n{2ECC71}%s", ConvertToMinutes(seconds));
}

UpdateDynamic3DTextLabelText((type == 2) ? VaultLabels[TYPE_EXPLOSIVE] : VaultLabels[TYPE_TIMELOCK], 0xF39C12FF, string);
        SetTimerEx("OpenVaultDoor", 1000, false, "ii", type, seconds);
}else if(seconds == 1) {
        BankControls[VaultDoorState] = type;
SetTimer("ResetVaultDoor", 120000, false);

switch(type)
{
case 2:
{
    // explosive
    CreateExplosion(2144.1624, 1626.25, 993.6882, 11, 5.0);
SetDynamicObjectPos(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 985.298);
                UpdateDynamic3DTextLabelText(VaultLabels[TYPE_EXPLOSIVE], 0xF39C12FF, "Banka Kapısı - Seçenek 1 Kasa Kapısını Patlatmak İçin /bombakur Kullanın  (Hızlı & Sesli)");
TriggerAlarm(1);
}

case 3:
{
    // timelock
MoveDynamicObject(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.35, 0.01, 0.000, -0.400, -270.0);
                UpdateDynamic3DTextLabelText(VaultLabels[TYPE_TIMELOCK], 0xF39C12FF, "Banka Kapısı - Seçenek 2\n{FFFFFF}Kasa Kapısını Hacklemek İçin /sifrekir Kullanın (Yavaş & Sessiz)");
}
}
}

return 1;
}

public ResetVaultDoor()
{
switch(BankControls[VaultDoorState])
{
case 2: SetDynamicObjectPos(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.298);
case 3: MoveDynamicObject(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.298, 0.01, 0.000, -0.400, -180.0);
}

for(new i; i < sizeof(DepositCoords); ++i)
{
DepositRobbed[i] = false;
Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, InsideVaultLabels[i], E_STREAMER_COLOR, 0x2ECC71FF);
}

BankControls[VaultDoorState] = 0; // closed
return 1;
}

public DisableAlarm()
{
BankControls[Alarm] = false;
for(new i; i < GetMaxPlayers(); ++i)
{
if(!IsPlayerConnected(i)) continue;
if(!GetPVarInt(i, "Alarm")) continue;
  SetPVarInt(i, "Alarm", 0);
        PlayerPlaySound(i, 3402, 0.0, 0.0, 0.0);
}

return 1;
}

CMD:hack(playerid, params[])
{
if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2145.85, 1604.9456, 993.5684)) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Hack Aletinin Yanında Değilsin.");
if(BankControls[Alarm]) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Alarm Açıkken Hack Aletini Kullanamazsın.");
if(!BankControls[LasersOn]) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Hack Aleti Zaten Hackleniyor.");
if(BankControls[KeypadHackTime] > gettime())
{
    new string[72];
format(string, sizeof(string), "Hata: {FFFFFF}Hack Aletini Hacklemek İçin %s Beklemelisin.", ConvertToMinutes(BankControls[KeypadHackTime] - gettime()));
SendClientMessage(playerid, 0xE74C3CFF, string);
return 1;
}

ApplyAnimation(playerid, "COP_AMBIENT", "COPBROWSE_LOOP", 4.1, 1, 0, 0, 0, 0, 1);
BankControls[KeypadHackTime] = gettime() + 600;
RobberyType[playerid] = 1;
RobberyCounter[playerid] = 20;
RobberyTimer[playerid] = SetTimerEx("RobberyUpdate", 1000, true, "i", playerid);
return 1;
}

CMD:bombakur(playerid, params[])
{
    if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2144.1624, 1626.25, 993.6882)) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Banka Kapısının Yakınında Değilsin.");
if(BankControls[VaultDoorState] != 0) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Banka Kapısı Zaten Şu anda Açılıyor.");
if(BankControls[DoorInteractionTime] > gettime())
{
    new string[72];
format(string, sizeof(string), "Hata: {FFFFFF}Banka Kapısına Bomba Kurmak İçin %s Beklemelisin.", ConvertToMinutes(BankControls[DoorInteractionTime] - gettime()));
SendClientMessage(playerid, 0xE74C3CFF, string);
return 1;
}

ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.1, 0, 1, 1, 0, 0, 1);
BankControls[DoorInteractionTime] = gettime() + 600;
BankControls[VaultDoorState] = 1; // opening
SetTimerEx("OpenVaultDoor", 1000, false, "ii", 2, 6);
SendClientMessage(playerid, -1, "Bomba Kuruldu Ve 6 Saniye İçinde Patlayacak. Siper Al!");
return 1;
}

CMD:sifrekir(playerid, params[])
{
    if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2140.2610, 1626.25, 993.6882)) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Şifre Kırıcının Yanında DEğilsin.");
if(BankControls[Alarm]) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Şifre Kırıcı Alarm Çaldığı İçin Çalışmıyor.");
if(BankControls[VaultDoorState] != 0) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Banka Kapısı Zaten Açılıyor.");
if(BankControls[DoorInteractionTime] > gettime())
{
    new string[72];
format(string, sizeof(string), "Hata: {FFFFFF}Banka Kapısının Şifresini Kırmak İçin %s Beklemelisin.", ConvertToMinutes(BankControls[DoorInteractionTime] - gettime()));
SendClientMessage(playerid, 0xE74C3CFF, string);
return 1;
}

BankControls[DoorInteractionTime] = gettime() + 600;
BankControls[VaultDoorState] = 1; // opening
SetTimerEx("OpenVaultDoor", 1000, false, "ii", 3, 30);
SendClientMessage(playerid, -1, "Şifreyi Kırmaya Başladın, Banka Kapısı 30 Saniye İçinde Açılacak.");
return 1;
}

CMD:soy(playerid, params[])
{
    if(BankControls[VaultDoorState] < 2) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Banka Kapısı Açık Değilken Para Kasalarını Soyamazsın.");
new id = GetClosestDeposit(playerid);
if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Para Kasasının Yakınında Değilsin.");
if(DepositRobbed[id]) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Zaten Para Kasalarını Soyuyorsun.Sürenin Bitmesini Bekle");
DepositRobbed[id] = true;
Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, InsideVaultLabels[id], E_STREAMER_COLOR, 0xE74C3CFF);
ApplyAnimation(playerid, "ROB_BANK", "CAT_Safe_Rob", 4.0, 1, 0, 0, 0, 0, 1);
RobberyType[playerid] = 2;
RobberyCounter[playerid] = 10;
RobberyTimer[playerid] = SetTimerEx("RobberyUpdate", 1000, true, "i", playerid);
return 1;
}



Arkadaşlar Bunu Cnr Serveri Soygun Sisteminde olduğu gibi soyulduğunda aranma seviyesi artması yapabilirmisiniz  :yaramaz2:


HalilTemur

Bi Şöyle Dene;

PAWN Kodu: Seç
#define FILTERSCRIPT
#include <a_samp>
#include    <streamer>
#include    <zcmd>

#define     VAULT_VIRTUALWORLD      (69)
#define     PICKUP_COOLDOWN         (3)
#define     DEPOSIT_MIN             (3500)
#define     DEPOSIT_MAX             (100000)

enum    e_objecttypes
{
TYPE_LASER1 = 2,
TYPE_LASER2,
TYPE_LASER3,
TYPE_VAULTDOOR = 6
};

enum e_labeltypes
{
Text3D: TYPE_KEYPAD,
Text3D: TYPE_EXPLOSIVE,
Text3D: TYPE_TIMELOCK
};

enum    e_bankcontrols
{
bool: Alarm,
bool: LasersOn,
VaultDoorState,
KeypadHackTime,
DoorInteractionTime
};



new
BankEntryPickup = -1, BankExitPickup = -1, VaultEntryPickup = -1, VaultExitPickup = -1,
AlarmArea = -1,
    VaultObjects[8] = {INVALID_OBJECT_ID, ...},
Text3D: VaultLabels[e_labeltypes] = {Text3D: INVALID_3DTEXT_ID, ...},
Text3D: InsideVaultLabels[8] = {Text3D: INVALID_3DTEXT_ID, ...},
BankControls[e_bankcontrols],
bool: DepositRobbed[8];

new
RobberyTimer[MAX_PLAYERS] = {-1, ...},
RobberyCounter[MAX_PLAYERS],
RobberyType[MAX_PLAYERS],
RobberyCash[MAX_PLAYERS],
RobberyEscape[MAX_PLAYERS] = {-1, ...};

new
Float: DepositCoords[8][3] = {
{2141.9255, 1629.3380, 993.5761},
{2141.9255, 1633.2180, 993.5761},
{2141.9255, 1637.0980, 993.5761},
{2141.9255, 1640.9780, 993.5761},
{2146.5600, 1629.3040, 993.5761},
{2146.5600, 1633.1840, 993.5761},
{2146.5600, 1637.0640, 993.5761},
{2146.5600, 1640.9440, 993.5761}
};

new
Float: GetawayLocations[][3] = {
        {405.4649, 2451.4956, 16.5000},
        {-1647.8981, 2497.6980, 86.2031},
        {-911.9169, -498.3112, 25.9609}
};

forward RobberyUpdate(playerid);
forward ResetLasers();
forward OpenVaultDoor(type, seconds);
forward ResetVaultDoor();
forward DisableAlarm();

stock ConvertToMinutes(time)
{
    // https://forum.sa-mp.com/showpost.php?p=3223897&postcount=11
    new string[15];//-2000000000:00 could happen, so make the string 15 chars to avoid any errors
    format(string, sizeof(string), "%02d:%02d", time / 60, time % 60);
    return string;
}

stock ResetRobbery(playerid, destroy = 0)
{
if(RobberyTimer[playerid] != -1) KillTimer(RobberyTimer[playerid]);
    RobberyTimer[playerid] = -1;
    RobberyCounter[playerid] = 0;
    RobberyType[playerid] = 0;
    if(destroy)
    {
if(IsValidDynamicCP(RobberyEscape[playerid])) DestroyDynamicCP(RobberyEscape[playerid]);
RobberyEscape[playerid] = -1;
RobberyCash[playerid] = 0;
}

return 1;
}

stock GetClosestDeposit(playerid, Float: range = 2.0)
{
new id = -1, Float: dist = range, Float: tempdist;
for(new i; i < sizeof(DepositCoords); ++i)
{
    tempdist = GetPlayerDistanceFromPoint(playerid, DepositCoords[i][0], DepositCoords[i][1], DepositCoords[i][2]);
if(tempdist > range) continue;
if(tempdist <= dist)
{
dist = tempdist;
id = i;
break;
}
}

return id;
}

stock RandomEx(min, max)
return random(max - min) + min;

stock TriggerAlarm(reason = 0)
{
if(BankControls[Alarm]) return 1;
    for(new i; i < GetMaxPlayers(); ++i)
{
if(!IsPlayerConnected(i)) continue;
if(RobberyType[i] == 1)
{
ResetRobbery(i);
ClearAnimations(i, 1);
}

if(!GetPVarInt(i, "InsideBank")) continue;
SetPVarInt(i, "Alarm", 1);
        PlayerPlaySound(i, 3401, 0.0, 0.0, 0.0);
}

SetTimer("DisableAlarm", 120000, false);
BankControls[Alarm] = true;
SendClientMessageToAll(-1, (reason == 1) ? ("Banka Güvenliği Tehlikede! Bir Patlama Sesi Duyuldu!") : ("Banka Güvenliği Tehlikede Suçlular Kasa Odasında!"));
return 1;
}

public OnFilterScriptInit()
{
BankEntryPickup = CreatePickup(19197, 1, 2303.1777, -16.1625, 27.0);
BankExitPickup = CreatePickup(19197, 1, 2305.5591, -16.1253, 27.0, -1);
VaultEntryPickup = CreatePickup(19197, 1, 2315.5637, -0.1449, 27.0, -1);
VaultExitPickup = CreatePickup(19197, 1, 2144.2788, 1602.5975, 998.0, VAULT_VIRTUALWORLD);

AlarmArea = CreateDynamicRectangle(2130.6169, 1607.9010, 2156.9197,1625.2343, VAULT_VIRTUALWORLD, 1);

VaultObjects[0] = CreateDynamicObject(19446, 2144.333, 1601.475, 1001.387, 90.000, 90.199, 0.000, VAULT_VIRTUALWORLD); // wall
VaultObjects[1] = CreateDynamicObject(2947, 2145.037, 1601.421, 996.776, 0.000, 0.000, -89.500, VAULT_VIRTUALWORLD); // door
VaultObjects[TYPE_LASER1] = CreateDynamicObject(18643, 2142.983, 1606.679, 993.188, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
VaultObjects[TYPE_LASER2] = CreateDynamicObject(18643, 2142.983, 1606.679, 993.938, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
VaultObjects[TYPE_LASER3] = CreateDynamicObject(18643, 2142.983, 1606.679, 994.688, 0.000, 0.000, 0.000, VAULT_VIRTUALWORLD); // laser
VaultObjects[5] = CreateDynamicObject(19273, 2146.116, 1604.895, 994.118, 0.000, 0.000, 270.000, VAULT_VIRTUALWORLD); // keypad
VaultObjects[TYPE_VAULTDOOR] = CreateDynamicObject(19799, 2143.185, 1626.965, 994.298, 0.000, -0.400, -180.000, VAULT_VIRTUALWORLD); // vault door
VaultObjects[7] = CreateDynamicObject(2922, 2140.361, 1626.826, 993.978, 0.000, 0.000, 180.000, VAULT_VIRTUALWORLD); // timelock

VaultLabels[TYPE_KEYPAD] = CreateDynamic3DTextLabel("Hack Aleti\n{FFFFFF} Lazerleri Kapatmak İçin /hack Kullanın ", 0xF39C12FF, 2145.85, 1604.9456, 993.5684, 15.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
    VaultLabels[TYPE_EXPLOSIVE] = CreateDynamic3DTextLabel("Banka Kapısı - Seçenek 1\n{FFFFFF}Kapıyı Patlatmak İçin /bombakur Kullanın (Hızlı & Sesli)", 0xF39C12FF, 2144.1624, 1626.25, 993.6882, 10.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
    VaultLabels[TYPE_TIMELOCK] = CreateDynamic3DTextLabel("Banka Kapısı - Seçenek 2\n{FFFFFF}Şifreyi Kırmak İçin {FF0000}/sifrekir Kullanın  (Yavaş & Sessiz)", 0xF39C12FF, 2140.2610, 1626.25, 993.6882, 10.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);

for(new i; i < sizeof(InsideVaultLabels); ++i)
{
InsideVaultLabels[i] = CreateDynamic3DTextLabel("Para Kasaları\n{FFFFFF}/soy", 0x2ECC71FF, DepositCoords[i][0], DepositCoords[i][1], DepositCoords[i][2], 15.0, .testlos = 1, .worldid = VAULT_VIRTUALWORLD);
}

BankControls[LasersOn] = true;
return 1;
}

public OnFilterScriptExit()
{
DestroyPickup(BankEntryPickup);
DestroyPickup(BankExitPickup);
DestroyPickup(VaultEntryPickup);
    DestroyPickup(VaultExitPickup);

for(new i; i < GetMaxPlayers(); ++i)
{
    if(!IsPlayerConnected(i)) continue;
    if(GetPVarInt(i, "Alarm"))
    {
  SetPVarInt(i, "Alarm", 0);
        PlayerPlaySound(i, 3402, 0.0, 0.0, 0.0);
}

    ClearAnimations(i, 1);
ResetRobbery(i, 1);
}

return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    ResetRobbery(playerid, 1);
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    ResetRobbery(playerid, 1);
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(GetPVarInt(playerid, "BankPickupCooldown") > gettime()) return 1;
if(pickupid == BankEntryPickup) {
    SetPVarInt(playerid, "InsideBank", 1);
SetPlayerPos(playerid, 2305.5591, -16.1253, 26.7496);
    SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
   
    if(BankControls[Alarm])
{
            SetPVarInt(playerid, "Alarm", 1);
        PlayerPlaySound(playerid, 3401, 0.0, 0.0, 0.0);
}
}else if(pickupid == BankExitPickup) {
    SetPVarInt(playerid, "InsideBank", 0);
SetPlayerPos(playerid, 2303.1777, -16.1625, 26.4844);
    SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
   
if(GetPVarInt(playerid, "Alarm"))
{
            SetPVarInt(playerid, "Alarm", 0);
        PlayerPlaySound(playerid, 3402, 0.0, 0.0, 0.0);
}
   
    if(RobberyCash[playerid] > 0 && !IsValidDynamicCP(RobberyEscape[playerid]))
    {
        new id = random(sizeof(GetawayLocations));
        RobberyEscape[playerid] = CreateDynamicCP(GetawayLocations[id][0], GetawayLocations[id][1], GetawayLocations[id][2], 3.0, .playerid = playerid, .streamdistance = 5000.0);
        SendClientMessage(playerid, -1, "Haritada Kırmızı İle İşaretlenen Yere Git.Eğer Ölürsen Parayı Kaybedersin.");
    }
}else if(pickupid == VaultEntryPickup) {
    if(!GetPVarInt(playerid, "animsloaded"))
    {
        ApplyAnimation(playerid, "BOMBER", "null", 0.0, 0, 0, 0, 0, 0);
        ApplyAnimation(playerid, "COP_AMBIENT", "null", 0.0, 0, 0, 0, 0, 0);
            ApplyAnimation(playerid, "ROB_BANK", "null", 0.0, 0, 0, 0, 0, 0);
SetPVarInt(playerid, "animsloaded", 1);
}

    SetPlayerInterior(playerid, 1);
    SetPlayerVirtualWorld(playerid, VAULT_VIRTUALWORLD);
        SetPlayerPos(playerid, 2144.2788, 1602.5975, 997.7766);
    SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
}else if(pickupid == VaultExitPickup) {
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
        SetPlayerPos(playerid, 2315.5637, -0.1449, 26.7422);
    SetPVarInt(playerid, "BankPickupCooldown", gettime() + PICKUP_COOLDOWN);
}

return 1;
}

public OnPlayerEnterDynamicArea(playerid, areaid)
{
if(areaid == AlarmArea && BankControls[LasersOn] && !BankControls[Alarm]) TriggerAlarm();
return 1;
}

public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
if(checkpointid == RobberyEscape[playerid])
{
    new string[128];
format(string, sizeof(string), "Soygun Başarılı! Şu Kadar Para Çaldın {2ECC71}$%d.", RobberyCash[playerid]);
SendClientMessage(playerid, -1, string);

GivePlayerMoney(playerid, RobberyCash[playerid]);
RobberyCash[playerid] = 0;
DestroyDynamicCP(RobberyEscape[playerid]);
RobberyEscape[playerid] = -1;
}

return 1;
}

public RobberyUpdate(playerid)
{
if(RobberyCounter[playerid] > 1) {
    RobberyCounter[playerid]--;

      new string[32];
switch(RobberyType[playerid])
{
case 1: format(string, sizeof(string), "~w~Hackleniyor: %s%d", (RobberyCounter[playerid] <= 5) ? ("~r~~h~") : ("~y~"), RobberyCounter[playerid]);
case 2: format(string, sizeof(string), "~w~Bosaltiliyor: %s%d", (RobberyCounter[playerid] <= 3) ? ("~r~~h~") : ("~y~"), RobberyCounter[playerid]);
}

GameTextForPlayer(playerid, string, 1000, 4);
}else if(RobberyCounter[playerid] == 1) {
        switch(RobberyType[playerid])
{
case 1:
{
BankControls[LasersOn] = false;
SetDynamicObjectPos(VaultObjects[TYPE_LASER1], 2142.983, 1606.679, 990.0);
SetDynamicObjectPos(VaultObjects[TYPE_LASER2], 2142.983, 1606.679, 990.0);
SetDynamicObjectPos(VaultObjects[TYPE_LASER3], 2142.983, 1606.679, 990.0);
SetTimer("ResetLasers", 240000, false);
SendClientMessage(playerid, -1, "Lazerleri Kapattın. Artık Alarm Çalmadan Kasa Kapısınıa Gidebilirsiniz.");
SendClientMessage(playerid, -1, "Lazerler 4 Dakika İçinde Aktif Olacak.");
}

case 2:
{
    new cash = RandomEx(DEPOSIT_MIN, DEPOSIT_MAX), string[128];
    if(BankControls[VaultDoorState] == 2) cash -= floatround(cash * 0.1, floatround_floor); // explosion damaged deposit boxes, 10% damage penalty
RobberyCash[playerid] += cash;
format(string, sizeof(string), "Para Kasalarını Boşalttın  Ve {2ECC71}$%d {FFFFFF} Para Kazandın.", cash);
SendClientMessage(playerid, -1, string);
SendClientMessage(playerid, -1, "Şu Anda Parayı Alıp Gidebilirsin Veya Hepsini Soyabilirsin.");
}
}

ClearAnimations(playerid, 1);
ResetRobbery(playerid);
}

return 1;
}

public OpenVaultDoor(type, seconds)
{
if(seconds > 1) {
    seconds--;

    new string[128];
        switch(type)
{
case 2: format(string, sizeof(string), "Banka Kapısı - Seçenek 1\n{FFFFFF}Kasa Kapısını Patlatmak İçin /bombakur Kullanın  (Hızlı & Sesli)\n{2ECC71}%s", ConvertToMinutes(seconds));
case 3: format(string, sizeof(string), "Banka Kapısı - Seçenek 2\n{FFFFFF}Kasa Kapısını Hacklemek İçin /sifrekir Kullanın  (Yavaş & Sessiz)\n{2ECC71}%s", ConvertToMinutes(seconds));
}

UpdateDynamic3DTextLabelText((type == 2) ? VaultLabels[TYPE_EXPLOSIVE] : VaultLabels[TYPE_TIMELOCK], 0xF39C12FF, string);
        SetTimerEx("OpenVaultDoor", 1000, false, "ii", type, seconds);
}else if(seconds == 1) {
        BankControls[VaultDoorState] = type;
SetTimer("ResetVaultDoor", 120000, false);

switch(type)
{
case 2:
{
    // explosive
    CreateExplosion(2144.1624, 1626.25, 993.6882, 11, 5.0);
SetDynamicObjectPos(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 985.298);
                UpdateDynamic3DTextLabelText(VaultLabels[TYPE_EXPLOSIVE], 0xF39C12FF, "Banka Kapısı - Seçenek 1 Kasa Kapısını Patlatmak İçin /bombakur Kullanın  (Hızlı & Sesli)");
TriggerAlarm(1);
}

case 3:
{
    // timelock
MoveDynamicObject(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.35, 0.01, 0.000, -0.400, -270.0);
                UpdateDynamic3DTextLabelText(VaultLabels[TYPE_TIMELOCK], 0xF39C12FF, "Banka Kapısı - Seçenek 2\n{FFFFFF}Kasa Kapısını Hacklemek İçin /sifrekir Kullanın (Yavaş & Sessiz)");
}
}
}

return 1;
}

public ResetVaultDoor()
{
switch(BankControls[VaultDoorState])
{
case 2: SetDynamicObjectPos(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.298);
case 3: MoveDynamicObject(VaultObjects[TYPE_VAULTDOOR], 2143.185, 1626.965, 994.298, 0.01, 0.000, -0.400, -180.0);
}

for(new i; i < sizeof(DepositCoords); ++i)
{
DepositRobbed[i] = false;
Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, InsideVaultLabels[i], E_STREAMER_COLOR, 0x2ECC71FF);
}

BankControls[VaultDoorState] = 0; // closed
return 1;
}

public DisableAlarm()
{
BankControls[Alarm] = false;
for(new i; i < GetMaxPlayers(); ++i)
{
if(!IsPlayerConnected(i)) continue;
if(!GetPVarInt(i, "Alarm")) continue;
  SetPVarInt(i, "Alarm", 0);
        PlayerPlaySound(i, 3402, 0.0, 0.0, 0.0);
}

return 1;
}

CMD:hack(playerid, params[])
{
if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2145.85, 1604.9456, 993.5684)) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Hack Aletinin Yanında Değilsin.");
if(BankControls[Alarm]) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Alarm Açıkken Hack Aletini Kullanamazsın.");
if(!BankControls[LasersOn]) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Hack Aleti Zaten Hackleniyor.");
if(BankControls[KeypadHackTime] > gettime())
{
    new string[72];
format(string, sizeof(string), "Hata: {FFFFFF}Hack Aletini Hacklemek İçin %s Beklemelisin.", ConvertToMinutes(BankControls[KeypadHackTime] - gettime()));
SendClientMessage(playerid, 0xE74C3CFF, string);
return 1;
}

ApplyAnimation(playerid, "COP_AMBIENT", "COPBROWSE_LOOP", 4.1, 1, 0, 0, 0, 0, 1);
BankControls[KeypadHackTime] = gettime() + 600;
RobberyType[playerid] = 1;
RobberyCounter[playerid] = 20;
RobberyTimer[playerid] = SetTimerEx("RobberyUpdate", 1000, true, "i", playerid);
return 1;
}

CMD:bombakur(playerid, params[])
{
    if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2144.1624, 1626.25, 993.6882)) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Banka Kapısının Yakınında Değilsin.");
if(BankControls[VaultDoorState] != 0) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Banka Kapısı Zaten Şu anda Açılıyor.");
if(BankControls[DoorInteractionTime] > gettime())
{
    new string[72];
format(string, sizeof(string), "Hata: {FFFFFF}Banka Kapısına Bomba Kurmak İçin %s Beklemelisin.", ConvertToMinutes(BankControls[DoorInteractionTime] - gettime()));
SendClientMessage(playerid, 0xE74C3CFF, string);
return 1;
}

ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.1, 0, 1, 1, 0, 0, 1);
BankControls[DoorInteractionTime] = gettime() + 600;
BankControls[VaultDoorState] = 1; // opening
SetTimerEx("OpenVaultDoor", 1000, false, "ii", 2, 6);
SendClientMessage(playerid, -1, "Bomba Kuruldu Ve 6 Saniye İçinde Patlayacak. Siper Al!");
return 1;
}

CMD:sifrekir(playerid, params[])
{
    if(!IsPlayerInRangeOfPoint(playerid, 1.5, 2140.2610, 1626.25, 993.6882)) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Şifre Kırıcının Yanında DEğilsin.");
if(BankControls[Alarm]) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Şifre Kırıcı Alarm Çaldığı İçin Çalışmıyor.");
if(BankControls[VaultDoorState] != 0) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Banka Kapısı Zaten Açılıyor.");
if(BankControls[DoorInteractionTime] > gettime())
{
    new string[72];
format(string, sizeof(string), "Hata: {FFFFFF}Banka Kapısının Şifresini Kırmak İçin %s Beklemelisin.", ConvertToMinutes(BankControls[DoorInteractionTime] - gettime()));
SendClientMessage(playerid, 0xE74C3CFF, string);
return 1;
}

BankControls[DoorInteractionTime] = gettime() + 600;
BankControls[VaultDoorState] = 1; // opening
SetTimerEx("OpenVaultDoor", 1000, false, "ii", 3, 30);
SendClientMessage(playerid, -1, "Şifreyi Kırmaya Başladın, Banka Kapısı 30 Saniye İçinde Açılacak.");
return 1;
}

CMD:soy(playerid, params[])
{
    if(BankControls[VaultDoorState] < 2) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Banka Kapısı Açık Değilken Para Kasalarını Soyamazsın.");
new id = GetClosestDeposit(playerid);
if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Para Kasasının Yakınında Değilsin.");
if(DepositRobbed[id]) return SendClientMessage(playerid, 0xE74C3CFF, "Hata: {FFFFFF}Zaten Para Kasalarını Soyuyorsun.Sürenin Bitmesini Bekle");
DepositRobbed[id] = true;
Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, InsideVaultLabels[id], E_STREAMER_COLOR, 0xE74C3CFF);
ApplyAnimation(playerid, "ROB_BANK", "CAT_Safe_Rob", 4.0, 1, 0, 0, 0, 0, 1);
RobberyType[playerid] = 2;
RobberyCounter[playerid] = 10;
RobberyTimer[playerid] = SetTimerEx("RobberyUpdate", 1000, true, "i", playerid);
return 1;
}


xXDieForGameXx

compile olmuyor pawn hata veriyor kapatıyor kendini rica etsem amx yapıp bana atabilirmisin