Пример #1
0
        public void Update()
        {
            if (!mIsInited)
            {
                return;
            }

            if (Input.GetKeyUp(KeyCode.Escape))
            {
                Debug.Log("KeyCode.Escape pressed");
#if UNITY_IPHONE
                IBridge bridge = DBOSManager.getDBOSManager().getBridge();
                if (bridge != null && bridge.isBridgeEnable())
                {
                    // 退出游戏的时候通知sdk
                    SDKControler.getSDKControler().sendRoleInfo2SDK((int)SDKControler.RoleEvent.EXIT_GAME);
                    bridge.checkBackBtnAction();
                }
#else
                var exit_game = true;
                if (xc.Const.Region == RegionType.KOREA)
                {
                    if (UIManager.Instance.TryCloseAllWindow())
                    {
                        exit_game = false;
                    }
                }
                if (exit_game)
                {
                    Debug.Log("KeyCode.Escape pressed exit_game = true");
                    IBridge bridge = DBOSManager.getDBOSManager().getBridge();
                    if (bridge != null && bridge.isBridgeEnable())
                    {
                        // 退出游戏的时候通知sdk
                        SDKControler.getSDKControler().sendRoleInfo2SDK((int)SDKControler.RoleEvent.EXIT_GAME);
                        bridge.checkBackBtnAction();
                    }
                }
#endif
            }

            m_GameMachine.Update();
            UIManager.Instance.Update();

            // 场景加载完成的检查
            SceneLoadingUpdate();

            TimerManager.GetInstance().Update();
            DecimalTimerManager.GetInstance().Update();
            EffectManager.GetInstance().Update();
            TargetPathManager.Instance.Update();
            TaskManager.Instance.Update();
            InstanceManager.Instance.Update();
            UINotice.Instance.Update();
            TeamManager.Instance.Update();
            MainmapManager.Instance.Update();
            TimelineManager.Instance.Update();
            ShadowManager.Instance.Update();
            GuideManager.Instance.Update();

    #if !UNITY_MOBILE_LOCAL
            VoiceManager.Instance.Update();
    #endif

            NetReconnect.Instance.Update();
            if (ChangeRoleManager.Instance.IsChangeRole)
            {
                ChangeRoleManager.Instance.Update();
            }

#if UNITY_EDITOR
            TestUnit.Instance.Update();
#endif
            Uranus.Runtime.UranusManager.Instance.Update();
            MarryFireworkManager.Instance.Update();

            NetworkManager.Instance.Update();
            if (((int)GameMode & (int)EGameMode.GM_Net) == (int)EGameMode.GM_Net)
            {
                NetClient.GetBaseClient().Update();
                if (NetClient.CrossToggle)
                {
                    NetClient.GetCrossClient().Update();
                }
            }

            // 协程更新
            // 最好在其他模块都更新好,再更新协程
            SafeCoroutine.CoroutineManager.Update(Time.deltaTime);
        }
Пример #2
0
        public static void HandleServerData(ushort protocol, byte[] data)
        {
            switch (protocol)
            {
            case NetMsg.MSG_NWAR_HIT:    // 受击
            {
                var nwar_hit = S2CPackBase.DeserializePack <S2CNwarHit>(data);

                var actor = ActorManager.Instance.GetPlayer(nwar_hit.hit.dst_id);
                if (actor != null)
                {
                    actor.BeattackedCtrl.HandleBeattacked(nwar_hit);
                }
            }
            break;

            case NetMsg.MSG_NWAR_THUNDER:    // 闪电链的伤害
            {
                var nwar_thunder = S2CPackBase.DeserializePack <S2CNwarThunder>(data);

                SkillAttackInstance attac_inst = EffectManager.GetInstance().GetAttackInstance(nwar_thunder.em_id);
                if (attac_inst != null)
                {
                    ThunderHitInfo hit_info = new ThunderHitInfo();
                    hit_info.ActorID         = nwar_thunder.act_id;
                    hit_info.EmitID          = nwar_thunder.em_id;    //伤害id
                    hit_info.SkillID         = nwar_thunder.skill_id; // 技能id
                    hit_info.HitPlayers      = nwar_thunder.uuids;    //依次打到的玩家列表
                    hit_info.SkillAttackInst = attac_inst;

                    if (hit_info.Init())
                    {
                        attac_inst.SetThunderHitInfo(hit_info);
                    }
                }
            }
            break;

            case NetMsg.MSG_NWAR_UNIT_DEAD:    //死亡
            {
                var death_msg = S2CPackBase.DeserializePack <S2CNwarUnitDead>(data);

                var actor = ActorManager.Instance.GetPlayer(death_msg.id);
                if (actor != null)
                {
                    actor.BeattackedCtrl.HandleKillActor(death_msg);
                }
            }
            break;

            case NetMsg.MSG_NWAR_BUFF_SUB_HP:    // buff减血
            {
                var   rep = S2CPackBase.DeserializePack <S2CNwarBuffSubHp>(data);
                Actor act = ActorManager.Instance.GetPlayer(rep.uuid);
                if (act != null && !act.IsDead())
                {
                    act.DoDamage(rep.act_id, (int)rep.hp, 0f, false, 0);
                }
            }
            break;

            case NetMsg.MSG_NWAR_BUFF_SUB_EN:    // buff减蓝
            {
            }
            break;

            case NetMsg.MSG_NWAR_BUFF_ADD_HP:    // buff加血
            {
                var   rep = S2CPackBase.DeserializePack <S2CNwarBuffAddHp>(data);
                Actor act = ActorManager.Instance.GetPlayer(rep.uuid);
                if (act != null && !act.IsDead() && act.IsLocalPlayer)
                {
                    act.ShowDamageEffect(FightEffectHelp.FightEffectType.AddHp, rep.act_id, (int)rep.hp);
                }
            }
            break;

            case NetMsg.MSG_NWAR_SKILL_SING:     //结束吟唱阶段
            {
                var   rep = S2CPackBase.DeserializePack <S2CNwarSkillSing>(data);
                Actor act = ActorManager.Instance.GetPlayer(rep.uuid);
                if (act != null && !act.IsDead() && act.IsLocalPlayer == false)
                {
                    Skill skill = act.GetCurSkill();
                    if (skill != null && skill.SkillID == rep.skill_id)
                    {
                        if (skill.CurAction != null)
                        {
                            skill.CurAction.FinishCastingReadyStage();
                        }
                    }
                }
            }
            break;

            case NetMsg.MSG_NWAR_BUFF_IMMUNE:     //免疫飘字
            {
                var   rep      = S2CPackBase.DeserializePack <S2CNwarBuffImmune>(data);
                Actor defender = ActorManager.Instance.GetActor(rep.uuid);
                if (defender != null)
                {
                    defender.ShowDamageEffect(FightEffectHelp.FightEffectType.Immune, rep.act_id, 0);
                }
            }
            break;

            case NetMsg.MSG_NWAR_BUFF_WORD:     //buff飘字效果
            {
                var    rep     = S2CPackBase.DeserializePack <S2CNwarBuffWord>(data);
                var    word_id = rep.word;
                string word    = DBFlyWord.GetFlyWordById(word_id);
                if (word != "")
                {
                    UINotice.Instance.ShowMessage(word);
                }
            }
            break;

            default:
                break;
            }
        }
Пример #3
0
        /// <summary>
        /// 初始化子弹的信息
        /// </summary>
        /// <param name="bulletObject"></param>
        /// <param name="src"></param>
        /// <param name="traceTarget"></param>
        /// <param name="effectId"></param>
        /// <param name="pos"></param>
        /// <param name="rotation"></param>
        /// <param name="dir"></param>
        /// <param name="hit_callback"></param>
        void InitBullet(GameObject bullet_object, ActorMono src, ActorMono trace_target, ulong effect_Id, Vector3 pos, Quaternion rotation, Vector3 dir, Action <SkillAttackInstance> hit_callback)
        {
            if (trace_target == null || trace_target.BindActor == null)
            {
                return;
            }

            pos.y += m_BulletInfo.OffsetY;
            pos   += dir * m_BulletInfo.OffsetX; // 前向移动

            //GameDebug.Log("EffectId : "+effect_Id);
            Transform bulletTrans = bullet_object.transform;

            // 设置子弹的位置和方向
            bulletTrans.position   = pos;
            bulletTrans.rotation   = rotation;
            bulletTrans.localScale = Vector3.one;

            if (m_BulletInfo.BulletType == DBBulletTrace.BulletTypes.BT_BIND)
            {
                bulletTrans.parent = src.BindActor.Trans;
            }

            var skill_attack_inst = new SkillAttackInstance();
            var skill_base        = bullet_object.AddComponent <SkillBaseComponent>();

            // 初始化
            skill_base.Init(skill_attack_inst);
            skill_attack_inst.Init(effect_Id, src.BindActor.UID, m_SkillInfo, 0, m_BulletInfo.FlyMaxTime, 1.0f, skill_base, hit_callback);

            // 子弹加到管理器
            EffectManager.GetInstance().AddSkillInstance(effect_Id, skill_attack_inst);

            if (m_BulletInfo.BulletType == DBBulletTrace.BulletTypes.BT_DIRECTION ||
                m_BulletInfo.BulletType == DBBulletTrace.BulletTypes.BT_BIND)
            {
                // 绑定追踪组件
                TraceTargetComponent trace_target_comp = bullet_object.AddComponent <TraceTargetComponent>();
                Vector3 v_dir = Quaternion.Euler(0.0f, 0.0f, 0.0f) * dir; // flyDir要转化到当前运行方向的坐标轴中
                bulletTrans.forward = v_dir;
                trace_target_comp.Init(src, trace_target, m_BulletInfo, skill_attack_inst);
                skill_base.AddMonoEnableOption(trace_target_comp, true, m_DelayTime);
            }
            else if (m_BulletInfo.BulletType == DBBulletTrace.BulletTypes.BT_LINK)
            {
                // 绑定追踪组件
                StretchComponent traceComp = bullet_object.AddComponent <StretchComponent>();
                traceComp.Init(src, trace_target, m_BulletInfo, skill_attack_inst);
                skill_base.AddMonoEnableOption(traceComp, true, m_DelayTime);
            }
            else if (m_BulletInfo.BulletType == DBBulletTrace.BulletTypes.BT_IMMEDIATE)
            {
                bulletTrans.parent        = trace_target.BindActor.Trans;
                bulletTrans.localPosition = Vector3.zero;
                bulletTrans.rotation      = Quaternion.identity;
                bulletTrans.localScale    = Vector3.one;
                bulletTrans.parent        = null;

                // 绑定追踪组件
                ImmediateHitComponent traceComp = bullet_object.AddComponent <ImmediateHitComponent>();
                traceComp.Init(src, trace_target, m_BulletInfo, skill_attack_inst);
                skill_base.AddMonoEnableOption(traceComp, true, m_DelayTime);
            }

            // 绑子弹音效
            if (m_BulletInfo.AttackSound != string.Empty)
            {
                var bind_sound = bullet_object.AddComponent <BindSoundComponent>();
                bind_sound.enabled = false;
                bind_sound.Init(m_BulletInfo.AttackSound, false);
                skill_base.AddMonoEnableOption(bind_sound, true, m_DelayTime);
            }
        }
Пример #4
0
        /// <summary>
        /// 响应受击消息
        /// </summary>
        /// <param name="beattackMsg"></param>
        void HandleBeattacked(S2CNwarHit beattackMsg)
        {
            if (!mIsRecvMsg)
            {
                return;
            }

            DBSkillSev.SkillInfoSev skillInfo = DBSkillSev.Instance.GetSkillInfo(beattackMsg.hit.skill_id);
            if (skillInfo == null)
            {
                GameDebug.LogError(string.Format("[HandleBeattacked]Skill ID:{0} info is null", beattackMsg.hit.skill_id));
                return;
            }

            Damage dmg    = new Damage();
            uint   src_id = beattackMsg.hit.act_id;
            Actor  actor  = ActorManager.Instance.GetPlayer(beattackMsg.hit.act_id);

            // 本地玩家受击,攻击者在角色列表中找不到的时候,需要给服务端发送look消息(目前AOI有bug)
            if (actor == null && mOwner != null && mOwner.IsLocalPlayer)
            {
                mMissUID.obj_idx = beattackMsg.hit.act_id;
                var cacheInfo = ActorManager.Instance.GetUnitCacheInfo(mMissUID);
                if (cacheInfo == null)
                {
                    var sendLookFix = new C2SNwarLookFix();
                    sendLookFix.uuid = beattackMsg.hit.act_id;
                    NetClient.GetCrossClient().SendData <C2SNwarLookFix>(NetMsg.MSG_NWAR_LOOK_FIX, sendLookFix);
                }
            }

            if (beattackMsg.hit.ori_type == GameConst.SKILL_ORI_PET)
            {
                if (actor != null)
                {
                    Player player = actor as Player;
                    if (player != null && player.CurrentPet != null)
                    {
                        src_id = player.CurrentPet.obj_idx;
                    }
                }
            }

            dmg.SrcID            = src_id;
            dmg.TargetID         = beattackMsg.hit.dst_id;
            dmg.SkillID          = beattackMsg.hit.skill_id;
            dmg.BeattackState    = Damage.EBeattackState.BS_BendBack;
            dmg.DamageEffectType = beattackMsg.hit.hit_type;
            dmg.DamageValue      = (int)beattackMsg.hit.dmg;
            dmg.DamageSpecs      = new Dictionary <uint, int>(beattackMsg.hit.specs.Count);
            foreach (var spec in beattackMsg.hit.specs)
            {
                dmg.DamageSpecs.Add(spec.k, (int)spec.v);
            }

            SkillAttackInstance inst = EffectManager.GetInstance().GetAttackInstance(beattackMsg.hit.em_id);

            if (inst != null)
            {
                inst.AddHurtInfo(dmg);
            }
            else
            {
                dmg.HitEffect();
            }

            LastAttackerId = beattackMsg.hit.act_id;
        }