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

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

Метки:
  1. kok-s

    kok-s Консильери

    Смотри нотифи и пути в редакторе.
     
  2. STaJIKeR

    STaJIKeR Капо

    Вообщем такая борода.
    Качает скин вне пака.

    16:25:39 192.168.1.101:65292 Fully downloaded - 1.3 M @ 40.6 MB/s - /UZHTTP/VipSkinsMut.u.uz2
    16:25:39 192.168.1.101:65293 Requested GET /UZHTTP/Urban_T.utx.uz2
    16:25:39 192.168.1.101:65293 Fully downloaded - 855.8 K @ 41.8 MB/s - /UZHTTP/Urban_T.utx.uz2
    16:25:39 192.168.1.101:65294 Requested GET /UZHTTP/ScrnHMG.u.uz2

    Код из скина

    class UrbanKFSkin extends PlayerRecordClass;

    #exec OBJ LOAD FILE=Urban_A.ukx package="VipSkinsMut"
    #exec OBJ LOAD FILE=Urban_T.utx package="VipSkinsMut"

    simulated static function xUtil.PlayerRecord FillPlayerRecord()
    {
    local xUtil.PlayerRecord PRE;

    PRE.Species = Class'UrbanKFSkinSpecies';
    PRE.MeshName = string(Mesh'VipSkinsMut.UrbanDT_Mesh');
    PRE.BodySkinName = string(Shader'VipSkinsMut.ct_urbanDT_sh');
    PRE.FaceSkinName = string(Shader'VipSkinsMut.ct_urban_glass_sh');
    PRE.Portrait = Texture'VipSkinsMut.ct_urbanDT_Portrait4';
    PRE.TextName = "Chet Skin";
    PRE.VoiceClassName = string(Class'KFVoicePackTwo');
    PRE.Sex = "M";
    PRE.Menu = "SP";
    PRE.Skeleton = string(Mesh'KFSoldiers.Soldier');
    PRE.Ragdoll = "British_Soldier1"; // Should be this only.
    return PRE;
    }

    defaultproperties
    {
    }


    Код из VipSkinsMut

    class VipSkinsMut extends Mutator Config(VipSkinsMut);


    #exec OBJ LOAD FILE="Urban_A.ukx" package="VipSkinsMut"
    #exec OBJ LOAD FILE="Urban_T.utx" package="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;
    var config float TimerPeriod;
    var float TickTime;
    //Создаём инишник и добавляем наши вип скины в массив AvailableChars. Если не добавим - не сможем получить к ним доступа
    function PostBeginPlay()
    {
    SaveConfig();
    TickTime=Level.TimeSeconds + 1.0;
    }
    function Tick(float dt)
    {
    if(TickTime > 0.1 && Level.TimeSeconds>TickTime)
    {
    if(AddAvailableVipSkins())
    Disable('Tick');
    }
    Super.Tick(dt);
    }


    //Здесь и добавляем. При этом следим, чтобы один и тот же скин не был добавлен больше 1 раза
    function bool AddAvailableVipSkins()
    {
    local int i,N;
    if(VipSkinsList.Length==0) return false;
    for(i=0;i<VipSkinsList.Length;i++)
    {
    N=Class'KFGameType'.Default.AvailableChars.Length;
    if(!SkinAlreadyAdded(VipSkinsList.Skin))
    Class'KFGameType'.Default.AvailableChars[N] = VipSkinsList.Skin;
    }
    return true;
    }
    //Тут вот и проверяем есть ли уже такой скин в массиве или нет
    function bool SkinAlreadyAdded(string Skin)
    {
    local int i;
    for(i=0;i<Class'KFGameType'.Default.AvailableChars.Length;i++)
    {
    if(Class'KFGameType'.Default.AvailableChars~=Skin)
    return true;
    }
    return false;
    }


    //Отлавливаем всех игроков при заходе на сервер (контроллеры ловим)
    function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
    {
    if(PlayerController(Other)!=None)
    {
    PendingPlayers[PendingPlayers.Length] = PlayerController(Other);
    SetTimer(TimerPeriod,false);
    }
    return true;
    }
    //Прошла 0.1 секунда и переменные контроллера инициализированы. Можем с ними работать
    //Собственно тут мы и пытаемся нацепить скин на игрока
    function Timer()
    {
    local int i;
    for(i=0;i<PendingPlayers.Length;i++)
    {
    if(PendingPlayers!=None)
    TryToPutSkinOn(PendingPlayers);
    }
    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.PlayerID~=hash)
    PC.SetPawnClass("",VipSkinsList.Skin);
    }
    }


    defaultproperties
    {
    VipSkinsList(0)=(PlayerName="Мистер Фостер",PlayerID="76561111111111111",Skin="VipSkinsMut.SPMRFoster")
    VipSkinsList(1)=(PlayerName="Миссис Фостер",PlayerID="76562222222222222",Skin="VipSkinsMut.SPMRsFoster")
    VipSkinsList(2)=(PlayerName="И опять Мистер Фостер",PlayerID="76563333333333333",Skin="VipSkinsMut.SPMRFoster")
    VipSkinsList(3)=(PlayerName="STaJIKeR",PlayerID="(ID потер)",Skin="VipSkinsMut.UrbanKFSkin")
    TimerPeriod=2.000000
    bAddToServerPackages=True
    GroupName="KF-VipSkins"
    FriendlyName="VipSkinsMut"
    Description="VipSkinsMut"
    bAlwaysRelevant=True
    }





     
  3. Flame

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

    Дак скин же - какой ноутифай? )

    Изучать чего вы тут понаписывали мне лень. Кидай ресурсы - укажу ошибку)
     
  4. STaJIKeR

    STaJIKeR Капо

  5. Flame

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

    Хм, странный ты)
    В UrbanKFSkinSpecies напрямую написано
    Код:
    	P.Skins[0] = Shader'Urban_T.ct_urbanDT_sh';
    	P.Skins[1] = Shader'Urban_T.ct_urban_glass_sh';
    
    И ты удивляешься почему зависимость от Urban_T :smile:

    В общем я тебе оформил так, как оформил себе бы (хотя я бы не стал в u пакет пихать)
    Сделал только ukx файл и его импортировал в u
    А ты сам решай так делать или импортировать и ukx и utx отдельно)

    Ссылка
     
  6. STaJIKeR

    STaJIKeR Капо

    Тьфу ты блин... забыл его поправить....

    Если я этот файл поправлю, будет ли он уже ссылаться на этот пак? VipSkinsMut

    Не получиться, уже проверил...

    -----------------------------------------

    Вопрос: Есть тема-гайд как упаковывать в ukx и utx отдельно?
     
  7. HATAXA

    HATAXA Солдат

    Непонятный вопрос. Перефразируй, пожалуйста. Что упаковывать в ukx и utx? И отдельно от чего?
    Ты имеешь в виду взять ukx и utx скина и положить их по папкам animations и textures, а не в .u-пакет? (мол какой код тогда нужен)
    Или что-то другое имеешь в виду?
     
  8. kok-s

    kok-s Консильери

    Я так понимаю отдельно от кода. Тогда сюды.
     
  9. STaJIKeR

    STaJIKeR Капо

    Вот Flame упаковал все файлы от скина в ukx файлик, как это возможно сделать?


    Flame вроде говорил, что нотифей нету в скине, думаю тема не та.
     
  10. Flame

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

    1. открыл Urban_T, Urban_A в кфеде
    2. переименовал все текстуры (пакеты заменил)
    Например, Urban_T.ct_urban_glass на Urban_A.ct_urban_glass
    3. открыл вкладку анимаций и там сохранил Urban_A
    Получился ukx содержащий текстуры
     
    WipeMaster, STaJIKeR и HATAXA нравится это.
  11. STaJIKeR

    STaJIKeR Капо

    Большое спасибо. Теперь все ясно и понятно как делать такой файл.
     
  12. denfil777

    denfil777 Капо

    Кстати у меня именно эта строчка была проблемной...