Files
JJBB/Assets/Project/Script/GUI/Mission/MissionLogLogic.cs
2024-08-23 15:49:34 +08:00

562 lines
18 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using GCGame.Table;
using Games.GlobeDefine;
using Module.Log;
using GCGame;
using Games.Mission;
using Games.Item;
public class MissionLogLogic : MonoBehaviour
{
public UISubScollMenu _MissionClass;
public GameObject _MissionBounsPanel;
// 任务信息相关
public Text _MissionTitle;
public Text _MissionTarget;
public Text m_MissionDec;
public GameObject _MissionInfoPanel;
public GameObject _NoneMissionPanel;
public GameObject _BtnAbandom;
public UIContainerBase _MissionBonus;
private int m_CurMissionID;
private Dictionary<string, int> _MissionNameToID = new Dictionary<string, int>();
private static MissionLogLogic m_Instance = null;
public static MissionLogLogic Instance()
{
return m_Instance;
}
private int m_nSelectMissionID = GlobeVar.INVALID_ID;
public int SelectMissionID
{
get { return m_nSelectMissionID; }
set { m_nSelectMissionID = value; }
}
enum ItemType
{
ITEM_MONEY,
ITEM_EXP,
ITEM_YUANBAO,
ITEM_ITEM,
}
void Awake()
{
m_Instance = this;
}
// Use this for initialization
void OnEnable () {
ShowDefaultFirst();
InitWindow();
}
public void ShowDefaultFirst()
{
ShowPage(0);
}
void OnDestroy()
{
m_Instance = null;
}
public void CloseWindow()
{
UIManager.CloseUI(UIInfo.MissionLogRoot);
}
void InitWindow()
{
m_CurMissionID = -1;
InitAcceptedMission();
var missionList = GameManager.gameManager.MissionManager.GetClassifyCanAcceptMission();
InitRedDotTips();
}
public List<GameObject> _MenuMarkIconList;
public List<GameObject> _PanelsList;
public void ShowPage(int page)
{
for(int index = 0; index < _MenuMarkIconList.Count; index ++)
{
_MenuMarkIconList[index].SetActive(index == page);
_PanelsList[index].SetActive(index == page);
}
if (page == 0)
{
InitAcceptedMission();
}
else if(page == 1)
{
InitCanAcceptMission();
}
}
public void InitAcceptedMission()
{
var missionList = GameManager.gameManager.MissionManager.GetClassifyMission();
//不显示指引任务
if(missionList.ContainsKey(MISSIONTYPE.MISSION_GUIDE))
{
missionList.Remove(MISSIONTYPE.MISSION_GUIDE);
}
//宝图已删,保留枚举(要删的地方比较多)
if (missionList.ContainsKey(MISSIONTYPE.MISSION_TREASURE))
{
missionList.Remove(MISSIONTYPE.MISSION_TREASURE);
}
_MissionNameToID.Clear();
_MissionClass.Clear();
if (missionList.Count == 0)
{
_MissionInfoPanel.SetActive(false);
_NoneMissionPanel.SetActive(true);
_BtnAbandom.SetActive(false);
return;
}
_NoneMissionPanel.SetActive(false);
_MissionInfoPanel.SetActive(true);
_BtnAbandom.SetActive(true);
foreach (var missionTypes in missionList)
{
var missionClassItemInfo = new MisisonLogClassItemInfo((MISSIONTYPE)missionTypes.Key, -1);
_MissionClass.PushMenu(missionClassItemInfo, missionTypes.Value.ToArray());
}
_MissionClass.ShowDefaultFirst();
}
public struct MisisonLogClassItemInfo
{
public MISSIONTYPE type;
public int missionId;
public MisisonLogClassItemInfo(MISSIONTYPE _type, int _missionId)
{
type = _type;
missionId = _missionId;
}
}
public void InitCanAcceptMission()
{
var missionLimitDic = TableManager.GetMissionLimit().Values;
var missionList = new List<MisisonLogClassItemInfo>();
var canAcceptMissionTypeList = new List<MISSIONTYPE>();
foreach (var mission in missionLimitDic)
{
if (mission.IsShow != 1)
continue;
var id = mission.GetId();
var missionBase = TableManager.GetMissionBaseByID(id, 0);
if (missionBase == null)
continue;
var missionClassItemInfo = new MisisonLogClassItemInfo((MISSIONTYPE)missionBase.MissionType, id);
//不显示宝图任务
if ((MISSIONTYPE)missionBase.MissionType != MISSIONTYPE.MISSION_TREASURE
&& !canAcceptMissionTypeList.Contains((MISSIONTYPE)missionBase.MissionType)
&& GameManager.gameManager.MissionManager.CanAcceptMission(id))
{
missionList.Add(missionClassItemInfo);
canAcceptMissionTypeList.Add((MISSIONTYPE)missionBase.MissionType);
}
}
_MissionNameToID.Clear();
_MissionClass.Clear();
if (missionList.Count == 0)
{
_MissionInfoPanel.SetActive(false);
_NoneMissionPanel.SetActive(true);
_BtnAbandom.SetActive(false);
return;
}
_NoneMissionPanel.SetActive(false);
_MissionInfoPanel.SetActive(true);
_BtnAbandom.SetActive(true);
for (int index = 0; index < missionList.Count; index++)
{
_MissionClass.PushMenu(missionList[index]);
}
_MissionClass.ShowDefaultFirst();
}
public static string GetMissionTypeStr(MISSIONTYPE missionType)
{
switch (missionType)
{
case MISSIONTYPE.MISSION_MAIN:
return StrDictionary.GetClientDictionaryString("#{3693}");
case MISSIONTYPE.MISSION_BRANCH:
return StrDictionary.GetClientDictionaryString("#{4713}");
case MISSIONTYPE.MISSION_INSEC:
return StrDictionary.GetClientDictionaryString("#{7022}");
case MISSIONTYPE.MISSION_ONEDRONG:
return StrDictionary.GetClientDictionaryString("#{5100}");
case MISSIONTYPE.MISSION_DAILY:
return StrDictionary.GetClientDictionaryString("#{4714}");
case MISSIONTYPE.MISSION_GUILDTRANSPORT:
return StrDictionary.GetClientDictionaryString("#{4915}");
case MISSIONTYPE.MISSION_GUILDPAOSHANG:
return StrDictionary.GetClientDictionaryString("#{4913}");
case MISSIONTYPE.MISSION_GUILDDRAGONWAR:
return StrDictionary.GetClientDictionaryString("#{4914}");
case MISSIONTYPE.MISSION_GUILDWINE:
return StrDictionary.GetClientDictionaryString("#{4916}");
case MISSIONTYPE.MISSION_TREASURE:
return StrDictionary.GetClientDictionaryString("#{4917}");
case MISSIONTYPE.MISSION_CIRCLE:
return StrDictionary.GetClientDictionaryString("#{1980}");
case MISSIONTYPE.MISSION_WEEKCIRCLE:
return StrDictionary.GetClientDictionaryString("#{6711}");
case MISSIONTYPE.MISSION_BATTLE:
return StrDictionary.GetClientDictionaryString("#{4941}");
case MISSIONTYPE.MISSION_CROSSSERVERPOST:
return StrDictionary.GetClientDictionaryString("#{4959}");
case MISSIONTYPE.MISSION_CROSSSERVERKILLMONSTER:
return StrDictionary.GetClientDictionaryString("#{4960}");
}
return "";
}
public void BtnMissionItemClick(object obj)
{
int missionID = -1;
MisisonLogClassItemInfo missionLogItemInfo;
if (obj is MisisonLogClassItemInfo)
{
missionLogItemInfo = (MisisonLogClassItemInfo)obj;
missionID = missionLogItemInfo.missionId;
}else if(obj is int)
{
missionID = (int)obj;
}
if(missionID != -1)
m_CurMissionID = missionID;
var misDiction = TableManager.GetMissionDictionaryByID(missionID, 0);
if(misDiction != null)
m_MissionDec.text = StrDictionary.GetClientString_WithNameSex(misDiction.MissionDesc);
Tab_MissionDictionary missionDic = TableManager.GetMissionDictionaryByID(missionID, 0);
if (missionDic != null)
{
_MissionTitle.text = missionDic.MissionName;
}
ShowMissionBonus(missionID);
}
public void ShowMissionBonus(int nMissionID)
{
Tab_MissionBase misLine = TableManager.GetMissionBaseByID(nMissionID, 0);
if (misLine == null)
{
return;
}
if (misLine.BonusID > -1)
{
//显示奖励内容
Tab_MissionBonus bonusTab = TableManager.GetMissionBonusByID(misLine.BonusID, 0);
if (bonusTab != null)
{
List<CommonItemContainerItem.ItemInfo> missionItemList = new List<CommonItemContainerItem.ItemInfo>();
//经济系统奖励
//int nIndex = 0;
//如果有经验
if (bonusTab.Exp > 0)
{
var missionParam = new CommonItemContainerItem.ItemInfo();
missionParam.itemNum = bonusTab.Exp;
missionParam.itemSprite = "jingyan";
missionItemList.Add(missionParam);
}
//如果有金币
if (bonusTab.Money > 0)
{
var missionParam = new CommonItemContainerItem.ItemInfo();
missionParam.itemNum = bonusTab.Money;
missionParam.itemSprite = "jinbi";
missionItemList.Add(missionParam);
}
//如果有绑定元宝
if (bonusTab.BindYuanBao > 0)
{
var missionParam = new CommonItemContainerItem.ItemInfo();
missionParam.itemNum = bonusTab.BindYuanBao;
missionParam.itemSprite = "yinpiao";
missionItemList.Add(missionParam);
}
// 显示物品
for (int i = 0; i < bonusTab.getToolIDCount(); i++)
{
int itemID = bonusTab.GetToolIDbyIndex(i);
int itemNum = bonusTab.GetToolNumbyIndex(i);
if (itemID > 0 && itemNum > 0)
{
missionItemList.Add(new CommonItemContainerItem.ItemInfo() { itemID = itemID, itemNum = itemNum });
}
}
int nProfess = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession;
if (nProfess >= 0 && nProfess < bonusTab.getProfessionItemIDCount())
{
int itemID = bonusTab.GetProfessionItemIDbyIndex(nProfess);
if (itemID > 0)
{
missionItemList.Add(new CommonItemContainerItem.ItemInfo() { itemID = itemID, itemNum = 1 });
}
}
// 多选物品
int nChoosedItemdNum = bonusTab.ChoosedItemNum;
if (nChoosedItemdNum > 0 && nChoosedItemdNum <= bonusTab.getItemIDCount())
{
int itemID = bonusTab.GetItemIDbyIndex(nChoosedItemdNum - 1);
int itemNum = bonusTab.GetItemNumbyIndex(nChoosedItemdNum - 1);
if (itemID > 0 && itemNum > 0)
{
missionItemList.Add(new CommonItemContainerItem.ItemInfo() { itemID = itemID, itemNum = itemNum });
}
}
if(missionItemList.Count > 0)
{
_MissionBounsPanel.SetActive(true);
_MissionBonus.InitContentItem(missionItemList, ItemTipClick);
}else
{
_MissionBounsPanel.SetActive(false);
}
}
}
}
public void ItemTipClick(object param)
{
CommonItemContainerItem.ItemInfo itemParam = (CommonItemContainerItem.ItemInfo)param;
if (itemParam.itemID <= -1)
{
return;
}
GameItem item = new GameItem();
item.DataID = itemParam.itemID;
if (item.IsEquipMent())
{
SpecialItemClick(item);
EquipTooltipsLogic.ShowEquipTooltip(item, ItemTooltipsLogic.ShowType.Info, transform.position);
}
else
{
ItemTooltipsLogic.ShowItemTooltip(item, ItemTooltipsLogic.ShowType.Info, transform.position);
}
}
// 立即前往
public void GotoButtonClick()
{
if (m_CurMissionID < 0)
{
return;
}
var missionBase = TableManager.GetMissionBaseByID(m_CurMissionID, 0);
if(missionBase.MissionType == (int)MISSIONTYPE.MISSION_INSEC)
{
int autosearchId = Games.GlobeDefine.GlobeVar.GetMasterAutosearchId(GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession);
Tab_AutoSearch searchTab = TableManager.GetAutoSearchByID(autosearchId, 0);
if (searchTab == null)
{
return;
}
//接受任务后自动寻路
Vector3 pos = new Vector3();
pos.x = searchTab.X;
pos.z = searchTab.Z;
int sceneId = searchTab.DstSceneID;
AutoSearchPoint targetPoint = new AutoSearchPoint(sceneId, pos.x, pos.z);
if (GameManager.gameManager && GameManager.gameManager.AutoSearch)
{
GameManager.gameManager.AutoSearch.BuildPath(targetPoint);
Tab_RoleBaseAttr RoleBase = TableManager.GetRoleBaseAttrByID(searchTab.DataId, 0);
if (null != RoleBase && null != GameManager.gameManager.AutoSearch.Path)
{
GameManager.gameManager.AutoSearch.Path.AutoSearchTargetName = RoleBase.Name;
GameManager.gameManager.AutoSearch.Path.autoSearchRadius = RoleBase.DialogRadius;
}
}
}
else if(missionBase.MissionType == (int)MISSIONTYPE.MISSION_GUILDDRAGONWAR
|| missionBase.MissionType == (int)MISSIONTYPE.MISSION_GUILDPAOSHANG
|| missionBase.MissionType == (int)MISSIONTYPE.MISSION_GUILDTRANSPORT)
{
if (GameManager.gameManager.PlayerDataPool.IsHaveGuild() == false)
{
// 加入帮派提醒
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6707}"));
return;
}
//帮派等级小于4返回
var guidTab = TableManager.GetGuildOtherByID(0, 0);
if (guidTab == null)
{
LogModule.ErrorLog("guidTab is null");
return;
}
if (GameManager.gameManager.PlayerDataPool.GuildInfo.GuildLevel < guidTab.RobberNeedGuildLevel)
{
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6709}"));
return;
}
Tab_ActivityBase activityBase = null;
switch(missionBase.MissionType)
{
case (int)MISSIONTYPE.MISSION_GUILDTRANSPORT:
activityBase = TableManager.GetActivityBaseByID(11, 0);
break;
case (int)MISSIONTYPE.MISSION_GUILDDRAGONWAR:
activityBase = TableManager.GetActivityBaseByID(13, 0);
break;
case (int)MISSIONTYPE.MISSION_GUILDPAOSHANG:
activityBase = TableManager.GetActivityBaseByID(12, 0);
break;
}
string[] paramaters = activityBase.Parameter.Split('|');
int roleId = int.Parse(paramaters[0]);
float posX = float.Parse(paramaters[1]);
float posZ = float.Parse(paramaters[2]);
GameManager.gameManager.AutoSearch.BackGuild(GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid, int.Parse(paramaters[0]), float.Parse(paramaters[1]), float.Parse(paramaters[2]));
}
else
{
Tab_MissionDictionary MDLine = TableManager.GetMissionDictionaryByID(m_CurMissionID, 0);
if (MDLine == null)
{
return;
}
if (GameManager.gameManager.MissionManager != null)
{
GameManager.gameManager.MissionManager.MissionPathFinder(m_CurMissionID);
}
}
CloseWindow();
}
// 放弃任务
public void AbandonButtonClick()
{
Tab_MissionBase missionBase = TableManager.GetMissionBaseByID(m_CurMissionID, 0);
if (missionBase == null)
return;
if (missionBase.MissionType == (int)MISSIONTYPE.MISSION_ONEDRONG) //一条龙任务
{
MessageBoxLogic.OpenOKCancelBox(1975, 1000, delegate ()
{
if (GameManager.gameManager.MissionManager != null)
{
GameManager.gameManager.MissionManager.AbandonMission(m_CurMissionID);
CloseWindow();
}
}, null);
return;
}
if (GameManager.gameManager.MissionManager != null)
{
GameManager.gameManager.MissionManager.AbandonMission(m_CurMissionID);
}
CloseWindow();
}
void SpecialItemClick(GameItem gItem)
{
int nItemStarLevel = 0;
if (m_CurMissionID == 233)
{
nItemStarLevel = 12;
}
else if (m_CurMissionID == 234)
{
nItemStarLevel = 24;
}
else if (m_CurMissionID == 235)
{
nItemStarLevel = 36;
}
if (nItemStarLevel > 0)
{
gItem.StarLevel = nItemStarLevel;
}
}
#region missionCheckedTips
public GameObject _RedDotTips;
public void InitRedDotTips()
{
_RedDotTips.SetActive(false);
//if (!GameManager.gameManager.MissionManager.IsMissionChecked())
//{
// _RedDotTips.SetActive(true);
//}
//else
//{
// _RedDotTips.SetActive(false);
//}
}
public void UpdateInitRedDotTips()
{
InitRedDotTips();
var classItems = GetComponentsInChildren<MissionLogClassItem>();
//foreach(var classItem in classItems)
//{
// classItem.UpdateRedDotTips();
//}
}
#endregion
}