Core/GameEngine/Model/TelPartialConfig/tagChinSkillConfig.cs
@@ -104,6 +104,7 @@ m_Skills.TryGetValue(occupy, out dic); return dic; } //------坐骑技能获取 public static SkillConfig GetSkillTypeIDAndSkillLV(int _SkillTypeID, int SkillLV) { @@ -112,7 +113,20 @@ SkillConfig _tagChinSkillModel = null; T_HorseSkill.TryGetValue(_textBuilder.ToString(), out _tagChinSkillModel); return _tagChinSkillModel; } public static int FindSkillByJob(int[] skillIds,int job) { foreach (var skill in skillIds) { var config = Config.Instance.Get<SkillConfig>(skill); if (config != null && (config.UseType == 0 || config.UseType == 1 << job)) { return skill; } } return 0; } } Core/NetworkPackage/ClientPack/ClientToMapServer/CB9_Team/CB90A_tagCGInvitePlayerJoinTeamByLV.cs
@@ -3,18 +3,21 @@ // B9 0A 按条件邀请玩家加入队伍 #tagCGInvitePlayerJoinTeamByLV public class CB90A_tagCGInvitePlayerJoinTeamByLV : GameNetPackBasic { public class CB90A_tagCGInvitePlayerJoinTeamByLV : GameNetPackBasic { public ushort LVLimit; // 目标玩家大于等于此等级 public byte InviteCnt; // 邀请玩家个数 public CB90A_tagCGInvitePlayerJoinTeamByLV () { combineCmd = (ushort)0x03FE; public CB90A_tagCGInvitePlayerJoinTeamByLV() { combineCmd = (ushort)0x1801; _cmd = (ushort)0xB90A; } public override void WriteToBytes () { WriteBytes (LVLimit, NetDataType.WORD); WriteBytes (InviteCnt, NetDataType.BYTE); public override void WriteToBytes() { WriteBytes(LVLimit, NetDataType.WORD); WriteBytes(InviteCnt, NetDataType.BYTE); } } Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0405_tagPlayerDisappear.cs
@@ -30,6 +30,9 @@ { GAMgr.Instance.ServerDie(vNetData.Players[i]); GAMgr.Instance.Release(_actor); // 离线玩家 GAMgr.Instance.RemoveOffLinePlayer(vNetData.Players[i]); } else { Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs
@@ -1,8 +1,10 @@ using UnityEngine; using System.Collections; //04 34 周围玩家出现合并封包#tagAreaPlayerAppearEx //04 34 周围玩家出现合并封包#tagAreaPlayerAppearEx public class DTC0434_tagAreaPlayerAppearEx : DtcBasic { public override void Done(GameNetPackBasic vNetPack) @@ -21,6 +23,12 @@ if (_player != null) { // 异常 } // 离线玩家 if (vNetData.State == 1) { GAMgr.Instance.AddOffLinePlayer(vNetData.PlayerID); } _player = GAMgr.Instance.RequestPlayer<GA_Player>(vNetData.PlayerID, E_ActorGroup.Player, vNetData); @@ -70,5 +78,7 @@ StatusMgr.Instance.Request(_h0605); } } } } Fight/GameActor/GAMgr.cs
@@ -63,6 +63,8 @@ // 客户端id对应相应角色 private Dictionary<uint, GActor> m_Cid2GA; private List<uint> m_OffLineList; // 服务端通知的死亡目标对应的客户端id, // 这里为了处理可能出现的无法死亡现象,对每一只目标进行计时,强制其死亡 private List<uint> serverDeadList = new List<uint>(); @@ -85,10 +87,91 @@ m_AllList = new List<GActor>(); m_Sid2Cid = new Dictionary<uint, uint>(); m_Cid2GA = new Dictionary<uint, GActor>(); m_OffLineList = new List<uint>(); m_Inited = true; SystemSetting.Instance.playerSyncCountChangeEvent += OnPlayerSyncCountChange; SystemSetting.Instance.OnSettingChanged += OnSettingChanged; } } public void AddOffLinePlayer(uint sid) { if (m_OffLineList.Contains(sid)) { return; } m_OffLineList.Add(sid); } public void RemoveOffLinePlayer(uint sid) { if (m_OffLineList.Contains(sid)) { m_OffLineList.Remove(sid); } } public void ClearOffLinePlayer() { m_OffLineList.Clear(); } private float m_UpdateOffLineInterval; private List<uint> m_CacheList = new List<uint>(); private List<uint> m_ContaintList = new List<uint>(); private void UpdateOffLinePlayer() { if (m_OffLineList == null || m_OffLineList.Count == 0) { return; } if (Time.realtimeSinceStartup - m_UpdateOffLineInterval > 2) { m_CacheList.Clear(); m_ContaintList.Clear(); int _count = Mathf.Min(m_OffLineList.Count, 4); //Debug.LogFormat("此次将会有: {0} 个挂机者释放技能", _count); for (int i = 0; i < m_OffLineList.Count; ++i) { m_CacheList.Add(m_OffLineList[i]); } int _time = 0; while (m_ContaintList.Count < _count) { int _index = UnityEngine.Random.Range(0, m_CacheList.Count); m_ContaintList.Add(m_CacheList[_index]); //Debug.LogFormat("添加对象: {0}, 已添加: {1} 个", m_CacheList[_index], m_ContaintList.Count); m_CacheList.RemoveAt(_index); if (_time > _count) { //Debug.LogFormat("共添加了: {0} 个玩家", m_ContaintList.Count); break; } _time++; } GA_Player _player = null; for (int i = 0; i < m_ContaintList.Count; ++i) { _player = GAMgr.Instance.GetBySID(m_ContaintList[i]) as GA_Player; if (_player == null) { continue; } _player.UpdateOffLineAction(); } m_UpdateOffLineInterval = Time.realtimeSinceStartup; } } @@ -838,6 +921,8 @@ { m_AllList[i].Update(); } UpdateOffLinePlayer(); } public void DoLateUpdate() Fight/GameActor/GA_Player.cs
@@ -9,23 +9,16 @@ // 为守护特殊定义的当前是否装备守护id public int serverGuardId; // 简易的脱机挂AI草稿 // 步骤 1. 寻点 2. 移动至 3. 放个普攻 private byte m_Step; private Vector3 m_DestPos; private Vector3 m_RecordBornPos; private float m_WaitTime; public static UnityAction<uint, bool> s_OnSelected; public static UnityAction<uint, ulong, ulong> s_OnRefreshLife; private H0434_tagAreaPlayerAppearEx m_H0434; protected H0434_tagAreaPlayerAppearEx m_H0434; private CmdManager m_CmdManager; private int m_ComAtkIndex;// 普攻索引 private Skill m_CastSkill;// 要释放的技能 protected sealed override void OnInit(GameNetPackBasic package) private int m_ComAtkIndex;// 普攻索引 protected override void OnInit(GameNetPackBasic package) { m_H0434 = package as H0434_tagAreaPlayerAppearEx; @@ -157,12 +150,6 @@ RequestName(); m_CmdManager = new CmdManager(); if (m_H0434.State == 1) { m_RecordBornPos = Pos; m_Step = 0; } } protected sealed override void OnUnit() @@ -183,151 +170,13 @@ { } protected sealed override void OnUpdate() protected override void OnUpdate() { base.OnUpdate(); if (m_CmdManager != null) { m_CmdManager.Update(); } // 脱机挂 if (m_H0434.State == 1) { switch (m_Step) { case 0: //m_DestPos = m_RecordBornPos + Quaternion.Euler(0, Random.Range(0, 359), 0) * Vector3.forward * Random.Range(1f, 2f); //TryGetValidPos(m_DestPos, ref m_DestPos); if (SelectTarget == null) { SelectTarget = GAMgr.Instance.GetCloserFightNpc(Pos); } if (SelectTarget != null) { destForward = Forward = MathUtility.ForwardXZ(SelectTarget.Pos, Pos); } m_Step = 1; break; case 1: m_CastSkill = null; for (int i = 0; i < JobSetup.HangupSkillList.Length; ++i) { if (SkillMgr.Get(JobSetup.HangupSkillList[i]).IsValid()) { m_CastSkill = SkillMgr.Get(JobSetup.HangupSkillList[i]); break; } } if (m_CastSkill == null) { if (m_ComAtkIndex > JobSetup.ComAtkIdList.Length - 1) { m_ComAtkIndex = 0; } int _comSkillId = JobSetup.ComAtkIdList[m_ComAtkIndex]; m_CastSkill = SkillMgr.Get(_comSkillId); m_ComAtkIndex += 1; } m_Step = 2; break; case 2: if (m_CastSkill != null) { SkillMgr.CastSkill(ServerInstID, m_CastSkill.id, true); Vector3 _targetPosition = Pos + Forward * (m_CastSkill.skillInfo.config.AtkDist * .5f); _targetPosition.y = 0; UnityEngine.AI.NavMeshHit _navMeshHit; if (UnityEngine.AI.NavMesh.Raycast(Pos, _targetPosition, out _navMeshHit, -1)) { _targetPosition = _navMeshHit.position; } _targetPosition.y = Pos.y; m_CastSkill.targetPosition = _targetPosition; if (m_CastSkill.skillInfo.config.Skillactmark > 0 && m_CastSkill.skillInfo.config.Skillactmark < 20) { switch (m_CastSkill.skillInfo.config.Skillactmark) { case 10: Play(GAStaticDefine.State_Attack1Hash, 0); break; case 11: Play(GAStaticDefine.State_Attack2Hash, 0); break; case 12: Play(GAStaticDefine.State_Attack3Hash, 0); break; case 13: Play(GAStaticDefine.State_Attack4Hash, 0); break; } } else { switch (m_CastSkill.skillInfo.config.Skillactmark) { case 21: Play(GAStaticDefine.State_Skill21, 0); break; case 22: Play(GAStaticDefine.State_Skill22, 0); break; case 23: Play(GAStaticDefine.State_Skill23, 0); break; case 24: Play(GAStaticDefine.State_Skill24, 0); break; case 25: Play(GAStaticDefine.State_Skill25, 0); break; case 26: Play(GAStaticDefine.State_Skill26, 0); break; case 27: Play(GAStaticDefine.State_Skill27, 0); break; case 28: Play(GAStaticDefine.State_Skill28, 0); break; case 29: Play(GAStaticDefine.State_Skill29, 0); break; case 99: Play(GAStaticDefine.State_RollHash, 0); break; } } } m_Step = 3; break; case 3: if (IsIdle()) { m_Step = 0; } break; } } } @@ -695,4 +544,112 @@ { m_CmdManager.Clear(); } public void UpdateOffLineAction() { if (!IsIdle()) { return; } if (SelectTarget == null) { SelectTarget = GAMgr.Instance.GetCloserFightNpc(Pos); } if (SelectTarget != null) { destForward = Forward = MathUtility.ForwardXZ(SelectTarget.Pos, Pos); } Skill _castSkill = null; int _skillIndex = UnityEngine.Random.Range(0, JobSetup.HangupSkillList.Length); if (SkillMgr.Get(JobSetup.HangupSkillList[_skillIndex]).IsValid()) { _castSkill = SkillMgr.Get(JobSetup.HangupSkillList[_skillIndex]); } if (_castSkill == null) { if (m_ComAtkIndex > JobSetup.ComAtkIdList.Length - 1) { m_ComAtkIndex = 0; } int _comSkillId = JobSetup.ComAtkIdList[m_ComAtkIndex]; _castSkill = SkillMgr.Get(_comSkillId); m_ComAtkIndex += 1; } if (_castSkill != null) { SkillMgr.CastSkill(ServerInstID, _castSkill.id, true); Vector3 _targetPosition = Pos + Forward * (_castSkill.skillInfo.config.AtkDist * .5f); _targetPosition.y = 0; UnityEngine.AI.NavMeshHit _navMeshHit; if (UnityEngine.AI.NavMesh.Raycast(Pos, _targetPosition, out _navMeshHit, -1)) { _targetPosition = _navMeshHit.position; } _targetPosition.y = Pos.y; _castSkill.targetPosition = _targetPosition; if (_castSkill.skillInfo.config.Skillactmark > 0 && _castSkill.skillInfo.config.Skillactmark < 20) { switch (_castSkill.skillInfo.config.Skillactmark) { case 10: Play(GAStaticDefine.State_Attack1Hash, 0); break; case 11: Play(GAStaticDefine.State_Attack2Hash, 0); break; case 12: Play(GAStaticDefine.State_Attack3Hash, 0); break; case 13: Play(GAStaticDefine.State_Attack4Hash, 0); break; } } else { switch (_castSkill.skillInfo.config.Skillactmark) { case 21: Play(GAStaticDefine.State_Skill21, 0); break; case 22: Play(GAStaticDefine.State_Skill22, 0); break; case 23: Play(GAStaticDefine.State_Skill23, 0); break; case 24: Play(GAStaticDefine.State_Skill24, 0); break; case 25: Play(GAStaticDefine.State_Skill25, 0); break; case 26: Play(GAStaticDefine.State_Skill26, 0); break; case 27: Play(GAStaticDefine.State_Skill27, 0); break; case 28: Play(GAStaticDefine.State_Skill28, 0); break; case 29: Play(GAStaticDefine.State_Skill29, 0); break; case 99: Play(GAStaticDefine.State_RollHash, 0); break; } } } } } System/Achievement/AchievementModel.cs
@@ -116,6 +116,7 @@ { return this == (AchievementCondition)obj; } public override int GetHashCode() { var _value = type; @@ -125,6 +126,7 @@ } return _value.GetHashCode(); } public static bool operator ==(AchievementCondition x, AchievementCondition y) { if (x.type != y.type) @@ -144,6 +146,7 @@ } return true; } public static bool operator !=(AchievementCondition x, AchievementCondition y) { return !(x == y); @@ -225,7 +228,6 @@ { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = Config.Instance.Get<MapConfig>(mapId); if (mapConfig != null && mapConfig.MapFBType != 0) { SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); @@ -248,7 +250,6 @@ case 4: case 86: WindowCenter.Instance.Close<TreasureLevelUpWin>(); var mapModel = ModelCenter.Instance.GetModel<MapModel>(); var pointId = mapModel.GetRecommendHangPoint(); var mapEventConfig = Config.Instance.Get<MapEventPointConfig>(pointId); @@ -257,13 +258,11 @@ break; case 36: WindowCenter.Instance.Close<TreasureLevelUpWin>(); WindowCenter.Instance.Open<MainInterfaceWin>(); MapTransferUtility.Instance.MoveToNPC(config.Condition[0]); break; case 37: WindowCenter.Instance.Close<TreasureLevelUpWin>(); WindowCenter.Instance.Open<MainInterfaceWin>(); MapTransferUtility.Instance.MoveToLocalMapPosition(config.Condition2.Vector3Parse()); break; @@ -408,7 +407,7 @@ case 109: WindowCenter.Instance.Close<TreasureLevelUpWin>(); var skillId = FindSkillByJob(config.Condition, PlayerDatas.Instance.baseData.Job); var skillId = SkillConfig.FindSkillByJob(config.Condition, PlayerDatas.Instance.baseData.Job); if (skillId != 0) { if (ModelCenter.Instance.GetModel<SkillModel>().GetXpSkillID() == skillId) @@ -454,8 +453,8 @@ private string GetHighestSorceEquipByPlace(List<int> _places) { var package = playerPack.GetSinglePackModel(PackType.rptItem); var allItems = package.GetPackModelIndexDict(); var itemPackage = playerPack.GetSinglePackModel(PackType.rptItem); var allItems = itemPackage.GetPackModelIndexDict(); var guid = string.Empty; var equips = new List<string>(); @@ -478,15 +477,14 @@ private string GetBetterEquipByPlace(List<int> _places) { var package = playerPack.GetSinglePackModel(PackType.rptItem); var allItems = package.GetPackModelIndexDict(); var equipPackage = playerPack.GetSinglePackModel(PackType.rptEquip); var itemPackage = playerPack.GetSinglePackModel(PackType.rptItem); var allItems = itemPackage.GetPackModelIndexDict(); var guid = string.Empty; var equips = new List<string>(); var score = 0; var job = PlayerDatas.Instance.baseData.Job; var equipPackage = playerPack.GetSinglePackModel(PackType.rptEquip); foreach (var item in allItems.Values) { var overdue = packModelInterface.IsOverdue(item.itemInfo.ItemGUID, item.itemId, item.useDataDict); @@ -507,15 +505,14 @@ public string GetBetterEquipByPlace() { var package = playerPack.GetSinglePackModel(PackType.rptItem); var allItems = package.GetPackModelIndexDict(); var equipPackage = playerPack.GetSinglePackModel(PackType.rptEquip); var itemPackage = playerPack.GetSinglePackModel(PackType.rptItem); var allItems = itemPackage.GetPackModelIndexDict(); var guid = string.Empty; var equips = new List<string>(); var score = 0; var job = PlayerDatas.Instance.baseData.Job; var equipPackage = playerPack.GetSinglePackModel(PackType.rptEquip); foreach (var item in allItems.Values) { var config = Config.Instance.Get<ItemConfig>(item.itemId); @@ -536,21 +533,6 @@ } return guid; } public int FindSkillByJob(int[] _skillIds, int _job) { foreach (var skill in _skillIds) { var config = Config.Instance.Get<SkillConfig>(skill); if (config != null && (config.UseType == 0 || config.UseType == 1 << _job)) { return skill; } } return 0; } private void ProcessAchievementGotoGuide(int _achievementId) System/Dogz/DogzModel.cs
@@ -155,6 +155,15 @@ } } public event Action<int> OpenFuncEvent; public void OpenDogzFuncEvent(int functionOrder) { if(OpenFuncEvent != null) { OpenFuncEvent(functionOrder); } } #region 协议 public int addAssistCnt { get; private set; } //额外购买的助战数 System/Dogz/DogzWin.cs
@@ -39,22 +39,9 @@ }); } private void OnDogzStrengthen() { CloseChild(); functionOrder = 1; WindowCenter.Instance.Open<GodBeastReinforcementWin>(); } private void OnDogz() { CloseChild(); functionOrder = 0; WindowCenter.Instance.Open<DogzActiveWin>(); } protected override void OnPreOpen() { dogzModel.OpenFuncEvent += OnOpenFuncEvent; dogzModel.SetDefaultSelectDogz(); } @@ -71,6 +58,7 @@ protected override void OnPreClose() { dogzModel.OpenFuncEvent -= OnOpenFuncEvent; } protected override void OnAfterClose() @@ -81,6 +69,26 @@ } } private void OnOpenFuncEvent(int order) { funcBtnGroup.TriggerByOrder(order); } private void OnDogzStrengthen() { CloseChild(); functionOrder = 1; WindowCenter.Instance.Open<GodBeastReinforcementWin>(); } private void OnDogz() { CloseChild(); functionOrder = 0; WindowCenter.Instance.Open<DogzActiveWin>(); } void OnClose() { CloseChild(); System/FairyAu/WarehouseTipsWin.cs
@@ -76,6 +76,8 @@ [SerializeField] GameObject _Dropdown;//装备颜色 [SerializeField] GameObject _WarehouseCountBG;//仓库积分面板 [SerializeField] int _FamilyPosition = 0;//家族职位 [SerializeField] Button m_BtnAdd;//获取途径按钮 private AchievementGuideEffect AchievementGuideEffect1; int Item_lv = 0;//标记物品阶数 int Item_Color = 0;//标记物品颜色 @@ -85,6 +87,8 @@ int _WPID = 0;//用来标记需要兑换的物品ID private int SpiritPetDan = 0; public static event Action RedPointUpdate; GetItemPathModel _GetItemPath; GetItemPathModel GetItemPath { get { return _GetItemPath ?? (_GetItemPath = ModelCenter.Instance.GetModel<GetItemPathModel>()); } } #endregion @@ -100,6 +104,10 @@ protected override void AddListeners() { AddListen(); m_BtnAdd.AddListener(()=> { GetItemPath.SetChinItemModel(2150); }); } protected override void OnPreOpen() System/KnapSack/Logic/ItemTipsModel.cs
@@ -743,7 +743,7 @@ }); attrData.SetTipsFuncBtn(ItemWinBtnType.strength, (ItemWinBtnType, ItemAttrData) => { WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.StrengthFunc1); dogzModel.OpenDogzFuncEvent(1); }); } System/MainInterfacePanel/MainInterfaceWin.cs
@@ -977,7 +977,7 @@ ShowCastSkill();//显示技能组隐藏按钮组(强制切换) } var _cfg = Config.Instance.Get<SuccessConfig>(AchievementGoto.guideAchievementId); var _skillId = ModelCenter.Instance.GetModel<AchievementModel>().FindSkillByJob(_cfg.Condition, PlayerDatas.Instance.baseData.Job); var _skillId = SkillConfig.FindSkillByJob(_cfg.Condition, PlayerDatas.Instance.baseData.Job); if (_skillId != 0) { if (ModelCenter.Instance.GetModel<SkillModel>().GetXpSkillID() != _skillId) System/MainWin/SkillContainer.cs
@@ -430,7 +430,7 @@ if (AchievementGoto.achievementType == AchievementGoto.ExcuteSkill) { var _cfg = Config.Instance.Get<SuccessConfig>(AchievementGoto.guideAchievementId); var _skillId = ModelCenter.Instance.GetModel<AchievementModel>().FindSkillByJob(_cfg.Condition, PlayerDatas.Instance.baseData.Job); var _skillId = SkillConfig.FindSkillByJob(_cfg.Condition, PlayerDatas.Instance.baseData.Job); if (_skillId != 0) { if (ModelCenter.Instance.GetModel<SkillModel>().GetXpSkillID() == _skillId) System/RuneTower/RuneTowerSweepResultWin.cs
@@ -217,6 +217,8 @@ yield return null; } yield return null; m_ResultScrollRect.content.anchoredPosition = m_ResultScrollRect.content.anchoredPosition.SetY(end); foreach (var behaviour in resultBehavioursBuf) { System/Skill/SkillAccordWin.cs
@@ -478,7 +478,7 @@ if (AchievementGoto.achievementType == AchievementGoto.ExcuteSkill) { var _cfg = Config.Instance.Get<SuccessConfig>(AchievementGoto.guideAchievementId); var _skillId = ModelCenter.Instance.GetModel<AchievementModel>().FindSkillByJob(_cfg.Condition, PlayerDatas.Instance.baseData.Job); var _skillId = SkillConfig.FindSkillByJob(_cfg.Condition, PlayerDatas.Instance.baseData.Job); if (_skillId != 0) { m_AchieveSkillId = _skillId;