Files
JJBB/Assets/Project/Script/GUI/Mission/OptionDialogLogic.cs

951 lines
31 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using GCGame.Table;
using GCGame;
using Module.Log;
using Games.GlobeDefine;
using Games.Item;
using Games.UserCommonData;
using System.Collections.Generic;
using Games.LogicObj;
using Games.Mission;
using System;
public class OptionDialogLogic : UIControllerBase<OptionDialogLogic>
{
#region
public class OptionInfo
{
public string _OptionStr;
public string _OptionFunc;
public Hashtable _OptionParams;
}
#endregion
public GameObject _RootPanel;
public UICameraTexture _CameraTexture; //顶部人物头像
public Text m_NPCTalk;
public Text npcName;
public UISubScollMenu _SubMenu;
private Dictionary<string, OptionInfo> _OptionList = new Dictionary<string, OptionInfo>();
private Tab_NpcDialog m_NpcDialogInfo;
private int m_curOptionDialogId;
private bool m_IsNeedEnterCopyWhenClose = false;
private bool m_IsHasReq = false;
private int m_CopySceneId = -1;
void CleanUp()
{
m_NpcDialogInfo = null;
m_NPCTalk.text = "";
npcName.text = "";
m_curOptionDialogId = -1;
m_IsNeedEnterCopyWhenClose = false;
m_CopySceneId = -1;
m_IsHasReq = false;
}
void Awake()
{
SetInstance(this);
}
private void OnDisable()
{
_CameraTexture.DestroyObj();
}
void Start()
{
}
void FixedUpdate()
{
if (Time.frameCount % 15 != 0)
{
if (gameObject.activeSelf)
{
if (false == Singleton<DialogCore>.GetInstance().IsInDialogArea())
{
//UIManager.CloseUI(UIInfo.MissionInfoController);
OnCloseClick();
}
}
}
}
void OnDestroy()
{
SetInstance(null);
}
void OnEnable()
{
_RootPanel.SetActive(false);
}
public void ReqEneterCopyScene()
{
CG_REQ_ENTER_COPY req = (CG_REQ_ENTER_COPY)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ENTER_COPY);
req.SetCopyid(m_CopySceneId);
req.SendPacket();
m_IsHasReq = true;
}
public void OnCloseClick()
{
if(m_IsNeedEnterCopyWhenClose && !m_IsHasReq)
{
ReqEneterCopyScene();
}
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
public static void ShowOptionDialogUI(Obj_NPC _obj)
{
UIManager.ShowUI(UIInfo.OptionDialogRoot, OnShowOptionDialog, _obj);
}
public void DoOptionDialog(Obj_NPC _obj, Tab_NpcOptionDialog _tabOption)
{
_CameraTexture.gameObject.SetActive(false);
m_NPCTalk.gameObject.SetActive(false);
_SubMenu.gameObject.SetActive(false);
if (_obj == null)
return;
if (_tabOption == null)
return;
if (_tabOption.getOptionFuncCount() <= 0)
return;
string _OptionStr = _tabOption.GetOptionTextbyIndex(0);
string _OptionFunc = _tabOption.GetOptionFuncbyIndex(0);
CleanUp();
_OptionList.Clear();
OptionInfo optionInfo = new OptionInfo();
optionInfo._OptionStr = _OptionStr;
optionInfo._OptionFunc = _OptionFunc;
if (optionInfo._OptionParams == null)
optionInfo._OptionParams = new Hashtable();
optionInfo._OptionParams.Add("Btnid", _tabOption.GetOptionParambyIndex(0));
optionInfo._OptionParams.Add("Npc", _obj);
_OptionList.Add(optionInfo._OptionStr, optionInfo);
_SelectMenu = _OptionStr;
Invoke(_OptionFunc, 0);
}
private static int _NpcSoundLimitTime = -1;
static void PlaySound(int dialogId)
{
Debug.LogError("Play Optional Dialog : " + dialogId);
var DialogLine = TableManager.GetNpcDialogByID(dialogId, 0);
if (GlobalData.NextNpcSoundTime == -1)
{
GameManager.gameManager.SoundManager.StopSoundEffect(GlobalData._PlayingSoundID, 1);
GlobalData._PlayingSoundID = DialogLine.SoundId;
GameManager.gameManager.SoundManager.PlaySoundEffect(DialogLine.SoundId, 1);
}
else
{
if (GlobalData.ServerAnsiTime > GlobalData.NextNpcSoundTime)
{
GameManager.gameManager.SoundManager.StopSoundEffect(GlobalData._PlayingSoundID, 1);
GlobalData._PlayingSoundID = DialogLine.SoundId;
GameManager.gameManager.SoundManager.PlaySoundEffect(DialogLine.SoundId, 1);
if (_NpcSoundLimitTime == -1)
{
_NpcSoundLimitTime = int.Parse(TableManager.GetSystemParamByID(51, 0).StringValue);
}
GlobalData.NextNpcSoundTime += _NpcSoundLimitTime;
}
}
}
static void OnShowOptionDialog(bool bSuccess, object param)
{
if (!bSuccess)
{
LogModule.ErrorLog("load OptionDialog fail");
return;
}
Obj_NPC _Obj = (Obj_NPC)param;
if (_Obj!=null && null != OptionDialogLogic.Instance())
{
//判断点击NPC的操作是否需要出对话框
Tab_NpcDialog NpcDialogInfo = TableManager.GetNpcDialogByID(_Obj.DefaultDialogID, 0);
if (NpcDialogInfo != null)
{
Tab_NpcOptionDialog _tabOption = TableManager.GetNpcOptionDialogByID(NpcDialogInfo.OptionDialogId, 0);
if (_tabOption == null)
return;
if (_tabOption.IsNeedOpenUI == 1)
{
OptionDialogLogic.Instance().DoOptionDialog(_Obj, _tabOption);
return;
}else if(_tabOption.IsNeedOpenUI == 3)
{
OptionDialogLogic.Instance()._RootPanel.SetActive(true);
OptionDialogLogic.Instance().DoHideoptionDialogUI(_Obj);
return;
}
}
OptionDialogLogic.Instance()._RootPanel.SetActive(true);
OptionDialogLogic.Instance().DoShowOptionDialog(_Obj);
PlaySound(_Obj.DefaultDialogID);
}
}
public void ShowOrHideSubMenu(int param)
{
_SubMenu.gameObject.SetActive(param != 3);
}
void UpdateNPCInfo()
{
Obj_NPC TargetNpc = Singleton<DialogCore>.GetInstance().CareNPC;
if (TargetNpc != null)
{
if (TargetNpc.ModelID >= 0)
{
Tab_RoleBaseAttr roleBase = TableManager.GetRoleBaseAttrByID(TargetNpc.BaseAttr.RoleBaseID, 0);
if (roleBase != null)
{
npcName.text = roleBase.Name;
Tab_CharModel charModel = TableManager.GetCharModelByID(TargetNpc.ModelID, 0);
if (charModel != null )
{
_CameraTexture.InitModelPath(charModel.ResPath, charModel, LoadAssetBundle.BUNDLE_PATH_MODEL,false);
//LoadAssetBundle.Instance.LoadModelAsync(charModel.ResPath, LoadModelFinish);
}
}
}
if (m_curOptionDialogId != -1)
{
Tab_NpcOptionDialog _npcOptionInfo = TableManager.GetNpcOptionDialogByID(m_curOptionDialogId, 0);
if (_npcOptionInfo != null)
{
m_NPCTalk.text = StrDictionary.GetClientString_WithNameSex(_npcOptionInfo.CenterText);
}
List<OptionInfo> OptionInfos = new List<OptionInfo>();
for (int i=0;i< m_NpcDialogInfo.getMissionIDCount();i++)
{
int missionId = m_NpcDialogInfo.GetMissionIDbyIndex(i);
//跑环任务特殊处理一下(有OptionDialogId之后会遍历挂载的任务这样会有两个跑环的Btn但是不挂入口任务的话就不显示状态,所以这边要屏蔽掉一个入口任务,只显示一个)
if(missionId == GlobeVar.RINGMISSIONENTERFACEID)
{
continue;
}
Tab_MissionBase mission = TableManager.GetMissionBaseByID(missionId, 0);
if (mission == null)
continue;
if (mission.MissionType == (int)MISSIONTYPE.MISSION_MAIN || mission.MissionType == (int)MISSIONTYPE.MISSION_BRANCH)
{
if (GameManager.gameManager.MissionManager.CanAcceptMission(missionId) == false)
continue;
}
Games.Mission.MissionState misState = (Games.Mission.MissionState)GameManager.gameManager.MissionManager.GetMissionState(missionId);
OptionInfo optionInfo = new OptionInfo();
optionInfo._OptionStr = GetMissionName(missionId); ;
optionInfo._OptionFunc = "AcceptMission";
if (optionInfo._OptionParams == null)
optionInfo._OptionParams = new Hashtable();
optionInfo._OptionParams.Add("state", (misState == Games.Mission.MissionState.Mission_Completed ? 2 : 1));
optionInfo._OptionParams.Add("id", mission.Id);
OptionInfos.Add(optionInfo);
}
OptionInfos.Sort(OptionInfosSort);
for (int i=0;i< OptionInfos.Count;i++)
{
_OptionList[OptionInfos[i]._OptionStr] = OptionInfos[i];
}
}
}
}
public string GetMissionName(int missionId)
{
Tab_MissionDictionary missionDic = TableManager.GetMissionDictionaryByID(missionId, 0);
if(missionDic != null)
{
return missionDic.MissionName;
}else
{
return "";
}
}
private int OptionInfosSort(OptionInfo info1, OptionInfo info2)
{
int state1 = 0;
int state2 = 0;
if(info1._OptionParams!=null && info1._OptionParams.ContainsKey("state"))
{
state1 = (int)info1._OptionParams["state"];
}
if (info2._OptionParams != null && info2._OptionParams.ContainsKey("state"))
{
state2 = (int)info2._OptionParams["state"];
}
int id1 = 0;
int id2 = 0;
if (info1._OptionParams != null && info1._OptionParams.ContainsKey("id"))
{
id1 = (int)info1._OptionParams["id"];
}
if (info2._OptionParams != null && info2._OptionParams.ContainsKey("id"))
{
id2 = (int)info2._OptionParams["id"];
}
if (state1==state2)
{
Tab_MissionBase missinfo1 = TableManager.GetMissionBaseByID(id1, 0);
Tab_MissionBase missinfo2 = TableManager.GetMissionBaseByID(id2, 0);
if (missinfo1 == null)
return 0;
else
{
if(missinfo2 != null)
{
if(missinfo1.MissionType == missinfo2.MissionType)
{
return missinfo1.Id > missinfo2.Id ? 1 : 0;
}
else
{
return missinfo1.MissionType > missinfo2.MissionType ? 1 : 0;
}
}
}
}
else
{
return state1 > state2 ? 1 : 0;
}
return 1;
}
// 已经失效的接口并且UICameraTexture.InitShowGO(GameObject showObj)也早以不能使用
// private void LoadModelFinish(string modelName, GameObject resObj, object param1, object param2, object param3 = null)
// {
// if (resObj == null)
// return;
//
// _CameraTexture.InitShowGO(resObj);
//
// }
//close的时候需要进副本
void DoHideoptionDialogUI(Obj_NPC _Obj)
{
if(_Obj == null)
{
return;
}
_CameraTexture.gameObject.SetActive(true);
m_NPCTalk.gameObject.SetActive(true);
_SubMenu.gameObject.SetActive(false);
CleanUp();
m_NpcDialogInfo = TableManager.GetNpcDialogByID(_Obj.DefaultDialogID, 0);
if (m_NpcDialogInfo != null)
{
m_curOptionDialogId = m_NpcDialogInfo.OptionDialogId;
UpdateNPCInfo();
var _tabOption = TableManager.GetNpcOptionDialogByID(m_curOptionDialogId, 0);
if (_tabOption != null)
{
m_CopySceneId = int.Parse(_tabOption.GetOptionParambyIndex(0));
}
}
m_IsNeedEnterCopyWhenClose = true;
//五秒之后自动进副本
StartCoroutine(AutoEnterrCopy());
}
void DoShowOptionDialog(Obj_NPC _Obj)
{
if (_Obj == null)
return;
_CameraTexture.gameObject.SetActive(true);
m_NPCTalk.gameObject.SetActive(true);
_SubMenu.gameObject.SetActive(true);
CleanUp();
m_NpcDialogInfo = TableManager.GetNpcDialogByID(_Obj.DefaultDialogID,0);
if (m_NpcDialogInfo !=null)
{
m_curOptionDialogId = m_NpcDialogInfo.OptionDialogId;
_SubMenu.Clear();
_OptionList.Clear();
UpdateButtons(_Obj);
UpdateNPCInfo();
foreach (var optionInfo in _OptionList)
{
_SubMenu.PushMenu(optionInfo.Value);
}
_SubMenu.SetBGRect();
}
}
public void BtnAutoCompleteCircle()
{
ReqAutoCompleteCircleMission req = new ReqAutoCompleteCircleMission();
req._flag = 1;
req.SendMsg();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
private void UpdateButtons(Obj_NPC _Obj)
{
var _tabOption = TableManager.GetNpcOptionDialogByID(m_curOptionDialogId, 0);
for (int i = _tabOption.getOptionTextCount(); i >= 0; --i)
{
if (!string.IsNullOrEmpty(_tabOption.GetOptionTextbyIndex(i)))
{
OptionInfo optionInfo = new OptionInfo();
optionInfo._OptionStr = _tabOption.GetOptionTextbyIndex(i);
optionInfo._OptionFunc = _tabOption.GetOptionFuncbyIndex(i);
if (optionInfo._OptionParams == null)
optionInfo._OptionParams = new Hashtable();
optionInfo._OptionParams.Add("Btnid", _tabOption.GetOptionParambyIndex(i));
optionInfo._OptionParams.Add("Npc", _Obj);
if(optionInfo._OptionFunc.Equals("EnterCopy"))
{
optionInfo._OptionParams.Add("needShowEffect", true);
}
_OptionList.Add(optionInfo._OptionStr, optionInfo);
}
}
}
private const float _AutoEnterCopyTime = 5.0f;
IEnumerator AutoEnterrCopy()
{
yield return new WaitForSeconds(_AutoEnterCopyTime);
CG_REQ_ENTER_COPY packet = (CG_REQ_ENTER_COPY)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ENTER_COPY);
packet.Copyid = m_CopySceneId;
packet.SendPacket();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
yield break;
}
public void OnMenuSelect(object optionObj)
{
string optionStr = optionObj as string;
if (_OptionList.ContainsKey(optionStr))
{
_SelectMenu = optionStr;
Invoke(_OptionList[optionStr]._OptionFunc, 0);
}
}
#region option func
private void PlayWeddingMovie()
{
const string movieName = "/Audio/3333.mp4";
if (MarryMovieCtr.Instance)
{
MarryMovieCtr.Instance.PlayMovie(movieName);
}
else
{
UIManager.ShowUI(UIInfo.MarryMovieCtr, (sucess, param) =>
{
MarryMovieCtr.Instance.PlayMovie(movieName);
});
}
}
string _SelectMenu = "";
void OpenAutoTeam()
{
if(GameManager.gameManager.PlayerDataPool.IsHaveTeam())
{
UIManager.ShowUI(UIInfo.TeamInfoRoot);
}
else
{
UIManager.ShowUI(UIInfo.TeamCreateRoot, delegate (bool bSuccess, object param)
{
if (bSuccess)
{
Hashtable hash = new Hashtable();
hash["index"] = 1;
Games.Events.EventDispatcher.Instance.SendMessage(Games.Events.EventId.SELECTTEAMCREATEWNDITEM, hash);
}
});
}
}
void OpenShop()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if(_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string param = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
int shopId = int.Parse(param);
SysShopController.ShowShop(shopId, true);
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
}
void InviteGuildMatch()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Npc"))
{
Obj_NPC _Obj = _OptionList[_SelectMenu]._OptionParams["Npc"] as Obj_NPC;
if (_Obj != null)
{
if (Singleton<ObjManager>.Instance.MainPlayer != null)
Singleton<ObjManager>.Instance.MainPlayer.GuildWarUnionInfoReq(CG_GUILD_UNION_MATCH_REQ.UNION_MATCH_REQ.MEMBER_LIST, _Obj.ServerID);
}
}
}
void OpenUI()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string param = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
UIManager.ShowUI(UIPathData.m_DicUIName[param], null, null);
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
}
void FireWork()
{
if (BanQuetOperationPanel.Instance)
BanQuetOperationPanel.Instance.OnFireWorkBtn();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
//切磋观战
void DualLookFight()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Npc"))
{
Obj_NPC _Obj = _OptionList[_SelectMenu]._OptionParams["Npc"] as Obj_NPC;
if(_Obj != null)
{
if(Singleton<ObjManager>.Instance.MainPlayer!=null)
Singleton<ObjManager>.GetInstance().MainPlayer.ReqDuelOption(CG_COMPETITION_OPTION.COMPETITION_TYPE.SEEWAR, 0, _Obj.ServerID);
}
}
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
void OpenPopUI()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string param = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
Obj_NPC _Obj = null;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Npc"))
{
_Obj = _OptionList[_SelectMenu]._OptionParams["Npc"] as Obj_NPC;
}
UIManager.ShowUI(UIPathData.m_DicUIName[param], delegate(bool bSucess, object _Param) {
if(bSucess)
{
Games.Events.EventDispatcher.Instance.Dispatch(Games.Events.EventId.DialogWithNPC, _Param);
}
}, _Obj.BaseAttr.RoleBaseID);
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
}
void EnterCopy()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string param = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
int copyId = int.Parse(param);
CG_REQ_ENTER_COPY packet = (CG_REQ_ENTER_COPY)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ENTER_COPY);
packet.Copyid = copyId;
packet.SendPacket();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
}
void BackGuild()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string param = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
if(param=="-1")
{
GameManager.gameManager.AutoSearch.BackGuild(GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid, -1, 0, 0);
return;
}
int roleId = 0;
string[] poss = param.Split(',');
float x = 0;
float z = 0;
if (poss.Length > 0)
int.TryParse(poss[0], out roleId);
if (poss.Length > 1)
float.TryParse(poss[1], out x);
if (poss.Length > 2)
float.TryParse(poss[2], out z);
GameManager.gameManager.AutoSearch.BackGuild(GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid, roleId, x, z);
}
}
void EnterCopyNpcObj()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string param = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
int copyId = int.Parse(param);
Obj_NPC _Obj = null;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Npc"))
{
_Obj = _OptionList[_SelectMenu]._OptionParams["Npc"] as Obj_NPC;
}
CG_REQ_ENTER_COPY packet = (CG_REQ_ENTER_COPY)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ENTER_COPY);
packet.Copyid = copyId; //
packet.SetNpcObjId(_Obj.ServerID);
packet.SendPacket();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
}
//帮会联赛召唤BOSS
void MatchAskBoss()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string param = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
int indexID = int.Parse(param);
Obj_NPC _Obj = null;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Npc"))
{
_Obj = _OptionList[_SelectMenu]._OptionParams["Npc"] as Obj_NPC;
}
if (_Obj == null)
return;
CG_CALL_MONSTER send = (CG_CALL_MONSTER)PacketDistributed.CreatePacket(MessageID.PACKET_CG_CALL_MONSTER);
send.SetNpcId(_Obj.ServerID);
send.SetParam(indexID);
send.SendPacket();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
}
//帮会联赛提交矿石
void MatchGold()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
Obj_NPC _Obj = null;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Npc"))
{
_Obj = _OptionList[_SelectMenu]._OptionParams["Npc"] as Obj_NPC;
}
if (_Obj == null)
return;
CG_GUILD_UNION_MATCH_REQ send = (CG_GUILD_UNION_MATCH_REQ)PacketDistributed.CreatePacket(MessageID.PACKET_CG_GUILD_UNION_MATCH_REQ);
send.SetType((int)CG_GUILD_UNION_MATCH_REQ.UNION_MATCH_REQ.COMMIT_BUFF);
send.SetParam(_Obj.ServerID);
send.SendPacket();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
void CallNPCBUFF()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
int param = -1;
Obj_NPC _Obj = null;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string paramStr = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
int.TryParse(paramStr, out param);
}
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Npc"))
{
_Obj = _OptionList[_SelectMenu]._OptionParams["Npc"] as Obj_NPC;
}
if (_Obj == null)
return;
CG_CLICK_BUFF_NPC send = (CG_CLICK_BUFF_NPC)PacketDistributed.CreatePacket(MessageID.PACKET_CG_CLICK_BUFF_NPC);
send.SetIndex(param);
send.SetNpcid(_Obj.ServerID);
send.SendPacket();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
//客户端对完话后关闭
void SendOptionToServerAndClose()
{
SendOptionToServer();
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
//客户端对完话后如果服务器需要知道,就通过这条协议发过去
void SendOptionToServerAndAutoFight()
{
SendOptionToServer();
if(Singleton<ObjManager>.Instance.MainPlayer!=null)
Singleton<ObjManager>.Instance.MainPlayer.EnterAutoCombat();
}
//客户端对完话后如果服务器需要知道,就通过这条协议发过去
void SendOptionToServer()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
int param = -1;
Obj_NPC _Obj = null;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string paramStr = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
int.TryParse(paramStr, out param);
}
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Npc"))
{
_Obj = _OptionList[_SelectMenu]._OptionParams["Npc"] as Obj_NPC;
}
if (_Obj == null || param <= 0)
return;
CG_NPC_ADDITION_ACTION send = (CG_NPC_ADDITION_ACTION)PacketDistributed.CreatePacket(MessageID.PACKET_CG_NPC_ADDITION_ACTION);
send.SetActionType(param);
send.SetObjId(_Obj.ServerID);
send.SendPacket();
//UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
//离开监狱
void LeaveWanton()
{
CG_CHANGE_MAJORCITY send = (CG_CHANGE_MAJORCITY)PacketDistributed.CreatePacket(MessageID.PACKET_CG_CHANGE_MAJORCITY);
send.SetType(1);
send.SendPacket();
}
void OpenCangku()
{
UIManager.ShowUI(UIInfo.CangKu);
UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
void AcceptMission()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
int id = -1;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string btnID = (string)_OptionList[_SelectMenu]._OptionParams["Btnid"];
if (int.TryParse(btnID, out id) == false)
id = -1;
}
if(_OptionList[_SelectMenu]._OptionParams.ContainsKey("id"))
{
id = (int)_OptionList[_SelectMenu]._OptionParams["id"];
}
int result = 0;
if(id > 0)
{
if(GameManager.gameManager.MissionManager.CanAcceptMissionTip(id,true)==0)
{
UIManager.CloseUI(UIInfo.OptionDialogRoot);
MissionInfoController.ShowMissionDialogUI(id);
return;
}
}
if(result == -9) //需要组队但是没有队伍
{
OpenAutoTeam();
}
}
// 回血NPC对话相关
void DoRecover()
{
Obj_MainPlayer mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
if (mainPlayer == null)
{
return;
}
long nCurHP = mainPlayer.BaseAttr.HP;
long nMaxHp = mainPlayer.BaseAttr.MaxHP;
int nCurMP = mainPlayer.BaseAttr.MP;
int nMaxMP = mainPlayer.BaseAttr.MaxMP;
if (nCurHP >= nMaxHp && nCurMP >= nMaxMP)
{
mainPlayer.SendNoticMsg(false,"#{3291}");
return;
}
else
{
long nTempNeedMoney = ((nMaxHp - nCurHP)*7 + (nMaxMP - nCurMP)*77) * 115;
long nNeedMoney = nTempNeedMoney / 100000 + (nTempNeedMoney > 0 ? 1 : 0);
if (nNeedMoney < 0)
{
return;
}
string strTip = StrDictionary.GetClientDictionaryString("#{3292}", nNeedMoney);
MessageBoxLogic.OpenOKCancelBox(strTip, null, OnRecoverOk, OnCloseClick);
}
}
void OnRecoverOk()
{
Obj_NPC TargetNpc = Singleton<DialogCore>.GetInstance().CareNPC;
if (TargetNpc == null)
{
return;
}
if (Singleton<ObjManager>.Instance.MainPlayer)
{
CG_ASK_RECOVER Pack = (CG_ASK_RECOVER)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_RECOVER);
Pack.ObjID = TargetNpc.ServerID;
Pack.SendPacket();
}
}
//改名对话相关
void OnChangeNameForCombineServer()
{
if (!Singleton<ObjManager>.GetInstance().MainPlayer)
{
return;
}
if (Singleton<ObjManager>.GetInstance().MainPlayer.IsNameWithCombineServerSign())
{
}
else
{
Singleton<ObjManager>.GetInstance().MainPlayer.SendNoticMsg(false, "#{3341}");
}
}
// 跑商选项相关 1:低级跑商2高级跑商
void DoAcceptPaoShang(int nOptIndex)
{
Obj_MainPlayer _mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
if (_mainPlayer == null)
{
return;
}
bool bRetMissionPaoshangH = GameManager.gameManager.MissionManager.IsHaveMission(GlobeVar.PAOSHANG_MISSIONID_H);
bool bRetMissionPaoshangL = GameManager.gameManager.MissionManager.IsHaveMission(GlobeVar.PAOSHANG_MISSIONID_L);
if (bRetMissionPaoshangH || bRetMissionPaoshangL)
{
// 不让接 给个提示吧
_mainPlayer.SendNoticMsg(false, "#{3926}");
return;
}
// 条件都去服务器检测吧
CG_ASK_PAOSHANG_ACCEPT Pack = (CG_ASK_PAOSHANG_ACCEPT)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_PAOSHANG_ACCEPT);
Pack.Type = nOptIndex;
Pack.SendPacket();
}
void OpenMasterMatch()
{
if (_OptionList[_SelectMenu]._OptionParams == null)
return;
if (_OptionList[_SelectMenu]._OptionParams.ContainsKey("Btnid"))
{
string param = _OptionList[_SelectMenu]._OptionParams["Btnid"] as string;
int master = int.Parse(param);
if (master == 0 || master == 1)
{
GameManager.gameManager.PlayerDataPool.m_MasterInfo.SelectMatchInfo(master > 0);
}
else if (master == 2)
{
if (GameManager.gameManager.PlayerDataPool.m_MasterInfo._MyApprentices.Count > 0)
{
MasterInfoLogic.ShowMasterRelieve();
}
else
{
GUIData.AddNotifyData("#{7218}");
}
}
else if (master == 3)
{
if (GameManager.gameManager.PlayerDataPool.m_MasterInfo._MyMaster != null)
{
GameManager.gameManager.PlayerDataPool.m_MasterInfo.MasterRelieve(GameManager.gameManager.PlayerDataPool.m_MasterInfo._MyMaster.Guid, GameManager.gameManager.PlayerDataPool.m_MasterInfo._MyMaster.Name);
}
else
{
GUIData.AddNotifyData("#{7219}");
}
}
//UIManager.CloseUI(UIInfo.OptionDialogRoot);
}
}
#endregion
}