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,
}
}