Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -25,6 +25,7 @@ public static void Init() { // 登记相应的数据体及对应的数据转逻辑类 Register(typeof(HB212_tagMCZhuXianBossCnt), typeof(DTCB212_tagMCZhuXianBossCnt)); Register(typeof(H0208_tagTalkCountry), typeof(DTC0208_tagTalkCountry)); Register(typeof(HB102_tagMCClothesCoatSkinState), typeof(DTCB102_tagMCClothesCoatSkinState)); Register(typeof(HA112_tagMCDBPlayer), typeof(DTCA112_tagMCDBPlayer)); Core/GameEngine/Model/Config/JadeDynastyBossConfig.cs
New file @@ -0,0 +1,56 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, January 18, 2019 //-------------------------------------------------------- using UnityEngine; using System; namespace TableConfig { public partial class JadeDynastyBossConfig : ConfigBase { public int NPCID { get ; private set ; } public int LineID { get ; private set ; } public int Time { get ; private set ; } public int RealmLV { get ; private set ; } public int ZhuXianScore { get ; private set ; } public string dropItems { get ; private set; } public string PortraitID { get ; private set; } public override string getKey() { return NPCID.ToString(); } public override void Parse() { try { NPCID=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; LineID=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; Time=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0; RealmLV=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0; ZhuXianScore=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0; dropItems = rawContents[5].Trim(); PortraitID = rawContents[6].Trim(); } catch (Exception ex) { DebugEx.Log(ex); } } } } Core/GameEngine/Model/Config/JadeDynastyBossConfig.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: bc9f70989c6d3344aad5bd0dbda7bc2b timeCreated: 1547804881 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/GameEngine/Model/ConfigManager.cs
@@ -225,6 +225,7 @@ AddAsyncTask<FashionDressConfig>(); AddAsyncTask<WeekPartyPointConfig>(); AddAsyncTask<SceneReplaceConfig>(); AddAsyncTask<JadeDynastyBossConfig>(); while (!AllCompleted()) { Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA007_tagGCFBLinePlayerCnt.cs
@@ -1,25 +1,26 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, January 08, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using Snxxz.UI; public class DTCA007_tagGCFBLinePlayerCnt : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); var package = vNetPack as HA007_tagGCFBLinePlayerCnt; ModelCenter.Instance.GetModel<MapModel>().UpdateDungeonMapLines(package); } } //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, January 08, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using Snxxz.UI; public class DTCA007_tagGCFBLinePlayerCnt : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); var package = vNetPack as HA007_tagGCFBLinePlayerCnt; ModelCenter.Instance.GetModel<MapModel>().UpdateDungeonMapLines(package); ModelCenter.Instance.GetModel<JadeDynastyBossModel>().OnReceivePackage(package); } } Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB212_tagMCZhuXianBossCnt.cs
New file @@ -0,0 +1,25 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, January 21, 2019 //-------------------------------------------------------- using Snxxz.UI; using System; using System.Collections; using System.Collections.Generic; public class DTCB212_tagMCZhuXianBossCnt : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); var package = vNetPack as HB212_tagMCZhuXianBossCnt; ModelCenter.Instance.GetModel<JadeDynastyBossModel>().OnReceivePackage(package); } } Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB212_tagMCZhuXianBossCnt.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 387e6e44272f55646a66a4613419d3a6 timeCreated: 1548040998 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/ServerPack/HA0_Sys/HA007_tagGCFBLinePlayerCnt.cs
@@ -1,36 +1,35 @@ using UnityEngine; using System.Collections; // A0 07 副本地图功能线路人数 #tagGCFBLinePlayerCnt public class HA007_tagGCFBLinePlayerCnt : GameNetPackBasic { public uint MapID; // 地图ID public byte Count; public tagGCFBLineInfo[] FBLineInfoList = null; public HA007_tagGCFBLinePlayerCnt() { _cmd = (ushort)0xA007; } public override void ReadFromBytes(byte[] vBytes) { TransBytes(out MapID, vBytes, NetDataType.DWORD); TransBytes(out Count, vBytes, NetDataType.BYTE); FBLineInfoList = new tagGCFBLineInfo[Count]; for (int i = 0; i < Count; i++) { FBLineInfoList[i] = new tagGCFBLineInfo(); TransBytes(out FBLineInfoList[i].FBLineID, vBytes, NetDataType.BYTE); TransBytes(out FBLineInfoList[i].PlayerCnt, vBytes, NetDataType.WORD); } } public struct tagGCFBLineInfo { public byte FBLineID; // 功能线路ID public ushort PlayerCnt; // 线路当前玩家数 } } using UnityEngine; using System.Collections; // A0 07 副本地图功能线路人数 #tagGCFBLinePlayerCnt public class HA007_tagGCFBLinePlayerCnt : GameNetPackBasic { public uint MapID; // 地图ID public byte Count; public tagGCFBLineInfo[] FBLineInfoList; public HA007_tagGCFBLinePlayerCnt () { _cmd = (ushort)0xA007; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out MapID, vBytes, NetDataType.DWORD); TransBytes (out Count, vBytes, NetDataType.BYTE); FBLineInfoList = new tagGCFBLineInfo[Count]; for (int i = 0; i < Count; i ++) { FBLineInfoList[i] = new tagGCFBLineInfo(); TransBytes (out FBLineInfoList[i].FBLineID, vBytes, NetDataType.BYTE); TransBytes (out FBLineInfoList[i].PlayerCnt, vBytes, NetDataType.WORD); TransBytes (out FBLineInfoList[i].ExtraStrLen, vBytes, NetDataType.WORD); TransBytes (out FBLineInfoList[i].ExtraStr, vBytes, NetDataType.Chars, FBLineInfoList[i].ExtraStrLen); } } public struct tagGCFBLineInfo { public byte FBLineID; // 功能线路ID public ushort PlayerCnt; // 线路当前玩家数 public ushort ExtraStrLen; // 长度 public string ExtraStr; // 额外信息 } } Core/NetworkPackage/ServerPack/HB2_ActionMap/HB212_tagMCZhuXianBossCnt.cs
New file @@ -0,0 +1,17 @@ using UnityEngine; using System.Collections; // B2 12 诛仙BOSS协助次数 #tagMCZhuXianBossCnt public class HB212_tagMCZhuXianBossCnt : GameNetPackBasic { public byte Cnt; // 剩余可协助次数 public HB212_tagMCZhuXianBossCnt () { _cmd = (ushort)0xB212; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out Cnt, vBytes, NetDataType.BYTE); } } Core/NetworkPackage/ServerPack/HB2_ActionMap/HB212_tagMCZhuXianBossCnt.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: f511f09c68c0ae345a0208282471b83e timeCreated: 1548040944 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/DailyQuest/DailyQuestWin.cs
@@ -315,6 +315,10 @@ WindowCenter.Instance.CloseImmediately<DailyQuestWin>(); WindowCenter.Instance.Open<CrossServerWin>(); break; case DailyQuestType.JadeDynastyBoss: WindowCenter.Instance.CloseImmediately<DailyQuestWin>(); WindowCenter.Instance.Open<LootPreciousFrameWin>(false, 3); break; default: CSharpCallLua.GotoLuaDailyQuest(_id); break; System/Dungeon/DungeonBuyTimesWin.cs
@@ -188,6 +188,24 @@ return false; } } else if (JadeDynastyBossModel.JADEDYNASTY_MAP == model.currentDungeon.mapId) { var _totalTimes = model.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP); var _enterTimes = model.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP); var jadeDynastyBossModel = ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); if ((_totalTimes - _enterTimes) >= jadeDynastyBossModel.challengeLimitCount) { MessageWin.Inst.ShowFixedTip(Language.Get("DemonJar18")); return false; } var mapId = PlayerDatas.Instance.baseData.MapID; var dataMapId = model.GetDataMapIdByMapId(mapId); if (dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP) { SysNotifyMgr.Instance.ShowTip("JadeDynastyBossBuyTimesError"); return false; } } return true; } System/Dungeon/DungeonFightWin.cs
@@ -106,6 +106,9 @@ case GatherSoulDungeonModel.DUNGEON_MAPID: m_GatherSoulDungeonBehaviour.Display(this); break; case JadeDynastyBossModel.JADEDYNASTY_MAP: m_Inspire.gameObject.SetActive(true); break; default: break; } System/Dungeon/DungeonInspireBehaviour.cs
@@ -53,7 +53,8 @@ } switch (mapId) { case 52010: case DemonJarModel.DEMONJAR_MAPID: case JadeDynastyBossModel.JADEDYNASTY_MAP: m_Icon.SetSprite("W_XYGuwu_a2"); break; default: @@ -71,7 +72,7 @@ && level < model.GetInspireMaxCount(mapId); if (m_InspireProgress != null) { m_InspireProgress.gameObject.SetActive(PlayerDatas.Instance.baseData.MapID == DemonJarModel.DEMONJAR_MAPID); m_InspireProgress.gameObject.SetActive(IsRequireDisplayProgress()); m_InspireProgress.text = StringUtility.Contact(level * model.GetDungeonInspireUpper(mapId), "%"); } if (!m_Waggle) @@ -103,6 +104,12 @@ } } private bool IsRequireDisplayProgress() { return PlayerDatas.Instance.baseData.MapID == DemonJarModel.DEMONJAR_MAPID || PlayerDatas.Instance.baseData.MapID == JadeDynastyBossModel.JADEDYNASTY_MAP; } private void ResetTween() { m_Time = 0; System/Dungeon/DungeonModel.cs
@@ -840,6 +840,12 @@ WindowCenter.Instance.Open<DemonJarDamageRankWin>(); } break; case JadeDynastyBossModel.JADEDYNASTY_MAP: if (!WindowCenter.Instance.IsOpen<JadeDynastyDamageRankWin>()) { WindowCenter.Instance.Open<JadeDynastyDamageRankWin>(); } break; case TreasureModel.TREASURE_MAPID: break; case HeavenBattleModel.HEAVEBATTLE_MAPID: @@ -900,6 +906,12 @@ if (!WindowCenter.Instance.IsOpen<DemonJarDamageRankWin>()) { WindowCenter.Instance.Open<DemonJarDamageRankWin>(); } break; case JadeDynastyBossModel.JADEDYNASTY_MAP: if (!WindowCenter.Instance.IsOpen<JadeDynastyDamageRankWin>()) { WindowCenter.Instance.Open<JadeDynastyDamageRankWin>(); } break; } @@ -990,6 +1002,9 @@ demonJarModel.autoChallengeBoss = 0; } break; case JadeDynastyBossModel.JADEDYNASTY_MAP: WindowCenter.Instance.Open<JadeDynastyBossVictoryWin>(); break; case FairyLeagueModel.FAIRY_LEAGUE_DUNGEON: case 31160: break; System/Dungeon/DungeonRankBehaviour.cs
@@ -40,10 +40,11 @@ { case 31170: case DemonJarModel.DEMONJAR_MAPID: case JadeDynastyBossModel.JADEDYNASTY_MAP: { int i = 0; if (model.mission.hurtInfo != null && model.mission.hurtInfo.Length > 0) { int i = 0; for (i = 0; i < model.mission.hurtInfo.Length; i++) { var rank = model.mission.hurtInfo[i].rank; @@ -61,12 +62,12 @@ SetMineInfo(rank, model.mission.hurtInfo[i].totalHurt); } } while (i < playerNameTexts.Count) { playerNameTexts[i].text = string.Empty; valueTexts[i].text = string.Empty; i++; } } while (i < playerNameTexts.Count) { playerNameTexts[i].text = string.Empty; valueTexts[i].text = string.Empty; i++; } } break; System/Dungeon/TargetBriefInfoWin.cs
@@ -34,7 +34,8 @@ var mapId = PlayerDatas.Instance.baseData.MapID; var dataMapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDataMapIdByMapId(mapId); if (dataMapId == DemonJarModel.DEMONJAR_MAPID) if (dataMapId == DemonJarModel.DEMONJAR_MAPID || dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP) { if (_show) { @@ -77,7 +78,8 @@ var mapId = PlayerDatas.Instance.baseData.MapID; var dataMapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDataMapIdByMapId(mapId); if (dataMapId == DemonJarModel.DEMONJAR_MAPID) if (dataMapId == DemonJarModel.DEMONJAR_MAPID || dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP) { DemonJarBossLifeBarWin win; if (!WindowCenter.Instance.IsOpen<DemonJarBossLifeBarWin>()) System/FindPrecious/FindPreciousBossRebornBehaviour.cs
@@ -130,6 +130,9 @@ case FindPreciousType.CrossServerBoss: GotoKillCrossServerBoss(bossId); break; case FindPreciousType.JadeDynastyBoss: GotoKillStrangleGodBoss(bossId); break; } ReportConfirmBossRebornNotify(); @@ -334,6 +337,24 @@ } } private void GotoKillStrangleGodBoss(int _bossId) { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = Config.Instance.Get<MapConfig>(mapId); if (mapConfig.MapFBType == (int)MapType.OpenCountry) { WindowCenter.Instance.Close<MainInterfaceWin>(); var jadeDynastyBossModel = ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); jadeDynastyBossModel.assginSelectBossId = _bossId; WindowCenter.Instance.Open<LootPreciousFrameWin>(false, 3); } else { SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); } } private void EnterBossHome(int _floor, int _bossId) { var error = 0; System/FindPrecious/FindPreciousModel.cs
@@ -56,6 +56,7 @@ BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel<BossHomeModel>(); } } PersonalBossModel personalBossModel { get { return ModelCenter.Instance.GetModel<PersonalBossModel>(); } } DogzDungeonModel dogzDungeonModel { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } } JadeDynastyBossModel jadeDynastyBossModel { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } } public override void Init() { @@ -431,11 +432,13 @@ } if (_redpointId == DemonJarModel.DEMONJAR_REDPOINTID || _redpointId == DogzDungeonModel.DOGZDUNGEON_REDPOINT) _redpointId == DogzDungeonModel.DOGZDUNGEON_REDPOINT || _redpointId == JadeDynastyBossModel.JADEDYNASTY_REDPOINTID) { var demonJarRedpointCount = demonJarModel.redpoint.count; var dogzDungeonRedpointCount = dogzDungeonModel.redpoint.count; var totalCount = demonJarRedpointCount + dogzDungeonRedpointCount; var jadeDynastyBossRedpointCount = jadeDynastyBossModel.redpoint.count; var totalCount = demonJarRedpointCount + dogzDungeonRedpointCount + jadeDynastyBossRedpointCount; lootPreciousRedpoint.count = totalCount; lootPreciousRedpoint.state = totalCount > 0 ? RedPointState.Quantity : RedPointState.None; @@ -472,7 +475,10 @@ { return FindPreciousType.CrossServerBoss; } else if (jadeDynastyBossModel.IsJadeDynastyBoss(_bossId)) { return FindPreciousType.JadeDynastyBoss; } return FindPreciousType.None; } System/FindPrecious/LootPreciousFrameWin.cs
@@ -17,6 +17,7 @@ [SerializeField] FunctionButton m_DemonJar; [SerializeField] FunctionButton m_FairyGrabBoss; [SerializeField] FunctionButton m_DogzDungeon; [SerializeField] FunctionButton m_JadeDynastyBoss; [SerializeField] Button m_Left; [SerializeField] Button m_Right; @@ -32,11 +33,12 @@ m_DemonJar.AddListener(ShowDemonJar); m_DogzDungeon.AddListener(ShowDogzDungeon); m_FairyGrabBoss.AddListener(FairyGrabBoss); m_JadeDynastyBoss.AddListener(JadeDynastyBoss); m_Left.AddListener(ShowLastFunction); m_Right.AddListener(ShowNextFunction); m_Close.AddListener(CloseClick); } } protected override void OnPreOpen() { } @@ -91,6 +93,13 @@ functionOrder = m_DogzDungeon.order; } private void JadeDynastyBoss() { CloseSubWindows(); WindowCenter.Instance.Open<JadeDynastyBossWin>(); functionOrder = m_JadeDynastyBoss.order; } private void CloseSubWindows() { var children = WindowConfig.Get().FindChildWindows("LootPreciousFrameWin"); System/JadeDynastyBoss.meta
New file @@ -0,0 +1,9 @@ fileFormatVersion: 2 guid: be9e87f41339d644c98549ba020a54a0 folderAsset: yes timeCreated: 1547717228 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: System/JadeDynastyBoss/JadeDynastyBossBehaviour.cs
New file @@ -0,0 +1,177 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { public class JadeDynastyBossBehaviour : FindPreciousBossBriefInfoBehaviour { [SerializeField] Transform m_ContainerChallengeable; [SerializeField] Transform m_ContainerUnChanllgeable; [SerializeField] Text m_ChallengeCondition; [SerializeField] Transform m_ContainerAttention; [SerializeField] Text m_Participant; JadeDynastyBossModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } } public int bossNpcId { get; private set; } protected override int selectedBossId { get { return model.selectBossId; } set { model.selectBossId = value; } } protected override InteractorableState interactorableState { get { var selected = selectedBossId == bossId; var condition = 0; var dieOrLocked = !model.IsBossUnLocked(bossId, out condition) || !findPreciousModel.IsBossAlive(bossId); if (!dieOrLocked) { return selected ? InteractorableState.NormalSelected : InteractorableState.NormalUnSelected; } else { return selected ? InteractorableState.DieOrLockedSelected : InteractorableState.DieOrLockedUnSelected; } } set { base.interactorableState = value; } } protected override bool isRebornRightNow { get { var condition = 0; return model.IsBossUnLocked(bossId, out condition) && base.isRebornRightNow; } } protected override bool isUnLocked { get { var condition = 0; return model.IsBossUnLocked(bossId, out condition); } } public override void Display(object _data) { base.Display(_data); bossNpcId = (int)_data; DisplayBase(); UpdateBossRebornCoolDown(isUnLocked); UpdateBossPortrait(interactorableState); UpdateBossNameLevelFont(interactorableState); DisplayParticipant(); DisplayCondition(); DisplaySubscrib(); model.bossLineRefresh -= DisplayParticipant; model.bossLineRefresh += DisplayParticipant; model.selectBossRefresh -= SelectBossRefresh; model.selectBossRefresh += SelectBossRefresh; model.bossLineRefresh -= BossLineRefresh; model.bossLineRefresh += BossLineRefresh; } public override void Dispose() { base.Dispose(); model.bossLineRefresh -= DisplayParticipant; model.selectBossRefresh -= SelectBossRefresh; model.bossLineRefresh -= BossLineRefresh; } protected override void OnSubscribe(int _bossId) { base.OnSubscribe(_bossId); if (bossId != _bossId) { return; } DisplaySubscrib(); } protected override void OnBossInfoUpdate(int _bossId) { base.OnBossInfoUpdate(_bossId); var condition = 0; var unLocked = model.IsBossUnLocked(bossId, out condition); m_Participant.gameObject.SetActive(unLocked && findPreciousModel.IsBossAlive(bossId)); } private void BossLineRefresh() { DisplayParticipant(); } public void DisplayBase() { var config = Config.Instance.Get<NPCConfig>(bossNpcId); var jadeDynastyBossConfig = Config.Instance.Get<JadeDynastyBossConfig>(bossNpcId); DrawBossBaseInfo(jadeDynastyBossConfig.PortraitID, config.charName, config.NPCLV, config.ClientRealm); } private void DisplaySubscrib() { m_ContainerAttention.gameObject.SetActive(findPreciousModel.IsBossSubscribed(bossId)); } private void DisplayParticipant() { m_Participant.gameObject.SetActive(isUnLocked && findPreciousModel.IsBossAlive(bossId)); m_Participant.text = Language.Get("FindPrecious_8", model.GetParticipantCount(bossId)); } private void DisplayCondition() { m_ContainerUnChanllgeable.gameObject.SetActive(!isUnLocked); m_ContainerChallengeable.gameObject.SetActive(isUnLocked); var conditionCode = 0; JadeDynastyBossCondition condition; m_ChallengeCondition.text = string.Empty; if (!model.IsBossUnLocked(bossId, out conditionCode) && model.TryGetCondition(bossId, out condition)) { switch (conditionCode) { case 1: m_ChallengeCondition.text = Language.Get("JadeDynastyBossCondition1", condition.level); break; case 2: m_ChallengeCondition.text = Language.Get("JadeDynastyBossCondition2", UIHelper.GetRealmName(condition.realmLevel, true)); break; case 3: m_ChallengeCondition.text = Language.Get("JadeDynastyBossCondition3", UIHelper.ReplaceLargeNum(condition.score)); break; } } } private void SelectBossRefresh(int bossId) { UpdateBossNameLevelFont(interactorableState); } } } System/JadeDynastyBoss/JadeDynastyBossBehaviour.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 2702bea692bcf804bae79ec04595d208 timeCreated: 1547717475 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/JadeDynastyBoss/JadeDynastyBossKillRecord.cs
New file @@ -0,0 +1,21 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class JadeDynastyBossKillRecord : MonoBehaviour { [SerializeField] Text m_KillTime; [SerializeField] Text m_PlayerName; public void Display(DateTime time, string playerName) { m_KillTime.text = time.ToString("hh:mm:ss"); m_PlayerName.text = UIHelper.ServerStringTrim(playerName); } } } System/JadeDynastyBoss/JadeDynastyBossKillRecord.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: ee1187f4529637c48840fb84410ef1f7 timeCreated: 1547809917 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/JadeDynastyBoss/JadeDynastyBossModel.cs
New file @@ -0,0 +1,458 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using TableConfig; using System; namespace Snxxz.UI { public class JadeDynastyBossModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IAfterPlayerDataInitialize { List<JadeDynastyBossData> jadeDynastyBosses = new List<JadeDynastyBossData>(); Dictionary<int, JadeDynastyBossLine> jadeDynastyBossLineDict = new Dictionary<int, JadeDynastyBossLine>(); Dictionary<int, List<Item>> dropItemDict = new Dictionary<int, List<Item>>(); public const int JADEDYNASTY_MAP = 31380; public const int FUNCTIONID = 163; public const int JADEDYNASTY_REDPOINTID = 77003; public event Action<int> selectBossRefresh; public event Action bossLineRefresh; public event Action assistTimeRefresh; public event Action jadeDynastyScoreRefresh; public ulong jadeDynastyScore { get { ulong score = 0; SinglePackModel singlePackModel = packModel.GetSinglePackModel(PackType.rptJadeDynastyEquip); if (singlePackModel != null) { Dictionary<int, ItemModel> equipBodyDict = singlePackModel.GetPackModelIndexDict(); if (equipBodyDict != null && equipBodyDict.Count > 0) { foreach (var _equip in equipBodyDict.Values) { score += (ulong)_equip.equipScore; } } } return score; } } public int challengeLimitCount { get; private set; } public int challengeTimes { get; private set; } public int assistTimes { get; private set; } int m_SelectBossId = 0; public int selectBossId { get { return m_SelectBossId; } set { if (m_SelectBossId != value) { m_SelectBossId = value; if (selectBossRefresh != null) { selectBossRefresh(value); } } } } public int assginSelectBossId { get; set; } public readonly Redpoint redpoint = new Redpoint(FindPreciousModel.LOOTPRECIOUs_REDPOINTID, JADEDYNASTY_REDPOINTID); MapModel mapModel { get { return ModelCenter.Instance.GetModel<MapModel>(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } } PlayerPackModel packModel { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } } public override void Init() { ParseConfig(); dungeonModel.dungeonRecordChangeEvent += OnDungeonRecordUpdate; dungeonModel.updateDungeonBuyCnt += OnDungeonBuyCount; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; packModel.RefreshItemCountAct += RefreshItemCountAct; } public void OnBeforePlayerDataInitialize() { jadeDynastyBossLineDict.Clear(); challengeTimes = 0; assistTimes = 0; } public void OnAfterPlayerDataInitialize() { } public void OnPlayerLoginOk() { UpdateRedpoint(); } public override void UnInit() { dungeonModel.dungeonRecordChangeEvent -= OnDungeonRecordUpdate; dungeonModel.updateDungeonBuyCnt -= OnDungeonBuyCount; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; packModel.RefreshItemCountAct -= RefreshItemCountAct; } void ParseConfig() { { var configs = Config.Instance.GetAllValues<JadeDynastyBossConfig>(); foreach (var config in configs) { var dungeonId = dungeonModel.GetDungeonId(JADEDYNASTY_MAP, config.LineID); var dungeonConfig = Config.Instance.Get<DungeonConfig>(dungeonId); jadeDynastyBosses.Add(new JadeDynastyBossData() { bossNpcId = config.NPCID, lineId = config.LineID, challengeCondition = new JadeDynastyBossCondition() { level = dungeonConfig.LVLimitMin, realmLevel = config.RealmLV, score = config.ZhuXianScore, }, }); var itemArray = LitJson.JsonMapper.ToObject<int[][]>(config.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(config.NPCID, list); } jadeDynastyBosses.Sort(SortCompare); } { var config = Config.Instance.Get<FuncConfigConfig>("ZhuXianBossCntCfg"); challengeLimitCount = int.Parse(config.Numerical2); } } public bool IsJadeDynastyBoss(int bossNpcId) { var index = jadeDynastyBosses.FindIndex((x) => { return x.bossNpcId == bossNpcId; }); return index >= 0; } public bool IsBossUnLocked(int bossNpcId, out int condition) { condition = 0; var index = jadeDynastyBosses.FindIndex((x) => { return x.bossNpcId == bossNpcId; }); if (index != -1) { var challengeCondition = jadeDynastyBosses[index].challengeCondition; if (PlayerDatas.Instance.baseData.LV < challengeCondition.level) { condition = 1; return false; } if (PlayerDatas.Instance.baseData.realmLevel < challengeCondition.realmLevel) { condition = 2; return false; } if (jadeDynastyScore < (ulong)challengeCondition.score) { condition = 3; return false; } } return true; } public List<int> GetJadeDynastyBosses() { List<int> list = new List<int>(); foreach (var boss in jadeDynastyBosses) { list.Add(boss.bossNpcId); } return list; } public int GetParticipantCount(int bossId) { var index = jadeDynastyBosses.FindIndex((x) => { return x.bossNpcId == bossId; }); var lineId = -1; if (index != -1) { lineId = jadeDynastyBosses[index].lineId; } if (jadeDynastyBossLineDict.ContainsKey(lineId)) { return jadeDynastyBossLineDict[lineId].playerCount; } return 0; } public int GetLatestUnLockBoss() { if (FuncOpen.Instance.IsFuncOpen(FUNCTIONID)) { var latestBossId = jadeDynastyBosses[0].bossNpcId; foreach (var boss in jadeDynastyBosses) { var condition = 0; if (IsBossUnLocked(boss.bossNpcId, out condition)) { latestBossId = boss.bossNpcId; } } return latestBossId; } else { return jadeDynastyBosses[0].bossNpcId; } } public bool TryGetDropItems(int bossId, out List<Item> dropItems) { return dropItemDict.TryGetValue(bossId, out dropItems); } public bool TryGetCondition(int bossId, out JadeDynastyBossCondition condition) { var index = jadeDynastyBosses.FindIndex((x) => { return x.bossNpcId == bossId; }); condition = default(JadeDynastyBossCondition); if (index != -1) { condition = jadeDynastyBosses[index].challengeCondition; } return index != -1; } public bool TryGetBossLine(int bossId, out JadeDynastyBossLine mapLineState) { var index = jadeDynastyBosses.FindIndex((x) => { return x.bossNpcId == bossId; }); var lineId = -1; if (index != -1) { lineId = jadeDynastyBosses[index].lineId; } return jadeDynastyBossLineDict.TryGetValue(lineId, out mapLineState); } public bool TryEnterDungeon(int bossId,out int error) { var condition = 0; error = 0; if (!IsBossUnLocked(bossId, out condition)) { switch (condition) { case 1: error = 1; break; case 2: error = 2; break; case 3: error = 3; break; } return false; } var totalTimes = dungeonModel.GetTotalTimes(JADEDYNASTY_MAP); var enterTimes = dungeonModel.GetEnterTimes(JADEDYNASTY_MAP); if (enterTimes >= totalTimes && assistTimes <= 0) { error = 4; return false; } if (!findPreciousModel.IsBossAlive(bossId)) { error = 5; return false; } if (CrossServerUtility.IsCrossServer()) { error = 6; return false; } return true; } public void DisplayErrorTip(int error) { switch (error) { case 1: SysNotifyMgr.Instance.ShowTip("TryEnterJadeDynastyBossError_1"); break; case 2: SysNotifyMgr.Instance.ShowTip("TryEnterJadeDynastyBossError_2"); break; case 3: SysNotifyMgr.Instance.ShowTip("TryEnterJadeDynastyBossError_3"); break; case 4: SysNotifyMgr.Instance.ShowTip("TryEnterJadeDynastyBossError_4"); break; case 5: SysNotifyMgr.Instance.ShowTip("TryEnterJadeDynastyBossError_5"); break; case 6: SysNotifyMgr.Instance.ShowTip("CrossMap10"); break; } } public void OnReceivePackage(HA007_tagGCFBLinePlayerCnt package) { if (package.MapID != JADEDYNASTY_MAP) { return; } jadeDynastyBossLineDict.Clear(); for (int i = 0; i < package.Count; i++) { var mapState = package.FBLineInfoList[i]; jadeDynastyBossLineDict[mapState.FBLineID] = new JadeDynastyBossLine() { playerCount = mapState.PlayerCnt, belongToPlayerName = mapState.ExtraStr, }; } if (bossLineRefresh != null) { bossLineRefresh(); } } public void OnReceivePackage(HB212_tagMCZhuXianBossCnt package) { assistTimes = package.Cnt; if (assistTimeRefresh != null) { assistTimeRefresh(); } } public static int SortCompare(JadeDynastyBossData lhs, JadeDynastyBossData rhs) { if (lhs.challengeCondition.level != rhs.challengeCondition.level) { return lhs.challengeCondition.level.CompareTo(rhs.challengeCondition.level); } if (lhs.challengeCondition.realmLevel != rhs.challengeCondition.realmLevel) { return lhs.challengeCondition.realmLevel.CompareTo(rhs.challengeCondition.realmLevel); } if (lhs.challengeCondition.score != rhs.challengeCondition.score) { return lhs.challengeCondition.score.CompareTo(rhs.challengeCondition.score); } return 0; } private void OnDungeonRecordUpdate(int _dataMapId) { if (JADEDYNASTY_MAP == _dataMapId) { UpdateRedpoint(); } } private void OnDungeonBuyCount() { UpdateRedpoint(); } private void OnFuncStateChangeEvent(int id) { if (id == FUNCTIONID) { UpdateRedpoint(); } } private void RefreshItemCountAct(PackType packType, int arg2, int arg3) { if (packType == PackType.rptJadeDynastyEquip) { UpdateRedpoint(); if (jadeDynastyScoreRefresh != null) { jadeDynastyScoreRefresh(); } } } void UpdateRedpoint() { if (FuncOpen.Instance.IsFuncOpen(FUNCTIONID)) { var count = dungeonModel.GetTotalTimes(JADEDYNASTY_MAP) - dungeonModel.GetEnterTimes(JADEDYNASTY_MAP); redpoint.count = count; } else { redpoint.count = 0; } redpoint.state = redpoint.count > 0 ? RedPointState.Quantity : RedPointState.None; } } public struct JadeDynastyBossData { public int bossNpcId; public int lineId; public JadeDynastyBossCondition challengeCondition; } public struct JadeDynastyBossCondition { public int level; public int realmLevel; public int score; } public struct JadeDynastyBossLine { public int playerCount; public string belongToPlayerName; } } System/JadeDynastyBoss/JadeDynastyBossModel.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: d06ff7d7549599a4aa5a8a0dfc1e69f5 timeCreated: 1547717239 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/JadeDynastyBoss/JadeDynastyBossVictoryWin.cs
New file @@ -0,0 +1,251 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, January 19, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class JadeDynastyBossVictoryWin : Window { [SerializeField] Transform m_ContainerPoivt; [SerializeField] Transform m_ContainerKill; [SerializeField] Text m_Rank; [SerializeField] Transform m_ContainerAssist; [SerializeField] ScrollRect m_RewardsScroll; [SerializeField] Text m_ExitTimer; [SerializeField] HorizontalLayoutGroup m_RewardLayout; [SerializeField] ButtonEx m_Exit; float timer = 0f; List<DemonJarRewardBehaviour> rewardBehaviours = new List<DemonJarRewardBehaviour>(); DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } } JadeDynastyBossModel jadeDynastyModel { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Exit.AddListener(ExitDungeon); } protected override void OnPreOpen() { timer = 0f; m_ContainerPoivt.gameObject.SetActive(false); } protected override void OnActived() { base.OnActived(); var config = Config.Instance.Get<DungeonOpenTimeConfig>(model.dungeonResult.dataMapID); StartCoroutine(Co_DelayDisplay(config.DelayTime * 0.001f)); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } protected override void LateUpdate() { base.LateUpdate(); var endTime = model.GetCoolDownEndTime(DungeonCoolDownType.LeaveMap); if (endTime > TimeUtility.ServerNow) { timer -= Time.deltaTime; if (timer < 0f) { timer = 1f; var seconds = (endTime - TimeUtility.ServerNow).TotalSeconds; m_ExitTimer.text = Language.Get("DungeonVictoryWin_Btn_Exit_1", Mathf.Clamp((int)seconds, 0, int.MaxValue)); } if (!m_ExitTimer.gameObject.activeInHierarchy) { m_ExitTimer.gameObject.SetActive(true); } } else { if (m_ExitTimer.gameObject.activeInHierarchy) { m_ExitTimer.gameObject.SetActive(false); } } } #endregion IEnumerator Co_DelayDisplay(float _delay) { yield return new WaitForSeconds(_delay); var endTime = model.GetCoolDownEndTime(DungeonCoolDownType.LeaveMap); var seconds = (endTime - TimeUtility.ServerNow).TotalSeconds; timer = 0f; m_ExitTimer.text = Language.Get("DungeonVictoryWin_Btn_Exit_1", Mathf.Clamp((int)seconds, 0, int.MaxValue)); m_ExitTimer.gameObject.SetActive(true); m_ContainerPoivt.gameObject.SetActive(true); DisplayRewards(); var rank = model.dungeonResult.rank; m_ContainerAssist.gameObject.SetActive(rank != 1); m_ContainerKill.gameObject.SetActive(rank == 1); if (rank == 1) { DisplayKill(); } else { DisplayAssist(); } } private void DisplayKill() { m_Rank.text = Language.Get("DemonJar7", 1); } private void DisplayAssist() { } private void DisplayRewards() { var serverItems = model.dungeonResult.itemInfo; var items = new List<Item>(); if (serverItems != null) { for (int i = 0; i < serverItems.Length; i++) { items.Add(new Item(serverItems[i].ItemID, serverItems[i].Count)); } } items.Sort(RewardSort); GenerateRewardBehaviour(m_RewardsScroll.content, items.Count); if (items.Count < 6) { m_RewardLayout.childAlignment = TextAnchor.MiddleCenter; (m_RewardLayout.transform as RectTransform).pivot = new Vector2(0.5f, 0.5f); } else { m_RewardLayout.childAlignment = TextAnchor.MiddleLeft; (m_RewardLayout.transform as RectTransform).pivot = new Vector2(0, 0.5f); } for (int i = 0; i < rewardBehaviours.Count; i++) { var behaviour = rewardBehaviours[i]; if (i < items.Count) { behaviour.gameObject.SetActive(true); behaviour.Display(items[i]); } else { behaviour.gameObject.SetActive(false); } } } private void ExitDungeon() { model.ExitCurrentDungeon(); } private int RewardSort(Item _lhs, Item _rhs) { var islhsJadeDynastyEquip = IsJadeDynastyEquip(_lhs); var isrhsJadeDynastyEquip = IsJadeDynastyEquip(_rhs); if (islhsJadeDynastyEquip != isrhsJadeDynastyEquip) { return -islhsJadeDynastyEquip.CompareTo(isrhsJadeDynastyEquip); } var islhsJadeDynasty126 = IsJadeDynasty126(_lhs); var isrhsJadeDynasty126 = IsJadeDynasty126(_rhs); if (islhsJadeDynasty126 == isrhsJadeDynasty126 && islhsJadeDynasty126) { return _lhs.id.CompareTo(_rhs.id); } else if (islhsJadeDynasty126 != isrhsJadeDynasty126) { return -islhsJadeDynasty126.CompareTo(isrhsJadeDynasty126); } var lhsConfig = Config.Instance.Get<ItemConfig>(_lhs.id); var rhsConfig = Config.Instance.Get<ItemConfig>(_rhs.id); if (lhsConfig != null && rhsConfig != null) { return -lhsConfig.ItemColor.CompareTo(rhsConfig.ItemColor); } return 0; } bool IsJadeDynastyEquip(Item item) { var config = Config.Instance.Get<ItemConfig>(item.id); var type = 0; if (config != null) { type = config.Type; } return type >= 128 && type <= 137; } bool IsJadeDynasty126(Item item) { var config = Config.Instance.Get<ItemConfig>(item.id); var type = 0; if (config != null) { type = config.Type; } return type == 126; } private void GenerateRewardBehaviour(RectTransform _parent, int _needCount) { var nowCount = rewardBehaviours.Count; var dif = _needCount - nowCount; if (dif > 0) { for (int i = 0; i < dif; i++) { var instance = UIUtility.CreateWidget("DemonJarRewardBehaviour", "DemonJarRewardBehaviour"); var behaviour = instance.GetComponent<DemonJarRewardBehaviour>(); rewardBehaviours.Add(behaviour); instance.transform.SetParentEx(_parent, Vector3.zero, Vector3.zero, Vector3.one); } } } } } System/JadeDynastyBoss/JadeDynastyBossVictoryWin.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 89694d5b27c7f1c429cd3c2a2cd449c1 timeCreated: 1547865026 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/JadeDynastyBoss/JadeDynastyBossWin.cs
New file @@ -0,0 +1,386 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, January 17, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class JadeDynastyBossWin : Window { [SerializeField] CyclicScroll m_Bosses; [SerializeField] ItemCell[] m_Items; [SerializeField] Text m_ChallengeTimes; [SerializeField] Text m_AssistTimes; [SerializeField] Text m_JadeDynastyScore; [SerializeField] Button m_BuyTimes; [SerializeField] Transform m_SurpassLevel; [SerializeField] ToggleButton m_Subscribe; [SerializeField] Button m_Goto; [SerializeField] Transform m_ContainerKillRecord; [SerializeField] Transform m_ContainerNoneRecord; [SerializeField] Transform m_ContainerExistRecord; [SerializeField] JadeDynastyBossKillRecord[] m_KillRecords; [SerializeField] Transform m_ContainerBelongTo; [SerializeField] Text m_BelongToPlayerName; [SerializeField] Text m_BelongToNonePlayer; JadeDynastyBossModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } } MapModel mapModel { get { return ModelCenter.Instance.GetModel<MapModel>(); } } float refreshBossStateTime = 0f; DateTime lastRequestMapStateTime = DateTime.Now; #region Built-in protected override void BindController() { } protected override void AddListeners() { m_BuyTimes.AddListener(BuyTimes); m_Subscribe.AddListener(SwitchSubscribeBoss); m_Goto.AddListener(GotoKillBoss); } protected override void OnPreOpen() { SetDefaultSelectBoss(); refreshBossStateTime = -1f; FindPreciousModel.BossInfo bossInfo; if (findPreciousModel.TryGetBossInfo(model.selectBossId, out bossInfo) && !bossInfo.IsBossAlive()) { if (TimeUtility.ServerNow <= bossInfo.refreshTime) { var seconds = (int)(bossInfo.refreshTime - TimeUtility.ServerNow).TotalSeconds + 1; refreshBossStateTime = Time.realtimeSinceStartup + seconds; } } lastRequestMapStateTime = DateTime.Now; mapModel.RequestQueryMapLineState(JadeDynastyBossModel.JADEDYNASTY_MAP); model.assginSelectBossId = 0; } protected override void OnActived() { base.OnActived(); Display(); } protected override void OnAfterOpen() { model.selectBossRefresh += SelectBossRefresh; dungeonModel.updateDungeonBuyCnt += ChallengeTimesRefresh; dungeonModel.dungeonRecordChangeEvent += ChallengeTimesRefresh; findPreciousModel.bossSubscribeChangeEvent += DisplaySubscribe; findPreciousModel.bossInfoUpdateEvent += BossInfoUpdateEvent; model.bossLineRefresh += BossLineRefresh; model.assistTimeRefresh += AssistTimeRefresh; model.jadeDynastyScoreRefresh += JadeDynastyScoreRefresh; } protected override void OnPreClose() { model.selectBossRefresh -= SelectBossRefresh; dungeonModel.updateDungeonBuyCnt -= ChallengeTimesRefresh; dungeonModel.dungeonRecordChangeEvent -= ChallengeTimesRefresh; findPreciousModel.bossSubscribeChangeEvent -= DisplaySubscribe; findPreciousModel.bossInfoUpdateEvent -= BossInfoUpdateEvent; model.bossLineRefresh -= BossLineRefresh; model.assistTimeRefresh -= AssistTimeRefresh; model.jadeDynastyScoreRefresh -= JadeDynastyScoreRefresh; refreshBossStateTime = -1f; } protected override void OnAfterClose() { } protected override void LateUpdate() { base.LateUpdate(); if (refreshBossStateTime > 0) { if (Time.realtimeSinceStartup > refreshBossStateTime) { DisplayKillRecord(); DisplayBelongTo(); refreshBossStateTime = -1f; } } if ((DateTime.Now - lastRequestMapStateTime).TotalSeconds >= 5f) { lastRequestMapStateTime = DateTime.Now; mapModel.RequestQueryMapLineState(JadeDynastyBossModel.JADEDYNASTY_MAP); } } #endregion public void SetDefaultSelectBoss() { if (model.assginSelectBossId != 0 && model.IsJadeDynastyBoss(model.assginSelectBossId)) { model.selectBossId = model.assginSelectBossId; } else { model.selectBossId = model.GetLatestUnLockBoss(); } } public void Display() { DisplayBosses(); DisplayChallengeTimes(); DisplayDropItems(); DisplaySubscribe(model.selectBossId); DisplayKillRecord(); DisplayBelongTo(); DisplayAssistTimes(); DisplayJadeDynastyScore(); } public void DisplayBosses() { var bosses = model.GetJadeDynastyBosses(); m_Bosses.Init(bosses); m_Bosses.MoveToCenter(bosses.IndexOf(model.selectBossId)); } public void DisplayChallengeTimes() { var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP); var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP); m_ChallengeTimes.text = StringUtility.Contact(totalTimes - enterTimes, "/", model.challengeLimitCount); } public void DisplayAssistTimes() { m_AssistTimes.text = model.assistTimes.ToString(); } void DisplayDropItems() { List<Item> dropItems = null; model.TryGetDropItems(model.selectBossId, out dropItems); for (int i = 0; i < m_Items.Length; i++) { m_Items[i].cellBtn.RemoveAllListeners(); if (dropItems != null && i < dropItems.Count) { m_Items[i].gameObject.SetActive(true); var item = dropItems[i]; ItemCellModel itemCellModel = new ItemCellModel(item.id, true, (ulong)item.count, item.bind ? 1 : 0); m_Items[i].Init(itemCellModel); m_Items[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_Items[i].gameObject.SetActive(false); } } var npcDropConfig = Config.Instance.Get<NPCDropItemConfig>(model.selectBossId); var dropMaxLevel = 0; if (npcDropConfig != null) { dropMaxLevel = npcDropConfig.MaxLV; } m_SurpassLevel.gameObject.SetActive(dropMaxLevel != 0 && PlayerDatas.Instance.baseData.LV > dropMaxLevel); } private void DisplaySubscribe(int _bossId) { m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectBossId); } private void DisplayKillRecord() { var alive = findPreciousModel.IsBossAlive(model.selectBossId); m_ContainerKillRecord.gameObject.SetActive(!alive); if (!alive) { var killRecords = findPreciousModel.GetBossKillRecords(model.selectBossId); m_ContainerExistRecord.gameObject.SetActive(killRecords != null && killRecords.Count > 0); m_ContainerNoneRecord.gameObject.SetActive(killRecords == null || killRecords.Count == 0); if (killRecords != null && killRecords.Count > 0) { for (int i = 0; i < m_KillRecords.Length; i++) { if (killRecords != null && i < killRecords.Count) { m_KillRecords[i].gameObject.SetActive(true); m_KillRecords[i].Display(killRecords[i].killTime, killRecords[i].playerName); } else { m_KillRecords[i].gameObject.SetActive(false); } } } } } private void DisplayBelongTo() { var alive = findPreciousModel.IsBossAlive(model.selectBossId); m_ContainerBelongTo.gameObject.SetActive(alive); if (alive) { var belongToPlayer = false; JadeDynastyBossLine jadeDynastyBossLine; if (model.TryGetBossLine(model.selectBossId, out jadeDynastyBossLine)) { if (!string.IsNullOrEmpty(jadeDynastyBossLine.belongToPlayerName)) { belongToPlayer = true; } } m_BelongToNonePlayer.gameObject.SetActive(!belongToPlayer); m_BelongToPlayerName.gameObject.SetActive(belongToPlayer); if (belongToPlayer) { m_BelongToPlayerName.text = jadeDynastyBossLine.belongToPlayerName; } } } private void DisplayJadeDynastyScore() { m_JadeDynastyScore.text = Language.Get("JadeDynastyBossWin_Score", UIHelper.ReplaceLargeNum(model.jadeDynastyScore)); } private void SelectBossRefresh(int bossId) { DisplayDropItems(); DisplaySubscribe(model.selectBossId); DisplayKillRecord(); DisplayBelongTo(); FindPreciousModel.BossInfo bossInfo; if (findPreciousModel.TryGetBossInfo(model.selectBossId, out bossInfo) && !bossInfo.IsBossAlive()) { if (TimeUtility.ServerNow <= bossInfo.refreshTime) { var seconds = (int)(bossInfo.refreshTime - TimeUtility.ServerNow).TotalSeconds + 1; refreshBossStateTime = Time.realtimeSinceStartup + seconds; } } } private void BossLineRefresh() { DisplayBelongTo(); } private void AssistTimeRefresh() { DisplayAssistTimes(); } private void ChallengeTimesRefresh() { DisplayChallengeTimes(); } private void ChallengeTimesRefresh(int mapId) { if (JadeDynastyBossModel.JADEDYNASTY_MAP != mapId) { return; } DisplayChallengeTimes(); } private void JadeDynastyScoreRefresh() { DisplayJadeDynastyScore(); } private void BuyTimes() { var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP); var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP); if ((totalTimes - enterTimes) >= model.challengeLimitCount) { MessageWin.Inst.ShowFixedTip(Language.Get("DemonJar18")); return; } var mapId = PlayerDatas.Instance.baseData.MapID; var dataMapId = dungeonModel.GetDataMapIdByMapId(mapId); if (dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP) { SysNotifyMgr.Instance.ShowTip("JadeDynastyBossBuyTimesError"); return; } else { dungeonModel.currentDungeon = new Dungeon(JadeDynastyBossModel.JADEDYNASTY_MAP, 0); WindowCenter.Instance.Open<DungeonBuyTimesWin>(); } } private void SwitchSubscribeBoss() { if (findPreciousModel.IsBossSubscribed(model.selectBossId)) { findPreciousModel.RequestDeSubscribeBoss(model.selectBossId); } else { findPreciousModel.RequestSubscribeBoss(model.selectBossId, false); } } private void BossInfoUpdateEvent(int bossId) { if (bossId == model.selectBossId) { DisplayKillRecord(); DisplayBelongTo(); } } private void GotoKillBoss() { var error = 0; if (model.TryEnterDungeon(model.selectBossId, out error)) { var config = Config.Instance.Get<JadeDynastyBossConfig>(model.selectBossId); dungeonModel.SingleChallenge(JadeDynastyBossModel.JADEDYNASTY_MAP, config.LineID); } else { model.DisplayErrorTip(error); } } } } System/JadeDynastyBoss/JadeDynastyBossWin.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 83c74804cfa865445b2b77e5bd090dd6 timeCreated: 1547717380 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/JadeDynastyBoss/JadeDynastyDamageRankWin.cs
New file @@ -0,0 +1,52 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, January 18, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class JadeDynastyDamageRankWin : Window { [SerializeField] DungeonRankBehaviour m_RankBehaviour; #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>(); var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); m_RankBehaviour.Init(dataMapId); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion } } System/JadeDynastyBoss/JadeDynastyDamageRankWin.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 118ee6dbac3babc488ba966899aae754 timeCreated: 1547814117 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/MainInterfacePanel/InGamePushContainer.cs
@@ -35,6 +35,7 @@ DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } } DogzDungeonModel dogzDungeonModel { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } } CrossServerBossModel crossServerBossModel { get { return ModelCenter.Instance.GetModel<CrossServerBossModel>(); } } JadeDynastyBossModel jadeDynastyBossModel { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } } VipModel vipModel { get { return ModelCenter.Instance.GetModel<VipModel>(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } } @@ -269,10 +270,12 @@ show = !GeneralDefine.elderGodNoRebornRemindMaps.Contains(mapId); break; case FindPreciousType.DemonJar: var totalTimes = dungeonModel.GetTotalTimes(DemonJarModel.DEMONJAR_MAPID); var enterTimes = dungeonModel.GetEnterTimes(DemonJarModel.DEMONJAR_MAPID); killable = totalTimes > enterTimes; show = !GeneralDefine.demonJarNoRebornRemindMaps.Contains(mapId); { var totalTimes = dungeonModel.GetTotalTimes(DemonJarModel.DEMONJAR_MAPID); var enterTimes = dungeonModel.GetEnterTimes(DemonJarModel.DEMONJAR_MAPID); killable = totalTimes > enterTimes; show = !GeneralDefine.demonJarNoRebornRemindMaps.Contains(mapId); } break; case FindPreciousType.DogzDungeon: killable = dogzDungeonModel.wearyValue < GeneralDefine.bossWearyValues[2]; @@ -282,6 +285,14 @@ killable = crossServerBossModel.wearyValue < GeneralDefine.bossWearyValues[2]; show = !GeneralDefine.dogzNoRebornRemindMaps.Contains(mapId); break; case FindPreciousType.JadeDynastyBoss: { var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP); var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP); killable = totalTimes > enterTimes; show = !GeneralDefine.demonJarNoRebornRemindMaps.Contains(mapId); } break; } if (!killable) System/PlayerDead/ReliveWin.cs
@@ -47,8 +47,9 @@ MapConfig mapConfig = Config.Instance.Get<MapConfig>(curMapId); dieDesText.gameObject.SetActive(false); buffText.gameObject.SetActive(curMapId == ElderBattleMapID); inplaceRebornBtn.gameObject.SetActive(curMapId == UnionleagueMapID); switch(curMapId) inplaceRebornBtn.gameObject.SetActive(curMapId == UnionleagueMapID || curMapId == JadeDynastyBossModel.JADEDYNASTY_MAP); switch (curMapId) { case ElderBattleMapID: SetBuffDes(); System/WindowBase/ModelCenter.cs
@@ -221,6 +221,7 @@ RegisterModel<CrossServerBossModel>(); RegisterModel<OpenServiceAchievementModel>(); RegisterModel<FashionDressModel>(); RegisterModel<JadeDynastyBossModel>(); inited = true; } Utility/EnumHelper.cs
@@ -326,6 +326,7 @@ DungeonAssist = 29, GatherSoulDungeon = 30, CrossServerPk = 31, JadeDynastyBoss = 32, } public enum ActivityPrepareType @@ -1169,6 +1170,7 @@ DemonJarAuto = 32, AssistXianYuanCoinsAdd = 33,//助战仙缘币上限加成 AssistXianYuanCoinsRatioAdd = 34,//助战仙缘币获得倍率加成(万分比) JadeDynastyBoss = 35, } @@ -1202,7 +1204,8 @@ ElderGodArea = 3, DemonJar = 4, DogzDungeon = 5, CrossServerBoss=6, CrossServerBoss = 6, JadeDynastyBoss = 7, None = 99, }