| | |
| | | |
| | | HB423_tagMCTurnFightObjReborn vNetData = vNetPack as HB423_tagMCTurnFightObjReborn; |
| | | BattleField battleField = BattleManager.Instance.GetBattleField(vNetPack.packUID); |
| | | battleField?.OnObjReborn(vNetData); |
| | | } |
| | | } |
| | |
| | | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | |
| | | public static class BattleConst |
| | | { |
| | | #region 战斗窗口配置 |
| | | |
| | | public static List<Type> BattleWindows = new List<Type>() |
| | | { |
| | | typeof(BattleWin), |
| | |
| | | { "BoneBattleField", 3}, |
| | | { "TianziBillboradBattleField", 4 }, |
| | | }; |
| | | |
| | | #endregion |
| | | |
| | | #region 战斗基础配置 |
| | | |
| | | public const int BattleStartEffectID = 1001; // Example effect ID for battle start |
| | | |
| | | public const int skillMotionFps = 30; |
| | | |
| | | public const int BattlePointItemID = 3;//战锤ID |
| | | |
| | | #endregion |
| | | |
| | | #region 战斗统计类型 |
| | | |
| | | public const int BattleTotalDamageType = 100001; // 总伤害类型ID |
| | | |
| | | public const int BattleTotalRecoverType = 100002; // 总治疗类型ID |
| | |
| | | public const int BattleChaseAttack = 100005; // 追击 |
| | | |
| | | public const int BattleStun = 100006; // 击晕 |
| | | |
| | | #endregion |
| | | |
| | | #region 战斗层级排序 |
| | | |
| | | // 1000~10000之间的战斗层级 |
| | | // 需要考虑根据UI 特效 战斗角色三方的层级关系 |
| | | // 确立基本的层级范围 后往上累加 |
| | |
| | | return ActiveHeroActionSortingOrder + 1; |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region Buff限制组 |
| | | |
| | | public const int HardControlGroup = 1; |
| | | |
| | | public const int SoftControlGroup = 2; |
| | |
| | | }; |
| | | |
| | | public const int ShieldBuffAttackType = 1003;//护盾吸收伤害类型ID |
| | | |
| | | #endregion |
| | | |
| | | #region 特效ID |
| | | |
| | | public const int BlockEffectID = 19999; // 格挡特效ID |
| | | |
| | | public const int RebornEffectID = 20000; // 复活特效ID |
| | | |
| | | #endregion |
| | | } |
| | |
| | | }; |
| | | } |
| | | |
| | | |
| | | public void OnObjReborn(HB423_tagMCTurnFightObjReborn vNetData) |
| | | { |
| | | // 处理复活逻辑 |
| | | BattleObject battleObj = battleObjMgr.GetBattleObject((int)vNetData.ObjID); |
| | | if (battleObj != null) |
| | | { |
| | | battleObj.OnReborn(vNetData); |
| | | |
| | | // 从死亡处理列表中移除该角色 |
| | | if (processingDeathObjIds.Remove(vNetData.ObjID)) |
| | | { |
| | | Debug.Log($"OnObjReborn: 角色复活,从死亡处理列表移除 ObjID={vNetData.ObjID}"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Debug.LogError($"BattleObject with ID {vNetData.ObjID} not found for reborn."); |
| | | } |
| | | } |
| | | |
| | | //各个战场没有场景概念,且可以共存,同时存在战场和结算的情况 |
| | | //内部结算需要处理的逻辑,不含UI |
| | | protected virtual void OnSettlement(JsonData turnFightStateData) |
| | |
| | | { |
| | | if (dmgInfo.IsType(DamageType.Block)) |
| | | { |
| | | battleField.battleEffectMgr.PlayEffect(this, 19999, heroRectTrans, Camp); |
| | | battleField.battleEffectMgr.PlayEffect(this, BattleConst.BlockEffectID, heroRectTrans, Camp); |
| | | } |
| | | // else |
| | | // { |
| | |
| | | buffMgr.RemoveAllBuff(); |
| | | } |
| | | |
| | | public void OnReborn(HB423_tagMCTurnFightObjReborn vNetData) |
| | | public void OnReborn(HB427_tagSCUseSkill.tagSCUseSkillHurt vNetData) |
| | | { |
| | | // 处理复活逻辑 |
| | | teamHero.curHp = GeneralDefine.GetFactValue(vNetData.HP, vNetData.HPEx); |
| | | teamHero.curHp = GeneralDefine.GetFactValue(vNetData.CurHP, vNetData.CurHPEx); |
| | | teamHero.isDead = false; |
| | | heroGo.SetActive(true); |
| | | motionBase.PlayAnimation(MotionName.idle, true); |
| | | motionBase.ResetToIdleAnimation(); |
| | | } |
| | | |
| | | // 伤害还要看 是否闪避 暴击 and so on 需要有一个DamageType 服务器应该会给 |
| | |
| | | /// </summary> |
| | | private int ValidateAndFixAttackType(int attackType) |
| | | { |
| | | if (IsType(DamageType.Stunned)) |
| | | { |
| | | // 特殊处理击晕类型 |
| | | // 去掉击晕类型 |
| | | attackType &= ~(int)DamageType.Stunned; |
| | | } |
| | | |
| | | if (DamageNumConfig.Get(attackType) != null) |
| | | return attackType; |
| | | |
| | |
| | | |
| | | public void HaveRest() |
| | | { |
| | | animState?.ClearTracks(); |
| | | |
| | | trackEntryCallbacks.Clear(); |
| | | runningActions.Clear(); |
| | | activeSkillTracks.Clear(); |
| | |
| | | subSkillTrackMap.Clear(); |
| | | for (int i = 1; i <= 8; i++) |
| | | availableSubTracks.Enqueue(i); |
| | | |
| | | currentTrack = null; |
| | | |
| | | playingSkillAnim = false; |
| | | PlayAnimation(MotionName.idle, true); |
| | |
| | | illusionShadow.Show(isVisible, color); |
| | | } |
| | | } |
| | | |
| | | internal void ResetToIdleAnimation() |
| | | { |
| | | // 清空之前的状态 |
| | | HaveRest(); |
| | | } |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | protected override void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList) |
| | | { |
| | | for (int i = 0; i < hitList.Count; i++) |
| | | { |
| | | var hitInfo = hitList[i]; |
| | | BattleObject targetObj = battleField.battleObjMgr.GetBattleObject((int)hitInfo.ObjID); |
| | | if (targetObj != null) |
| | | { |
| | | targetObj.battleField.battleEffectMgr.PlayEffect(targetObj, BattleConst.RebornEffectID, targetObj.heroRectTrans, targetObj.Camp); |
| | | // B427中 tagSCUseSkillHurt 为复活的目标, HurtHP、HurtHPEx - 复活回血, CurHP、CurHPEx - 复活后的血量 |
| | | targetObj.OnReborn(hitInfo); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | case 4: |
| | | skill = new DotSkill(_caster, skillConfig, vNetData, packList, battleField); |
| | | break; |
| | | case 8: |
| | | skill = new RebornSkill(_caster, skillConfig, vNetData, packList, battleField); |
| | | break; |
| | | case 5: |
| | | case 6: |
| | | case 14: |
| | |
| | | if (null == bossBattleObject) |
| | | return; |
| | | |
| | | if (bossBattleObject.teamHero.ObjID == info.battleHurtParam.hurter.hurtObj.teamHero.ObjID) |
| | | if (info.battleHurtParam.hurter.hurtObj != null && bossBattleObject.teamHero.ObjID == info.battleHurtParam.hurter.hurtObj.teamHero.ObjID) |
| | | { |
| | | bossLifeBar.Show((ulong)info.battleHurtParam.hurter.toHp, (ulong)bossBattleObject.teamHero.maxHp); |
| | | } |
| | | else if (bossBattleObject.teamHero.ObjID == info.battleHurtParam.caster.casterObj.teamHero.ObjID) |
| | | else if (info.battleHurtParam.caster.casterObj != null && bossBattleObject.teamHero.ObjID == info.battleHurtParam.caster.casterObj.teamHero.ObjID) |
| | | { |
| | | bossLifeBar.Show((ulong)info.battleHurtParam.caster.toHp, (ulong)bossBattleObject.teamHero.maxHp); |
| | | } |