Main/Assets/Code/Logic/Chat/ChatNode.cs
2025-01-25 04:38:09 +08:00

1058 lines
40 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Thousandto.Code.Center;
using Thousandto.Plugins.Common;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Thousandto.Core.RootSystem;
using Thousandto.Core.Base;
using System.Text;
using Thousandto.Code.Global;
using Thousandto.Cfg.Data;
using System.IO;
using Thousandto.Code.Logic.LocalPlayerBT;
namespace Thousandto.Code.Logic
{
/// <summary>
/// 聊天节点,跟每一个控件相关
/// </summary>
public class ChatNode
{
private class MyWords
{
public static string Join_now = DeclareMessageString.Get(DeclareMessageString.C_CHATNODE_JOIN_IN);//Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_CHAT_LIJIJIARU);
}
public int Type;
public string Param1// param --> type
{
//写成属性是为了在Param1修改的时候重置_displayText的值避免删除操作时_displayText没有变
get { return _param1; }
set { _param1 = value; _displayText = null; }
}
private string _param1;
public string Param2;
public string Param3;
public string VoiceKey; //如果是语音节点则需要设置这个key
public ItemBase ItemParam;
public int LabelType; //接收聊天信息后,设置显示的颜色
public int ChannelID; //频道id, 接收消息后才赋值
public int Width; //接收消息后赋值
public int Height; //接收消息后赋值
public int ImgStartX; //如果是图片类型这里记录图片应该存放的坐标x起点
//在第几行
public int Line;
public bool IgnoreInPrivateChat; //当前节点不在私聊界面显示
public bool ShowRedPoint; //显示红点
public bool IsChannelNode; //是否频道节点
public string Position; //坐标节点,用来保存坐标值
private ChatNode _baseChatNode; //关联的node
private GameObject _go;
private static int _playAudioCounter; //录音播放计数器, 全局静态的
private int _curPlayerAudio; //当前播放录音计数值
//逻辑代码使用NGUI内容的中间转换类
private IChatNodeTool _chatNodeTool;
private bool _audioCoroRuning; //语音协程正在运行,避免多次点击同一个语音导致播放异常的问题
private string _displayText;
private string _displayBBCodeText;
public ulong specialId = 0;
public bool isPrivateChatNode = false;
public bool IsBeginNode = false;
public bool IsEndNode = false;
//当前节点转化成的ui
public GameObject GO
{
get { return _go; }
set
{
if (_go != null)
{
Destory();
}
_go = value;
}
}
public ChatNode BaseChatNode
{
get
{
return _baseChatNode;
}
}
public ChatNode()
{
Type = (int)TNodeType.Text;
Param1 = "";
Param2 = "";
Param3 = "";
LabelType = -1;
ChannelID = -1;
GO = null;
Line = 0;
Width = 0;
Height = 0;
VoiceKey = "";
_displayText = "";
_displayBBCodeText = "";
IgnoreInPrivateChat = false;
IsChannelNode = false;
ShowRedPoint = true;
ItemParam = null;
IsBeginNode = true;
IsEndNode = true;
}
public ChatNode(ChatNode nd)
{
this.Type = nd.Type;
this.Param1 = nd.Param1;
this.Param2 = nd.Param2;
this.Param3 = nd.Param3;
this.Position = nd.Position;
this.VoiceKey = nd.VoiceKey;
this.LabelType = nd.LabelType;
this.Line = nd.Line;
this.ChannelID = nd.ChannelID;
this.ImgStartX = nd.ImgStartX;
this.Width = nd.Width;
this.Height = nd.Height;
this._displayText = "";
this._displayBBCodeText = "";
this.IgnoreInPrivateChat = nd.IgnoreInPrivateChat;
this.IsChannelNode = nd.IsChannelNode;
this._baseChatNode = nd;
this.ShowRedPoint = nd.ShowRedPoint;
this.specialId = nd.specialId;
this.ItemParam = nd.ItemParam;
this.IsBeginNode = nd.IsBeginNode;
this.IsEndNode = nd.IsEndNode;
}
//显示红点
public void EnableRedPoint(bool show)
{
if (show == ShowRedPoint)
{
return;
}
ShowRedPoint = show;
if (_baseChatNode != null)
{
_baseChatNode.ShowRedPoint = show;
}
}
//设置转换工具
public void SetTool(IChatNodeTool tool)
{
_chatNodeTool = tool;
}
/// <summary>
/// 建立gameObject对象用来显示在界面上
/// 不同节点类型生成的GO是不同的
/// </summary>
public GameObject GenGO(MonoBehaviour label)
{
Destory();
if (Type == (int)TNodeType.Image || Type == (int)TNodeType.Audio)
{
return null;
}
if (Type == (int)TNodeType.Item || Type == (int)TNodeType.Equipment)
{
int color = getItemOrEquipColorId();
MonoBehaviour colorLabel = (MonoBehaviour)GameCenter.ChatSystem.GetLabelByColorID(color);
if (colorLabel != null)
{
label = colorLabel;
}
else
{
//UnityEngine.Debug.LogError("没有找到对应的color label color=" + color);
return null;
}
}
if (Type == (int)TNodeType.Equipment)
{
}
GO = GameObject.Instantiate(label.transform.gameObject) as GameObject;
return GO;
}
/// <summary>
/// 拷贝属性
/// </summary>
/// <param name="from"></param>
/// <param name="to"></param>
/// <returns></returns>
public MonoBehaviour CopyLabelProperty(MonoBehaviour labelSkin, MonoBehaviour to)
{
MonoBehaviour from = null;
if (Type == (int)TNodeType.Item || Type == (int)TNodeType.Equipment)
{
int color = getItemOrEquipColorId();
MonoBehaviour colorLabel = (MonoBehaviour)GameCenter.ChatSystem.GetLabelByColorID(color);
if (colorLabel != null)
{
from = colorLabel;
}
}
else
{
from = labelSkin;
}
return _chatNodeTool.CopyLabelProperty(from, to);
}
//获取颜色id
private int getItemOrEquipColorId()
{
int itemId = 0;
int.TryParse(getItemOrEquipIdStr(Param2), out itemId);
switch (Type)
{
case (int)TNodeType.Item:
case (int)TNodeType.Equipment:
if(ItemParam != null)
{
return ItemParam.Quality;
}
break;
}
return -1;
}
private string getItemOrEquipIdStr(string param2)
{
if (param2.Contains("_"))
{
string[] values = param2.Split('_');
return values[0];
}
return param2;
}
/// <summary>
/// 对已生成的go对象添加必要的组件已经相应点击函数
/// </summary>
public void AddCommponentToGO(bool enableClick = true)
{
if (_chatNodeTool == null)
{
//UnityEngine.Debug.LogError("chatNode工具类为null");
return;
}
if (ChannelID == (int)ChatChanelType.PERSONAL)
{
_chatNodeTool.AddCommponentToGO(this, onClickLabel, enableClick);
}
else
_chatNodeTool.AddCommponentToGO(this, null, enableClick);
}
/// <summary>
/// 结束动画播放
/// </summary>
public void StopPlayAnim()
{
if (_chatNodeTool == null)
{
//UnityEngine.Debug.LogError("chatNode工具类为null");
return;
}
_chatNodeTool.StopAnim();
}
/// <summary>
/// 格式化输入字符串,用于发送消息
/// </summary>
/// <returns></returns>
public string GetTransferText()
{
if (Type == (int)TNodeType.Private)
return string.Format("<t={0}>{1},{2},{3}</t>", Type, Param3, Param2, Param1);
else if (Type == (int)TNodeType.Text)
{
// string tmp = Param1.Replace("<", "&lt;");
// tmp = tmp.Replace(">", "&gt;");
return string.Format("<t={0}>{1},{2},{3}</t>", Type, Param3, Param2, Param1);
}
else if (Type == (int)TNodeType.CMD)
{
return Param1;
}
else
return string.Format("<t={0}>{1},{2},{3}</t>", Type, Param3, Param2, Param1);
}
private string removeColorTag(string text, List<ChatColorFlag> colorflags)
{
int start = 0;
int end = 0;
Stack<ChatColorFlag> stack = null;
if (colorflags != null)
{
colorflags.Clear();
stack = new Stack<ChatColorFlag>();
}
StringBuilder sb = new StringBuilder();
end = text.IndexOf("[", start);
while (end >= 0)
{
var nextTag = text.IndexOf("[", end + 1);
if (nextTag - end == 1)
{
end = nextTag;
continue;
}
int offset = text.IndexOf("]", end) - end;
if (offset < 0)
{
break;
}
sb.Append(text.Substring(start, end - start));
string colorTag = text.Substring(end, offset + 1);
if (offset == 7)
{
//不在颜色区间中
if (colorTag.CompareTo("[000000]") < 0 || colorTag.CompareTo("[ffffff]") > 0)
{
sb.Append(colorTag);
}
else
{
if (colorflags != null)
{
stack.Push(new ChatColorFlag() { ColorText = colorTag, Left = sb.Length });
}
}
}
else if (offset == 2)
{
if (colorTag != "[-]")
{
sb.Append(colorTag);
}
else
{
if (colorflags != null)
{
var cr = stack.Pop();
cr.Right = sb.Length;
colorflags.Add(cr);
}
}
}
else
sb.Append(colorTag);
start = end + offset + 1;
end = text.IndexOf("[", start);
}
sb.Append(text.Substring(start));
if (colorflags != null)
{
//说明有些颜色没有结束符--加上他.
while (stack.Count > 0)
{
var cr = stack.Pop();
cr.Left = sb.Length;
colorflags.Add(cr);
}
}
return sb.ToString();
}
/// <summary>
/// 生成显示在界面上的内容
/// </summary>
/// <returns></returns>
public string GetDisplayText(bool useForCalcWidth = true, bool ignoreUrl = true, List<ChatColorFlag> list = null)
{
if (!string.IsNullOrEmpty(_displayText) && useForCalcWidth)
{
return _displayText;
}
switch ((TNodeType)Type)
{
case TNodeType.CMD:
case TNodeType.TextEx:
case TNodeType.Text:
if (useForCalcWidth)
{
_displayText = removeColorTag(Param1, list);
}
else
_displayText = (Param1);
break;
case TNodeType.PlayerEx:
case TNodeType.Player:
//以防名字里面有颜色值
if (Param1 != null && Param1.CompareTo("000000") >= 0 &&
Param2.CompareTo("FFFFFF") <= 0)
{
_displayText = Param1;
}
else
{
_displayText = string.Format("[{0}]", Param1);
}
break;
case TNodeType.ImageEx:
case TNodeType.BigImage:
case TNodeType.Image:
_displayText = Param1;
break;
case TNodeType.Position:
{
//做了分割,不再加[] 括号
if (Param1.StartsWith("<"))
{
Param1 = Param1.Replace("<", string.Empty);
_displayText = Param1;
}
if (Param1.EndsWith(">"))
{
Param1 = Param1.Replace(">", string.Empty);
_displayText = Param1;
}
else
{
//if (Param1.Contains("[") && Param1.Contains("]"))
//{
// int start = 0;
// int end = 0;
// int offset = 0;
// start = Param1.IndexOf("[", start);
// offset = Param1.IndexOf("]", end) - start;
// Param1 = Param1.Substring(start + 1, offset - 1);
//}
int mapId = -1;
if (Param2.IndexOf("_") > 0)
{
string[] args = Param2.Split('_');
int.TryParse(args[0], out mapId);
}
else
int.TryParse(Param2, out mapId);
DeclareMapsetting map = DeclareMapsetting.Get(mapId);
if (map != null)
{
_displayText = string.Format(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_CHAT_DIANJICHUANSONG), map.Name, Param1);
}
else
{
_displayText = string.Format("[{0}]", Param1);
}
}
break;
}
case TNodeType.Private:
_displayText = Param1;
break;
case TNodeType.Equipment:
case TNodeType.Item:
_displayText = Param1;
break;
case TNodeType.Team:
_displayText = "";
break;
case TNodeType.Audio:
_displayText = string.Format("[Audio]{0}\'", Param2);
break;
case TNodeType.Function:
var parseType = ParseFuncNode();
if (parseType == FuncNodeType.Guild_Jion || parseType == FuncNodeType.Tean_Jion || parseType == FuncNodeType.FuDiHelp)
{
if (string.IsNullOrEmpty(Param1))
{
_displayText = MyWords.Join_now;
}
else
_displayText = Param1;
}
else if (parseType == FuncNodeType.FunctionStartId)
{
if (useForCalcWidth || ignoreUrl)
_displayText = Param1;
else
_displayText = string.Format("[url={1}][u]{0}[/u][/url]", Param1, Param2);
}
else if (parseType == FuncNodeType.FightSoul)
{
//if(string.IsNullOrEmpty(Param1))
//{
// int cfgId = int.Parse(Param2);
// Param1 = "[" + DeclareFightingSoul.Get(cfgId).Name + "]";
//}
//if(useForCalcWidth)
//{
// _displayText = Param1;
//}
//else
//{
// int cfgId = int.Parse(Param2);
// int qulity = DeclareFightingSoul.Get(cfgId).Quality;
// var colorStr = ItemBase.GetQualityStrColor((QualityCode)qulity);
// _displayText = string.Format("[{0}]{1}[-]", colorStr, Param1);
//}
}
else if (parseType == FuncNodeType.OpenUI)
{
_displayText = Param1;
}
else
{
_displayText = "";
}
break;
default: break;
}
return _displayText;
}
public FuncNodeType ParseFuncNode()
{
if ((TNodeType)Type != TNodeType.Function)
{
return FuncNodeType.Default;
}
int funcNodeType = 0;
if (int.TryParse(Param3, out funcNodeType))
{
FuncNodeType nodeType = (FuncNodeType)funcNodeType;
return nodeType;
}
return FuncNodeType.Default;
}
public void SetDisplayText(string text)
{
switch ((TNodeType)Type)
{
case TNodeType.Equipment:
case TNodeType.Item:
Param1 = text;
break;
case TNodeType.Function:
var parseType = ParseFuncNode();
if (parseType == FuncNodeType.Guild_Jion || parseType == FuncNodeType.Tean_Jion)
{
Param1 = text;
}
break;
case TNodeType.CMD:
case TNodeType.TextEx:
case TNodeType.Text:
case TNodeType.PlayerEx:
case TNodeType.Player:
case TNodeType.ImageEx:
case TNodeType.BigImage:
case TNodeType.Image:
case TNodeType.Position:
case TNodeType.Private:
case TNodeType.Team:
case TNodeType.Audio:
default:
Param1 = text;
break;
}
}
/// <summary>
/// 生成显示在界面上的内容
/// contentUseDefaultColor: 0 读取配置颜色, 1 固定小聊天窗颜色, 2 固定大聊天窗颜色
/// </summary>
/// <returns></returns>
public string GetDisplayTextBBCode(int contentUseDefaultColor = 1, bool ignoreUrl = false, int realChannelId = -1)
{
if (!string.IsNullOrEmpty(_displayBBCodeText))
{
return _displayBBCodeText;
}
if (LabelType == -1)
{
SetLabelType(ChannelID);
}
//使用固定配置的颜色大小聊天窗text文字颜色是固定的不区分频道
string color = GameCenter.ChatSystem.GetLabelColor(LabelType);
//频道节点的颜色要区分频道
if (!IsChannelNode && (TNodeType)Type == TNodeType.Text)
{
color = GameCenter.ChatSystem.GetLabelColor(LabelType, contentUseDefaultColor);
//小聊天窗,并且不是系统和招募信息,显示蓝色字体
if (contentUseDefaultColor == 1 &&
ChannelID != (int)ChatChanelType.SYSTEM &&
ChannelID != (int)ChatChanelType.JOINTEAM)
color = "00f4ff";
if (contentUseDefaultColor == 2 && realChannelId == (int)ChatChanelType.SYSTEM)
{
//如果是系统频道并且 contentUseDefaultColor == 2
color = "ffffff";//"1f7f1a";
}
if (contentUseDefaultColor == 2 && realChannelId == (int)ChatChanelType.ChuanWen)
{
color = "f97602";
}
}
//打开跑马灯的超链接
ignoreUrl = true;
string text = GetDisplayText(false, ignoreUrl);
switch ((TNodeType)Type)
{
case TNodeType.Equipment:
case TNodeType.Item:
int colorId = getItemOrEquipColorId();
color = ItemBase.GetQualityStrColor(colorId);
break;
case TNodeType.Function:
int functionType = int.TryParse(Param3, out functionType) ? functionType : -1;
if (functionType == 7)
{
string[] strs = Param2.Split('_');
if (strs.Length >= 3)
{
color = strs[2];
}
}
break;
}
//不加下划线
//var parseType = ParseFuncNode();
//if (parseType == FuncNodeType.Guild_Jion || parseType == FuncNodeType.Tean_Jion)
//{
// _displayBBCodeText = string.Format("[{0}][u]{1}[-][-]", color, text);
//}
//else
//if (text.EndsWith("[-]") == false || text.StartsWith("[") == false)
if ((TNodeType)Type == TNodeType.Position || (ChannelID == (int)ChatChanelType.JOINTEAM && (TNodeType)Type != TNodeType.Text
&& (TNodeType)Type != TNodeType.Player))
{
_displayBBCodeText = text;
}
else
{
if(IsBeginNode && IsEndNode)
{
_displayBBCodeText = string.Format("[{0}]{1}[-]", color, text);
}
else if (IsBeginNode)
{
_displayBBCodeText = string.Format("[{0}]{1}", color, text);
}
else if (IsEndNode)
{
_displayBBCodeText = string.Format("{0}[-]", text);
}
else
{
_displayBBCodeText = text;
}
}
//else
//_displayBBCodeText = text;
return _displayBBCodeText;
}
/// <summary>
/// 设置节点要显示的颜色风格
/// </summary>
/// <param name="channelId"></param>
public void SetLabelType(int channelId)
{
if (ChannelID == -1 && channelId != -1)
{
ChannelID = channelId;
}
int type = GameCenter.ChatSystem.GetLabelTypeByChannel(ChannelID);
//通过节点类型,获取字体类型,变颜色用
switch ((TNodeType)Type)
{
case TNodeType.Position:
type = (int)TLabelType.Position;
break;
case TNodeType.Player:
//type = (int)TLabelType.Player; // 名字节点颜色随频道颜色
break;
case TNodeType.Equipment:
type = (int)TLabelType.Team;
break;
case TNodeType.Item:
type = (int)TLabelType.Team;
break;
case TNodeType.Function:
type = (int)TLabelType.Position;
break;
}
LabelType = type;
}
//相应点击事件
public void TriggerClick(GameObject go)
{
onClickLabel(go);
}
IEnumerator playAudioIE(GameObject obj, ChatNode node)
{
if (_audioCoroRuning)
{
yield break;
}
_audioCoroRuning = true;
int lenght = int.Parse(node.Param2);
obj.transform.Find("RedPoint").gameObject.SetActive(false);
//UnityEngine.Debug.LogError("Click audio ID,Length = " + Param1 + "," + Param2);
GameObject indicateGo = obj.transform.Find("Left").gameObject;
if (!indicateGo.activeSelf)
{
indicateGo = obj.transform.Find("Right").gameObject;
}
bool show = true;
lenght *= 5;
while (lenght > 0 && _curPlayerAudio == _playAudioCounter && GameCenter.ChatSystem.IsAudioPlaying())
{
show = !show;
yield return new WaitForSeconds(0.2f);
lenght--;
if (node.GO != null)
{
indicateGo.SetActive(show);
}
}
if (node.GO != null)
{
indicateGo.SetActive(true);
}
//没有在录音时,恢复背景音乐
if (!GameCenter.ChatSystem.IsRecording())
GameCenter.ChatSystem.ResumeAllSound();
_audioCoroRuning = false;
}
private void onAudioReceive()
{
GameCenter.ChatSystem.Coro.StartCoroutine(playAudioIE(GO, this));
}
private void onClickLabel(GameObject obj)
{
int id = 0;
//UnityEngine.Debug.Log("Trigger click: " + (TNodeType)Type + " -> " + Param1);
switch ((TNodeType)Type)
{
case TNodeType.Audio:
if (_audioCoroRuning)
{
GameCenter.ChatSystem.StopPlayingAudio();
return;
}
_playAudioCounter++;
_curPlayerAudio = _playAudioCounter;
EnableRedPoint(false);
GameCenter.ChatSystem.ReqVoiceData(VoiceKey, onAudioReceive);
break;
case TNodeType.Image:
case TNodeType.BigImage:
case TNodeType.Private: //return "[" + Locale.TextManager.Instance.GetText(5, "H") + "]" + Param1 + ":";
case TNodeType.Text:
case TNodeType.TextEx:
break;
case TNodeType.Position:
{
if (GameCenter.GameSceneSystem.GetLocalPlayer().IsDead())
{
GameCenter.MsgPromptSystem.ShowPrompt(DeclareMessageString.Get(DeclareMessageString.Die_CanNotOperate));
return;
}
int mapId = int.TryParse(Param2, out mapId) ? mapId : 0;
if (mapId != 0)
{
float x = 0;
float z = 0;
int param = 0;
string[] strs = Position.Split(',');
if (strs.Length >= 3)
{
x = float.TryParse(strs[0], out x) ? x : 0;
z = float.TryParse(strs[1], out z) ? z : 0;
param = int.TryParse(strs[2], out param) ? param : 0;
}
PlayerBT.crossBD.Write(mapId, new Vector3(x, 0, z), param);
}
}
break;
case TNodeType.Player: //return string.Format("[{0}]", Param1);
case TNodeType.PlayerEx:
{
//ulong playerID = 0;
//ulong.TryParse(Param2, out playerID);
//if (playerID != 0)
//{
// // ChatPrivateInfo info = new ChatPrivateInfo();
// // info.ID = playerID;
// // info.Name = Param1;
// //
// // GameCenter.ChatPrivateSystem.AddChatPlayer(info);
// // GameCenter.ChatPrivateSystem.Open(playerID);
// GameCenter.PopMenuSystem.Open(playerID, Param1);
//}
}
break;
case TNodeType.Equipment: //return string.Format("[{0}]", Param1);
{
if(ItemParam != null)
{
GameCenter.LuaSystem.Adaptor.ShowItemTips(ItemParam, obj);
}
}
break;
case TNodeType.Item: //return string.Format("[{0}]", Param1);
{
if (int.TryParse(Param2, out id))
{
if (GO == null)
{
GameCenter.LuaSystem.Adaptor.ShowItemTips(id, obj, false);
}
else
{
GameCenter.LuaSystem.Adaptor.ShowItemTips(id, GO, false);
}
}
}
break;
case TNodeType.Function: //功能节点
{
if (GameCenter.GameSceneSystem.GetLocalPlayer().IsDead())
{
GameCenter.MsgPromptSystem.ShowPrompt(DeclareMessageString.Get(DeclareMessageString.Die_CanNotOperate));
return;
}
int funcType = 0;
if (int.TryParse(Param3, out funcType))
{
if (funcType == (int)FuncNodeType.Guild_Jion)
{
//UnityEngine.Debug.Log("快速加入帮会->" + Param2);
//string[] args = Param2.Split('_');
ulong guildId = 0;
if (ulong.TryParse(Param2, out guildId))
{
LocalPlayer lp = GameCenter.GameSceneSystem.GetLocalPlayer();
if (lp != null && lp.GuildID != 0)
{
GameCenter.MsgPromptSystem.ShowPrompt(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_CHAT_YIYOUXIANMENG));
}
else
{
var info = GameCenter.MainFunctionSystem.GetFunctionInfo(FunctionStartIdCode.Guild);
if (info != null)
{
if (info.IsEnable == false)
{
GameCenter.MsgPromptSystem.ShowPrompt(string.Format(DeclareMessageString.Get(DeclareMessageString.C_MAIN_GONGNENGWEIKAIQI), info.Cfg.FunctionName));
return;
}
}
else
{
return;
}
MSG_Guild.ReqJoinGuild msg = new MSG_Guild.ReqJoinGuild();
msg.ids.Add(guildId);
msg.Send();
}
}
//int level = int.Parse(args[1]);
//GameCenter.MsgPromptSystem.ShowPrompt(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_CHATNODE_APPLY_FINISH));
}
if (funcType == (int)FuncNodeType.Tean_Jion)
{
ulong teamId = 0;
if (ulong.TryParse(Param2, out teamId))
{
if (GameCenter.LuaSystem.Adaptor.IsTeamExist())
{
GameCenter.MsgPromptSystem.ShowPrompt(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.TEAM_YOUHAVEDTEAM));
}
else
{
MSG_Team.ReqApplyEnter msg = new MSG_Team.ReqApplyEnter();
msg.teamId = (long)teamId;
msg.Send();
}
//GameCenter.MsgPromptSystem.ShowPrompt(DeclareMessageString.Get(DeclareMessageString.C_CHATNODE_APPLY_FINISH));
}
}
if (funcType == (int)FuncNodeType.ToGuildNPC)
{
ulong npcId = 0;
if (ulong.TryParse(Param2, out npcId))
{
//GameCenter.GuildSystem.OnEnterGuildMapTalkToNpc((int)npcId);
}
}
if (funcType == (int)FuncNodeType.FuDiHelp)
{
//福地支援
int cfgId = 0;
if (int.TryParse(Param2, out cfgId))
{
LocalPlayer lp = GameCenter.GameSceneSystem.GetLocalPlayer();
if (lp != null && lp.ID != specialId)
{
//发送进入副本消息
DeclareGuildBattleBoss cfg = DeclareGuildBattleBoss.Get(cfgId);
if (cfg != null)
{
//请求该支援消息是否有效
var req = new MSG_GuildActivity.ReqFudiCanHelp();
req.cfgId = cfgId;
req.Send();
}
}
}
}
if (funcType == (int)FuncNodeType.FunctionStartId)
{
if (Param2.IndexOf("_") > 0)
{
string[] args = Param2.Split('_');
int functionId = int.Parse(args[0]);
int argParam = int.Parse(args[1]);
GameCenter.MainFunctionSystem.DoFunctionCallBack(functionId, argParam);
}
else
{
int functionId = int.Parse(Param2);
////专门护送
//if(functionId == 2340000)
//{
// GameCenter.HuSongSystem.SearchToNpc();
// return;
//}
GameCenter.MainFunctionSystem.DoFunctionCallBack(functionId, null);
}
}
if (funcType == (int)FuncNodeType.FightSoul)
{
int cfgId = int.Parse(Param2);
//FightSoulSystem.ShowTempItemTips(cfgId);
}
if (funcType == (int)FuncNodeType.OpenUI)
{
string[] strs = Param2.Split('_');
if (strs.Length >= 2)
{
int uiID = int.TryParse(strs[1], out uiID) ? uiID : 0;
long param = long.TryParse(strs[0], out param) ? param : 0;
if (param == 0)
{
GameCenter.MainFunctionSystem.DoFunctionCallBack(uiID);
}
else
{
GameCenter.MainFunctionSystem.DoFunctionCallBack(uiID, param);
}
}
}
}
}
break;
default: break;
}
}
public void Destory()
{
if (_go == null)
{
return;
}
GameObject.Destroy(_go);
_go = null;
if (_chatNodeTool != null)
{
_chatNodeTool.Destory();
}
}
/// <summary>
/// 如果当前node是动画节点则开始播放动画
/// </summary>
public void PlayAnim()
{
if ((Type != (int)TNodeType.Image && Type != (int)TNodeType.BigImage) || GO == null)
{
return;
}
if (_chatNodeTool != null)
{
_chatNodeTool.PlayAnim(this);
}
}
}
}