Чат-бот

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

  1. Essence

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

    Данный мутатор дает вам возможность отображать новости (или сообщения любого типа) на вашем сервере. Игроки увидят эти сообщения в игровом чате. Также возможно отображение админ-сообщений.

    Мутатор написан на основе Server Ads SE

    Особенности мутатора:
    1) Вырезано всё, что связано с меню для WebAdmin.
    2) Вырезаны лишние настройки.
    3) Сообщений можно прописать ровно столько, сколько позволит размер массива.
    4) Отдельный файл для настройки ChatBotConfig.ini
    5) Чтобы сделать сообщения цветными используйте либо теги, либо ServerColor
    6) Админ-сообщения пишутся с тегом #.
    7) Для написания сообщений русскими буквами нужно поменять кодировку ChatBotConfig.ini на UCS-2 Little Endian.
    8) Сообщения не сохраняются в логах чата (Актуально для тех, кто использует CorLogMut).
    9) Сообщения корректно отображаются в WebAdmin.
    10) Для WebAdmin нужен специальный мутатор.

    Скриншот:
    [​IMG]

    Настройки в ini файле:
    bDebug=False - используется для вывода логов.
    MsgDelay=60.000000 - Количество секунд между сообщениями.
    GroupSize=1 - Количество строк для отображения в игровом чате.
    AdminMsgDuration=5 - Количество секунд, в течение которых админ-сообщение будет оставаться видимым.
    AdminMsgColor=(B=0,G=0,R=255,A=128) - Цвет админ-сообщения, используйте значения RGBA от 0 до 255.
    ColorList=(ColorName="Красный",ColorTag="%r",Color=(B=0,G=0,R=255,A=0)) - список тегов для окрашивания текста.
    ColorName - название цвета, для удобства.
    ColorTag - тег цвета.
    Color - цвет, используйте значения RGBA от 0 до 255.
    InfoLine=ш@@Каждый ў`@охотник шш@желает @°@знать @°°где @@Асидит Ђ@Ђфазан - текст сообщения.

    Код с комментариями:
    Код:
    class ChatBotMut extends Mutator Config(ChatBotConfig);
    
    // vars
    var int CurPos;
    var int NumLines;
    
    // config options
    struct ColorRecord
    {
        var config string ColorName; // color name, for comfort
        var config string ColorTag; // color tag
        var config Color Color; // RGBA values
    };
    var globalconfig array<ColorRecord> ColorList; // color list
    var globalconfig array<string> InfoLine; // the information lines
    var globalconfig bool bDebug; // logs
    var globalconfig float MsgDelay; // delay between a message (seconds)
    var globalconfig int GroupSize; // number of lines to show at one
    var globalconfig int AdminMsgDuration; // seconds that an "admin" message will stay visible
    var globalconfig Color AdminMsgColor; // color of the admin messages
    
    // initialise this mutator
    function PostBeginPlay()
    {
        Super.PostBeginPlay();
        LoadInformationList();
    }
    
    // Load info from config
    function LoadInformationList()
    {
        local array<string> TempLines;
        local int i;
        DebugLog("Starting");
        // clean up list
        for(i=0; i<InfoLine.Length; i++)
        {
            if(InfoLine[i]!="")
            {
                TempLines.Insert(NumLines,1);   
                TempLines[NumLines]=InfoLine[i];
                NumLines++;
            }
        }
        for(i=0; i<InfoLine.Length; i++) InfoLine[i]=TempLines[i];
        SaveConfig();
        DebugLog("There are"@NumLines@"lines in the list");
        SetTimer(MsgDelay, True);
    }
    
    // broadcast the message
    function Timer()
    {
        local int i;
        for(i=0; i<GroupSize; i++)
        {
            if(CurPos>=NumLines) CurPos=0;
            SendInfoMsg(InfoLine[CurPos]);
            CurPos++;
        }
    }
    
    // send message to players
    function SendInfoMsg(coerce string Msg)
    {
        local PlayerController PC;
        local Controller C;
        local string TempMsg;
        if(Left(Msg,1)!="#") SetColor(Msg);
        for(C=Level.ControllerList; C!=None; C=C.NextController)
        {
            if(PlayerController(C)!=None)
            {
                PC=PlayerController(C);
                if(PC!=None)
                {
                    // center print admin messages which start with #
                    if(Left(Msg,1)=="#")
                    {
                        Msg=Right(Msg, Len(Msg)-1);
                        PC.ClearProgressMessages();
                        PC.SetProgressTime(AdminMsgDuration);
                        PC.SetProgressMessage(0, Msg, AdminMsgColor);
                        DebugLog("Admin Line:"@Msg);
                        Return;
                    }
                    if(PC.PlayerReplicationInfo!=None)
                    {
                        // we don't use color for webadmin
                        if(PC.PlayerReplicationInfo.PlayerID==0)
                        {
                            TempMsg=Level.Game.StripColor(Msg);
                            PC.TeamMessage(None, TempMsg, 'Chat Bot'); // we don't use BroadcastHandler, because we don't need spam in server logs
                            DebugLog("Line:"@TempMsg);
                        }
                        else PC.TeamMessage(None, Msg, 'Chat Bot'); // we don't use BroadcastHandler, because we don't need spam in server logs
                    }
                }
            }
        }
    }
    
    // color tags for messages
    function SetColor(out string Msg)
    {
        local int i;
        for(i=0; i<ColorList.Length; i++)
        {
            if(ColorList[i].ColorTag!="" && InStr(Msg, ColorList[i].ColorTag)!=-1)
            {
                ReplaceText(Msg, ColorList[i].ColorTag, Class'GameInfo'.Static.MakeColorCode(ColorList[i].Color));
            }
        }
    }
    
    function DebugLog(string LogString)
    {
        if(bDebug) Log("[ChatBotMut]"@LogString);
    }
    
    defaultproperties
    {
        bDebug=False
        MsgDelay=60.000000
        GroupSize=1
        AdminMsgDuration=5
        AdminMsgColor=(B=0,G=0,R=255,A=128)
        GroupName="KF-ChatBotMut"
        FriendlyName="Chat Bot"
        Description="Chat Bot gives you the ability to display news (or what ever kind of messages you want) on your server. Players will see these messages in their chat console. It's also possible to display so called "Admin messages"."
    }

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

    Замечание:
    Нет смысла выставлять GroupSize>4, т.к. больше 4-х строк не отобразится из-за параметра ConsoleMessageCount в клиентском файле User.ini

    Ссылка
     
    Последнее редактирование: 9 авг 2019
    denfil777 и STaJIKeR нравится это.
  2. WipeMaster

    WipeMaster Бандит

    Так же получается что сообщения будут только в одном цвете?
     
  3. Essence

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

    InfoMsgColor для чего?
    [​IMG]
     
  4. w.a.l

    w.a.l Консильери

    Зачем дублировать то что и так справляется :
    Код:
    bEnabled=True
    fDelay=30.000000
    iAdType=0
    iGroupSize=1
    bWrapAround=True
    iAdminMsgDuration=8
    cAdminMsgColor=(B=255,G=255,R=0,A=255)
    sLines[0]=#Добро пожаловать, БОЕЦ !
    sLines[1]=@шшСайт и форум этого сервера: @@шkillingfloorgame.net
    sLines[2]=@шшНа форуме принимаються любые жалобы, предложения, просьбы
    sLines[3]=шш@Беспредел будет наказан киком, а потом баном !
    sLines[4]=шш@Бездействующии игроки автоматически кикаются.
    bUseURL=False
    sURLHost=localhost
    iURLPort=80
    sURLRequest=/serverads.txt
    sLines[5]=шш@Inactive players will automatically kick
    sLines[6]=@шшРаботают ВСЕ магазины на ВСЕХ картах!
    sLines[7]=@шшПерки с 7 по 30 уровни
    sLines[8]=@шшПубличный адрес этого КФ сервера: @@ш91.246.116.61
    sLines[9]=@@шСпасибо всем, кто внес свой вклад в этот сервер
    sLines[10]=шш@Public IP this KF servers: @@ш91.246.116.61
     
  5. Essence

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

    Для всего того, что я написал в "Особенности мутатора"
     
  6. w.a.l

    w.a.l Консильери

    Да я не спорю, я не говорю что он хуже, я про то что и Server Ads SE справляется. А так каждый сам решает.
     
  7. WipeMaster

    WipeMaster Бандит

    Ты неправильно понял мой вопрос. В твоем мутаторе я смогу написать подобное сообщение?
     
  8. Essence

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

    Нет, цвет задаётся для всей строки.
    Мб потом подумаю, как это красиво реализовать.
    Мне пока без надобности.
     
  9. Essence

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

    Ну ты спросил зачем, я ответил)
    Я для себя его переписал, а там уж кому какой вариант больше нравится.
     
  10. Essence

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

    Чот я конкретно тупанул в плане реализации мутатора.
    Переписал мут, шапку обновил.

    Теперь сможешь)
     
  11. WipeMaster

    WipeMaster Бандит

    Ну дык, получился тот же serveradskf просто без ограничений по количеству сообщений. Можно было просто обьеденить мою версию с твоей и выложить как ver. 103.
     
  12. Essence

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

    Это не конечная версия. Я планировал расширять постепенно функционал.
    Пусть будет пока в таком виде.
     
  13. STaJIKeR

    STaJIKeR Капо

    Насчет объединения, возможно ли так сделать, как у WipeMaster?
    Что-то в этом роде:

    Код:
    %RПривет %Bтебе %Cдруг
    А в ини файл вывести переменные, которые будут отвечать за конкретный цвет.
    RColor=(B=0,G=0,R=200,A=255)
    Ну и тд...

    И в итоге вышло:

    Привет тебе друг
     
    Последнее редактирование: 6 фев 2019
  14. Essence

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

    Да, есть у меня и такая версия мутатора.
     
  15. STaJIKeR

    STaJIKeR Капо

    Будет ли она в открытом доступе?
     
  16. Essence

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

    Держи
     
    STaJIKeR и WipeMaster нравится это.
  17. WipeMaster

    WipeMaster Бандит

    Хех, а я утром начал такое реализовывать - конфиг тэг-цвет. Заберу ка себе тогда.
     
  18. STaJIKeR

    STaJIKeR Капо

    Благодарю.