少年修仙传客户端代码仓库
client_linchunjie
2018-09-03 891f811518cdf28e8581b986f0870551c0fcc5d1
3226【前端】猫耳游戏数据对接文档
9个文件已修改
2个文件已添加
498 ■■■■ 已修改文件
System/Chat/ChatCenter.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatCtrl.cs 150 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatRecently.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyChangeTipWin.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyModel.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FriendSystem/New/FriendPanel.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FriendSystem/New/FriendTips.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FriendSystem/New/FriendsModel.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Login/CreateRoleWin.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/LanguageVerify.cs 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/LanguageVerify.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatCenter.cs
@@ -786,6 +786,7 @@
                        {
                            ChatCtrl.Inst.PteChatID = (int)teammate.id;
                            ChatCtrl.Inst.PteChatName = teammate.mateName;
                            LanguageVerify.toPlayerLevel = teammate.level;
                            var content = realmThankChats[UnityEngine.Random.Range(0, 7)];
                            ChatCtrl.Inst.SendChatInfo(ChatInfoType.Friend, Language.Get(content));
                        }
System/Chat/ChatCtrl.cs
@@ -267,77 +267,85 @@
        {
            _recentlyChat = chatCenter.SaveRecentlyChat(msg);
        }
        msg = CheckHasItem(msg, _recentlyChat);
        chatCenter.recentlyChat = null;
        switch (type)
        {
            case ChatInfoType.World:
                {
                    C0201_tagCTalkGong chatPack = new C0201_tagCTalkGong();
                    chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                    chatPack.Content = msg;
                    GameNetSystem.Instance.SendInfo(chatPack);
                }
                break;
            case ChatInfoType.Area:
                {
                    C0207_tagCTalkArea chatPack = new C0207_tagCTalkArea();
                    chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                    chatPack.Content = msg;
                    GameNetSystem.Instance.SendInfo(chatPack);
                }
                break;
            case ChatInfoType.Team:
                {
                    C0205_tagCTalkDui chatPack = new C0205_tagCTalkDui();
                    chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                    chatPack.Content = msg;
                    GameNetSystem.Instance.SendInfo(chatPack);
                }
                break;
            case ChatInfoType.Friend:
                {
                    var _toPlayer = PteChatID;
                    if (info.HasValue && info.Value.infoint1 == 0)
                    {
                        _toPlayer = info.Value.infoint1;
                    }
                    if (_toPlayer == 0)
                    {
                        SysNotifyMgr.Instance.ShowTip("NoChatTarget");
                        return;
                    }
                    SendFriendChat(msg, _toPlayer);
                }
                break;
            case ChatInfoType.Fairy:
                {
                    C0203_tagCTalkBang chatPack = new C0203_tagCTalkBang();
                    chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                    chatPack.Content = msg;
                    GameNetSystem.Instance.SendInfo(chatPack);
                }
                break;
            case ChatInfoType.Trumpet:
                {
                    if (info.HasValue)
                    {
                        CA217_tagCMPYSpeaker _pak = new CA217_tagCMPYSpeaker();
                        _pak.SpeakerType = 1;
                        _pak.IsUseGold = 0;
                        _pak.ItemIndex = (byte)info.Value.infoint1;
                        _pak.TextLen = (ushort)GetUTF8InfoLen(msg);
                        _pak.Text = msg;
                        GameNetSystem.Instance.SendInfo(_pak);
                    }
                }
                break;
            case ChatInfoType.Invite:
                {
                    SendInvite(msg);
                }
                break;
        }
        LanguageVerify.toPlayer = (uint)PteChatID;
        LanguageVerify.toPlayerName = PteChatName;
        LanguageVerify.Instance.VerifyChat(msg, type, (bool ok, string result) =>
         {
             if (ok)
             {
                 msg = CheckHasItem(result, _recentlyChat);
                 chatCenter.recentlyChat = null;
                 switch (type)
                 {
                     case ChatInfoType.World:
                         {
                             C0201_tagCTalkGong chatPack = new C0201_tagCTalkGong();
                             chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                             chatPack.Content = msg;
                             GameNetSystem.Instance.SendInfo(chatPack);
                         }
                         break;
                     case ChatInfoType.Area:
                         {
                             C0207_tagCTalkArea chatPack = new C0207_tagCTalkArea();
                             chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                             chatPack.Content = msg;
                             GameNetSystem.Instance.SendInfo(chatPack);
                         }
                         break;
                     case ChatInfoType.Team:
                         {
                             C0205_tagCTalkDui chatPack = new C0205_tagCTalkDui();
                             chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                             chatPack.Content = msg;
                             GameNetSystem.Instance.SendInfo(chatPack);
                         }
                         break;
                     case ChatInfoType.Friend:
                         {
                             var _toPlayer = PteChatID;
                             if (info.HasValue && info.Value.infoint1 == 0)
                             {
                                 _toPlayer = info.Value.infoint1;
                             }
                             if (_toPlayer == 0)
                             {
                                 SysNotifyMgr.Instance.ShowTip("NoChatTarget");
                                 return;
                             }
                             SendFriendChat(msg, _toPlayer);
                         }
                         break;
                     case ChatInfoType.Fairy:
                         {
                             C0203_tagCTalkBang chatPack = new C0203_tagCTalkBang();
                             chatPack.Len = (ushort)GetUTF8InfoLen(msg);
                             chatPack.Content = msg;
                             GameNetSystem.Instance.SendInfo(chatPack);
                         }
                         break;
                     case ChatInfoType.Trumpet:
                         {
                             if (info.HasValue)
                             {
                                 CA217_tagCMPYSpeaker _pak = new CA217_tagCMPYSpeaker();
                                 _pak.SpeakerType = 1;
                                 _pak.IsUseGold = 0;
                                 _pak.ItemIndex = (byte)info.Value.infoint1;
                                 _pak.TextLen = (ushort)GetUTF8InfoLen(msg);
                                 _pak.Text = msg;
                                 GameNetSystem.Instance.SendInfo(_pak);
                             }
                         }
                         break;
                     case ChatInfoType.Invite:
                         {
                             SendInvite(msg);
                         }
                         break;
                 }
             }
         });
    }
    /// <summary>
    /// 世界频道
System/Chat/ChatRecently.cs
@@ -64,11 +64,14 @@
                    && ChatCtrl.Inst.PteChatID == friendModel.tempFriendData.PlayerID)
                {
                    ChatCtrl.Inst.PteChatName = friendModel.tempFriendData.PlayerName;
                    LanguageVerify.toPlayerLevel = friendModel.tempFriendData.LV;
                }
                else
                {
                    ChatCtrl.Inst.PteChatName = _dict != null && _dict.ContainsKey((uint)ChatCtrl.Inst.PteChatID) ?
                                    _dict[(uint)ChatCtrl.Inst.PteChatID].PlayerName : string.Empty;
                    LanguageVerify.toPlayerLevel = _dict != null && _dict.ContainsKey((uint)ChatCtrl.Inst.PteChatID) ?
                                    _dict[(uint)ChatCtrl.Inst.PteChatID].LV : 0;
                }
                ChatCtrl.Inst.SelectRecentlyChat(ChatCtrl.Inst.PteChatID);
                m_RecentlyControl.m_Scorller.RefreshActiveCellViews();
@@ -89,6 +92,7 @@
            {
                ChatCtrl.Inst.PteChatID = (int)friendModel.tempFriendData.PlayerID;
                ChatCtrl.Inst.PteChatName = friendModel.tempFriendData.PlayerName;
                LanguageVerify.toPlayerLevel = friendModel.tempFriendData.LV;
                ChatCtrl.Inst.SelectRecentlyChat(ChatCtrl.Inst.PteChatID);
                return;
            }
@@ -97,6 +101,7 @@
            {
                ChatCtrl.Inst.PteChatID = (int)_dict.Keys.First();
                ChatCtrl.Inst.PteChatName = _dict[(uint)ChatCtrl.Inst.PteChatID].PlayerName;
                LanguageVerify.toPlayerLevel = _dict[(uint)ChatCtrl.Inst.PteChatID].LV;
                ChatCtrl.Inst.SelectRecentlyChat(ChatCtrl.Inst.PteChatID);
            }
        }
System/FairyAu/FairyChangeTipWin.cs
@@ -59,10 +59,17 @@
        private void SendChangeNotify()
        {
            C0F04_tagCFamilyChangeBroadcast notifyPack = new C0F04_tagCFamilyChangeBroadcast();
            notifyPack.Msg = notifyInput.text;
            GameNetSystem.Instance.SendInfo(notifyPack);
            CloseImmediately();
            LanguageVerify.Instance.VerifyFairy(notifyInput.text, 1, PlayerDatas.Instance.fairyData.fairy.FamilyName,
                PlayerDatas.Instance.fairyData.mine.FamilyLV, (bool ok, string result) =>
                 {
                     if (ok)
                     {
                         C0F04_tagCFamilyChangeBroadcast notifyPack = new C0F04_tagCFamilyChangeBroadcast();
                         notifyPack.Msg = result;
                         GameNetSystem.Instance.SendInfo(notifyPack);
                         CloseImmediately();
                     }
                 });
        }
        private void OnNotifyCancelBtn()
System/FairyAu/FairyModel.cs
@@ -480,14 +480,19 @@
                    break;
            }
        }
        public void SendChangeFairyName(string _name, int _itemIndex)
        {
            CA611_tagCMRenameFamily _pak = new CA611_tagCMRenameFamily();
            _pak.NewName = _name;
            _pak.ItemIndex = (byte)_itemIndex;
            _pak.NewNameLen = (byte)Encoding.UTF8.GetBytes(_name).Length;
            GameNetSystem.Instance.SendInfo(_pak);
            LanguageVerify.Instance.VerifyFairy(_name, 2, PlayerDatas.Instance.fairyData.fairy.FamilyName, PlayerDatas.Instance.fairyData.mine.FamilyLV, (bool ok, string content) =>
            {
                CA611_tagCMRenameFamily _pak = new CA611_tagCMRenameFamily();
                _pak.NewName = content;
                _pak.ItemIndex = (byte)_itemIndex;
                _pak.NewNameLen = (byte)Encoding.UTF8.GetBytes(content).Length;
                GameNetSystem.Instance.SendInfo(_pak);
            });
        }
        public event Action<int> UpdateFairyChangeNameEvent;
        public void UpdateFairyChangeName(H0F07_tagFamilyRenameResult _package)
        {
System/FriendSystem/New/FriendPanel.cs
@@ -271,7 +271,8 @@
            {
                _speakToNameObject.SetActive(false);
                ChatCtrl.Inst.PteChatID = 0;
                ChatCtrl.Inst.PteChatName = string.Empty;
                ChatCtrl.Inst.PteChatName = string.Empty;
                LanguageVerify.toPlayerLevel = 0;
            }
        }
        _friendCtrl.Restart();
@@ -561,6 +562,7 @@
            _speakToName.text = Language.Get("Friend107", UIHelper.ServerStringTrim(data.PlayerName));
            ChatCtrl.Inst.PteChatID = (int)data.PlayerID;
            ChatCtrl.Inst.PteChatName = data.PlayerName;
            LanguageVerify.toPlayerLevel = data.LV;
        }
    }
System/FriendSystem/New/FriendTips.cs
@@ -117,6 +117,7 @@
                unSelectFriendObj.SetActive(true);
                ChatCtrl.Inst.PteChatID = 0;
                ChatCtrl.Inst.PteChatName = string.Empty;
                LanguageVerify.toPlayerLevel = 0;
            }
        }
@@ -240,6 +241,7 @@
                    unSelectFriendObj.SetActive(false);
                    ChatCtrl.Inst.PteChatID = playerId;
                    ChatCtrl.Inst.PteChatName = playerName;
                    LanguageVerify.toPlayerLevel = 0;
                    playerInfoCell.Init(playerId, groupType,playerId);
                    speakOtherNameText.text = Language.Get("Friend107", UIHelper.ServerStringTrim(playerName));
                });
System/FriendSystem/New/FriendsModel.cs
@@ -131,6 +131,7 @@
        ChatCtrl.Inst.PteChatID = (int)id;
        ChatCtrl.Inst.PteChatName = name;
        LanguageVerify.toPlayerLevel = 0;
        MapConfig mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
        string msg = StringUtility.Contact(Language.Get("KillOthersDes", mapConfig.Name,StringUtility.Contact("<color=#FF0101FF", UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.PlayerName), "</color>")),ChatCtrl.KILL_IDENTIFY);
        ChatCtrl.Inst.SendChatInfo(ChatInfoType.Friend,msg);
System/Login/CreateRoleWin.cs
@@ -207,16 +207,21 @@
                return;
            }
            C0105_tagCCreateRole createRole = new C0105_tagCCreateRole();//实例化C0105_tagCCreateRole
            createRole.Job = (byte)userJob;
            createRole.Name = userNameInput.text;
            createRole.Sex = 1;
            createRole.Hair = 10002;
            createRole.HairColor = 1;
            createRole.Face = 10006;
            createRole.FacePic = 11004;
            createRole.PlayerType = 1;
            GameNetSystem.Instance.SendInfo(createRole);//发送创角包
            LanguageVerify.Instance.VerifyPlayerName(userNameInput.text, 0, string.Empty, 0, 0, (bool ok, string name) =>
              {
                  C0105_tagCCreateRole createRole = new C0105_tagCCreateRole();//实例化C0105_tagCCreateRole
                  createRole.Job = (byte)userJob;
                  createRole.Name = name;
                  createRole.Sex = 1;
                  createRole.Hair = 10002;
                  createRole.HairColor = 1;
                  createRole.Face = 10006;
                  createRole.FacePic = 11004;
                  createRole.PlayerType = 1;
                  GameNetSystem.Instance.SendInfo(createRole);//发送创角包
              });
            //屏蔽职业特效预先加载逻,以减少不必要的内存损耗和获得更快的场景切换速度,资源压缩使用LZ4才行。
            // AssetPreLoad.Instance.PreLoadJobEffect(userJob);
Utility/LanguageVerify.cs
New file
@@ -0,0 +1,268 @@
using Snxxz.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
public class LanguageVerify : Singleton<LanguageVerify>
{
    const string RequireVerifyAppid = "498_mrgame";
    const string Sercret = "c345a165b566d1c421afd8a748373d7f";
    bool requireVerify
    {
        get
        {
            return VersionConfig.Get().appId.Equals(RequireVerifyAppid);
        }
    }
    static StringBuilder s_StringBuilder = new StringBuilder();
    const string VerifyPlayerNameUrl = "https://api.maoergame.com/game/role/response?";
    /// <summary>
    /// 校验玩家名
    /// </summary>
    /// <param name="verifyName">需要检验的名字</param>
    /// <param name="playerId">玩家id</param>
    /// <param name="playerName">原来的角色名,创角传空</param>
    /// <param name="level">玩家等级</param>
    /// <param name="vipLv">玩家VIP等级</param>
    /// <param name="callback"></param>
    public void VerifyPlayerName(string verifyName, int playerId, string playerName, int level, int vipLv, Action<bool, string> callback)
    {
        if (!requireVerify)
        {
            if (callback != null)
            {
                callback(true, verifyName);
                callback = null;
            }
            return;
        }
        NetLinkWin.Show();
        var tables = new Dictionary<string, string>();
        tables["game_code"] = "snxxz";
        tables["server_id"] = ServerListCenter.Instance.currentServer.region_flag.ToString();
        tables["server_name"] = StringUtility.Contact("s", ServerListCenter.Instance.currentServer.region_flag);
        tables["role_name"] = verifyName;
        tables["sender_uid"] = ModelCenter.Instance.GetModel<LoginModel>().sdkLoginResult.account;
        tables["sender_rid"] = playerId.ToString();
        tables["sender_name"] = playerName;
        tables["sender_level"] = level.ToString();
        tables["sender_vip_level"] = vipLv.ToString();
        tables["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        tables["key"] = ToMD5(StringUtility.Contact(Sercret, tables["timestamp"]));
        HttpRequest.Instance.RequestHttpPost(VerifyPlayerNameUrl, tables, HttpRequest.defaultHttpContentType, 3,
            (bool ok, string result) =>
               {
                   if (ok)
                   {
                       var response = LitJson.JsonMapper.ToObject<VerifyResponse>(result);
                       if (response != null)
                       {
                           if (response.result.Equals("success"))
                           {
                               if (callback != null)
                               {
                                   callback(true, verifyName);
                                   callback = null;
                                   return;
                               }
                           }
                       }
                   }
                   NetLinkWin.Hide();
               });
    }
    const string VerifyFairyUrl = "https://api.maoergame.com/game/sociaty/response?";
    public void VerifyFairy(string verifyContent, int op_type, string fairyName, int title, Action<bool, string> callback)
    {
        if (!requireVerify)
        {
            if (callback != null)
            {
                callback(true, verifyContent);
                callback = null;
            }
            return;
        }
        var account = ModelCenter.Instance.GetModel<LoginModel>().sdkLoginResult.account;
        var playerId = PlayerDatas.Instance.baseData.PlayerID;
        var playerName = PlayerDatas.Instance.baseData.PlayerName;
        var tables = new Dictionary<string, string>();
        tables["game_code"] = "snxxz";
        tables["server_id"] = ServerListCenter.Instance.currentServer.region_flag.ToString();
        tables["server_name"] = StringUtility.Contact("s", ServerListCenter.Instance.currentServer.region_flag);
        tables["op_type"] = op_type.ToString();
        tables["name"] = op_type == 1 ? fairyName : verifyContent;
        tables["leader_uid"] = title == 3 ? account : string.Empty;
        tables["leader_rid"] = title == 3 ? playerId.ToString() : string.Empty;
        tables["leader_name"] = title == 3 ? playerName : string.Empty;
        tables["vice_leader_uid"] = title == 2 ? account : string.Empty;
        tables["vice_leader_rid"] = title == 2 ? playerId.ToString() : string.Empty;
        tables["vice_leader_name"] = title == 2 ? playerName : string.Empty;
        tables["edit_uid"] = account;
        tables["edit_rid"] = playerId.ToString();
        tables["edit_name"] = playerName;
        tables["notice"] = op_type == 2 ? string.Empty : verifyContent;
        tables["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        tables["key"] = ToMD5(StringUtility.Contact(Sercret, tables["timestamp"]));
        HttpRequest.Instance.RequestHttpPost(VerifyFairyUrl, tables, HttpRequest.defaultHttpContentType, 3,
            (bool ok, string result) =>
            {
                if (ok)
                {
                    var response = LitJson.JsonMapper.ToObject<VerifyResponse>(result);
                    if (response != null)
                    {
                        if (response.result.Equals("success"))
                        {
                            if (callback != null)
                            {
                                callback(true, response.content);
                                callback = null;
                                return;
                            }
                        }
                    }
                }
            });
    }
    public static uint toPlayer = 0;
    public static string toPlayerName = string.Empty;
    public static int toPlayerLevel = 0;
    public static int toPlayerVipLv = 0;
    const string VerifyChatUrl = "https://api.maoergame.com/game/chat/response?";
    public void VerifyChat(string content, ChatInfoType channelType, Action<bool, string> callback)
    {
        int channel = 0;
        if (!requireVerify || !GetChannel(channelType, out channel) || PlayerDatas.Instance.baseData.VIPLv >= 4)
        {
            if (callback != null)
            {
                callback(true, content);
                callback = null;
            }
            return;
        }
        var account = ModelCenter.Instance.GetModel<LoginModel>().sdkLoginResult.account;
        var playerId = PlayerDatas.Instance.baseData.PlayerID;
        var playerName = PlayerDatas.Instance.baseData.PlayerName;
        var tables = new Dictionary<string, string>();
        tables["game_code"] = "snxxz";
        tables["server_id"] = ServerListCenter.Instance.currentServer.region_flag.ToString();
        tables["server_name"] = StringUtility.Contact("s", ServerListCenter.Instance.currentServer.region_flag);
        tables["chat_type"] = 1.ToString();
        tables["chat_channel"] = channel.ToString();
        tables["chat_content"] = content;
        tables["sender_uid"] = account;
        tables["sender_rid"] = playerId.ToString();
        tables["sender_name"] = playerName;
        tables["sender_level"] = PlayerDatas.Instance.baseData.PlayerID.ToString();
        tables["sender_vip_level"] = PlayerDatas.Instance.baseData.VIPLv.ToString();
        tables["receiver_uid"] = string.Empty;
        tables["receiver_rid"] = toPlayer.ToString();
        tables["receiver_name"] = toPlayerName;
        tables["receiver_level"] = toPlayerLevel.ToString();
        tables["receiver_vip_level"] = toPlayerLevel.ToString();
        tables["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        tables["key"] = ToMD5(StringUtility.Contact(Sercret, tables["timestamp"]));
        HttpRequest.Instance.RequestHttpPost(VerifyChatUrl, tables, HttpRequest.defaultHttpContentType, 3,
            (bool ok, string result) =>
            {
                if (ok)
                {
                    var response = LitJson.JsonMapper.ToObject<VerifyResponse>(result);
                    if (response != null)
                    {
                        if (response.result.Equals("success"))
                        {
                            if (callback != null)
                            {
                                callback(true, response.content);
                                callback = null;
                                return;
                            }
                        }
                        else if (response.result.Equals("verify_fail"))
                        {
                            switch (response.code)
                            {
                                case -1:
                                    MessageWin.Inst.ShowFixedTip(Language.Get("L1007"));
                                    break;
                                case -2:
                                    SysNotifyMgr.Instance.ShowTip("VerifyErrorCode2");
                                    break;
                                case -3:
                                    break;
                            }
                        }
                    }
                }
            });
    }
    bool GetChannel(ChatInfoType type, out int channel)
    {
        channel = 0;
        switch (type)
        {
            case ChatInfoType.World:
                channel = 0;
                break;
            case ChatInfoType.Team:
                channel = 4;
                break;
            case ChatInfoType.Area:
            case ChatInfoType.Trumpet:
                channel = 5;
                break;
            case ChatInfoType.Fairy:
                channel = 2;
                break;
            case ChatInfoType.Friend:
                channel = 3;
                break;
            default:
                return false;
        }
        return true;
    }
    static string ToMD5(string content)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(content);
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] hash = md5.ComputeHash(bytes);
        s_StringBuilder.Length = 0;
        for (int i = 0; i < hash.Length; i++)
        {
            s_StringBuilder.Append(hash[i].ToString("X2"));
        }
        return s_StringBuilder.ToString();
    }
    public class VerifyResponse
    {
        public string result;
        public int code;
        public string content;
    }
}
Utility/LanguageVerify.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 43ec1c46b9cd40c40ad45510260e5848
timeCreated: 1535968674
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: