Дмитрий |
Дата: Четверг, 29.03.2012, 22:24 | Сообщение # 1 | Сообщить о нерабочей теме
|
Регистрация: | 03.12.2011
|
Страна: | Российская Федерация |
Репутация: |
14
|
Сообщений: | 1421 |
Награды: |
4
+
|
Статус: |
|
| Вообщем, делал, по скрип, сдесь не надо тупо стоять у огня и вводить команду, а сдесь просто тушите Вообщем сообщается в чат Пожарникам если есть гдето пожар, потом ктото принимает его, ну и появляется чекпоинт, приезжаете тушите. Начнем!
Ко всем forward'ам добавляем:
Код forward ActivateFire(); // сама функция создания пожара
Ко всем stock'ам добавляем:
Код 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'ам:
Код #define CHECKPOINT_FIRE 10
Потом ко всем new добавляем:
Код new fob[5]; // обьекты огня new timerfire; // таймер создания пожара new bool:FireInProgress = false; // переменная показывающая есть ли сейчас пожар new bool:bypahan[MAX_PLAYERS] = false; // переменная показывающая принял ли игрок пожар new Float:cf[3]; // координаты куда будет ставиться чекпоинт new FireStatus = 0; // статус пожара (из 100)
Переменные мы все создали теперь приступаем к основной части.
В publicGameModeExitFunc() добавляем:
Код KillTimer(timerfire); //при отключении сервера убираем таймер
Потом в public OnGameModeInit():
Код timerfire = SetTimer("ActivateFire", 1200000, true); //1200000 - это в милисекундах, через сколько начинается следующий пожар, в данном случае через 20 минут
Теперь Паблики, суем где нибудь , лучше где все паблики:
Код 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; }
Сама команда:
Код 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 ид моей фракции }
Код 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]) и найдите примерно такой код чуть ниже: Код
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); }
И вставьте после скобки это:
Код case CHECKPOINT_FIRE: { PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0); DisablePlayerCheckpoint(playerid); gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE; SendClientMessage(playerid, COLOR_WHITE, "Теперь вы можете тушить пожар (( Огнетушителем или на Пожарной машине ))"); }
На этом данный урок завершен!
[admin]ps: если увидите примечание (// 23 ид фракции) то на этой строке измените 23 на ид своей фракции[/admin]
From Russia With Love!
|
|
|
|