少年修仙传客户端代码仓库
hch
2025-03-27 664e7b2e0608fa9a3f93ea408e01db37ef461f6e
0312 竞技场回合制,界面未处理
4个文件已删除
10 文件已重命名
2个文件已添加
15个文件已修改
2561 ■■■■ 已修改文件
Core/GameEngine/DataToCtl/PackageRegedit.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagGCArenaMatchList.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagGCArenaMatchList.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagGCArenaBattleRecordList.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagGCArenaBattleRecordList.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA926_tagGCArenaBattlePlayerInfo.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA926_tagGCArenaBattlePlayerInfo.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagGCArenaMatchList.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagGCArenaMatchList.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagGCArenaBattleRecordList.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagGCArenaBattleRecordList.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA9_Function/HA926_tagGCArenaBattlePlayerInfo.cs 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA9_Function/HA926_tagGCArenaBattlePlayerInfo.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA9_Function/IL_HA922_tagGCArenaMatchList.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA9_Function/IL_HA923_tagGCArenaBattleRecordList.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/Protocol/ClientPack/ClientToGameServer/CA9_Function/IL_CA9A2_tagCPYWatchBillboard.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/Protocol/ClientPack/ClientToGameServer/CA9_Function/IL_CA9A2_tagCPYWatchBillboard.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaFightingPKCell.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaFightingPKWin.cs 1173 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaManagerModel.cs 335 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaModel.cs 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaRankCell.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaRecordCell.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaRecordWin.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaRewardCell.cs 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaRewardWin.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaSettlementWin.cs 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LogicProject/System/ArenaActivity/ArenaWin.cs 147 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonModel.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/ILManager/ArenaManager.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentModel.cs 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -584,9 +584,9 @@
        Register(typeof(HAA90_tagMCCrossActLianqiInfo), typeof(DTCAA90_tagMCCrossActLianqiInfo));
        Register(typeof(HAA91_tagMCActLianqiPlayerInfo), typeof(DTCAA91_tagMCActLianqiPlayerInfo));
        Register(typeof(IL_HA922_tagGCArenaMatchList), typeof(IL_DTCA922_tagGCArenaMatchList));// A9 22 竞技场匹配玩家列表
        Register(typeof(IL_HA923_tagGCArenaBattleRecordList), typeof(IL_DTCA923_tagGCArenaBattleRecordList));// A9 23 竞技场对战记录列表
        Register(typeof(IL_HA926_tagGCArenaBattlePlayerInfo), typeof(IL_DTCA926_tagGCArenaBattlePlayerInfo));
        Register(typeof(HA922_tagGCArenaMatchList), typeof(DTCA922_tagGCArenaMatchList));// A9 22 竞技场匹配玩家列表
        Register(typeof(HA923_tagGCArenaBattleRecordList), typeof(DTCA923_tagGCArenaBattleRecordList));// A9 23 竞技场对战记录列表
        Register(typeof(HA926_tagGCArenaBattlePlayerInfo), typeof(DTCA926_tagGCArenaBattlePlayerInfo));
        Register(typeof(HA3C3_tagMCArenaPlayerInfo), typeof(DTCA3C3_tagMCArenaPlayerInfo));// A3 C3 竞技场玩家信息
        Register(typeof(HA927_tagGCXiangongNewPlayerInfo), typeof(DTCA927_tagGCXiangongNewPlayerInfo));
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagGCArenaMatchList.cs
File was renamed from Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/IL_DTCA922_tagGCArenaMatchList.cs
@@ -1,12 +1,12 @@
using UnityEngine;
using System.Collections;
// A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList
public class IL_DTCA922_tagGCArenaMatchList : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        IL_HA922_tagGCArenaMatchList vNetData = vNetPack as IL_HA922_tagGCArenaMatchList;
        ArenaModel.Instance.ReceiveMatchData(vNetData);
    }
}
// A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList
public class DTCA922_tagGCArenaMatchList : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA922_tagGCArenaMatchList vNetData = vNetPack as HA922_tagGCArenaMatchList;
        ArenaModel.Instance.ReceiveMatchData(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagGCArenaMatchList.cs.meta
File was renamed from Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/IL_DTCA922_tagGCArenaMatchList.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 327dfc384d93a984fad159dea05140a2
guid: 9e37346e325b14244ac171e2e275237f
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagGCArenaBattleRecordList.cs
File was renamed from Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/IL_DTCA923_tagGCArenaBattleRecordList.cs
@@ -1,12 +1,12 @@
using UnityEngine;
using System.Collections;
// A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
public class IL_DTCA923_tagGCArenaBattleRecordList : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        IL_HA923_tagGCArenaBattleRecordList vNetData = vNetPack as IL_HA923_tagGCArenaBattleRecordList;
        ArenaModel.Instance.ReceiveBattleRecordList(vNetData);
    }
}
// A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
public class DTCA923_tagGCArenaBattleRecordList : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA923_tagGCArenaBattleRecordList vNetData = vNetPack as HA923_tagGCArenaBattleRecordList;
        ArenaModel.Instance.ReceiveBattleRecordList(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagGCArenaBattleRecordList.cs.meta
File was renamed from Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/IL_DTCA923_tagGCArenaBattleRecordList.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4c280ad1dda1d65438b0fc394e2c65c1
guid: 2992ea3d95f234849ad294a7d23c940e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA926_tagGCArenaBattlePlayerInfo.cs
File was renamed from Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/IL_DTCA926_tagGCArenaBattlePlayerInfo.cs
@@ -1,12 +1,12 @@
using UnityEngine;
using System.Collections;
// A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
public class IL_DTCA926_tagGCArenaBattlePlayerInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        IL_HA926_tagGCArenaBattlePlayerInfo vNetData = vNetPack as IL_HA926_tagGCArenaBattlePlayerInfo;
        ArenaModel.Instance.ReceiveBattLePlayer(vNetData);
    }
}
// A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
public class DTCA926_tagGCArenaBattlePlayerInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA926_tagGCArenaBattlePlayerInfo vNetData = vNetPack as HA926_tagGCArenaBattlePlayerInfo;
        ArenaModel.Instance.ReceiveBattLePlayer(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA926_tagGCArenaBattlePlayerInfo.cs.meta
File was renamed from Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/IL_DTCA926_tagGCArenaBattlePlayerInfo.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 231e0192ff5e06d419330b686d051a50
guid: 5222f41b82ad6024e8fc57e58a5addad
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagGCArenaMatchList.cs
New file
@@ -0,0 +1,45 @@
using UnityEngine;
using System.Collections;
// A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList
public class HA922_tagGCArenaMatchList : GameNetPackBasic {
    public byte MatchCount;
    public  tagGCArenaMatchInfo[] MatchList;    // 匹配列表
    public HA922_tagGCArenaMatchList () {
        _cmd = (ushort)0xA922;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out MatchCount, vBytes, NetDataType.BYTE);
        MatchList = new tagGCArenaMatchInfo[MatchCount];
        for (int i = 0; i < MatchCount; i ++) {
            MatchList[i] = new tagGCArenaMatchInfo();
            TransBytes (out MatchList[i].PlayerID, vBytes, NetDataType.DWORD);
            TransBytes (out MatchList[i].PlayerName, vBytes, NetDataType.Chars, 33);
            TransBytes (out MatchList[i].Job, vBytes, NetDataType.BYTE);
            TransBytes (out MatchList[i].LV, vBytes, NetDataType.WORD);
            TransBytes (out MatchList[i].RealmLV, vBytes, NetDataType.WORD);
            TransBytes (out MatchList[i].FightPower, vBytes, NetDataType.DWORD);
            TransBytes (out MatchList[i].FightPowerEx, vBytes, NetDataType.DWORD);
            TransBytes (out MatchList[i].Score, vBytes, NetDataType.DWORD);
            TransBytes (out MatchList[i].Face, vBytes, NetDataType.DWORD);
            TransBytes (out MatchList[i].FacePic, vBytes, NetDataType.DWORD);
        }
    }
    public struct tagGCArenaMatchInfo {
        public uint PlayerID;        //目标玩家ID,小于10000为机器人ID
        public string PlayerName;
        public byte Job;
        public ushort LV;        //等级
        public ushort RealmLV;        //境界,机器人读境界表取等级对应境界
        public uint FightPower;        //战力求余亿部分,机器人读等级表取等级对应战力
        public uint FightPowerEx;        //战力整除亿部分,机器人读等级表取等级对应战力
        public uint Score;        //积分
        public uint Face;        //基本脸型
        public uint FacePic;        //头像框
    }
}
Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagGCArenaMatchList.cs.meta
File was renamed from Core/NetworkPackage/ServerPack/HA9_Function/IL_HA922_tagGCArenaMatchList.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ccb17a3b747ab1e488c8ae424595b8f9
guid: f9280ada14e829b4fb2c243d7a8dcd74
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagGCArenaBattleRecordList.cs
New file
@@ -0,0 +1,53 @@
using UnityEngine;
using System.Collections;
// A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
public class HA923_tagGCArenaBattleRecordList : GameNetPackBasic {
    public byte RecordCount;
    public  tagGCArenaBattleRecord[] BattleRecordList;    // 对战列表
    public HA923_tagGCArenaBattleRecordList () {
        _cmd = (ushort)0xA923;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out RecordCount, vBytes, NetDataType.BYTE);
        BattleRecordList = new tagGCArenaBattleRecord[RecordCount];
        for (int i = 0; i < RecordCount; i ++) {
            BattleRecordList[i] = new tagGCArenaBattleRecord();
            TransBytes (out BattleRecordList[i].PlayerID, vBytes, NetDataType.DWORD);
            TransBytes (out BattleRecordList[i].PlayerName, vBytes, NetDataType.Chars, 33);
            TransBytes (out BattleRecordList[i].Job, vBytes, NetDataType.BYTE);
            TransBytes (out BattleRecordList[i].LV, vBytes, NetDataType.WORD);
            TransBytes (out BattleRecordList[i].RealmLV, vBytes, NetDataType.WORD);
            TransBytes (out BattleRecordList[i].FightPower, vBytes, NetDataType.DWORD);
            TransBytes (out BattleRecordList[i].FightPowerEx, vBytes, NetDataType.DWORD);
            TransBytes (out BattleRecordList[i].Score, vBytes, NetDataType.DWORD);
            TransBytes (out BattleRecordList[i].AddScoreLen, vBytes, NetDataType.BYTE);
            TransBytes (out BattleRecordList[i].AddScore, vBytes, NetDataType.Chars, BattleRecordList[i].AddScoreLen);
            TransBytes (out BattleRecordList[i].IsWin, vBytes, NetDataType.BYTE);
            TransBytes (out BattleRecordList[i].Time, vBytes, NetDataType.DWORD);
            TransBytes (out BattleRecordList[i].Face, vBytes, NetDataType.DWORD);
            TransBytes (out BattleRecordList[i].FacePic, vBytes, NetDataType.DWORD);
        }
    }
    public struct tagGCArenaBattleRecord {
        public uint PlayerID;        //目标玩家ID,小于10000为机器人ID
        public string PlayerName;
        public byte Job;
        public ushort LV;        //等级
        public ushort RealmLV;        //境界,机器人读境界表取等级对应境界
        public uint FightPower;        //战力求余亿部分,机器人读等级表取等级对应战力
        public uint FightPowerEx;        //战力整除亿部分,机器人读等级表取等级对应战力
        public uint Score;        //积分
        public byte AddScoreLen;
        public string AddScore;        //本次对战增加的积分,有正负
        public byte IsWin;        //是否获胜
        public uint Time;        //时间戳
        public uint Face;        //基本脸型
        public uint FacePic;        //头像框
    }
}
Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagGCArenaBattleRecordList.cs.meta
File was renamed from Core/NetworkPackage/ServerPack/HA9_Function/IL_HA923_tagGCArenaBattleRecordList.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 30d1dda947fb2e948887bf6abcf06445
guid: af5bc007c6a300f458b7dfa3ffcc3deb
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Core/NetworkPackage/ServerPack/HA9_Function/HA926_tagGCArenaBattlePlayerInfo.cs
File was renamed from Core/NetworkPackage/ServerPack/HA9_Function/IL_HA926_tagGCArenaBattlePlayerInfo.cs
@@ -1,31 +1,33 @@
using UnityEngine;
using System.Collections;
// A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
public class IL_HA926_tagGCArenaBattlePlayerInfo : GameNetPackBasic {
    public uint PlayerID;    //目标玩家ID
    public string PlayerName;
    public byte Job;
    public ushort LV;    //等级
    public ushort RealmLV;    //境界,机器人读境界表取等级对应境界
    public uint FightPower;    //战力求余亿部分,机器人读等级表取等级对应战力
    public uint FightPoweEx;    //战力整除亿部分,机器人读等级表取等级对应战力
    public uint Score;    //积分
    public IL_HA926_tagGCArenaBattlePlayerInfo () {
        _cmd = (ushort)0xA926;
    }
    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 FightPower, vBytes, NetDataType.DWORD);
        TransBytes (out FightPoweEx, vBytes, NetDataType.DWORD);
        TransBytes (out Score, vBytes, NetDataType.DWORD);
    }
}
// A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
public class HA926_tagGCArenaBattlePlayerInfo : GameNetPackBasic {
    public uint PlayerID;    //目标玩家ID
    public string PlayerName;
    public byte Job;
    public ushort LV;    //等级
    public ushort RealmLV;    //境界,机器人读境界表取等级对应境界
    public uint Face;    //基本脸型
    public uint FightPower;    //战力求余亿部分,机器人读等级表取等级对应战力
    public uint FightPowerEx;    //战力整除亿部分,机器人读等级表取等级对应战力
    public uint Score;    //积分
    public HA926_tagGCArenaBattlePlayerInfo () {
        _cmd = (ushort)0xA926;
    }
    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 Face, vBytes, NetDataType.DWORD);
        TransBytes (out FightPower, vBytes, NetDataType.DWORD);
        TransBytes (out FightPowerEx, vBytes, NetDataType.DWORD);
        TransBytes (out Score, vBytes, NetDataType.DWORD);
    }
}
Core/NetworkPackage/ServerPack/HA9_Function/HA926_tagGCArenaBattlePlayerInfo.cs.meta
File was renamed from Core/NetworkPackage/ServerPack/HA9_Function/IL_HA926_tagGCArenaBattlePlayerInfo.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e2a25b3f5a1d00f4c89a8d21e7db08e5
guid: 800b7a2fdb5471a4fbd97c3f6ba75e59
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
Core/NetworkPackage/ServerPack/HA9_Function/IL_HA922_tagGCArenaMatchList.cs
File was deleted
Core/NetworkPackage/ServerPack/HA9_Function/IL_HA923_tagGCArenaBattleRecordList.cs
File was deleted
LogicProject/Protocol/ClientPack/ClientToGameServer/CA9_Function/IL_CA9A2_tagCPYWatchBillboard.cs
File was deleted
LogicProject/Protocol/ClientPack/ClientToGameServer/CA9_Function/IL_CA9A2_tagCPYWatchBillboard.cs.meta
File was deleted
LogicProject/System/ArenaActivity/ArenaFightingPKCell.cs
@@ -4,7 +4,7 @@
using System;
using vnxbqy.UI;
namespace Snxxz.Arena
namespace vnxbqy.UI
{
    public class ArenaFightingPKCell : ILBehaviour
    {
LogicProject/System/ArenaActivity/ArenaFightingPKWin.cs
@@ -1,564 +1,609 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using vnxbqy.UI;
public class ArenaFightingPKWin : ILWindow
{
    RoleInformation m_RoleInformation1;
    RoleInformation m_RoleInformation2;
    Button m_AutoBtn;
    Transform m_AutoImg;
    Text m_CountdownText;
    ScrollerController m_ScrollerController1;
    Transform Viewport1;
    ScrollerController m_ScrollerController2;
    Transform Viewport2;
    public float UpperAndLower = 17f;
    public float ItemHeight = 135f;
    public float MaxHeight = 422f;
    private ScrollRect _ScrollRect1;
    private ScrollRect _ScrollRect2;
    private List<int> _MyBuffSortList = new List<int>();//自身BUff列表
    private List<int> _OpponentBuffSortList = new List<int>();//对手buff列表
    DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
    DateTime dungeonEndTime;
    BuffModel m_BuffModel;
    BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>()); } }
    private int positionType = 1;
    #region Built-in
    protected override void BindController()
    {
        m_RoleInformation1 = proxy.GetWidgtEx<RoleInformation>("HeadPortraitTip1");
        m_RoleInformation2 = proxy.GetWidgtEx<RoleInformation>("HeadPortraitTip2");
        m_AutoBtn = proxy.GetWidgtEx<Button>("AutoBtn");
        m_AutoImg = proxy.GetWidgtEx<Transform>("AutoImg");
        m_CountdownText = proxy.GetWidgtEx<Text>("CountdownText");
        m_ScrollerController1 = proxy.GetWidgtEx<ScrollerController>("ScrollerController1");
        Viewport1 = proxy.GetWidgtEx<Transform>("Viewport1");
        m_ScrollerController2 = proxy.GetWidgtEx<ScrollerController>("ScrollerController2");
        Viewport2 = proxy.GetWidgtEx<Transform>("Viewport2");
        _ScrollRect1 = Viewport1.GetComponent<ScrollRect>();
        _ScrollRect2 = Viewport2.GetComponent<ScrollRect>();
    }
    protected override void AddListeners()
    {
        m_AutoBtn.AddListener(AutoButton);
        m_RoleInformation1.BuffButton.AddListener(myBuffList);
        m_RoleInformation2.BuffButton.AddListener(opponentBuffList);
    }
    protected override void OnPreOpen()
    {
        positionType = ArenaModel.Instance.ArenaPKUpInfoData.myBornPoint;
        PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;//数据的刷新(h0418)
        GA_Player.s_OnRefreshLife += OnRefreshPlayerLifeBar;
        if (PlayerDatas.Instance.hero != null)
        {
            PlayerDatas.Instance.hero.ActorInfo.OnHpChange += OnHeroHpChanged;
        }
        _MyBuffSortList.Clear();
        _OpponentBuffSortList.Clear();
        BuffScheduling();//buff排序
        GetopponentBuff();
        IsShowMyBuffBtn();
        IsShowOpponentBuffBtn();
    }
    protected override void OnActived()
    {
        dungeonEndTime = dungeonModel.GetCoolDownEndTime(DungeonCoolDownType.FightStart);
        PlaceOfBirth(positionType);//从出生位置设置信息
        Viewport1.SetActiveIL(false);
        Viewport2.SetActiveIL(false);
    }
    protected override void OnAfterOpen()
    {
        OnCreateGridLineCell(m_ScrollerController1);
        OnCreateGridLineCel2(m_ScrollerController2);
        ArenaModel.Instance.UpdatePKInfoListEvent += PlaceOfBirth;
        m_ScrollerController1.OnRefreshCell += OnRefreshGridCell1;
        m_ScrollerController2.OnRefreshCell += OnRefreshGridCell2;
        HeroBehaviour.OnStopHandupAI += OnHeroHandupAIStopPassive;
        HeroBehaviour.OnStartHandupAI += OnHeroHandupAIStarted;
        dungeonModel.dungeonCoolDownEvent += DungeonCoolDownEvent;
        BuffModel.Even_ObjAddBuf += AddBuff;
        BuffModel.Even_ObjDelBuff += DelBuff;
        BuffModel.BuffUpdateEvent += BuffUpdateEvent;
        GA_Player.ShieldUpdate += ShieldUpdate;
    }
    protected override void OnPreClose()
    {
        ArenaModel.Instance.UpdatePKInfoListEvent -= PlaceOfBirth;
        m_ScrollerController1.OnRefreshCell -= OnRefreshGridCell1;
        m_ScrollerController2.OnRefreshCell -= OnRefreshGridCell2;
        PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;//数据的刷新(h0418)
        GA_Player.s_OnRefreshLife -= OnRefreshPlayerLifeBar;
        if (PlayerDatas.Instance.hero != null)
        {
            PlayerDatas.Instance.hero.ActorInfo.OnHpChange -= OnHeroHpChanged;
        }
        HeroBehaviour.OnStopHandupAI -= OnHeroHandupAIStopPassive;
        HeroBehaviour.OnStartHandupAI -= OnHeroHandupAIStarted;
        dungeonModel.dungeonCoolDownEvent -= DungeonCoolDownEvent;
        BuffModel.Even_ObjAddBuf -= AddBuff;
        BuffModel.Even_ObjDelBuff -= DelBuff;
        BuffModel.BuffUpdateEvent -= BuffUpdateEvent;
        GA_Player.ShieldUpdate -= ShieldUpdate;
    }
    protected override void LateUpdate()
    {
        if (PlayerDatas.Instance.hero != null && PlayerDatas.Instance.hero.aiHandler.IsAuto())
        {
            m_AutoImg.SetActiveIL(false);
        }
        else
        {
            m_AutoImg.SetActiveIL(true);
        }
        if (WindowCenter.Instance.IsOpen("ArenaSettlementWin"))
        {
            return;
        }
        if (TimeUtility.ServerNow >= dungeonEndTime)
        {
            m_CountdownText.text = "0";
        }
        else
        {
            var surplus = dungeonEndTime - TimeUtility.ServerNow;
            m_CountdownText.text = (Mathf.CeilToInt((float)surplus.TotalSeconds)).ToString();
        }
    }
    #endregion
    private void OnHeroHpChanged(ulong hp)
    {
        PlaceOfBirthUpdate(positionType);
    }
    private void DelBuff()
    {
        BuffScheduling();
        UpdateControllerPosition();
        IsShowMyBuffBtn();
        if (positionType == 1)
        {
            OnCreateGridLineCell(m_ScrollerController1);
        }
        else
        {
            OnCreateGridLineCel2(m_ScrollerController2);
        }
    }
    private void AddBuff()
    {
        BuffScheduling();
        UpdateControllerPosition();
        IsShowMyBuffBtn();
        if (positionType == 1)
        {
            OnCreateGridLineCell(m_ScrollerController1);
        }
        else
        {
            OnCreateGridLineCel2(m_ScrollerController2);
        }
    }
    private void BuffUpdateEvent(int playerID)
    {
        int opponentPlayerId = ArenaModel.Instance.ArenaPKUpInfoData.opponentPlayerId;
        if (playerID == opponentPlayerId)
        {
            GetopponentBuff();
            UpdateControllerPositionOppoent();
            IsShowOpponentBuffBtn();
            if (positionType == 1)
            {
                OnCreateGridLineCel2(m_ScrollerController2);
            }
            else
            {
                OnCreateGridLineCell(m_ScrollerController1);
            }
        }
    }
    private void DungeonCoolDownEvent(DungeonCoolDownType type)
    {
        if (type == DungeonCoolDownType.FightStart)
        {
            dungeonEndTime = dungeonModel.GetCoolDownEndTime(DungeonCoolDownType.FightStart);
            ArenaManagerModel.Instance.dungeonEndTime = dungeonEndTime;
            ArenaManagerModel.Instance.fightStart = true;
        }
    }
    private void Updatefighting(PlayerDataType _tCDBPlayerRefresh)
    {
        switch (_tCDBPlayerRefresh)
        {
            case PlayerDataType.LV://等级的刷新8
            case PlayerDataType.MaxHP://最大血量的刷新28
            case PlayerDataType.HP://当前血量29
            case PlayerDataType.ExAttr4://当前护盾值
            case PlayerDataType.MaxProDef://最大护盾值
                PlaceOfBirthUpdate(positionType);
                break;
        }
    }
    private void OnRefreshPlayerLifeBar(uint _instanceId, ulong _hp, ulong _maxHp)
    {
        // Debug.Log("============== 最大血量" + _maxHp + "当前血量" + _hp);
        if (_instanceId == PlayerDatas.Instance.baseData.PlayerID)
            return;
        //对手固定是右边
        m_RoleInformation2.SetHeroHP(_maxHp, _hp);
    }
    private void ShieldUpdate(int playerID, int maxShield, int shieldNow)
    {
        if (playerID == PlayerDatas.Instance.baseData.PlayerID)
            return;
        //对手固定是右边
        m_RoleInformation2.SetShieldNumber(maxShield, shieldNow);
}
    private void OnHeroHandupAIStopPassive()
    {
        //if (!m_AutoImg.activeSelf)
        //{
        //    m_AutoImg.SetActive(true);
        //}
    }
    void OnHeroHandupAIStarted()
    {
        //if (m_AutoImg.activeSelf)
        //{
        //    m_AutoImg.SetActive(false);
        //}
    }
    private void AutoButton()
    {
        var _hero = PlayerDatas.Instance.hero;
        if (_hero != null && !_hero.ActorInfo.serverDie)
        {
            if (!_hero.aiHandler.IsAuto())
            {
                _hero.Behaviour.StartHandupAI();
            }
            else
            {
                _hero.Behaviour.StopHandupAI(true);
            }
        }
        //m_AutoImg.SetActive(!m_AutoImg.activeSelf);
    }
    private void myBuffList()
    {
        Viewport1.SetActiveIL(true);
    }
    private void opponentBuffList()
    {
        Viewport2.SetActiveIL(true);
    }
    private void OnCreateGridLineCell(ScrollerController gridCtrl)
    {
        gridCtrl.Refresh();
        if (positionType == 1)
        {
            for (int i = 0; i < _MyBuffSortList.Count; i++)
            {
                gridCtrl.AddCell(ScrollerDataType.Header, _MyBuffSortList[i]);
            }
        }
        else
        {
            for (int i = 0; i < _OpponentBuffSortList.Count; i++)
            {
                gridCtrl.AddCell(ScrollerDataType.Header, _OpponentBuffSortList[i]);
            }
        }
        gridCtrl.Restart();
    }
    private void OnCreateGridLineCel2(ScrollerController gridCtrl)
    {
        gridCtrl.Refresh();
        if (positionType == 1)
        {
            for (int i = 0; i < _OpponentBuffSortList.Count; i++)
            {
                gridCtrl.AddCell(ScrollerDataType.Header, _OpponentBuffSortList[i]);
            }
        }
        else
        {
            for (int i = 0; i < _MyBuffSortList.Count; i++)
            {
                gridCtrl.AddCell(ScrollerDataType.Header, _MyBuffSortList[i]);
            }
        }
        gridCtrl.Restart();
    }
    private void OnRefreshGridCell1(ScrollerDataType type, CellView cell)
    {
        if (cell == null)
            return;
        int _index = cell.index;
        BuffBGMScripts _buffBGM = cell.GetComponent<BuffBGMScripts>();
        var skillconfig = SkillConfig.Get(_index);
        _buffBGM.b_BuffIcon.SetSprite(skillconfig.IconName);
        _buffBGM.b_BuffName.text = skillconfig.SkillName;
        _buffBGM.b_BuffContent.text = skillconfig.BuffDescription;
        _buffBGM.b_BuffTime.SetActiveIL(false);
        _buffBGM.BiBuffText.SetActiveIL(false);
        _buffBGM._OnOff = false;
    }
    private void OnRefreshGridCell2(ScrollerDataType type, CellView cell)
    {
        if (cell == null)
            return;
        int _index = cell.index;
        BuffBGMScripts _buffBGM = cell.GetComponent<BuffBGMScripts>();
        var skillconfig = SkillConfig.Get(_index);
        _buffBGM.b_BuffIcon.SetSprite(skillconfig.IconName);
        _buffBGM.b_BuffName.text = skillconfig.SkillName;
        _buffBGM.b_BuffContent.text = skillconfig.BuffDescription;
        _buffBGM.b_BuffTime.SetActiveIL(false);
        _buffBGM.BiBuffText.SetActiveIL(false);
        _buffBGM._OnOff = false;
    }
    void UpdateControllerPosition()
    {
        if (_MyBuffSortList.Count == 0)
        {
            return;
        }
        if (_MyBuffSortList.Count * ItemHeight >= MaxHeight)
        {
            if (positionType == 1)
            {
                _ScrollRect1.vertical = true;
                (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower);
            }
            else
            {
                _ScrollRect2.vertical = true;
                (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower);
            }
        }
        else
        {
            if (positionType == 1)
            {
                _ScrollRect1.vertical = false;
                (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(_MyBuffSortList.Count * ItemHeight + UpperAndLower);
            }
            else
            {
                _ScrollRect2.vertical = false;
                (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(_MyBuffSortList.Count * ItemHeight + UpperAndLower);
            }
        }
    }
    void UpdateControllerPositionOppoent()
    {
        if (_OpponentBuffSortList.Count == 0)
        {
            return;
        }
        if (_OpponentBuffSortList.Count * ItemHeight >= MaxHeight)
        {
            if (positionType == 1)
            {
                _ScrollRect2.vertical = true;
                (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower);
            }
            else
            {
                _ScrollRect1.vertical = true;
                (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower);
            }
        }
        else
        {
            if (positionType == 1)
            {
                _ScrollRect2.vertical = false;
                (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(_OpponentBuffSortList.Count * ItemHeight + UpperAndLower);
            }
            else
            {
                _ScrollRect1.vertical = false;
                (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(_OpponentBuffSortList.Count * ItemHeight + UpperAndLower);
            }
        }
    }
    void BuffScheduling()//buff排序
    {
        //_MyBuffSortList.Clear();
        //foreach (int key in Buffmodel._BuffDic.Keys)
        //{
        //    _MyBuffSortList.Add(key);
        //}
    }
    private void IsShowMyBuffBtn()
    {
        if (_MyBuffSortList.Count > 0)
        {
            if (positionType == 1)
            {
                m_RoleInformation1.BuffButton.SetActiveIL(true);
            }
            else
            {
                m_RoleInformation2.BuffButton.SetActiveIL(true);
            }
        }
        else
        {
            if (positionType == 1)
            {
                m_RoleInformation1.BuffButton.SetActiveIL(false);
                Viewport1.SetActiveIL(false);
            }
            else
            {
                m_RoleInformation2.BuffButton.SetActiveIL(false);
                Viewport2.SetActiveIL(false);
            }
            UpdateControllerPosition();
        }
        if (positionType == 1)
        {
            m_RoleInformation1.BuffNumber.text = _MyBuffSortList.Count.ToString();
        }
        else
        {
            m_RoleInformation2.BuffNumber.text = _MyBuffSortList.Count.ToString();
        }
    }
    private void IsShowOpponentBuffBtn()
    {
        if (_OpponentBuffSortList.Count > 0)
        {
            if (positionType == 1)
            {
                m_RoleInformation2.BuffButton.SetActiveIL(true);
            }
            else
            {
                m_RoleInformation1.BuffButton.SetActiveIL(true);
            }
            UpdateControllerPositionOppoent();
        }
        else
        {
            if (positionType == 1)
            {
                m_RoleInformation2.BuffButton.SetActiveIL(false);
                Viewport2.SetActiveIL(false);
            }
            else
            {
                m_RoleInformation1.BuffButton.SetActiveIL(false);
                Viewport1.SetActiveIL(false);
            }
        }
        if (positionType == 1)
        {
            m_RoleInformation2.BuffNumber.text = _OpponentBuffSortList.Count.ToString();
        }
        else
        {
            m_RoleInformation1.BuffNumber.text = _OpponentBuffSortList.Count.ToString();
        }
    }
    private void PlaceOfBirth(int type)//关于出生点设置位置信息
    {
        dungeonEndTime = dungeonModel.GetCoolDownEndTime(DungeonCoolDownType.FightStart);
        int realmLv;
        //-----------自己的信息
        ArenaModel.ArenaPKUpInfo arenaPKUpInfo = ArenaModel.Instance.ArenaPKUpInfoData;
        m_RoleInformation1.SetHeroHead((int)PlayerDatas.Instance.baseData.PlayerID, arenaPKUpInfo.myJob, arenaPKUpInfo.myFace, arenaPKUpInfo.myJob);
        string PlayerName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.myName);
        realmLv = PlayerDatas.Instance.baseData.realmLevel;
        m_RoleInformation1.SetHeroLvAndNameLV((int)PlayerDatas.Instance.baseData.LV, PlayerName, realmLv);
        m_RoleInformation1.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, PlayerDatas.Instance.baseData.HP);
        m_RoleInformation1.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield);
        m_RoleInformation1.BuffButton.SetActiveIL(false);
        //------------------------------------//对手信息 固定是右边
        m_RoleInformation2.SetHeroHead(arenaPKUpInfo.opponentPlayerId, arenaPKUpInfo.opponentFace, arenaPKUpInfo.opponentFacePic, arenaPKUpInfo.opponentJob);
        string OpponentName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.opponentName);
        realmLv = ArenaModel.Instance.ArenaPKUpInfoData.realmLV;
        m_RoleInformation2.SetHeroLvAndNameLV((int)ArenaModel.Instance.ArenaPKUpInfoData.opponentLevel, OpponentName, realmLv);
        if (ArenaManagerModel.playerInfo != null)
            m_RoleInformation2.SetHeroHP(ArenaManagerModel.playerInfo.maxHp, ArenaManagerModel.playerInfo.maxHp);
        m_RoleInformation2.SetShieldNumber(ArenaModel.Instance.ArenaPKUpInfoData.MaxProDef, ArenaModel.Instance.ArenaPKUpInfoData.opponentShield);
    }
    private void PlaceOfBirthUpdate(int type)//自身玩家属性刷新
    {
        //玩家固定是左边
        string PlayerName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.myName);
        m_RoleInformation1.SetHeroLvAndName((int)PlayerDatas.Instance.baseData.LV, PlayerName);
        m_RoleInformation1.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, PlayerDatas.Instance.baseData.HP);
        m_RoleInformation1.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield);
    }
    private void GetopponentBuff()//获取对手身上的Buff
    {
        List<int> buffIds = new List<int>();
        _OpponentBuffSortList.Clear();
        StatusMgr.Instance.GetBuffIds((uint)ArenaModel.Instance.ArenaPKUpInfoData.opponentPlayerId, ref buffIds);
        if (buffIds.Count > 0)
        {
            for (int i = 0; i < buffIds.Count; i++)
            {
                _OpponentBuffSortList.Add(buffIds[i]);
            }
        }
    }
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using vnxbqy.UI;
public class ArenaFightingPKWin : ILWindow
{
    RoleInformation m_RoleInformation1;
    RoleInformation m_RoleInformation2;
    Button m_AutoBtn;
    Transform m_AutoImg;
    Text m_CountdownText;
    ScrollerController m_ScrollerController1;
    Transform Viewport1;
    ScrollerController m_ScrollerController2;
    Transform Viewport2;
    public float UpperAndLower = 17f;
    public float ItemHeight = 135f;
    public float MaxHeight = 422f;
    private ScrollRect _ScrollRect1;
    private ScrollRect _ScrollRect2;
    private List<int> _MyBuffSortList = new List<int>();//自身BUff列表
    private List<int> _OpponentBuffSortList = new List<int>();//对手buff列表
    DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
    DateTime dungeonEndTime;
    BuffModel m_BuffModel;
    BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel<BuffModel>()); } }
    private int positionType = 1;
    #region Built-in
    protected override void BindController()
    {
        m_RoleInformation1 = proxy.GetWidgtEx<RoleInformation>("HeadPortraitTip1");
        m_RoleInformation2 = proxy.GetWidgtEx<RoleInformation>("HeadPortraitTip2");
        m_AutoBtn = proxy.GetWidgtEx<Button>("AutoBtn");
        m_AutoImg = proxy.GetWidgtEx<Transform>("AutoImg");
        m_CountdownText = proxy.GetWidgtEx<Text>("CountdownText");
        m_ScrollerController1 = proxy.GetWidgtEx<ScrollerController>("ScrollerController1");
        Viewport1 = proxy.GetWidgtEx<Transform>("Viewport1");
        m_ScrollerController2 = proxy.GetWidgtEx<ScrollerController>("ScrollerController2");
        Viewport2 = proxy.GetWidgtEx<Transform>("Viewport2");
        _ScrollRect1 = Viewport1.GetComponent<ScrollRect>();
        _ScrollRect2 = Viewport2.GetComponent<ScrollRect>();
    }
    protected override void AddListeners()
    {
        m_AutoBtn.AddListener(AutoButton);
        m_RoleInformation1.BuffButton.AddListener(myBuffList);
        m_RoleInformation2.BuffButton.AddListener(opponentBuffList);
    }
    protected override void OnPreOpen()
    {
        positionType = ArenaModel.Instance.ArenaPKUpInfoData.myBornPoint;
        CrossServerOneVsOneRewardModel.PkDanLvNow = CrossServerOneVsOnePlayerInfo.Instance.DanLV;
        PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;//数据的刷新(h0418)
        GA_Player.s_OnRefreshLife += OnRefreshPlayerLifeBar;
        if (PlayerDatas.Instance.hero != null)
        {
            PlayerDatas.Instance.hero.ActorInfo.OnHpChange += OnHeroHpChanged;
        }
        _MyBuffSortList.Clear();
        _OpponentBuffSortList.Clear();
        BuffScheduling();//buff排序
        GetopponentBuff();
        IsShowMyBuffBtn();
        IsShowOpponentBuffBtn();
    }
    protected override void OnActived()
    {
        dungeonEndTime = dungeonModel.GetCoolDownEndTime(DungeonCoolDownType.FightStart);
        PlaceOfBirth(positionType);//从出生位置设置信息
        Viewport1.SetActiveIL(false);
        Viewport2.SetActiveIL(false);
    }
    protected override void OnAfterOpen()
    {
        OnCreateGridLineCell(m_ScrollerController1);
        OnCreateGridLineCel2(m_ScrollerController2);
        ArenaModel.Instance.UpdatePKInfoListEvent += PlaceOfBirth;
        m_ScrollerController1.OnRefreshCell += OnRefreshGridCell1;
        m_ScrollerController2.OnRefreshCell += OnRefreshGridCell2;
        HeroBehaviour.OnStopHandupAI += OnHeroHandupAIStopPassive;
        HeroBehaviour.OnStartHandupAI += OnHeroHandupAIStarted;
        dungeonModel.dungeonCoolDownEvent += DungeonCoolDownEvent;
        BuffModel.Even_ObjAddBuf += AddBuff;
        BuffModel.Even_ObjDelBuff += DelBuff;
        BuffModel.BuffUpdateEvent += BuffUpdateEvent;
        OpponentInformation.Instance.ShieldUpdate += ShieldUpdate;
    }
    protected override void OnPreClose()
    {
        ArenaModel.Instance.UpdatePKInfoListEvent -= PlaceOfBirth;
        m_ScrollerController1.OnRefreshCell -= OnRefreshGridCell1;
        m_ScrollerController2.OnRefreshCell -= OnRefreshGridCell2;
        PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;//数据的刷新(h0418)
        GA_Player.s_OnRefreshLife -= OnRefreshPlayerLifeBar;
        if (PlayerDatas.Instance.hero != null)
        {
            PlayerDatas.Instance.hero.ActorInfo.OnHpChange -= OnHeroHpChanged;
        }
        HeroBehaviour.OnStopHandupAI -= OnHeroHandupAIStopPassive;
        HeroBehaviour.OnStartHandupAI -= OnHeroHandupAIStarted;
        dungeonModel.dungeonCoolDownEvent -= DungeonCoolDownEvent;
        BuffModel.Even_ObjAddBuf -= AddBuff;
        BuffModel.Even_ObjDelBuff -= DelBuff;
        BuffModel.BuffUpdateEvent -= BuffUpdateEvent;
        OpponentInformation.Instance.ShieldUpdate -= ShieldUpdate;
    }
    protected override void LateUpdate()
    {
        if (PlayerDatas.Instance.hero != null && PlayerDatas.Instance.hero.aiHandler.IsAuto())
        {
            m_AutoImg.SetActiveIL(false);
        }
        else
        {
            m_AutoImg.SetActiveIL(true);
        }
        if (WindowCenter.Instance.IsOpen("ArenaSettlementWin"))
        {
            return;
        }
        if (TimeUtility.ServerNow >= dungeonEndTime)
        {
            m_CountdownText.text = "0";
        }
        else
        {
            var surplus = dungeonEndTime - TimeUtility.ServerNow;
            m_CountdownText.text = (Mathf.CeilToInt((float)surplus.TotalSeconds)).ToString();
        }
    }
    #endregion
    private void OnHeroHpChanged(ulong hp)
    {
        PlaceOfBirthUpdate(positionType);
    }
    private void DelBuff()
    {
        BuffScheduling();
        UpdateControllerPosition();
        IsShowMyBuffBtn();
        if (positionType == 1)
        {
            OnCreateGridLineCell(m_ScrollerController1);
        }
        else
        {
            OnCreateGridLineCel2(m_ScrollerController2);
        }
    }
    private void AddBuff()
    {
        BuffScheduling();
        UpdateControllerPosition();
        IsShowMyBuffBtn();
        if (positionType == 1)
        {
            OnCreateGridLineCell(m_ScrollerController1);
        }
        else
        {
            OnCreateGridLineCel2(m_ScrollerController2);
        }
    }
    private void BuffUpdateEvent(int playerID)
    {
        int opponentPlayerId = ArenaModel.Instance.ArenaPKUpInfoData.opponentPlayerId;
        if (playerID == opponentPlayerId)
        {
            GetopponentBuff();
            UpdateControllerPositionOppoent();
            IsShowOpponentBuffBtn();
            if (positionType == 1)
            {
                OnCreateGridLineCel2(m_ScrollerController2);
            }
            else
            {
                OnCreateGridLineCell(m_ScrollerController1);
            }
        }
    }
    private void DungeonCoolDownEvent(DungeonCoolDownType type)
    {
        if (type == DungeonCoolDownType.FightStart)
        {
            dungeonEndTime = dungeonModel.GetCoolDownEndTime(DungeonCoolDownType.FightStart);
            ArenaManagerModel.Instance.dungeonEndTime = dungeonEndTime;
            ArenaManagerModel.Instance.fightStart = true;
        }
    }
    private void Updatefighting(PlayerDataType _tCDBPlayerRefresh)
    {
        switch (_tCDBPlayerRefresh)
        {
            case PlayerDataType.LV://等级的刷新8
            case PlayerDataType.MaxHP://最大血量的刷新28
            case PlayerDataType.HP://当前血量29
            case PlayerDataType.ExAttr4://当前护盾值
            case PlayerDataType.MaxProDef://最大护盾值
                PlaceOfBirthUpdate(positionType);
                break;
        }
    }
    private void OnRefreshPlayerLifeBar(uint _instanceId, ulong _hp, ulong _maxHp)
    {
        // Debug.Log("============== 最大血量" + _maxHp + "当前血量" + _hp);
        if (positionType == 1)
        {
            m_RoleInformation2.SetHeroHP(_maxHp, _hp);
        }
        else
        {
            m_RoleInformation1.SetHeroHP(_maxHp, _hp);
        }
    }
    private void ShieldUpdate(int playerID, int shieldNow)
    {
        if (playerID == ArenaModel.Instance.ArenaPKUpInfoData.opponentPlayerId)
        {
            if (positionType == 1)
            {
                m_RoleInformation2.SetShieldNumber(ArenaModel.Instance.ArenaPKUpInfoData.MaxProDef, shieldNow);
            }
            else
            {
                m_RoleInformation1.SetShieldNumber(ArenaModel.Instance.ArenaPKUpInfoData.MaxProDef, shieldNow);
            }
        }
    }
    private void OnHeroHandupAIStopPassive()
    {
        //if (!m_AutoImg.activeSelf)
        //{
        //    m_AutoImg.SetActive(true);
        //}
    }
    void OnHeroHandupAIStarted()
    {
        //if (m_AutoImg.activeSelf)
        //{
        //    m_AutoImg.SetActive(false);
        //}
    }
    private void AutoButton()
    {
        var _hero = PlayerDatas.Instance.hero;
        if (_hero != null && !_hero.ActorInfo.serverDie)
        {
            if (!_hero.aiHandler.IsAuto())
            {
                _hero.Behaviour.StartHandupAI();
            }
            else
            {
                _hero.Behaviour.StopHandupAI(true);
            }
        }
        //m_AutoImg.SetActive(!m_AutoImg.activeSelf);
    }
    private void myBuffList()
    {
        Viewport1.SetActiveIL(true);
    }
    private void opponentBuffList()
    {
        Viewport2.SetActiveIL(true);
    }
    private void OnCreateGridLineCell(ScrollerController gridCtrl)
    {
        gridCtrl.Refresh();
        if (positionType == 1)
        {
            for (int i = 0; i < _MyBuffSortList.Count; i++)
            {
                gridCtrl.AddCell(ScrollerDataType.Header, _MyBuffSortList[i]);
            }
        }
        else
        {
            for (int i = 0; i < _OpponentBuffSortList.Count; i++)
            {
                gridCtrl.AddCell(ScrollerDataType.Header, _OpponentBuffSortList[i]);
            }
        }
        gridCtrl.Restart();
    }
    private void OnCreateGridLineCel2(ScrollerController gridCtrl)
    {
        gridCtrl.Refresh();
        if (positionType == 1)
        {
            for (int i = 0; i < _OpponentBuffSortList.Count; i++)
            {
                gridCtrl.AddCell(ScrollerDataType.Header, _OpponentBuffSortList[i]);
            }
        }
        else
        {
            for (int i = 0; i < _MyBuffSortList.Count; i++)
            {
                gridCtrl.AddCell(ScrollerDataType.Header, _MyBuffSortList[i]);
            }
        }
        gridCtrl.Restart();
    }
    private void OnRefreshGridCell1(ScrollerDataType type, CellView cell)
    {
        if (cell == null)
            return;
        int _index = cell.index;
        BuffBGMScripts _buffBGM = cell.GetComponent<BuffBGMScripts>();
        var skillconfig = SkillConfig.Get(_index);
        _buffBGM.b_BuffIcon.SetSprite(skillconfig.IconName);
        _buffBGM.b_BuffName.text = skillconfig.SkillName;
        _buffBGM.b_BuffContent.text = skillconfig.BuffDescription;
        _buffBGM.b_BuffTime.SetActiveIL(false);
        _buffBGM.BiBuffText.SetActiveIL(false);
        _buffBGM._OnOff = false;
    }
    private void OnRefreshGridCell2(ScrollerDataType type, CellView cell)
    {
        if (cell == null)
            return;
        int _index = cell.index;
        BuffBGMScripts _buffBGM = cell.GetComponent<BuffBGMScripts>();
        var skillconfig = SkillConfig.Get(_index);
        _buffBGM.b_BuffIcon.SetSprite(skillconfig.IconName);
        _buffBGM.b_BuffName.text = skillconfig.SkillName;
        _buffBGM.b_BuffContent.text = skillconfig.BuffDescription;
        _buffBGM.b_BuffTime.SetActiveIL(false);
        _buffBGM.BiBuffText.SetActiveIL(false);
        _buffBGM._OnOff = false;
    }
    void UpdateControllerPosition()
    {
        if (_MyBuffSortList.Count == 0)
        {
            return;
        }
        if (_MyBuffSortList.Count * ItemHeight >= MaxHeight)
        {
            if (positionType == 1)
            {
                _ScrollRect1.vertical = true;
                (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower);
            }
            else
            {
                _ScrollRect2.vertical = true;
                (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower);
            }
        }
        else
        {
            if (positionType == 1)
            {
                _ScrollRect1.vertical = false;
                (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(_MyBuffSortList.Count * ItemHeight + UpperAndLower);
            }
            else
            {
                _ScrollRect2.vertical = false;
                (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(_MyBuffSortList.Count * ItemHeight + UpperAndLower);
            }
        }
    }
    void UpdateControllerPositionOppoent()
    {
        if (_OpponentBuffSortList.Count == 0)
        {
            return;
        }
        if (_OpponentBuffSortList.Count * ItemHeight >= MaxHeight)
        {
            if (positionType == 1)
            {
                _ScrollRect2.vertical = true;
                (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower);
            }
            else
            {
                _ScrollRect1.vertical = true;
                (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower);
            }
        }
        else
        {
            if (positionType == 1)
            {
                _ScrollRect2.vertical = false;
                (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(_OpponentBuffSortList.Count * ItemHeight + UpperAndLower);
            }
            else
            {
                _ScrollRect1.vertical = false;
                (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(_OpponentBuffSortList.Count * ItemHeight + UpperAndLower);
            }
        }
    }
    void BuffScheduling()//buff排序
    {
        //_MyBuffSortList.Clear();
        //foreach (int key in Buffmodel._BuffDic.Keys)
        //{
        //    _MyBuffSortList.Add(key);
        //}
    }
    private void IsShowMyBuffBtn()
    {
        if (_MyBuffSortList.Count > 0)
        {
            if (positionType == 1)
            {
                m_RoleInformation1.BuffButton.SetActiveIL(true);
            }
            else
            {
                m_RoleInformation2.BuffButton.SetActiveIL(true);
            }
        }
        else
        {
            if (positionType == 1)
            {
                m_RoleInformation1.BuffButton.SetActiveIL(false);
                Viewport1.SetActiveIL(false);
            }
            else
            {
                m_RoleInformation2.BuffButton.SetActiveIL(false);
                Viewport2.SetActiveIL(false);
            }
            UpdateControllerPosition();
        }
        if (positionType == 1)
        {
            m_RoleInformation1.BuffNumber.text = _MyBuffSortList.Count.ToString();
        }
        else
        {
            m_RoleInformation2.BuffNumber.text = _MyBuffSortList.Count.ToString();
        }
    }
    private void IsShowOpponentBuffBtn()
    {
        if (_OpponentBuffSortList.Count > 0)
        {
            if (positionType == 1)
            {
                m_RoleInformation2.BuffButton.SetActiveIL(true);
            }
            else
            {
                m_RoleInformation1.BuffButton.SetActiveIL(true);
            }
            UpdateControllerPositionOppoent();
        }
        else
        {
            if (positionType == 1)
            {
                m_RoleInformation2.BuffButton.SetActiveIL(false);
                Viewport2.SetActiveIL(false);
            }
            else
            {
                m_RoleInformation1.BuffButton.SetActiveIL(false);
                Viewport1.SetActiveIL(false);
            }
        }
        if (positionType == 1)
        {
            m_RoleInformation2.BuffNumber.text = _OpponentBuffSortList.Count.ToString();
        }
        else
        {
            m_RoleInformation1.BuffNumber.text = _OpponentBuffSortList.Count.ToString();
        }
    }
    private void PlaceOfBirth(int type)//关于出生点设置位置信息
    {
        //dungeonEndTime = dungeonModel.GetCoolDownEndTime(DungeonCoolDownType.FightStart);
        //int realmLv;
        //if (type == 1)//左
        //{
        //    //-----------自己的信息
        //    m_RoleInformation1.SetHeroHead(ArenaModel.Instance.ArenaPKUpInfoData.myFace);
        //    string PlayerName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.myName);
        //    realmLv = PlayerDatas.Instance.baseData.realmLevel;
        //    m_RoleInformation1.SetHeroLvAndNameLV((int)PlayerDatas.Instance.baseData.LV, PlayerName, realmLv);
        //    m_RoleInformation1.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, PlayerDatas.Instance.baseData.HP);
        //    m_RoleInformation1.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield);
        //    m_RoleInformation1.BuffButton.SetActiveIL(false);
        //    //------------------------------------//对手信息
        //    int face = ArenaModel.Instance.ArenaPKUpInfoData.opponentFace;
        //    m_RoleInformation2.SetHeroHead(face);
        //    string OpponentName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.opponentName);
        //    realmLv = ArenaModel.Instance.ArenaPKUpInfoData.realmLV;
        //    m_RoleInformation2.SetHeroLvAndNameLV((int)ArenaModel.Instance.ArenaPKUpInfoData.opponentLevel, OpponentName, realmLv);
        //    m_RoleInformation2.SetHeroHP(ArenaManagerModel.playerInfo.maxHp, ArenaManagerModel.playerInfo.maxHp);
        //    m_RoleInformation2.SetShieldNumber(ArenaModel.Instance.ArenaPKUpInfoData.MaxProDef, ArenaModel.Instance.ArenaPKUpInfoData.opponentShield);
        //}
        //else//右
        //{
        //    //-----------自己的信息
        //    m_RoleInformation2.SetHeroHead(ArenaModel.Instance.ArenaPKUpInfoData.myFace);
        //    string PlayerName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.myName);
        //    realmLv = PlayerDatas.Instance.baseData.realmLevel;
        //    m_RoleInformation2.SetHeroLvAndNameLV((int)PlayerDatas.Instance.baseData.LV, PlayerName, realmLv);
        //    m_RoleInformation2.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, PlayerDatas.Instance.baseData.HP);
        //    m_RoleInformation2.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield);
        //    m_RoleInformation2.BuffButton.SetActiveIL(false);
        //    //------------------------------------//对手信息
        //    int face = ArenaModel.Instance.ArenaPKUpInfoData.opponentFace;
        //    m_RoleInformation1.SetHeroHead(face);
        //    string OpponentName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.opponentName);
        //    realmLv = ArenaModel.Instance.ArenaPKUpInfoData.realmLV;
        //    m_RoleInformation1.SetHeroLvAndNameLV((int)ArenaModel.Instance.ArenaPKUpInfoData.opponentLevel, OpponentName, realmLv);
        //    m_RoleInformation1.SetHeroHP(ArenaManagerModel.playerInfo.maxHp, ArenaManagerModel.playerInfo.maxHp);
        //    m_RoleInformation1.SetShieldNumber(100, 0);
        //}
    }
    private void PlaceOfBirthUpdate(int type)//自身玩家属性刷新
    {
        if (type == 1)
        {
            string PlayerName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.myName);
            m_RoleInformation1.SetHeroLvAndName((int)PlayerDatas.Instance.baseData.LV, PlayerName);
            m_RoleInformation1.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, PlayerDatas.Instance.baseData.HP);
            m_RoleInformation1.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield);
#if UNITY_EDITOR
        //  Debug.LogFormat("设置血量: {0}/{1}", PlayerDatas.Instance.baseData.HP, PlayerDatas.Instance.extersion.MaxHP);
#endif
        }
        else
        {
            string PlayerName = UIHelper.ServerStringTrim(ArenaModel.Instance.ArenaPKUpInfoData.myName);
            m_RoleInformation2.SetHeroLvAndName((int)PlayerDatas.Instance.baseData.LV, PlayerName);
            m_RoleInformation2.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, PlayerDatas.Instance.baseData.HP);
            m_RoleInformation2.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield);
#if UNITY_EDITOR
        //  Debug.LogFormat("设置血量: {0}/{1}", PlayerDatas.Instance.baseData.HP, PlayerDatas.Instance.extersion.MaxHP);
#endif
        }
    }
    private void GetopponentBuff()//获取对手身上的Buff
    {
        List<int> buffIds = new List<int>();
        _OpponentBuffSortList.Clear();
        StatusMgr.Instance.GetBuffIds((uint)ArenaModel.Instance.ArenaPKUpInfoData.opponentPlayerId, ref buffIds);
        if (buffIds.Count > 0)
        {
            for (int i = 0; i < buffIds.Count; i++)
            {
                _OpponentBuffSortList.Add(buffIds[i]);
            }
        }
    }
}
LogicProject/System/ArenaActivity/ArenaManagerModel.cs
@@ -19,11 +19,9 @@
        }
    }
    /// stage
    public static readonly Vector3 leftBornPoint = new Vector3(4.9f, 0.2f, 3.5f);
    static readonly Vector3 rightBornPoint = new Vector3(20f, 0.2f, 18.8f);
    public static readonly Vector3 leftBornPoint = new Vector3(4f, 0.2f, 11.5f);
    static readonly Vector3 rightBornPoint = new Vector3(11.5f, 0.2f, 4f);
    static readonly Vector3 initPoint = new Vector3(30f, 0.2f, 30f);
    public int[] s_StepTimes = null;
@@ -31,8 +29,6 @@
    static ILPKStageType pkStageType;
    public static GA_PlayerClient.PlayerInfo playerInfo;
    static GA_ILClientPlayer opponentPlayer;
    static GA_Player mirrorPlayer;
    public static bool isMirrorFight { get; set; }
    static uint roundWiner = 0;
    static ILPKStage currentStage;
    public DateTime dungeonEndTime;
@@ -77,7 +73,6 @@
        HeroBehaviour.OnUserClickSkill += OnILUserClickSkill;
        //显示PK UI
        ArenaManager.OnILPKWinShow += OnILPKWinShow;
    }
    protected override void UnInit()
    {
@@ -131,28 +126,7 @@
        recordDataMapId = dataMapId;
    }
    
    //副本结算界面
    public void UpdateFBEnd()
    {
        if (dungeonModel.dungeonResult.isWin == 1)
        {
            roundWiner = PlayerDatas.Instance.baseData.PlayerID;
        }
        else
        {
            roundWiner = ArenaModel.Instance.OPPONENT_PLAYERID;
        }
        //ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID,
        //    (byte)(dungeonModel.dungeonResult.isWin == 1 ? 1 : 2));
        if (ArenaManager.IsArenaStage())
            WindowCenter.Instance.OpenIL<ArenaSettlementWin>();
        else
            PopupWindowsProcessor.Instance.Add("ArenaSettlementWin");
        //更新排名
        ArenaRankModel.Instance.SetMyRank(ArenaModel.Instance.RankType, dungeonModel.dungeonResult.updOrder);
    }
    void OnILPKWinShow(bool bShow)
    {
        if (bShow)
@@ -172,13 +146,13 @@
    }
    void OnILStopHandupAI()
    {
        if (!ArenaManager.IsArenaClientNotMirrorFight)
        if (!ArenaManager.isArenaClient)
            return;
        PlayerDatas.Instance.hero.SkillMgr.ResetAllCD();
    }
    void OnILCastSkill(int SkillID)
    {
        if (!ArenaManager.IsArenaClientNotMirrorFight)
        if (!ArenaManager.isArenaClient)
            return;
        Skill _skill = PlayerDatas.Instance.hero.SkillMgr.Get(SkillID);
        if (!_skill.IsValid())
@@ -308,7 +282,7 @@
    }
    void OnILPlayerUpdateAI()
    {
        if (!ArenaManager.IsArenaClientNotMirrorFight)
        if (!ArenaManager.isArenaClient)
            return;
        if (Application.isEditor)
        {
@@ -322,7 +296,8 @@
                PlayerDatas.Instance.hero.ActorInfo.Hp = 0;
            }
        }
        CameraController.Instance.rotationX = 45;
        CameraController.Instance.Apply();
        if (!ArenaModel.Instance.bILAI)
            return;
        if (dungeonModel.dungeonFightStage != DungeonFightStage.Normal)
@@ -632,7 +607,7 @@
    }
    //////////////////////////////////////////////////////////////////Arena Stage控制///////////////////////////////////////////////////////////////
    void OnILStageInitialize()
    {
    {
        ArenaModel.Instance.FakeMatchOk();
        fightInfo = default(ILFightInfo);
        fightInfo.isOver = false;
@@ -651,6 +626,7 @@
            opponentPlayer = null;
        }
        
        ArenaManager.isArenaClient = false;
        ArenaManager.isArenaPK = false;
        ArenaManagerModel.Instance.ReleasePlayer();
        ClientDungeonStageUtility.SetClientDungeon(false, 0);
@@ -663,9 +639,9 @@
    {
        if (!ArenaManager.IsArenaStage())
            return;
        ArenaManager.isArenaPK = true;
        ArenaManager.isArenaClient = true;
        ArenaManager.isArenaPK = true;
        ArenaModel.Instance.IsArenaWork = true;
        recordDataMapId = ArenaManager.MapID;
        ArenaModel.Instance.StartInit();
@@ -673,10 +649,7 @@
        // B2 10 竞技场挑战玩家  通知后端登记挑战目标ID
        uint PlayerID = ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID;
        if (PlayerID > 10000)
            isMirrorFight = true;
        ArenaModel.Instance.SendArenaBattle(PlayerID, 0);
        ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 0);
        if (opponentPlayer != null)
        {
@@ -710,70 +683,36 @@
        }
        else
        {
            ArenaManager.isArenaRobot = false;
            //发送命令获得个人详细信息
            PersonalEnemy.OnMirrorPlayerAppear += OnPlayerAppear;
            //RoleParticularModel.OnRevPackage += OnRevA705;
            //ModelCenter.Instance.GetModel<RoleParticularModel>().ViewPlayerCacheData((int)PlayerID, (int)ViewPlayerType.viewPlayerDataArena);
            ArenaManager.isArenaRobot = false;
            //发送命令获得个人详细信息
            CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();
            pak.PlayerID = (uint)PlayerID;
            GameNetSystem.Instance.SendInfo(pak);
            //DTCA705_tagSCQueryPlayerCacheResult.OnRevPackage += OnRevA705;
        }
    }
    //private void OnRevA705(int viewType, int playerID, RoleParticularModel.ViewPlayerData data)
    //{
    //    uint PlayerID = ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID;
    //    if (playerID != PlayerID)
    //        return;
    //    RoleParticularModel.OnRevPackage -= OnRevA705;
    //    playerInfo = GetRealPlayerInfo(data.rolePropData);
    //    playerInfo.playerID = PlayerID;
    //    //PersonalEnemy.Create(30000, rightBornPoint, playerInfo,false);
    //    PersonalEnemy.OnILPlayerAppear += OnPlayerAppear;
    //    SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
    //    ArenaModel.Instance.CallUpdatePKInfo(1);
    //}
    private void OnRevA705(HA705_tagSCQueryPlayerCacheResult package)
    {
        uint PlayerID = ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID;
        if (package.PlayerID != PlayerID)
            return;
        //DTCA705_tagSCQueryPlayerCacheResult.OnRevPackage -= OnRevA705;
        RoleParticularModel.RolePropData propData = LitJson.JsonMapper.ToObject<RoleParticularModel.RolePropData>(package.PropData);
        playerInfo = GetRealPlayerInfo(propData);
        playerInfo.playerID = PlayerID;
        PersonalEnemy.Create(30000, rightBornPoint, playerInfo,false);
        PersonalEnemy.OnILPlayerAppear += OnPlayerAppear;
        SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
    }
    
    private void OnPlayerAppear(GA_ILClientPlayer player)
    {
        PersonalEnemy.OnILPlayerAppear -= OnPlayerAppear;
        opponentPlayer = player;
        opponentPlayer.Pos = rightBornPoint;
        isMirrorFight = false;
        opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
        dungeonModel.dungeonFightStage = DungeonFightStage.Normal;
    }
    private void OnPlayerAppear(GA_Player player)
    {
        if (pkStageType != ILPKStageType.Fight)
        {
            currentStage = new ILWaitStartStage();
            currentStage.Begin();
        }
        playerInfo  = new GA_PlayerClient.PlayerInfo()
        {
            maxHp = player.ActorInfo.MaxHp,
            hp = player.ActorInfo.Hp,
            level = (ushort)player.ActorInfo.LV,
            job = (byte)player.ActorInfo.Job,
            face = AvatarHelper.GetAvatarDefaultID(player.ActorInfo.Job),
            facePic = AvatarHelper.GetAvatarFrameDefaultID(player.ActorInfo.Job),
            pos = Vector3.zero,
            name = player.ActorInfo.PlayerName,
        };
        playerInfo.playerID = player.ActorInfo.sid;
        ArenaModel.Instance.ArenaPKUpInfoData.MaxProDef = (int)player.ActorInfo.maxProDef;
        ArenaModel.Instance.ArenaPKUpInfoData.opponentMaxHp = playerInfo.maxHp;
        ArenaModel.Instance.ArenaPKUpInfoData.opponentShield = (int)player.ActorInfo.curProDef;
        ArenaModel.Instance.ArenaPKUpInfoData.opponentLevel = player.ActorInfo.LV;
        ArenaModel.Instance.ArenaPKUpInfoData.realmLV = (int)player.ActorInfo.realm;
        PersonalEnemy.OnMirrorPlayerAppear -= OnPlayerAppear;
        mirrorPlayer = player;
        ArenaModel.Instance.CallUpdatePKInfo(1);
        dungeonModel.dungeonFightStage = DungeonFightStage.Normal;
    }
    public void ReleasePlayer()
    {
        if (opponentPlayer != null && !opponentPlayer.ActorInfo.serverDie)
@@ -856,8 +795,6 @@
            hp = maxHp,
            level = (ushort)level,
            job = (byte)job,
            face = AvatarHelper.GetAvatarDefaultID(job),
            facePic = AvatarHelper.GetAvatarFrameDefaultID(job),
            pos = Vector3.zero,
            name = playerName,
            itemDatas = equipInfos,
@@ -894,8 +831,6 @@
            hp = (ulong)propData.MaxHP,
            level = (ushort)propData.LV,
            job = (byte)propData.Job,
            face = (int)propData.Face,
            facePic = (int)propData.FacePic,
            pos = Vector3.zero,
            name = propData.Name,
            itemDatas = equipInfos,
@@ -955,7 +890,7 @@
        if (pkStageType != ILPKStageType.Fight)
        {
            opponentPlayer.Pos = rightBornPoint;
            opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
            currentStage = new ILWaitStartStage();
            currentStage.Begin();
        }
@@ -974,7 +909,17 @@
                        currentStage = new ILFightStage();
                        break;
                    case ILPKStageType.Fight:
                        currentStage = new ILFightOverStage();
                        if (fightInfo.isOver)
                        {
                            currentStage = new ILFightOverStage();
                        }
                        else
                        {
                            currentStage = new ILRoundPrepareState();
                        }
                        break;
                    case ILPKStageType.RoundPrepare:
                        //currentStage = new ILFightStage();
                        break;
                    case ILPKStageType.FightOver:
                        currentStage = null;
@@ -1007,14 +952,10 @@
        public override void Begin()
        {
            pkStageType = ILPKStageType.WaitStart;
            duration = ArenaManagerModel.Instance.s_StepTimes[1];
            if (opponentPlayer != null)
            {
                opponentPlayer.ActorInfo.serverDie = false;
                opponentPlayer.IdleImmediate();
                opponentPlayer.Pos = rightBornPoint;
            }
            duration = ArenaManagerModel.Instance.s_StepTimes[1];
            opponentPlayer.ActorInfo.serverDie = false;
            opponentPlayer.IdleImmediate();
            PlayerDatas.Instance.baseData.HP = PlayerDatas.Instance.extersion.MaxHP;
            var maxHp = PlayerDatas.Instance.extersion.MaxHP;
@@ -1024,8 +965,8 @@
            PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
            PlayerDatas.Instance.hero.StopPathFind();
            PlayerDatas.Instance.hero.Pos = leftBornPoint;
            opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
            PlayerDatas.Instance.hero.Pos = ArenaModel.Instance.myPlace == 1 ? leftBornPoint : rightBornPoint;
            ArenaModel.Instance.FakeWaitFight((int)duration);
            ArenaModel.Instance.CallUpdatePKInfo(1);
@@ -1040,10 +981,7 @@
        public override void Update()
        {
            timer += Time.deltaTime;
            if (isMirrorFight)
                completed = timer >= duration;
            else
                completed = timer >= duration && opponentPlayer != null;
            completed = timer >= duration && opponentPlayer != null;
        }
    }
    public class ILFightOverStage : ILPKStage
@@ -1052,14 +990,12 @@
        {
            if (ArenaModel.Instance.WinnerID != PlayerDatas.Instance.baseData.PlayerID)
            {
                if (!isMirrorFight)
                    ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 2);
                ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 2);
                LocalSave.SetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId, "");
            }
            else
            {
                if (!isMirrorFight)
                    ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 1);
                ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 1);
                string MatchInfoPlayerFightNow = LocalSave.GetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId);
                if(MatchInfoPlayerFightNow != "")
                {
@@ -1095,9 +1031,10 @@
    public class ILFightStage : ILPKStage
    {
        bool figthCompleted = false;
        float restTime = 0.5f;
        float restTime = 2f;
        float restTimeTimer = 0f;
        public override void Begin()
        {
            pkStageType = ILPKStageType.Fight;
@@ -1106,19 +1043,11 @@
            figthCompleted = false;
            restTimeTimer = 0f;
            if (isMirrorFight)
            {
                if (mirrorPlayer != null)
                    PlayerDatas.Instance.hero.SelectTarget = mirrorPlayer;
            }
            else
            {
                opponentPlayer.Pos = rightBornPoint;
                opponentPlayer.SelectTarget = PlayerDatas.Instance.hero;
                PlayerDatas.Instance.hero.SelectTarget = opponentPlayer;
            }
            ArenaModel.Instance.bILAI = true;
            opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
            PlayerDatas.Instance.hero.Behaviour.StartHandupAI();
            ArenaModel.Instance.bILAI = true;
            opponentPlayer.SelectTarget = PlayerDatas.Instance.hero;
            PlayerDatas.Instance.hero.SelectTarget = opponentPlayer;
        }
        public override void End()
@@ -1132,11 +1061,8 @@
            if (fightInfo.isOver)
            {
                if (opponentPlayer != null)
                {
                    PersonalEnemy.ReleaseILPlayer(opponentPlayer,false);
                    opponentPlayer.Destroy();
                }
                PersonalEnemy.ReleaseILPlayer(opponentPlayer,false);
                opponentPlayer.Destroy();
            }
            ArenaModel.Instance.FakeRoundEnd(fightInfo.isOver, fightInfo.roundCount, fightInfo.roundWinnerIds.ToArray());
@@ -1148,32 +1074,24 @@
                return;
            if (PlayerDatas.Instance.hero == null)
                return;
            timer += Time.deltaTime;
            if (isMirrorFight)
            if (PlayerDatas.Instance.hero.ActorInfo.Hp <= 0)
            {
                if (roundWiner != 0)
                {
                    figthCompleted = true;
                    ArenaModel.Instance.WinnerID = roundWiner;
                }
                figthCompleted = true;
                PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
                PlayerDatas.Instance.hero.StopPathFind();
                ArenaModel.Instance.bILAI = false;
                roundWiner = ArenaModel.Instance.OPPONENT_PLAYERID;
                ArenaModel.Instance.WinnerID = ArenaModel.Instance.OPPONENT_PLAYERID;
            }
            else
            {
                if (PlayerDatas.Instance.hero.ActorInfo.Hp <= 0)
                {
                    figthCompleted = true;
                    roundWiner = ArenaModel.Instance.OPPONENT_PLAYERID;
                    ArenaModel.Instance.WinnerID = ArenaModel.Instance.OPPONENT_PLAYERID;
                }
                if (opponentPlayer.ActorInfo.Hp <= 0)
                {
                    figthCompleted = true;
                    roundWiner = PlayerDatas.Instance.baseData.PlayerID;
                    ArenaModel.Instance.WinnerID = PlayerDatas.Instance.baseData.PlayerID;
                }
            if (opponentPlayer.ActorInfo.Hp <= 0)
            {
                figthCompleted = true;
                PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
                PlayerDatas.Instance.hero.StopPathFind();
                ArenaModel.Instance.bILAI = false;
                roundWiner = PlayerDatas.Instance.baseData.PlayerID;
                ArenaModel.Instance.WinnerID = PlayerDatas.Instance.baseData.PlayerID;
            }
            if (!figthCompleted)
            {
@@ -1183,12 +1101,18 @@
                if (roundWiner != 0)
                {
                    figthCompleted = true;
                    PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
                    PlayerDatas.Instance.hero.StopPathFind();
                    ArenaModel.Instance.bILAI = false;
                }
                else if (EndTime <= 0)
                //else if (timer >= duration)
                {
                    figthCompleted = true;
                    if (!isMirrorFight && opponentPlayer.ActorInfo.RealHp <= 0)
                    PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
                    PlayerDatas.Instance.hero.StopPathFind();
                    ArenaModel.Instance.bILAI = false;
                    if (opponentPlayer.ActorInfo.RealHp <= 0)
                    {
                        roundWiner = PlayerDatas.Instance.baseData.PlayerID;
                    }
@@ -1206,21 +1130,100 @@
            if (figthCompleted)
            {
                PlayerDatas.Instance.hero.StopAll();
                ArenaModel.Instance.bILAI = false;
                restTimeTimer += Time.deltaTime;
                completed = restTimeTimer >= restTime;
                completed = restTimeTimer >= restTime;
            }
        }
    }
    public class ILRoundPrepareState : ILPKStage
    {
        public override void Begin()
        {
            pkStageType = ILPKStageType.RoundPrepare;
            GA_PVPClientPlayer.AutoAI(false);
            duration = 3f;
            Debug.LogFormat("进入阶段:{0}", pkStageType);
            if (fightInfo.roundWinnerIds[fightInfo.roundWinnerIds.Count - 1] == PlayerDatas.Instance.baseData.PlayerID)
            {
                if (!opponentPlayer.ActorInfo.serverDie)
                {
                    PersonalEnemy.ReleaseILPlayer(opponentPlayer, false);
                    opponentPlayer = null;
                }
                playerInfo.hp = playerInfo.maxHp;
                PersonalEnemy.Create(30000, ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint, playerInfo,false);
                PersonalEnemy.OnILPlayerAppear += OnPlayerAppear;
                SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
                if (PlayerDatas.Instance.hero.ActorInfo.RealHp <= 0)
                {
                    PlayerDatas.Instance.baseData.HP = 1;
                    PlayerDatas.Instance.hero.ActorInfo.ResetHp(1, (long)PlayerDatas.Instance.extersion.MaxHP);
                    PlayerDatas.Instance.FightRefreshPlayerHp(1);
                    PlayerDatas.Instance.hero.IdleImmediate();
                }
            }
            else
            {
                PlayerDatas.Instance.baseData.HP = PlayerDatas.Instance.extersion.MaxHP;
                var maxHp = PlayerDatas.Instance.extersion.MaxHP;
                PlayerDatas.Instance.hero.ActorInfo.ResetHp((long)maxHp, (long)maxHp);
                PlayerDatas.Instance.FightRefreshPlayerHp(maxHp);
                PlayerDatas.Instance.hero.IdleImmediate();
                if (opponentPlayer.ActorInfo.RealHp <= 0)
                {
                    opponentPlayer = null;
                    playerInfo.hp = 1;
                    PersonalEnemy.Create(30000, rightBornPoint, playerInfo,false);
                    PersonalEnemy.OnILPlayerAppear += OnPlayerAppear;
                    SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
                }
            }
            PlayerDatas.Instance.hero.Pos = ArenaModel.Instance.myPlace == 1 ? leftBornPoint : rightBornPoint;
        }
        private void OnPlayerAppear(GA_ILClientPlayer player)
        {
            PersonalEnemy.OnILPlayerAppear -= OnPlayerAppear;
            opponentPlayer = player;
            opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
        }
        private IEnumerator WaitForPlayerCreate()
        {
            while (opponentPlayer == null)
            {
                yield return null;
            }
            opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
            opponentPlayer.ActorInfo.ResetHp((long)playerInfo.maxHp, (long)playerInfo.maxHp);
        }
        public override void End()
        {
            fightInfo.roundCount++;
            ArenaModel.Instance.FakeRoundBegin(fightInfo.roundCount, fightInfo.roundWinnerIds.ToArray());
        }
        public override void Update()
        {
            timer += Time.deltaTime;
            completed = timer >= duration && opponentPlayer != null;
        }
    }
    public enum ILPKStageType
    {
        WaitStart,
        Fight,
        RoundPrepare,
        FightOver,
    }
LogicProject/System/ArenaActivity/ArenaModel.cs
@@ -2,11 +2,11 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using System.Text.RegularExpressions;
using LitJson;
using System.Text;
//Arena主控制代码
using System.Linq;
//Arena主控制代码
public class ArenaModel : ILModel<ArenaModel>
{
    public bool bFirstStageLoadCheck = false;    
@@ -15,27 +15,27 @@
    public int RankType = 28;
    public int SelectRewardType = 1;
    //更新匹配用户信息
    public event Action<IL_HA922_tagGCArenaMatchList> UpdateMatchUserEvent;
    public event Action<IL_HA926_tagGCArenaBattlePlayerInfo> UpdateBattlePlayerEvent;
    public event Action<HA922_tagGCArenaMatchList> UpdateMatchUserEvent;
    public event Action<HA926_tagGCArenaBattlePlayerInfo> UpdateBattlePlayerEvent;
    //更新匹配用户信息
    public event Action UpdateBattleRecordListEvent;
    public event Action<int> UpdatePKInfoListEvent;
    
    public Redpoint redpoint = new Redpoint(78129001);
    //查询列表
    public List<IL_HA923_tagGCArenaBattleRecordList.tagGCArenaBattleRecord> ArenaBattleRecordList = new List<IL_HA923_tagGCArenaBattleRecordList.tagGCArenaBattleRecord>();
    public List<HA923_tagGCArenaBattleRecordList.tagGCArenaBattleRecord> ArenaBattleRecordList = new List<HA923_tagGCArenaBattleRecordList.tagGCArenaBattleRecord>();
    //个人信息
    public ArenaPlayerInfo playerInfo;
    public uint WinnerID;  // 胜方ID(本次战斗结束)
    public bool bCheckRedPoint = false;
    public int freeMaxMatchNum { get; private set; } //每次挑战免费次数
    public int freeMaxMatchNum { get; private set; } //挑战最大次数,配置 + 月卡等增加的次数
    public int buyMaxMatchNum { get; private set; } //每日可购买次数
    public int ScoreMin { get; private set; } //最低积分
    public int ScoreMax { get; private set; } //最高积分
    public int RecordMax { get; private set; } //对战记录条数(不超过50)
    public int freeRefreshPlayerMax { get; private set; } //每次挑战免费刷新次数,0为不限
    public int SelectMatchPlayer { get;  set; } //当前选择的用户
    public List<IL_HA922_tagGCArenaMatchList.tagGCArenaMatchInfo> m_PlayerInfo = new List<IL_HA922_tagGCArenaMatchList.tagGCArenaMatchInfo>();
    public List<HA922_tagGCArenaMatchList.tagGCArenaMatchInfo> m_PlayerInfo = new List<HA922_tagGCArenaMatchList.tagGCArenaMatchInfo>();
    //场景配置
    public uint OPPONENT_PLAYERID = 999999;
    public FightResultSupplement resultSupplement;
@@ -43,77 +43,65 @@
    public string opponentName { get; private set; }
    public uint roundWiner = 0; //获胜者 id
    public int currentRecordIndex = 0;
    public ArenaPKUpInfo ArenaPKUpInfoData;
    public ArenaPKUpInfo ArenaPKUpInfoData { get; set; }
    public bool bILAI;
    public bool bFirstShow = true;
    public bool IsArenaWork = true;
    DungeonModel m_DungeonModel;
    public IL_HA922_tagGCArenaMatchList pkList;
    public HA922_tagGCArenaMatchList pkList;
    bool IsSendCloseArena = false;
    public int skipFightLV = 200; //跳过战斗等级
    public bool isSkipFightChoose {
        get {
            return LocalSave.GetBool("ArenaSkipChallenge" + PlayerDatas.Instance.baseData.PlayerID);
        }
        set
        {
            LocalSave.SetBool("ArenaSkipChallenge" + PlayerDatas.Instance.baseData.PlayerID, value);
        }
    }
    Dictionary<int, int> lvToNpcDic = new Dictionary<int, int>();
    DungeonModel dungeonModel {
        get {
            return m_DungeonModel ?? (m_DungeonModel = ModelCenter.Instance.GetModel<DungeonModel>());
        }
    }
    ServerMirrorFightModel mirrorFightModel { get { return ModelCenter.Instance.GetModel<ServerMirrorFightModel>(); } }
    protected override void Init()
    {
        try
        {
            DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
            playerInfo = new ArenaPlayerInfo();
            RobotName = Language.Get("ArenaRobotName");
            RankType = 28;
            SelectRewardType = 1;
            //////
            ScoreMin =  GeneralDefine.ArenaSetList[0];
            ScoreMax = GeneralDefine.ArenaSetList[1];
        playerInfo = new ArenaPlayerInfo();
        RobotName = Language.Get("ArenaRobotName");
        RankType = 28;
        SelectRewardType = 1;
        //////
        ScoreMin =  GeneralDefine.ArenaSetList[0];
        ScoreMax = GeneralDefine.ArenaSetList[1];
            var fun = FuncConfigConfig.Get("ArenaSet");
            freeMaxMatchNum = int.Parse(fun.Numerical3);
            RecordMax = int.Parse(fun.Numerical4);
            freeRefreshPlayerMax = int.Parse(fun.Numerical5);
            ArenaManager.ParseAwardFuncConfig();
            ArenaManager.ParseItemJobSkill();
        var fun = FuncConfigConfig.Get("ArenaSet");
        freeMaxMatchNum = int.Parse(fun.Numerical3); //初始最大次数,月卡等会改变
        RecordMax = int.Parse(fun.Numerical4);
        freeRefreshPlayerMax = int.Parse(fun.Numerical5);
        ArenaManager.ParseAwardFuncConfig();
        ArenaManager.ParseItemJobSkill();
            //r0,代表机器人参数,r1,真人 ,初始化
            List<int> r0 = new List<int>();
            List<int> r1 = new List<int>();
            for (int i = 0; i < 5; i++)
                r0.Add(i);
            for (int i = 0; i < 33; i++)
                r1.Add(i);
            ArenaManager.playInfo.Add(0, r0);
            ArenaManager.playInfo.Add(1, r1);
        //r0,代表机器人参数,r1,真人 ,初始化
        List<int> r0 = new List<int>();
        List<int> r1 = new List<int>();
        for (int i = 0; i < 5; i++)
            r0.Add(i);
        for (int i = 0; i < 33; i++)
            r1.Add(i);
        ArenaManager.playInfo.Add(0, r0);
        ArenaManager.playInfo.Add(1, r1);
            //获取副本 游戏时间,准备时间,退出时间
            dungeonModel.currentDungeon = new Dungeon(ArenaManager.MapID, 0);
            var dungeonId = dungeonModel.GetDungeonId(dungeonModel.currentDungeon);
            var dungeonConfig = DungeonConfig.Get(dungeonId);
            ArenaManagerModel.Instance.s_StepTimes = LitJson.JsonMapper.ToObject<int[]>(dungeonConfig.StepTime);
        //获取副本 游戏时间,准备时间,退出时间
        dungeonModel.currentDungeon = new Dungeon(ArenaManager.MapID, 0);
        var dungeonId = dungeonModel.GetDungeonId(dungeonModel.currentDungeon);
        var dungeonConfig = DungeonConfig.Get(dungeonId);
        ArenaManagerModel.Instance.s_StepTimes = LitJson.JsonMapper.ToObject<int[]>(dungeonConfig.StepTime);
            fun = FuncConfigConfig.Get("ArenaSet1");
            skipFightLV = int.Parse(fun.Numerical1);
        }
        catch (System.Exception ex)
        //获取机器人等级对应的数据
        var config = FuncConfigConfig.Get("ArenaRobotLVNPC");
        JsonData json = JsonMapper.ToObject(config.Numerical1);
        //{"50":80100000, "100":80100010, "9999":80100020}
        var keys = json.Keys.ToList();
        for (int i = 0; i < keys.Count; i++)
        {
            OperationLogCollect.Instance.BugReportSys(ex.ToString());
            Debug.LogError(ex);
            var key = keys[i];
            lvToNpcDic[int.Parse(key)] = int.Parse(json[key].ToString());
        }
    }
    
@@ -188,7 +176,7 @@
    public void CallUpdatePKInfo(int type)
    {
        if(UpdatePKInfoListEvent != null)
            UpdatePKInfoListEvent(1);
                UpdatePKInfoListEvent(1);
    }
    public void FirstData()
    {
@@ -241,12 +229,12 @@
    #endregion 
    #region  //接收命令
    public void ReceiveBattLePlayer(IL_HA926_tagGCArenaBattlePlayerInfo vNetData)
    public void ReceiveBattLePlayer(HA926_tagGCArenaBattlePlayerInfo vNetData)
    {
        UpdateBattlePlayerEvent?.Invoke(vNetData);
    }
    //竞技场匹配玩家列表
    public void ReceiveMatchData(IL_HA922_tagGCArenaMatchList vNetData)
    public void ReceiveMatchData(HA922_tagGCArenaMatchList vNetData)
    {
        pkList = vNetData;
        if (UpdateMatchUserEvent != null)
@@ -256,7 +244,7 @@
    }
    // 竞技场对战记录列表
    public void ReceiveBattleRecordList(IL_HA923_tagGCArenaBattleRecordList vNetData)
    public void ReceiveBattleRecordList(HA923_tagGCArenaBattleRecordList vNetData)
    {
        string nameStr = "";
        string inputString = LocalSave.GetString("MatchInfoPlayerIDALL"+PlayerDatas.Instance.PlayerId);
@@ -286,8 +274,8 @@
                    else
                    {
                        nameStr = vNetData.BattleRecordList[i].PlayerName;
                        SysNotifyMgr.Instance.ShowTip("ArenaFightPlayer", nameStr.Trim().Replace("\0", ""));
                    }
                    //SysNotifyMgr.Instance.ShowTip("ArenaFightPlayer", nameStr.Trim().Replace("\0", ""));
                    bCheckRedPoint = true;
                    UpdateRedPoint();
@@ -328,6 +316,8 @@
    public void FakeMatchOk()
    {
        PlayerDatas.Instance.hero.Pos = ArenaManagerModel.leftBornPoint;
        CameraController.Instance.rotationX = 45;
        CameraController.Instance.Apply();
        PlayerDatas.Instance.hero.EulerAngles = 90;
        //强杀,再进入        
        if (m_PlayerInfo.Count <= 0 || ArenaModel.Instance.SelectMatchPlayer == 5)
@@ -335,7 +325,7 @@
            SelectMatchPlayer = LocalSave.GetInt("MatchInfoSelect");
            for (int i = 0; i < 6; i++)  //第6个放从挑战记录里的数据
            {
                IL_HA922_tagGCArenaMatchList.tagGCArenaMatchInfo playerInfo = new IL_HA922_tagGCArenaMatchList.tagGCArenaMatchInfo();
                HA922_tagGCArenaMatchList.tagGCArenaMatchInfo playerInfo = new HA922_tagGCArenaMatchList.tagGCArenaMatchInfo();
                playerInfo.PlayerID = (uint)LocalSave.GetInt("MatchInfoPlayerID");
                playerInfo.PlayerName = LocalSave.GetString("MatchInfoPlayerName");
                playerInfo.Job = (byte)LocalSave.GetInt("MatchInfoJob");
@@ -369,18 +359,16 @@
            autoEnsureTime = Time.time + 3f,
            myName = PlayerDatas.Instance.baseData.PlayerName,
            myJob = PlayerDatas.Instance.baseData.Job,
            myFace = AvatarHelper.GetMyAvatarID(),
            myFacePic = AvatarHelper.GetMyAvatarID(),
            myFace = PlayerDatas.Instance.baseData.face,
            myBornPoint = myPlace,
            opponentName = opponentName,
            opponentJob = m_PlayerInfo[SelectMatchPlayer].Job,
            opponentFace = (int)m_PlayerInfo[SelectMatchPlayer].Face,
            opponentFacePic = (int)m_PlayerInfo[SelectMatchPlayer].FacePic,
            opponentMaxHp = (ulong)GetLevel((int)m_PlayerInfo[SelectMatchPlayer].LV, 1),
            opponentLevel = (int)m_PlayerInfo[SelectMatchPlayer].LV,
            opponentPlayerId = (int)m_PlayerInfo[SelectMatchPlayer].PlayerID,
            opponentShield = GetLevel((int)m_PlayerInfo[SelectMatchPlayer].LV, 3),
            MaxProDef = GetLevel((int)m_PlayerInfo[SelectMatchPlayer].LV, 3),
            opponentFace = (int)m_PlayerInfo[SelectMatchPlayer].Face,
            MaxProDef = 100,
            realmLV = realm,
        };
        ArenaManager.myName = PlayerDatas.Instance.baseData.PlayerName;
@@ -392,7 +380,6 @@
    {
        ArenaModel.Instance.IsArenaWork = false;
        ArenaManager.isArenaClient = true;
        ArenaManagerModel.isMirrorFight = false;
        DebugEx.Log("ArenaManager.isArenaClient");
        //开始自定义场景
        var sendInfo = new CA231_tagCMClientStartCustomScene();
@@ -467,15 +454,9 @@
        IsArenaWork = false;
        ArenaManager.isArenaClient = false;
        ArenaManager.isArenaPK = false;
        PlayerDatas.Instance.extersion.pkState = 0;
        if (ArenaManagerModel.isMirrorFight)
        {
            dungeonModel.ExitCurrentDungeon();
            return;
        }
        ArenaManagerModel.Instance.ReleasePlayer();
        ClientDungeonStageUtility.SetClientDungeon(false, 0);
        PlayerDatas.Instance.extersion.pkState = 0;
        ModelCenter.Instance.GetModel<DungeonModel>().ResetBufData();
        PersonalEnemy.ReleaseAll();
        PlayerDatas.Instance.baseData.MapID = PlayerDatas.Instance.baseData.mainServerMapIdRecord;
@@ -546,97 +527,57 @@
    public void BeginRecordBattle()
    {
        IL_HA923_tagGCArenaBattleRecordList.tagGCArenaBattleRecord record = ArenaModel.Instance.ArenaBattleRecordList[ArenaModel.Instance.currentRecordIndex];
        if (ArenaModel.Instance.playerInfo.GetDayMatchCount() > 0)
        {
            if (isSkipFightChoose)
        {
            HA923_tagGCArenaBattleRecordList.tagGCArenaBattleRecord record = ArenaModel.Instance.ArenaBattleRecordList[ArenaModel.Instance.currentRecordIndex];
            //int tmp = 5;
            //ArenaModel.Instance.SelectMatchPlayer = tmp; //当前选择的用户
            //HA922_tagGCArenaMatchList.tagGCArenaMatchInfo tmper = new HA922_tagGCArenaMatchList.tagGCArenaMatchInfo();
            //tmper.PlayerID = record.PlayerID;
            //if (record.PlayerID < 10000)
            //{
            //    tmper.PlayerName = ArenaModel.Instance.RobotName;
            //}
            //else
            //{
            //    tmper.PlayerName = record.PlayerName;
            //}
            //tmper.Job = record.Job;
            //tmper.LV = record.LV;
            //tmper.RealmLV = record.RealmLV;
            //tmper.FightPower = record.FightPower;
            //tmper.Score = record.Score;
            ////保证强杀,重新进入场景,有数据
            //ArenaModel.Instance.m_PlayerInfo[tmp] = tmper;
            //ArenaModel.Instance.bFirstStageLoadCheck = true;
            //LocalSave.SetInt("MatchInfoSelect", tmp);
            //LocalSave.SetInt("MatchInfoPlayerID", (int)ArenaModel.Instance.m_PlayerInfo[tmp].PlayerID);
            //LocalSave.SetString("MatchInfoPlayerName", ArenaModel.Instance.m_PlayerInfo[tmp].PlayerName);
            //LocalSave.SetInt("MatchInfoJob", ArenaModel.Instance.m_PlayerInfo[tmp].Job);
            //LocalSave.SetInt("MatchInfoLV", (int)ArenaModel.Instance.m_PlayerInfo[tmp].LV);
            //LocalSave.SetInt("MatchInfoRealmLV", (int)ArenaModel.Instance.m_PlayerInfo[tmp].RealmLV);
            //LocalSave.SetInt("MatchInfoFightPower", (int)ArenaModel.Instance.m_PlayerInfo[tmp].FightPower);
            //LocalSave.SetInt("MatchInfoScore", (int)ArenaModel.Instance.m_PlayerInfo[tmp].Score);
            //LocalSave.SetInt("ArenaAllSeconds", TimeUtility.AllSeconds);
            //LocalSave.SetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId, record.Time.ToString());
            //ArenaModel.Instance.StartClientArena();
            //WindowCenter.Instance.CloseIL<ArenaRecordWin>();
            int playerID = (int)record.PlayerID;
            if (playerID < 10000)
            {
                var tmpPlayer = record;
                uint PlayerID = tmpPlayer.PlayerID;
                //ArenaManager.isArenaClient = true;
                SendArenaBattle(PlayerID, 0);
                LocalSave.SetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId, record.Time.ToString());
                if (PlayerID > 10000)
                {
                    mirrorFightModel.SendMirrorFight(ArenaManager.MapID, 0, PlayerID, 3);
                }
                else
                {
                    Clock.AlarmAfter(0.2, () =>
                    {
                        ulong fightpower = 0;
                        if (record.PlayerID < 10000)
                        {
                            fightpower = (uint)GetLevel(record.LV, 2); //fight
                        }
                        else
                        {
                            fightpower = record.FightPowerEx * Constants.ExpPointValue + record.FightPower;
                        }
                        SendArenaBattle(PlayerID, (byte)(PlayerDatas.Instance.baseData.FightPoint >= fightpower ? 1 : 2));
                        if (PlayerDatas.Instance.baseData.FightPoint >= fightpower)
                        {
                            string MatchInfoPlayerFightNow = LocalSave.GetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId);
                            if (MatchInfoPlayerFightNow != "")
                            {
                                string inputString = LocalSave.GetString("MatchInfoPlayerFight" + PlayerDatas.Instance.PlayerId);
                                inputString = StringUtility.Contact(inputString, "|", MatchInfoPlayerFightNow);
                                LocalSave.SetString("MatchInfoPlayerFight" + PlayerDatas.Instance.PlayerId, inputString);
                            }
                        }
                        LocalSave.SetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId, "");
                    });
                }
                return;
            }
            int tmp = 5;
            ArenaModel.Instance.SelectMatchPlayer = tmp; //当前选择的用户
            IL_HA922_tagGCArenaMatchList.tagGCArenaMatchInfo tmper = new IL_HA922_tagGCArenaMatchList.tagGCArenaMatchInfo();
            tmper.PlayerID = record.PlayerID;
            if (record.PlayerID < 10000)
            {
                tmper.PlayerName = ArenaModel.Instance.RobotName;
            }
            else
            {
                tmper.PlayerName = record.PlayerName;
            }
            tmper.Job = record.Job;
            tmper.LV = record.LV;
            tmper.RealmLV = record.RealmLV;
            tmper.FightPower = record.FightPower;
            tmper.Score = record.Score;
            //保证强杀,重新进入场景,有数据
            ArenaModel.Instance.m_PlayerInfo[tmp] = tmper;
            ArenaModel.Instance.bFirstStageLoadCheck = true;
            LocalSave.SetInt("MatchInfoSelect", tmp);
            LocalSave.SetInt("MatchInfoPlayerID", (int)ArenaModel.Instance.m_PlayerInfo[tmp].PlayerID);
            LocalSave.SetString("MatchInfoPlayerName", ArenaModel.Instance.m_PlayerInfo[tmp].PlayerName);
            LocalSave.SetInt("MatchInfoJob", ArenaModel.Instance.m_PlayerInfo[tmp].Job);
            LocalSave.SetInt("MatchInfoLV", (int)ArenaModel.Instance.m_PlayerInfo[tmp].LV);
            LocalSave.SetInt("MatchInfoRealmLV", (int)ArenaModel.Instance.m_PlayerInfo[tmp].RealmLV);
            LocalSave.SetInt("MatchInfoFightPower", (int)ArenaModel.Instance.m_PlayerInfo[tmp].FightPower);
            LocalSave.SetInt("MatchInfoScore", (int)ArenaModel.Instance.m_PlayerInfo[tmp].Score);
            LocalSave.SetInt("ArenaAllSeconds", TimeUtility.AllSeconds);
            LocalSave.SetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId, record.Time.ToString());
            if (tmper.PlayerID > 10000)
            {
                mirrorFightModel.SendMirrorFight(ArenaManager.MapID, 0, tmper.PlayerID, 0);
                int npcID = GetLVToNPCID(record.LV);
                TurnFightModel.Instance.StartTurnFight(ArenaManager.MapID, 0, 0, npcID, new uint[1] { (uint)playerID });
            }
            else
            {
                ArenaModel.Instance.StartClientArena();
            }
            WindowCenter.Instance.CloseIL<ArenaRecordWin>();
                TurnFightModel.Instance.StartTurnFight(ArenaManager.MapID, 0, 1, playerID, new uint[1] { (uint)playerID });
            }
        }
        else
        {
@@ -644,6 +585,23 @@
        }
    }
    //根据等级区段对用npcid
    public int GetLVToNPCID(int lv)
    {
        int npcID = 0;
        var keys = lvToNpcDic.Keys.ToList();
        keys.Sort();
        for (int i = 0; i < keys.Count; i++)
        {
            if (lv <= keys[i])
            {
                npcID = lvToNpcDic[keys[i]];
                break;
            }
        }
        return npcID;
    }
    public struct FightResultSupplement
    {
LogicProject/System/ArenaActivity/ArenaRankCell.cs
@@ -130,13 +130,13 @@
            int fightpower = ArenaModel.Instance.GetLevel(level, 2); //fight
            if(data.id < 10000)
            {
                rankWhat.text = UIHelper.ReplaceLargeNum(fightpower);
                rankWhat.text = fightpower.ToString();
            }
            else
            {
                //rankWhat.text = data.cmpValue2.ToString();
                ulong fight = data.cmpValue2;
                fight  = fight * Constants.ExpPointValue + data.cmpValue3;
                fight  = fight * 100000000 + data.cmpValue3;
                rankWhat.text  = fight.ToString();
            }    
LogicProject/System/ArenaActivity/ArenaRecordCell.cs
@@ -7,7 +7,7 @@
//竞技场记录列表
public class ArenaRecordCell : ILBehaviour
{
    AvatarCell ImageHead;
    Image ImageHead;
    Text TextPlayerName;
    Text TextPlayerTime;
    Text TextPlayerFight;
@@ -18,7 +18,7 @@
    protected override void Awake() 
    {
        ImageHead = proxy.GetWidgtEx<AvatarCell>("ImageHead");
        ImageHead = proxy.GetWidgtEx<Image>("ImageHead");
        TextPlayerName = proxy.GetWidgtEx<Text>("TextPlayerName");
        TextPlayerTime = proxy.GetWidgtEx<Text>("TextPlayerTime");
        TextPlayerScore = proxy.GetWidgtEx<Text>("TextPlayerScore");
@@ -33,8 +33,8 @@
        string inputString = LocalSave.GetString("MatchInfoPlayerFight"+PlayerDatas.Instance.PlayerId);
        var stringArray = inputString.Split(StringUtility.splitSeparator, StringSplitOptions.RemoveEmptyEntries);
        IL_HA923_tagGCArenaBattleRecordList.tagGCArenaBattleRecord record = ArenaModel.Instance.ArenaBattleRecordList[index];
        ImageHead.InitUI(AvatarHelper.GetAvatarModel((int)record.PlayerID, (int)record.Face, (int)record.FacePic, record.Job));
        HA923_tagGCArenaBattleRecordList.tagGCArenaBattleRecord record = ArenaModel.Instance.ArenaBattleRecordList[index];
        ImageHead.SetSprite(UIHelper.GetHeadIcon((int)record.Face));
        ulong fightpower = 0;
        if(record.PlayerID < 10000)
        {
@@ -46,7 +46,7 @@
            TextPlayerName.text = record.PlayerName;
            fightpower = record.FightPowerEx;
            fightpower = fightpower * Constants.ExpPointValue;
            fightpower = fightpower * 100000000;
            fightpower = fightpower + record.FightPower;
        }
        TextPlayerScoreAll.text = StringUtility.Contact(Language.Get("Arena_Score"), ":", record.Score.ToString());
@@ -83,7 +83,7 @@
        }
        if (bYFC)
        {
            ImageYFC.SetActiveIL(false);
            ImageYFC.SetActiveIL(true);
        }
        else
        {
LogicProject/System/ArenaActivity/ArenaRecordWin.cs
@@ -33,10 +33,10 @@
        {
            WindowCenter.Instance.CloseIL<ArenaRecordWin>();
        });
        Btn_Add.SetListener(() =>
        {
            WindowCenter.Instance.OpenIL<ArenaAddTimesWin>();
        });
        //Btn_Add.SetListener(() =>
        //{
        //    //WindowCenter.Instance.OpenIL<ArenaAddTimesWin>();
        //});
        m_ScrollControl.OnRefreshCell += OnRefreshCell;
@@ -93,10 +93,10 @@
            Record.Display(cell.index);
    }
    void DisplayShowPop(IL_HA926_tagGCArenaBattlePlayerInfo vNetData)
    void DisplayShowPop(HA926_tagGCArenaBattlePlayerInfo vNetData)
    {
        ulong fight = vNetData.FightPoweEx;
        fight = fight * Constants.ExpPointValue;
        ulong fight = vNetData.FightPowerEx;
        fight = fight * 100000000;
        fight = fight + vNetData.FightPower;
        string fightStr = UIHelper.ReplaceLargeNum(fight);
        string Info = Language.Get("ArenaBattlePlayerInfo", fightStr, vNetData.Score);
LogicProject/System/ArenaActivity/ArenaRewardCell.cs
@@ -28,46 +28,16 @@
        }
        else
        {
            if (ArenaModel.Instance.SelectRewardType == 1)
            {
                if (index == ArenaManager.dayAwardTypelist.Count - 1)
                {
                    rankNumText.text = Language.Get("DemonJar13");
                }
                else
                {
                    int first = ArenaManager.dayAwardTypelist[index - 1].num + 1;
                    int last = ArenaManager.dayAwardTypelist[index].num;
                    if (first == last)
                    {
                        rankNumText.text = first.ToString();
                    }
                    else
                    {
                        rankNumText.text = first.ToString() + "-" + last.ToString();
                    }
                }
            }
            else
            if(index == ArenaManager.dayAwardTypelist.Count - 1)
            {
                if (index == ArenaManager.seasonAwardTypelist.Count - 1)
                {
                    rankNumText.text = Language.Get("DemonJar13");
                }
                else
                {
                    int first = ArenaManager.seasonAwardTypelist[index - 1].num + 1;
                    int last = ArenaManager.seasonAwardTypelist[index].num;
                    if (first == last)
                    {
                        rankNumText.text = first.ToString();
                    }
                    else
                    {
                        rankNumText.text = first.ToString() + "-" + last.ToString();
                    }
                }
                rankNumText.text = Language.Get("DemonJar13");
            }
            else
            {
                int first = ArenaManager.dayAwardTypelist[index - 1].num + 1;
                int last = ArenaManager.dayAwardTypelist[index].num;
                rankNumText.text = first.ToString() + "-" + last.ToString();
            }
        }
        int m_ItemID = 0;
LogicProject/System/ArenaActivity/ArenaRewardWin.cs
@@ -14,8 +14,8 @@
    Image ImageBtnLeft;
    Image ImageBtnRight;
    Text m_Tips;
    ScrollerController m_RankListController;
    Text rank;
    ScrollerController m_RankListController;
    #region Built-in
    protected override void BindController()
    {
@@ -25,7 +25,6 @@
        ImageBtnLeft = Btn_Left.GetComponent<Image>();
        ImageBtnRight = Btn_Right.GetComponent<Image>();
        m_Tips = proxy.GetWidgtEx<Text>("TipsTxt");
        rank = proxy.GetWidgtEx<Text>("rank");
        m_RankListController = proxy.GetWidgtEx<ScrollerController>("Scroll View");        
    }
@@ -92,21 +91,8 @@
                m_RankListController.Restart();
            }
        }
        UpdateUserRank();
    }
    void UpdateUserRank()
    {
        int rankNum = ArenaRankModel.Instance.GetMyRank(ArenaModel.Instance.RankType);
        if (rankNum <= 0)
        {
            rank.text = Language.Get("L1045");
        }
        else
        {
            rank.text = Language.Get("L1092", rankNum);
        }
    }
    }
    private void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
LogicProject/System/ArenaActivity/ArenaSettlementWin.cs
@@ -27,7 +27,7 @@
    protected DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
    protected float timer = 0f;
    protected float LimitTimer = 3f;
    protected float LimitTimer = 5f;
    protected List<int> m_RewardIndexs = new List<int>();
    private List<ServerItem> m_RewardSorts = new List<ServerItem>();
    #region Built-in   
@@ -59,8 +59,8 @@
        m_Container1.transform.Find("Txt_PassTimeStatic").GetComponent<Text>().text = StringUtility.Contact(Language.Get("ArenaSetMentle_Time"), ":");
        m_Container2.transform.Find("Txt_ScoreStatic").GetComponent<Text>().text = StringUtility.Contact(Language.Get("ArenaSetMentle_Score"),":");
        m_Container3.transform.Find("Txt_NumberStatic").GetComponent<Text>().text = StringUtility.Contact(Language.Get("ArenaSetMentle_Blackboard"), ":");
        //if (ArenaManagerModel.Instance.s_StepTimes != null)
        //    LimitTimer = ArenaManagerModel.Instance.s_StepTimes[2] + 1;
        if(ArenaManagerModel.Instance.s_StepTimes != null)
            LimitTimer = ArenaManagerModel.Instance.s_StepTimes[2] + 1;
    }
    protected override void AddListeners()
@@ -73,7 +73,6 @@
    protected override void OnPreOpen()
    {
        timer = 0f;
        if (dungeonModel.dungeonResult.isPass == 0)
        {
@@ -88,28 +87,24 @@
    }
    protected override void OnAfterOpen()
    {
    {
        timer = 0;
        Display();
        bShow = true;
    }
    protected override void OnPreClose()
    {
        bShow = false;
        if (WindowCenter.Instance.IsOpen("ArenaWin"))
        {
            ArenaRankModel.Instance.SendArenaWatchBillboard(0, 1, 1);
        }
    }
    protected override void OnAfterClose()
    {
        ArenaManager.isArenaClient = false;
    }
    protected override void OnActived()
    {
        base.OnActived();
        timer = 0;
        Display();
        bShow = true;
    }
    protected override void LateUpdate()
    {
@@ -129,44 +124,19 @@
        else
        {
            now = 0;
            if (ArenaModel.Instance.isSkipFightChoose)
            {
                WindowCenter.Instance.CloseIL<ArenaSettlementWin>();
                WindowCenter.Instance.Open("ArenaWin");
            }
            else
            {
                WindowCenter.Instance.CloseIL<ArenaSettlementWin>();
                if (!ArenaManager.IsArenaStage())
                    WindowCenter.Instance.Open<MainInterfaceWin>();
                else
                    ArenaModel.Instance.StopClientArena();
            }
            PlayerDatas.Instance.hero.StopAll();
            //ArenaModel.Instance.StopClientArena();
            CloseWin<ArenaSettlementWin>();
        }
    }
    
    #endregion
   void ExitDungeon()
    {
        if (ArenaModel.Instance.isSkipFightChoose)
        {
            WindowCenter.Instance.CloseIL<ArenaSettlementWin>();
            WindowCenter.Instance.Open("ArenaWin");
        }
        else
        {
            WindowCenter.Instance.CloseIL<ArenaSettlementWin>();
            if (!ArenaManager.IsArenaStage())
                WindowCenter.Instance.Open<MainInterfaceWin>();
            else
                ArenaModel.Instance.StopClientArena();
        }
        PlayerDatas.Instance.hero.StopAll();
    {
        //ArenaModel.Instance.StopClientArena();
        CloseWin<ArenaSettlementWin>();
    }
    protected virtual void DrawExitTimer(int seconds)
    protected void DrawExitTimer(int seconds)
    {
        if (m_ExitTimer != null)
        {
@@ -174,7 +144,7 @@
        }
    }    
    protected virtual void PlayRewardTween(int _playIndex)
    protected void PlayRewardTween(int _playIndex)
    {
        if (_playIndex < m_RewardIndexs.Count)
        {
LogicProject/System/ArenaActivity/ArenaWin.cs
@@ -41,16 +41,7 @@
    Text DailyRewardTxt; //当日奖励
    Text SeasonReawardTxt;//赛季奖励
    Text TipsTxt;//提示
    ToggleButton m_ToggleButton; //跳过战斗
    ServerMirrorFightModel mirrorFightModel { get { return ModelCenter.Instance.GetModel<ServerMirrorFightModel>(); } }
    DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
    float DeltaTmp = 0;
    float lastClickFightTime = 0;
    #region Built-in
    protected override void BindController()
    {
@@ -87,12 +78,11 @@
        m_ItemCellSeason = proxy.GetWidgtEx<ItemCell>("ItemCellSeason");
        SeasonReawardTxt = proxy.GetWidgtEx<Text>("SeasonReawardTxt");
        TipsTxt = proxy.GetWidgtEx<Text>("TipsTxt");
        m_ToggleButton = proxy.GetWidgtEx<ToggleButton>("Toggle_Inevitable");
        //第6个放挑战记录里的数据
        for (int i= 0;i < 7;i++)
        {
            IL_HA922_tagGCArenaMatchList.tagGCArenaMatchInfo EmptyInfo = new IL_HA922_tagGCArenaMatchList.tagGCArenaMatchInfo();
            HA922_tagGCArenaMatchList.tagGCArenaMatchInfo EmptyInfo = new HA922_tagGCArenaMatchList.tagGCArenaMatchInfo();
            ArenaModel.Instance.m_PlayerInfo.Add(EmptyInfo);
        }
        
@@ -149,10 +139,10 @@
            WindowCenter.Instance.OpenIL<ArenaRecordWin>();
        });
        //购买对战次数
        Btn_Add.SetListener(() =>
        {
            WindowCenter.Instance.OpenIL<ArenaAddTimesWin>();
        });
        //Btn_Add.SetListener(() =>
        //{
        //    //WindowCenter.Instance.OpenIL<ArenaAddTimesWin>();
        //});
        for (int i = 1; i < 6; i++)
        {
            int tmp = i - 1;
@@ -164,64 +154,32 @@
                    return;
                }
                int error;
                if (!dungeonModel.CanEnter(out error))
                {
                    dungeonModel.ProcessEnterError(error);
                    return;
                }
                if (Time.realtimeSinceStartup - lastClickFightTime < 0.5)
                    return;
                lastClickFightTime = Time.realtimeSinceStartup;
                if (ArenaModel.Instance.playerInfo.GetDayMatchCount() > 0)
                {
                    ArenaModel.Instance.SelectMatchPlayer = tmp; //当前选择的用户
                    // B2 10 竞技场挑战玩家  通知后端登记挑战目标ID
                    var tmpPlayer = ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer];
                    uint PlayerID = tmpPlayer.PlayerID;
                    if (ArenaModel.Instance.isSkipFightChoose)
                    //ArenaModel.Instance.SelectMatchPlayer = tmp; //当前选择的用户
                    //ArenaModel.Instance.StartClientArena();
                    //ArenaModel.Instance.bFirstStageLoadCheck = true;
                    //LocalSave.SetInt("MatchInfoSelect", tmp);
                    //LocalSave.SetInt("MatchInfoPlayerID", (int)ArenaModel.Instance.m_PlayerInfo[tmp].PlayerID);
                    //LocalSave.SetString("MatchInfoPlayerName", ArenaModel.Instance.m_PlayerInfo[tmp].PlayerName);
                    //LocalSave.SetInt("MatchInfoJob", ArenaModel.Instance.m_PlayerInfo[tmp].Job);
                    //LocalSave.SetInt("MatchInfoLV", (int)ArenaModel.Instance.m_PlayerInfo[tmp].LV);
                    //LocalSave.SetInt("MatchInfoRealmLV", (int)ArenaModel.Instance.m_PlayerInfo[tmp].RealmLV);
                    //LocalSave.SetInt("MatchInfoFightPower", (int)ArenaModel.Instance.m_PlayerInfo[tmp].FightPower);
                    //LocalSave.SetInt("MatchInfoScore", (int)ArenaModel.Instance.m_PlayerInfo[tmp].Score);
                    //LocalSave.SetInt("ArenaAllSeconds", TimeUtility.AllSeconds);
                    //LocalSave.SetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId, "");
                    int playerID = (int)ArenaModel.Instance.m_PlayerInfo[tmp].PlayerID;
                    if (playerID < 10000)
                    {
                        //ArenaManager.isArenaClient = true;
                        ArenaModel.Instance.SendArenaBattle(PlayerID, 0);
                        if (PlayerID > 10000)
                        {
                            mirrorFightModel.SendMirrorFight(ArenaManager.MapID, 0, PlayerID, 3);
                        }
                        else
                        {
                            Clock.AlarmAfter(0.2, () =>
                            {
                                ulong fightpower = tmpPlayer.FightPowerEx * Constants.ExpPointValue + tmpPlayer.FightPower;
                                ArenaModel.Instance.SendArenaBattle(PlayerID, (byte)(PlayerDatas.Instance.baseData.FightPoint >= fightpower ? 1 : 2));
                            });
                        }
                    }
                        int npcID = ArenaModel.Instance.GetLVToNPCID(ArenaModel.Instance.m_PlayerInfo[tmp].LV);
                        TurnFightModel.Instance.StartTurnFight(ArenaManager.MapID, 0, 0, npcID, new uint[1] { (uint)playerID });
                    }
                    else
                    {
                        if (PlayerID > 10000)
                        {
                            mirrorFightModel.SendMirrorFight(ArenaManager.MapID, 0, PlayerID, 0);
                        }
                        else
                        {
                            ArenaModel.Instance.StartClientArena();
                        }
                        ArenaModel.Instance.bFirstStageLoadCheck = true;
                        LocalSave.SetInt("MatchInfoSelect", tmp);
                        LocalSave.SetInt("MatchInfoPlayerID", (int)ArenaModel.Instance.m_PlayerInfo[tmp].PlayerID);
                        LocalSave.SetString("MatchInfoPlayerName", ArenaModel.Instance.m_PlayerInfo[tmp].PlayerName);
                        LocalSave.SetInt("MatchInfoJob", ArenaModel.Instance.m_PlayerInfo[tmp].Job);
                        LocalSave.SetInt("MatchInfoLV", (int)ArenaModel.Instance.m_PlayerInfo[tmp].LV);
                        LocalSave.SetInt("MatchInfoRealmLV", (int)ArenaModel.Instance.m_PlayerInfo[tmp].RealmLV);
                        LocalSave.SetInt("MatchInfoFightPower", (int)ArenaModel.Instance.m_PlayerInfo[tmp].FightPower);
                        LocalSave.SetInt("MatchInfoScore", (int)ArenaModel.Instance.m_PlayerInfo[tmp].Score);
                        LocalSave.SetInt("ArenaAllSeconds", TimeUtility.AllSeconds);
                        LocalSave.SetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId, "");
                        TurnFightModel.Instance.StartTurnFight(ArenaManager.MapID, 0, 1, playerID, new uint[1] { (uint)playerID });
                    }
                }
                else
                {
@@ -233,8 +191,6 @@
             
        SeasonReawardTxt.text = Language.Get("ArenaSeasonReward");
        TipsTxt.text = StringUtility.Contact(Language.Get("L1003"), ":", Language.Get("ArenaTodayRewardTips"));
        m_ToggleButton.AddListener(SkipChallenge);
    }
    protected override void OnPreOpen()
@@ -258,17 +214,7 @@
        if (ArenaModel.Instance.pkList != null)
            UpdateMatchUser(ArenaModel.Instance.pkList);
        Debug.Log("PlayerID:"+PlayerDatas.Instance.PlayerId);
        if (PlayerDatas.Instance.baseData.LV < ArenaModel.Instance.skipFightLV)
        {
            m_ToggleButton.isOn = false;
        }
        else
        {
            m_ToggleButton.isOn = ArenaModel.Instance.isSkipFightChoose;
        }
        lastClickFightTime = 0;
        Debug.Log("PlayerID:"+PlayerDatas.Instance.PlayerId);
    }
   
@@ -367,7 +313,7 @@
    }
  
    //更新匹配列表
    void UpdateMatchUser(IL_HA922_tagGCArenaMatchList vNetData)
    void UpdateMatchUser(HA922_tagGCArenaMatchList vNetData)
    {
        for (int i = 0; i < vNetData.MatchList.Length; i++)
        {
@@ -386,8 +332,18 @@
            ArenaModel.Instance.m_PlayerInfo[i] = vNetData.MatchList[i];
            //Debug.Log(ArenaModel.Instance.m_PlayerInfo[i].PlayerID);
            m_PlayerList[i].Find("TextPlayerName").GetComponent<Text>().text = ArenaModel.Instance.m_PlayerInfo[i].PlayerName;
            m_PlayerList[i].Find("ImageHead").GetComponent<AvatarCell>().InitUI(AvatarHelper.GetAvatarModel((int)ArenaModel.Instance.m_PlayerInfo[i].PlayerID, (int)ArenaModel.Instance.m_PlayerInfo[i].Face, (int)ArenaModel.Instance.m_PlayerInfo[i].FacePic, ArenaModel.Instance.m_PlayerInfo[i].Job));
            m_PlayerList[i].Find("TextPlayerName").GetComponent<Text>().text = ArenaModel.Instance.m_PlayerInfo[i].PlayerName;
            if ((int)ArenaModel.Instance.m_PlayerInfo[i].PlayerID >= 10000)
            {
                m_PlayerList[i].Find("ImageHead").GetComponent<Image>().SetSprite(UIHelper.GetHeadIcon((int)ArenaModel.Instance.m_PlayerInfo[i].Face));
            }
            else
            {
                var npcConfig = NPCConfig.Get(ArenaModel.Instance.GetLVToNPCID(ArenaModel.Instance.m_PlayerInfo[i].LV));
                m_PlayerList[i].Find("ImageHead").GetComponent<Image>().SetSprite(npcConfig.HeadPortrait);
            }
            //战力,机器人读等级表取等级对应战力
            m_PlayerList[i].Find("TextPlayerFight").GetComponent<Text>().text = StringUtility.Contact(Language.Get("L1056") , ":" , UIHelper.ReplaceLargeNum(fightpower));
            //积分
@@ -419,9 +375,8 @@
        int m_Count  = ArenaManager.dayAwardTypelist[index].awardItems[0].itemCount;
        m_ItemCellToday.Init(new ItemCellModel(m_ItemID, false, (ulong)m_Count));
        m_ItemCellToday.button.AddListener(() => ItemTipUtility.Show(m_ItemID));
        DailyRewardTxt.text = Language.Get("ArenaTodayReward");
        DailyRewardTxt.text = Language.Get("ArenaTodayReward");
        index = 0;
        for (int i = 0; i < ArenaManager.seasonAwardTypelist.Count; i++)
        {
@@ -430,16 +385,14 @@
                index = 0;
            }
            else
            {
            {
                if (reward > ArenaManager.seasonAwardTypelist[i].num && reward <= ArenaManager.seasonAwardTypelist[i + 1].num)
                {
                    index = i + 1;
                }
            }
            }
        }
        //赛季奖励
        int m_ItemID1 = ArenaManager.seasonAwardTypelist[index].awardItems[0].itemId;
        m_Count  = ArenaManager.seasonAwardTypelist[index].awardItems[0].itemCount;
@@ -494,18 +447,6 @@
            m_txtCountdown.text = StringUtility.Contact(day.ToString(), Language.Get("L1074"), hour.ToString(), Language.Get("RealmWin_Bewrite_33"), minute, Language.Get("L1073"));
            ArenaModel.Instance.bArenaOpen = true;
        }        
    }
    void SkipChallenge()
    {
        if (PlayerDatas.Instance.baseData.LV < ArenaModel.Instance.skipFightLV)
        {
            SysNotifyMgr.Instance.ShowTip("RuneSpecialHoleLevelError", ArenaModel.Instance.skipFightLV);
            return;
        }
        m_ToggleButton.isOn = !m_ToggleButton.isOn;
        ArenaModel.Instance.isSkipFightChoose = m_ToggleButton.isOn;
    }
}
System/Dungeon/DungeonModel.cs
@@ -1440,7 +1440,7 @@
                            WindowCenter.Instance.Open("CrossServerFamilyBattleResultWin");
                            break;
                        case ArenaManager.MapID:
                            ArenaManagerModel.Instance.UpdateFBEnd();
                            //ArenaManagerModel.Instance.UpdateFBEnd();
                            break;
                        case CrossServerQualifyingModel.DATA_MAPID:
                            CrossServerQualifyingModel.Instance.UpdatePKResult();
@@ -1477,7 +1477,7 @@
                            WindowCenter.Instance.Open("CrossServerFamilyBattleResultWin");
                            break;
                        case ArenaManager.MapID:
                            ArenaManagerModel.Instance.UpdateFBEnd();
                            //ArenaManagerModel.Instance.UpdateFBEnd();
                            break;
                        case CrossServerQualifyingModel.DATA_MAPID:
                            CrossServerQualifyingModel.Instance.UpdatePKResult();
System/ILManager/ArenaManager.cs
@@ -58,7 +58,8 @@
    //非服务端玩家的镜像战斗
    public static bool IsArenaClientNotMirrorFight
    {
        get { return isArenaClient && !ArenaManagerModel.isMirrorFight; }
        //get { return isArenaClient && !ArenaManagerModel.isMirrorFight; }
        get { return isArenaClient; }
    }
    public static bool IsArenaStage()
System/Skill/TalentModel.cs
@@ -116,52 +116,52 @@
        Dictionary<int, List<int>> jobTalentTypeDict = new Dictionary<int, List<int>>();
        void ParseConfig()
        {
            var configs = TalentConfig.GetValues();
            for (int i = 0; i < configs.Count; i++)
            {
                var skillId = configs[i].skillId;
                var skillConfig = SkillConfig.Get(skillId);
                TalentSkill talent;
                if (!TryGetTalent(skillConfig.SkillTypeID, out talent))
                {
                    talent = new TalentSkill(skillConfig.SkillTypeID, skillConfig.SkillMaxLV);
                    talent.level = 0;
                    talentSkills.Add(skillConfig.SkillTypeID, talent);
            //var configs = TalentConfig.GetValues();
            //for (int i = 0; i < configs.Count; i++)
            //{
            //    var skillId = configs[i].skillId;
            //    var skillConfig = SkillConfig.Get(skillId);
            //    TalentSkill talent;
            //    if (!TryGetTalent(skillConfig.SkillTypeID, out talent))
            //    {
            //        talent = new TalentSkill(skillConfig.SkillTypeID, skillConfig.SkillMaxLV);
            //        talent.level = 0;
            //        talentSkills.Add(skillConfig.SkillTypeID, talent);
                    TalentTree talentTree;
                    if (!talentTreeDict.TryGetValue(skillConfig.UseType, out talentTree))
                    {
                        talentTree = new TalentTree();
                        talentTreeDict.Add(skillConfig.UseType, talentTree);
                    }
                    talentTree.Add(configs[i], skillConfig.SkillTypeID);
            //        TalentTree talentTree;
            //        if (!talentTreeDict.TryGetValue(skillConfig.UseType, out talentTree))
            //        {
            //            talentTree = new TalentTree();
            //            talentTreeDict.Add(skillConfig.UseType, talentTree);
            //        }
            //        talentTree.Add(configs[i], skillConfig.SkillTypeID);
                    List<int> list = null;
                    if (!jobTalentTypeDict.TryGetValue(skillConfig.UseType, out list))
                    {
                        list = new List<int>();
                        jobTalentTypeDict.Add(skillConfig.UseType, list);
                    }
                    if (!list.Contains(configs[i].type))
                    {
                        list.Add(configs[i].type);
                    }
                }
            }
            var jobs = jobTalentTypeDict.Keys.ToList();
            for (int i = 0; i < jobs.Count; i++)
            {
                var list = jobTalentTypeDict[jobs[i]];
                list.Sort((x, y) =>
                {
                    return x.CompareTo(y);
                });
            }
            //        List<int> list = null;
            //        if (!jobTalentTypeDict.TryGetValue(skillConfig.UseType, out list))
            //        {
            //            list = new List<int>();
            //            jobTalentTypeDict.Add(skillConfig.UseType, list);
            //        }
            //        if (!list.Contains(configs[i].type))
            //        {
            //            list.Add(configs[i].type);
            //        }
            //    }
            //}
            //var jobs = jobTalentTypeDict.Keys.ToList();
            //for (int i = 0; i < jobs.Count; i++)
            //{
            //    var list = jobTalentTypeDict[jobs[i]];
            //    list.Sort((x, y) =>
            //    {
            //        return x.CompareTo(y);
            //    });
            //}
            var config = FuncConfigConfig.Get("TalentResetBook");
            talentResetBook = int.Parse(config.Numerical1);
            talentResetBookCost = int.Parse(config.Numerical2);
            //var config = FuncConfigConfig.Get("TalentResetBook");
            //talentResetBook = int.Parse(config.Numerical1);
            //talentResetBookCost = int.Parse(config.Numerical2);
        }
        public int GetTalentType(int index)