Вопросы к кодерам и мододелам

Тема в разделе "Игровое редактирование", создана пользователем Фрэгл, 20 ноя 2011.

  1. demnikzak

    demnikzak Бандит

    Ребят в общем тема такова, мой друг хочет заняться кодингом в кф, он учится на программиста так что от части языки он знает а именно C, С#, C++, С++ в основном ) так что больше вопрос ко флейму
    Можешь посоветовать статейки и всё такое что бы более понять как пишется код для кф
    В идеале если
    1 С чего начать если в обще С++ знаешь
    2 С более глубоким смыслом кода
    Я глупы и не могу сформулировать нормально мысль, так что буду ждать ответа, надеюсь он будет
     
  2. Flame

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

    Не знаю статей кроме тех, что на этом форуме)

    В качестве справочных материалов можно использовать эти сайты
    https://wiki.beyondunreal.com/
    http://unrealscript.narod.ru/tutorials/tutorials.html
    Ещё там парочка была - не помню сходу

    1. Берётся любой простой мутатор и правится под себя
    2. Берётся SP и правится под себя
    По мне так это основное обучение - на практике

    Особое внимание уделить репликации (есть статьи на сайтах приведённых выше) и вообще взаимодействию клиента и сервера
    По этой теме статей достаточно
     
    demnikzak нравится это.
  3. demnikzak

    demnikzak Бандит

    Спасибки флейм, это то что мне нужно
     
  4. demnikzak

    demnikzak Бандит

    Так же есть вопросик один
    Я хз почему так происходит
    В общем я сделал новое требования для кача перка убийство мобов, всё сделал хорошо всё работает кроме одного нюанса
    Я прописал код вот так в ДамТайп пушки

    static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
    {
    if( Killed.IsA('ZombieGorefast') )
    ServerStStats(KFStatsAndAchievements).AddFasterKill();
    if( Killed.IsA('WTFZombiesGoreallyfast') )
    ServerStStats(KFStatsAndAchievements).AddFasterKill();
    }


    И теперь когда убиваешь простого гарика всё в порядке качает 1 моба
    Но вот когда убиваешь гарика с ВТФ мода почему та в стату записывает как два моба вместо одного
    Что я делаю не так ?
     
  5. STaJIKeR

    STaJIKeR Капо

    WTF моб наследует обычного моба, поэтому и происходит.
    То есть, он сначала считает WTF класс, потом уже стандартный.
     
  6. CFH

    CFH Новенький

    Всем привет! Есть необходимость перемещения цилиндра коллизий в зависимости от местоположения проигрываемой анимации, т.е. имеется нек-я анимация движения павна, не суть важно какая, главное, что начальная и конечная состояния анимации разнесены в пространстве на значительное расстояние. После окончания воспроизведения анимации меш павна возвращается в исходную точку, где он находился в момент начала воспроизведения анимации. Location игрока не меняется. Мб кто-нибудь сталкивался с подобным, как это можно исправить?
    Код:
    class MyHumanPawn extends KFHumanPawn;
    
    var name AnimsCustom[4];
    var bool bAnimPrev, bAnimTrigger;
    var float AnimTime;
    var vector BoneLocationDelta, BoneLocation;
    
    replication
    {
        reliable if( Role == ROLE_Authority )
            bAnimTrigger;
        reliable if( Role < ROLE_Authority )
            AnimTrigger;
    }
    
    simulated function Tick(float DeltaTime)
    {
        Super.Tick(DeltaTime);
    
        //if( Level.NetMode != NM_DedicatedServer )
        //{
            if( bAnimPrev != bAnimTrigger)
            {
                // Запускаем проигрывание нашей анимации
                if( bAnimTrigger )
                {
                    AnimTime = Level.TimeSeconds + GetAnimDuration(AnimsCustom[NewAnim]);
                    bWaitForAnim = true;
                    bPhysicsAnimUpdate = false;
                    bDoTorsoTwist = false;
                    AnimBlendParams(1, 0.0, 0.0);
                    PlayAnim(AnimAction, 1.0, 0.0, 0);
                    BoneLocation = GetBoneCoords(RootBone).Origin;
                }
                // Останавливаем проигрывание нашей анимации
                else
                {
                    bWaitForAnim = false;
                    bPhysicsAnimUpdate = true;
                    bDoTorsoTwist = true;
                    StopAnimating();
                    PlayAnim(IdleRestAnim, 1.0, 0.1, 0);
                }
    
                bAnimPrev = bAnimTrigger;
            }
    
            // Отслеживанием перемещение корневой кости
            if( bAnimTrigger )
            {
                BoneLocationDelta = GetBoneCoords(RootBone).Origin - BoneLocation;
                BoneLocation = GetBoneCoords(RootBone).Origin;
            }
        //}
    
        // Пытаемся двигать цилиндр синхронно проигрываемой в данный момент анимации
        if( Level.NetMode == NM_DedicatedServer && AnimTime > 0.0 && Level.TimeSeconds < AnimTime )
        {
            MoveSmooth(BoneLocationDelta);
            //SetLocation(Location + BoneLocationDelta);
        }
    
        // Сбрасываем значения после окончания проигрывания анимации
        if( Level.NetMode == NM_DedicatedServer && AnimTime > 0.0 && Level.TimeSeconds >= AnimTime )
        {
            AnimTime = 0.0;
            bAnimTrigger = false;      
          
            AnimAction = '';
        }
    }
    
    // Запуск клиентом анимации павна
    function AnimTrigger(byte NewAnim)
    {
        if( bAnimTrigger )
            return;
    
        AnimAction = AnimsCustom[NewAnim];
        bAnimTrigger = true;
    }
    
    // Аттачим набор анимаций к мешу игрока
    simulated function Setup(xUtil.PlayerRecord Rec, optional bool bLoadNow)
    {
        LinkSkelAnim(MeshAnimation'Custom_Anim');
        Super.Setup(Rec, bLoadNow);
    }
    
    // Сами анимации
    defaultproperties
    {
        AnimsCustom(0)=YOBA_1
        AnimsCustom(1)=YOBA_2
        AnimsCustom(2)=YOBA_3
        AnimsCustom(3)=YOBA_4
    }
     
    Последнее редактирование: 31 окт 2019