AllTraders

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

  1. F4TAL1ST

    F4TAL1ST ---

    AllTraders
    Скажите, вас раздражает, когда после волны, нужно идти на закуп к торговцу, расположенному на другой стороне карты?
    Ну ладно если идти надо метров 100, а вот если это карта "Ферма" и ваш торговец в 250 метрах?
    При таком раскладе есть вероятность, что вы даже не успеете дойти до торговца, как начнется новая волна...
    Именно для решения таких проблем придумали мутатор AllTraders.
    Его роль проста - он делает так. что время игры открываются двери ВСЕХ торговцев и вы можете закупаться там, где вам удобнее:
    [​IMG]
    Как видите "мой торговец" находится совсем в другом месте, однако двери ЭТОГО торговца также открыты.

    Думаю на сервере, где основной упор делается на экшене и стратегии, мутатор придется к месту...B)

    СКАЧАТЬ

    Upd. Чуть подчищенная версия и версии выводящие сообщение о том, что все магазины открыты
    Ниже в этой теме
     
    Последнее редактирование модератором: 10 дек 2016
    Flame, HATAXA и Винни нравится это.
  2. Да×тер

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

    очень удобно) B)
     
  3. Винни

    Винни Мододел "UM"

    Вот это мутатор!!!
     
  4. Ex⊕rcisT

    Ex⊕rcisT Über-модератор

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

    Forever_Young Капо

    Как тонко, и ведь не сразу доходит...
     
  6. F4TAL1ST

    F4TAL1ST ---

    Экзорцист - мастер завуалированных мутаторов метафор B)
     
  7. LLIePLLIeHb

    LLIePLLIeHb Guest

    Подскажите как прописать в батнике сервера , прописываю KFModsAllTraders.MutAllTradersEnabled , но автоматом не запускается приходиться через вебадминку включать.
     
  8. VETAL

    VETAL Солдат

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

    LLIePLLIeHb Guest

    Не работает , все кроме одного закрыты, и в списке активных мутов нет. Да вообщем снимаю вопрос , т.к. мут облегчает игру, а это не есть хорошо ( разве что на ферме поставить и ей подобным).
     
  10. Rainishe

    Rainishe Солдат

    у меня всё пашет,просто надо апрвильно подключать
     
  11. xorex

    xorex Соучастник

    HATAXA, ЛОХМАТЫЙ и Frosty нравится это.
  12. Frosty

    Frosty Новенький

    Спасибо что перизалил )
     
  13. abetovalex

    abetovalex Новенький

    ссылка битая(
     
  14. Flame

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

    Ну да
    Прочесть двумя постами выше никак, естественно
     
    Папка01 нравится это.
  15. abetovalex

    abetovalex Новенький

    а, да, не увидел
     
    Flame нравится это.
  16. Flame

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

    Пришло время обновить и эту тему

    1. Ссылка на исходный мутатор от xorex, Зеркало

    2. Ссылка на слегка поправленный исходный мутатор:
    Замечание:
    Автор просто был не в теме, что нельзя так править PreBeginPlay в мутаторе и при этом писать bAddToServerPackages=True
    Другое дело, что bAddToServerPackages=True тут и не надо - мутатор чисто серверный

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

    Чтобы он не конфликтовал в ситуации, когда пользователь перешёл к вам с сервера с другим мутатором KFModsAllTraders.MutAllTradersEnabled - переименовал мутатор
    AllTradersMut.AllTradersMut

    В данной теме попросили, чтобы мутатор писал сообщение о том, что все трейдеры открыты
    Поэтому:

    3. Версия мутатора выводящая строку при помощи ClientMessage
    Скрин:
    [​IMG]

    Настройки:
    Код:
    Message=яAll traders are opened up! Все магазины открыты!
    
    Первые символы строки - код цвета
    (в сообщении эти символы отобразились некорректно - глядите ини файл в архиве)
    Подробнее по этому поводу тут

    Код:
    Код:
    class AllTradersMut extends Mutator config(AllTradersMut);
    
    var bool bMessageSent;
    var config string Message;
    
    function PostBeginPlay()
    {
        local ShopVolume S;
        foreach DynamicActors(Class'ShopVolume',S)
        {
            S.bAlwaysClosed = false;
            S.bAlwaysEnabled= true;
        }
        SetTimer(1.0,true);
        SaveConfig();
    }
    
    function Timer()
    {
        local bool bWaveInProgress;
        bWaveInProgress=bool(Level.Game.GetPropertyText("bWaveInProgress"));
        if(!bWaveInProgress && !bMessageSent)
        {
            SendMessage();
            bMessageSent = true;
        }
        if(bWaveInProgress && bMessageSent)
            bMessageSent = false;
    }
    
    function SendMessage()
    {
        local Controller C;
        for(C=Level.ControllerList;C!=none;C=C.NextController)
        {
            if(PlayerController(C)!=none && C.PlayerReplicationInfo!=none && C.PlayerReplicationInfo.PlayerID>0)
                PlayerController(C).ClientMessage(Message);
        }
    }
    
    defaultproperties
    {
        Message="ÿAll traders are opened up!"
        GroupName="KF-AllTraders"
        FriendlyName="All Traders"
        Description="Opens up all traders inbetween waves."
    }
    
    Ссылка
    AllTradersMut.AllTradersMut

    4. Версия мутатора выводящая строку при помощи ReceiveLocalizedMessage
    Скрин:
    [​IMG]

    Настройки:
    Message - сообщение
    R - красная составляющая цвета сообщения
    G - зелёная составляющая цвета сообщения
    B - синяя составляющая цвета сообщения
    OnScreenTime - время в течение которого сообщение отображается на экране
    PosX - положение сообщения по горизонтали
    PosY - положение сообщения по вертикали
    Пример:
    Код:
    Message=All traders are opened up! Все магазины открыты!
    R=213
    G=72
    B=107
    OnScreenTime=30
    PosX=0.150000
    PosY=0.500000
    

    Код:
    Код:
    class AllTradersMut extends Mutator config(AllTradersMut);
    
    var config string Message;
    var config byte R;
    var config byte G;
    var config byte B;
    var config byte OnScreenTime;
    var config float PosX;
    var config float PosY;
    var bool bMessageSent;
    var AllTradersObject atObject;
    
    function MatchStarting()
    {
        atObject=Spawn(class'AllTradersObject');
        atObject.Text=Message;
        atObject.R=R;
        atObject.G=G;
        atObject.B=B;
        atObject.OnScreenTime=OnScreenTime;
        atObject.PosX=PosX;
        atObject.PosY=PosY;
    }
    
    function PostBeginPlay()
    {
        local ShopVolume S;
        foreach DynamicActors(Class'ShopVolume',S)
        {
            S.bAlwaysClosed = false;
            S.bAlwaysEnabled= true;
        }
        SaveConfig();
        SetTimer(1.0,true);
    }
    
    function Timer()
    {
        local bool bWaveInProgress;
        bWaveInProgress=bool(Level.Game.GetPropertyText("bWaveInProgress"));
        if(!bWaveInProgress && !bMessageSent)
        {
            SendMessage();
            bMessageSent = true;
        }
        if(bWaveInProgress && bMessageSent)
            bMessageSent = false;
    }
    
    function SendMessage()
    {
        local Controller C;
        for(C=Level.ControllerList;C!=none;C=C.NextController)
        {
            if(PlayerController(C)!=none && C.PlayerReplicationInfo!=none && C.PlayerReplicationInfo.PlayerID>0)
                PlayerController(C).ReceiveLocalizedMessage(class'AllTradersMessage',0,,,atObject);
        }
    }
    
    defaultproperties
    {
        bAddToServerPackages=true
        GroupName="KF-AllTraders"
        FriendlyName="All Traders"
        Description="Opens up all traders inbetween waves."
    }
    
    Код:
    class AllTradersMessage extends CriticalEventPlus
        abstract;
    
    var(Message) localized string InfoText[2];
    
    static function string GetString(
        optional int Switch,
        optional PlayerReplicationInfo RelatedPRI_1,
        optional PlayerReplicationInfo RelatedPRI_2,
        optional Object OptionalObject
        )
    {
        if(AllTradersObject(OptionalObject)!=none && Len(AllTradersObject(OptionalObject).Text)>0)
        {
            default.DrawColor.R=AllTradersObject(OptionalObject).R;
            default.DrawColor.G=AllTradersObject(OptionalObject).G;
            default.DrawColor.B=AllTradersObject(OptionalObject).B;
            default.Lifetime=AllTradersObject(OptionalObject).OnScreenTime;
            default.PosX=AllTradersObject(OptionalObject).PosX;
            default.PosY=AllTradersObject(OptionalObject).PosY;
            return AllTradersObject(OptionalObject).Text;
        }
        return Default.InfoText[Switch];
    }
    
    defaultproperties
    {
        InfoText(0)="All traders are opened up!"
        bIsUnique=False
        Lifetime=20
        DrawColor=(R=245,G=10,B=69)
        DrawPivot=DP_UpperLeft
        StackMode=SM_Down
        PosX=0.300000
        PosY=0.300000
    }
    
    Код:
    class AllTradersObject extends Actor;
    var string Text;
    var byte R;
    var byte G;
    var byte B;
    var byte OnScreenTime;
    var float PosX;
    var float PosY;
    var int FontSize;
    
    replication
    {
        reliable if(bNetDirty && Role == Role_Authority)
            Text,R,G,B,OnScreenTime,PosX,PosY,FontSize;
    }
    
    defaultproperties
    {
        bAlwaysRelevant=True
    }
    
    Ссылка
    AllTradersMut.AllTradersMut

    Замечание:
    Внимательный кодер заметит, что я немного накосячил тут:
    Код:
    bWaveInProgress=bool(Level.Game.GetPropertyText("bWaveInProgress"));
    if(!bWaveInProgress && !bMessageSent)
    ...
    
    Изначально проверка была чуток другая и мне важно было выполняется ли bWaveInProgress==true
    В таком варианте всё хорошо. Но в текущем варианте, даже если GameType совершенно экзотический, без переменной bWaveInProgress, без всяких трейдеров и волн - всё равно сообщение будет выводиться, ибо Level.Game.GetPropertyText("bWaveInProgress") выдаст в таком случае тот же false, что был бы для ситуации, когда в обычном KFGameType началось время трейдера.
    Но сейчас лень править)
     
    Последнее редактирование: 10 дек 2016
    Arckon., drummer36, Essence и ещё 1-му нравится это.
  17. Maksovich

    Maksovich Соучастник

    Ребята. Может что-то не так делаю. Я новичок в этом деле. Может что-то не правильно скомпилировал. Как делал. Создал папку AllTradersMut в папке KillingFloor в эту папку добавил Classes и в нее три файла AllTradersMessage.uc, AllTradersMut.uc и AllTradersObject.uc код брал из версии мутатора выводящая строку при помощи ReceiveLocalizedMessage. Названия файлов задал по названию классов в начале каждой части кода. В KillingFloor.ini добавил в раздел [Editor.EditorEngine] EditPackages=AllTradersMut ну и с помощью батника запустил ucc make. Все скомпилировалось. Запустил, проверил - работает. Но настройки в AllTradersMut.ini ничего не меняют почему-то.
     
  18. Maksovich

    Maksovich Соучастник

    Пришлось прямо в коде исправить нужные строчки и в Юникод кодировке сохранить чтобы русский текст отображался как надо. Да и кстати из-за этого мутатора на БиотиксЛабс значок какой-то из редактора остается висеть. Отключаю мутатор и нормально сразу.
     

    Вложения:

    • sshot-71.jpg
      sshot-71.jpg
      Размер файла:
      273,5 КБ
      Просмотров:
      22
  19. Maksovich

    Maksovich Соучастник

    Выкачал версию по последней ссылке (https://yadi.sk/d/FfFV40oN32vHZa) мутатор стал нормально читать конфиг, но эти значки все равно висит на многих картах. Попробовал на чистый сервер установить 1 этот мутатор - все ровно висят эти значки. Что за ерунда... Попробовал версию которая выводит сообщения через ClientMessage - там нормально все, без висящих значков в воздухе.
     
  20. 3xzet

    3xzet Мододел "Ы"

    Надо добавить в AllTradersObject в defaultproperties параметр bHidden=True
     
    Flame и Essence нравится это.