| Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0405_tagPlayerDisappear.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/BattleEffectPlayRule.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GAMgr.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GA_Pet.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GA_Player.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GActorNpcFight.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GActorPlayerBase.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Lua/Gen/BattleEffectPlayRuleWrap.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Lua/Gen/BattleEffectPlayRuleWrap.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/GeneralConfig/GeneralDefine.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0405_tagPlayerDisappear.cs
@@ -24,10 +24,7 @@ for (int i = 0; i < vNetData.Players.Length; ++i) { if (BattleEffectPlayRule.Instance.sortPlayerList.Contains(vNetData.Players[i])) { BattleEffectPlayRule.Instance.sortPlayerList.Remove(vNetData.Players[i]); } BattleEffectPlayRule.Instance.RemovePlayer(vNetData.Players[i]); _actor = GAMgr.Instance.GetBySID(vNetData.Players[i]); Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs
@@ -25,10 +25,7 @@ // 异常 } if (!BattleEffectPlayRule.Instance.sortPlayerList.Contains(vNetData.PlayerID)) { BattleEffectPlayRule.Instance.sortPlayerList.Add(vNetData.PlayerID); } BattleEffectPlayRule.Instance.AddPlayer(vNetData.PlayerID); // 离线玩家 if (vNetData.State == 1) Fight/GameActor/BattleEffectPlayRule.cs
@@ -3,9 +3,27 @@ [XLua.LuaCallCSharp] public class BattleEffectPlayRule : Singleton<BattleEffectPlayRule> { public List<uint> sortPlayerList = new List<uint>(); public readonly List<uint> sortPlayerList = new List<uint>(); public void AddPlayer(uint id) { if (sortPlayerList.Contains(id)) { return; } sortPlayerList.Add(id); SortList(); } public void RemovePlayer(uint id) { if (sortPlayerList.Contains(id)) { sortPlayerList.Remove(id); } SortList(); } private int limit { @@ -13,54 +31,101 @@ { if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.High) { return GeneralDefine.highQualityCount; return GeneralDefine.highQualityEffectCount; } else if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.Medium) { return GeneralDefine.medQualityCount; return GeneralDefine.medQualityEffectCount; } else { return GeneralDefine.lowQualityCount; return GeneralDefine.lowQualityEffectCount; } } } public int petLimit { get { if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.High) { return GeneralDefine.highQualityPetCount; } else if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.Medium) { return GeneralDefine.medQualityPetCount; } else { return GeneralDefine.lowQualityPetCount; } } } public int guardLimit { get { if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.High) { return GeneralDefine.highQualityGuardCount; } else if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.Medium) { return GeneralDefine.medQualityGuardCount; } else { return GeneralDefine.lowQualityGuardCount; } } } public float timeEscape; private void SortList() { GA_Hero _hero = PlayerDatas.Instance.hero; if (_hero == null) { return; } sortPlayerList.Sort((id1, id2) => { GActor _actor1 = GAMgr.Instance.GetBySID(id1); GActor _actor2 = GAMgr.Instance.GetBySID(id2); float _dis1 = 0f; float _dis2 = 0f; if (_actor1 != null) { _dis1 = MathUtility.DistanceSqrtXZ(_hero.Pos, _actor1.Pos); } if (_actor2 != null) { _dis2 = MathUtility.DistanceSqrtXZ(_hero.Pos, _actor2.Pos); } return _dis2 > _dis1 ? -1 : 1; }); } public void Update() { if (Time.realtimeSinceStartup - timeEscape > .5f) { GA_Hero _hero = PlayerDatas.Instance.hero; if (_hero == null) { return; } sortPlayerList.Sort((id1, id2) => { GActor _actor1 = GAMgr.Instance.GetBySID(id1); GActor _actor2 = GAMgr.Instance.GetBySID(id2); float _dis1 = 0f; float _dis2 = 0f; if (_actor1 != null) { _dis1 = MathUtility.DistanceSqrtXZ(_hero.Pos, _actor1.Pos); } if (_actor2 != null) { _dis2 = MathUtility.DistanceSqrtXZ(_hero.Pos, _actor2.Pos); } return _dis2 > _dis1 ? -1 : 1; }); SortList(); timeEscape = Time.realtimeSinceStartup; } } public int GetIndex(uint sid) { return sortPlayerList.IndexOf(sid); } public bool CanPlay(uint sid) @@ -71,7 +136,7 @@ return false; } if(_hero.ServerInstID == sid) if (_hero.ServerInstID == sid) { return true; } Fight/GameActor/GAMgr.cs
@@ -96,6 +96,74 @@ SystemSetting.Instance.playerSyncCountChangeEvent += OnPlayerSyncCountChange; SystemSetting.Instance.OnSettingChanged += OnSettingChanged; SystemSetting.Instance.qualityLevelChangeEvent += OnQualityLevelChange; } } private void OnQualityLevelChange() { List<GActor> _list = GetTypeList(E_ActorClassType.Pet); if (_list == null || _list.Count == 0) { return; } //Debug.LogFormat("共有: {0} 只宠物", _petList.Count); GA_Player _player = null; foreach (var _pet in _list) { var _parentID = _pet.ActorInfo.ownerSID; if (_parentID == PlayerDatas.Instance.PlayerId) { continue; } _player = GetBySID(_parentID) as GA_Player; if (_player == null || !_player.ShowOrHide) { _pet.ShowOrHideModel(false); //Debug.LogFormat("宠物: {0} 的拥有者: {1} 不可见, 这里隐藏.", _pet.ServerInstID, _parentID); continue; } var _index = BattleEffectPlayRule.Instance.GetIndex(_parentID); if (_index != -1 && _index < BattleEffectPlayRule.Instance.petLimit) { _pet.ShowOrHideModel(true); //Debug.LogFormat("宠物: {0} 的拥有者: {1} 在列表中且位于: {2}, 小于限制数量: {3}", _pet.ServerInstID, _parentID, _index, BattleEffectPlayRule.Instance.petLimit); } else { _pet.ShowOrHideModel(false); //Debug.LogFormat("宠物: {0} 的拥有者: {1} 在列表中且位于: {2}, 大于限制数量: {3}", _pet.ServerInstID, _parentID, _index, BattleEffectPlayRule.Instance.petLimit); } } _list = GetTypeList(E_ActorClassType.Player); //Debug.LogFormat("共有: {0} 只守护", _list.Count); foreach (var _chkPlayer in _list) { _player = _chkPlayer as GA_Player; if (_chkPlayer == null || !_chkPlayer.ShowOrHide) { _player.SwitchGuard(0); //Debug.LogFormat("_list: {0} 的拥有者: {1} 不可见, 这里隐藏.", _chkPlayer.ServerInstID, _player.ServerInstID); continue; } var _index = BattleEffectPlayRule.Instance.GetIndex(_player.ServerInstID); if (_index != -1 && _index < BattleEffectPlayRule.Instance.petLimit) { _player.SwitchGuard((uint)_player.serverGuardId); //Debug.LogFormat("_list: {0} 的拥有者: {1} 在列表中且位于: {2}, 小于限制数量: {3}", _chkPlayer.ServerInstID, _player.ServerInstID, _index, BattleEffectPlayRule.Instance.petLimit); } else { _player.SwitchGuard(0); //Debug.LogFormat("_list: {0} 的拥有者: {1} 在列表中且位于: {2}, 大于限制数量: {3}", _chkPlayer.ServerInstID, _player.ServerInstID, _index, BattleEffectPlayRule.Instance.petLimit); } } } Fight/GameActor/GA_Pet.cs
@@ -39,13 +39,28 @@ if (_parentSID != PlayerDatas.Instance.PlayerId) { GA_Player _player = GAMgr.Instance.GetBySID(_parentSID) as GA_Player; if (_player != null) bool _showOrHide = true; int _index = -999; if (_player == null) { if (!_player.ShowOrHide) _showOrHide = false; } else { _showOrHide = _player.ShowOrHide; if (_showOrHide) { ShowOrHideModel(false); _index = BattleEffectPlayRule.Instance.GetIndex(_parentSID); _showOrHide = _index != -1 && _index < BattleEffectPlayRule.Instance.petLimit; } } if (!_showOrHide) { ShowOrHideModel(_showOrHide); } } } Fight/GameActor/GA_Player.cs
@@ -110,7 +110,11 @@ } else if (_equipInfo.Place == (int)RoleEquipType.retSpiritAnimal) { SwitchGuard(_equipInfo.ItemID); var _index = BattleEffectPlayRule.Instance.GetIndex(ServerInstID); if (_index != -1 && _index < BattleEffectPlayRule.Instance.petLimit) { SwitchGuard(_equipInfo.ItemID); } serverGuardId = (int)_equipInfo.ItemID; } else if (_equipInfo.Place == (int)RoleEquipType.mount) @@ -185,9 +189,9 @@ public override void ChangeEquip(EquipInfo equipInfo) { // 传入ID为0代表脱下了装备 if(equipInfo.itemID == 0 && equipInfo.place != 0) if (equipInfo.itemID == 0 && equipInfo.place != 0) { if(m_EquipDict.ContainsKey(equipInfo.place)) if (m_EquipDict.ContainsKey(equipInfo.place)) { m_EquipDict.Remove(equipInfo.place); } Fight/GameActor/GActorNpcFight.cs
@@ -566,7 +566,7 @@ m_Model.transform.localScale = Vector3.one; GA_Hero _hero = PlayerDatas.Instance.hero; if(_hero.SelectTarget == this) if (_hero.SelectTarget == this) { RequestName(); RequestLifeBar(); @@ -617,17 +617,17 @@ } else { if (MP_Name != m_Model.transform) if (MP_Name && MP_Name != m_Model.transform) { MP_Name.SetParent(Root); } if (MP_Hit != m_Model.transform) if (MP_Hit && MP_Hit != m_Model.transform) { MP_Hit.SetParent(Root); } if (MP_Stun != m_Model.transform) if (MP_Stun && MP_Stun != m_Model.transform) { MP_Stun.SetParent(Root); } Fight/GameActor/GActorPlayerBase.cs
@@ -1096,6 +1096,7 @@ if (ShowOrHide) { m_Guard = GAMgr.Instance.RequestNpcNoFight<GA_Guard>(ServerInstID * 100 + 1, (uint)config.npcId, Group, null); m_Guard.ActorInfo.ownerSID = ServerInstID; m_Guard.itemID = (int)guardID; m_Guard.InitBase(); m_Guard.IsStateActive = true; @@ -2133,27 +2134,39 @@ ReleaseShadow(); } GA_Pet _pet = GAMgr.Instance.GetBySID(ServerInstID * 10 + 1) as GA_Pet; if (_pet != null) GA_Player _player = this as GA_Player; if (_player != null) { _pet.ShowOrHideModel(showOrHide); } ShowOrHide = showOrHide; if (this is GA_Player) { var _player = this as GA_Player; if (ShowOrHide) GA_Pet _pet = GAMgr.Instance.GetBySID(ServerInstID * 10 + 1) as GA_Pet; var _index = BattleEffectPlayRule.Instance.GetIndex(ServerInstID); if (_index != -1 && _index < BattleEffectPlayRule.Instance.petLimit) { if (_player.serverGuardId != 0) if (_pet != null) { _pet.ShowOrHideModel(true); } if (m_Guard == null) { SwitchGuard((uint)_player.serverGuardId); } } else { if (_pet != null) { _pet.ShowOrHideModel(false); } if (m_Guard != null) { SwitchGuard(0); } } } ShowOrHide = showOrHide; } /// <summary> Lua/Gen/BattleEffectPlayRuleWrap.cs
@@ -21,17 +21,21 @@ { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); System.Type type = typeof(BattleEffectPlayRule); Utils.BeginObjectRegister(type, L, translator, 0, 2, 2, 2); Utils.BeginObjectRegister(type, L, translator, 0, 5, 4, 1); Utils.RegisterFunc(L, Utils.METHOD_IDX, "AddPlayer", _m_AddPlayer); Utils.RegisterFunc(L, Utils.METHOD_IDX, "RemovePlayer", _m_RemovePlayer); Utils.RegisterFunc(L, Utils.METHOD_IDX, "Update", _m_Update); Utils.RegisterFunc(L, Utils.METHOD_IDX, "GetIndex", _m_GetIndex); Utils.RegisterFunc(L, Utils.METHOD_IDX, "CanPlay", _m_CanPlay); Utils.RegisterFunc(L, Utils.GETTER_IDX, "sortPlayerList", _g_get_sortPlayerList); Utils.RegisterFunc(L, Utils.GETTER_IDX, "petLimit", _g_get_petLimit); Utils.RegisterFunc(L, Utils.GETTER_IDX, "guardLimit", _g_get_guardLimit); Utils.RegisterFunc(L, Utils.GETTER_IDX, "sortPlayerList", _g_get_sortPlayerList); Utils.RegisterFunc(L, Utils.GETTER_IDX, "timeEscape", _g_get_timeEscape); Utils.RegisterFunc(L, Utils.SETTER_IDX, "sortPlayerList", _s_set_sortPlayerList); Utils.RegisterFunc(L, Utils.SETTER_IDX, "timeEscape", _s_set_timeEscape); Utils.RegisterFunc(L, Utils.SETTER_IDX, "timeEscape", _s_set_timeEscape); Utils.EndObjectRegister(type, L, translator, null, null, @@ -78,6 +82,62 @@ [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _m_AddPlayer(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); BattleEffectPlayRule gen_to_be_invoked = (BattleEffectPlayRule)translator.FastGetCSObj(L, 1); { uint _id = LuaAPI.xlua_touint(L, 2); gen_to_be_invoked.AddPlayer( _id ); return 0; } } catch(System.Exception gen_e) { return LuaAPI.luaL_error(L, "c# exception:" + gen_e); } } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _m_RemovePlayer(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); BattleEffectPlayRule gen_to_be_invoked = (BattleEffectPlayRule)translator.FastGetCSObj(L, 1); { uint _id = LuaAPI.xlua_touint(L, 2); gen_to_be_invoked.RemovePlayer( _id ); return 0; } } catch(System.Exception gen_e) { return LuaAPI.luaL_error(L, "c# exception:" + gen_e); } } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _m_Update(RealStatePtr L) { try { @@ -96,6 +156,35 @@ return 0; } } catch(System.Exception gen_e) { return LuaAPI.luaL_error(L, "c# exception:" + gen_e); } } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _m_GetIndex(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); BattleEffectPlayRule gen_to_be_invoked = (BattleEffectPlayRule)translator.FastGetCSObj(L, 1); { uint _sid = LuaAPI.xlua_touint(L, 2); int gen_ret = gen_to_be_invoked.GetIndex( _sid ); LuaAPI.xlua_pushinteger(L, gen_ret); return 1; } } catch(System.Exception gen_e) { @@ -137,6 +226,34 @@ [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _g_get_petLimit(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); BattleEffectPlayRule gen_to_be_invoked = (BattleEffectPlayRule)translator.FastGetCSObj(L, 1); LuaAPI.xlua_pushinteger(L, gen_to_be_invoked.petLimit); } catch(System.Exception gen_e) { return LuaAPI.luaL_error(L, "c# exception:" + gen_e); } return 1; } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _g_get_guardLimit(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); BattleEffectPlayRule gen_to_be_invoked = (BattleEffectPlayRule)translator.FastGetCSObj(L, 1); LuaAPI.xlua_pushinteger(L, gen_to_be_invoked.guardLimit); } catch(System.Exception gen_e) { return LuaAPI.luaL_error(L, "c# exception:" + gen_e); } return 1; } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _g_get_sortPlayerList(RealStatePtr L) { try { @@ -165,21 +282,6 @@ } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _s_set_sortPlayerList(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); BattleEffectPlayRule gen_to_be_invoked = (BattleEffectPlayRule)translator.FastGetCSObj(L, 1); gen_to_be_invoked.sortPlayerList = (System.Collections.Generic.List<uint>)translator.GetObject(L, 2, typeof(System.Collections.Generic.List<uint>)); } catch(System.Exception gen_e) { return LuaAPI.luaL_error(L, "c# exception:" + gen_e); } return 0; } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _s_set_timeEscape(RealStatePtr L) Lua/Gen/BattleEffectPlayRuleWrap.cs.meta
@@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 9af4f8cb7bea139439969d8767ea1d39 timeCreated: 1543808664 timeCreated: 1543992918 licenseType: Pro MonoImporter: serializedVersion: 2 System/GeneralConfig/GeneralDefine.cs
@@ -146,9 +146,15 @@ public static List<Item> ancientKingAwards = new List<Item>(); public static int lowQualityCount { get; private set; } public static int medQualityCount { get; private set; } public static int highQualityCount { get; private set; } public static int lowQualityEffectCount { get; private set; } public static int medQualityEffectCount { get; private set; } public static int highQualityEffectCount { get; private set; } public static int lowQualityPetCount { get; private set; } public static int medQualityPetCount { get; private set; } public static int highQualityPetCount { get; private set; } public static int lowQualityGuardCount { get; private set; } public static int medQualityGuardCount { get; private set; } public static int highQualityGuardCount { get; private set; } public static int fairyLandBuffCondition { get; private set; } public static int fairyLandBuffId { get; private set; } @@ -524,9 +530,19 @@ } func = Config.Instance.Get<FuncConfigConfig>("QualityEffectConfig"); lowQualityCount = int.Parse(func.Numerical1); medQualityCount = int.Parse(func.Numerical2); highQualityCount = int.Parse(func.Numerical3); lowQualityEffectCount = int.Parse(func.Numerical1); medQualityEffectCount = int.Parse(func.Numerical2); highQualityEffectCount = int.Parse(func.Numerical3); func = Config.Instance.Get<FuncConfigConfig>("QualityPetCountConfig"); lowQualityPetCount = int.Parse(func.Numerical1); medQualityPetCount = int.Parse(func.Numerical2); highQualityPetCount = int.Parse(func.Numerical3); func = Config.Instance.Get<FuncConfigConfig>("QualityGuardCountConfig"); lowQualityGuardCount = int.Parse(func.Numerical1); medQualityGuardCount = int.Parse(func.Numerical2); highQualityGuardCount = int.Parse(func.Numerical3); fairyLandBuffCondition = GetInt("XjmjAddHarm", 1); fairyLandBuffId = GetInt("XjmjAddHarm", 2);