hch
9 天以前 e0d64492ac942c794c006a12dedfc4142ac29731
287 【公会】BOSS讨伐
16个文件已添加
11个文件已修改
1140 ■■■■■ 已修改文件
Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA503_tagSCFamilyTaofaInfo.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossAwardCell.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossAwardCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossAwardLineCell.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossAwardLineCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossAwardWin.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossAwardWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossHurtRankCell.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossHurtRankCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossHurtRankWin.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossHurtRankWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossManager.cs 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossPowerUPCell.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossPowerUPCell.cs.meta 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossPowerUPWin.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossPowerUPWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossWin.cs 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildFuncCell.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildManager.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/PlayerFairyData.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/MainRedDot.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Tip/ConfirmCancel.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Tip/UseItemConfirmWin.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Tip/UseItemConfirmWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/TimeUtility.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA503_tagSCFamilyTaofaInfo.cs
@@ -1,11 +1,12 @@
using UnityEngine;
using System.Collections;
using UnityEngine;
using System.Collections;
// A5 03 公会讨伐信息 #tagSCFamilyTaofaInfo
public class DTCA503_tagSCFamilyTaofaInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA503_tagSCFamilyTaofaInfo vNetData = vNetPack as HA503_tagSCFamilyTaofaInfo;
        GuildBossManager.Instance.UpdataMyBossData(vNetData);
    }
}
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -141,6 +141,8 @@
        Register(typeof(HA3C7_tagMCGubaoInfo), typeof(DTCA3C7_tagMCGubaoInfo));
        Register(typeof(HB202_tagSCDingjungeInfo), typeof(DTCB202_tagSCDingjungeInfo));
        Register(typeof(HB432_tagSCViewNPCAttrRet), typeof(DTCB432_tagSCViewNPCAttrRet));
        Register(typeof(HA503_tagSCFamilyTaofaInfo), typeof(DTCA503_tagSCFamilyTaofaInfo));
        Register(typeof(HA504_tagSCFamilyTaofaAtkRet), typeof(DTCA504_tagSCFamilyTaofaAtkRet));
    }
    //主工程注册封包
Main/System/Guild/GuildBossAwardCell.cs
New file
@@ -0,0 +1,22 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Wednesday, September 26, 2018
//--------------------------------------------------------
using UnityEngine;
using UnityEngine.UI;
public class GuildBossAwardCell : MonoBehaviour
{
    [SerializeField] Text numText;
    public void Display(int num)
    {
        numText.text = num.ToString();
    }
}
Main/System/Guild/GuildBossAwardCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cd7e658d241f6fc428b8f6f2f608d75e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildBossAwardLineCell.cs
New file
@@ -0,0 +1,37 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Wednesday, September 26, 2018
//--------------------------------------------------------
using System;
using UnityEngine;
using UnityEngine.UI;
public class GuildBossAwardLineCell : CellView
{
    [SerializeField] GuildBossAwardCell[] cells;
    public void Display(int index)
    {
        int totalCnt = 0;
        if (50 * (index + 1) <= GuildBossManager.Instance.m_BoxUnGetCount)
        {
            totalCnt = 50;
        }
        else
        {
            totalCnt = GuildBossManager.Instance.m_BoxUnGetCount - 50 * index;
        }
        int cnt = Mathf.CeilToInt(totalCnt / 10f);
        for (int i = 0; i < cells.Length; i++)
        {
            cells[i].gameObject.SetActive(i < cnt);
            cells[i].Display((i+1)*10 <= totalCnt ? 10 : totalCnt - i*10);
        }
    }
}
Main/System/Guild/GuildBossAwardLineCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a5d043f832bebdd44965f940fcdf8ee7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildBossAwardWin.cs
New file
@@ -0,0 +1,89 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class GuildBossAwardWin : UIBase
{
    [SerializeField] ScrollerController atkScroller;
    [SerializeField] ScrollerController awardScroller;
    [SerializeField] Button getAllBtn;
    protected override void InitComponent()
    {
        getAllBtn.AddListener(OnGetAllBtnClick);
    }
    protected override void OnPreOpen()
    {
        atkScroller.OnRefreshCell += OnRefreshCell;
        awardScroller.OnRefreshCell += OnRefreshAwardCell;
        GuildBossManager.Instance.BossHurtEvent += Display;
        Display();
    }
    protected override void OnPreClose()
    {
        atkScroller.OnRefreshCell -= OnRefreshCell;
        awardScroller.OnRefreshCell -= OnRefreshAwardCell;
        GuildBossManager.Instance.BossHurtEvent -= Display;
    }
    void Display()
    {
        var _list = GuildBossManager.Instance.bossActions.Keys.ToList();
        atkScroller.Refresh();
        for (int i = 0; i < _list.Count; i++)
        {
            if (_list[i] == 1)
            {
                continue;
            }
            var data = GuildBossManager.Instance.bossActions[_list[i]];
            if (data.Value4 + data.Value5 * Constants.ExpPointValue <= 0)
            {
                continue;
            }
            atkScroller.AddCell(ScrollerDataType.Header, _list[i]);
        }
        atkScroller.Restart();
        //50个一行
        int cnt = Mathf.CeilToInt(GuildBossManager.Instance.m_BoxUnGetCount / 50.0f);
        awardScroller.Refresh();
        for (int i = 0; i < cnt; i++)
        {
            awardScroller.AddCell(ScrollerDataType.Header, i);
        }
        awardScroller.Restart();
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<Text>();
        //{0}累积造成<color=#fa1010>{1}</color>伤害,共为成员们带回了<Img img=guildboss2_img_132 size=30 folder=GuildBoss/>x<color=#fa1010>{2}</color>
        var data = GuildBossManager.Instance.GetMemberData(cell.index);
        var actionData = GuildBossManager.Instance.bossActions[cell.index];
        _cell.text = Language.Get("GuildBoss20", data.Name, UIHelper.ReplaceLargeNum(actionData.Value4 + actionData.Value5 * Constants.ExpPointValue), actionData.Value6);
    }
    void OnRefreshAwardCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<GuildBossAwardLineCell>();
        _cell.Display(cell.index);
    }
    void OnGetAllBtnClick()
    {
        if (GuildBossManager.Instance.m_BoxUnGetCount <= 0)
        {
            return;
        }
        var pack = new CA504_tagCMPlayerGetReward();
        pack.RewardType = 3;
        GameNetSystem.Instance.SendInfo(pack);
    }
}
Main/System/Guild/GuildBossAwardWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c3020caed96b20146bd8cfdd3007ea74
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildBossHurtRankCell.cs
New file
@@ -0,0 +1,64 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Wednesday, September 26, 2018
//--------------------------------------------------------
using UnityEngine;
using UnityEngine.UI;
public class GuildBossHurtRankCell : CellView
{
    [SerializeField] Image rankImg;
    [SerializeField] Transform rankTextRect;
    [SerializeField] Text rankText;
    [SerializeField] AvatarCell avatarCell; // 头像中点击查询玩家详情
    [SerializeField] Text lvText;
    [SerializeField] OfficialTitleCell officialTitleCell;
    [SerializeField] Text nameText;
    [SerializeField] Text todayAtkCntText;
    [SerializeField] Text hurtText;
    // rank 从0开始
    public void Display(int rank)
    {
        if (rank >= GuildBossManager.Instance.playerBossHurtRank.Count)
        {
            return;
        }
        if (rank < 3)
        {
            rankImg.SetActive(true);
            rankTextRect.SetActive(false);
            rankImg.SetSprite($"Rank{rank + 1}");
        }
        else
        {
            rankImg.SetActive(false);
            rankTextRect.SetActive(true);
            rankText.text = (rank + 1).ToString();
        }
        var rankData = GuildBossManager.Instance.playerBossHurtRank[rank];
        int playerID = (int)rankData.Value1;
        var playerData = GuildBossManager.Instance.GetMemberData(playerID);
        avatarCell.InitUI(AvatarHelper.GetAvatarModel(playerID, playerData.Face, playerData.FacePic));
        avatarCell.SetListener(() =>
        {
            AvatarHelper.TryViewOtherPlayerInfo(playerID);
        });
        officialTitleCell.InitUI(playerData.RealmLV, playerData.TitleID);
        nameText.text = playerData.Name;
        lvText.text = playerData.LV.ToString();
        todayAtkCntText.text = Language.Get("GuildBoss15", rankData.Value3);
        hurtText.text = UIHelper.ReplaceLargeNum(rankData.Value4 + rankData.Value5 * Constants.ExpPointValue);
    }
}
Main/System/Guild/GuildBossHurtRankCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 39fdb854a80944e439a951b3754b7249
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildBossHurtRankWin.cs
New file
@@ -0,0 +1,90 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, July 24, 2018
//--------------------------------------------------------
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//公会讨伐伤害榜
public class GuildBossHurtRankWin : UIBase
{
    [SerializeField] ScrollerController scrollerController;
    [SerializeField] Text myRankText;
    [SerializeField] Text myHurtText;
    [SerializeField] Transform emptyRect;
    protected override void OnPreOpen()
    {
        scrollerController.OnRefreshCell += OnRefreshCell;
        GuildBossManager.Instance.BossHurtEvent += Display;
        Display();
    }
    protected override void OnPreClose()
    {
        scrollerController.OnRefreshCell -= OnRefreshCell;
        GuildBossManager.Instance.BossHurtEvent -= Display;
    }
    public void Display()
    {
        CreateScroller();
        ShowMyRank();
    }
    void CreateScroller()
    {
        var cnt = GuildBossManager.Instance.playerBossHurtRank.Count;
        if (cnt == 0)
        {
            emptyRect.SetActive(true);
            scrollerController.SetActive(false);
            return;
        }
        else
        {
            emptyRect.SetActive(false);
            scrollerController.SetActive(true);
        }
        scrollerController.Refresh();
        for (int i = 0; i < cnt; i++)
        {
            scrollerController.AddCell(ScrollerDataType.Header, i);
        }
        scrollerController.Restart();
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<GuildBossHurtRankCell>();
        _cell.Display(cell.index);
    }
    void ShowMyRank()
    {
        var myRank = GuildBossManager.Instance.GetMyRank();
        if (myRank == 0)
        {
            myRankText.text = Language.Get("Guild_70") + Language.Get("L1045");
        }
        else
        {
            myRankText.text = Language.Get("Guild_70") + myRank;
        }
        myHurtText.text = GuildBossManager.Instance.m_BoxHurt.ToString();
    }
}
Main/System/Guild/GuildBossHurtRankWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7e33c8548cbc23146942d83c9fd44c17
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildBossManager.cs
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using LitJson;
@@ -6,8 +7,22 @@
{
    public Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction> bossActions = new Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction>();
    // 玩家伤害排行
    public List<HA513_tagMCFamilyActionInfo.tagMCFamilyAction> playerBossHurtRank = new List<HA513_tagMCFamilyActionInfo.tagMCFamilyAction>();
    //时间戳:讨伐数据
    public Dictionary<int, TaofaAtkData> taofaAtkData = new Dictionary<int, TaofaAtkData>();
    //玩家ID:玩家数据 (退出公会的玩家)
    public Dictionary<int, MemberData> taofaPlayerData = new Dictionary<int, MemberData>();
    public event Action BossHurtEvent;
    //自己的数据
    public byte m_BuZhenState;    // 是否已布阵
    public ushort m_AtkCount;    // 已斩杀次数,用于计算剩余次数=免费次数+道具增加次数-已斩杀次数
    public ushort m_ItemAddCount;    // 道具增加斩杀次数
    public ushort m_Anger;    // 当前怒气值
    public ushort m_BoxUnGetCount;    // 当前未领取的宝箱数,即可领取的
    public long m_BoxHurt;    // 今日伤害
    public long m_BoxHurtHis;    // 历史伤害
    //配置
    public int initSuperHitRate;
@@ -21,10 +36,14 @@
    public int[] bxCumulativeDamageList;
    public int bxDailyMax;  //个人每日产出上限
    public int bxDailyAwardMax; //个人每日领取奖励上限
    public int addAtkCntItemID = 17; //增加讨伐次数道具ID
    public int bossSkinID = 7100300;
    void ParseConfig()
    {
        // 数值1:初始暴击率万分率,功能独立的暴击率,与角色暴击无关
        // 数值3:布阵最大层级,暂固定每人1次,1次1层
        // 数值3:布阵最大层级
        var config = FuncConfigConfig.Get("FamilyTaofaBuzhen");
        initSuperHitRate = int.Parse(config.Numerical1);
        bzAddAttrs = ConfigParse.GetMultipleStr<int>(config.Numerical2);
@@ -49,11 +68,44 @@
    public override void Init()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
        GuildManager.Instance.EnterOrQuitGuildEvent += EnterOrQuitGuildEvent;
        ParseConfig();
    }
    public override void Release()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin;
        GuildManager.Instance.EnterOrQuitGuildEvent -= EnterOrQuitGuildEvent;
    }
    void OnBeforePlayerDataInitializeEventOnRelogin()
    {
        bossActions.Clear();
        playerBossHurtRank.Clear();
        m_BuZhenState = 0;
        m_AtkCount = 0;
        m_ItemAddCount = 0;
        m_Anger = 0;
        m_BoxUnGetCount = 0;
        m_BoxHurt = 0;
        m_BoxHurtHis = 0;
        taofaAtkData.Clear();
        taofaPlayerData.Clear();
    }
    void EnterOrQuitGuildEvent(bool isEnter)
    {
        if (!isEnter)
        {
            bossActions.Clear();
            playerBossHurtRank.Clear();
            taofaAtkData.Clear();
            taofaPlayerData.Clear();
        }
        UpdateRedpoint();
    }
    //// 操作:0-斩杀攻击;1-布阵
    public void TaofaBoss(int opType)
@@ -63,8 +115,25 @@
        GameNetSystem.Instance.SendInfo(pack);
    }
    public void UpdataMyBossData(HA503_tagSCFamilyTaofaInfo netPack)
    {
        m_BuZhenState = netPack.BuZhenState;
        m_AtkCount = netPack.AtkCount;
        m_ItemAddCount = netPack.ItemAddCount;
        m_Anger = netPack.Anger;
        m_BoxUnGetCount = netPack.BoxUnGetCount;
        m_BoxHurt = netPack.BoxHurt + netPack.BoxHurtEx * Constants.ExpPointValue;
        m_BoxHurtHis = netPack.BoxHurtHis + netPack.BoxHurtHisEx * Constants.ExpPointValue;
        UpdateRedpoint();
        BossHurtEvent?.Invoke();
    }
    public int GetHasAtkCnt()
    {
        return freeAtkCount + m_ItemAddCount - m_AtkCount;
    }
    // 【公会行为】
    // 增加行为类型18 - 公会讨伐相关数据
@@ -81,9 +150,14 @@
    // atkList   -     讨伐记录列表,可用于表现成员头像攻击: atkTime  -  攻击时间戳,  atkType  -  攻击类型(0-普通攻击, 1-怒气攻击)
    // info     -     不一定有该key,仅退出的成员才有,用于更新退出成员相关基础信息,如名字、头像等,还在公会里的成员通过 // A5 20 玩家家族信息 #tagMCRoleFamilyInfo 取成员信息
    // "info":{"LV":106,"Job":1,"Name":"主公3016219","FacePic":0,"FightPower":1831995,"RealmLV":12,"ServerID":86,"TitleID":0,"Face":0},
    // boss讨伐的全局数据
    public HA513_tagMCFamilyActionInfo.tagMCFamilyAction GetGuildBossAction()
    {
        if (bossActions.ContainsKey(1))
        {
            return bossActions[1];
        }
        return null;
    }
@@ -95,25 +169,171 @@
            return false;
        }
        //判断是否新的公会数据
        if (vNetData.FamilyActionList.Length == 1 && vNetData.FamilyActionList[0].Value1 == 1)
        {
            if (bossActions.ContainsKey(1) && bossActions[1].Time != vNetData.FamilyActionList[0].Time)
            {
                bossActions.Clear();
                playerBossHurtRank.Clear();
            }
        }
        for (int i = 0; i < vNetData.Count; i++)
        {
            bossActions[(int)vNetData.FamilyActionList[i].Value1] = vNetData.FamilyActionList[i];
        }
        SortPlayerHurt();
        RefreshAtkList();
        BossHurtEvent?.Invoke();
        return true;
    }
    void SortPlayerHurt()
    {
        playerBossHurtRank.Clear();
        foreach (var item in bossActions)
        {
            if (item.Value.Value1 != 1)
            {
                if (item.Value.Value4 == 0 && item.Value.Value5 == 0)
                {
                    continue;
                }
                playerBossHurtRank.Add(item.Value);
            }
        }
        playerBossHurtRank.Sort((a, b) => (b.Value4 + b.Value5 * Constants.ExpPointValue).CompareTo(a.Value4 + a.Value5 * Constants.ExpPointValue));
    }
    //解析攻击记录 和 玩家信息(退出公会的)
    void RefreshAtkList()
    {
        //{"atkList":[[atkTime, 本次贡献箱子数, 本次总伤害, atkType], ...],   "info":{k:v, ...}}
        //"info":{"LV":106,"Job":1,"Name":"主公3016219","FacePic":0,"FightPower":1831995,"RealmLV":12,"ServerID":86,"TitleID":0,"Face":0},
        taofaAtkData.Clear();
        taofaPlayerData.Clear();
        foreach (var item in playerBossHurtRank)
        {
            JsonData jsonData = JsonMapper.ToObject(item.UseData);
            if (!jsonData.ContainsKey("atkList"))
            {
                continue;
            }
            var arr = JsonMapper.ToObject<long[][]>(jsonData["atkList"].ToJson());
            taofaAtkData[(int)arr[0][0]] = new TaofaAtkData()
            {
                playerID = (int)item.Value1,
                atkType = (int)arr[0][3],
                hurt = arr[0][2],
            };
            if (jsonData.ContainsKey("info"))
            {
                taofaPlayerData[(int)item.Value1] = JsonMapper.ToObject<MemberData>(jsonData["info"].ToJson());
            }
        }
    }
    // 获取我的排名
    public int GetMyRank()
    {
        int rank = 0;
        for (int i = 0; i < playerBossHurtRank.Count; i++)
        {
            if (playerBossHurtRank[i].Value1 == PlayerDatas.Instance.baseData.PlayerID)
            {
                rank = i + 1;
                break;
            }
        }
        return rank;
    }
    //获取成员外观数据 头像名字等
    public MemberData GetMemberData(int playerId)
    {
        var playerInfo = PlayerDatas.Instance.fairyData.GetMember(playerId);
        if (playerInfo == null)
        {
            return taofaPlayerData.ContainsKey(playerId) ? taofaPlayerData[playerId] : null;
        }
        return new MemberData()
        {
            LV = playerInfo.LV,
            Job = playerInfo.Job,
            Name = playerInfo.Name,
            FacePic = playerInfo.FacePic,
            FightPower = (ulong)playerInfo.FightPower,
            RealmLV = playerInfo.RealmLV,
            ServerID = playerInfo.ServerID,
            TitleID = playerInfo.TitleID,
            Face = playerInfo.Face
        };
    }
    #region 红点
    Redpoint redPoint = new Redpoint(MainRedDot.MainGuildRedpoint, MainRedDot.bossTaofaRedpointID);
    void UpdateRedpoint()
    {
        redPoint.state = RedPointState.None;
        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Guild))
        {
            return;
        }
        if (PlayerDatas.Instance.fairyData.fairy == null)
        {
            return;
        }
        if (m_BuZhenState == 0)
        {
            redPoint.state = RedPointState.Simple;
            return;
        }
        if (GetHasAtkCnt() > 0)
        {
            redPoint.state = RedPointState.Simple;
            return;
        }
        if (m_BoxUnGetCount > 0)
        {
            redPoint.state = RedPointState.Simple;
            return;
        }
    }
    #endregion
}
public class PlayerGuildBossAtkInfo
public class TaofaAtkData
{
    public int playerID;
    public int atkTime;
    public int bzTime;
    public int atkCount;
    public long totalHurtValue;
    public int boxCnt;
    public int atkType;
    public long hurt;
}
public class MemberData
{
    public int LV;
    public int Job;
    public string Name;
    public int FacePic;
    public ulong FightPower;
    public int RealmLV;
    public int ServerID;
    public int TitleID;
    public int Face;
}
Main/System/Guild/GuildBossPowerUPCell.cs
New file
@@ -0,0 +1,41 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Wednesday, September 26, 2018
//--------------------------------------------------------
using UnityEngine;
using UnityEngine.UI;
public class GuildBossPowerUPCell : CellView
{
    [SerializeField] TextEx nameText;
    [SerializeField] TextEx stateText;
    [SerializeField] TextEx timeText;
    // rank 从0开始
    public void Display(int playerID)
    {
        int time = 0;
        if (GuildBossManager.Instance.bossActions.ContainsKey(playerID))
        {
            var data = GuildBossManager.Instance.bossActions[playerID];
            time = (int)data.Value2;
        }
        nameText.text = GuildBossManager.Instance.GetMemberData(playerID).Name;
        nameText.colorType = time == 0 ? TextColType.NavyBrown : TextColType.DarkGreen;
        stateText.text = time == 0 ? Language.Get("GuildBoss27") : Language.Get("GuildBoss26");
        stateText.colorType = time == 0 ? TextColType.NavyBrown : TextColType.DarkGreen;
        timeText.text = time == 0 ? "" : TimeUtility.GetTime((uint)time).ToString("HH:mm:ss");
        timeText.colorType = time == 0 ? TextColType.NavyBrown : TextColType.DarkGreen;
    }
}
Main/System/Guild/GuildBossPowerUPCell.cs.meta
New file
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f19351b2439240e4183780cad0e1a53e
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildBossPowerUPWin.cs
New file
@@ -0,0 +1,83 @@
using System.Collections.Generic;
using UnityEngine;
// 布阵
public class GuildBossPowerUPWin : UIBase
{
    [SerializeField] ScrollerController scrollerController;
    protected override void OnPreOpen()
    {
        scrollerController.OnRefreshCell += OnRefreshCell;
        GuildBossManager.Instance.BossHurtEvent += Display;
        Display();
    }
    protected override void OnPreClose()
    {
        scrollerController.OnRefreshCell -= OnRefreshCell;
        GuildBossManager.Instance.BossHurtEvent -= Display;
    }
    void Display()
    {
        var _list = SortPlayer();
        scrollerController.Refresh();
        for (int i = 0; i < _list.Count; i++)
        {
            scrollerController.AddCell(ScrollerDataType.Header, _list[i]);
        }
        scrollerController.Restart();
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<GuildBossPowerUPCell>();
        _cell.Display(cell.index);
    }
    List<int> SortPlayer()
    {
        var _list = PlayerDatas.Instance.fairyData.GetMemberIDList();
        _list.Sort(Cmp);
        return _list;
    }
    int Cmp(int playerIDA, int playerIDB)
    {
        int timeA = 0;
        if (GuildBossManager.Instance.bossActions.ContainsKey(playerIDA))
        {
            timeA = (int)GuildBossManager.Instance.bossActions[playerIDA].Value2;
        }
        int timeB = 0;
        if (GuildBossManager.Instance.bossActions.ContainsKey(playerIDB))
        {
            timeB = (int)GuildBossManager.Instance.bossActions[playerIDB].Value2;
        }
        // 0代表未布阵排后面,非0小的排前面
        if (timeA == 0 && timeB == 0)
        {
            return playerIDA - playerIDB;
        }
        else if (timeA == 0)
        {
            return 1;
        }
        else if (timeB == 0)
        {
            return -1;
        }
        return timeA - timeB;
    }
}
Main/System/Guild/GuildBossPowerUPWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bae686ecce6b69049add043967b82735
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildBossWin.cs
@@ -1,3 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
@@ -23,10 +24,10 @@
    //布阵
    [SerializeField] Text bzAttrText;
    [SerializeField] UIEffectPlayer bzEffect1;
    [SerializeField] Text bzLayerText;
    [SerializeField] Text bzLayerText;  //公会布阵层级
    [SerializeField] UIEffectPlayer bzEffect2;
    [SerializeField] Button bzBtn;
    [SerializeField] Text bzTimesText;  //布阵次数
    [SerializeField] Text bzTimesText;  //个人布阵次数
    [SerializeField] Button bzRecordBtn;
    //怒气条
@@ -40,7 +41,6 @@
    [SerializeField] Text atkCDText; //攻击cd
    [SerializeField] Transform addTimesRect;
    [SerializeField] Image addTimesItemImg;
    [SerializeField] Text addTimesItemText;
    [SerializeField] ButtonEx closeBtn;
    [SerializeField] ButtonEx scoreBtn;
@@ -56,12 +56,29 @@
    [SerializeField] GuildBossOtherPlayer otherPlayer;  //创建多个用
    [SerializeField] GuildBossOtherPlayerAttack otherPlayerAttack;  //创建多个用
    [SerializeField] Transform fakeRedBZ;
    [SerializeField] Transform fakeRedAward;
    bool isCD = false;
    int beforeLayerNum; //布阵层级 对比变化展示特效
    protected override void InitComponent()
    {
        closeBtn.AddListener(CloseWindow);
        bzBtn.AddListener(OnBzBtnClick);
        bzRecordBtn.AddListener(() =>
        {
            UIManager.Instance.OpenWindow<GuildBossPowerUPWin>();
        });
        atkBtn.AddListener(OnAtkBtnClick);
        scoreBtn.AddListener(() =>
        {
            UIManager.Instance.OpenWindow<GuildBossHurtRankWin>();
        });
        awardBtn.AddListener(() =>
        {
            UIManager.Instance.OpenWindow<GuildBossAwardWin>();
        });
    }
@@ -69,7 +86,7 @@
    {
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
        // GuildManager.Instance.FamilyActionInfoEvent += OnFamilyActionInfoEvent;
        GuildBossManager.Instance.BossHurtEvent += BossHurtEvent;
        Display();
    }
@@ -77,7 +94,7 @@
    {
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
        // GuildManager.Instance.FamilyActionInfoEvent -= OnFamilyActionInfoEvent;
        GuildBossManager.Instance.BossHurtEvent -= BossHurtEvent;
    }
@@ -85,10 +102,14 @@
    {
        endTimeText.text = Language.Get("Arena14", TimeUtility.SecondsToHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds));
        fightPowerText.text = PlayerDatas.Instance.baseData.FightPower.ToString();
        headCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
                                                        PlayerDatas.Instance.baseData.face,
                                                        PlayerDatas.Instance.baseData.facePic));
        var bossAction = GuildBossManager.Instance.GetGuildBossAction();
        ShowBzInfo(bossAction);
        nameText.text = PlayerDatas.Instance.baseData.PlayerName;
        BossHurtEvent();
        bossModel.Create(GuildBossManager.Instance.bossSkinID);
        heroModel.Create(PhantasmPavilionManager.Instance.GetMyModelSkinID());
    }
    //战力变化
@@ -98,31 +119,137 @@
            fightPowerText.text = PlayerDatas.Instance.baseData.FightPower.ToString();
    }
    void OnFamilyActionInfoEvent(int familyID, int actionType)
    //显示动态UI
    void ShowDynamicUI()
    {
        if (actionType == GuildManager.GuildBossActionType)
        var bossAction = GuildBossManager.Instance.GetGuildBossAction();
        ShowRank();
        ShowBzInfo(bossAction);
        todayHurtText.text = Language.Get("GuildBoss17") + UIHelper.ReplaceLargeNum(GuildBossManager.Instance.m_BoxHurt);
        if (GuildBossManager.Instance.m_BoxHurt >= GuildBossManager.Instance.m_BoxHurtHis)
        {
            var bossAction = GuildBossManager.Instance.GetGuildBossAction();
            if (beforeLayerNum != bossAction.Value3)
            newHighestHurtImg.SetActive(true);
        }
        else
        {
            newHighestHurtImg.SetActive(false);
        }
        bzTimesText.text = Language.Get("Guild_65") + (GuildBossManager.Instance.m_BuZhenState == 1 ? "0/1" : UIHelper.AppendColor(TextColType.Green, "1/1", false));
        ShowProcess(GuildBossManager.Instance.m_Anger * 1.0f / GuildBossManager.Instance.maxAngerValue);
        if (isCD)
        {
            angerAtk.SetActive(false);
            normalAtk.SetActive(false);
        }
        else
        {
            atkCDText.text = "";
            if (GuildBossManager.Instance.m_Anger >= GuildBossManager.Instance.maxAngerValue)
            {
                bzEffect1.Play();
                bzEffect2.Play();
                ShowBzInfo(bossAction);
                angerAtk.SetActive(true);
                normalAtk.SetActive(false);
            }
            else
            {
                angerAtk.SetActive(false);
                normalAtk.SetActive(true);
                int cnt = GuildBossManager.Instance.GetHasAtkCnt();
                if (cnt > 0)
                {
                    atkEffect.Play();
                }
                else
                {
                    atkEffect.Stop();
                }
                normalAtkCntText.text = Language.Get("TianziBillborad07", cnt);
            }
        }
        var hasCnt = GuildBossManager.Instance.GetHasAtkCnt();
        if (hasCnt > 0)
        {
            addTimesRect.SetActive(false);
        }
        else
        {
            addTimesRect.SetActive(true);
            addTimesItemImg.SetItemSprite(GuildBossManager.Instance.addAtkCntItemID);
        }
        if (GuildBossManager.Instance.m_BoxUnGetCount > 0)
        {
            awardCntRect.SetActive(true);
            awardCntText.text = Language.Get("TianziBillborad07", GuildBossManager.Instance.m_BoxUnGetCount);
        }
        else
        {
            awardCntRect.SetActive(false);
        }
        fakeRedBZ.SetActive(GuildBossManager.Instance.m_BuZhenState != 1);
        fakeRedAward.SetActive(GuildBossManager.Instance.m_BoxUnGetCount > 0);
    }
    void BossHurtEvent()
    {
        var bossAction = GuildBossManager.Instance.GetGuildBossAction();
        var layer = bossAction == null ? 0 : bossAction.Value3;
        if (beforeLayerNum != layer)
        {
            bzEffect1.Play();
            bzEffect2.Play();
            beforeLayerNum = (int)layer;
        }
        ShowDynamicUI();
    }
    void ShowRank()
    {
        int myRank = GuildBossManager.Instance.GetMyRank();
        if (myRank > 0)
        {
            rankRect.SetActive(true);
            noRankText.SetActive(false);
            rankText.text = myRank.ToString();
        }
        else
        {
            rankRect.SetActive(false);
            noRankText.SetActive(true);
        }
    }
    //布阵
    void ShowBzInfo(HA513_tagMCFamilyActionInfo.tagMCFamilyAction bossAction)
    {
        bzAttrText.text = GetAddAttrs(bossAction);
        bzLayerText.text = $"{bossAction.Value3}/{GuildBossManager.Instance.bzMaxLevel}";
        var layer = bossAction == null ? 0 : bossAction.Value3;
        var bzTime = bossAction == null ? 0 : bossAction.Value2;
        if (bzTime == 0)
        {
            bzLayerText.text = $"{layer}/{GuildBossManager.Instance.bzMaxLevel}";
        }
        else
        {
            int remainTime = (int)Math.Max(0, bzTime - TimeUtility.AllSeconds);
            if (remainTime > 0)
            {
                bzLayerText.text = $"{layer}/{GuildBossManager.Instance.bzMaxLevel}" + Language.Get("GuildBoss28", TimeUtility.SecondsToHMS(remainTime));
            }
        }
    }
    //获取布阵属性
    string GetAddAttrs(HA513_tagMCFamilyActionInfo.tagMCFamilyAction action)
    {
        var layerNum = action.Value3;
        var layerNum = action == null ? 0 : action.Value3;
        var superHitRate = GuildBossManager.Instance.initSuperHitRate + (int)layerNum * GuildBossManager.Instance.bzAddAttrs[0];
        var addHurtPer = (int)layerNum * GuildBossManager.Instance.bzAddAttrs[1];
@@ -136,6 +263,8 @@
    void OnSecondEvent()
    {
        endTimeText.text = Language.Get("Arena14", TimeUtility.SecondsToHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds));
        var bossAction = GuildBossManager.Instance.GetGuildBossAction();
        ShowBzInfo(bossAction);
    }
    void ShowProcess(float value)
@@ -166,5 +295,80 @@
        }
    }
    void OnBzBtnClick()
    {
        int curLayer = 0;
        var bossAction = GuildBossManager.Instance.GetGuildBossAction();
        if (bossAction != null)
        {
            curLayer = (int)bossAction.Value3;
        }
        if (curLayer >= GuildBossManager.Instance.bzMaxLevel)
        {
            SysNotifyMgr.Instance.ShowTip("GuildBoss2");
            return;
        }
        if (GuildBossManager.Instance.m_BuZhenState == 1)
        {
            SysNotifyMgr.Instance.ShowTip("GuildBoss1");
            return;
        }
        GuildBossManager.Instance.TaofaBoss(1);
    }
    void OnAtkBtnClick()
    {
        if (isCD) return;
        //怒气伤害不消耗次数
        //次数不足 提示使用道具,若用完提示本日次数已用完
        if (GuildBossManager.Instance.m_Anger < GuildBossManager.Instance.maxAngerValue)
        {
            if (GuildBossManager.Instance.GetHasAtkCnt() <= 0)
            {
                var itemCfg = ItemConfig.Get(GuildBossManager.Instance.addAtkCntItemID);
                var singleCnt = itemCfg.EffectValueA1;
                var todayUseMaxCnt = itemCfg.MaxSkillCnt;
                if (GuildBossManager.Instance.m_ItemAddCount / singleCnt >= todayUseMaxCnt)
                {
                    SysNotifyMgr.Instance.ShowTip("HeroWishFinish");
                    return;
                }
                ConfirmCancel.ShowUseItemPopConfirm(Language.Get("GuildBoss24"), Language.Get("GuildBoss23",
                itemCfg.IconKey, singleCnt, todayUseMaxCnt - GuildBossManager.Instance.m_ItemAddCount / singleCnt),
                GuildBossManager.Instance.addAtkCntItemID, 1, (bool isOK) =>
                {
                    if (isOK)
                    {
                        ItemLogicUtility.Instance.UseItem(PackManager.Instance.GetItemGUIDByID(GuildBossManager.Instance.addAtkCntItemID));
                    }
                });
                return;
            }
        }
        GuildBossManager.Instance.TaofaBoss(0);
        ShowAttackCD().Forget();
    }
    async UniTask ShowAttackCD()
    {
        angerAtk.SetActive(false);
        normalAtk.SetActive(false);
        isCD = true;
        atkBtn.SetColorful(null, false);
        atkCDText.text = "3";
        await UniTask.Delay(1000);
        atkCDText.text = "2";
        await UniTask.Delay(1000);
        atkCDText.text = "1";
        await UniTask.Delay(1000);
        atkBtn.SetColorful(null, true);
        isCD = false;
        ShowDynamicUI();
    }
}
Main/System/Guild/GuildFuncCell.cs
@@ -39,9 +39,9 @@
            return;
        }
        if (funcID == 43)
        if (funcID == (int)FuncOpenEnum.GuildBoss)
        {
            // UIManager.Instance.OpenWindow<GuildBossWin>();
            UIManager.Instance.OpenWindow<GuildBossWin>();
        }
Main/System/Guild/GuildManager.cs
@@ -39,7 +39,7 @@
    public byte[] donateCntList;
    public event Action DonateCntListEvent;
    public event Action<bool> EnterOrQuitGuildEvent;   //进入或退出公会事件
    public event Action<bool> EnterOrQuitGuildEvent;   //true进入或false退出公会事件
    public override void Init()
@@ -446,9 +446,7 @@
    #region  公会自定义记录
    public void UpdateFamilyAction(HA513_tagMCFamilyActionInfo _package)
    {
        if (PlayerDatas.Instance.fairyData == null ||
            PlayerDatas.Instance.fairyData.fairy == null ||
            PlayerDatas.Instance.fairyData.fairy.FamilyID != _package.FamilyID)
        if (PlayerDatas.Instance.baseData.FamilyId != _package.FamilyID)
        {
            return;
        }
Main/System/Guild/PlayerFairyData.cs
@@ -2,6 +2,7 @@
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
/** 玩家仙盟相关信息缓存数据 */
@@ -117,6 +118,11 @@
        return member;
    }
    public List<int> GetMemberIDList()
    {
        return memberDic.Keys.ToList();
    }
    #region 仙盟权力开启条件
    public bool IsCanFunc(LimitFunc funcType)
Main/System/Redpoint/MainRedDot.cs
@@ -118,6 +118,7 @@
    Redpoint hallRedpoint = new Redpoint(MainGuildRedpoint, guildHallRedpointID);
    public const int donateRedpointID = 400;    //捐献
    public const int hawkerRedpointID = 401;    //行商(原珍宝阁)
    public const int bossTaofaRedpointID = 402;    //BOSS讨伐
    #endregion
Main/System/Tip/ConfirmCancel.cs
@@ -94,15 +94,21 @@
    //     }
    // }
    // public static void ShowRuneTowerPopConfirm(string title, string info, Action<bool> func)
    // {
    //     popConfirmTitle = title;
    //     popConfirmInfo = info;
    //     OnPopConfirmClickEvent = func;
    //     OnPopSingleConfirmEvent = null;
    //     IsSingleConfirm = false;
    //     UIManager.Instance.OpenWindow<RuneTowerConfirmWin>();
    // }
    public static int checkItemID;
    public static int checkItemCount;
    //使用道具的文字提示
    public static void ShowUseItemPopConfirm(string title, string info, int _itemID, int _cnt, Action<bool> func)
    {
        popConfirmTitle = title;
        popConfirmInfo = info;
        OnPopConfirmClickEvent = func;
        OnPopSingleConfirmEvent = null;
        IsSingleConfirm = false;
        checkItemID = _itemID;
        checkItemCount = _cnt;
        UIManager.Instance.OpenWindow<UseItemConfirmWin>();
    }
    // public static void CancelAuctionPopConfirm(string title, string info, Action<bool> func)
@@ -263,7 +269,7 @@
    public static List<Item> getItems { get; private set; }
    public static string replaceItemName;
    /// <summary>
    /// 多物品确认框
    /// 多物品展示确认框
    /// </summary>
    /// <param name="items"></param>
    /// <param name="tiltle"></param>
Main/System/Tip/UseItemConfirmWin.cs
New file
@@ -0,0 +1,89 @@
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Wednesday, November 29, 2017
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UseItemConfirmWin : UIBase
{
    [SerializeField] Button popConfirmBtn;
    [SerializeField] Button popCancelBtn;
    [SerializeField] RichText popConfirmInfo;
    [SerializeField] Text popConfirmTitle;
    [SerializeField] Text itemCount;
    [SerializeField] Image itemIcon;
    protected override void InitComponent()
    {
        base.InitComponent();
        popConfirmBtn.onClick.AddListener(OnPopConfirmOkBtn);
        popCancelBtn.onClick.AddListener(OnPopConfirmCancelBtn);
        btnClickEmptyCloseEvent = OnPopConfirmCancelExBtn;
    }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        popCancelBtn.SetActive(!ConfirmCancel.IsSingleConfirm);
        popConfirmTitle.text = ConfirmCancel.popConfirmTitle;
        popConfirmInfo.text = ConfirmCancel.popConfirmInfo;
        itemCount.text = UIHelper.ShowUseItem(PackType.Item, ConfirmCancel.checkItemID, ConfirmCancel.checkItemCount);
        itemIcon.SetItemSprite(ConfirmCancel.checkItemID);
    }
    protected override void OnOpen()
    {
        base.OnOpen();
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
    }
    protected override void OnClose()
    {
        base.OnClose();
    }
    void OnPopConfirmOkBtn()
    {
        CloseWindow();
        if (ConfirmCancel.OnPopConfirmClickEvent != null)
        {
            ConfirmCancel.OnPopConfirmClickEvent(true);
            return;
        }
        if (ConfirmCancel.OnPopSingleConfirmEvent != null)
        {
            ConfirmCancel.OnPopSingleConfirmEvent();
        }
    }
    void OnPopConfirmCancelBtn()
    {
        CloseWindow();
        if (ConfirmCancel.OnPopConfirmClickEvent != null)
        {
            ConfirmCancel.OnPopConfirmClickEvent(false);
        }
    }
    void OnPopConfirmCancelExBtn()
    {
        CloseWindow();
        if (ConfirmCancel.OnPopConfirmClickExEvent != null)
        {
            ConfirmCancel.OnPopConfirmClickExEvent(false);
        }
    }
}
Main/System/Tip/UseItemConfirmWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 24b7190e1ae8de34a9ebbdb6eefee55e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Utility/EnumHelper.cs
@@ -842,6 +842,7 @@
    HeroAwake = 38, //武将觉醒
    BattlePass = 40, //基金(战令)
    LLMJ = 41,  //历练秘笈
    GuildBoss = 43, //公会讨伐
    OSMainLevl = 45, //开服关卡榜活动
    OSHeroCall = 46, //开服武将召唤榜活动
    OSGala = 47, //开服盛典活动
Main/Utility/TimeUtility.cs
@@ -471,6 +471,12 @@
        return new DateTime(now.Year, now.Month, now.Day);
    }
    public static int GetTodayStartTick()
    {
        var now = ServerNow;
        return (int)(GetTodayStartTime() - OriginalTime).TotalSeconds;
    }
    /// <summary>
    /// 获取当天的24点时间
    /// </summary>