Вопросы по ServerPerks и его модификациям.

Тема в разделе "Кодинг", создана пользователем scar, 26 янв 2011.

  1. Essence

    Essence Moderator Команда форума

    Пробуйте такой вариант:
    Код:
    class ZombieReplacerMut extends Mutator;
    
    function PostBeginPlay()
    {
        SetTimer(0.1,false);
    }
    
    function Timer()
    {
        local KFGameType KF;
        local int i,j;
        local class<KFMonstersCollection> MC;
    
        KF = KFGameType(Level.Game);
        if ( KF!=None )
        {
            for( i=0; i<KF.InitSquads.Length; i++ )
            {
                for( j=0; j<KF.InitSquads[i].MSquad.Length; j++ )
                    KF.InitSquads[i].MSquad[j] = GetReplaceClass(KF.InitSquads[i].MSquad[j]);
            }
            for( i=0; i<KF.SpecialSquads.Length; i++ )
            {
                for( j=0; j<KF.SpecialSquads[i].ZedClass.Length; j++ )
                    ReplaceMonsterStr(KF.SpecialSquads[i].ZedClass[j]);
            }
            for( i=0; i<KF.FinalSquads.Length; i++ )
            {
                for( j=0; j<KF.FinalSquads[i].ZedClass.Length; j++ )
                    ReplaceMonsterStr(KF.FinalSquads[i].ZedClass[j]);
            }
            KF.FallbackMonster = GetReplaceClass( Class<KFMonster>(KF.FallbackMonster) );
            ReplaceMonsterStr(KF.EndGameBossClass);
            MC = KF.MonsterCollection;
            if( MC!=None )
            {
                ReplaceMonsterStr(MC.Default.EndGameBossClass);
                for( i=0; i<MC.Default.SpecialSquads.Length; i++ )
                {
                    for( j=0; j<MC.Default.SpecialSquads[i].ZedClass.Length; j++ )
                        ReplaceMonsterStr(MC.Default.SpecialSquads[i].ZedClass[j]);
                }
                for( i=0; i<MC.Default.FinalSquads.Length; i++ )
                {
                    for( j=0; j<MC.Default.FinalSquads[i].ZedClass.Length; j++ )
                        ReplaceMonsterStr(MC.Default.FinalSquads[i].ZedClass[j]);
                }
            }
        }
        Destroy();
    }
    
    function Class<KFMonster> GetReplaceClass( Class<KFMonster> MC )
    {
        switch( MC )
        {
            case Class'ZombieSiren_STANDARD':
                return Class'ZombieSiren_MR_Pub';
            default:
                return MC;
        }
        return MC;
    }
    
    function ReplaceMonsterStr( out string MC )
    {
        MC = string(GetReplaceClass(Class<KFMonster>(DynamicLoadObject(MC,Class'Class'))));
    }
    
    defaultproperties
    {
        GroupName="KF-ZombieReplacer"
        FriendlyName="Zombie Replacer Mutator"
        Description="ZombieReplacerMut."
    }
    

    Код брал отсюда.
     
    Arthur88 нравится это.
  2. Arthur88

    Arthur88 Новенький

    Благодарю, в очередной раз помогли, работает отлично :) Единственное, что, нестандартные зомби(не ивентовые, а которых вообще нет по умолчанию в игре) не будут отображаться, потому что их классы не описаны в клиенте. Такие зомби спаунятся, но невидимы и не издают звуков, при этом наносят урон. Соответственно для нормального спауна зомби добавил строчку в default мутатора ZombieReplacerMut:
    Код:
    defaultproperties
    {
        ...
        ...
        bAddToServerPackages=True
    }
    Что вынуждает клиента загружать мутатор в кэш и всё будет работать.
     
    Essence нравится это.
  3. Arthur88

    Arthur88 Новенький

    Назрел вопрос - есть ли универсальный метод подмены класса, не относящегося к зомби? Имеется класс class'KFMod.HUDKillingFloor', который нужно заменить на class'KFMod.2HUDKillingFloor'. По сути один копия другого с некоторыми правками. Подскажите, пожалуйста, где посмотреть реализацию
     
  4. Essence

    Essence Moderator Команда форума

    В Server Perks Mut
     
    2/5 и Arthur88 нравится это.
  5. Arthur88

    Arthur88 Новенький

    Посмотрел, подменил класс HUDKillingFloor, оказалось, что он и без меня подменялся в СП на SRHUDKillingFloor. Соответственно, всё, что потребовалось сделать - внести свои правки в SRHUDKillingFloor. Задача была изменить текст надписи паузы и её шрифт и цвет. Пришёл к такому решению> Класс HUDKillingFloor из KFMod наследуется от XInterface.HudBase, в котором задан текст надписи и её шрифт. В ServerPerks идёт замена HUDKillingFloor на собственный класс SRHUDKillingFloor, который наследуется от класса KFStoryGame.HUD_StoryMode, а тот, в свою очередь наследуется от KFMod.HUDKillingFloorSP, который, опять же, в свою очередь, унаследован от KFMod.HUDKillingFloor, а тот, как известно, унаследован от заветного XInterface.HudBase. Значит мы можем смотреть нужные defaultproperties класса XInterface.HudBase и прописывать их в ServerPerks.SRHUDKillingFloor. Для изменения текста и шрифта надписи паузы ("PAUSED", "ПАУЗА") пропишем следующие строки в SRHUDKillingFloor:
    Код:
    class SRHUDKillingFloor extends HUD_StoryMode;
    
    #exec OBJ LOAD FILE="Chiller.utx" Package="ServerPerks" // вшиваем пакет текстуры с шрифтом в мутатор ServerPerks
    ...
    ...
    
    defaultproperties
    {
        LevelActionPaused="clr_codeSTAND BY"  // Текст надписи паузы, где clr_code - код цвета для текста в Killing Floor, можно получить, например, в программе UT2k4MessageColourizer, либо задать в переменной ниже
        LevelActionLoading="LOADING..."  // Текст надписи загрузки
        LevelActionFontName="ServerPerks.Chiller"  // Шрифт надписей паузы и загрузки (LOADING...)
        LevelActionFontColor=(B=0,G=0,R=255,A=255)  // Цвет надписей паузы и загрузки (LOADING...)
        LevelActionPositionX=0.500000  // Координаты надписей относительно X
        LevelActionPositionY=0.500000  // Координаты надписей относительно Y
    }
    Мне понравился шрифт Chiller из Microsoft Word, поэтому я создал пакет с этим шрифтом, он подходит для всех символов, кроме кириллицы. Перед компиляцией шрифт Chiller.utx нужно поместить в папку ServerPerks рядом с папкой Classes.
    Теперь надпись паузы выглядит так:
    [​IMG]
    Прилагаю шрифт: https://drive.google.com/file/d/1r0BMUlL2tFpZ3tpfaJ26R5nrymxg9iXJ
     
    Последнее редактирование: 10 июл 2019
    Flame, Essence и 2/5 нравится это.
  6. Arthur88

    Arthur88 Новенький

    Дня не проходит чтобы не появились новые проблемы)) Всё никак не могу взять в толк как мне "применить" собственный класс, в котором записаны только defaultproperties. То есть, вот, есть стандартный класс RedWhisp из KFMod. Мне нужно defaultproperties из RedWhisp поменять, тогда как править этот класс я не могу, он системный. Следовательно я создал свой класс newRedWhisp и прописал в нём нужные мне defaultproperties. Теперь мне нужно чтобы новый класс "читался" сервер перксом или где угодно, но считывался и применялись мои defaultproperties. Выглядит это так:
    Код:
    class newRedWhisp extends RedWhisp;
    
    defaultproperties
    {
         mSizeRange(0)=10.000000
         mSizeRange(1)=10.000000
         mColorRange(0)=(B=0,G=255,R=0)
         mColorRange(1)=(B=0,G=255,R=0)
         mNumTileColumns=1
         mNumTileRows=1
         Skins(0)=Texture'ROEffects.SmokeAlphab_t'
         Style=STY_Additive
    }
    Как быть?
     
  7. Essence

    Essence Moderator Команда форума

    Над поискать где применяется данный класс
    Он у нас спавнится в функции ShowPathTo в KFGameType
    Соответственно над создать кастомный ГеймТайп и переопределить функцию
    Код:
    class SRGameType extends KFGameType;
    
    // Overridden to support KF functionality
    function ShowPathTo(PlayerController P, int TeamNum)
    {
        if( KFGameReplicationInfo(GameReplicationInfo).CurrentShop == none )
        {
            return;
        }
    
        KFGameReplicationInfo(GameReplicationInfo).CurrentShop.InitTeleports();
    
        if ( (KFGameReplicationInfo(GameReplicationInfo).CurrentShop.TelList[0] != None) &&
           (P.FindPathToward(KFGameReplicationInfo(GameReplicationInfo).CurrentShop.TelList[0], false) != None) )
        {
            Spawn(class'newRedWhisp', P,, P.Pawn.Location); // Changed.
        }
    }

    В ServerPerksMut.uc в функцию PostBeginPlay добавить
    Код:
        if(SRGameType(Level.Game)==None)
            Level.ServerTravel("?game=MyPackage.SRGameType", True);
    Где MyPackage - пакет, в котором лежит класс SRGameType.

    Если не хочется создавать кастомный ГеймТайп (хотя до этого всё равно когда-нить дойдёт), то можно пойти путём чуть более простым - воспользоваться подобным мутатором:
    Код:
    class ReplaceDPMut extends Mutator;
    
    var Color NewRedWhispColorRange;
    
    simulated function PostBeginPlay()
    {
        Class'RedWhisp'.Default.mSizeRange[0]=10;
        Class'RedWhisp'.Default.mSizeRange[1]=10;
        Class'RedWhisp'.Default.mColorRange[0]=NewRedWhispColorRange;
        Class'RedWhisp'.Default.mColorRange[1]=NewRedWhispColorRange;
        Class'RedWhisp'.Default.mNumTileColumns=1;
        Class'RedWhisp'.Default.mNumTileRows=1;
    }
    
    defaultproperties
    {
        NewRedWhispColorRange=(B=0,G=255,R=0)
        GroupName="KF-ReplaceDP"
        FriendlyName="ReplaceDPMut"
        Description="Replace Default Properties."
        bAddToServerPackages=True
        bAlwaysRelevant=True
        RemoteRole=ROLE_SimulatedProxy
    }
     
    Flame и Arthur88 нравится это.
  8. P-Jay

    P-Jay Новенький

    Привет, я не говорю по-русски, поэтому я должен использовать переводчик Google, но друг рекомендовал мне зарегистрироваться здесь, чтобы я мог получить помощь здесь.
    У меня есть мод на моем сервере с серверными привилегиями, теперь я хочу добавить второй мод с другими серверными привилегиями на сервере, для этого мне нужно переименовать мутатор в «серверные привилегии», поэтому у меня есть отдельный файл конфигурации, отдельный мутатор и другие имена файлов есть. Мне удалось получить отдельный мутатор с другим именем и другим файлом конфигурации, но он не работает должным образом. Может ли кто-нибудь помочь мне с этим? Большое спасибо
     
  9. Flame

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

    Слишком мало информации. Покажи (или выложи) простейший пример того, как ты это делал.
    Так же можно попытаться объяснить что ты в итоге хочешь получить

    Too little information. Show us a simple example of your actions (or upload and give us a link).
    Also you can try to explain what do you want to get in the end
     
  10. P-Jay

    P-Jay Новенький

    На моем сервере у меня есть мод "ScrN Balance", у этого есть мутатор "ServerPerks", файлы называются "ServerPerks.ini / ServerPerksMut.u / ServerPerksMut.ucl / ServerPerksP.u / ServerPerks.u", теперь у меня есть на моем сервере Еще один мод "Outta Space" Я хочу добавить оружие, скины и стандартные льготы. Вам нужен мутатор «ServerPerks», но у него также есть файлы с именем «ServerPerks.ini / ServerPerksMut.u / ServerPerksMut.ucl / ServerPerksP.u / ServerPerks.u», а Mutator в игре называется «Server Veterancy Handler V7». Теперь эти файлы перезаписывают друг друга, поэтому я попытался использовать «Исходный код» из Mutator «ServerPerk», чтобы присвоить файлам другое имя. и мутатор "Ветеранский сервер Outta Space Server V7". Я попробовал это несколькими способами и получил эти файлы. Игра также создает файл «OuttaSpaceServerPerks.ini», но я не могу выбрать перки, и на карте я мог только летать и не был в обычном «лобби». Мутатор должен иметь ту же функциональность, что и стандартный мутатор ServerPerks, но он не должен переопределять его. Я только что изменил несколько мелких вещей на перках, они будут работать, даже если я не переименую мутатор (название перков, описание для повышения и "Коммандос" и "поддержка", у меня есть "Убить Сталкеров" и " Сварные двери »для выравнивания, но как только я переименую Мутатор, независимо от того, меняю ли я перки или нет, он не работает должным образом, как описано выше.
     
  11. P-Jay

    P-Jay Новенький

    I will write my next messages in english, if this is ok and i will upload my files and give you the link for it, but i need to do it later because i need to go to work now. Thank you :)
     
  12. P-Jay

    P-Jay Новенький

  13. Flame

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

    I took a quick look at your code

    1. Lobby
    In class OuttaSpaceServerPerks.KFPCServ
    Код:
    ...
    defaultproperties
    {
        LobbyMenuClassString="ServerPerks.SRLobbyMenu"
            ...
    }
    
    should be changed to OuttaSpaceServerPerks.SRLobbyMenu

    2. Perks
    After you set an appropriate lobby - you shouldn't have any problems with perks
    I changed OuttaSpaceServerPerks.ini and got this: Screenshots
    Код:
    [OuttaSpaceServerPerksMut.OuttaSpaceServerPerksMut]
    Perks=OuttaSpaceServerPerksP.SRVetSupportSpecOuttaSpace
    ...
    
    Changed version
     
    Последнее редактирование: 14 июл 2019
  14. P-Jay

    P-Jay Новенький

    Thank you, that means a lot to me. I'm new to compiling, so I did not know about those little changes. Thanks again, I've been crazy about it the last few days and thanks to you, my problem is solved now, you're really great :)
     
  15. P-Jay

    P-Jay Новенький

    Hi, i have 2 more questions, as long as i am a noob, you maybe can answer them.

    1. I have some Custom Weapons in Server Perks, wich have the wrong Perk Icon (Tennisball Grenade is a Demolition Weapon but it is showing the Support Icon, for Example). So is it possible to changed perked weapon, so that it is showing the right Icon, or the Icon i want, without using Scrn Balance, because i know how to do it in ScrN Balance. (Just with ServerPerks )

    2. I have 2 Mutators (Skip Trader / Player Cameras) if i add them as Mutator, to the Server, it says "Perk Progression disabled" and all Perks are shown without any progress and Level 0, but if i ready from the Lobby into the Game, everything is ok (Showing the right Progress and the right Perk Levels from the games before) Is there a possible fix for it? I can live with it, if this is not working, but its confusing for new players on the Server (ServerPerks not Vanilla)
     
  16. Arthur88

    Arthur88 Новенький

    Доброго времени суток, не поправите меня - где я ошибся? Пытаюсь в классе ServerPerks.SRHUDKillingFloor сделать считывание значения переменной из внешнего конфига с кастомным именем. Допустим, пусть это будет конфиг HUDMessages.ini. Тогда добавлю следующие строки в класс SRHUDKillingFloor:
    Код:
    class SRHUDKillingFloor extends HUD_StoryMode config( HUDMessages );
    
    var globalconfig string iMSG;
    
    function bool DrawLevelAction (Canvas C)
    {
        ...
    
        if ( ...)
        {
            LevelActionText = iMSG;
        }
        ...
        ...
    }
    Конфиг следующего содержания:
    Код:
    [ServerPerks.SRHUDKillingFloor]
    iMSG="ПАУЗА"
    Ожидалось, что LevelActionText получит значение строки iMSG из конфига HUDMessages.ini. Где допустил оплошность?
     
  17. P-Jay

    P-Jay Новенький

    Hello, thank you for your answer, but im not good enough to understand what to do, sorry :/
    But on the site where i downloaded the Player Cameras mutator, they had discussion about using it with ServerPerks too and it seems like they didnt got it to work. Sorry again, but i dont exactly understand how and where to add these lines, because they are shown with (...) in your message, is that correct? And where to add these Lines --> [ServerPerks.SRHUDKillingFloor] iMSG="ПАУЗА" in the SRHUDKillingFloor too? Maybe these Mutators just incompatible with ServerPerks?
     
  18. Arthur88

    Arthur88 Новенький

    My post is not for you, mate)
     
  19. P-Jay

    P-Jay Новенький

  20. Essence

    Essence Moderator Команда форума

    Мало информации, выводите логи.
    Debugging Techniques
     
    Arthur88 нравится это.