[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Pawno » Школа Pawno » Готовые решения » Временный режим зомби апокалипсиса
Временный режим зомби апокалипсиса
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;
}


 
Форум » Pawno » Школа Pawno » Готовые решения » Временный режим зомби апокалипсиса
  • Страница 1 из 1
  • 1
Поиск: