Доступ к архиву

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал по созданию фракции "Пожарники"

Статус
В этой теме нельзя размещать новые ответы.

PaHaNjkee

Эксперт
Регистрация
2 Апр 2011
Сообщения
1,334
Лучшие ответы
0
Репутация
474
Вообщем, делал сам, если скажете баян, то делал, по скрипту но совсем по другому, сдесь не надо тупо стоять у огня и вводить команду, а сдесь просто тушите ;) Вообщем сообщается в чат Пожарникам если есть гдето пожар, потом ктото принимает его, ну и появляется чекпоинт, приезжаете тушите. Вообщем делал для своего сервера, вот решил поделиться. Начнем!

Ко всем forward'ам добавляем:
PHP:
forward ActivateFire(); // сама функция создания пожара
Ко всем stock'ам добавляем:
PHP:
stock CreateFire(Float:X1, Float:Y1, Float:Z1, Float:R1, Float:X2, Float:Y2, Float:Z2, Float:R2, Float:X3, Float:Y3, Float:Z3, Float:R3, Float:X4, Float:Y4, Float:Z4, Float:R4, Float:X5, Float:Y5, Float:Z5, Float:R5)
{
    fob[0] = CreateObject(18691, X1, Y1, Z1 - 1, 0, 0, R1, 1000.00);
    fob[1] = CreateObject(18691, X2, Y2, Z2 - 1, 0, 0, R2, 1000.00);
    fob[2] = CreateObject(18691, X3, Y3, Z3 - 1, 0, 0, R3, 1000.00);
    fob[3] = CreateObject(18691, X4, Y4, Z4 - 1, 0, 0, R4, 1000.00);
    fob[4] = CreateObject(18691, X5, Y5, Z5 - 1, 0, 0, R5, 1000.00);
    FireInProgress = true;
    FireStatus = 100;
    return 1;
}

stock KillFire()
{
    DestroyObject(fob[0]), DestroyObject(fob[1]), DestroyObject(fob[2]), DestroyObject(fob[3]), DestroyObject(fob[4]);
    FireInProgress = false;
    FireStatus = 0;
}

stock Name(playerid) { new pl[24]; GetPlayerName(playerid,pl,24); return pl; }

Ко всем define'ам:
PHP:
#define CHECKPOINT_FIRE 10

Потом ко всем new добавляем:
PHP:
new fob[5]; // обьекты огня
new timerfire; // таймер создания пожара
new bool:FireInProgress = false; // переменная показывающая есть ли сейчас пожар
new bool:bypahan[MAX_PLAYERS] = false; // переменная показывающая принял ли игрок пожар
new Float:cf[3]; // координаты куда будет ставиться чекпоинт
new FireStatus = 0; // статус пожара (из 100)
Переменные мы все создали теперь приступаем к основной части.

В public GameModeExitFunc() добавляем:
PHP:
KillTimer(timerfire); // при отключении сервера убираем таймер
Потом в public OnGameModeInit():
PHP:
timerfire = SetTimer("ActivateFire", 1200000, true); // 1200000 - это в милисекундах, через сколько начинается следующий пожар, в данном случае через 20 минут
Теперь Паблики, суем где нибудь xD, лучше где все паблики:
PHP:
public ActivateFire()
{
    if(FireInProgress == true)
    {
        KillFire();
        return 1;
    }
 new fic[2] = {0,1}; // кол-во мест где случаются пожары, у меня их 2
 if(fic[random(sizeof(fic))] == 0) {cf[0] = 1328.3392; cf[1] = 374.2310; cf[2] = 22.2083; CreateFire(cf[0],cf[1],cf[2],17.0832, 1330.2943,373.6726,22.2083,342.6162, 1331.2371,373.4001,22.3450,342.6162, 1327.7349,374.5031,23.3252,357.3430, 1333.7506,373.8772,21.8448,35.8833);} // если пожар случился в 1 месте, то делаем там огонь
 else if(fic[random(sizeof(fic))] == 1) {cf[0] = 850.0212; cf[1] = -598.5781; cf[2] = 18.4219; CreateFire(cf[0],cf[1],cf[2],49.5991, 859.7880,-597.9085,18.4219,229.5991, 864.7535,-597.1085,18.3860,245.5447, 868.1580,-597.1082,18.3860,220.5228, 867.7120,-590.1864,17.9536,14.6138);}  // если пожар случился во 2 месте, то делаем там огонь 
    new string[90];
    format(string, sizeof(string), "Диспетчер: Случился пожар, вызываю на помощь (наберите /nofire чтобы принять вызов)");
SendFamilyMessage(23, TEAM_AZTECAS_COLOR, string); // ид моей фракции 23
    return 1;
}
Сама команда:
PHP:
if(strcmp(cmd, "/nofire", true) == 0)
     {
    if(PlayerInfo[playerid][pMember] != 23 && PlayerInfo[playerid][pLeader] != 23) return SendClientMessage(playerid, COLOR_LIGHTRED, "Вы не пожарник!"); // 23 ид моей фракции
     if(FireInProgress == false) return SendClientMessage(playerid, COLOR_LIGHTRED, "Сейчас нету пожаров!");
      SetPlayerCheckpoint(playerid,cf[0],cf[1],cf[2],10.0);
    gPlayerCheckpointStatus[playerid] = CHECKPOINT_FIRE; // присваиваем чекпоинт пожара
    bypahan[playerid] = true;
     format(string, sizeof(string), "Пожарник %s принял вызов, он едет на помощь.",Name(playerid));
 SendFamilyMessage(23, COLOR_LIGHTBLUE, string); // 23 ид моей фракции
     }
PHP:
if(newkeys == KEY_FIRE && bypahan[playerid] == true)
{
new Float:X1, Float:Y1, Float:Z1, Float:X2, Float:Y2, Float:Z2, Float:X3, Float:Y3, Float:Z3, Float:X4, Float:Y4, Float:Z4, Float:X5, Float:Y5, Float:Z5;

    GetObjectPos(fob[0], X1, Y1, Z1);
GetObjectPos(fob[1], X2, Y2, Z2);
GetObjectPos(fob[2], X3, Y3, Z3);
GetObjectPos(fob[3], X4, Y4, Z4);
GetObjectPos(fob[4], X5, Y5, Z5);
    
if(!IsPlayerInRangeOfPoint(playerid, 20.0, X1, Y1, Z1) || !IsPlayerInRangeOfPoint(playerid, 20.0, X2, Y2, Z2) || !IsPlayerInRangeOfPoint(playerid, 20.0, X3, Y3, Z3) || !IsPlayerInRangeOfPoint(playerid, 20.0, X4, Y4, Z4) || !IsPlayerInRangeOfPoint(playerid, 20.0, X5, Y5, Z5)) return SendClientMessage(playerid, 0xFFFFFFFF, "Чтобы потушить пожар вы должны находиться рядом с ним!");
if(PlayerInfo[playerid][pMember] == 23 || PlayerInfo[playerid][pLeader] == 23) // 23 ид моей фракции
    {
        if(FireStatus <= 0)
        {
            KillFire();
            new string[40+MAX_PLAYER_NAME];
            format(string, sizeof(string), "%s потушил пожар, едет обратно на базу",Name(playerid));
            SendFamilyMessage(23, TEAM_AZTECAS_COLOR, string);
            SendClientMessage(playerid,COLOR_WHITE,"Поздравляем! Вы потушили пожар!");
            bypahan[playerid] = false;
            return 1;
        }
        if(FireStatus < 80)
        {
            DestroyObject(fob[0]);
            return 1;
        }
        if(FireStatus < 60)
        {
            DestroyObject(fob[1]);
            return 1;
        }
        if(FireStatus < 40)
        {
            DestroyObject(fob[2]);
            return 1;
        }
        if(FireStatus < 20)
        {
            DestroyObject(fob[3]);
            return 1;
        }
        if(IsPlayerInAnyVehicle(playerid) == 1)
        {
            if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 407)
            {
                FireStatus = FireStatus - 15;
            }
        }
        else if(GetPlayerWeapon(playerid) == 42)
        {
            FireStatus = FireStatus - 5;
        }
        else return 1;
    }
}
Потом ищите строку switch (gPlayerCheckpointStatus[playerid]) и найдите примерно такой код чуть ниже:
PHP:
case CHECKPOINT_HOME:
            {
                PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
                DisablePlayerCheckpoint(playerid);
                gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE;
                GameTextForPlayer(playerid, "~w~You are~n~~y~Home", 5000, 1);
            }
И вставьте после скобки это:
PHP:
case CHECKPOINT_FIRE:
            {
                PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
                DisablePlayerCheckpoint(playerid);
                gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE;
                SendClientMessage(playerid, COLOR_WHITE, "Теперь вы можете тушить пожар (( Огнетушителем или на Пожарной машине ))");
            }
На этом данный урок завершен ;) С вами был PaHaNjkee

Размещение на другие сайты запрещено! Сделано исключительно только для Pawno-Info.Ru

p.s. Извените что название темы не соответстует) Фракцию думаю сможете создать сами
, а то буду до вечера писать xD

Ну и на последок: если увидите примечание (// 23 ид фракции) то на этой строке измените 23 на ид своей фракции

Если не жалко, поставте + :)

Примечание: Код был оптимизирован



 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу