Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -11,6 +11,8 @@ public static void Init() { // 登记相应的数据体及对应的数据转逻辑类 Register(typeof(HAC10_tagGCAllFamilyBossHurtInfoList), typeof(DTCAC10_tagGCAllFamilyBossHurtInfoList)); Register(typeof(HA715_tagMCFamilyBossHurtList), typeof(DTCA715_tagMCFamilyBossHurtList)); Register(typeof(HAB04_tagMCBossRebornInfo), typeof(DTCAB04_tagMCBossRebornInfo)); Register(typeof(HA40B_tagGCPlayerJoinFamilyWarInfo), typeof(DTCA40B_tagGCPlayerJoinFamilyWarInfo)); Register(typeof(HA319_tagMCPackDownloadRecord), typeof(DTCA319_tagMCPackDownloadRecord)); Core/GameEngine/Model/Config/FairyGrabBossConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, August 27, 2018 // [ Date ]: Tuesday, August 28, 2018 //-------------------------------------------------------- using UnityEngine; @@ -12,7 +12,8 @@ public partial class FairyGrabBossConfig : ConfigBase { public int NPCID { get ; private set ; } public string PortraitID { get ; private set; } public string PortraitID { get ; private set; } public string dropItems { get ; private set; } public override string getKey() { @@ -24,7 +25,9 @@ { NPCID=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; PortraitID = rawContents[1].Trim(); PortraitID = rawContents[1].Trim(); dropItems = rawContents[2].Trim(); } catch (Exception ex) { Core/GameEngine/Model/Config/FairyGrabBossConfig.cs.meta
@@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 353bb58b84bc9d74b87bcdbb10330f00 timeCreated: 1535375170 timeCreated: 1535422842 licenseType: Pro MonoImporter: serializedVersion: 2 Core/NetworkPackage/ClientPack/ClientToGameServer/CAC_Activity/CAC04_tagCGQueryAllFamilyBossHurt.cs
New file @@ -0,0 +1,16 @@ using UnityEngine; using System.Collections; // AC 04 查询仙盟抢Boss所有Boss当前进度 #tagCGQueryAllFamilyBossHurt public class CAC04_tagCGQueryAllFamilyBossHurt : GameNetPackBasic { public CAC04_tagCGQueryAllFamilyBossHurt () { combineCmd = (ushort)0x1801; _cmd = (ushort)0xAC04; } public override void WriteToBytes () { } } Core/NetworkPackage/ClientPack/ClientToGameServer/CAC_Activity/CAC04_tagCGQueryAllFamilyBossHurt.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 0830d890575ec164888e6bf61b29571c timeCreated: 1535428369 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA228_tagCMQueryFamilyBossHurt.cs
New file @@ -0,0 +1,22 @@ using UnityEngine; using System.Collections; // A2 28 查询仙盟抢Boss伤血列表 #tagCMQueryFamilyBossHurt public class CA228_tagCMQueryFamilyBossHurt : GameNetPackBasic { public uint ObjID; public uint NPCID; public byte QueryType; // 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血 public CA228_tagCMQueryFamilyBossHurt () { combineCmd = (ushort)0x03FE; _cmd = (ushort)0xA228; } public override void WriteToBytes () { WriteBytes (ObjID, NetDataType.DWORD); WriteBytes (NPCID, NetDataType.DWORD); WriteBytes (QueryType, NetDataType.BYTE); } } Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA228_tagCMQueryFamilyBossHurt.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 983c43e61a332a34298145db9e1355d6 timeCreated: 1535424857 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA715_tagMCFamilyBossHurtList.cs
New file @@ -0,0 +1,23 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, August 28, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using Snxxz.UI; public class DTCA715_tagMCFamilyBossHurtList : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); var package = vNetPack as HA715_tagMCFamilyBossHurtList; ModelCenter.Instance.GetModel<FairyGrabBossModel>().UpdateBossHurt(package); } } Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA715_tagMCFamilyBossHurtList.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 6a28582703aa0f745a33db2218188e29 timeCreated: 1535424983 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs
New file @@ -0,0 +1,23 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, August 28, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; public class DTCAC10_tagGCAllFamilyBossHurtInfoList : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); var package = vNetPack as HAC10_tagGCAllFamilyBossHurtInfoList; } } Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 071c5cebd0dfade468e752ff2c301cdd timeCreated: 1535428774 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/ServerPack/HA7_Interaction/HA715_tagMCFamilyBossHurtList.cs
New file @@ -0,0 +1,47 @@ using UnityEngine; using System.Collections; // A7 15 通知仙盟抢Boss伤血信息 #tagMCFamilyBossHurtList public class HA715_tagMCFamilyBossHurtList : GameNetPackBasic { public uint ObjID; public uint NPCID; public byte HurtType; // 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血 public byte IsSort; // 是否排序过的,一般boss被击杀后会统一同步一次排序过的最终结果,其他情况下客户端自己排序 public ushort HurtCount; // 伤血个数 public tagMCFamilyBossHurt[] HurtList; // 伤血列表 public HA715_tagMCFamilyBossHurtList () { _cmd = (ushort)0xA715; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out ObjID, vBytes, NetDataType.DWORD); TransBytes (out NPCID, vBytes, NetDataType.DWORD); TransBytes (out HurtType, vBytes, NetDataType.BYTE); TransBytes (out IsSort, vBytes, NetDataType.BYTE); TransBytes (out HurtCount, vBytes, NetDataType.WORD); HurtList = new tagMCFamilyBossHurt[HurtCount]; for (int i = 0; i < HurtCount; i ++) { HurtList[i] = new tagMCFamilyBossHurt(); TransBytes (out HurtList[i].FamilyID, vBytes, NetDataType.DWORD); TransBytes (out HurtList[i].HurtID, vBytes, NetDataType.DWORD); TransBytes (out HurtList[i].NameLen, vBytes, NetDataType.BYTE); TransBytes (out HurtList[i].HurtName, vBytes, NetDataType.Chars, HurtList[i].NameLen); TransBytes (out HurtList[i].HurtValue, vBytes, NetDataType.DWORD); TransBytes (out HurtList[i].HurtValueEx, vBytes, NetDataType.DWORD); TransBytes (out HurtList[i].InitTick, vBytes, NetDataType.DWORD); } } public struct tagMCFamilyBossHurt { public uint FamilyID; // 所属仙盟ID public uint HurtID; // 伤血的ID, 根据伤血类型表示不同的ID, 如仙盟ID或玩家ID public byte NameLen; public string HurtName; public uint HurtValue; // 累计伤血,求余1亿的值 public uint HurtValueEx; // 累计伤血,整除1亿的值 public uint InitTick; // 伤血初始tick,用于排序,先按伤血倒序排,再按tick正序排 } } Core/NetworkPackage/ServerPack/HA7_Interaction/HA715_tagMCFamilyBossHurtList.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: e0fd17399da94b049b20f72960faf7a8 timeCreated: 1535424939 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs
New file @@ -0,0 +1,43 @@ using UnityEngine; using System.Collections; // AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList public class HAC10_tagGCAllFamilyBossHurtInfoList : GameNetPackBasic { public uint NPCID; public ushort NPCCount; // 个数 public tagGCFamilyBossHurtInfo[] NPCHurtInfo; // NPC伤血信息列表 public HAC10_tagGCAllFamilyBossHurtInfoList () { _cmd = (ushort)0xAC10; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out NPCID, vBytes, NetDataType.DWORD); TransBytes (out NPCCount, vBytes, NetDataType.WORD); NPCHurtInfo = new tagGCFamilyBossHurtInfo[NPCCount]; for (int i = 0; i < NPCCount; i ++) { NPCHurtInfo[i] = new tagGCFamilyBossHurtInfo(); TransBytes (out NPCHurtInfo[i].NPCID, vBytes, NetDataType.DWORD); TransBytes (out NPCHurtInfo[i].CurHP, vBytes, NetDataType.DWORD); TransBytes (out NPCHurtInfo[i].CurHPEx, vBytes, NetDataType.DWORD); TransBytes (out NPCHurtInfo[i].MaxHP, vBytes, NetDataType.DWORD); TransBytes (out NPCHurtInfo[i].MaxHPEx, vBytes, NetDataType.DWORD); TransBytes (out NPCHurtInfo[i].FamilyID, vBytes, NetDataType.DWORD); TransBytes (out NPCHurtInfo[i].NameLen, vBytes, NetDataType.BYTE); TransBytes (out NPCHurtInfo[i].FamilyName, vBytes, NetDataType.Chars, NPCHurtInfo[i].NameLen); } } public struct tagGCFamilyBossHurtInfo { public uint NPCID; public uint CurHP; public uint CurHPEx; public uint MaxHP; public uint MaxHPEx; public uint FamilyID; // 最大实时伤血仙盟 public byte NameLen; public string FamilyName; } } Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: c11d8c087e7207547a6ed68826fc894b timeCreated: 1535428733 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/DailyQuest/DailyQuestModel.cs
@@ -206,6 +206,7 @@ case DailyQuestType.FairyLeague: case DailyQuestType.FairyFeast: case DailyQuestType.FairyTask: case DailyQuestType.FairyGrabBoss: var _dailyConfig = Config.Instance.Get<DailyQuestConfig>(_dailyQuestId); return PlayerDatas.Instance.baseData.Family > 0 && (_dailyConfig.UnLockFuncID == 0 || FuncOpen.Instance.IsFuncOpen(_dailyConfig.UnLockFuncID)); @@ -806,6 +807,7 @@ case DailyQuestType.HeavenBattle: case DailyQuestType.FairyFeast: case DailyQuestType.FairyLeague: case DailyQuestType.FairyGrabBoss: return DailyQuestState.Normal; case DailyQuestType.GuardSky: if (!fairyModel.completeGuardSky) System/FairyAu/FairyGrabBossModel.cs
@@ -5,15 +5,18 @@ using UnityEngine; namespace Snxxz.UI { public class FairyGrabBossModel : Model public class FairyGrabBossModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { 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>>(); public bool IsOpen { get { return true; return dailyQuestModel.GetQuestState((int)DailyQuestType.FairyGrabBoss) == DailyQuestModel.DailyQuestState.Normal; } } int m_SelectBoss = 0; @@ -32,17 +35,63 @@ } } } public int surplusSeconds { get { DailyQuestOpenTime openTime; if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.FairyGrabBoss, out openTime)) { if (openTime.InOpenTime() && openTime.IsValidServerOpenTime()) { HourMinute hourMinute; if (openTime.TryGetTodayNearestOpenTime(out hourMinute)) { DateTime end = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day, hourMinute.hourEnd, hourMinute.minuteEnd, 0); return (int)(end - TimeUtility.ServerNow).TotalSeconds; } } } return 0; } } private bool serverInited = false; public event Action stateUpdate; public event Action<int> bossSelectedEvent; public event Action<int, int> bossHurtUpdate; DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } } public override void Init() { ParseConfig(); GlobalTimeEvent.Instance.secondEvent += SecondEvent; StageManager.Instance.onStageLoadFinish += OnStageLoadFinish; } public void OnBeforePlayerDataInitialize() { serverInited = false; } public void OnPlayerLoginOk() { serverInited = true; } public override void UnInit() { } private void OnStageLoadFinish() { if (!(StageManager.Instance.CurrentStage is DungeonStage)) { fairyGrabBossDict.Clear(); } } void ParseConfig() @@ -52,6 +101,137 @@ for (int i = 0; i < configs.Count; i++) { bosses.Add(configs[i].NPCID); var itemArray = LitJson.JsonMapper.ToObject<int[][]>(configs[i].dropItems); List<Item> list = new List<Item>(); for (int k = 0; k < itemArray.Length; k++) { Item item = new Item() { id = itemArray[k][0], count = itemArray[k][1], bind = itemArray[k][2] == 1, }; list.Add(item); } dropItemDict.Add(configs[i].NPCID, list); } } public bool TryGetDropItems(int bossId, out List<Item> dropItems) { return dropItemDict.TryGetValue(bossId, out dropItems); } /// <summary> /// 查询Boss伤害信息 /// </summary> /// <param name="bossId"></param> /// <param name="queryType">0-实时仙盟伤血 1-历史仙盟伤血 2-实时玩家伤血 3-历史玩家伤血</param> public void QueryGrabBossHurt(int bossId, int queryType) { CA228_tagCMQueryFamilyBossHurt pak = new CA228_tagCMQueryFamilyBossHurt(); pak.NPCID = (uint)bossId; pak.QueryType = (byte)queryType; GameNetSystem.Instance.SendInfo(pak); } public void UpdateBossHurt(HA715_tagMCFamilyBossHurtList package) { Dictionary<int, FairyGrabBossInfo> dict = null; FairyGrabBossInfo fairyGrabBossInfo = null; if (!fairyGrabBossDict.TryGetValue((int)package.NPCID, out dict)) { dict = new Dictionary<int, FairyGrabBossInfo>(); fairyGrabBossDict.Add((int)package.NPCID, dict); } if (!dict.TryGetValue(package.HurtType, out fairyGrabBossInfo)) { fairyGrabBossInfo = new FairyGrabBossInfo(); dict.Add(package.HurtType, fairyGrabBossInfo); } fairyGrabBossInfo.SetData(package); if (bossHurtUpdate != null) { bossHurtUpdate((int)package.NPCID, package.HurtType); } } public void QueryGrabBossProgress() { CAC04_tagCGQueryAllFamilyBossHurt pak = new CAC04_tagCGQueryAllFamilyBossHurt(); GameNetSystem.Instance.SendInfo(pak); } private void SecondEvent() { if (!serverInited) { return; } } public class FairyGrabBossInfo { public int npcId { get; private set; } public int objId { get; private set; } public int hurtType { get; private set; } public int IsSort { get; private set; } public List<BossHurtInfo> hurtInfos = new List<BossHurtInfo>(); public void SetData(HA715_tagMCFamilyBossHurtList package) { npcId = (int)package.NPCID; objId = (int)package.ObjID; hurtType = package.HurtType; IsSort = package.IsSort; hurtInfos.Clear(); for (int i = 0; i < package.HurtCount; i++) { var sHurt = package.HurtList[i]; var hurtInfo = new BossHurtInfo() { FamilyID = (int)sHurt.FamilyID, HurtID = (int)sHurt.HurtID, HurtName = UIHelper.ServerStringTrim(sHurt.HurtName), HurtValue = (int)sHurt.HurtValue, HurtValueEx = (int)sHurt.HurtValueEx, InitTick = sHurt.InitTick, }; hurtInfos.Add(hurtInfo); } if (IsSort != 1) { hurtInfos.Sort(Compare); } } int Compare(BossHurtInfo x, BossHurtInfo y) { if (x.totalHurt != y.totalHurt) { return -x.totalHurt.CompareTo(y.totalHurt); } return x.InitTick.CompareTo(y.InitTick); } } public struct BossHurtInfo { public int FamilyID; public int HurtID; // 伤血的ID, 根据伤血类型表示不同的ID, 如仙盟ID或玩家ID public string HurtName; public int HurtValue; // 累计伤血,求余1亿的值 public int HurtValueEx; // 累计伤血,整除1亿的值 public uint InitTick; // 伤血初始tick,用于排序,先按伤血倒序排,再按tick正序排 public long totalHurt { get { return HurtValue + (long)HurtValueEx * Constants.ExpPointValue; } } } } System/FairyAu/FairyGrabBossWin.cs
@@ -14,6 +14,11 @@ public class FairyGrabBossWin : Window { [SerializeField] CyclicScroll m_Bosses; [SerializeField] Text m_FairyName; [SerializeField] ItemCell[] m_DropItems; [SerializeField] Button m_KillRecord; [SerializeField] Button m_Goto; [SerializeField] Text m_SurplusTime; FairyGrabBossModel model { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } } #region Built-in @@ -23,10 +28,16 @@ protected override void AddListeners() { m_KillRecord.onClick.AddListener(KillRecord); m_Goto.onClick.AddListener(Goto); } protected override void OnPreOpen() { DisplaySurplusTime(); DisplayBossInfo(); GlobalTimeEvent.Instance.secondEvent += SecondEvent; model.bossSelectedEvent += BossSelectedEvent; } protected override void OnActived() @@ -41,6 +52,8 @@ protected override void OnPreClose() { GlobalTimeEvent.Instance.secondEvent -= SecondEvent; model.bossSelectedEvent -= BossSelectedEvent; } protected override void OnAfterClose() @@ -57,10 +70,67 @@ m_Bosses.MoveToCenter(bosses.IndexOf(model.selectBoss)); } void DisplayBossInfo() { List<Item> dropItems; model.TryGetDropItems(model.selectBoss, out dropItems); for (int i = 0; i < m_DropItems.Length; i++) { m_DropItems[i].cellBtn.RemoveAllListeners(); if (dropItems != null && i < dropItems.Count) { m_DropItems[i].gameObject.SetActive(true); var item = dropItems[i]; ItemCellModel itemCellModel = new ItemCellModel(item.id, true, (ulong)item.count, item.bind ? 1 : 0); m_DropItems[i].Init(itemCellModel); m_DropItems[i].cellBtn.AddListener(() => { ItemAttrData itemAttrData = new ItemAttrData(item.id, true, (ulong)item.count, -1, item.bind ? 1 : 0); ModelCenter.Instance.GetModel<ItemTipsModel>().SetItemTipsModel(itemAttrData); }); } else { m_DropItems[i].gameObject.SetActive(false); } } } int DefaultSelect() { return model.bosses[0]; } void DisplaySurplusTime() { var seconds = model.surplusSeconds; if (seconds > 0) { m_SurplusTime.text = TimeUtility.SecondsToDHMSCHS(seconds); } else { m_SurplusTime.text = Language.Get("ActivityEnd"); } } private void Goto() { } private void KillRecord() { } private void SecondEvent() { DisplaySurplusTime(); } private void BossSelectedEvent(int bossId) { DisplayBossInfo(); } } }