技能调整

This commit is contained in:
wuwenbo 2025-06-10 15:35:53 +08:00
parent 7a316ec5d5
commit 1501f5aef1
11 changed files with 56 additions and 59 deletions

View File

@ -251,16 +251,6 @@ namespace RuntimeData
{
foreach (var skill in Skills)skill.OnTurnEnd(this, map);
}
public void OnUnitDamage(UnitData damagedUnit, MapData mapData)
{
foreach (var skill in Skills)skill.OnUnitDamage(damagedUnit, mapData);
}
public void OnUnitMove(UnitData moveUnit, GridData target, MapData mapData)
{
foreach (var skill in Skills)skill.OnUnitMove(moveUnit, target, mapData);
}
// 尝试升级城市
public bool TryUpgradeCity()

View File

@ -336,16 +336,6 @@ namespace RuntimeData
{
foreach (var skill in Skills) skill.OnTurnEnd(this, map);
}
public void OnUnitDamage(UnitData damagedUnit, MapData mapData)
{
foreach (var skill in Skills) skill.OnUnitDamage(damagedUnit, mapData);
}
public void OnUnitMove(UnitData moveUnit, GridData target, MapData mapData)
{
foreach (var skill in Skills) skill.OnUnitMove(moveUnit, target, mapData);
}
}

View File

@ -808,12 +808,21 @@ namespace RuntimeData
}
}
// 当场上有小兵受伤
public void OnUnitDamage(UnitData damageUnit)
// 当场上有小兵攻击
public void OnUnitAttack(UnitData origin, UnitData target)
{
foreach (var idBase in GetAllIdentifierBase())
{
foreach (var skill in idBase.Skills) skill.OnUnitDamage(damageUnit, this);
foreach (var skill in idBase.Skills) skill.OnUnitAttack(idBase, origin, target, this);
}
}
// 当场上有小兵受伤时
public void OnUnitDamage(UnitData origin, UnitData target)
{
foreach (var idBase in GetAllIdentifierBase())
{
foreach (var skill in idBase.Skills) skill.OnUnitDamage(idBase, origin, target, this);
}
}
@ -822,7 +831,7 @@ namespace RuntimeData
{
foreach (var idBase in GetAllIdentifierBase())
{
foreach (var skill in idBase.Skills) skill.OnUnitMove(moveUnit, target, this);
foreach (var skill in idBase.Skills) skill.OnUnitMove(idBase, moveUnit, target, this);
}
}

View File

@ -318,17 +318,6 @@ namespace RuntimeData
{
foreach (var skill in Skills)skill.OnTurnEnd(this, map);
}
public void OnUnitDamage(UnitData damagedUnit, MapData mapData)
{
foreach (var skill in Skills)skill.OnUnitDamage(damagedUnit, mapData);
}
public void OnUnitMove(UnitData moveUnit, GridData target, MapData mapData)
{
foreach (var skill in Skills)skill.OnUnitMove(moveUnit, target, mapData);
}
}

View File

@ -310,16 +310,6 @@ namespace RuntimeData
{
foreach (var skill in Skills)skill.OnTurnEnd(this, map);
}
public void OnUnitDamage(UnitData damagedUnit, MapData mapData)
{
foreach (var skill in Skills)skill.OnUnitDamage(damagedUnit, mapData);
}
public void OnUnitMove(UnitData moveUnit, GridData target, MapData mapData)
{
foreach (var skill in Skills)skill.OnUnitMove(moveUnit, target, mapData);
}
//返回该unit的视野半径
public int GetSightRange()

View File

@ -7,6 +7,8 @@
using System;
using System.Collections.Generic;
using RuntimeData;
namespace Logic.Skill
@ -25,6 +27,24 @@ namespace Logic.Skill
{
return SkillType.ALLYCOUNTER;
}
public override void OnUnitAttack(IdentifierBase identifier, UnitData origin, UnitData target, MapData mapData)
{
if (identifier is not UnitData self) return;
if (!mapData.GetGridDataByUnitId(self.Id, out var selfGrid)) return;
var selfUnitList = new HashSet<UnitData>();
mapData.GetUnitDataListByPlayerId(mapData.PlayerMap.SelfPlayerId, selfUnitList);
if (selfUnitList.Contains(origin)) return;
if (!selfUnitList.Contains(target)) return;
if (!mapData.GetGridDataByUnitId(origin.Id, out var originGrid)) return;
if (!mapData.GetGridDataByUnitId(target.Id, out var targetGrid)) return;
var roundGrids = mapData.GridMap.GetAroundGridDataSet(2, 2, selfGrid);
if (!roundGrids.Contains(originGrid) || !roundGrids.Contains(targetGrid)) return;
if (Main.UnitLogic.TryKillUnit(mapData, self, self, 3)) return;
Main.UnitLogic.TryDamageUnit(mapData, self, self, 3);
}
}
}

View File

@ -25,10 +25,5 @@ namespace Logic.Skill
{
return SkillType.ROYALFLAMES;
}
public override void OnDamageOther(UnitData self, UnitData target, MapData mapData, int dmg)
{
self.Health = (int)(self.Health * 1.3f);
}
}
}

View File

@ -27,8 +27,7 @@ namespace Logic.Skill
{
return SkillType.STOMP;
}
public override void OnMove(UnitData self, GridData grid, MapData mapData, MoveType moveType)
{
var selfUnitList = new HashSet<UnitData>();

View File

@ -7,6 +7,7 @@
using System;
using RuntimeData;
namespace Logic.Skill
@ -25,5 +26,10 @@ namespace Logic.Skill
{
return SkillType.VAMPIRE;
}
public override void OnDamageOther(UnitData self, UnitData target, MapData mapData, int dmg)
{
self.Health = (int)Math.Round(self.Health * 1.3f);
}
}
}

View File

@ -120,10 +120,13 @@ namespace Logic.Skill
// 全局技能
// 当有单位受伤时
public void OnUnitDamage(UnitData damagedUnit, MapData mapData);
public void OnUnitDamage(IdentifierBase identifier, UnitData origin, UnitData target, MapData mapData);
// 当有单位攻击时
public void OnUnitAttack(IdentifierBase identifier, UnitData origin, UnitData target, MapData mapData);
// 当有单位移动时
public void OnUnitMove(UnitData moveUnit, GridData target, MapData mapData);
public void OnUnitMove(IdentifierBase identifier, UnitData moveUnit, GridData target, MapData mapData);
}
[Serializable]
@ -376,12 +379,17 @@ namespace Logic.Skill
return 0;
}
public virtual void OnUnitDamage(UnitData damagedUnit, MapData mapData)
public virtual void OnUnitDamage(IdentifierBase identifier, UnitData origin, UnitData target, MapData mapData)
{
}
public virtual void OnUnitAttack(IdentifierBase identifier, UnitData origin, UnitData target, MapData mapData)
{
}
public virtual void OnUnitMove(UnitData moveUnit, GridData target, MapData mapData)
public virtual void OnUnitMove(IdentifierBase identifier, UnitData moveUnit, GridData target, MapData mapData)
{
}

View File

@ -85,6 +85,7 @@ namespace Logic
if (!mapData.GetCityDataByUnitId(unit2.Id, out var city2)) return false;
if (!mapData.GetGridDataByUnitId(unit1.Id, out var grid1)) return false;
if (!mapData.GetGridDataByUnitId(unit2.Id, out var grid2)) return false;
mapData.OnUnitAttack(unit1, unit2);
unit1.BeforeAttack(mapData, unit2);
player1.TurnNoAttack = 0;
@ -243,7 +244,7 @@ namespace Logic
foreach (var skill in target.Skills) skill.OnDeath(target, origin, mapData);
foreach (var skill in origin.Skills) skill.OnDamageOther(origin, target, mapData, dmg);
foreach (var skill in origin.Skills) skill.OnKill(origin, target, mapData);
mapData.OnUnitDamage(target);
mapData.OnUnitDamage(origin, target);
Main.UnitLogic.Die(mapData, target);
return true;
}
@ -253,7 +254,7 @@ namespace Logic
target.Health -= dmg;
foreach (var skill in target.Skills) skill.OnDamage(target, origin, mapData, dmg);
foreach (var skill in origin.Skills) skill.OnDamageOther(origin, target, mapData, dmg);
mapData.OnUnitDamage(target);
mapData.OnUnitDamage(origin, target);
return true;
}