В теме 1 сообщение

hokageud
Завсегдатый
enum AIRDROP_INFO
{
    AirDropStatus,
    AirDropContent[7],
    AirDropObject[2],
    AirDropTimer,
    Text3D:AirDropText,
    Float:AirDropBoxPos[6],
    Float:AirDropParachutePos[6]
};

new AirDropInfo[][AIRDROP_INFO] = {
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {-1286.600342694.2558650.517200.000000.000000.00000}, {-1286.624762694.3742750.929900.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {-221.156692603.2656363.159400.000000.000000.00000}, {-221.183402603.2824763.586400.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {382.619602539.4711916.997800.000000.000000.00000}, {382.588012539.5319817.407500.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {587.976381669.636237.440900.000000.000000.00000}, {587.970281669.661877.847200.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {340.20050875.7172220.853300.000000.000000.00000}, {340.18100875.7415221.259700.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {-236.644261216.3377720.191200.000000.000000.00000}, {-236.665501216.3150620.598900.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {53.728941167.4448219.112800.000000.000000.00000}, {53.710301167.4323719.521900.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {-1206.219481824.3504642.174300.000000.000000.00000}, {-1206.222051824.4086942.582900.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {-1929.696662383.6884849.946800.000000.000000.00000}, {-1929.714842383.7468350.356100.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {-523.890202593.0205153.843800.000000.000000.00000}, {-523.907592593.1184154.251000.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {-923.226012021.7266861.367100.000000.000000.00000}, {-923.214602021.7976161.774500.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {-754.601011639.8321527.619900.000000.000000.00000}, {-754.633421639.9160228.028800.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {681.550421836.428715.688200.000000.000000.00000}, {681.495121836.470836.097100.000000.000000.00000}},
    {0, {0000000}, {INVALID_OBJECT_ID, INVALID_OBJECT_ID}, 0, Text3D:INVALID_3DTEXT_ID,  {6.547121526.4023413.193100.000000.000000.00000}, {6.534601526.4210213.601000.000000.000000.00000}}
};

new
    AirDropIDx = -1,
    AirDropZone = -1,
    STRING_GLOBAL[256];

#define RandomFIX(%1,%2)        (random(%2-%1)+%1)

GetFreeAirDropID()
{
    new airdrop_checked = -1;
    for(new i = sizeof(AirDropInfo)-1; i != -1; i--)
    {
        airdrop_checked = random(sizeof(AirDropInfo)-1);
        if(AirDropInfo[airdrop_checked][AirDropStatus] == 0return airdrop_checked;
    }
    return airdrop_checked;
}

CreateAirDrop()
{
    if(AirDropIDx != -1return 1;
    new idx = GetFreeAirDropID();

    STRING_GLOBAL[0] = EOS;
    foreach(new i: Player)
    {
        if(!IsAGang(i) && !IsAMafia(i)) continue;
        if(idx == -1) SendClientMessage(i, 0x33CC66FF"[F] [AirDrop Info]: Приземление AirDrop занимает две с половиной минуты.");
        else
        {
            format(STRING_GLOBAL, sizeof(STRING_GLOBAL), "[F] [AirDrop Info]: AirDrop номер %d отправляется на землю.", idx);
            SendClientMessage(i, 0x33CC66FF, STRING_GLOBAL);
            SendClientMessage(i, 0x33CC66FF"[F] [AirDrop Info]: Приземление AirDrop занимает две с половиной минуты.");
            SendClientMessage(i, 0x33CC66FF"[F] [AirDrop Info]: Примерное местоположение AirDrop отмечено на карте.");
        }
    }


    if(idx == -1return 1;

    AirDropInfo[idx][AirDropStatus] = 0;

    AirDropInfo[idx][AirDropContent][0] = RandomFIX(5002500);
    AirDropInfo[idx][AirDropContent][1] = RandomFIX(5002500);
    AirDropInfo[idx][AirDropContent][2] = RandomFIX(2502500);
    AirDropInfo[idx][AirDropContent][3] = RandomFIX(510);
    AirDropInfo[idx][AirDropContent][4] = RandomFIX(510);
    AirDropInfo[idx][AirDropContent][5] = RandomFIX(510);
    AirDropInfo[idx][AirDropContent][6] = RandomFIX(510);

    if(AirDropInfo[idx][AirDropObject][0] != INVALID_OBJECT_ID) DestroyDynamicObject(AirDropInfo[idx][AirDropObject][0]);
    AirDropInfo[idx][AirDropObject][0] = CreateDynamicObject(2935, AirDropInfo[idx][AirDropBoxPos][0], AirDropInfo[idx][AirDropBoxPos][1], AirDropInfo[idx][AirDropBoxPos][2]+250.000000, AirDropInfo[idx][AirDropBoxPos][3], AirDropInfo[idx][AirDropBoxPos][4], AirDropInfo[idx][AirDropBoxPos][5], -1, -1, -1120.0120.0);

    if(AirDropInfo[idx][AirDropObject][1] != INVALID_OBJECT_ID) DestroyDynamicObject(AirDropInfo[idx][AirDropObject][1]);
    AirDropInfo[idx][AirDropObject][1] = CreateDynamicObject(19335, AirDropInfo[idx][AirDropParachutePos][0], AirDropInfo[idx][AirDropParachutePos][1], AirDropInfo[idx][AirDropParachutePos][2]+250.000000, AirDropInfo[idx][AirDropParachutePos][3], AirDropInfo[idx][AirDropParachutePos][4], AirDropInfo[idx][AirDropParachutePos][5], -1, -1, -1120.0120.0);

    AirDropInfo[idx][AirDropTimer] = 1049;

    AirDropIDx = idx;
    AirDropZone = GangZoneCreate(AirDropInfo[idx][AirDropBoxPos][0]-95, AirDropInfo[idx][AirDropBoxPos][1]-80, AirDropInfo[idx][AirDropBoxPos][0]+70, AirDropInfo[idx][AirDropBoxPos][1]+85);

    foreach(new i: Player)
    {
        if(!IsAGang(i) && !IsAMafia(i)) continue;
        GangZoneShowForPlayer(i, AirDropZone, 0xFFFFFF65);
        GangZoneFlashForPlayer(i, AirDropZone, COLOR_RED);
    }

    new Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz;

    GetDynamicObjectPos(AirDropInfo[idx][AirDropObject][0], x, y, z);
    GetDynamicObjectRot(AirDropInfo[idx][AirDropObject][0], rx, ry, rz);
    MoveDynamicObject(AirDropInfo[idx][AirDropObject][0], x, y, z-2501.69, rx, ry, rz);

    GetDynamicObjectPos(AirDropInfo[idx][AirDropObject][1], x, y, z);
    GetDynamicObjectRot(AirDropInfo[idx][AirDropObject][1], rx, ry, rz);
    MoveDynamicObject(AirDropInfo[idx][AirDropObject][1], x, y, z-2501.69, rx, ry, rz);
    return 1;
}

CheckAirDrop()
{
    if(AirDropIDx == -1return 1;

    new idx = AirDropIDx;

    AirDropInfo[idx][AirDropTimer]--;

    if(AirDropInfo[idx][AirDropTimer] == 900)
    {
        foreach(new i: Player)
        {
            if(!IsAGang(i) && !IsAMafia(i)) continue;
            STRING_GLOBAL[0] = EOS;
            format(STRING_GLOBAL, sizeof(STRING_GLOBAL), "[F] [AirDrop Info]: AirDrop номер %d приземлился на землю.", idx);
            SendClientMessage(i, 0x33CC66FF, STRING_GLOBAL);
            SendClientMessage(i, 0x33CC66FF"[F] [AirDrop Info]: Примерное местоположение AirDrop отмечено на карте.");
        }
        
        if(AirDropInfo[idx][AirDropObject][1] != INVALID_OBJECT_ID)
        {
            DestroyDynamicObject(AirDropInfo[idx][AirDropObject][1]);
            AirDropInfo[idx][AirDropObject][1] = INVALID_OBJECT_ID;
        }
        STRING_GLOBAL[0] = EOS;
        format(STRING_GLOBAL, sizeof(STRING_GLOBAL), "[ AirDrop ]\n\nОставшееся время: {FFFFFF}%s", ConvertTime(AirDropInfo[idx][AirDropTimer]));
        AirDropInfo[idx][AirDropText] = CreateDynamic3DTextLabel(STRING_GLOBAL, COLOR_MAIN, AirDropInfo[idx][AirDropBoxPos][0], AirDropInfo[idx][AirDropBoxPos][1], AirDropInfo[idx][AirDropBoxPos][2], 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, streamer_TESTLOL);
    }
    else if(AirDropInfo[idx][AirDropTimer] == 0)
    {
        STRING_GLOBAL[0] = EOS;
        foreach(new i: Player)
        {
            if(!IsAGang(i) && !IsAMafia(i)) continue;
            format(STRING_GLOBAL, sizeof(STRING_GLOBAL), "[F] [AirDrop Info]: AirDrop номер %d ликвидирован.", idx);
            SendClientMessage(i, 0x33CC66FF, STRING_GLOBAL);
        }

        AirDropInfo[idx][AirDropStatus] = 0;
        for(new i = 0; i < 7; i++) AirDropInfo[idx][AirDropContent][i] = 0;
        if(AirDropInfo[idx][AirDropObject][0] != INVALID_OBJECT_ID)
        {
            DestroyDynamicObject(AirDropInfo[idx][AirDropObject][0]);
            AirDropInfo[idx][AirDropObject][0] = INVALID_OBJECT_ID;
        }
        if(AirDropInfo[idx][AirDropObject][1] != INVALID_OBJECT_ID)
        {
            DestroyDynamicObject(AirDropInfo[idx][AirDropObject][1]);
            AirDropInfo[idx][AirDropObject][1] = INVALID_OBJECT_ID;
        }
        for(new i = 0; i < 2; i++) AirDropInfo[idx][AirDropObject][i] = -1;
        AirDropInfo[idx][AirDropTimer] = 0;
        if(AirDropInfo[idx][AirDropText] != INVALID_3DTEXT_ID)
        {
            DestroyDynamic3DTextLabel(AirDropInfo[idx][AirDropText]);
            AirDropInfo[idx][AirDropText] = INVALID_3DTEXT_ID;
        }
        AirDropIDx = -1;
        GangZoneStopFlashForAll(AirDropZone);
        GangZoneHideForAll(AirDropZone);
        GangZoneDestroy(AirDropZone);
        AirDropZone = -1;
        return 1;
    }
    else
    {
        STRING_GLOBAL[0] = EOS;
        format(STRING_GLOBAL, sizeof(STRING_GLOBAL), "[ AirDrop ]\n\nОставшееся время: {FFFFFF}%s", ConvertTime(AirDropInfo[idx][AirDropTimer]));
        UpdateDynamic3DTextLabelText(AirDropInfo[idx][AirDropText], COLOR_MAIN, STRING_GLOBAL);
    }
    return 1;
}

CMD:airdrop_create(playerid) return CreateAirDrop();

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys == KEY_WALK)
    {
        for(new idx; idx < sizeof(AirDropInfo); idx++)
        {
            if(IsPlayerInRangeOfPoint(playerid, 5.0, AirDropInfo[idx][AirDropBoxPos][0], AirDropInfo[idx][AirDropBoxPos][1], AirDropInfo[idx][AirDropBoxPos][2]))
            {
                if(AirDropInfo[idx][AirDropTimer] > 900 || AirDropInfo[idx][AirDropTimer] < 1return 1;
                SCM(playerid, -1"вставь свои призы");
            }
        }
    }
}    

на последок вставляем CheckAirDrop(); в секундный таймер

примечания по системе:
нужно вставить свои призы, сделать аирдроп по часам

Заметка от keyl , создано

3.2. Код необходимо брать в тег "Код", а код более 10 строк – еще и в "Спойлер". Как это сделать рассказано в разделе "FAQ".

Устное предупреждение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • HostX_
      От HostX_
      Доброго времени суток!
       
      Ищу маппера для SA-MP проекта в стилистике выживания и постапокалипсиса. Важно уметь создавать атмосферные и аутентичные локации.
       
      Возможно как разовое, так и долгосрочное сотрудничество. Писать только с примерами своих работ.
       
      Discord: hostmoney
      Почта:  host@obscur.tech
    • Vova_Zenko
      От Vova_Zenko
      Подскажите пожалуйста. 
      В моде авто для фракции не через мод вписаны, а покупаются в автосалоне и хранятся в базе данных MySQL. 
      В полиции есть эвакуатор, но с цветографикой гражданского. Хочу добавить две цветографики. towtruck.txd(гражданский) и towtruck1.txd(ДПС). 
      В базе данных есть строка cPaintJob, там тоже менял значение, результата 0.
      Как сделать, чтобы допустим администратор смог поменять цветографику?