using UnityEngine; using System.Collections; using System.Collections.Generic; using GCGame.Table; using Games.GlobeDefine; using Module.Log; public class LiveSkill { #region sync liveskill public List LiveSkillTabs = new List(); public void SyncLiveSkill(GC_SYNC_LIVING_SKILL_LIST packet) { Dictionary liveSkills = new Dictionary(); for (int i = 0; i < packet.skillidCount; ++i) { Tab_LivingSkills liveSkill = TableManager.GetLivingSkillsByID(packet.GetSkillid(i), 0); if (liveSkill == null) continue; liveSkills.Add(liveSkill.SkillGroupID, liveSkill); } LiveSkillTabs.Clear(); var tabLiveSkills = TableManager.GetLivingSkills().Values; foreach (var tabLiveSkill in tabLiveSkills) { if (liveSkills.ContainsKey(tabLiveSkill.SkillGroupID) && tabLiveSkill == liveSkills[tabLiveSkill.SkillGroupID]) { LiveSkillTabs.Add(tabLiveSkill); } else if (!liveSkills.ContainsKey(tabLiveSkill.SkillGroupID) && tabLiveSkill.SkillLevel == 0) { LiveSkillTabs.Add(tabLiveSkill); } } if (LiveSkillLogic.Instance()) { LiveSkillLogic.Instance().UpdateLiveSkill(); } } public void InitDefault() { var tabLiveSkills = TableManager.GetLivingSkills().Values; foreach (var tabLiveSkill in tabLiveSkills) { if (tabLiveSkill.SkillLevel == 0) { LiveSkillTabs.Add(tabLiveSkill); } } } #endregion public static float _LiveSkillTime = 1; public static float _LiveSkillTimeInterval = 0.2f; public void StartLiveCollect(Tab_LivingSkillItem liveItem, Tab_LivingSkills liveSkill, int timesCnt) { if (liveItem.SceneID > 0) { AutoSearchPos(liveItem.SceneID, new Vector3(liveItem.PosX, 0, liveItem.PosZ), liveItem, liveSkill, timesCnt); } else { StartCollectItem(liveItem, liveSkill, timesCnt); } } public void AutoSearchPos(int sceneID, Vector3 pos, Tab_LivingSkillItem liveItem, Tab_LivingSkills liveSkill, int timesCnt) { Singleton.GetInstance().MainPlayer.BreakAutoCombatState(); // 自动寻路 AutoSearchPoint point = new AutoSearchPoint(sceneID, pos.x, pos.z); if (GameManager.gameManager && GameManager.gameManager.AutoSearch) { GameManager.gameManager.AutoSearch.BuildPath(point); if (null != GameManager.gameManager.AutoSearch.Path) { GameManager.gameManager.AutoSearch.Path.autoSearchRadius = 1; GameManager.gameManager.AutoSearch.Path.AutoSearchTargetID = -1; GameManager.gameManager.AutoSearch.Path.finishCallBack = AutoSearchCallBack; Hashtable hash = new Hashtable(); hash.Add("LiveItem", liveItem); hash.Add("LiveSkill", liveSkill); hash.Add("Times", timesCnt); GameManager.gameManager.AutoSearch.Path.callBackParam = hash; } } } private void AutoSearchCallBack(object param) { Hashtable hash = param as Hashtable; Tab_LivingSkillItem liveItem = (Tab_LivingSkillItem)hash["LiveItem"]; Tab_LivingSkills liveSkill = (Tab_LivingSkills)hash["LiveSkill"]; int times = (int)hash["Times"]; if (liveItem == null || liveSkill == null) return; if (Singleton.GetInstance().MainPlayer.IsUsingSkill || Singleton.GetInstance().MainPlayer.IsHaveNoMoveBuff()) { return; } StartCollectItem(liveItem, liveSkill, times); } public void StartCollectItem(Tab_LivingSkillItem liveItem, Tab_LivingSkills liveSkill, int timesCnt) { GameManager.gameManager.StopAllCoroutines(); GameManager.gameManager.StartCoroutine(StartCollectItemIE(liveItem, liveSkill, timesCnt)); } private IEnumerator StartCollectItemIE(Tab_LivingSkillItem liveItem, Tab_LivingSkills liveSkill, int timesCnt) { if (timesCnt > 0) { if (Singleton.GetInstance().MainPlayer.IsUsingSkill || Singleton.GetInstance().MainPlayer.IsHaveNoMoveBuff()) { //Singleton.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR); GUIData.AddNotifyData("#{42104}"); yield break; } if (liveItem.SceneID > 0) { float distance = Vector2.Distance(new Vector2(Singleton.GetInstance().MainPlayer.transform.position.x, Singleton.GetInstance().MainPlayer.transform.position.z), new Vector2(liveItem.PosX, liveItem.PosZ)); LogModule.DebugLog("Living skill distance:" + distance); if (distance > 2) { //Singleton.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR); yield break; } Singleton.GetInstance().MainPlayer.AskUnMount(); Singleton.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_FINSH); if (liveItem.NeedSkillGroupID == 200) //钓鱼技能 潜规则 { Singleton.GetInstance().MainPlayer.AnimLogic.Play((int)CharacterDefine.CharacterAnimId.FINISHACTION); Singleton.GetInstance().MainPlayer.transform.rotation = Quaternion.Euler(0, liveItem.RotY, 0); } else { Singleton.GetInstance().MainPlayer.AnimLogic.Play((int)CharacterDefine.CharacterAnimId.COLLECTACTION); Singleton.GetInstance().MainPlayer.transform.rotation = Quaternion.Euler(0, liveItem.RotY, 0); } SkillProgressLogic.PlayProcess(SkillProgressLogic.ProgressModel.ORDERMODEL, _LiveSkillTime, liveSkill.SkillName, liveSkill.Id); } else { if (!LiveSkillLogic.Instance()) { Singleton.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR); yield break; } LiveSkillProgress.PlayProcess(LiveSkillProgress.ProgressModel.ORDERMODEL, _LiveSkillTime, liveSkill.SkillName, liveSkill.Id); } yield return new WaitForSeconds(_LiveSkillTime + _LiveSkillTimeInterval); CG_REQ_PRODUCT_LIVING_SKILL_ITEMS packet = (CG_REQ_PRODUCT_LIVING_SKILL_ITEMS)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_PRODUCT_LIVING_SKILL_ITEMS); packet.Desitemid = liveItem.Id; packet.Skillid = liveSkill.Id; packet.SendPacket(); LogModule.DebugLog("SendPacket:" + liveItem.Id); StartCollectItem(liveItem, liveSkill, timesCnt - 1); } else { Singleton.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR); yield break; } } }