Files
JJBB/Assets/Project/Script/Player/Skill/LiveSkill.cs
2024-08-23 15:49:34 +08:00

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