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); }
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; } }
/// <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); } }
/// <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; }