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; }
|
|
|
|