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>