ConfigManager

Тема в разделе "Общего назначения", создана пользователем Essence, 24 фев 2020.

  1. Essence

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

    Данный мутатор позволяет редактировать ЛЮБОЙ файл конфигурации.

    Для использования команд нужно логиниться под администратором.
    Регистр команды не важен.
    Команда для редактирования стандартного конфига не сработает, если мутатор на сервере неактивен.
    Не поддерживает возможность работать с массивами и ввод команд через WebAdmin. В будущем добавлю это.

    Настройки в .ini файле:
    CommandName[0]=coc - команда для редактирования конфига типа PerObjectConfig.
    CommandName[1]=cmc - команда для редактирования стандартного конфига.

    Пример команд:
    // Команда, название мутатора, параметр, значение
    Mutate CMC ChatIconMut bDisplayFrom3rdP False
    // Команда, название конфига, наименование секции, имя класса PerObjectConfig, параметр, значение
    Mutate COC MonsterDiffBuilder ClotSettings MonsterDiffBuilder.MonsterSettings Health 260

    Замечание. Не редактируйте MonsterDiffBuilder.ini с помощью этого мутатора.
    Эта строка здесь лишь для примера работы с конфингом типа PerObjectConfig.

    Код:
    Код:
    Class ConfigManager extends Mutator Config(ConfigManager);
    
    var config string CommandName[2];
    
    function Mutate(string MutateString, PlayerController Sender)
    {
        if(NextMutator!=None)
            NextMutator.Mutate(MutateString, Sender);
        if(Sender.PlayerReplicationInfo!=None && Sender.PlayerReplicationInfo.bAdmin)
            ExecuteCommand(MutateString, Sender);
    }
    
    function ExecuteCommand(string MutateString, PlayerController Sender)
    {
        local string ConfigFileClassName;
        local class<Object> ConfigClass;
        local Object ConfigRecord;
        local array<string> Names;
        local array<string> Parts;
        local string OldValue;
        local bool bFound;
        local Mutator M;
        local int i;
        Split(MutateString, " ", Parts);
        if(Parts[0]~=CommandName[0])
        {
            i=InStr(Parts[3],".");
            if(i!=-1)
            {
                ConfigFileClassName=Mid(Parts[3], i+1);
            }
            else
            {
                Sender.ClientMessage("Unrecognized configuration file class:"@ConfigFileClassName);
            }
            ConfigClass=Class<Object>(DynamicLoadObject(Parts[3], Class'Class'));
            if(ConfigClass==None) Sender.ClientMessage("Unrecognized pass to configuration file class:"@Parts[3]);
            Names=ConfigClass.Static.GetPerObjectNames(Parts[1],ConfigFileClassName);
            if(Names.Length==0) Sender.ClientMessage("Unknown configuration file:"@Parts[1]);
            for(i=0; i<Names.Length; i++)
            {
                if(Names[i]~=Parts[2])
                {
                    bFound=True;
                    ConfigRecord=New(None, Names[i]) ConfigClass;
                    OldValue=ConfigRecord.GetPropertyText(Parts[4]);
                    if(ConfigRecord.SetPropertyText(Parts[4], Parts[5]))
                    {
                        ConfigRecord.SaveConfig();
                        Sender.ClientMessage("The value of the parameter"@Parts[4]$"="$OldValue@"was changed to"@Parts[5]@"in"@Parts[1]$".ini in section ["$Parts[2]@ConfigFileClassName$"]!");
                    }
                    else
                    {
                        Sender.ClientMessage("Unknown parametr in"@Parts[1]$".ini in section ["@Parts[2]@ConfigFileClassName@"] !");
                    }
                    Break;
                }
            }
            if(!bFound) Sender.ClientMessage("Section ["$Parts[2]@ConfigFileClassName$"] in"@Parts[1]$".ini not found!");
        }
        if(Parts[0]~=CommandName[1])
        {
            for(M=Level.Game.BaseMutator; M!=None; M=M.NextMutator)
            {
                if(string(M.Name)~=Parts[1])
                {
                    bFound=True;
                    OldValue=M.GetPropertyText(Parts[2]);
                    if(M.SetPropertyText(Parts[2], Parts[3]))
                    {
                        M.SaveConfig();
                        Sender.ClientMessage("The value of the parameter"@Parts[2]$"="$OldValue@"was changed to"@Parts[3]@"in"@Parts[1]$".ini!");
                    }
                    else
                    {
                        Sender.ClientMessage("Unknown parametr in"@Parts[1]$".ini!");
                    }
                    Break;
                }
            }
            if(!bFound) Sender.ClientMessage("Mutator not found or disabled!");
        }
    }
    
    defaultproperties
    {
        CommandName(0)="coc"
        CommandName(1)="cmc"
        GroupName="KF-ConfigManager"
        FriendlyName="ConfigManager"
        Description="ConfigManager"
    }

    Путь к мутатору:
    Код:
    ConfigManager.ConfigManager

    Скачать:
    Ссылка
     
    Последнее редактирование: 11 мар 2020
    RaideN-, Flame, denfil777 и ещё 1-му нравится это.
  2. Essence

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

    Поправил чутка код. Теперь мутатор не влияет на возможность стим прокачки на классических серверах.
    Добавил замечание.
    Ссылка обновлена.
     
    Flame нравится это.