AutoSpawner

Тема в разделе "Общего назначения", создана пользователем F4TAL1ST, 31 окт 2010.

  1. F4TAL1ST

    F4TAL1ST ---

    AutoSpawner
    ВОЗРАДУЙТЕСЬ ЛЮБИТЕЛИ СЕТЕВЫХ ПОБОИЩ!!!

    Данный мутатор делает так, что бы игрок мог возрождаться на сервере во время волны!
    Теперь вам не придется ждать, "пока эти недоумки перестреляют этих дурацких зомбаков", просто попросите администратор поставить этот мутатор и все...!

    Так что не удивляйтесь, если неожиданно, рядом с вами, во время волны, появится игрок, которого еще секунду назад не было - это значит что администратор поставил на сервер AutoSpawner.

    СКАЧАТЬ

    Альтернативная версия
     
    Последнее редактирование модератором: 2 янв 2017
    xorex и Винни нравится это.
  2. KeksZ

    KeksZ Граф-Боярин КексZ I

    Ооо,чета новенькое...прикольно =)
     
  3. Да×тер

    Да×тер Über-Дизайнер

    довольно интересно, но я предпочитаю во время перерыва выйти покурить или под кружку чая посмотреть за "неудачниками" :rolleyes:
     
  4. Папка01

    Папка01 ۞ Всевидящее око форума ۞

    а дак получается игра то бесконечная ,или, если точнее, в ней будет присутствовать невозможность проиграть, если перерождение не с новых волн а с самого момента смерти...толку то от такого сомнительного удовольствия
     
  5. F4TAL1ST

    F4TAL1ST ---

    При использовании этого мутатора, погибшие во время волны игроки, не возрождаются, а продолжают "зрителем" смотреть за выжившими (Ну как обычно...)
    Данный мутатор респаунит во время волны только новых игроков, которые только вошли на новый сервер.
    Я думаю алгоритмом для выявления, кто из зрителей действительно новый игрок, а кто просто погибший служит кол-во фрагов...

    Ну по крайне мере так должно быть;)
    У меня просто нет возможности проверить этот мутатор...B)
     
  6. Proton

    Proton Игровой администратор

    Как я понял, в алгоритме, используется идентификация игроков по ID . Их ID заносятся в некую базу, и пока идет карта, база существует, и игроков, пытающихся повторно приконнектиться к серверу, уже не оживляет, они остаются мертвые как обычно до конца волны.
    Не знаю, чем руководствовались разработчики данного мутатора, но играя на сервере, можно в любой момент отключиться и зайти снова живым (единственное условие то, что выйти надо, когда здоровье>50). Если же здоровье на момент отключения <50, тогда уже повторно игрока пустит, но он останется наблюдать до конца игры.
    Получается, игрок видит, что за ним 2 флехи бегут, быстренько отключился, и тут же приконнектился и стал живым но уже в другом месте карты. Ну это не айс совсем.
     
    Flame нравится это.
  7. F4TAL1ST

    F4TAL1ST ---

    Хмм... Интересное замечание, Протон...
    Я в синтаксисе мутаторов не разбираюсь, поэтому нечего про это не знал.:(

    Вообще идея самого мутатора интересная, да вот только реализация хромает...
    Если бы кто-то мог доработать мутатор и дописать...:mellow:
     
  8. Darwin

    Darwin Бандит

    Потестили.
    Если ты побегал на карте, и перезайдешь, ты уже будешь в спектрах.
    Есть 2 серьезных косяка у мута.
    1)Невозможность выбора перка при подключении.
    2)Косяк во времени.
    Ибо время между тем как игрок появился на поле боя и как он получает управление персонажем, различается.
    И получается сначала появился персонаж, если рядом есть монстры его сожрали, а потом игрок подключается и видит "Вас сожрали, вы умерли"
    Изменить бы это хотябы, чтобы при подключении к серверу игрок получал 2минутный годмод.

    з.ы. Фаталист если ты переведешь и закинешь это создателю мута, я был бы чертовски рад:)
     
  9. F4TAL1ST

    F4TAL1ST ---

    Эх, если бы я еще помнил, кто автор этого мутатора...<_<
    Надо подумать...
    Это или Бенжамин, или No_glore, или Йойобатти - они главные кодеры... Бииииииис (автор WTF!?) давно не занимается KF, Продижи забанен, Йомамасис и Marco не кодеры...
    Кто из них автор мутатора я не знаю, но я могу создать топ, с просьбой помощи...;)
    Только скажи мне точно - какие изменения нужно произвести в мутаторе, что бы я мог объяснить это комьюнити?:rolleyes:
     
  10. Flame

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

    Поглядел я реализацию мутатора - как то там с моей точки зрения всё сложно накручено
    Нам же вроде всё что надо проверить - заходил ли игрок на этой карте в игру или ещё нет
    Ну я и написал простенькую реализацию на данный мотив

    Код:
    Код:
    class AutoSpawner extends Mutator;
    
    var array<string> SpawnedList;
    
    struct WaitingStruct
    {
        var string Hash;
        var PlayerController PC;
    };
    var array<WaitingStruct> WaitingList;
    
    var array<PlayerController> PendingPlayers;
    
    function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
    {
        if(PlayerController(Other) != None)
        {
            PendingPlayers[PendingPlayers.Length] = PlayerController(Other);
            SetTimer(0.1,false);
        }
        return true;
    }
    
    function Timer()
    {
        local int i;
        local string Hash;
        local PlayerController PC;
        for(i=PendingPlayers.Length-1;i>=0;i--)
        {
            PC=PendingPlayers[i];
            if(PC!=none && PC.PlayerReplicationInfo.PlayerID>0)
            {
                Hash=PC.GetPlayerIDHash();
                if(!InSpawnedList(Hash))
                    ManageNewPlayer(PC,Hash);
            }
        }
        PendingPlayers.Length = 0;
    }
    
    function bool InSpawnedList(string Hash)
    {
        local int i;
        for(i=0;i<SpawnedList.Length;i++)
        {
            if(SpawnedList[i]~=Hash)
                return true;
        }
        return false;
    }
    
    function ManageNewPlayer(PlayerController PC, string Hash)
    {
        local WaitingStruct WS;
        if(!InWaitingList(Hash))
        {
            WS.Hash=Hash;
            WS.PC=PC;
            WaitingList[WaitingList.Length]=WS;
        }
    }
    
    function bool InWaitingList(string Hash)
    {
        local int i;
        for(i=0;i<WaitingList.Length;i++)
        {
            if(WaitingList[i].Hash~=Hash)
                return true;
        }
        return false;
    }
    
    function ManageWaitingPlayer(PlayerController PC, string Hash)
    {
        Level.Game.Disable('Timer');
        PC.PlayerReplicationInfo.bOutOfLives = false;
        PC.PlayerReplicationInfo.NumLives = 0;
        PC.PlayerReplicationInfo.Score = Max(KFGameType(Level.Game).MinRespawnCash, int(PC.PlayerReplicationInfo.Score));
        PC.GotoState('PlayerWaiting');
        PC.SetViewTarget(PC);
        PC.ClientSetBehindView(false);
        PC.bBehindView = False;
        PC.ClientSetViewTarget(PC.Pawn);
        if (KFGameType(Level.Game).bWaveInProgress)
        {
            KFGameType(Level.Game).bWaveInProgress = false;
            PC.ServerReStartPlayer();
            KFGameType(Level.Game).bWaveInProgress = true;
        }
        else
            PC.ServerReStartPlayer();
        Level.Game.Enable('Timer');
        //Добавляем игрока в массив уже оживлённых - при перезаходе он не оживёт
        SpawnedList[SpawnedList.Length]=Hash;
    }
    
    function ManageWaitingPlayers()
    {
        local int i;
        local PlayerController PC;
        for(i=WaitingList.Length-1;i>=0;i--)
        {
            PC=WaitingList[i].PC;
            if(PC==none)
            {
                WaitingList.Remove(i,1);
                continue;
            }
            if(PC.Pawn!=none)
            {
                SpawnedList[SpawnedList.Length]=WaitingList[i].Hash;
                WaitingList.Remove(i,1);
                continue;
            }
            if    (
                    PC!=none
                    &&    PC.PlayerReplicationInfo.bOutOfLives
                    &&    !PC.PlayerReplicationInfo.bOnlySpectator
                )
            {
                ManageWaitingPlayer(PC,WaitingList[i].Hash);
            }
        }
    }
    
    Auto state PlaytimeTimer
    {
    Begin:
        while(true)
        {
            Sleep(1.0);
            ManageWaitingPlayers();
        }
    }
    
    defaultproperties
    {
        GroupName="KF-AutoSpawner"
        FriendlyName="AutoSpawner"
        Description="Allows newly joined players to spawn during the existing wave."
    }
    

    Ссылка
    AutoSpawner.AutoSpawner

    Может кому хочется расширения функционала мутатора - пишите
    Понаделаем разных версий

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

    Upd. (2017.01.07) Ещё поправил. Не совсем корректно работал

    Upd. (2017.01.11) И ещё поправил)
     
    Последнее редактирование: 11 янв 2017
  11. gall87

    gall87 Капо

    отслеживание волны с боссом, для того что бы можно было запретить возраждение в ней
     
  12. STaJIKeR

    STaJIKeR Солдат

    Лучше сделать 2а варианта, тк не все поддержут твою идею
     
  13. Flame

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

    Держи персонально для тебя )
    На волне с патриком не должно быть оживлений
    Я не тестил - проверяй
    Ссылка
     
  14. Flame

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

    Обновил код мутаторов из постов 10 и 13. Не совсем корректно работали
     
  15. Maksovich

    Maksovich Новенький

    Да, там игрок спаунился без оружия которое ему по уровню положено и в таблице игроков без звания отображается. Это исправлено? Если да то можно ссылку на готовый рабочий мутатор.
     
  16. Flame

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

    не, такой беды у меня никогда не было
    используйте базовый мутатор, если с этим косяки
    если и там такая же фигня - значит у вас чего-то странное понакручено)
     
  17. Maksovich

    Maksovich Новенький


    Flame, да вроде по стандарту все...

    Код:
    cd $GAME_PATH && /usr/bin/screen -A -m -d -S $SCREEN_NAME ./ucc-bin server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6?Mutator=KFDamagePopup.mutDamagePopup,FixSteamRusNameMut.FixSteamRusNameMut,BrutusPatHPLeftWS.BrutusPatHPLeft,KFNoDramaMut.KFNoDramaMut -nohomedir ini=KillingFloor.ini
     
  18. Flame

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

    Ну фиг знает. Я могу сделать сервак с данным набором мутаторов и командной строкой и поглядеть
    Используются только эти мутаторы или какие-то ещё добавлены как ServerActor?

    Так то вроде у всех этот мутатор работает уже фиг знает сколько лет, мой тоже у меня на 2х серваках работает
     
  19. Maksovich

    Maksovich Новенький

    Есть еще ServerActors=ServerColor.ServerColorActor