|
Admin
|
Дата: Суббота, 07.05.2016, 21:36 | Сообщение # 1
|
Гл.Администратор
Группа: Пользователи
Сообщений: 65
Награды: 1
Репутация: 32767
Статус: Offline
|
Решил сделать что-то вроде МП, прикольно бы смотрелось на РП серверах.
Описание:
Администратор запускает режим зомби апокалипсиса заражая рандомно 10-х игроков, все остальные получают 1 вакцину. Вакцина не только выводит вирус, но и полностью лечит игрока.
Зараженные должны заражать других. При ударе зараженного другой игрок так же заражается вирусом и со временем умирает.
Зомби обладают большой выносливостью(350hp).
При убийстве той или иной стороны - игрок получают небольшой денежный бонус.
Режим длится пол часа после чего все игроки становятся людьми и из их организма убирается вирус.
Команды:
/startvirus - запустить зомби режим.
/zombioff - отключить зомби режим.
/vac - использовать вакцину.
Ко всем define:
Код
#define MAX_ZOMBIE 3 // Макс кол-во зомби
Ко всем new:
Код
new bool:PlayerZombie[MAX_PLAYERS], VIRUS_TIMER, bool:Apocalypse;
В OnPlayerConnect:
Код
if(Apocalypse == true) SetPVarInt(playerid, "V", 1), // Для тех, кто оффется перед заражением или для последующих игроков
В OnPlayerSpawn:
Код
if(PlayerZombie [playerid]== true)
{
SetPlayerSkin(playerid, 162), SetPlayerWeather(playerid, 21), SetPlayerHealth(playerid, 350);
SetPlayerDrunkLevel(playerid, 10000);
// Можете поменять спавн зомби на удобное для вас место
return 1;
}
В паблик OnPlayerDeath:
Код
if(GetPVarInt(playerid, "V") == 1 || PlayerZombie [killerid]== true)
{
PlayerZombie [playerid]= true;
SendClientMessage(playerid, -1, "{FFAAAA}Вы были зараженны вирусом и теперь стали зомби!"), SendClientMessage(playerid,-1, "{FFFFAA}Заражайте других игроков!");
return 1;
}
else if(PlayerZombie [killerid]== false && PlayerZombie [playerid]== true)
{
GivePlayerMoney(playerid, 100);
SendClientMessage(playerid, -1, "Вы получаете 100$ за убийство зомби!");
//Выдаем награду за убитого зомби
return 1;
}
else if(PlayerZombie [killerid]== true && PlayerZombie [playerid]== false)
{
GivePlayerMoney(playerid, 500);
SendClientMessage(playerid, -1, "Вы получаете 500$ за убийство человека!");
return 1;
// Выдаем награду за убитого человека
}
Теперь добавим команды:
Код
if (strcmp("/startvirus", cmdtext, true, 10) == 0)
{
//if(!IsPlayerAdmin(playerid) return 1; // Ваша проверка на админа.
if(Apocalypse == true) return 1;
new zombi = random(10); // Максимальное число изначально зараженных
new playerids = random(GetMaxPlayers());
switch(zombi)
{
case 0: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 1: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 2: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 3: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 4: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 5: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 6: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 7: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 8: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
case 9: SetPVarInt(playerids, "V", 1),SendClientMessage(playerids, -1, "{FFAAAA}Вы плохо себя чувствуете.");
}
for(new x = GetPlayerPoolSize(); x >= 0; x--)
{
if(GetPVarInt(x, "V") == 1) continue;
SetPVarInt(x, "LIFE", 1), SendClientMessage(x, -1, "{FFFFAA}Вам выдали вакцину! Используйте - {FFFFFF}/vac");
}
VIRUS_TIMER = SetTimer("OnPlayerVirus", 1000, 1);
Apocalypse = true;
SetTimer("ZombieOFF", 60000*30, 0); // Ставим таймер выключения Апокалипса на 30 минут
return 1;
}
else if (strcmp("/vac", cmdtext, true, 10) == 0)
{
if(Apocalypse == true) return 1;
if(GetPVarInt(playerid, "V") != 1) return SendClientMessage(playerid, -1, "{FFFFAA}Вы не заражены!");
else if(GetPVarInt(playerid, "LIFE") != 1) return SendClientMessage(playerid, -1, "{FFFFAA}У вас нет вакцины :c");
else if(PlayerZombie [playerid]== true) return SendClientMessage(playerid, -1, "{FFFFAA}Вы уже з-з-зомби!");
SendClientMessage(playerid, -1, "{FFFFAA}Вы использовали вакцину!"), SetPlayerHealth(playerid, 100), DeletePVar(playerid, "V");
return 1;
}
else if (strcmp("/zombioff", cmdtext, true, 10) == 0) return ZombieOFF();
В паблик OnPlayerGiveDamage:
Код
if(PlayerZombie [damagedid]== true && PlayerZombie [playerid]== false) SetPVarInt(playerid, "V", 1);
Ко всем forward:
Код
forward OnPlayerVirus();
forward ZombieOFF();
В конец всех пабликов или удобное для вас место:
Код
public OnPlayerVirus()
{
for(new x = GetPlayerPoolSize(); x >= 0; x--)
{
if(GetPVarInt(x, "V") != 1 || PlayerZombie [x]== true) continue;
new Float: Health;
GetPlayerHealth(x, Health),SetPlayerHealth(x, Health-0.5);
if(Health < 30) SetPlayerDrunkLevel(x, 5000);
}
return 1;
}
public ZombieOFF()
{
if(Apocalypse != true) return 1;
for(new x = GetPlayerPoolSize(); x >= 0; x--)
{
DeletePVar(x, "V"), KillTimer(VIRUS_TIMER);
DeletePVar(x, "LIFE"),SetPlayerDrunkLevel(x, 0), SetPlayerWeather(x, 10);
if(PlayerZombie [x]== true) PlayerZombie [x]= false, SpawnPlayer(x);
SendClientMessage(x, -1, "Зомби апокалипсис подавлен, ни одного зомби больше не осталось!");
Apocalypse = false;
}
return 1;
}
|
| |
|
|