185 lines
7.5 KiB
C#
185 lines
7.5 KiB
C#
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<Tab_LivingSkills> LiveSkillTabs = new List<Tab_LivingSkills>();
|
|
|
|
public void SyncLiveSkill(GC_SYNC_LIVING_SKILL_LIST packet)
|
|
{
|
|
Dictionary<int, Tab_LivingSkills> liveSkills = new Dictionary<int, Tab_LivingSkills>();
|
|
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<ObjManager>.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<ObjManager>.GetInstance().MainPlayer.IsUsingSkill || Singleton<ObjManager>.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<ObjManager>.GetInstance().MainPlayer.IsUsingSkill || Singleton<ObjManager>.GetInstance().MainPlayer.IsHaveNoMoveBuff())
|
|
{
|
|
//Singleton<ObjManager>.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<ObjManager>.GetInstance().MainPlayer.transform.position.x, Singleton<ObjManager>.GetInstance().MainPlayer.transform.position.z), new Vector2(liveItem.PosX, liveItem.PosZ));
|
|
LogModule.DebugLog("Living skill distance:" + distance);
|
|
if (distance > 2)
|
|
{
|
|
//Singleton<ObjManager>.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR);
|
|
yield break;
|
|
}
|
|
|
|
Singleton<ObjManager>.GetInstance().MainPlayer.AskUnMount();
|
|
Singleton<ObjManager>.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_FINSH);
|
|
if (liveItem.NeedSkillGroupID == 200) //钓鱼技能 潜规则
|
|
{
|
|
Singleton<ObjManager>.GetInstance().MainPlayer.AnimLogic.Play((int)CharacterDefine.CharacterAnimId.FINISHACTION);
|
|
Singleton<ObjManager>.GetInstance().MainPlayer.transform.rotation = Quaternion.Euler(0, liveItem.RotY, 0);
|
|
}
|
|
else
|
|
{
|
|
Singleton<ObjManager>.GetInstance().MainPlayer.AnimLogic.Play((int)CharacterDefine.CharacterAnimId.COLLECTACTION);
|
|
Singleton<ObjManager>.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<ObjManager>.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<ObjManager>.GetInstance().MainPlayer.OnSwithObjAnimState(Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR);
|
|
yield break;
|
|
}
|
|
}
|
|
|
|
}
|