Объединяем все персональные скины в один пакет

Тема в разделе "Общего назначения", создана пользователем Flame, 8 янв 2015.

Метки:
  1. Flame

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

    Удобно когда все персональные скины лежат в 1 пакете и управляются 1 мутатором
    Ибо проблему большого количества пакетов/мутаторов вы все помните, я надеюсь)

    Собственно вот
    Все скины складируются в один пакет. Мутатор управляет сразу всеми скинами

    Настройки:
    Код:
    VipSkinsList=(PlayerName="Мистер Фостер",PlayerID="76561111111111111",Skin="VipSkinsMut.SPMRFoster")
    
    Ну в общем то всё тут понятно
    Полный путь к скину прописывается в Skin
    ID игрока прописывается в PlayerID
    А в PlayerName можете писать что угодно. Это поле добавлено просто для удобства, чтобы ясно что это за человек тут с этим ID

    Код с комментариями:
    Код:
    class VipSkinsMut extends Mutator Config(VipSkinsMut);
    
    struct VipSkinsStruct
    {
        var config string PlayerName;    //в коде не используется. добавлена только для удобства работы с ини файлом
        var config string PlayerID;        //ID игрока
        var config string Skin;            //скин игрока
    };
    var config array<VipSkinsStruct> VipSkinsList;
    var array<PlayerController> PendingPlayers;
    
    //Создаём инишник и добавляем наши вип скины в массив AvailableChars. Если не добавим - не сможем получить к ним доступа
    function PostBeginPlay()
    {
        SaveConfig();
        AddAvailableVipSkins();
    }
    //Здесь и добавляем. При этом следим, чтобы один и тот же скин не был добавлен больше 1 раза
    function AddAvailableVipSkins()
    {
        local int i,N;
        for(i=0;i<VipSkinsList.Length;i++)
        {
            N=Class'KFGameType'.Default.AvailableChars.Length;
            if(!SkinAlreadyAdded(VipSkinsList[I].Skin))
                Class'KFGameType'.Default.AvailableChars[N] = VipSkinsList[I].Skin;
        }
    }
    //Тут вот и проверяем есть ли уже такой скин в массиве или нет
    function bool SkinAlreadyAdded(string Skin)
    {
        local int i;
        for(i=0;i<Class'KFGameType'.Default.AvailableChars.Length;i++)
        {
            if(Class'KFGameType'.Default.AvailableChars[I]~=Skin)
                return true;
        }
        return false;
    }
    
    //Отлавливаем всех игроков при заходе на сервер (контроллеры ловим)
    function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
    {
        if(PlayerController(Other)!=None)
        {
            PendingPlayers[PendingPlayers.Length] = PlayerController(Other);
            SetTimer(0.1,false);
        }
        return true;
    }
    //Прошла 0.1 секунда и переменные контроллера инициализированы. Можем с ними работать
    //Собственно тут мы и пытаемся нацепить скин на игрока
    function Timer()
    {
        local int i;
        for(i=0;i<PendingPlayers.Length;i++)
        {
            if(PendingPlayers[I]!=None)
                TryToPutSkinOn(PendingPlayers[I]);
        }
        PendingPlayers.Length = 0;
    }
    //Проверяем - есть ли игрок в вип списке и если есть - ставим ему его скин
    function TryToPutSkinOn(PlayerController PC)
    {
        local int i;
        local string hash;
        hash=PC.GetPlayerIDHash();
        for(i=0;i<VipSkinsList.Length;i++)
        {
            if(VipSkinsList[I].PlayerID~=hash)
                PC.SetPawnClass("",VipSkinsList[I].Skin);
        }
    }
    
    defaultproperties
    {
        VipSkinsList(0)=(Skin="VipSkinsMut.SPMRFoster",PlayerID="76561111111111111",PlayerName="Мистер Фостер")
        VipSkinsList(1)=(Skin="VipSkinsMut.SPMRsFoster",PlayerID="76562222222222222",PlayerName="Миссис Фостер")
        VipSkinsList(2)=(Skin="VipSkinsMut.SPMRFoster",PlayerID="76563333333333333",PlayerName="И опять Мистер Фостер")
        bAddToServerPackages=True
        GroupName="KF-VipSkins"
        FriendlyName="VipSkinsMut"
        Description="VipSkinsMut"
        bAlwaysRelevant=True
    }
    
    Ссылка 1 или Ссылка 2
    VipSkinsMut.VipSkinsMut

    Кроме самого мутатора я кинул в пакет 2 как бы персональных скина - VipSkinsMut.SPMRFoster и VipSkinsMut.SPMRsFoster
    Соответственно это стим панк мистер и миссис Фостеры
    Просто чтобы комфортнее было начинать работу с мутатором

    Ну то есть какая последовательность действий
    Берёте свой мутатор со скином, копируете Mod составляющую (То есть всё кроме мутатора) и правите пути, если надо на VipSkinsMut.

    Замечание. Для тех, кто использует удалённую базу.
    Поправьте период срабатывания таймера. Сейчас там стоит 0.1 - вам этого может не хватить и скин не поменяется.
    Напишите так, например
    Код:
    SetTimer(1.0,false);
    

    Замечание2. Для тех, кто принудительно выставляет Custom скины игрокам (bForceCustomChars=true)
    Поправьте строчку в TryToPutSkinOn
    вместо
    Код:
    PC.SetPawnClass("",VipSkinsList[i].Skin);
    
    напишите
    Код:
    PC.PlayerReplicationInfo.SetCharacterName(VipList[i].Skin);
    
     
    Последнее редактирование: 2 дек 2016
    Denkul999, Essence, BAHO и 6 другим нравится это.
  2. Stein

    Stein Солдат

    вопрос в сервер перкс как быть надо чтото писать в ини или этот мут только для вип скинов
     
  3. Flame

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

    Мут для вип скинов
    Только сам мутатор прописывать надо. В SP ничего не надо)
     
  4. denfil777

    denfil777 Капо

    Низкий тебе поклон. Как только я не мучил свой мозг попытками сделать что-то подобное.. Но нацеплялся только первый скин, может дело в AvailableChars было.. Ещё раз спасибо!
     
  5. Stein

    Stein Солдат

    если у меня 1 пакет в нём всё и вип скины и простые которые все видят, я могу использовать мут прописывать в нём только вип, остальные скины прописывать в сп..?
     
  6. Flame

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

    Да ктож тебе запретит то ))

    Хотяяя. Может быть одна проблемка. Ну ты проверь и напиши - работает или нет)
     
  7. Stein

    Stein Солдат

    пока проверить не могу пакет скинов в разработке
     
  8. denfil777

    denfil777 Капо

    У меня вместе с общей базой перков не работает мутатор ((( без базы все ок. Так и должно быть?
     
  9. Flame

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

    А что такое общая база перков? )

    Впрочем ладно. Ясно о чём ты.
    Ну я догадываюсь, где проблема может быть - если не поленюсь поправлю
    Если поленюсь - ну пинай, чтож
     
  10. denfil777

    denfil777 Капо

    Общая база перков. Надеюсь что не поленишься, там надолго возьни?
     
  11. Stein

    Stein Солдат

    есть новости? извините за флуд)
     
  12. Flame

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

    А у меня работает)
    Вот можно взять (почти) чистый сервак отсюда
    Положить туда эти файлы (мутатор + измененный файл запуска сервера), прописать нужный ID и запустить игру и базу
    Базу брал такую вот

    После того, как убедитесь, что это работает - сделайте мне так же вариант сервера или набор файлов, который надо добавить на сервер, чтобы мутатор не работал
    Иначе сложно что-то править, если не можешь добиться нерабочей ситуации )

    Upd.
    А впрочем погодите
    Сейчас я попробую кое что поправить

    Так
    Попробуйте эту версию
    Добавил ещё параметр TimerPeriod
    Либо руками добавьте его в инишник, либо удалите инишник и при запуске мутатора он появится вновь)
    Если мутатор не будет работать - увеличивайте параметр. Но соотв. надо будет дольше ждать пока скин переставится на Vip)

    Ссылка
    VipSkinsMut.VipSkinsMut

    Может и прокатит. О результатах сообщите

    upd. При этом я часто обновлял этот пост. Если вы качали файлы раньше 15:37 29 апреля по Москве, то перекачайте)
     
    ЛОХМАТЫЙ нравится это.
  13. denfil777

    denfil777 Капо

    Пустое окно в профиле вместо картинки (модели) скина, и скин по умолчанию ставиться. прописанный в data.ini скин так же не меняется.
     
  14. Flame

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

    Пробовал ставить паузу секунд 5-10 и ждать?
    Скажи какой версии sp и скопируй пример из базы данных, есть ли там прописанный скин. Плюс перечисли мутаторы установленные на серваке. Ну или скажи ip сервака
     
  15. denfil777

    denfil777 Капо

    Тестирую на домашнем сервере, база сама у протона. мутов много.
    [76561198054673440]
    {R13}DeNFiL=SRVetFieldMedic,121800,1927913,38167914,26139,7620,15165897,12982603,58859692,12452,267,1071146,23,139,518,976,57136,13823,7718,379591,49966430,152238,2322928,190,294,'R13RS.DoktorHaus',

    Список мутаторов
    VipSkinsMut
    KFARGBuchonOPQ
    SetMinLevelMut
    ExtraDoshMut
    PickupReplaceMut
    StartWeaponsReplaceMut
    TeamKillerKickMut
    FFPenaltyMut
    SAMutator
    RespawnMut
    AutoSpawnerP
    KickNickMut
    MutKillMessage
    AdminControlMut
    WebAdminCyrillicMut
    ForceGameStartMut
    R13PerksMut
    SuperZombieMut
    MonsterDiffBuilder
    ClanLogoMut
    BrutusPatHPLeft
    UPD прибавил TimerPeriod, вместо нужного скина прицепился Гарольд Лот и в базу прописался. SP 7.1
     
  16. Flame

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

    Так. Мутаторы вроде нормалёк. Не должны жизнь портить

    То что прописалось что-то другое это тоже хорошо, вроде как
    А точно правильно вбил путь к скину? И пакет со скином прописан в ServerPackages? (если он не прописан в ServerPerks.ini, конечно)
    Может попробовать там прописать что-нибудь простое
    VipSkinsList=(Skin="Reaper",PlayerID="76561111111111111",PlayerName="denfil777")
    Если работает - думать дальше

    Ты на каком скине пробуешь?

    Можешь ещё такую версию попробовать
    Ссылка
     
  17. denfil777

    denfil777 Капо

    Пробовал на твоем SP фостере, пакеты со скинами в том же пакете что и сам мутатор вип скинов. проверю, отпишу.

    UPD

    Вообще фигня какая то... инишка перезаписывается данными из мутатора при запуске сервера. то есть было
    [VipSkinsMut.VipSkinsMut]
    VipSkinsList=(Skin="Reaper",PlayerID="мой ид",PlayerName="denfil777")
    VipSkinsList=(PlayerName="Миссис Фостер",PlayerID="76562222222222222",Skin="VipSkinsMut.SPMRsFoster")
    VipSkinsList=(PlayerName="И опять Мистер Фостер",PlayerID="76563333333333333",Skin="VipSkinsMut.SPMRFoster")
    TimerPeriod=2.000000

    а стало после запуска


    [VipSkinsMut.VipSkinsMut]
    VipSkinsList=(PlayerName="Мистер Фостер",PlayerID="76561111111111111",Skin="VipSkinsMut.SPMRFoster")
    VipSkinsList=(PlayerName="Миссис Фостер",PlayerID="76562222222222222",Skin="VipSkinsMut.SPMRsFoster")
    VipSkinsList=(PlayerName="И опять Мистер Фостер",PlayerID="76563333333333333",Skin="VipSkinsMut.SPMRFoster")
    TimerPeriod=2.000000

    Подключил именно отдельным пакетом мут по ссылке выше, Поставил на ини только чтение, все равно скин ставится рандомно (парамедик вместо рипера). (может дело в том что нет доступа у мутатора к базе SP?)
     
  18. Flame

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

    Не. Ладно. Сделаю ещё версию. Хотя и странные вещи у тебя происходят)
    Мутатору нет дела до базы SP)
     
  19. gall87

    gall87 Капо

    Че та не пашет мут
     
  20. denfil777

    denfil777 Капо

    У меня пашет если скин в сервер Перкс прописан в кастом скинах. Только потом скин цепляет.