Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -11,6 +11,7 @@ public static void Init() { // 登记相应的数据体及对应的数据转逻辑类 Register(typeof(HB913_tagGCEnterTeamFBFailReason), typeof(DTCB913_tagGCEnterTeamFBFailReason)); Register(typeof(H0311_tagDeleteSkill), typeof(DTC0311_tagDeleteSkill)); Register(typeof(HB106_tagMCNotifyPlayerMove), typeof(DTCB106_tagMCNotifyPlayerMove)); Register(typeof(H0132_tagCreateRoleSucess), typeof(DTC0132_tagCreateRoleSucess)); Core/NetworkPackage/DTCFile/ServerPack/HB9_Team/DTCB913_tagGCEnterTeamFBFailReason.cs
New file @@ -0,0 +1,23 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, November 01, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using Snxxz.UI; public class DTCB913_tagGCEnterTeamFBFailReason : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); var package = vNetPack as HB913_tagGCEnterTeamFBFailReason; TeamFailEnterDungeonHandle.Instance.ReceiveReason(package); } } Core/NetworkPackage/DTCFile/ServerPack/HB9_Team/DTCB913_tagGCEnterTeamFBFailReason.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 97a0a264acd98384886c8277d4a2ebf7 timeCreated: 1541057447 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/NetworkPackage/ServerPack/HB9_Team/HB913_tagGCEnterTeamFBFailReason.cs
New file @@ -0,0 +1,21 @@ using UnityEngine; using System.Collections; // B9 13 进入组队副本失败原因 #tagGCEnterTeamFBFailReason public class HB913_tagGCEnterTeamFBFailReason : GameNetPackBasic { public uint MapID; // 请求进入的地图ID public byte AskType; // 请求类型: 0-匹配请求;1-进入请求 public byte Reason; // 失败原因:2-次数不足;3-进入CD中;6-门票不足 public HB913_tagGCEnterTeamFBFailReason () { _cmd = (ushort)0xB913; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out MapID, vBytes, NetDataType.DWORD); TransBytes (out AskType, vBytes, NetDataType.BYTE); TransBytes (out Reason, vBytes, NetDataType.BYTE); } } Core/NetworkPackage/ServerPack/HB9_Team/HB913_tagGCEnterTeamFBFailReason.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: a57b7f9855954f1458d169cd9cb7459c timeCreated: 1541057414 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/DailyQuest/DayRemind.cs
@@ -46,6 +46,7 @@ public const string RUNE_SPECIAL_HOLE = "RuneSpecialHole"; public const string LEAGUE_NOTICE_REDPOINT = "LeagueNoticeRedpoint"; public const string FAIRYGRABBOSS_NOTICE_REDPOINT = "FairyGrabBossRedpoint"; public const string TEAM_TICKET_FAIRYLAND = "TeamTicketFairyLand"; public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>(); public bool GetDayRemind(string _remindKey) @@ -100,6 +101,7 @@ SetDayRemind(RUNE_SPECIAL_HOLE); SetDayRemind(LEAGUE_NOTICE_REDPOINT); SetDayRemind(FAIRYGRABBOSS_NOTICE_REDPOINT); SetDayRemind(TEAM_TICKET_FAIRYLAND); } private void SetDayRemind(string _key) System/Team/GroupDungeonChallengeProcessor.cs
@@ -38,16 +38,36 @@ var realmModel = ModelCenter.Instance.GetModel<RealmModel>(); realmModel.GotoDungeon(); break; default: int error = 0; var dungeon = new Dungeon(_mapId, _lineId); if (dungeonModel.TestChallange(dungeon, out error)) case 31080: { dungeonModel.GroupChallenge(dungeon); int error = 0; var dungeon = new Dungeon(_mapId, _lineId); if (dungeonModel.TestChallange(dungeon, out error)) { dungeonModel.GroupChallenge(dungeon); } else { ProcessEnterDungeonError(error); if (error == 5) { TeamFailEnterDungeonHandle.Instance.HandleFairyLand(1, 6); } } } else break; default: { ProcessEnterDungeonError(error); int error = 0; var dungeon = new Dungeon(_mapId, _lineId); if (dungeonModel.TestChallange(dungeon, out error)) { dungeonModel.GroupChallenge(dungeon); } else { ProcessEnterDungeonError(error); } } break; } System/Team/TeamDungeonTicketLackWin.cs
New file @@ -0,0 +1,258 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, November 01, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class TeamDungeonTicketLackWin : Window { public static LackType lackType = LackType.FairyLand; [SerializeField] ItemBehaviour m_Item; [SerializeField] TextEx m_TicketOwn; [SerializeField] TextEx m_TicketNeed; [SerializeField] Text m_LackContentTip; [SerializeField] Text m_LackMoneyTip; [SerializeField] Button m_Buy; [SerializeField] Button m_Close; [SerializeField] Button m_TicketCompose; [SerializeField] Toggle m_RemindToggle; DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } } PlayerPackModel packModel { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } } ComposeWinModel composeModel { get { return ModelCenter.Instance.GetModel<ComposeWinModel>(); } } StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Buy.onClick.AddListener(Buy); m_Close.onClick.AddListener(CloseClick); m_TicketCompose.onClick.AddListener(TicketCompose); } protected override void OnPreOpen() { var lackItem = GetLackItem(lackType); m_Item.showCount = false; m_Item.SetItem(lackItem); var own = packModel.GetItemCountByID(PackType.rptItem, lackItem.id); m_TicketOwn.text = own.ToString(); m_TicketNeed.text = StringUtility.Contact("/", lackItem.count); m_TicketOwn.colorType = own >= lackItem.count ? TextColType.White : TextColType.Red; m_TicketCompose.gameObject.SetActive(own < lackItem.count && SatisfyComposeTicket(lackItem)); m_LackContentTip.text = GetLackContentTip(lackType); m_LackMoneyTip.gameObject.SetActive(own < lackItem.count); if (own < lackItem.count) { var moneyNeed = GetUnitPrice(lackType) * (lackItem.count - own); m_LackMoneyTip.text = GetLackMoneyTip(lackType, moneyNeed); } m_RemindToggle.isOn = false; } protected override void OnAfterOpen() { } protected override void OnPreClose() { DayRemind.Instance.SetDayRemind(GetDayRemindKey(lackType), m_RemindToggle.isOn); } protected override void OnAfterClose() { } #endregion private Item GetLackItem(LackType _lackType) { switch (_lackType) { case LackType.FairyLand: return dungeonModel.GetLackItem(DungeonSuppliesLackWin.LackType.FairyLand); default: return default(Item); } } private string GetLackContentTip(LackType _lackType) { switch (_lackType) { case LackType.FairyLand: return Language.Get("TeamLostItem1"); default: return string.Empty; } } private bool SatisfyComposeTicket(Item lackItem) { List<ItemCompoundConfig> list; if (ItemCompoundConfig.TryGetTicketCompose(lackItem.id, out list)) { return composeModel.IsComposeTicketByType(list[0].secondType); } return false; } private int GetUnitPrice(LackType _lackType) { switch (_lackType) { case LackType.FairyLand: var dungeonId3 = dungeonModel.GetDungeonId(31080, 0); var config3 = Config.Instance.Get<DungeonConfig>(dungeonId3); return config3.TicketPrice; default: return 0; } } private void TicketCompose() { switch (lackType) { case LackType.FairyLand: CloseImmediately(); WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.ComposeTicketFairy); break; } } private string GetLackMoneyTip(LackType _lackType, int _moneyLack) { switch (_lackType) { case LackType.FairyLand: return Language.Get("W_TicketJade", _moneyLack); default: return string.Empty; } } private string GetBindJadeLackTip(LackType _lackType, int _moneyNeed, int _moneyOwn) { switch (_lackType) { case LackType.FairyLand: return Language.Get("JadeChargeAgainst", _moneyNeed, _moneyOwn); default: return string.Empty; } } private StoreConfig GetStoreConfig(Item lackItem, int moneyType) { var config = StoreConfig.GetStoreCfg(lackItem.id, moneyType); return config; } private void Buy() { var lackItem = GetLackItem(lackType); var own = packModel.GetItemCountByID(PackType.rptItem, lackItem.id); if (own < lackItem.count) { var moneyNeed = GetUnitPrice(lackType) * (lackItem.count - own); if (PlayerDatas.Instance.baseData.Gold < moneyNeed && PlayerDatas.Instance.baseData.GoldPaper < moneyNeed) { if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("GoldErr"); return; } WindowCenter.Instance.Open<RechargeTipWin>(); } else { var moneyType = PlayerDatas.Instance.baseData.Gold < moneyNeed ? 2 : 1; ConfirmTodo(lackType, moneyType); } } } private void ConfirmTodo(LackType _lackType,int moneyType) { switch (_lackType) { case LackType.FairyLand: var lackItem = GetLackItem(_lackType); var config = GetStoreConfig(lackItem, moneyType); if (config != null) { var own = packModel.GetItemCountByID(PackType.rptItem, lackItem.id); if (moneyType == 1) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), GetConfirmLabel(_lackType), (bool isOk) => { if (isOk) { storeModel.SendBuyShopItem(config, lackItem.count - own); CloseImmediately(); } }); return; } else { storeModel.SendBuyShopItem(config, lackItem.count - own); } } CloseImmediately(); break; default: break; } } string GetConfirmLabel(LackType _lackType) { switch (_lackType) { case LackType.FairyLand: return Language.Get("TeamLostItem2", GetUnitPrice(_lackType)); default: return string.Empty; } } public static string GetDayRemindKey(LackType _lackType) { switch (_lackType) { case LackType.FairyLand: return DayRemind.TEAM_TICKET_FAIRYLAND; default: return string.Empty; } } public enum LackType { FairyLand, } } } System/Team/TeamDungeonTicketLackWin.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: d8473a9cd91c64045b40b0627cf98599 timeCreated: 1541051627 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Team/TeamFailEnterDungeonHandle.cs
New file @@ -0,0 +1,89 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class TeamFailEnterDungeonHandle : Singleton<TeamFailEnterDungeonHandle> { Dictionary<int, Action> tasks = new Dictionary<int, Action>(); public TeamFailEnterDungeonHandle() { StageManager.Instance.onStageLoadFinish += OnStageLoadFinish; } private void OnStageLoadFinish() { foreach (var action in tasks.Values) { try { action(); } catch (Exception e) { DebugEx.Log(e.StackTrace); } } tasks.Clear(); } public void ReceiveReason(HB913_tagGCEnterTeamFBFailReason package) { switch (package.MapID) { case 31080: HandleFairyLand(package.AskType, package.Reason); break; } } public void HandleFairyLand(int type, int reason) { if (reason == 6) { HandleFairyLandLackTicket(); } } void HandleFairyLandLackTicket() { var dayRemindKey = TeamDungeonTicketLackWin.GetDayRemindKey(TeamDungeonTicketLackWin.LackType.FairyLand); if (DayRemind.Instance.GetDayRemind(dayRemindKey))//设置了今日不再提醒 { return; } if (NewBieCenter.Instance.inGuiding)//引导中不弹 { return; } if (WindowCenter.Instance.IsOpen<TeamDungeonTicketLackWin>() || WindowCenter.Instance.IsOpen<ComposeWin>()) { return; } if (StageManager.Instance.isLoading) { if (!tasks.ContainsKey(31080)) { tasks.Add(31080, RecheckFairyLandTicket); } return; } TeamDungeonTicketLackWin.lackType = TeamDungeonTicketLackWin.LackType.FairyLand; WindowCenter.Instance.Open<TeamDungeonTicketLackWin>(); } void RecheckFairyLandTicket() { SnxxzGame.Instance.StartCoroutine(Co_Load()); } IEnumerator Co_Load() { yield return WaitingForSecondConst.WaitMS500; HandleFairyLandLackTicket(); } } } System/Team/TeamFailEnterDungeonHandle.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: dab437b52403b874a932e1c0d7d39f78 timeCreated: 1541057241 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: