Мутатор "второй шанс"

Тема в разделе "Кодинг", создана пользователем azrael, 6 дек 2015.

  1. azrael

    azrael Соучастник

    доброго времени суток!

    пожалуйста подскажите как склепать мутатор, который будет давать "второй шанс" после того как весь отряд был уничтожен (в общем чтобы на одной карте было 2 шанса выжить)

    когда-то такой мутатор гдето видел, но сейчас найти не могу :(
     
  2. Shadow5

    Shadow5 Бандит

    azrael нравится это.
  3. sindzi

    sindzi Новенький

    Попробовал вшить это в serverperks, но есть плохие новости для тех кто это будет использовать - прокачка перков (статистика) на переигранной волне не сохраняется в базу serverperks (

    Може т ктонибудь знает как решить эту проблему? Вот код из темы комментария выше, для удобства попытался вшить прямо в SRGameType
    Заранее спасибо вам
    Код:
    class SRGameType extends KFGameType config;
    
    var bool GameOver;
    var int Countdown;
    
    state MatchOver
    {
    	function Timer()
    	{
    		local Controller C;
    
    		if ( Countdown > 0 )
    		{
    			Countdown--;
    			return;
    		}
    
    		if ( !GameOver && (WaveNum != FinalWave) ) 
    		{
    			GameOver = True;
    			
    			KillZeds();
    			TotalMaxMonsters = 0;
    			NumMonsters = 0;
    			
    			if ( InvasionGameReplicationInfo(GameReplicationInfo)!=None )
    				InvasionGameReplicationInfo(GameReplicationInfo).WaveNumber = WaveNum - 1; 
    			
    			InitialWave = WaveNum - 1;
    			
    			if ( KFGameReplicationInfo(GameReplicationInfo)!=None )
    				KFGameReplicationInfo(GameReplicationInfo).EndGameType = 0;
    			
    			StartMatch();
    			
    			bWaveInProgress = False;
    			
    			for ( C = Level.ControllerList; C != none; C = C.NextController )
    			{
    				if ( C.PlayerReplicationInfo!=None && !C.PlayerReplicationInfo.bOnlySpectator )
    				{
    					C.PlayerReplicationInfo.Score = Max(MinRespawnCash,int(C.PlayerReplicationInfo.Score));
    					
    					if ( PlayerController(C) != None )
    					{
    						PlayerController(C).GotoState('PlayerWaiting'); 
    						PlayerController(C).SetViewTarget(C);
    						PlayerController(C).ClientSetBehindView(False);
    						PlayerController(C).bBehindView = False;
    						PlayerController(C).ClientSetViewTarget(C.Pawn);
    						C.PlayerReplicationInfo.bOutOfLives = False;
    						C.PlayerReplicationInfo.NumLives = 1;
    					}
    					
    					C.ServerReStartPlayer();
    				}
    			}
    
    			bWaveInProgress = True;
    		}
    		else  
    			Super.Timer();     
    	}  
    }
    
    defaultproperties
    {
    	Countdown = 10
    }
    
     
  4. Flame

    Flame -Заслуженый кодер форума-

    Не надо лезть в GameType)
    Вот второй шанс, например

    Код:
    Код:
    class SecondChanceMut extends Mutator;
    
    var SecondChanceRules Rules;
    
    function PostBeginPlay()
    {
        if( Rules==None )
            Rules = Spawn(Class'SecondChanceRules');
    }
    
    defaultproperties
    {
        GroupName="KF-SecondChance"
        FriendlyName="SecondChanceMut"
        Description="SecondChanceMut"
    }
    
    Код:
    class SecondChanceRules extends GameRules;
    
    var bool bActivated;
    
    function PostBeginPlay()
    {
        if(Level.Game.GameRulesModifiers == none)
            Level.Game.GameRulesModifiers = self;
        else
            Level.Game.GameRulesModifiers.AddGameRules(self);
    }
    
    function AddGameRules(GameRules GR)
    {
        if(GR != self)
            super.AddGameRules(GR);
    }
    
    function bool CheckEndGame(PlayerReplicationInfo Winner, string Reason)
    {
        if(!bActivated && KFGameType(Level.Game).WaveNum <= KFGameType(Level.Game).FinalWave)
        {
            ResurrectPlayers();
            bActivated=true;
            return false;
        }
        if ( NextGameRules != None )
            return NextGameRules.CheckEndGame(Winner,Reason);
        return true;
    }
    
    //Приходится чуток поизвращаться. Тут почему то не прокатывает стандартное оживление из той же админки
    function ResurrectPlayers()
    {
        local Controller C;
        local Pawn tmpPawn;
        tmpPawn=Spawn(class'Pawn');
        //Flame. В KFGameType есть проверка на bWaveInProgress
        KFGameType(Level.Game).bWaveInProgress = false;
        //
        for( C = Level.ControllerList; C != None; C = C.nextController )
        {
            if(C.IsA('PlayerController') && C.PlayerReplicationInfo.PlayerID>0)
            {
                //Flame. В KFGameType есть проверка на bOutOfLives и на C.Pawn!=none. Эти две строчки позволят обойти это
                C.PlayerReplicationInfo.bOutOfLives=false;
                C.Pawn = tmpPawn;
                //
                Level.Game.RestartPlayer(C);
            }
        }
        KFGameType(Level.Game).bWaveInProgress = true;
        tmpPawn.Destroy();
    }
    
    Ссылка
    SecondChanceMut.SecondChanceMut

    В данной версии реализовано оживление всех после всеобщей смерти 1 раз за карту
    Если нужны какие-то модификации, типа
    - окончание волны и перемотка её на 1 назад
    - убийство зомби
    - некоторое время бессмертия после оживления
    - возвращение оружия
    и т.д. - пишите
    Может не поленюсь)
     
    Последнее редактирование: 21 авг 2016
    sindzi нравится это.
  5. mdsanta

    mdsanta Новенький

    Flame он багнутый, если не умирать, то после патра начинается новая волна =))
     
    Последнее редактирование: 18 авг 2016
    Flame нравится это.
  6. Flame

    Flame -Заслуженый кодер форума-

    Спасибо) Поправил. Обновил ссылку
     
    mdsanta нравится это.
  7. demnikzak

    demnikzak Бандит

    Я по поводу мутатора второго шанса, Flame можешь этот мутатор сделать логику по другому, так как это более круче будет и актуальнее, в общем пример ( на 1 карту 1 доп жизнь ) ( когда народ весь умирает, то идет откат волны и когда все респает игроков идет не начало волны, а начало с магазина и после снова начинает та волна на которой погиб отряд ) надеюсь расписал всё внятно, если сделаешь будет супер, а еще круче если будет этот мутатор переделанный в вкладке мутаторо->Общего назначения.
     
  8. shark_1900

    shark_1900 Соучастник

    жесть))) зачем городить всякую хрень.Вообще невижу смысла в этом мутаторе....просто тупая халява и ничего больше)
     
  9. STaJIKeR

    STaJIKeR Капо

    Каждый фломастер жуется по своему... Человек хочет, значит ему надо...
    Я бы тоже не отказался от такой версии.
     
  10. demnikzak

    demnikzak Бандит

    Ну как бы у меня нету на сервере очереднярского для казуала респа после определёного времени, а тут будет хоть какой та шанс переиграть одну волну, на патре она не должна работать.
     
  11. shark_1900

    shark_1900 Соучастник

    по мне так поставить мутатор респаунмут и вся проблема решена)))если этот мутатор ставить то соответственно и гемплей должен быть изменен полностью)
     
  12. Arckon.

    Arckon. Соучастник

    Второй шанс с момента смерти последнего игрока и последующего старта закупочного времени для всей команды с переигровкой редыдущей волны, а игроки с дефолтным стартовым капиталом и дефолтным снаряжением в 1 допустимый диапазон раз - вполне, приятно было бы увидеть) Поддерживаю.