From 7ae0227d6a43261faf38c5e74b960855fde25f54 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 28 八月 2018 14:29:30 +0800
Subject: [PATCH] 2960 抢Boss活动(提交封包代码)
---
Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs | 7 +-
System/FairyAu/FairyGrabBossBehaviour.cs | 40 +++++++++++++
Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs | 6 -
System/FindPrecious/LootPreciousFrameWin.cs | 9 ---
System/FairyAu/FairyGrabBossWin.cs | 33 +++++++++++
System/FairyAu/FairyGrabBossModel.cs | 79 ++++++++++++++++++++++++++
6 files changed, 157 insertions(+), 17 deletions(-)
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs b/Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs
index 7df6801..3771ed4 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs
@@ -6,14 +6,15 @@
using System;
using System.Collections;
using System.Collections.Generic;
-
-public class DTCAC10_tagGCAllFamilyBossHurtInfoList : DtcBasic {
+using Snxxz.UI;
+public class DTCAC10_tagGCAllFamilyBossHurtInfoList : DtcBasic
+{
public override void Done(GameNetPackBasic vNetPack)
{
base.Done(vNetPack);
var package = vNetPack as HAC10_tagGCAllFamilyBossHurtInfoList;
-
+ ModelCenter.Instance.GetModel<FairyGrabBossModel>().UpdateBossProgress(package);
}
}
diff --git a/Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs b/Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs
index 86154cd..3c59ee3 100644
--- a/Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs
+++ b/Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs
@@ -4,8 +4,7 @@
// AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList
public class HAC10_tagGCAllFamilyBossHurtInfoList : GameNetPackBasic {
- public uint NPCID;
- public ushort NPCCount; // 个数
+ public byte NPCCount; // 个数
public tagGCFamilyBossHurtInfo[] NPCHurtInfo; // NPC伤血信息列表
public HAC10_tagGCAllFamilyBossHurtInfoList () {
@@ -13,8 +12,7 @@
}
public override void ReadFromBytes (byte[] vBytes) {
- TransBytes (out NPCID, vBytes, NetDataType.DWORD);
- TransBytes (out NPCCount, vBytes, NetDataType.WORD);
+ TransBytes (out NPCCount, vBytes, NetDataType.BYTE);
NPCHurtInfo = new tagGCFamilyBossHurtInfo[NPCCount];
for (int i = 0; i < NPCCount; i ++) {
NPCHurtInfo[i] = new tagGCFamilyBossHurtInfo();
diff --git a/System/FairyAu/FairyGrabBossBehaviour.cs b/System/FairyAu/FairyGrabBossBehaviour.cs
index 48a2c5b..cf26f8b 100644
--- a/System/FairyAu/FairyGrabBossBehaviour.cs
+++ b/System/FairyAu/FairyGrabBossBehaviour.cs
@@ -1,4 +1,5 @@
-锘縰sing System.Collections;
+锘縰sing System;
+using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
@@ -11,6 +12,8 @@
[SerializeField] AutoSelectCyclicScroll m_Scroll;
[SerializeField] RectTransform m_CenterSign;
[SerializeField] RectTransform m_ContainerSelect;
+ [SerializeField] RectTransform m_ContainerKilling;
+ [SerializeField] RectTransform m_ContainerKilled;
[SerializeField] Image m_BossPortrait;
[SerializeField] Text m_MapName;
[SerializeField] Text m_BossName;
@@ -36,16 +39,23 @@
bossId = (int)_data;
DrawBossBaseInfo();
+ DisplayProgress();
OnSelected(model.selectBoss);
model.bossSelectedEvent -= OnSelected;
model.bossSelectedEvent += OnSelected;
+ model.bossProgressUpdate -= BossProgressUpdate;
+ model.bossProgressUpdate += BossProgressUpdate;
+ model.stateUpdate -= StateUpdate;
+ model.stateUpdate += StateUpdate;
}
public override void Dispose()
{
base.Dispose();
model.bossSelectedEvent -= OnSelected;
+ model.bossProgressUpdate -= BossProgressUpdate;
+ model.stateUpdate -= StateUpdate;
}
private void OnSelected(int _bossId)
@@ -64,6 +74,34 @@
m_BossName.text = npcConfig.charName;
}
+ private void BossProgressUpdate(int _bossId)
+ {
+ if (_bossId == bossId)
+ {
+ DisplayProgress();
+ }
+ }
+
+ private void StateUpdate()
+ {
+ DisplayProgress();
+ }
+
+ void DisplayProgress()
+ {
+ FairyGrabBossModel.BossProgressInfo bossProgress;
+ bool killed = false;
+ bool opened = model.IsOpen;
+ if (model.TryGetBossProgress(bossId, out bossProgress))
+ {
+ var progress = (float)bossProgress.currentHp / bossProgress.totalHp;
+ m_Progress.text = StringUtility.Contact((int)progress * 100, "%");
+ killed = (float)bossProgress.currentHp / bossProgress.totalHp >= 1;
+ }
+ m_ContainerKilled.gameObject.SetActive(killed && opened);
+ m_ContainerKilling.gameObject.SetActive(!killed && opened);
+ }
+
protected virtual void LateUpdate()
{
if (m_Scroll.autoSelectable && model.selectBoss != bossId && bossId > 0)
diff --git a/System/FairyAu/FairyGrabBossModel.cs b/System/FairyAu/FairyGrabBossModel.cs
index 314ff3e..69d9306 100644
--- a/System/FairyAu/FairyGrabBossModel.cs
+++ b/System/FairyAu/FairyGrabBossModel.cs
@@ -10,6 +10,7 @@
public List<int> bosses { get; private set; }
Dictionary<int, List<Item>> dropItemDict = new Dictionary<int, List<Item>>();
Dictionary<int, Dictionary<int, FairyGrabBossInfo>> fairyGrabBossDict = new Dictionary<int, Dictionary<int, FairyGrabBossInfo>>();
+ Dictionary<int, BossProgressInfo> bossProgressDict = new Dictionary<int, BossProgressInfo>();
public bool IsOpen
{
@@ -62,6 +63,7 @@
public event Action stateUpdate;
public event Action<int> bossSelectedEvent;
public event Action<int, int> bossHurtUpdate;
+ public event Action<int> bossProgressUpdate;
DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
@@ -70,6 +72,7 @@
ParseConfig();
GlobalTimeEvent.Instance.secondEvent += SecondEvent;
StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+ DailyQuestActionTimer.Instance.RefreshDailyQuestState += RefreshDailyQuestState;
}
public void OnBeforePlayerDataInitialize()
@@ -84,6 +87,9 @@
public override void UnInit()
{
+ GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
+ StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+ DailyQuestActionTimer.Instance.RefreshDailyQuestState -= RefreshDailyQuestState;
}
private void OnStageLoadFinish()
@@ -91,6 +97,14 @@
if (!(StageManager.Instance.CurrentStage is DungeonStage))
{
fairyGrabBossDict.Clear();
+ }
+ }
+
+ private void RefreshDailyQuestState()
+ {
+ if (stateUpdate != null)
+ {
+ stateUpdate();
}
}
@@ -162,6 +176,44 @@
GameNetSystem.Instance.SendInfo(pak);
}
+ public void UpdateBossProgress(HAC10_tagGCAllFamilyBossHurtInfoList package)
+ {
+ for (int i = 0; i < package.NPCCount; i++)
+ {
+ var sBossProgress = package.NPCHurtInfo[i];
+ var bossProgress = new BossProgressInfo()
+ {
+ NPCID = (int)sBossProgress.NPCID,
+ CurHP = (int)sBossProgress.CurHP,
+ CurHPEx = (int)sBossProgress.CurHPEx,
+ MaxHP = (int)sBossProgress.MaxHP,
+ MaxHPEx = (int)sBossProgress.MaxHPEx,
+ FamilyID = (int)sBossProgress.FamilyID,
+ FamilyName = UIHelper.ServerStringTrim(sBossProgress.FamilyName),
+ };
+ bossProgressDict[(int)package.NPCHurtInfo[i].NPCID] = bossProgress;
+ if (bossProgressUpdate != null)
+ {
+ bossProgressUpdate(bossProgress.NPCID);
+ }
+ }
+ }
+
+ public bool TryGetBossProgress(int bossId,out BossProgressInfo bossProgressInfo)
+ {
+ return bossProgressDict.TryGetValue(bossId, out bossProgressInfo);
+ }
+
+ public bool TryGetBossHurt(int bossId, int queryType, out FairyGrabBossInfo fairyGrabBossInfo)
+ {
+ fairyGrabBossInfo = null;
+ if (fairyGrabBossDict.ContainsKey(bossId))
+ {
+ return fairyGrabBossDict[bossId].TryGetValue(queryType, out fairyGrabBossInfo);
+ }
+ return false;
+ }
+
private void SecondEvent()
{
if (!serverInited)
@@ -234,6 +286,33 @@
}
}
}
+
+ public struct BossProgressInfo
+ {
+ public int NPCID;
+ public int CurHP;
+ public int CurHPEx;
+ public int MaxHP;
+ public int MaxHPEx;
+ public int FamilyID;
+ public string FamilyName;
+
+ public long currentHp
+ {
+ get
+ {
+ return CurHP + (long)CurHPEx * Constants.ExpPointValue;
+ }
+ }
+
+ public long totalHp
+ {
+ get
+ {
+ return MaxHP + (long)MaxHPEx * Constants.ExpPointValue;
+ }
+ }
+ }
}
}
diff --git a/System/FairyAu/FairyGrabBossWin.cs b/System/FairyAu/FairyGrabBossWin.cs
index b75b005..7fe3c37 100644
--- a/System/FairyAu/FairyGrabBossWin.cs
+++ b/System/FairyAu/FairyGrabBossWin.cs
@@ -36,8 +36,11 @@
{
DisplaySurplusTime();
DisplayBossInfo();
+ DisplayHighestFairy();
GlobalTimeEvent.Instance.secondEvent += SecondEvent;
model.bossSelectedEvent += BossSelectedEvent;
+ model.bossProgressUpdate += BossProgressUpdate;
+ model.stateUpdate += StateUpdate;
}
protected override void OnActived()
@@ -54,6 +57,8 @@
{
GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
model.bossSelectedEvent -= BossSelectedEvent;
+ model.bossProgressUpdate -= BossProgressUpdate;
+ model.stateUpdate -= StateUpdate;
}
protected override void OnAfterClose()
@@ -96,6 +101,20 @@
}
}
+ void DisplayHighestFairy()
+ {
+ m_FairyName.text = string.Empty;
+ if (!model.IsOpen)
+ {
+ return;
+ }
+ FairyGrabBossModel.BossProgressInfo bossProgress;
+ if (model.TryGetBossProgress(model.selectBoss, out bossProgress))
+ {
+ m_FairyName.text = bossProgress.FamilyName;
+ }
+ }
+
int DefaultSelect()
{
return model.bosses[0];
@@ -130,7 +149,21 @@
private void BossSelectedEvent(int bossId)
{
DisplayBossInfo();
+ DisplayHighestFairy();
}
+
+ private void BossProgressUpdate(int bossId)
+ {
+ if (bossId == model.selectBoss)
+ {
+ DisplayHighestFairy();
+ }
+ }
+ private void StateUpdate()
+ {
+ DisplayHighestFairy();
+ }
+
}
}
diff --git a/System/FindPrecious/LootPreciousFrameWin.cs b/System/FindPrecious/LootPreciousFrameWin.cs
index a17e4b6..6ad84f7 100644
--- a/System/FindPrecious/LootPreciousFrameWin.cs
+++ b/System/FindPrecious/LootPreciousFrameWin.cs
@@ -40,8 +40,6 @@
protected override void OnPreOpen()
{
- fairyGrabBossModel.stateUpdate += FairyGrabBossUpdate;
- m_FairyGrabBoss.state = fairyGrabBossModel.IsOpen ? TitleBtnState.Normal : TitleBtnState.Locked;
}
protected override void OnAfterOpen()
@@ -50,8 +48,6 @@
protected override void OnPreClose()
{
- fairyGrabBossModel.stateUpdate -= FairyGrabBossUpdate;
-
CloseSubWindows();
if (!WindowJumpMgr.Instance.IsJumpState)
{
@@ -87,11 +83,6 @@
CloseSubWindows();
WindowCenter.Instance.Open<FairyGrabBossWin>();
functionOrder = m_FairyGrabBoss.order;
- }
-
- private void FairyGrabBossUpdate()
- {
- m_FairyGrabBoss.state = fairyGrabBossModel.IsOpen ? TitleBtnState.Normal : TitleBtnState.Locked;
}
private void CloseSubWindows()
--
Gitblit v1.8.0