コード例 #1
0
    public static float GetSkillReleaseDistance(SkillRecord data)
    {
        //SkillTargetType type = (SkillTargetType)data.TargetType;
        var type = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType);

        switch (type)
        {
        case SkillTargetType.SELF:
            return(0);

        case SkillTargetType.SINGLE:
        {
            return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam1));
            //return data.TargetParam[0];
        }

        case SkillTargetType.CIRCLE:
            //return data.TargetParam[0];
        {
            return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam1));
        }

        case SkillTargetType.SECTOR:
            //return data.TargetParam[0];
        {
            return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam1));
        }

        case SkillTargetType.RECT:
            //return data.TargetParam[1];
        {
            return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam2));
        }

        case SkillTargetType.TARGET_CIRCLE:
            //return data.TargetParam[1];
        {
            return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam2));
        }

        case SkillTargetType.TARGET_RECT:
            //return data.TargetParam[2];
        {
            return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam3));
        }

        case SkillTargetType.TARGET_SECTOR:
            //return data.TargetParam[2];
        {
            return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam3));
        }

        default:
        {
            Logger.Warn("(SkillTargetType)[{0}] not Find ", type);
            return(0);
        }
        }
    }
コード例 #2
0
    public static void RefreshSkillData(this SkillItemDataModel item)
    {
        var tbSkill = Table.GetSkill(item.SkillId);

        item.ChargeLayerTotal  = ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.Layer);
        item.ChargeLayer       = item.ChargeLayerTotal;
        item.CoolDownTimeTotal = ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.Cd) / 1000.0f;
        item.ControlType       = ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.ControlType);
        item.MaxTargetCount    = ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.TargetCount);
    }
コード例 #3
0
ファイル: PlayerAutoCombat.cs プロジェクト: pikaqiufk/Client
    private void OnSkillReleaseNetBack(IEvent ievent)
    {
        var e       = ievent as SkillReleaseNetBack;
        var skillId = e.SkillId;
        var tbSkill = Table.GetSkill(skillId);

        if (e.IsOk)
        {
            mLastSkillTime = Time.time;
            var skillCd = tbSkill.NoMove;
            mYindaoCharacter = null;
            if (tbSkill.CastType == 2)
            {
                if (tbSkill.CastParam[0] > skillCd)
                {
                    skillCd = tbSkill.CastParam[0];
                    //只有极光才有的效果
                    var targetType =
                        (SkillTargetType)ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.TargetType);
                    //if (tbSkill.TargetType == 4)
                    if (targetType == SkillTargetType.RECT)
                    {
                        if (GameControl.Instance != null && GameControl.Instance.TargetObj != null)
                        {
                            mYindaoCharacter = GameControl.Instance.TargetObj;
                        }
                    }
                }
            }
            mCommondCdTime = Game.Instance.ServerTime.AddMilliseconds(tbSkill.CommonCd);
            SetNextLoopTime(Game.Instance.ServerTime.AddMilliseconds(skillCd));
        }
        else
        {
            SetNextLoopTime(Game.Instance.ServerTime.AddMilliseconds(100));
        }
    }
コード例 #4
0
ファイル: GameLogic.cs プロジェクト: pikaqiufk/Client
    public IEnumerator EnterGameCoroutine()
    {
        //加载场景Prefab
        if (!string.IsNullOrEmpty(ScenePrefab))
        {
            var ret = ResourceManager.PrepareResourceWithHolder <GameObject>(ScenePrefab, true, false);
            yield return(ret.Wait());

            try
            {
                var sceneRoot = Instantiate(ret.Resource) as GameObject;
                if (null != sceneRoot)
                {
                    sceneRoot.transform.parent = transform;

                    // 优化场景特效
                    OptList <ParticleSystem> .List.Clear();

                    sceneRoot.transform.GetComponentsInChildren(true, OptList <ParticleSystem> .List);
                    foreach (var particle in OptList <ParticleSystem> .List)
                    {
                        if (!particle.CompareTag("NoPauseEffect"))
                        {
                            if (particle.gameObject.GetComponent <ParticleOptimizer>() == null)
                            {
                                particle.gameObject.AddComponent <ParticleOptimizer>();
                            }
                        }
                    }

                    Scene = sceneRoot.GetComponent <Scene>();
                    if (null != Scene)
                    {
                        Scene.InitPortal();
                    }
                    else
                    {
                        Logger.Error("cant find Scene in ScenePerfab!!!");
                    }
                }



                SoundManager.Instance.SetAreaSoundMute(SoundManager.Instance.EnableBGM);
//                 var sceneCacheKey = string.Format("{0}.unity3d", ScenePrefab);
//                 ResourceManager.Instance.RemoveFromCache(sceneCacheKey);
            }
            catch (Exception e)
            {
                Logger.Error("step 0------------------{0}\n{1}", e.Message, e.StackTrace);
            }
        }


        if (ObjManager.Instance == null)
        {
            Logger.Log2Bugly("EnterGameCoroutine ObjManager.Instance = null ");
            yield break;
        }

        //清除ObjManager
        ObjManager.Instance.Reset();


        if (PlayerDataManager.Instance == null || PlayerDataManager.Instance.mInitBaseAttr == null)
        {
            Logger.Log2Bugly("EnterGameCoroutine PlayerDataManager.Instance = null ");
            yield break;
        }
        var data = PlayerDataManager.Instance.mInitBaseAttr;

        var attr = new InitMyPlayerData();

        //初始化造主角的数据
        try
        {
            attr.ObjId      = data.CharacterId;
            attr.DataId     = data.RoleId;
            attr.Name       = data.Name;
            attr.Camp       = data.Camp;
            attr.IsDead     = data.IsDead == 1;
            attr.HpMax      = data.HpMax;
            attr.HpNow      = data.HpNow;
            attr.MpMax      = data.MpMax;
            attr.MpNow      = data.MpMow;
            attr.X          = data.X;
            attr.Y          = GetTerrainHeight(data.X, data.Y);
            attr.Z          = data.Y;
            attr.MoveSpeed  = data.MoveSpeed;
            attr.AreaState  = (eAreaState)data.AreaState;
            attr.EquipModel = data.EquipsModel;
            attr.ModelId    = data.ModelId;
            {
                var __list1      = data.Buff;
                var __listCount1 = __list1.Count;
                for (var __i1 = 0; __i1 < __listCount1; ++__i1)
                {
                    var buff = __list1[__i1];
                    {
                        attr.Buff.Add(buff.BuffId, buff.BuffTypeId);
                    }
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 1------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //造主角
        ObjMyPlayer player = null;

        try
        {
            player = ObjManager.Instance.CreateMainPlayer(attr);
            if (player == null)
            {
                Logger.Log2Bugly("EnterGameCoroutine player = null ");
                yield break;
            }
            player.AdjustHeightPosition();
        }
        catch (Exception e)
        {
            Logger.Error("step 2------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //设置buff
        try
        {
            EventDispatcher.Instance.DispatchEvent(new UIEvent_ClearBuffList());

            var count = data.Buff.Count;
            for (var i = 0; i < count; i++)
            {
                var buffResult = data.Buff[i];
                EventDispatcher.Instance.DispatchEvent(new UIEvent_SyncBuffCell(buffResult));
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 3------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //预加载技能资源
        try
        {
            ObjManager.Instance.PrepareMainPlayerSkillResources();
        }
        catch (Exception e)
        {
            Logger.Error("step 4------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //给主摄像机设置跟随,设置声音
        try
        {
            if (MainCamera == null)
            {
                Logger.Log2Bugly("EnterGameCoroutine MainCamera = null ");
                yield break;
            }
            MainCamera.GetComponent <CameraController>().FollowObj = player.gameObject;
            {
//audio listener
                var audioListerner = MainCamera.gameObject.GetComponent <AudioListener>();
                if (null != audioListerner)
                {
                    DestroyObject(audioListerner);
                }
                var playerAudio = player.gameObject.GetComponent <AudioListener>();
                if (null == playerAudio)
                {
                    player.gameObject.AddComponent <AudioListener>();
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 5------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //初始化UI
        Coroutine co = null;

        try
        {
            co = StartCoroutine(InitUI());
            if (null != LoadingLogic.Instance)
            {
                LoadingLogic.Instance.SetLoadingProgress(0.95f);
            }
            else
            {
                Logger.Error("LoadingLogic.Instance==null");
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 6------------------{0}\n{1}", e.Message, e.StackTrace);
        }
        if (null != co)
        {
            yield return(co);
        }


        //控制模块
        try
        {
            InputManager.Instance.OnMoveDestination = mControl.MoveTo;
            InputManager.Instance.SelectTarget      = mControl.SelectTarget;

            if (UIManager.Instance.MainUIFrame != null)
            {
                var main     = UIManager.Instance.MainUIFrame.GetComponent <MainScreenFrame>();
                var joystick = main.GetComponentInChildren <JoyStickLogic>();
                if (joystick != null)
                {
                    joystick.OnMoveDirection = mControl.MoveDirection;
                }
                SkillBar = main.SkillBar.GetComponent <BattleSkillRootFrame>();
                if (SkillBar != null)
                {
                    SkillBar.OnClickEvent = mControl.OnClickEvent;
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 7------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //UI
        try
        {
            EventDispatcher.Instance.DispatchEvent(new Enter_Scene_Event(Scene.SceneTypeId));
            EventDispatcher.Instance.DispatchEvent(new RefresSceneMap(Scene.SceneTypeId));
            UIManager.Instance.OpenDefaultFrame();

            player.CreateNameBoard();

            if (PlayerDataManager.Instance != null)
            {
//根据场景不一样,自动战斗的优先级也不一样
                PlayerDataManager.Instance.RefrehEquipPriority();
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 8------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //向服务器请求场景参数
        yield return(StartCoroutine(AskSceneExtData()));

        //向服务器发送切换场景结束的包
        if (SceneManager.Instance != null)
        {
            yield return(StartCoroutine(SceneManager.Instance.ChangeSceneOverCoroutine()));
        }
        else
        {
            Logger.Log2Bugly("EnterGameCoroutine SceneManager.Instance = null ");
        }

        //客户端切换场景结束事件
        try
        {
            SceneEffect.OnEnterScecne();
            LoadingLogic.Instance.SetLoadingProgress(1.0f);
            SceneManager.Instance.OnLoadSceneOver();
            EventDispatcher.Instance.DispatchEvent(new LoadSceneOverEvent());
        }
        catch (Exception e)
        {
            Logger.Error("step 9------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        yield return(new WaitForSeconds(0.1f));

        //播放CG
        try
        {
            Action brightnessStartWork = () =>
            {
                LoginWindow.State = LoginWindow.LoginState.InGaming;
                var bc = Game.Instance.GetComponent <BrightnessController>();
                if (bc)
                {
                    bc.ResetTimer();
                }
            };

            if (1 == PlayFirstEnterGameCG)
            {
#if UNITY_EDITOR
                var skip = true;
#else
                bool skip = true;
#endif
                if (0 == PlayerDataManager.Instance.GetRoleId() ||
                    1 == PlayerDataManager.Instance.GetRoleId() ||
                    2 == PlayerDataManager.Instance.GetRoleId())
                {
                    if (int.Parse(Table.GetClientConfig(1205).Value) == 1)
                    {
                        PlayCG.Instance.PlayCGFile("Video/HeroBorn.txt", brightnessStartWork, skip);
                        PlatformHelper.UMEvent("PlayCG", "play", "Video/HeroBorn.txt");
                    }
                }

                EventDispatcher.Instance.DispatchEvent(new FirstEnterGameEvent(true));

                PlayFirstEnterGameCG = 0;
            }
            else
            {
                brightnessStartWork();
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 10------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        mControl.OnLoadSceneOver();

        LoadOver = true;

        //优化loading读条速度,所以meshtree放在读条之后再加载
        if (null != Scene)
        {
            StartCoroutine(DelayLoadTerrainMeshTree(ScenePrefab));
        }

        if (!HasAdjustSetting)
        {
            HasAdjustSetting = true;
            StartCoroutine(ChangeSetting());
        }

        LuaEventManager.Instance.PushEvent("OnEnterGameOver", Scene.SceneTypeId);
    }
コード例 #5
0
ファイル: ObjManager.cs プロジェクト: tuita520/u3dmmorpg
    public ObjCharacter SelectTargetForSkill(ObjCharacter player, SkillRecord skillRecord)
    {
        var skillTargetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(skillRecord, eModifySkillType.TargetType);

        if (GameControl.Instance.TargetObj != null && !GameControl.Instance.TargetObj.Dead &&
            Instance.MyPlayer.IsMyEnemy(GameControl.Instance.TargetObj))
        {
            // 这种技能,只能依靠自动瞄准,如果上一个目标可用,就继续打
            if (skillTargetType != SkillTargetType.SECTOR &&
                skillTargetType != SkillTargetType.RECT)
            {
                var dist = GameControl.GetSkillReleaseDistance(skillRecord);
                if (Vector3.Distance(player.Position, GameControl.Instance.TargetObj.Position) < dist)
                {
                    return(GameControl.Instance.TargetObj);
                }
            }
            else
            {
                if (GameSetting.Instance.TargetSelectionAssistant && skillRecord.AutoEnemy == 1)
                {
                    // 如果需要辅助瞄准,技能配置也需要辅助瞄准,而且上一个目标可用,就继续打它
                    var dist = GameControl.GetSkillReleaseDistance(skillRecord);
                    if (Vector3.Distance(player.Position, GameControl.Instance.TargetObj.Position) < dist)
                    {
                        return(GameControl.Instance.TargetObj);
                    }
                }
                else
                {
                    // 如果不需要辅助瞄准,技能也配置了不需要辅助瞄准,那就不瞄准了
                    return(null);
                }
            }
        }

        ObjCharacter targetObj = null;

        if (skillTargetType == SkillTargetType.CIRCLE)
        {
            // nothing
        }
        else if (skillTargetType == SkillTargetType.SECTOR)
        {
            if (GameSetting.Instance.TargetSelectionAssistant && skillRecord.AutoEnemy == 1)
            {
                targetObj = SelectNearestCharacter(player.Position,
                                                   character => !character.Dead && player.IsMyEnemy(character), skillRecord.TargetParam[0]);
            }
        }
        else if (skillTargetType == SkillTargetType.RECT)
        {
            if (GameSetting.Instance.TargetSelectionAssistant && skillRecord.AutoEnemy == 1)
            {
                targetObj = SelectNearestCharacter(player.Position,
                                                   character => !character.Dead && player.IsMyEnemy(character), skillRecord.TargetParam[1]);
            }
        }
        else if (skillTargetType == SkillTargetType.TARGET_RECT)
        {
            targetObj = SelectNearestCharacter(player.Position,
                                               character => !character.Dead && player.IsMyEnemy(character));
        }
        else if (skillTargetType == SkillTargetType.TARGET_SECTOR)
        {
            targetObj = SelectNearestCharacter(player.Position,
                                               character => !character.Dead && player.IsMyEnemy(character));
        }
        else if (skillTargetType == SkillTargetType.SINGLE)
        {
            targetObj = SelectNearestCharacter(player.Position,
                                               character => !character.Dead && player.IsMyEnemy(character));
        }
        else if (skillTargetType == SkillTargetType.TARGET_CIRCLE)
        {
            targetObj = SelectNearestCharacter(player.Position,
                                               character => !character.Dead && player.IsMyEnemy(character));
        }

        return(targetObj);
    }
コード例 #6
0
    public bool SelectTarget(GameObject gameObject, int skill = -1)
    {
        //null鍒ゆ柇
        if (null == gameObject)
        {
            return(false);
        }

        //鑾峰緱涓昏鑷繁
        var myself = ObjManager.Instance.MyPlayer;

        if (null == myself)
        {
            return(false);
        }

        //鐩爣寰楁槸涓猳bj
        var obj = gameObject.GetComponent <ObjBase>();

        if (null == obj)
        {
            return(false);
        }

        if (skill == -1)
        {
            TargetCharacter(obj);
        }
        //鍋滄褰撳墠鐨勬寚浠?
        //Executer.Stop();

        //璁$畻鑷繁璺濈鐩爣鐨勮窛绂?
        var distance = Vector3.Distance(obj.Position, myself.Position);

        //榛樿鎶€鑳?
        var skillId = skill;

        if (skillId == -1)
        {
            skillId = PlayerDataManager.Instance.GetNormalSkill();
        }

        if (obj.IsCharacter() && myself.IsMyEnemy(obj as ObjCharacter))
        {
            if (obj.GetObjType() == OBJ.TYPE.NPC || obj.GetObjType() == OBJ.TYPE.RETINUE)
            {
//濡傛灉鏄痭pc
                var npc = obj as ObjNPC;
                if (npc == null)
                {
                    return(false);
                }
                if (!npc.CanBeInteractive())
                {
                    return(false);
                }
            }
            var character = obj as ObjCharacter;

            if (character.Dead)
            {
                return(false);
            }

            //瀵瑰叾閲婃斁鎶€鑳?
            var data = Table.GetSkill(skillId);
            //鐩爣绫诲瀷
            var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType);

            //涓嶉渶瑕佺洰鏍囩殑鎶€鑳?
            if (targetType == SkillTargetType.SELF ||
                targetType == SkillTargetType.CIRCLE ||
                targetType == SkillTargetType.SECTOR ||
                targetType == SkillTargetType.RECT)
            {
                //浣跨敤鎶€鑳?
                return(UseSkill(myself.GetObjId(), skillId, character.GetObjId()));
            } //闇€瑕佺洰鏍囩殑鎶€鑳?
            if (targetType == SkillTargetType.SINGLE ||
                targetType == SkillTargetType.TARGET_CIRCLE ||
                targetType == SkillTargetType.TARGET_RECT ||
                targetType == SkillTargetType.TARGET_SECTOR)
            {
                var maxSkillDistance = GetSkillReleaseDistance(data);
                if (maxSkillDistance - 0.5 < 0.0f)
                {
                    maxSkillDistance = 0.5f;
                }

                if (distance > maxSkillDistance - 0.5)
                {
//璺濈涓嶅
                    var offset = maxSkillDistance - 1.0f;
                    if (offset < 0.0f)
                    {
                        offset = 0.1f;
                    }
                    Executer.PushCommand(new MoveCommand(myself, character.Position, offset));
                    Executer.PushCommand(new AttackCommand(myself.GetObjId(), skillId, character.GetObjId()));
                }
                else
                {
                    TargetObj = character;
                    PlayerDataManager.Instance.SetSelectTargetData(TargetObj, 3);
                    ObjManager.Instance.MyPlayer.FaceTo(character.Position);
                    return(UseSkill(myself.GetObjId(), skillId, character.GetObjId()));
                }
            }
            else
            {
                Logger.Error("Unknow skill target type = {0}", targetType);
            }
        }
        else if (obj.GetObjType() == OBJ.TYPE.NPC)
        {
            var npc = obj as ObjNPC;

            if (!npc.CanBeInteractive())
            {
                return(false);
            }
            if (npc.TableNPC.NpcType == (int)eNpcType.PickUpNpc)
            {
                if (distance > GameSetting.Instance.MaxDistance_NPC)
                {
                    var command = new MoveCommand(myself, npc.Position, GameSetting.Instance.MaxDistance_NPC);
                    Executer.PushCommand(command);
                    return(false);
                }
                else
                {
                    {
                        if (!IsInit)
                        {
                            Table.ForeachWarFlag(tb =>
                            {
                                WarFlagDic.Add(tb.Id, tb.FlagModel);
                                return(true);
                            });
                            Table.ForeachLode(tb =>
                            {
                                if (tb.Id < 100000)
                                {
                                    LodeDic.Add(tb.Id, tb.NpcId);
                                }
                                else if (tb.Id >= 100000 && tb.Id <= 100020)//策划指定墓碑使用此区间
                                {
                                    MonumentDic.Add(tb.Id, tb.NpcId);
                                }
                                return(true);
                            });
                            IsInit = true;
                        }
                        var npcId = npc.TableNPC.Id;
                        if (WarFlagDic.ContainsValue(npcId))
                        {
                            //战旗
                            PlayerDataManager.Instance.HoldLode(npcId);
                            return(false);
                        }
                        else if (LodeDic.ContainsValue(npcId))
                        {
                            //采矿
                            PlayerDataManager.Instance.CollectLode(npcId);
                            return(false);
                        }
                        else if (MonumentDic.ContainsValue(npcId))
                        {
                            //祭拜
                            PlayerDataManager.Instance.WorshipMonument(npcId);
                            return(false);
                        }
                    }
                    EventDispatcher.Instance.DispatchEvent(new PickUpNpc_Event(npc.GetDataId(), npc.GetObjId()));
                    return(false);
                }
            }

            var npcDataId = npc.GetDataId();
            if (npcDataId >= 108 && npcDataId <= 110)//判断是否是排行NPC
            {
                EventDispatcher.Instance.DispatchEvent(new OnRankNpcClick_Event(npcDataId));
            }

            myself.StopMove();
            if (distance <= GameSetting.Instance.MaxDistance_NPC)
            {
                if (MissionManager.Instance.OpenMissionByNpcId(npc.GetDataId(), npc.GetObjId()))
                {
                    npc.DoDialogue();
                    //TODO
                    if (myself.IsAutoFight())
                    {
                        myself.LeaveAutoCombat();
                    }
                }
            }
            else
            {
                var command = new MoveCommand(myself, npc.Position, GameSetting.Instance.MaxDistance_NPC);
                Executer.PushCommand(command);
                var command1 = new FuncCommand(() =>
                {
                    if (MissionManager.Instance.OpenMissionByNpcId(npc.GetDataId(), npc.GetObjId()))
                    {
                        npc.DoDialogue();
                        //TODO
                        if (myself.IsAutoFight())
                        {
                            myself.LeaveAutoCombat();
                        }
                    }
                });
                Executer.PushCommand(command1);
            }
        }
        else if (obj.GetObjType() == OBJ.TYPE.DROPITEM)
        {
//濡傛灉鏄帀钀界墿鍝?
            var dropItem = obj as ObjDropItem;
            myself.StopMove();
            var dis = GameSetting.Instance.MaxDistance_DropItem;

            if (dropItem.mTableData != null && dropItem.mTableData.Type == 300)
            {
                dis = GameUtils.AutoPickUpBuffDistance;
            }

            if (distance <= dis)
            {
                dropItem.Pickup();
            }
            else
            {
                var command = new MoveCommand(myself, dropItem.Position, dis);
                Executer.PushCommand(command);
                var command1 = new FuncCommand(() =>
                {
                    if (null != dropItem)
                    {
                        dropItem.Pickup();
                    }
                });
                Executer.PushCommand(command1);
            }
        }
        else if (obj.GetObjType() == OBJ.TYPE.FAKE_CHARACTER)
        {
            if (((ObjFakeCharacter)obj).iType == (int)eFakeCharacterTypeDefine.MieShiFakeCharacterType)
            {
                EventDispatcher.Instance.DispatchEvent(new ApplyPortraitAward_Event(obj.GetDataId()));
            }
            else
            {
                if (((ObjFakeCharacter)obj).iType == (int)OBJ.TYPE.FAKE_FIGHTLEADER)
                {
                    if (GuideTrigger.IsFunctionOpen("BtnRank"))
                    {
                        var e = new Show_UI_Event(UIConfig.RankUI, new RankArguments {
                            RankId = obj.GetObjId()
                        });
                        EventDispatcher.Instance.DispatchEvent(e);
                    }
                    else
                    {
                        EventDispatcher.Instance.DispatchEvent(new ShowUIHintBoard(1736));
                    }
                }
                else
                {
                    EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.WorshipFrame));
                }
            }
        }
        return(false);
    }
コード例 #7
0
    /// <summary>
    ///     鏀诲嚮鎸夐挳
    /// </summary>
    /// <param name="skillId">鎶€鑳絀d</param>
    /// <returns></returns>
    public bool OnAttackBtnClick(int skillId, bool selectTarget = true)
    {
        Logger.Info("OnAttackBtnClick SkillID = " + skillId);
        PlatformHelper.Event("Skill", "Manual", skillId);
        var myself = ObjManager.Instance.MyPlayer;

        //琛ㄦ牸鏁版嵁
        var data = Table.GetSkill(skillId);

        if (data == null)
        {
            return(false);
        }

        if (selectTarget)
        {
            TargetObj = ObjManager.Instance.SelectTargetForSkill(myself, data);
        }

        //鐩爣绫诲瀷
        var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType);

        if (targetType == SkillTargetType.SELF ||
            targetType == SkillTargetType.CIRCLE)
        {
            return(UseSkill(myself.GetObjId(), skillId));
        }
        if (targetType == SkillTargetType.SECTOR)
        {
            var targetObj = TargetObj;
            if (targetObj != null)
            {
                myself.FaceTo(targetObj.Position);
                return(UseSkill(myself.GetObjId(), skillId, targetObj.GetObjId()));
            }
            return(UseSkill(myself.GetObjId(), skillId));
        }
        if (targetType == SkillTargetType.RECT)
        {
            var targetObj = TargetObj;
            if (targetObj != null)
            {
                myself.FaceTo(targetObj.Position);
                return(UseSkill(myself.GetObjId(), skillId));
            }
            return(UseSkill(myself.GetObjId(), skillId));
        }
        if (targetType == SkillTargetType.SINGLE ||
            targetType == SkillTargetType.TARGET_CIRCLE ||
            targetType == SkillTargetType.TARGET_RECT ||
            targetType == SkillTargetType.TARGET_SECTOR)
        {
            var targetObj = TargetObj;
            if (targetObj == null || targetObj.Dead)
            {
                targetObj = ObjManager.Instance.SelectNearestCharacter(ObjManager.Instance.MyPlayer.Position,
                                                                       character => !character.Dead && ObjManager.Instance.MyPlayer.IsMyEnemy(character));
            }

            if (null == targetObj || targetObj.Dead)
            {
                EventDispatcher.Instance.DispatchEvent(new ShowUIHintBoard(713));
                return(false);
            }

            return(SelectTarget(targetObj.gameObject, skillId));
        }
        Logger.Info("Unknow target type[{0}]", targetType);
        return(false);
    }
コード例 #8
0
    public bool SelectTarget(GameObject gameObject, int skill = -1)
    {
        //null判断
        if (null == gameObject)
        {
            return(false);
        }

        //获得主角自己
        var myself = ObjManager.Instance.MyPlayer;

        if (null == myself)
        {
            return(false);
        }

        //目标得是个obj
        var obj = gameObject.GetComponent <ObjBase>();

        if (null == obj)
        {
            return(false);
        }

        if (skill == -1)
        {
            TargetCharacter(obj);
        }
        //停止当前的指�?
        //Executer.Stop();

        //计算自己距离目标的距�?
        var distance = Vector3.Distance(obj.Position, myself.Position);

        //默认技�?
        var skillId = skill;

        if (skillId == -1)
        {
            skillId = PlayerDataManager.Instance.GetNormalSkill();
        }

        if (obj.IsCharacter() && myself.IsMyEnemy(obj as ObjCharacter))
        {
            if (obj.GetObjType() == OBJ.TYPE.NPC ||
                obj.GetObjType() == OBJ.TYPE.RETINUE)
            {
//如果是npc
                var npc = obj as ObjNPC;
                if (npc == null)
                {
                    return(false);
                }
                if (!npc.CanBeInteractive())
                {
                    return(false);
                }
            }

            var character = obj as ObjCharacter;

            if (character.Dead)
            {
                return(false);
            }

            //对其释放技�?
            var data = Table.GetSkill(skillId);
            //目标类型
            var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType);

            //不需要目标的技�?
            if (targetType == SkillTargetType.SELF ||
                targetType == SkillTargetType.CIRCLE ||
                targetType == SkillTargetType.SECTOR ||
                targetType == SkillTargetType.RECT)
            {
                //使用技�?
                return(UseSkill(myself.GetObjId(), skillId, character.GetObjId()));
            } //需要目标的技�?
            if (targetType == SkillTargetType.SINGLE ||
                targetType == SkillTargetType.TARGET_CIRCLE ||
                targetType == SkillTargetType.TARGET_RECT ||
                targetType == SkillTargetType.TARGET_SECTOR)
            {
                var maxSkillDistance = GetSkillReleaseDistance(data);
                if (maxSkillDistance - 0.5 < 0.0f)
                {
                    maxSkillDistance = 0.5f;
                }

                if (distance > maxSkillDistance - 0.5)
                {
//距离不够
                    var offset = maxSkillDistance - 1.0f;
                    if (offset < 0.0f)
                    {
                        offset = 0.1f;
                    }
                    Executer.PushCommand(new MoveCommand(myself, character.Position, offset));
                    Executer.PushCommand(new AttackCommand(myself.GetObjId(), skillId, character.GetObjId()));
                }
                else
                {
                    TargetObj = character;
                    PlayerDataManager.Instance.SetSelectTargetData(TargetObj, 3);
                    ObjManager.Instance.MyPlayer.FaceTo(character.Position);
                    return(UseSkill(myself.GetObjId(), skillId, character.GetObjId()));
                }
            }
            else
            {
                Logger.Error("Unknow skill target type = {0}", targetType);
            }
        }
        else if (obj.GetObjType() == OBJ.TYPE.NPC)
        {
            var npc = obj as ObjNPC;

            if (!npc.CanBeInteractive())
            {
                return(false);
            }
            if (npc.TableNPC.NpcType == (int)eNpcType.PickUpNpc)
            {
                EventDispatcher.Instance.DispatchEvent(new PickUpNpc_Event(npc.GetDataId(), npc.GetObjId()));

                return(false);
            }

            myself.StopMove();
            if (distance <= GameSetting.Instance.MaxDistance_NPC)
            {
                if (MissionManager.Instance.OpenMissionByNpcId(npc.GetDataId(), npc.GetObjId()))
                {
                    npc.DoDialogue();
                    //TODO
                    if (myself.IsAutoFight())
                    {
                        myself.LeaveAutoCombat();
                    }
                }
            }
            else
            {
                var command = new MoveCommand(myself, npc.Position, GameSetting.Instance.MaxDistance_NPC);
                Executer.PushCommand(command);
                var command1 = new FuncCommand(() =>
                {
                    if (MissionManager.Instance.OpenMissionByNpcId(npc.GetDataId(), npc.GetObjId()))
                    {
                        npc.DoDialogue();
                        //TODO
                        if (myself.IsAutoFight())
                        {
                            myself.LeaveAutoCombat();
                        }
                    }
                });
                Executer.PushCommand(command1);
            }
        }
        else if (obj.GetObjType() == OBJ.TYPE.DROPITEM)
        {
//如果是掉落物�?
            var dropItem = obj as ObjDropItem;
            myself.StopMove();
            if (distance <= GameSetting.Instance.MaxDistance_DropItem)
            {
                dropItem.Pickup();
            }
            else
            {
                var command = new MoveCommand(myself, dropItem.Position, GameSetting.Instance.MaxDistance_DropItem);
                Executer.PushCommand(command);
                var command1 = new FuncCommand(() =>
                {
                    if (null != dropItem)
                    {
                        dropItem.Pickup();
                    }
                });
                Executer.PushCommand(command1);
            }
        }
        else if (obj.GetObjType() == OBJ.TYPE.FAKE_CHARACTER)
        {
            if (((ObjFakeCharacter)obj).iType == (int)eFakeCharacterTypeDefine.MieShiFakeCharacterType)
            {
                EventDispatcher.Instance.DispatchEvent(new ApplyPortraitAward_Event(obj.GetDataId()));
            }
            else
            {
                EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.WorshipFrame));
            }
        }
        return(false);
    }
コード例 #9
0
ファイル: SkillMessage.cs プロジェクト: pikaqiufk/Client
    private void ShowSkillIndicator(BuffResult buff, ObjCharacter character)
    {
        var skillId = buff.Param[0];

        var data = Table.GetSkill(skillId);

        if (data == null)
        {
            Logger.Log2Bugly("ShowSkillIndicator data =null");
            return;
        }
        if (GameLogic.Instance == null || GameLogic.Instance.Scene == null)
        {
            Logger.Log2Bugly("ShowSkillIndicator GameLogic.Instance =null");
            return;
        }
        //SkillTargetType targetType = (SkillTargetType)data.TargetType;
        var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType);

        if (targetType == SkillTargetType.CIRCLE)
        {
            // correct the direction of npc or monster.
            character.TargetDirection = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f);

            var para0 = ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam1);

            GameLogic.Instance.Scene.CreateSkillRangeIndicator(character.gameObject,
                                                               Scene.SkillRangeIndicatorType.Circle,
                                                               para0, 0, Color.red, (caster, receiver) =>
            {
                StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () =>
                {
                    Destroy(caster);
                    Destroy(receiver);
                }));
            }, true);
        }
        else if (targetType == SkillTargetType.SECTOR || targetType == SkillTargetType.TARGET_SECTOR)
        {
            // correct the direction of npc or monster.
            character.TargetDirection = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f);

            GameLogic.Instance.Scene.CreateSkillRangeIndicator(character.gameObject, Scene.SkillRangeIndicatorType.Fan,
                                                               data.TargetParam[0], data.TargetParam[1], Color.red, (caster, receiver) =>
            {
                StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () =>
                {
                    Destroy(caster);
                    Destroy(receiver);
                }));
            }, true);
        }
        else if (targetType == SkillTargetType.RECT || targetType == SkillTargetType.TARGET_RECT)
        {
            // correct the direction of npc or monster.
            character.TargetDirection = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f);

            GameLogic.Instance.Scene.CreateSkillRangeIndicator(character.gameObject,
                                                               Scene.SkillRangeIndicatorType.Rectangle,
                                                               data.TargetParam[0], data.TargetParam[1], Color.red, (caster, receiver) =>
            {
                StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () =>
                {
                    Destroy(caster);
                    Destroy(receiver);
                }));
            }, true);
        }
        else if (targetType == SkillTargetType.SINGLE ||
                 targetType == SkillTargetType.TARGET_CIRCLE)
        {
            var x            = buff.Param[1] / 100.0f;
            var z            = buff.Param[2] / 100.0f;
            var y            = GameLogic.GetTerrainHeight(x, z);
            var o            = new GameObject();
            var objTransform = o.transform;
            objTransform.parent   = GameLogic.Instance.Scene.GlobalSkillIndicatorRoot.transform;
            objTransform.position = new Vector3(x, y, z);
            objTransform.forward  = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f);
            if (targetType == SkillTargetType.TARGET_CIRCLE)
            {
                GameLogic.Instance.Scene.CreateSkillRangeIndicator(o,
                                                                   Scene.SkillRangeIndicatorType.Circle,
                                                                   data.TargetParam[0], 0, Color.red,
                                                                   (caster, receiver) =>
                {
                    StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(o); }));
                }, true);
            }
            else if (targetType == SkillTargetType.TARGET_SECTOR)
            {
                GameLogic.Instance.Scene.CreateSkillRangeIndicator(o,
                                                                   Scene.SkillRangeIndicatorType.Fan,
                                                                   data.TargetParam[0], data.TargetParam[1], Color.red, (caster, receiver) =>
                {
                    var casterTransform      = caster.transform;
                    casterTransform.position = new Vector3(x, y, z);
                    casterTransform.forward  = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f);

                    StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(o); }));
                }, true);
            }
            else if (targetType == SkillTargetType.TARGET_RECT)
            {
                GameLogic.Instance.Scene.CreateSkillRangeIndicator(o,
                                                                   Scene.SkillRangeIndicatorType.Rectangle,
                                                                   data.TargetParam[0], data.TargetParam[1], Color.red, (caster, receiver) =>
                {
                    var casterTransform      = caster.transform;
                    casterTransform.position = new Vector3(x, y, z);
                    casterTransform.forward  = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f);

                    StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(o); }));
                }, true);
            }
        }
    }
コード例 #10
0
ファイル: GameLogic.cs プロジェクト: tuita520/u3dmmorpg
    public IEnumerator EnterGameCoroutine()
    {
        Stopwatch sw      = new Stopwatch();
        Stopwatch swTotal = new Stopwatch();

        swTotal.Start();
        string log = "";

        //加载场景Prefab
        if (!string.IsNullOrEmpty(ScenePrefab))
        {
            sw.Start();
            var ret = ResourceManager.PrepareResourceWithHolder <GameObject>(ScenePrefab, true, true, true, true, true);
            yield return(ret.Wait());

            EventDispatcher.Instance.DispatchEvent(new LoadingPercentEvent(0.6f));
            try
            {
                var sceneRoot = Instantiate(ret.Resource) as GameObject;
                sw.Stop();
                log += "\nScenePrefab---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;
                if (null != sceneRoot)
                {
                    sceneRoot.transform.parent = transform;

                    sw.Reset();
                    sw.Start();
                    // 优化场景特效
                    OptList <ParticleSystem> .List.Clear();

                    sceneRoot.transform.GetComponentsInChildren(true, OptList <ParticleSystem> .List);
                    foreach (var particle in OptList <ParticleSystem> .List)
                    {
                        if (!particle.CompareTag("NoPauseEffect"))
                        {
                            if (particle.gameObject.GetComponent <ParticleOptimizer>() == null)
                            {
                                particle.gameObject.AddComponent <ParticleOptimizer>();
                            }
                        }
                    }
                    sw.Stop();
                    log += "\nParticleOptimizer---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;

                    sw.Reset();
                    sw.Start();
                    Scene = sceneRoot.GetComponent <Scene>();
                    if (null != Scene)
                    {
                        Scene.InitPortal();
                    }
                    else
                    {
                        Logger.Error("cant find Scene in ScenePerfab!!!");
                    }

                    sw.Stop();
                    log += "\nInitPortal---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;
                }

                sw.Reset();
                sw.Start();
                if (Scene.StaticChildren)
                {
                    StaticBatchingUtility.Combine(Scene.StaticChildren);
                }
                else
                {
                    StaticBatchingUtility.Combine(sceneRoot);
                }
                sw.Stop();
                log += "\nStaticBatchingUtility---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;

                sw.Reset();
                sw.Start();

                SoundManager.Instance.SetAreaSoundEnable(SoundManager.Instance.EnableBGM);
//                 var sceneCacheKey = string.Format("{0}.unity3d", ScenePrefab);
//                 ResourceManager.Instance.RemoveFromCache(sceneCacheKey);
                sw.Stop();
                log += "\nSetAreaSoundEnable---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;
            }
            catch (Exception e)
            {
                Logger.Error("step 0------------------{0}\n{1}", e.Message, e.StackTrace);
            }
        }


        if (ObjManager.Instance == null)
        {
            Logger.Log2Bugly("EnterGameCoroutine ObjManager.Instance = null ");
            yield break;
        }

        //清除ObjManager
        ObjManager.Instance.Reset();


        if (PlayerDataManager.Instance == null || PlayerDataManager.Instance.mInitBaseAttr == null)
        {
            Logger.Log2Bugly("EnterGameCoroutine PlayerDataManager.Instance = null ");
            yield break;
        }

        sw.Reset();
        sw.Start();

        var data = PlayerDataManager.Instance.mInitBaseAttr;

        var attr = new InitMyPlayerData();

        //初始化造主角的数据
        try
        {
            attr.ObjId      = data.CharacterId;
            attr.DataId     = data.RoleId;
            attr.Name       = data.Name;
            attr.Camp       = data.Camp;
            attr.IsDead     = data.IsDead == 1;
            attr.HpMax      = data.HpMax;
            attr.HpNow      = data.HpNow;
            attr.MpMax      = data.MpMax;
            attr.MpNow      = data.MpMow;
            attr.X          = data.X;
            attr.Y          = GetTerrainHeight(data.X, data.Y);
            attr.Z          = data.Y;
            attr.MoveSpeed  = data.MoveSpeed;
            attr.AreaState  = (eAreaState)data.AreaState;
            attr.EquipModel = data.EquipsModel;
            attr.ModelId    = data.ModelId;
            attr.MountId    = data.MountId;
            {
                var __list1      = data.Buff;
                var __listCount1 = __list1.Count;
                for (var __i1 = 0; __i1 < __listCount1; ++__i1)
                {
                    var buff = __list1[__i1];
                    {
                        attr.Buff.Add(buff.BuffId, buff.BuffTypeId);
                    }
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 1------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //造主角
        ObjMyPlayer player = null;

        try
        {
            player = ObjManager.Instance.CreateMainPlayer(attr);
            if (player == null)
            {
                Logger.Log2Bugly("EnterGameCoroutine player = null ");
                yield break;
            }

            if (PlayFirstEnterGameCG == 1 && GameSetting.Instance.ReviewState == 1)
            {
                var reivewRecord = GameSetting.Instance.GetReviewRecord();
                if (reivewRecord != null)
                {
                    var transPos = new Vector3();
                    transPos.x = reivewRecord.posX;
                    transPos.y = GetTerrainHeight(reivewRecord.posX, reivewRecord.posY);
                    transPos.z = reivewRecord.posY;
                    player.transform.position = transPos;
                    GameUtils.FlyTo(3, reivewRecord.posX, reivewRecord.posY);
                }
            }


            player.AdjustHeightPosition();
        }
        catch (Exception e)
        {
            Logger.Error("step 2------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        sw.Stop();
        log += "\nObjMyPlayer---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;

        sw.Reset();
        sw.Start();

        //设置buff
        try
        {
            EventDispatcher.Instance.DispatchEvent(new UIEvent_ClearBuffList());

            var count = data.Buff.Count;
            for (var i = 0; i < count; i++)
            {
                var buffResult = data.Buff[i];
                EventDispatcher.Instance.DispatchEvent(new UIEvent_SyncBuffCell(buffResult));
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 3------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        sw.Stop();
        log += "\nUIEvent_ClearBuffList---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;

        sw.Reset();
        sw.Start();

        //预加载技能资源
        try
        {
            ObjManager.Instance.PrepareMainPlayerSkillResources();
        }
        catch (Exception e)
        {
            Logger.Error("step 4------------------{0}\n{1}", e.Message, e.StackTrace);
        }
        sw.Stop();
        log += "\nPrepareMainPlayerSkillResources---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;

        sw.Reset();
        sw.Start();
        //给主摄像机设置跟随,设置声音
        try
        {
            if (MainCamera == null)
            {
                Logger.Log2Bugly("EnterGameCoroutine MainCamera = null ");
                yield break;
            }
            MainCamera.GetComponent <CameraController>().FollowObj = player.gameObject;
            {
//audio listener
                var audioListerner = MainCamera.gameObject.GetComponent <AudioListener>();
                if (null != audioListerner)
                {
                    DestroyObject(audioListerner);
                }
                var playerAudio = player.gameObject.GetComponent <AudioListener>();
                if (null == playerAudio)
                {
                    player.gameObject.AddComponent <AudioListener>();
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 5------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        sw.Stop();
        log += "\nCameraController---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;

        sw.Reset();
        sw.Start();
        //初始化UI
        Coroutine co = null;

        try
        {
            co = StartCoroutine(InitUI());
        }
        catch (Exception e)
        {
            Logger.Error("step 6------------------{0}\n{1}", e.Message, e.StackTrace);
        }
        if (null != co)
        {
            yield return(co);
        }
        sw.Stop();
        log += "\nInitUI---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;


        EventDispatcher.Instance.DispatchEvent(new LoadingPercentEvent(0.7f));

        sw.Reset();
        sw.Start();
        //UI
        // try
        {
            EventDispatcher.Instance.DispatchEvent(new Enter_Scene_Event(Scene.SceneTypeId));
            EventDispatcher.Instance.DispatchEvent(new RefresSceneMap(Scene.SceneTypeId));

            player.CreateNameBoard();

            if (PlayerDataManager.Instance != null)
            {
//根据场景不一样,自动战斗的优先级也不一样
                PlayerDataManager.Instance.RefrehEquipPriority();
            }
        }
        // catch (Exception e)
        //  {
        //	Logger.Error("step 7------------------{0}\n{1}", e.Message, e.StackTrace);
        // }
        sw.Stop();
        log += "\nUI---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;


        sw.Reset();
        sw.Start();
        //向服务器发送切换场景结束的包
        if (SceneManager.Instance != null)
        {
            //yield return StartCoroutine(SceneManager.Instance.ChangeSceneOverCoroutine());
            StartCoroutine(SceneManager.Instance.ChangeSceneOverCoroutine());
        }
        else
        {
            Logger.Log2Bugly("EnterGameCoroutine SceneManager.Instance = null ");
        }
        sw.Stop();
        log += "\nChangeSceneOverCoroutine---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;


        sw.Reset();
        sw.Start();
        //客户端切换场景结束事件
        try
        {
            SceneEffect.OnEnterScecne();
            var formersceneid = Scene.SceneTypeId;
            SceneManager.Instance.OnLoadSceneOver(formersceneid);
            EventDispatcher.Instance.DispatchEvent(new LoadSceneOverEvent());
        }
        catch (Exception e)
        {
            Logger.Error("step 9------------------{0}\n{1}", e.Message, e.StackTrace);
        }
        sw.Stop();
        log += "\nOnLoadSceneOver---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;

        //如果还没有Cache或者UIManger的Cache里没配这个UI,那就在这Cache
        if (!HasCache)
        {
            sw.Reset();
            sw.Start();
            var args = new UIInitArguments {
                Args = new List <int> {
                    -1
                }
            };
            yield return(StartCoroutine(UIManager.Instance.ShowUICoroutine(UIConfig.EraBookUI, args)));

            yield return(new WaitForEndOfFrame());

            EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.EraBookUI));

            //解决关闭灭世地图会打开书的bug
            for (int i = 0; i < UIManager.Instance.mRecordStack.Count; i++)
            {
                if (UIManager.Instance.mRecordStack[i].Config == UIConfig.EraBookUI)
                {
                    UIManager.Instance.mRecordStack.Remove(UIManager.Instance.mRecordStack[i]);
                    break;
                }
            }
            sw.Stop();
            log     += "\nEraBookUI---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;
            HasCache = true;
        }

        yield return(new WaitForEndOfFrame());

        EventDispatcher.Instance.DispatchEvent(new LoadingPercentEvent(0.9f));
        sw.Reset();
        sw.Start();

        //播放CG
        try
        {
            Action brightnessStartWork = () =>
            {
                LoginLogic.State = LoginLogic.LoginState.InGaming;
                var bc = Game.Instance.GetComponent <BrightnessController>();
                if (bc)
                {
                    bc.ResetTimer();
                }
            };

            if (1 == PlayFirstEnterGameCG)
            {
#if UNITY_EDITOR
                var skip = true;
#else
                bool skip = true;
#endif
                if (0 == PlayerDataManager.Instance.GetRoleId() ||
                    1 == PlayerDataManager.Instance.GetRoleId() ||
                    2 == PlayerDataManager.Instance.GetRoleId())
                {
                    if (int.Parse(Table.GetClientConfig(1205).Value) == 1)
                    {
                        PlayCG.Instance.PlayCGFile("Video/HeroBorn.txt", brightnessStartWork, skip);
                        PlatformHelper.UMEvent("PlayCG", "play", "Video/HeroBorn.txt");
                    }
                }

                EventDispatcher.Instance.DispatchEvent(new FirstEnterGameEvent(true));

                PlayFirstEnterGameCG = 0;
            }
            else
            {
                brightnessStartWork();
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 10------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        try
        {
            if (null != GameLogic.Instance)
            {
                GameLogic.Instance.AttachControl();
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 8------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        mControl.OnLoadSceneOver();

        LoadOver = true;

        //优化loading读条速度,所以meshtree放在读条之后再加载
        if (null != Scene)
        {
            StartCoroutine(DelayLoadTerrainMeshTree());
        }

        StartCoroutine(DelayShowLoginRewardUI());

        if (!HasAdjustSetting)
        {
            HasAdjustSetting = true;
            // StartCoroutine(ChangeSetting()); 暂时屏蔽掉了自动降低配置功能
        }

        //LuaEventManager.Instance.PushEvent("OnEnterGameOver", Scene.SceneTypeId);

        sw.Stop();
        log += "\nOVER---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds;

        UnityEngine.Debug.Log(log);
    }
コード例 #11
0
ファイル: PlayerAutoCombat.cs プロジェクト: pikaqiufk/Client
    private void AutoFight()
    {
        var skillId = GetCurrentSkill();
        var tbSkill = Table.GetSkill(skillId);

        if (tbSkill == null)
        {
            CancelLoop();
            return;
        }

        var skillTargetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.TargetType);


        if (mIsCheckFubenLogicId)
        {
            if (CheckDungeonLogic())
            {
                return;
            }
        }

        if (tbSkill.CampType != 0)
        {
            if (skillTargetType == SkillTargetType.SELF ||
                skillTargetType == SkillTargetType.CIRCLE ||
                skillTargetType == SkillTargetType.SECTOR)
            {
                UseSkill(skillId);
                return;
            }
        }

        var targetObj = GameControl.Instance.TargetObj;

        if (targetObj == null || targetObj.Dead)
        {
            targetObj = null;
            //是否离挂机点太远
            if (IsMoveBack())
            {
                GameControl.Instance.TargetObj = null;
                MoveStartPosition();
                return;
            }

            //找下一个目标,包含掉落物
            var ret = SerchNearObj(true);
            if (ret != null)
            {
                if (ret.IsCharacter())
                {
                    //找到一个敌人
                    targetObj = ret as ObjCharacter;
                    if (targetObj != null)
                    {
                        if (IsFarFromBegin(targetObj.Position))
                        {
                            //最近的目标太远了,不去移动,而去返回
                            GameControl.Instance.TargetObj = null;
                            MoveStartPosition();
                            return;
                        }
                        GameControl.Instance.TargetObj = targetObj;
                    }
                }
                else
                {
                    if (ret.GetObjType() == OBJ.TYPE.DROPITEM)
                    {
                        //找到一个掉落
                        var drop = ret as ObjDropItem;
                        if (drop != null)
                        {
                            mTargetPostion        = drop.Position;
                            drop.HasAutoFightMove = true;
                            MoveDrop();
                        }
                        else
                        {
                            //异常处理
                            CancelLoop();
                        }
                        return;
                    }
                }
            }
        }
        if (targetObj == null)
        {
            if (mIsFuben)
            {
                if (CheckDungeonLogic())
                {
                    return;
                }
            }

            if (mMonsterPoint == false)
            {
                mMonsterPoint = true;
                MoveMonsterArea();
                return;
            }

            var logciId = Scene.LogicId;
            if (logciId == -1)
            {
                //没有目标 回到原点
                MoveStartPosition();
            }
            return;
        }
        //检查距离 并放技能
        CheckNearObjDistance();
    }