Exemplo n.º 1
0
    private void OnMemberReborn(PTeamMemberInfo memberData)
    {
        if (memberData == null)
        {
            return;
        }

        foreach (var item in m_teamMembers)
        {
            if (item.roleId == memberData.roleId && item.health == 0)
            {
                item.Revive();
                if (item == player)
                {
                    QuitState(BattleStates.Watch);
                }
                break;
            }
        }

        SetAllMonsterInvincible(false);

        FightRecordManager.RecordLog <LogUlong>(l =>
        {
            l.tag   = (byte)TagType.Reborn;
            l.value = memberData.roleId;
        });
    }
Exemplo n.º 2
0
    private void OnMemberQuitEarlySettlement(FrameData d)
    {
        if (moduleTeam.members == null)
        {
            return;
        }

        var reason = (EnumTeamQuitState)d.parameters.GetValue <int>(0);

        if (reason != EnumTeamQuitState.EarlySettlement)
        {
            return;
        }

        var member = moduleTeam.members.GetValue <PTeamMemberInfo>(d.parameters.GetValue <int>(1));

        if (member == null)
        {
            return;
        }

        FightRecordManager.RecordLog <LogTeamQuit>(log =>
        {
            log.tag    = (byte)TagType.TeamQuit;
            log.roleId = member.roleId;
            log.reason = (sbyte)reason;
        });

        var c = m_teamMembers.Find(o => o.roleId == member.roleId);

        if (!c)
        {
            return;
        }

        //掉线,角色直接死亡
        bool alive = c && c.health > 0;

        if (reason == EnumTeamQuitState.EarlySettlement && !isEndingState && !m_isPVEFinish && !m_recvOverMsg && alive)
        {
            c?.Kill();
        }

        //切换队长
        if (member.teamLeader > 0)
        {
            foreach (var item in moduleTeam.members)
            {
                item.teamLeader = (byte)(item.roleId == member.roleId ? 0 : 1);
            }

            if (c)
            {
                var temp = m_normalMember;
                m_normalMember = c;
                m_teamLeader   = temp;
                Logger.LogInfo("OnMemberQuit... team leader change to {0}", m_teamLeader ? m_teamLeader.uiName : "null");
            }
        }
    }
Exemplo n.º 3
0
    protected override void OnCreatureDead(Event_ e)
    {
        FightRecordManager.RecordLog <LogOnCreatureDied>(log =>
        {
            log.tag         = (byte)TagType.OnCreatureDied;
            log.isTeamMode  = modulePVE.isTeamMode;
            log.onlineCount = moduleTeam.onlineMembers?.Count ?? 0;
        });

        if (!modulePVE.isTeamMode)
        {
            base.OnCreatureDead(e);
        }

        var c = e.sender as Creature;

        if (c.creatureCamp == CreatureCamp.PlayerCamp)
        {
            bool allDead = m_teamMembers.Count > 0;
            foreach (var item in m_teamMembers)
            {
                if (item && !item.isDead)
                {
                    allDead = false;
                }
            }

            //全部死亡之后,设置怪物为无敌状态
            if (allDead)
            {
                SetAllMonsterInvincible(true);
                QuitState(BattleStates.Watch);
            }
        }
    }
Exemplo n.º 4
0
    private void IncreaseFrame(int count)
    {
        if (count < 1)
        {
            return;
        }
        for (var i = 0; i < count; ++i)
        {
            m_ended = ++m_currentFrame == frameCount;

            FightRecordManager.RecordLog <LogStateFrame>(l =>
            {
                l.tag   = (byte)TagType.StateFrame;
                l.frame = (ushort)m_currentFrame;
            });

            stateMachine.SetParam(StateMachineParam.frame, m_currentFrame);
            stateMachine.SetParam(StateMachineParam.totalFrame, m_totalFrame++);

            if (ended)
            {
                if (!isLaydown && passive && !loop && info.layDownTime > 0)
                {
                    m_waitToLayDown = true;
                    stateMachine.SetParam(StateMachineParam.nextLayDownTime, info.layDownTime);
                }

                stateMachine.onStateEnded?.Invoke(this);

                break;
            }

            HandleFrameEvent();    // m_currentFrame starts with 1, Frame 0 already handled in Enter()
        }
    }
Exemplo n.º 5
0
 protected override void RecordLog()
 {
     FightRecordManager.RecordLog <LogEffectDestory>(log =>
     {
         log.tag         = (byte)TagType.LogEffectDestory;
         log.currentLife = m_time;
         log.life        = lifeTime;
     });
 }
Exemplo n.º 6
0
    public static int GetMonsterRoomIndex()
    {
        FightRecordManager.RecordLog <LogInt>(log =>
        {
            log.tag   = (byte)TagType.GetMonsterRoomIndex;
            log.value = m_originalRoomIndex;
        });

        return(m_originalRoomIndex++);
    }
Exemplo n.º 7
0
    protected override void OnDestroy()
    {
        FightRecordManager.RecordLog <LogUlong>(p =>
        {
            p.tag   = (byte)TagType.MonsterDie;
            p.value = Identify;
        });

        base.OnDestroy();
    }
Exemplo n.º 8
0
 protected override void RecordLog2()
 {
     FightRecordManager.RecordLog <LogEffectDestory2>(log =>
     {
         log.tag         = (byte)TagType.LogEffectDestory;
         log.buffCheck   = m_buffCheck;
         log.version     = sourceBuff.version;
         log.isDestroyed = sourceBuff.destroyed;
     });
 }
Exemplo n.º 9
0
    protected virtual void OnEnterState(int oldMask, BattleStates state)
    {
        if (state != BattleStates.Watch)
        {
            FightRecordManager.RecordLog <LogInt>(log =>
            {
                log.tag   = (byte)TagType.EnterState;
                log.value = (int)state;
            });
        }

        moduleBattle.parseInput = m_stateMask.BitMask(Fighting);

        switch (state)
        {
        case BattleStates.Ended:
        {
            if (modulePlayer.isLevelUp)
            {
                Window.SetWindowParam <Window_Settlement>(oldLv, oldPoint, oldFatigue, oldMaxFatigue);
            }
            Window.ShowAsync(endWindow, w => { if (w)
                                               {
                                                   w.animationSpeed = CombatConfig.sendWindowFadeInSpeed;
                                               }
                             });
            break;
        }

        case BattleStates.Winning:
        case BattleStates.Losing:
        {
            ObjectManager.Foreach <Creature>(c => { c.ClearBuffs(); c.moveState = 0; return(true); });     // Clear all buffs, reset movement state

            Window.Hide(combatWindow, true);
            Window.Hide(ultimateMaskWindow, true);

            AudioManager.PauseAll(AudioTypes.Music);
            m_victoryTime = (int)((CombatConfig.screenFadeInDuration + CombatConfig.screenFadeOutDuration) * 1000) - 500;
            if (state == BattleStates.Winning)
            {
                moduleGlobal.FadeIn(CombatConfig.screenFadeInAlpha, CombatConfig.screenFadeInDuration, false, YouAreLuckyBaby);
                AudioManager.PlayMusicMix(heavenMusic);
            }
            else
            {
                Camera_Combat.enableShotSystem = false;
                AudioManager.PlayMusicMix(hellMusic);
            }
            break;
        }

        default: break;
        }
    }
Exemplo n.º 10
0
    private void UpdateAnimMotion()
    {
        var idx = (int)m_motionFrame.x + m_currentFrame;
        var max = (int)m_motionFrame.y;

        if (!m_motion || m_falling || idx < 1 || idx > max && m_motionIndex >= max)
        {
            m_inMotion = false;
            return;
        }

        m_inMotion = true;

        if (idx > max)
        {
            idx = max;
        }

        m_motionIndex = idx;

        var next = m_motion.points[m_motionIndex];
        var prev = m_motion.points[m_motionIndex - 1];
        var prog = idx == max ? 1.0 : (m_time % 33) / 33.0;
        var tar  = (Vector3_.Lerp(prev, next, prog) - m_motion.points[0]) * 0.01;

        var c = stateMachine.creature;

        currentMotionPos = new Vector3_(!c.isForward ? -tar.z : tar.z, tar.y, -tar.x) + c.motionOrigin;

        if (currentMotionPos.y < 0)
        {
            FightRecordManager.RecordLog <LogVector3>(l =>
            {
                l.tag = (byte)TagType.motionOrigin;
                l.pos = new double[] { tar.x, tar.y, tar.z };
            });

            FightRecordManager.RecordLog <LogVector3>(l =>
            {
                l.tag = (byte)TagType.motionOrigin;
                l.pos = new double[] { c.motionOrigin.x, c.motionOrigin.y, c.motionOrigin.z };
            });

            FightRecordManager.RecordLog <LogVector3>(l =>
            {
                l.tag    = (byte)TagType.currentMotionPos;
                l.pos    = new double[3];
                l.pos[0] = currentMotionPos.x;
                l.pos[1] = currentMotionPos.y;
                l.pos[2] = currentMotionPos.z;
            });
            currentMotionPos.y = 0;
        }
    }
Exemplo n.º 11
0
    protected override void OnDestroy()
    {
        base.OnDestroy();
        DispatchEvent(FOLLOW_EFFECT_DESTORY, Event_.Pop(conditionValue));

        FightRecordManager.RecordLog <LogEmpty>(log =>
        {
            log.tag = (byte)TagType.FollowEffectDestory;
        });

#if AI_LOG
        Module_AI.LogBattleMsg(source, "FollowTargetEffect[logId: {0}] destoryed with pos {0}", logId, position_);
#endif
    }
Exemplo n.º 12
0
    public override void OnUpdate(int diff)
    {
        if (!enableUpdate)
        {
            return;
        }
        base.OnUpdate(diff);

        if (firstStep)
        {
            var direction = randomPosition - position_;
            direction.Normalize();
            var p = position_ + direction * (velocity + acceleration * m_time * 0.001) * diff * 0.001;
            if (p.y < 0)
            {
                p.y = 0;
            }
            position = position_ = p;;
            if (Vector3_.Distance(position_, randomPosition) < 0.2 || Vector3_.Dot(startPos - randomPosition, position_ - randomPosition) <= 0)
            {
                enableUpdate = false;
                firstStep    = false;
            }
            return;
        }

        var targetPos = (Vector3_)target.LogicPosition + offset;

        position = position_ = motion.Evaluate(diff * 0.001);
        var d = Vector3_.Distance(position_, targetPos);
        var a = Vector3_.Dot(startPos - targetPos, position_ - targetPos);

        FightRecordManager.RecordLog <LogEffectPos>(log =>
        {
            log.tag      = (byte)TagType.EffectPos;
            log.pos      = new double[3];
            log.pos[0]   = position_.x;
            log.pos[1]   = position_.y;
            log.pos[2]   = position_.z;
            log.distance = d;
            log.angle    = a;
        });


        if (d < 0.2 || a <= 0)
        {
            Destroy();
        }
    }
Exemplo n.º 13
0
    /// <summary>
    /// 下一个随机范围  介于 0 - 1 的一个随机浮点数
    /// </summary>
    /// <returns></returns>
    private double NextRange()
    {
        ++m_count;

        UInt64 x = 0xfffffffffffffful; x += 1;

        m_nSeed *= 134775813;
        m_nSeed += 1;
        m_nSeed  = m_nSeed % x;
        var result = m_nSeed / (double)0xffffffffffffff;

        FightRecordManager.RecordLog <LogDouble>(log =>
        {
            log.tag   = (byte)TagType.Random;
            log.value = result;
        });

        return(result);
    }
Exemplo n.º 14
0
    void _Packet(ScTeamStartLoading p)
    {
        EventManager.RemoveEventListener(Events.SCENE_LOAD_PROGRESS, OnLoadingProgress);
        EventManager.AddEventListener(Events.SCENE_LOAD_PROGRESS, OnLoadingProgress);

        Logger.LogInfo("Team room start loading! Stage: [{0}]", p.stage);
        if (p.members.Length == 1)
        {
            FightRecordManager.EndRecord(false, false);
        }
        FightRecordManager.Set(p);

        loading        = true;
        m_loadingType  = EnumPVELoadingType.Initialize;
        m_progress     = 0;
        m_lastProgress = 0;

        mode      = (TeamMode)p.type;
        stage     = p.stage;
        timeLimit = p.timeLimit;
        allowQuit = p.allowQuit;

        p.members.CopyTo(ref m_members);
        onlineMembers.Clear();
        onlineMembers.AddRange(m_members);

        FightRecordManager.RecordLog <LogInt>(log =>
        {
            log.tag   = (byte)TagType.onlineMembersCount;
            log.value = onlineMembers?.Count ?? 0;
        });

        m_playerIndex = m_members.FindIndex(mi => mi.roleId == modulePlayer.id_);

        Logger.LogDetail("Player roomIndex: {0}", m_playerIndex);

        DispatchModuleEvent(EventLoadingStart);

        modulePVE.StartTeamLevel(p);
        loading = true;
    }
Exemplo n.º 15
0
    public void OnHit(CreatureHitCollider hit)
    {
        FightRecordManager.RecordLog <LogEmpty>(log =>
        {
            log.tag = (byte)TagType.FlyEffectOnHit;
        });

        if (destroyed || !hit && m_groundHited)
        {
            return;
        }

        if (!hit)
        {
            m_groundHited = true;
        }

        if (!effectInfo.hitEffect.isEmpty)
        {
            Create(effectInfo.hitEffect, source, startForward ? 1 : -1, inverted, hitEffect, position_, eular_, m_root.eulerAngles);
        }

        if (effectInfo.removeOnHit == 1 || effectInfo.removeOnHit == 2 && !hit)
        {
            FightRecordManager.RecordLog <LogEffectDestoryOnHit>(l =>
            {
                l.tag         = (byte)TagType.FlyEffectOnHit;
                l.name        = name;
                l.removeOnHit = effectInfo.removeOnHit;
            });

            Destroy();
        }

#if AI_LOG
        Module_AI.LogBattleMsg(source, "flying effect[logId: {0}] OnHit,hit creature is {1} with effect pos = {2}, collider pos = {3} ", logId, hit == null ? "null" : hit.creature ? hit.creature.uiName : "null", position_, m_collider == null ? "null" : m_collider.position.ToString());
#endif
    }
Exemplo n.º 16
0
    private void CheckCollision(Collider_ trigger, Collider_ receiver)
    {
        var mask    = trigger.targetMask;
        var touched = trigger.Touched(receiver);
        var test    = (!trigger.ignoreSameGroup || trigger.transform.parent != receiver.transform.parent) && mask.BitMask(receiver.layer);

        if (test)
        {
            test = trigger.isActiveAndEnabled && receiver.isActiveAndEnabled && trigger.CollisionTest(receiver);
        }

        if (touched != test)
        {
            FightRecordManager.RecordLog <LogCheckCollider>(l =>
            {
                l.tag             = (byte)TagType.LogCheckCollider;
                l.test            = test;
                l.ignoreSameGroup = trigger.ignoreSameGroup;
                l.mask            = mask;
                l.layer           = receiver.layer;
            });
        }
        UpdateTouched(trigger, receiver, touched, test);
    }
Exemplo n.º 17
0
    public void LogColliders()
    {
        FightRecordManager.RecordLog <LogInt>(log =>
        {
            log.tag   = (byte)TagType.LogColliders;
            log.value = m_colliders.Count;
        });

        foreach (var c in m_colliders)
        {
            FightRecordManager.RecordLog <LogString>(l =>
            {
                l.tag = (byte)TagType.LogColliders;
                if (c && c.isActive)
                {
                    l.value = Util.GetHierarchy(c.transform);
                }
                else
                {
                    l.value = "collider disable";
                }
            });
        }
    }
Exemplo n.º 18
0
    public static FlyingEffect Create(StateMachineInfo.FlyingEffect effInfo, Creature source, int overrideForward, bool invert, StateMachineInfo.Effect hitEffect, Vector3_ root, Vector3_ rootEular, Vector3 rootRot)
    {
        var fe = ConfigManager.Get <FlyingEffectInfo>(effInfo.effect);

        if (!fe)
        {
            Logger.LogWarning("FlyingEffect::Create: Could not create flying effect [{0}], could not find effect config from config_flyingEffectInfos", effInfo.effect);
            return(null);
        }

        FightRecordManager.RecordLog <LogString>(log =>
        {
            log.tag   = (byte)TagType.CreateFlyEffect;
            log.value = fe.effect;
        });

        var off = effInfo.offset * 0.1;

        if (invert)
        {
            off.x = -off.x;
            off.z = -off.z;
        }

        var direction = effInfo.direction;
        var rotation  = effInfo.rotation;

        direction.Set(direction.z, direction.y, -direction.x);
        rotation.Set(-rotation.x, rotation.y, rotation.z);

        var eular = rootEular + direction;

        eular.z = Mathd.ClampAngle(eular.z);

        var z   = Mathd.AngToRad(eular.z);
        var dir = new Vector3_(Mathd.Cos(z), -Mathd.Sin(z));
        var pos = root + off;
        var eff = Create <FlyingEffect>(fe.effect, fe.effect, pos, rotation);

        eff.enableUpdate = true;

        if (invert)
        {
            dir.x = -dir.x;
        }

        eff.sourceBuff = null;
        eff.follow     = false;
        eff.m_inherit  = false;
        eff.m_time     = 0;

        eff.m_originEular = eff.localEulerAngles;
        eff.lockForward   = Vector3.zero;
        eff.startForward  = overrideForward == 0 ? !source || source.isForward : overrideForward > 0;

        eff.m_curSectionIdx     = 0;
        eff.m_curActivedSection = -1;
        eff.m_curSubEffectIdx   = 0;
        eff.m_curSoundEffectIdx = 0;
        eff.m_curShakeIdx       = 0;
        eff.m_groundHited       = false;
        eff.m_renderTime        = 0;

        eff.effectInfo   = fe;
        eff.source       = source;
        eff.position_    = pos;
        eff.velocity     = effInfo.velocity * 0.0001;
        eff.acceleration = effInfo.acceleration * 0.0001;
        eff.lifeTime     = fe.lifeTime;
        eff.hitEffect    = hitEffect;

        eff.CreateCollider(rootRot, dir, eular);

        eff.m_inverted = invert;
        eff.UpdateInvert();

#if AI_LOG
        eff.logId = MonsterCreature.GetMonsterRoomIndex();
        Module_AI.LogBattleMsg(source, "create a flying effect[logId:{0}] with pos {1}, lifeTime = {2}  startForward is {3}", eff.logId, eff.position_, eff.lifeTime, eff.startForward);
#endif
        return(eff);
    }
Exemplo n.º 19
0
    private bool TranslateTo(StateMachineState state, int type = 0, bool checkCooldown = false, float blendTime = -1)
    {
        if (checkCooldown && state.coolingDown)
        {
            return(false);
        }

        #region Debug log

        #if (DEVELOPMENT_BUILD || UNITY_EDITOR) && DETAIL_BATTLE_LOG
        if (type != 0 && creature.isCombat)
        {
            var msg = Util.Format("[{2}:{3}-{4}], [{5}:{6}] Enter state {0} from {1}, type:{7}", state.name, currentState.name, Level.levelTime, creature.frameTime, creature.frameCount, creature.id, creature.name, type);
            if (type > 0)
            {
                Logger.LogChat(msg);
            }
            else
            {
                Logger.LogWarning(msg);
            }
        }
        #endif

        #if AI_LOG
        if (type != 0 && creature.isCombat)
        {
            Module_AI.LogBattleMsg(creature, true, "[Enter state {0} from {1}, type:{2}", state.name, currentState.name, type);
        }
        #endif
        #endregion

        FightRecordManager.RecordLog <LogStateTranslate>(l =>
        {
            l.tag          = (byte)TagType.StateTranslate;
            l.form         = currentState.name;
            l.roleId       = creature.Identify;
            l.to           = state.name;
            l.currentFrame = (ushort)currentState.currentFrame;
            l.frameCount   = (ushort)currentState.frameCount;
        }, true);

        var old = currentState;
        old.Quit();

        onQuitState?.Invoke(old, state, blendTime);

        currentState = state;
        currentState.Enter();

        onEnterState?.Invoke(old, currentState, blendTime);

        if (m_nextPendingTime > 0)
        {
            Pending(m_nextPendingTime, false, m_preventShake);
            m_nextPendingTime = 0;
        }
        else
        {
            pending = false;
        }

        return(true);
    }
Exemplo n.º 20
0
    public override void OnUpdate(int diff)
    {
        base.OnUpdate(diff);

        FightRecordManager.RecordLog <LogEffectUpdate>(log =>
        {
            log.tag         = (byte)TagType.EffectOnUpdate;
            log.name        = effectInfo?.effect;
            log.life        = lifeTime;
            log.currentLife = m_time;
            log.freez       = m_freez;
            log.source      = source.Identify;
            log.isDestroyed = destroyed;
        });

        if (destroyed)
        {
            return;
        }

        var tp = position_ + direction * (velocity + acceleration * m_time) * diff;

        if (tp.y < 0)
        {
            tp.y = 0;
        }

        if (m_collider.isActiveAndEnabled && (m_collider.radius > 0 || m_collider.boxSize != Vector2_.zero))
        {
            PhysicsManager.Foreach <CreatureHitCollider>(collider =>
            {
                var target = collider.creature;
                if (!target || source.SameCampWith(target) || collider.Touched(m_collider) || m_collider.AttackedCount(collider) > 0)
                {
                    return(true);                                                                                                                  // ignore touched, attacked and same team targets
                }
                var hit   = (Vector2_)position_;
                var check = m_collider.radius > 0 && PhysicsManager.Cross(m_collider.sphere, collider.box, (Vector2_)tp + m_collider.sphereOffset, ref hit) ? 1 :
                            m_collider.boxSize != Vector2_.zero && PhysicsManager.Cross(m_collider.box, collider.box, (Vector2_)tp + m_collider.offset, ref hit) ? 2 : 0;

                if (check == 0)
                {
                    return(true);
                }

                hit -= check == 1 ? m_collider.sphereOffset : m_collider.offset;

                var np = (Vector3_)hit;
                np.z   = position_.z;

                position_           = np;
                m_root.position     = np;
                m_collider.position = np;

                collider.BeginCollision(m_collider);
                m_collider.CollisionBegin(collider);

                return(this);
            }, Creature.COLLIDER_LAYER_HIT.ToMask());

            if (!this)
            {
                return;
            }
        }

        position_           = tp;
        m_root.position     = tp;
        m_collider.position = tp;

        UpdateSubEffects();
        UpdateSoundEffects();
        UpdateShakeEffects();
        UpdateAttackBox();

        if (!m_groundHited && m_lastY > 0 && tp.y <= 0)
        {
            OnHit(null);
        }
        m_lastY = tp.y;
    }