少年修仙传客户端代码仓库
client_linchunjie
2019-01-15 e37f7e2c018abc3ce93dc793d2379befb20bb330
5725【1.5】跨服聊天
4个文件已添加
21个文件已修改
601 ■■■■■ 已修改文件
Core/GameEngine/DataToCtl/PackageRegedit.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/C02_PlayerTalk/C0208_tagCTalkCountry.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/C02_PlayerTalk/C0208_tagCTalkCountry.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H02_PlayerTalk/DTC0208_tagTalkCountry.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H02_PlayerTalk/DTC0208_tagTalkCountry.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/H02_PlayerTalk/H0208_tagTalkCountry.cs 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/PlayerSocial/HB309_tagGCAnswerPlayerShortInfo.cs 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatCenter.cs 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatContentBehaviour.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatCtrl.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatData.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatFloatWin.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatOtherVoiceCell.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatPlayerOtherCell.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatTip.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatWin.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/LocalChatHistory.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/RoleParticularModel.cs 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/RoleParticularsWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/SystemSetting/ChatSetting.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Tip/PlayerDetailWin.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Tip/PlayerDetails.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/PlayerLifeBar.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/LanguageVerify.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -31,6 +31,7 @@
    public static void Init()
    {
        // 登记相应的数据体及对应的数据转逻辑类
        Register(typeof(H0208_tagTalkCountry), typeof(DTC0208_tagTalkCountry));
        Register(typeof(HB102_tagMCClothesCoatSkinState), typeof(DTCB102_tagMCClothesCoatSkinState));
        Register(typeof(HA112_tagMCDBPlayer), typeof(DTCA112_tagMCDBPlayer));
        Register(typeof(HC106_tagMCEnterCrossServerError), typeof(DTCC106_tagMCEnterCrossServerError));
Core/NetworkPackage/ClientPack/ClientToMapServer/C02_PlayerTalk/C0208_tagCTalkCountry.cs
New file
@@ -0,0 +1,20 @@
using UnityEngine;
using System.Collections;
//02 08 国家频道#tagCTalkCountry
public class C0208_tagCTalkCountry : GameNetPackBasic {
    public ushort Len;
    public string Content;    //size = Len
    public C0208_tagCTalkCountry () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0x0208;
    }
    public override void WriteToBytes () {
        WriteBytes (Len, NetDataType.WORD);
        WriteBytes (Content, NetDataType.Chars, Len);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/C02_PlayerTalk/C0208_tagCTalkCountry.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 03f61f4e99938614b95491aa293c0004
timeCreated: 1547533853
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/H02_PlayerTalk/DTC0208_tagTalkCountry.cs
New file
@@ -0,0 +1,23 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, January 15, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
public class DTC0208_tagTalkCountry : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack)
    {
        base.Done(vNetPack);
        var package = vNetPack as H0208_tagTalkCountry;
        ChatCtrl.Inst.RevChatInfo(package);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/H02_PlayerTalk/DTC0208_tagTalkCountry.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 666535edec1bc7445aa050bbcc71a4d2
timeCreated: 1547533935
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/H02_PlayerTalk/H0208_tagTalkCountry.cs
@@ -1,27 +1,29 @@
using UnityEngine;
using System.Collections;
/** 国家频道 */
public class H0208_tagTalkCountry : GameNetPackBasic {
    public ushort     NameLen;
    public string    Name;        //size = NameLen
    public int        PlayerID;
    public ushort    Len;
    public string    Content;        //size = Len
    public int        ExtraValue;        //附加值
    public H0208_tagTalkCountry () {
        _cmd = (ushort)0x0208;
    }
    /** 从字节包中解析信息 */
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out NameLen, vBytes, NetDataType.BYTE);
        TransBytes (out Name, vBytes, NetDataType.Chars, NameLen);
        TransBytes (out PlayerID, vBytes, NetDataType.DWORD);
        TransBytes (out Len, vBytes, NetDataType.WORD);
        TransBytes (out Content, vBytes, NetDataType.Chars, Len);
        TransBytes (out ExtraValue, vBytes, NetDataType.DWORD);
    }
}
using UnityEngine;
using System.Collections;
//02 08 国家频道#tagTalkCountry
public class H0208_tagTalkCountry : GameNetPackBasic {
    public byte NameLen;
    public string Name;    //size = NameLen
    public uint PlayerID;
    public ushort Len;
    public string Content;    //size = Len
    public uint ExtraValue;    //附加值
    public string Extras;    //附加值列表
    public H0208_tagTalkCountry () {
        _cmd = (ushort)0x0208;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out NameLen, vBytes, NetDataType.BYTE);
        TransBytes (out Name, vBytes, NetDataType.Chars, NameLen);
        TransBytes (out PlayerID, vBytes, NetDataType.DWORD);
        TransBytes (out Len, vBytes, NetDataType.WORD);
        TransBytes (out Content, vBytes, NetDataType.Chars, Len);
        TransBytes (out ExtraValue, vBytes, NetDataType.DWORD);
        TransBytes (out Extras, vBytes, NetDataType.Chars, 256);
    }
}
Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs
@@ -1,34 +1,29 @@
using UnityEngine;
using System.Collections;
//A7 05 查询玩家详细信息结果#tagSCQueryPlayerCacheResult
public class HA705_tagSCQueryPlayerCacheResult : GameNetPackBasic
{
    public uint PlayerID;    //玩家ID
    public uint PropDataSize;
    public string PropData;    //属性记录
    public uint ItemDataSize;
    public string ItemData;    //物品记录
    public uint PlusDataSize;
    public string PlusData;    //扩展记录
    public byte CrossPlayer;    //是否跨服玩家
    public HA705_tagSCQueryPlayerCacheResult()
    {
        _cmd = (ushort)0xA705;
    }
    public override void ReadFromBytes(byte[] vBytes)
    {
        TransBytes(out PlayerID, vBytes, NetDataType.DWORD);
        TransBytes(out PropDataSize, vBytes, NetDataType.DWORD);
        TransBytes(out PropData, vBytes, NetDataType.Chars, PropDataSize);
        TransBytes(out ItemDataSize, vBytes, NetDataType.DWORD);
        TransBytes(out ItemData, vBytes, NetDataType.Chars, ItemDataSize);
        TransBytes(out PlusDataSize, vBytes, NetDataType.DWORD);
        TransBytes(out PlusData, vBytes, NetDataType.Chars, PlusDataSize);
        TransBytes(out CrossPlayer, vBytes, NetDataType.BYTE);
    }
}
//A7 05 查询玩家详细信息结果#tagSCQueryPlayerCacheResult
public class HA705_tagSCQueryPlayerCacheResult : GameNetPackBasic {
    public uint PlayerID;    //玩家ID
    public uint PropDataSize;
    public string PropData;    //属性记录
    public uint ItemDataSize;
    public string ItemData;    //物品记录
    public uint PlusDataSize;
    public string PlusData;    //扩展记录
    public HA705_tagSCQueryPlayerCacheResult () {
        _cmd = (ushort)0xA705;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out PlayerID, vBytes, NetDataType.DWORD);
        TransBytes (out PropDataSize, vBytes, NetDataType.DWORD);
        TransBytes (out PropData, vBytes, NetDataType.Chars, PropDataSize);
        TransBytes (out ItemDataSize, vBytes, NetDataType.DWORD);
        TransBytes (out ItemData, vBytes, NetDataType.Chars, ItemDataSize);
        TransBytes (out PlusDataSize, vBytes, NetDataType.DWORD);
        TransBytes (out PlusData, vBytes, NetDataType.Chars, PlusDataSize);
    }
}
Core/NetworkPackage/ServerPack/PlayerSocial/HB309_tagGCAnswerPlayerShortInfo.cs
@@ -1,32 +1,31 @@
using UnityEngine;
using System.Collections;
//B3 09 回复玩家简短信息 #tagGCAnswerPlayerShortInfo
public class HB309_tagGCAnswerPlayerShortInfo : GameNetPackBasic
{
    public uint PlayerID;
    public string PlayerName;
    public byte Job;
    public ushort LV;    //等级
    public ushort RealmLV;    //境界
    public byte OnlineType;    //在线状态, 0 不在线 1在线
    public byte IsInTeam;    //是否有队伍
    public HB309_tagGCAnswerPlayerShortInfo()
    {
        _cmd = (ushort)0xB309;
    }
    public override void ReadFromBytes(byte[] vBytes)
    {
        TransBytes(out PlayerID, vBytes, NetDataType.DWORD);
        TransBytes(out PlayerName, vBytes, NetDataType.Chars, 33);
        TransBytes(out Job, vBytes, NetDataType.BYTE);
        TransBytes(out LV, vBytes, NetDataType.WORD);
        TransBytes(out RealmLV, vBytes, NetDataType.WORD);
        TransBytes(out OnlineType, vBytes, NetDataType.BYTE);
        TransBytes(out IsInTeam, vBytes, NetDataType.BYTE);
    }
}
using UnityEngine;
using System.Collections;
//B3 09 回复玩家简短信息 #tagGCAnswerPlayerShortInfo
public class HB309_tagGCAnswerPlayerShortInfo : GameNetPackBasic {
    public uint PlayerID;
    public string PlayerName;
    public byte Job;
    public ushort LV;    //等级
    public ushort RealmLV;    //境界
    public byte OnlineType;    //在线状态, 0 不在线 1在线
    public byte IsInTeam;    //是否有队伍
    public uint ServerGroupID;    //服务器组ID
    public HB309_tagGCAnswerPlayerShortInfo () {
        _cmd = (ushort)0xB309;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out PlayerID, vBytes, NetDataType.DWORD);
        TransBytes (out PlayerName, vBytes, NetDataType.Chars, 33);
        TransBytes (out Job, vBytes, NetDataType.BYTE);
        TransBytes (out LV, vBytes, NetDataType.WORD);
        TransBytes (out RealmLV, vBytes, NetDataType.WORD);
        TransBytes (out OnlineType, vBytes, NetDataType.BYTE);
        TransBytes (out IsInTeam, vBytes, NetDataType.BYTE);
        TransBytes (out ServerGroupID, vBytes, NetDataType.DWORD);
    }
}
System/Chat/ChatCenter.cs
@@ -59,6 +59,7 @@
            chatChannels = new List<ChatInfoType>();
            chatChannels.Add(ChatInfoType.System);
            chatChannels.Add(ChatInfoType.World);
            chatChannels.Add(ChatInfoType.CrossServer);
            chatChannels.Add(ChatInfoType.Area);
            chatChannels.Add(ChatInfoType.Team);
            chatChannels.Add(ChatInfoType.Invite);
@@ -327,7 +328,7 @@
                }
                if (_chat.chatType != ChatInfoType.World && _chat.chatType != ChatInfoType.Area
                    && _chat.chatType != ChatInfoType.Fairy && _chat.chatType != ChatInfoType.Friend
                    && _chat.chatType != ChatInfoType.Team)
                    && _chat.chatType != ChatInfoType.Team && _chat.chatType != ChatInfoType.CrossServer)
                {
                    m_VoiceChatDict.Remove(_instance);
                    return;
@@ -573,42 +574,6 @@
            public string voiceID;
            public string playerID;
            public string content;
        }
        byte GetPakChannelType(ChatInfoType _type)
        {
            switch (_type)
            {
                case ChatInfoType.World:
                    return 1;
                case ChatInfoType.Area:
                    return 5;
                case ChatInfoType.Team:
                    return 4;
                case ChatInfoType.Fairy:
                    return 2;
                case ChatInfoType.Friend:
                    return 3;
            }
            return 1;
        }
        ChatInfoType GetPakChannelType(byte _type)
        {
            switch (_type)
            {
                case 5:
                    return ChatInfoType.Area;
                case 1:
                    return ChatInfoType.World;
                case 2:
                    return ChatInfoType.Fairy;
                case 3:
                    return ChatInfoType.Friend;
                case 4:
                    return ChatInfoType.Team;
            }
            return ChatInfoType.World;
        }
        private void OnNetStatusChanged(NetworkReachability _state)
@@ -920,7 +885,9 @@
            var vipLevel = PlayerDatas.Instance.baseData.VIPLv;
            var job = PlayerDatas.Instance.baseData.Job;
            var bubbleId = PlayerDatas.Instance.baseData.bubbleId;
            return StringUtility.Contact(vipLevel.ToString().PadLeft(2, '0'), 0, job, bubbleId.ToString().PadLeft(2, '0'));
            var serverGroupId = PlayerDatas.Instance.baseData.ServerGroupId;
            return StringUtility.Contact(vipLevel.ToString().PadLeft(2, '0'), 0, job,
                bubbleId.ToString().PadLeft(2, '0'), serverGroupId.ToString().PadLeft(7, '0'));
        }
        public void HandleChatBanned(ChatInfoType channel, string message, int toPlayer)
@@ -949,6 +916,15 @@
                            SrcName = playerName,
                        });
                        break;
                    case ChatInfoType.CrossServer:
                        ChatCtrl.Inst.RevChatInfo(new H0208_tagTalkCountry()
                        {
                            Content = message,
                            Extras = SetChatExtra(),
                            PlayerID = playerId,
                            Name = playerName,
                        });
                        break;
                    case ChatInfoType.Team:
                        ChatCtrl.Inst.RevChatInfo(new H0205_tagTalkDui()
                        {
System/Chat/ChatContentBehaviour.cs
@@ -249,6 +249,7 @@
                        {
                            case ChatInfoType.World:
                            case ChatInfoType.Area:
                            case ChatInfoType.CrossServer:
                            case ChatInfoType.Team:
                            case ChatInfoType.Trumpet:
                            case ChatInfoType.Fairy:
System/Chat/ChatCtrl.cs
@@ -170,6 +170,7 @@
    {
        chatOpenDics.Add(ChatInfoType.System, true);
        chatOpenDics.Add(ChatInfoType.World, true);
        chatOpenDics.Add(ChatInfoType.CrossServer, true);
        chatOpenDics.Add(ChatInfoType.Area, true);
        chatOpenDics.Add(ChatInfoType.Team, true);
        chatOpenDics.Add(ChatInfoType.Invite, true);
@@ -239,6 +240,9 @@
                    break;
                case ChatInfoType.Area:
                    channelName = Language.Get("ChatType_Area");
                    break;
                case ChatInfoType.CrossServer:
                    channelName = Language.Get("ChatType_CrossServer");
                    break;
                case ChatInfoType.Team:
                    channelName = Language.Get("ChatType_Team");
@@ -339,6 +343,21 @@
                     case ChatInfoType.Area:
                         {
                             C0207_tagCTalkArea chatPack = new C0207_tagCTalkArea();
                             chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                             chatPack.Content = msg;
                             if (CrossServerUtility.IsCrossServer())
                             {
                                 GameNetSystem.Instance.SendToCrossServer(chatPack);
                             }
                             else
                             {
                                 GameNetSystem.Instance.SendInfo(chatPack);
                             }
                         }
                         break;
                     case ChatInfoType.CrossServer:
                         {
                             C0208_tagCTalkCountry chatPack = new C0208_tagCTalkCountry();
                             chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                             chatPack.Content = msg;
                             GameNetSystem.Instance.SendInfo(chatPack);
@@ -458,6 +477,22 @@
        LocalChatHistory.Save(chatData as ChatUeseData);
        KeepChatInfo(chatData);
    }
    /// <summary>
    /// 跨服聊天
    /// </summary>
    /// <param name="package"></param>
    public void RevChatInfo(H0208_tagTalkCountry package)
    {
        if (friendModel.GetFirendInfo(package.PlayerID, (byte)GroupType.Balcklist) != null)//黑名单拦截
        {
            return;
        }
        ChatData chatData = new ChatCrossServerData(package.Content, (int)package.PlayerID, package.Name, package.Extras);
        LocalChatHistory.Save(chatData as ChatUeseData);
        KeepChatInfo(chatData);
    }
    /// <summary>
    /// 喇叭喊话
    /// </summary>
@@ -984,6 +1019,7 @@
        chatOpenDics[ChatInfoType.System] = ChatSetting.Instance.GetBool(ChatBoolType.ChannelSystem);
        chatOpenDics[ChatInfoType.Team] = ChatSetting.Instance.GetBool(ChatBoolType.ChannelTeam);
        chatOpenDics[ChatInfoType.Trumpet] = ChatSetting.Instance.GetBool(ChatBoolType.ChannelBugle);
        chatOpenDics[ChatInfoType.CrossServer] = true;
    }
    #endregion
@@ -1165,6 +1201,7 @@
    Trumpet,//喇叭
    Fairy,//仙盟
    Friend,//私聊
    CrossServer,//跨服
    FairyQuestion,
    FairyTip,
    TeamTip,
System/Chat/ChatData.cs
@@ -86,6 +86,14 @@
        {
            bubbleId = int.Parse(extra.Substring(4, extraLength > 5 ? 2 : 1));
        }
        if (extraLength > 12)
        {
            serverGroupId = int.Parse(extra.Substring(6, 7));
        }
        if (extraLength > 16)
        {
            level = int.Parse(extra.Substring(13, 4));
        }
        if (ChatCenter.s_VoiceRegex.IsMatch(_content))
        {
            var _match = ChatCenter.s_VoiceRegex.Match(_content);
@@ -104,6 +112,8 @@
    public long soundTick { get; private set; }
    public bool IsSound { get; private set; }
    public float soundLength { get; private set; }
    public int serverGroupId { get; private set; }
    public int level { get; private set; }
}
public class ChatSystemData : ChatData
@@ -144,6 +154,14 @@
    }
}
public class ChatCrossServerData : ChatUeseData
{
    public ChatCrossServerData(string content, int player, string name, string extra) : base(content, player, name, extra)
    {
        type = ChatInfoType.CrossServer;
    }
}
public class ChatTeamData : ChatUeseData
{
    public ChatTeamData(string content, int player, string name, string extra, ChatInfoType detailType = ChatInfoType.Team) : base(content, player, name, extra)
System/Chat/ChatFloatWin.cs
@@ -123,6 +123,8 @@
                    }
                case ChatInfoType.Area:
                    return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>: ", "ChatIcon_Area", (data as ChatUeseData).name);
                case ChatInfoType.CrossServer:
                    return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>: ", "ChatIcon_CrossServer", (data as ChatUeseData).name);
                case ChatInfoType.Team:
                    {
                        string playerName = (data as ChatUeseData).name;
System/Chat/ChatOtherVoiceCell.cs
@@ -74,7 +74,14 @@
            {
                return;
            }
            HrefAnalysis.Inst.ExcuteHrefEvent(string.Format("showplayer={0}", user.player));
            if (user.serverGroupId == PlayerDatas.Instance.baseData.ServerGroupId)
            {
                PlayerDetails.ShowPlayerDetails(user.player, null);
            }
            else
            {
                PlayerDetails.ShowCrossServerChatPlayer(user);
            }
        }
        public float GetHeight(string content, ArrayList list)
System/Chat/ChatPlayerOtherCell.cs
@@ -66,7 +66,14 @@
            {
                return;
            }
            HrefAnalysis.Inst.ExcuteHrefEvent(string.Format("showplayer={0}", user.player));
            if (user.serverGroupId == PlayerDatas.Instance.baseData.ServerGroupId)
            {
                PlayerDetails.ShowPlayerDetails(user.player, null);
            }
            else
            {
                PlayerDetails.ShowCrossServerChatPlayer(user);
            }
        }
        public float GetHeight(string content, ArrayList list)
System/Chat/ChatTip.cs
@@ -287,6 +287,16 @@
                    }
                    break;
                }
            case ChatInfoType.CrossServer:
                {
                    chatIcon = "ChatIcon_CrossServer";
                    chatName = chatUserData.name;
                    if (chatUserData.vipLv > 0)
                    {
                        vipLv = "VIP";// StringUtility.Contact("V", chatUserData.vipLv);
                    }
                    break;
                }
            case ChatInfoType.Team:
                {
                    chatIcon = "ChatIcon_Team";
System/Chat/ChatWin.cs
@@ -158,6 +158,7 @@
                    break;
                case ChatInfoType.World:
                case ChatInfoType.Area:
                case ChatInfoType.CrossServer:
                    m_ChatRecently.gameObject.SetActive(false);
                    m_ChatTip.gameObject.SetActive(false);
                    m_ChatSend.gameObject.SetActive(true);
System/Chat/LocalChatHistory.cs
@@ -68,6 +68,7 @@
            switch (chat.type)
            {
                case ChatInfoType.World:
                case ChatInfoType.CrossServer:
                case ChatInfoType.Area:
                case ChatInfoType.Trumpet:
                case ChatInfoType.Fairy:
@@ -120,6 +121,7 @@
            {
                case ChatInfoType.World:
                case ChatInfoType.Area:
                case ChatInfoType.CrossServer:
                case ChatInfoType.Team:
                case ChatInfoType.Fairy:
                    {
@@ -199,6 +201,7 @@
                            {
                                case ChatInfoType.World:
                                case ChatInfoType.Area:
                                case ChatInfoType.CrossServer:
                                case ChatInfoType.Team:
                                case ChatInfoType.Fairy:
                                    {
@@ -224,6 +227,10 @@
                                        {
                                            chat = new ChatFamilyData(localChat.content, localChat.player, localChat.name, localChat.extra);
                                        }
                                        else if (type == ChatInfoType.CrossServer)
                                        {
                                            chat = new ChatCrossServerData(localChat.content, localChat.player, localChat.name, localChat.extra);
                                        }
                                        chat.createTime = localChat.time;
                                    }
                                    break;
System/RoleParticulars/RoleParticularModel.cs
@@ -79,6 +79,18 @@
            ViewRoleParticulars(_playerId);
        }
        public void ViewCrossServerPlayerEquip(int _playerId)
        {
            viewPlayerType = CrossServerUtility.IsCrossServer() ? 5 : 4;
            ViewRoleParticulars(_playerId);
        }
        public void ViewCrossPlayerFightPower(int _playerId)
        {
            viewPlayerType = CrossServerUtility.IsCrossServer() ? 6 : 7;
            ViewRoleParticulars(_playerId);
        }
        private void ViewRoleParticulars(int playerID)
        {
            if (viewPlayerType != 2)
@@ -105,14 +117,27 @@
            switch (viewPlayerType)
            {
                case 4:
                    CC002_tagCGViewCrossPlayerInfo c002 = new CC002_tagCGViewCrossPlayerInfo();
                    c002.PlayerID = (uint)playerID;
                    GameNetSystem.Instance.SendInfo(c002);
                case 7:
                    {
                        CC002_tagCGViewCrossPlayerInfo c002 = new CC002_tagCGViewCrossPlayerInfo();
                        c002.PlayerID = (uint)playerID;
                        GameNetSystem.Instance.SendInfo(c002);
                    }
                    break;
                case 5:
                case 6:
                    {
                        CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();
                        pak.PlayerID = (uint)playerID;
                        GameNetSystem.Instance.SendToCrossServer(pak);
                    }
                    break;
                default:
                    CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();
                    pak.PlayerID = (uint)playerID;
                    GameNetSystem.Instance.SendInfo(pak);
                    {
                        CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();
                        pak.PlayerID = (uint)playerID;
                        GameNetSystem.Instance.SendInfo(pak);
                    }
                    break;
            }
        }
@@ -131,7 +156,6 @@
                viewPlayerDataDic.Add((int)package.PlayerID, viewPlayerData);
            }
            viewPlayerData.CrossPlayer = package.CrossPlayer;
            viewPlayerData.getTime = DateTime.Now;
            viewPlayerData.roleEquipDataDic.Clear();
            viewPlayerData.itemDatas = JsonMapper.ToObject<ItemData[]>(package.ItemData);
@@ -632,12 +656,15 @@
            {
                case 0:
                case 4:
                case 5:
                    if (!WindowCenter.Instance.IsOpen<RoleParticularsWin>())
                    {
                        WindowCenter.Instance.Open<RoleParticularsWin>();
                    }
                    break;
                case 1:
                case 6:
                case 7:
                    if (!WindowCenter.Instance.IsOpen<ViewFuncPowerWin>())
                    {
                        WindowCenter.Instance.Open<ViewFuncPowerWin>();
@@ -664,7 +691,6 @@
            public ItemData[] itemDatas;
            public RolePropData rolePropData;
            public RolePlusData rolePlusData;
            public int CrossPlayer=0;
            public Dictionary<RoleEquipType, ItemData> roleEquipDataDic = new Dictionary<RoleEquipType, ItemData>();
@@ -755,6 +781,11 @@
                }
                return 0;
            }
            public bool IsCrossServerPlayer()
            {
                return rolePropData.ServerGroupID != PlayerDatas.Instance.baseData.ServerGroupId;
            }
        }
        [Serializable]
@@ -786,6 +817,7 @@
            public int FamilyID;
            public ulong FightPower;
            public uint EquipShowSwitch;
            public int ServerGroupID;
        }
        public class RolePlusData
System/RoleParticulars/RoleParticularsWin.cs
@@ -184,7 +184,7 @@
            }
            var viewPlayerData = model.GetViewPlayerData(model.viewPlayer);
            addFriendBtn.gameObject.SetActive(viewPlayerData.CrossPlayer == 0
            addFriendBtn.gameObject.SetActive(!viewPlayerData.IsCrossServerPlayer()
                && friendsModel.GetFirendInfo((uint)model.viewPlayer, (byte)GroupType.Friend) == null);
            if (viewPlayerData != null)
System/SystemSetting/ChatSetting.cs
@@ -165,6 +165,8 @@
                {
                    return GetBool(ChatBoolType.PrivatChatVoice4G);
                }
            case ChatInfoType.CrossServer:
                return false;
        }
        return false;
    }
System/Tip/PlayerDetailWin.cs
@@ -54,6 +54,14 @@
        private float ratio = 1.0f;
        public bool IsCrossServerPlayer
        {
            get
            {
                return PlayerDetails.ServerGroupId != PlayerDatas.Instance.baseData.ServerGroupId;
            }
        }
        #region Built-in
        protected override void BindController()
        {
@@ -135,51 +143,54 @@
        public void CheckDetailType()
        {
            funcTypes.Clear();
            funcTypes.Add(PlayerDetails.IsInTeam == 1 ?
                PlayerDetails.DetailType.ApplyTeam : PlayerDetails.DetailType.InviteTeam);
            funcTypes.Add(PlayerDetails.DetailType.ViewEquip);
            funcTypes.Add(PlayerDetails.DetailType.LookFight);
            bool _isFriend = m_FriendModel.GetFirendInfo((uint)PlayerDetails.PlayerID, 2) != null;
            bool _isBlack = m_FriendModel.GetFirendInfo((uint)PlayerDetails.PlayerID, 4) != null;
            funcTypes.Add(_isFriend ? PlayerDetails.DetailType.DeleteFriend : PlayerDetails.DetailType.AddFriend);
            funcTypes.Add(_isBlack ? PlayerDetails.DetailType.RemoveBlack : PlayerDetails.DetailType.AddBlack);
            if (!_isBlack)
            {
                funcTypes.Add(PlayerDetails.DetailType.PrivateChat);
            }
            switch (PlayerDetails.openType)
            {
                case PlayerDetails.OpenType.Default:
                    if (PlayerDatas.Instance.fairyData.HasFairy)
                    {
                        if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanCall) &&
                            PlayerDatas.Instance.fairyData.GetMember(PlayerDetails.PlayerID) == null)
                        {
                            funcTypes.Add(PlayerDetails.DetailType.InviteFairy);
                        }
                    }
                    break;
                case PlayerDetails.OpenType.Fairy:
                    PlayerFairyData.FairyMember _mine = PlayerDatas.Instance.fairyData.mine;
                    PlayerFairyData.FairyMember _fairyMember =
                        PlayerDatas.Instance.fairyData.GetMember(m_FairyModel.presentChangeMember);
                    if (_fairyMember != null)
                    {
                        if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanJobTitle)
                            && _mine.FamilyLV > _fairyMember.FamilyLV)
                        {
                            funcTypes.Add(PlayerDetails.DetailType.FairyLv);
                        }
                        if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanKick)
                            && _mine.FamilyLV > _fairyMember.FamilyLV)
            if (!IsCrossServerPlayer)
            {
                funcTypes.Add(PlayerDetails.IsInTeam == 1 ?
                    PlayerDetails.DetailType.ApplyTeam : PlayerDetails.DetailType.InviteTeam);
                bool _isFriend = m_FriendModel.GetFirendInfo((uint)PlayerDetails.PlayerID, 2) != null;
                bool _isBlack = m_FriendModel.GetFirendInfo((uint)PlayerDetails.PlayerID, 4) != null;
                funcTypes.Add(_isFriend ? PlayerDetails.DetailType.DeleteFriend : PlayerDetails.DetailType.AddFriend);
                funcTypes.Add(_isBlack ? PlayerDetails.DetailType.RemoveBlack : PlayerDetails.DetailType.AddBlack);
                if (!_isBlack)
                {
                    funcTypes.Add(PlayerDetails.DetailType.PrivateChat);
                }
                switch (PlayerDetails.openType)
                {
                    case PlayerDetails.OpenType.Default:
                        if (PlayerDatas.Instance.fairyData.HasFairy)
                        {
                            funcTypes.Add(PlayerDetails.DetailType.KickFairy);
                        }
                    }
                    break;
                case PlayerDetails.OpenType.Friend:
                    funcTypes.Remove(PlayerDetails.DetailType.PrivateChat);
                    break;
                            if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanCall) &&
                                PlayerDatas.Instance.fairyData.GetMember(PlayerDetails.PlayerID) == null)
                            {
                                funcTypes.Add(PlayerDetails.DetailType.InviteFairy);
                            }
                        }
                        break;
                    case PlayerDetails.OpenType.Fairy:
                        PlayerFairyData.FairyMember _mine = PlayerDatas.Instance.fairyData.mine;
                        PlayerFairyData.FairyMember _fairyMember =
                            PlayerDatas.Instance.fairyData.GetMember(m_FairyModel.presentChangeMember);
                        if (_fairyMember != null)
                        {
                            if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanJobTitle)
                                && _mine.FamilyLV > _fairyMember.FamilyLV)
                            {
                                funcTypes.Add(PlayerDetails.DetailType.FairyLv);
                            }
                            if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanKick)
                                && _mine.FamilyLV > _fairyMember.FamilyLV)
                            {
                                funcTypes.Add(PlayerDetails.DetailType.KickFairy);
                            }
                        }
                        break;
                    case PlayerDetails.OpenType.Friend:
                        funcTypes.Remove(PlayerDetails.DetailType.PrivateChat);
                        break;
                }
            }
        }
@@ -220,7 +231,14 @@
                    }
                    break;
                case PlayerDetails.DetailType.ViewEquip:
                    m_RoleParticularModel.ViewRoleEquip(PlayerDetails.PlayerID);
                    if (!IsCrossServerPlayer)
                    {
                        m_RoleParticularModel.ViewRoleEquip(PlayerDetails.PlayerID);
                    }
                    else
                    {
                        m_RoleParticularModel.ViewCrossServerPlayerEquip(PlayerDetails.PlayerID);
                    }
                    break;
                case PlayerDetails.DetailType.AddFriend:
                    m_FriendModel.OnClickAddFriend((uint)PlayerDetails.PlayerID);
@@ -272,7 +290,14 @@
                    m_FriendModel.OnClickRemoveBlack((uint)PlayerDetails.PlayerID);
                    break;
                case PlayerDetails.DetailType.LookFight:
                    m_RoleParticularModel.ViewRoleFightPower(PlayerDetails.PlayerID);
                    if (!IsCrossServerPlayer)
                    {
                        m_RoleParticularModel.ViewRoleFightPower(PlayerDetails.PlayerID);
                    }
                    else
                    {
                        m_RoleParticularModel.ViewCrossPlayerFightPower(PlayerDetails.PlayerID);
                    }
                    break;
                case PlayerDetails.DetailType.InviteFairy:
                    m_FairyModel.SendInviteFairy(PlayerDetails.PlayerID, PlayerDetails.PlayerName);
System/Tip/PlayerDetails.cs
@@ -22,6 +22,43 @@
            RectTransformUtility.ScreenPointToLocalPointInRectangle(WindowCenter.Instance.uiRoot.tipsCanvas, Input.mousePosition, WindowCenter.Instance.uiRoot.uicamera, out targetPos);
        }
        public static void ShowCrossServerChatPlayer(ChatUeseData data)
        {
            openType = OpenType.CrossPlayer;
            PlayerID = (int)data.player;
            LV = data.level;
            Job = data.job;
            RealmLV = 0;
            PlayerName = data.name;
            OnlineType = 0;
            IsInTeam = 0;
            ServerGroupId = data.serverGroupId;
            if (!WindowCenter.Instance.IsOpen<PlayerDetailWin>())
            {
                WindowCenter.Instance.Open<PlayerDetailWin>();
            }
        }
        public static void ShowAreaPlayer(int _playerId)
        {
            openType = OpenType.Default;
            onClickFuncEvent = null;
            DTCB309_tagGCAnswerPlayerShortInfo.OnPlayerShortInfoEvent -= OnPlayerShortInfoEvent;
            DTCB309_tagGCAnswerPlayerShortInfo.OnPlayerShortInfoEvent += OnPlayerShortInfoEvent;
            CB306_tagCGViewPlayerShortInfo _pak = new CB306_tagCGViewPlayerShortInfo();
            _pak.PlayerID = (uint)_playerId;
            if (CrossServerUtility.IsCrossServer())
            {
                GameNetSystem.Instance.SendToCrossServer(_pak);
            }
            else
            {
                GameNetSystem.Instance.SendInfo(_pak);
            }
            RectTransformUtility.ScreenPointToLocalPointInRectangle(WindowCenter.Instance.uiRoot.tipsCanvas, Input.mousePosition, WindowCenter.Instance.uiRoot.uicamera, out targetPos);
        }
        private static void OnPlayerShortInfoEvent(HB309_tagGCAnswerPlayerShortInfo _package)
        {
            PlayerID = (int)_package.PlayerID;
@@ -31,6 +68,7 @@
            RealmLV = _package.RealmLV;
            PlayerName = _package.PlayerName;
            IsInTeam = _package.IsInTeam;
            ServerGroupId = (int)_package.ServerGroupID;
            if (!WindowCenter.Instance.IsOpen<PlayerDetailWin>())
            {
@@ -67,11 +105,13 @@
            LookFight = 11,//查看战力
            InviteFairy = 12,//邀请入盟
        }
        public enum OpenType
        {
            Default,
            Fairy,
            Friend
            Friend,
            CrossPlayer,
        }
        public static int PlayerID = 0;
@@ -81,6 +121,7 @@
        public static int RealmLV = 0;    //境界
        public static int OnlineType = 0;    //在线状态, 0 不在线 1在线
        public static int IsInTeam = 0;
        public static int ServerGroupId = 0;//玩家所在服务器id
    }
}
UI/Common/PlayerLifeBar.cs
@@ -111,7 +111,7 @@
        private void ViewPlayer()
        {
            PlayerDetails.ShowPlayerDetails(playerId, null);
            PlayerDetails.ShowAreaPlayer(playerId);
        }
    }
Utility/LanguageVerify.cs
@@ -352,6 +352,7 @@
        switch (type)
        {
            case ChatInfoType.World:
            case ChatInfoType.CrossServer:
                channel = 0;
                break;
            case ChatInfoType.Team: