PaHaNjkee
Эксперт
- Регистрация
- 2 Апр 2011
- Сообщения
- 1,334
- Лучшие ответы
- 0
- Репутация
- 474
Вообщем, делал сам, если скажете баян, то делал, по скрипту но совсем по другому, сдесь не надо тупо стоять у огня и вводить команду, а сдесь просто тушите Вообщем сообщается в чат Пожарникам если есть гдето пожар, потом ктото принимает его, ну и появляется чекпоинт, приезжаете тушите. Вообщем делал для своего сервера, вот решил поделиться. Начнем!
Ко всем forward'ам добавляем:
Ко всем stock'ам добавляем:
Ко всем define'ам:
Потом ко всем new добавляем:
Переменные мы все создали теперь приступаем к основной части.
В public GameModeExitFunc() добавляем:
Потом в public OnGameModeInit():
Теперь Паблики, суем где нибудь xD, лучше где все паблики:
Сама команда:
Потом ищите строку switch (gPlayerCheckpointStatus[playerid]) и найдите примерно такой код чуть ниже:
И вставьте после скобки это:
На этом данный урок завершен С вами был PaHaNjkee
Размещение на другие сайты запрещено! Сделано исключительно только для Pawno-Info.Ru
p.s. Извените что название темы не соответстует) Фракцию думаю сможете создать сами, а то буду до вечера писать xD
Ну и на последок: если увидите примечание (// 23 ид фракции) то на этой строке измените 23 на ид своей фракции
Если не жалко, поставте +
Примечание: Код был оптимизирован
Ко всем forward'ам добавляем:
PHP:
forward ActivateFire(); // сама функция создания пожара
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); // при отключении сервера убираем таймер
PHP:
timerfire = SetTimer("ActivateFire", 1200000, true); // 1200000 - это в милисекундах, через сколько начинается следующий пожар, в данном случае через 20 минут
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;
}
}
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, "Теперь вы можете тушить пожар (( Огнетушителем или на Пожарной машине ))");
}
Размещение на другие сайты запрещено! Сделано исключительно только для Pawno-Info.Ru
p.s. Извените что название темы не соответстует) Фракцию думаю сможете создать сами, а то буду до вечера писать xD
Ну и на последок: если увидите примечание (// 23 ид фракции) то на этой строке измените 23 на ид своей фракции
Если не жалко, поставте +
Примечание: Код был оптимизирован
Последнее редактирование: