diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BaseBuff.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BaseBuff.cs index 2483a94b114..85bbc0c03db 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BaseBuff.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BaseBuff.cs @@ -28,7 +28,7 @@ namespace Gameplay.Buff } } - private bool _needRemove; + private bool _needRemove = false; public bool needRemove { get @@ -36,13 +36,11 @@ namespace Gameplay.Buff switch (configData.ExistType) { case EExistType.Once: - return true; + return _needRemove; case EExistType.During: return runtimeData.passTime >= configData.MaxExistTime; case EExistType.Allways: return false; - case EExistType.AfterReload: - return _needRemove; default: DebugUtil.LogError("暂未处理的buff existType:{0}",configData.ExistType); return true; @@ -66,6 +64,7 @@ namespace Gameplay.Buff this.creator = creator; this.configData = configData; isParamOverride = false; + _needRemove = false; if (runtimeData == null) { runtimeData = new BuffRuntimeData(); @@ -91,6 +90,16 @@ namespace Gameplay.Buff } + public void Trigger() + { + _OnTrigger(); + + if (configData.ExistType == EExistType.Once) + { + _needRemove = true; + } + } + protected virtual void _OnTrigger() { @@ -104,11 +113,11 @@ namespace Gameplay.Buff public void TriggerAdd() { - _OnAdd(); if (configData.TriggerType == ETriggerType.ON_ADD) { - _OnTrigger(); + Trigger(); } + _OnAdd(); if (configData.ExistType == EExistType.During || configData.ExistType == EExistType.Allways) @@ -136,11 +145,11 @@ namespace Gameplay.Buff public void TriggerRemove() { - _OnRemove(); if (configData.TriggerType == ETriggerType.ON_REMOVE) { - _OnTrigger(); + Trigger(); } + _OnRemove(); if (_existEffectData != null) { @@ -158,7 +167,7 @@ namespace Gameplay.Buff _remainTriggerTime -= dt; if (_remainTriggerTime <= 0) { - _OnTrigger(); + Trigger(); _remainTriggerTime += configData.TiggerUnitTime; } } @@ -170,23 +179,13 @@ namespace Gameplay.Buff { runtimeData.passTime = 0; } - - public void TriggerOnReload() + + public void SpecialTrigger(ETriggerType triggerType) { - if (configData.TriggerType == ETriggerType.ON_RELOAD) + if (configData.TriggerType == triggerType) { - _OnTrigger(); + Trigger(); } - if (configData.ExistType == EExistType.AfterReload) - { - _needRemove = true; - } - _OnReload(); - } - - protected virtual void _OnReload() - { - } protected virtual void _OnLogicUpdate(float dt) diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BuffManager.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BuffManager.cs index 51ce27e9bd5..6c0134d533e 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BuffManager.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BuffManager.cs @@ -207,6 +207,7 @@ namespace Gameplay.Buff _unitDict.Add(c, unitManager); _unitList.Add(unitManager); + // 默认全局buff var autoRecoverMoraleBuff = CreateBuffById(c, InnerBuffID.AUTO_RECOVER_MORALE); unitManager.AddBuff(autoRecoverMoraleBuff); diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/UnitBuffManager.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/UnitBuffManager.cs index 5e268a9f25d..a08c58fdac3 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/UnitBuffManager.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/UnitBuffManager.cs @@ -224,14 +224,29 @@ namespace Gameplay.Buff } public void TriggerReload() + { + _InnerTrigger(ETriggerType.ON_RELOAD); + } + + public void TriggerEnterBattle() + { + _InnerTrigger(ETriggerType.ON_ENTER_BATTLE); + } + + public void TriggerExitBattle() + { + _InnerTrigger(ETriggerType.ON_EXIT_BATTLE); + } + + private void _InnerTrigger(ETriggerType triggerType) { for (int i = 0; i < totalBuffList.Count; i++) { var buff = totalBuffList[i]; if (buff.needRemove) continue; - buff.TriggerOnReload(); + buff.SpecialTrigger(triggerType); } } - + } } diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Character/CharacterManager.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Character/CharacterManager.cs index 71593955c4c..18f6b5769db 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Character/CharacterManager.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Character/CharacterManager.cs @@ -126,6 +126,8 @@ namespace Gameplay.Character _characterDict.Add(character.GetID(), character); _characterList.Add(character); _AddToTroop(character); + + character.buffManager.TriggerEnterBattle(); } private void _RemoveCharacter(Character c, @@ -380,6 +382,8 @@ namespace Gameplay.Character if (character.runtimeData.needRemove) { + // 触发buff + character.buffManager.TriggerExitBattle(); _RemoveCharacter(character, i); i--; } diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Common/Data/UnitFightData.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Common/Data/UnitFightData.cs index 64b8dbf6d98..5a93c79a918 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Common/Data/UnitFightData.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Common/Data/UnitFightData.cs @@ -120,6 +120,11 @@ namespace Gameplay.Common /// 第一次开枪时间 /// public ObscuredFloat firstShootTime; + + /// + /// 士气恢复缩放 + /// + public ObscuredFloat moraleRecoverScale = 1f; /// /// 装弹时间 diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/SkillManager.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/SkillManager.cs index fcee86ee1f7..730e967638a 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/SkillManager.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/SkillManager.cs @@ -114,6 +114,11 @@ namespace Gameplay.Skill var addUnit = new UnitSkillManager(charactor); // 增加主动技能 await addUnit.AddSkill(charactor.runtimeData.configData.skillId); + + // 获取主动技能 + var skill = addUnit.positiveSkill; + // 增加附带的被动buff技能 + addUnit.AddPassiveBuffIds(skill.runtimeData.configData.PassiveBuffIds); _AddToManager(charactor, addUnit); } @@ -125,6 +130,11 @@ namespace Gameplay.Skill // 增加主动技能 await addUnit.AddSkill(vehicle.runtimeData.configData.skillId); + // 获取主动技能 + var skill = addUnit.positiveSkill; + // 增加附带的被动buff技能 + addUnit.AddPassiveBuffIds(skill.runtimeData.configData.PassiveBuffIds); + _AddToManager(vehicle, addUnit); } diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/UnitSkillManager.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/UnitSkillManager.cs index 1fdbaa519d4..04e57f5d892 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/UnitSkillManager.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/UnitSkillManager.cs @@ -54,6 +54,16 @@ namespace Gameplay.Skill return true; } + public void AddPassiveBuffIds(List buffIds) + { + if (buffIds == null || buffIds.Count == 0) return; + for (var i = 0; i < buffIds.Count; ++i) + { + var buffId = buffIds[i]; + owner.buffManager.AddBuffById(buffId); + } + } + public void LogicUpdate(float dt) { for (var i = 0; i < handles.Count; ++i) diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Vehicle/Impl/NormalVehicle.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Vehicle/Impl/NormalVehicle.cs index ba5459aa4a4..e577c23a5f4 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Vehicle/Impl/NormalVehicle.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Vehicle/Impl/NormalVehicle.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using Cysharp.Threading.Tasks; using Framework; +using Gameplay.Buff; using Gameplay.Bullet; using Gameplay.Common; using Gameplay.Level; @@ -65,10 +66,13 @@ namespace Gameplay.Vehicle.Impl _InitFsm(); - EventManager.Instance.Send(EventManager.EventName.INFIGHT_UNIT_READY, this); - isReady = true; - + BuffManager.instance.InitVehicle(this); await SkillManager.instance.InitVehicle(this); + + buffManager.TriggerEnterBattle(); + + isReady = true; + EventManager.Instance.Send(EventManager.EventName.INFIGHT_UNIT_READY, this); } private void _InitProps() diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Vehicle/VehicleManager.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Vehicle/VehicleManager.cs index a4705798b52..4f8054e6105 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Vehicle/VehicleManager.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Vehicle/VehicleManager.cs @@ -64,8 +64,6 @@ namespace Gameplay.Vehicle private void _AddVehicle(NormalVehicle vehicle) { _vehicles.Add(vehicle); - - BuffManager.instance.InitVehicle(vehicle); } private void _RegistEvents() diff --git a/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/EBuffType.cs b/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/EBuffType.cs index 4b8cc63dcc5..d6d703be555 100644 --- a/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/EBuffType.cs +++ b/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/EBuffType.cs @@ -103,6 +103,14 @@ namespace cfg.BuffCfg /// 每X秒回复Y点护甲值 /// LoopRecoverShiled = 22, + /// + /// 添加己方全局buff + /// + AddSelfSideBuff = 23, + /// + /// 移除己方全局buff + /// + RemoveSelfSideBuff = 24, } } diff --git a/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/EExistType.cs b/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/EExistType.cs index 5ee969d3aef..c041bf057e4 100644 --- a/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/EExistType.cs +++ b/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/EExistType.cs @@ -23,10 +23,6 @@ namespace cfg.BuffCfg /// 持续一段时间 /// During = 2, - /// - /// 换弹后移除 - /// - AfterReload = 3, } } diff --git a/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/ETriggerType.cs b/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/ETriggerType.cs index e65f1fc8555..259b88da2b6 100644 --- a/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/ETriggerType.cs +++ b/ProjectNLD/Assets/Code/Scripts/GenCode/Luban/DataTable/BuffCfg/ETriggerType.cs @@ -31,6 +31,14 @@ namespace cfg.BuffCfg /// 换弹时触发 /// ON_RELOAD = 4, + /// + /// 上场时触发 + /// + ON_ENTER_BATTLE = 5, + /// + /// 下场时触发 + /// + ON_EXIT_BATTLE = 6, } }