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

337 lines
12 KiB
C#

//一条龙自动处理相关
using System.Collections;
using Games.GlobeDefine;
using Games.LogicObj;
using Games.Mission;
using GCGame.Table;
using UnityEngine;
public class OneDragonAuto
{
public static OneDragonAuto One_DragonAuto = new OneDragonAuto();
public static bool LastSceneIscopy;
public static bool isOneDragonAutoSearch;
public static bool isOneDragonAutoSearchStop = true;
public static bool isNeedCheckOneDragonEnterCopy;
private Obj_MainPlayer m_player;
public int oneDragonCircleTimes = 10000; //一条龙今日完成5轮的次数
public int OneDragonEnterCopyNpc = -1;
public int oneDragonIndex;
public bool NeedCheckOneDragonEnterCopy
{
get { return isNeedCheckOneDragonEnterCopy; }
set { isNeedCheckOneDragonEnterCopy = value; }
}
public void Clear()
{
oneDragonCircleTimes = 10000;
OneDragonEnterCopyNpc = -1;
NeedCheckOneDragonEnterCopy = false;
oneDragonIndex = 0;
GameManager.gameManager.StopCoroutine("StartCheckOneDragonEnterCopy");
m_player = null;
}
public void OnLeaveScene()
{
LastSceneIscopy = GameManager.gameManager.ActiveScene.IsCopyScene();
m_player = null;
}
public void OnEnterScene(Obj_MainPlayer player)
{
m_player = player;
var missionID = GameManager.gameManager.MissionManager.isHaveOneDragon();
if (missionID != -1 && GameManager.gameManager.ActiveScene.IsCopyScene() == false && LastSceneIscopy)
{
if (isOneDragonAutoSearch && isOneDragonAutoSearchStop)
{
GameManager.gameManager.MissionManager.MissionPathFinder(missionID);
NeedCheckOneDragonEnterCopy = true;
isOneDragonAutoSearchStop = false;
}
else
{
isOneDragonAutoSearch = false;
isOneDragonAutoSearchStop = true;
NeedCheckOneDragonEnterCopy = false;
}
}
//player.RefreshPlayerAutoCombat();
OnCreatePlayer();
}
#region 5
public void OnCreatePlayer()
{
if (GameManager.gameManager.ActiveScene.IsCopyScene() == false)
{
//Games.Events.EventListenerSystem.Instance.SendMessage(Games.Events.MessageID.PopMessageBoxOneDragonWnd);
//Games.Events.EventListenerSystem.Instance.RemoveMessage(Games.Events.MessageID.PopMessageBoxOneDragonWnd, "PopOneDragon");
}
}
//每完成一轮一条龙更新一次
public void RefreshOneDragon(int times)
{
if (times > oneDragonCircleTimes) AcceptOnedragonAgain(null, null);
oneDragonCircleTimes = times;
}
public void AcceptOnedragonAgain(Hashtable addparam, Hashtable sendparam)
{
if (GameManager.gameManager.PlayerDataPool.IsHaveTeam() == false)
return;
if (GameManager.gameManager.PlayerDataPool.TeamInfo.IsCaptain() == false)
return;
MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{5135}"), "", AcceptOneDragon,
delegate { Clear(); });
}
//寻路到接取任务的NPC
public void AcceptOneDragon()
{
var activity = TableManager.GetActivityBaseByID(2);
if (activity != null)
{
var id = -1;
if (int.TryParse(activity.Parameter, out id))
{
var autoSearch = TableManager.GetAutoSearchByID(id);
if (autoSearch != null)
{
var targetPos = new Vector3();
targetPos.x = autoSearch.X;
targetPos.z = autoSearch.Z;
var nTargetScene = autoSearch.DstSceneID;
var point = new AutoSearchPoint(nTargetScene, targetPos.x, targetPos.z);
if (GameManager.gameManager && GameManager.gameManager.AutoSearch)
{
GameManager.gameManager.AutoSearch.BuildPath(point);
var RoleBase = TableManager.GetRoleBaseAttrByID(autoSearch.DataId);
if (null != RoleBase && null != GameManager.gameManager.AutoSearch.Path)
{
GameManager.gameManager.AutoSearch.Path.AutoSearchTargetName = RoleBase.Name;
GameManager.gameManager.AutoSearch.Path.autoSearchRadius = RoleBase.DialogRadius;
}
}
}
}
}
}
#endregion
#region
public bool CheckEnterCopy()
{
if (m_player == null)
return false;
foreach (var mission in GameManager.gameManager.MissionManager.MissionList.m_aMission)
{
if (mission.Value.m_yStatus != 1)
continue;
var missionBase = TableManager.GetMissionBaseByID(mission.Value.m_nMissionID);
if (missionBase == null)
continue;
if (missionBase.MissionType != (int) MISSIONTYPE.MISSION_ONEDRONG)
continue;
var param = GameManager.gameManager.MissionManager.GteMissionTurnCount(mission.Value.m_nMissionID);
if (param != 0)
{
var turn =
GameManager.gameManager.MissionManager
.GetMissionTurnsCount(mission.Value.m_nMissionID); //param & 0XFF; //一轮任务中的第几次 int前8位
if (turn > 1)
{
const string coroutineName = "StartCheckOneDragonEnterCopy";
m_player.StopCoroutine(coroutineName);
m_player.StartCoroutine(StartCheckOneDragonEnterCopy());
return true;
}
}
}
return false;
}
private IEnumerator StartCheckOneDragonEnterCopy()
{
while (true)
{
yield return new WaitForSeconds(2);
CheckOneDragonEnterCopy();
if (NeedCheckOneDragonEnterCopy == false)
break;
}
}
public void CheckOneDragonEnterCopy()
{
if (NeedCheckOneDragonEnterCopy == false)
return;
if (GameManager.gameManager.PlayerDataPool.IsHaveTeam() == false)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
if (GameManager.gameManager.PlayerDataPool.TeamInfo.IsCaptain() == false)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
if (m_player == null)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
var obj = Singleton<ObjManager>.GetInstance().FindObjCharacterInScene(OneDragonEnterCopyNpc);
if (obj == null)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
if (obj.ObjType != GameDefine_Globe.OBJ_TYPE.OBJ_NPC)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
var role = TableManager.GetRoleBaseAttrByID(obj.RoleBaseID);
if (role == null)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
if (Vector3.Distance(m_player.Position, obj.Position) > role.DialogRadius) return;
var npcDialog = TableManager.GetNpcDialogByID(role.DialogID);
if (npcDialog == null)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
var optionDialog = TableManager.GetNpcOptionDialogByID(npcDialog.OptionDialogId);
if (optionDialog == null)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
if (optionDialog.getOptionFuncCount() <= 0)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
var func = optionDialog.GetOptionFuncbyIndex(0);
if (string.IsNullOrEmpty(func) || func.Contains("EnterCopy") == false)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
var param = optionDialog.GetOptionParambyIndex(0);
var copyId = -1;
int.TryParse(param, out copyId);
var fuben = TableManager.GetFubenByID(copyId);
if (fuben == null)
{
NeedCheckOneDragonEnterCopy = false;
return;
}
var packet = (CG_REQ_ENTER_COPY) PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ENTER_COPY);
packet.Copyid = copyId;
packet.SendPacket();
}
#endregion
//public void ChangePlayerAuto()
//{
// if (m_player == null)
// return;
// var Oldfuben = TableManager.GetFubenByID(GameManager.gameManager.PlayerDataPool.EnterSceneCache.BeforeEnterCopySceneID, 0);
// var fuben = TableManager.GetFubenByID(GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID, 0);
// if (Oldfuben == null)
// {
// if (fuben != null)
// {
// // 队长或者未组队,调整自身自动战斗状态
// // 否则切换到跟随状态2
// if (!GameManager.gameManager.PlayerDataPool.IsHaveTeam() ||
// GameManager.gameManager.PlayerDataPool.TeamInfo.IsCaptain())
// {
// if (fuben.AutoType == 0)
// m_player.LeveAutoCombat();
// else if (!m_player.IsOpenAutoCombat)
// m_player.EnterAutoCombatAfterLoading();
// }
// else
// {
// if (fuben.AutoType == 0)
// {
// if (m_player.FollowState != TeamFollowState.followMove)
// m_player.EnterTeamFollow();
// }
// else
// {
// if (m_player.FollowState != TeamFollowState.followCombat)
// m_player.TeamEnterAutoCombat();
// }
// }
// //switch (fuben.AutoType)
// //{
// // case 0:
// // if (m_player.IsOpenAutoCombat)
// // m_player.LeveAutoCombat();
// // break;
// // case 1:
// // GameManager.gameManager.PlayerDataPool.ChangeSceneAutoCombat = GameManager.gameManager.PlayerDataPool.IsOpenAutoCombat;
// // if (!m_player.IsOpenAutoCombat)
// // {
// // m_player.EnterAutoCombatAfterLoading();
// // //m_player.LeaveTeamFollow();
// // }
// // break;
// //}
// }
// }
// else
// {
// // 出副本先恢复到进副本之前的挂机状态
// if (fuben == null)
// {
// int missionID = GameManager.gameManager.MissionManager.isHaveOneDragon();
// if(missionID==-1)
// {
// GameManager.gameManager.PlayerDataPool.IsOpenAutoCombat = GameManager.gameManager.PlayerDataPool.ChangeSceneAutoCombat;
// if (GameManager.gameManager.PlayerDataPool.IsOpenAutoCombat)
// {
// m_player.EnterAutoCombat();
// }
// else
// {
// m_player.LeveAutoCombat();
// }
// }
// }
// }
//}
}