Skip to content

Commit

Permalink
Skip clone CharacterBase
Browse files Browse the repository at this point in the history
  • Loading branch information
ipdae committed Jul 12, 2023
1 parent 52b1025 commit 6caf915
Show file tree
Hide file tree
Showing 18 changed files with 77 additions and 82 deletions.
10 changes: 6 additions & 4 deletions Lib9c/Battle/RaidBoss.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ protected override BattleStatus.Skill UseSkill()
Simulator.StatBuffSheet,
Simulator.SkillActionBuffSheet,
Simulator.ActionBuffSheet
)
),
false
);

Simulator.Log.Add(usedSkill);
Expand Down Expand Up @@ -145,16 +146,17 @@ public void Enrage()
Simulator.StatBuffSheet,
Simulator.SkillActionBuffSheet,
Simulator.ActionBuffSheet
)
),
false
);

Simulator.Log.Add(usedSkill);
foreach (var info in usedSkill.SkillInfos)
{
if (!info.Target.IsDead)
if (!info.IsDead)
continue;

var target = Targets.FirstOrDefault(i => i.Id == info.Target.Id);
var target = Targets.FirstOrDefault(i => i.Id == info.Id);
target?.Die();
}
}
Expand Down
2 changes: 1 addition & 1 deletion Lib9c/Battle/StageSimulator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public Player Simulate(bool log = false)
ActionBuffSheet
);

skill.Use(Player, 0, buffs);
skill.Use(Player, 0, buffs, log);
}

while (true)
Expand Down
4 changes: 2 additions & 2 deletions Lib9c/Battle/StageSimulatorV1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ CostumeStatSheet costumeStatSheet
{
Player.SetCostumeStat(costumeStatSheet);
}

public Player Simulate(int playCount)
{
Log.worldId = WorldId;
Expand Down Expand Up @@ -331,7 +331,7 @@ public Player Simulate(int playCount)
ActionBuffSheet
);

var usedSkill = skill.Use(Player, 0, buffs);
var usedSkill = skill.Use(Player, 0, buffs, false);
Log.Add(usedSkill);
}

Expand Down
2 changes: 1 addition & 1 deletion Lib9c/Battle/StageSimulatorV2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ public Player Simulate()
ActionBuffSheet
);

var usedSkill = skill.Use(Player, 0, buffs);
var usedSkill = skill.Use(Player, 0, buffs, false);
Log.Add(usedSkill);
}

Expand Down
2 changes: 1 addition & 1 deletion Lib9c/Battle/StageSimulatorV3.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public Player Simulate()
ActionBuffSheet
);

var usedSkill = skill.Use(Player, 0, buffs);
var usedSkill = skill.Use(Player, 0, buffs, false);
Log.Add(usedSkill);
}

Expand Down
14 changes: 9 additions & 5 deletions Lib9c/Model/BattleStatus/Skill.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,26 @@ public abstract class Skill : EventBase
[Serializable]
public class SkillInfo
{
public readonly CharacterBase Target;
public readonly int Effect;
public readonly bool Critical;
public readonly SkillCategory SkillCategory;
public readonly ElementalType ElementalType;
public readonly SkillTargetType SkillTargetType;
public readonly int WaveTurn;
public readonly int Thorn;
public readonly bool IsDead;
public readonly Guid Id;



public readonly Model.Buff.Buff? Buff;

public SkillInfo(CharacterBase character, int effect, bool critical, SkillCategory skillCategory,
public SkillInfo(Guid id, bool isDead, int thorn, int effect, bool critical, SkillCategory skillCategory,
int waveTurn, ElementalType elementalType = ElementalType.Normal,
SkillTargetType targetType = SkillTargetType.Enemy, Model.Buff.Buff? buff = null)
{
Target = character;
Id = id;
IsDead = isDead;
Thorn = thorn;
Effect = effect;
Critical = critical;
SkillCategory = skillCategory;
Expand All @@ -42,7 +46,7 @@ public SkillInfo(CharacterBase character, int effect, bool critical, SkillCatego

public readonly IEnumerable<SkillInfo> SkillInfos;


public readonly IEnumerable<SkillInfo>? BuffInfos;

protected Skill(int skillId, CharacterBase character, IEnumerable<SkillInfo> skillInfos,
Expand Down
2 changes: 1 addition & 1 deletion Lib9c/Model/Buff/Bleed.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public override BattleStatus.Skill GiveEffect(

var damageInfos = new List<BattleStatus.Skill.SkillInfo>
{
new BattleStatus.Skill.SkillInfo((CharacterBase)affectedCharacter.Clone(), damage, false,
new BattleStatus.Skill.SkillInfo(affectedCharacter.Id, affectedCharacter.IsDead, affectedCharacter.Thorn, damage, false,
SkillCategory.Debuff, simulatorWaveTurn, RowData.ElementalType,
RowData.TargetType)
};
Expand Down
55 changes: 25 additions & 30 deletions Lib9c/Model/Character/CharacterBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,8 @@ protected virtual BattleStatus.Skill UseSkill()
Simulator.StatBuffSheet,
Simulator.SkillActionBuffSheet,
Simulator.ActionBuffSheet
)
),
false
);

if (!Simulator.SkillSheet.TryGetValue(selectedSkill.SkillRow.Id, out var sheetSkill))
Expand Down Expand Up @@ -278,7 +279,8 @@ private BattleStatus.Skill UseSkillV1()
Simulator.StatBuffSheet,
Simulator.SkillActionBuffSheet,
Simulator.ActionBuffSheet
)
),
false
);

Skills.SetCooldown(selectedSkill.SkillRow.Id, selectedSkill.SkillRow.Cooldown);
Expand All @@ -301,7 +303,8 @@ private BattleStatus.Skill UseSkillV2()
Simulator.StatBuffSheet,
Simulator.SkillActionBuffSheet,
Simulator.ActionBuffSheet
)
),
false
);

Skills.SetCooldown(selectedSkill.SkillRow.Id, selectedSkill.SkillRow.Cooldown);
Expand Down Expand Up @@ -566,9 +569,9 @@ protected virtual void OnPostSkill(BattleStatus.Skill usedSkill)
skillInfo.SkillCategory == SkillCategory.DoubleAttack ||
skillInfo.SkillCategory == SkillCategory.AreaAttack ||
skillInfo.SkillCategory == SkillCategory.BuffRemovalAttack;
if (isAttackSkill && skillInfo.Target.Thorn > 0)
if (isAttackSkill && skillInfo.Thorn > 0)
{
var effect = GiveThornDamage(skillInfo.Target.Thorn);
GiveThornDamage(skillInfo.Thorn);
// Simulator.Log.Add(effect);
}
}
Expand All @@ -582,39 +585,31 @@ protected virtual void OnPostSkill(BattleStatus.Skill usedSkill)
FinishTargetIfKilled(usedSkill);
}

private BattleStatus.Skill GiveThornDamage(int targetThorn)
private void GiveThornDamage(int targetThorn)
{
var clone = (CharacterBase)Clone();
// var clone = (CharacterBase)Clone();
// minimum 1 damage
var thornDamage = Math.Max(1, targetThorn - DEF);
CurrentHP -= thornDamage;
var damageInfos = new List<BattleStatus.Skill.SkillInfo>()
{
new BattleStatus.Skill.SkillInfo(
(CharacterBase)Clone(),
thornDamage,
false,
SkillCategory.TickDamage,
Simulator.WaveTurn,
ElementalType.Normal,
SkillTargetType.Enemy)
};

var tickDamage = new TickDamage(
default,
clone,
damageInfos,
null);

return tickDamage;
// var damageInfos = new List<BattleStatus.Skill.SkillInfo>()
// {
// new BattleStatus.Skill.SkillInfo(
// (CharacterBase)Clone(),
// thornDamage,
// false,
// SkillCategory.TickDamage,
// Simulator.WaveTurn,
// ElementalType.Normal,
// SkillTargetType.Enemy)
// };
}

private void FinishTargetIfKilledForBeforeV100310(BattleStatus.Skill usedSkill)
{
var isFirst = true;
foreach (var info in usedSkill.SkillInfos)
{
if (!info.Target.IsDead)
if (!info.IsDead)
{
continue;
}
Expand All @@ -626,7 +621,7 @@ private void FinishTargetIfKilledForBeforeV100310(BattleStatus.Skill usedSkill)
}

var target = Targets.FirstOrDefault(i =>
i.Id == info.Target.Id);
i.Id == info.Id);
switch (target)
{
case Player player:
Expand Down Expand Up @@ -655,12 +650,12 @@ private void FinishTargetIfKilled(BattleStatus.Skill usedSkill)
var killedTargets = new List<CharacterBase>();
foreach (var info in usedSkill.SkillInfos)
{
if (!info.Target.IsDead)
if (!info.IsDead)
{
continue;
}

var target = Targets.FirstOrDefault(i => i.Id == info.Target.Id);
var target = Targets.FirstOrDefault(i => i.Id == info.Id);
if (!killedTargets.Contains(target))
{
killedTargets.Add(target);
Expand Down
3 changes: 2 additions & 1 deletion Lib9c/Model/Character/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,8 @@ protected override BattleStatus.Skill UseSkill()
Simulator.StatBuffSheet,
Simulator.SkillActionBuffSheet,
Simulator.ActionBuffSheet
)
),
false
);

var cooldown = RuneSkillCooldownMap[selectedSkill.SkillRow.Id];
Expand Down
9 changes: 4 additions & 5 deletions Lib9c/Model/Skill/AreaAttack.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@ public AreaAttack(
{
}

public override Model.BattleStatus.Skill Use(
CharacterBase caster,
int simulatorWaveTurn,
IEnumerable<Buff.Buff> buffs)
public override BattleStatus.Skill Use(CharacterBase caster,
int simulatorWaveTurn,
IEnumerable<Buff.Buff> buffs, bool b)
{
var clone = (CharacterBase) caster.Clone();
var clone = b ? (CharacterBase) caster.Clone() : null;
var damage = ProcessDamage(caster, simulatorWaveTurn);
var buff = ProcessBuff(caster, simulatorWaveTurn, buffs);

Expand Down
5 changes: 3 additions & 2 deletions Lib9c/Model/Skill/AttackSkill.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ protected AttackSkill(
/// <param name="isNormalAttack"></param>
/// <returns></returns>
protected IEnumerable<BattleStatus.Skill.SkillInfo> ProcessDamage(CharacterBase caster, int simulatorWaveTurn,
bool isNormalAttack = false)
bool isNormalAttack = false, bool b = false)
{
var infos = new List<BattleStatus.Skill.SkillInfo>();
var targets = SkillRow.SkillTargetType.GetTarget(caster).ToList();
Expand Down Expand Up @@ -86,7 +86,8 @@ protected AttackSkill(
target.CurrentHP -= damage;
}

infos.Add(new BattleStatus.Skill.SkillInfo((CharacterBase) target.Clone(), damage, isCritical,
var clone = b ? (CharacterBase) target.Clone() : null;
infos.Add(new BattleStatus.Skill.SkillInfo(target.Id, target.IsDead, target.Thorn, damage, isCritical,
SkillRow.SkillCategory, simulatorWaveTurn, SkillRow.ElementalType,
SkillRow.SkillTargetType));
}
Expand Down
7 changes: 3 additions & 4 deletions Lib9c/Model/Skill/BlowAttack.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@ public BlowAttack(
{
}

public override BattleStatus.Skill Use(
CharacterBase caster,
public override BattleStatus.Skill Use(CharacterBase caster,
int simulatorWaveTurn,
IEnumerable<Buff.Buff> buffs)
IEnumerable<Buff.Buff> buffs, bool b)
{
var clone = (CharacterBase) caster.Clone();
var clone = b ? (CharacterBase) caster.Clone() : null;
var damage = ProcessDamage(caster, simulatorWaveTurn);
var buff = ProcessBuff(caster, simulatorWaveTurn, buffs);

Expand Down
7 changes: 3 additions & 4 deletions Lib9c/Model/Skill/BuffRemovalAttack.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@ public BuffRemovalAttack(
{
}

public override BattleStatus.Skill Use(
CharacterBase caster,
public override BattleStatus.Skill Use(CharacterBase caster,
int simulatorWaveTurn,
IEnumerable<Buff.Buff> buffs)
IEnumerable<Buff.Buff> buffs, bool b)
{
var clone = (CharacterBase) caster.Clone();
var clone = b ? (CharacterBase) caster.Clone() : null;
var damage = ProcessDamage(caster, simulatorWaveTurn);
var buff = ProcessBuff(caster, simulatorWaveTurn, buffs);
var targets = SkillRow.SkillTargetType.GetTarget(caster);
Expand Down
4 changes: 2 additions & 2 deletions Lib9c/Model/Skill/BuffSkill.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ public BuffSkill(
}

public override BattleStatus.Skill Use(CharacterBase caster, int simulatorWaveTurn,
IEnumerable<Buff.Buff> buffs)
IEnumerable<Buff.Buff> buffs, bool b)
{
var clone = (CharacterBase) caster.Clone();
var clone = b ? (CharacterBase) caster.Clone() : null;
var buff = ProcessBuff(caster, simulatorWaveTurn, buffs);

return new BattleStatus.Buff(SkillRow.Id, clone, buff);
Expand Down
7 changes: 3 additions & 4 deletions Lib9c/Model/Skill/DoubleAttack.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@ public DoubleAttack(
{
}

public override BattleStatus.Skill Use(
CharacterBase caster,
public override BattleStatus.Skill Use(CharacterBase caster,
int simulatorWaveTurn,
IEnumerable<Buff.Buff> buffs)
IEnumerable<Buff.Buff> buffs, bool b)
{
var clone = (CharacterBase) caster.Clone();
var clone = b ? (CharacterBase) caster.Clone() : null;
var damage = ProcessDamage(caster, simulatorWaveTurn);
var buff = ProcessBuff(caster, simulatorWaveTurn, buffs);

Expand Down
11 changes: 5 additions & 6 deletions Lib9c/Model/Skill/HealSkill.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,14 @@ public HealSkill(
{
}

public override BattleStatus.Skill Use(
CharacterBase caster,
public override BattleStatus.Skill Use(CharacterBase caster,
int simulatorWaveTurn,
IEnumerable<Buff.Buff> buffs)
IEnumerable<Buff.Buff> buffs, bool b)
{
var clone = (CharacterBase) caster.Clone();
var clone = b ? (CharacterBase) caster.Clone() : null;
var heal = ProcessHeal(caster, simulatorWaveTurn);
var buff = ProcessBuff(caster, simulatorWaveTurn, buffs);

return new BattleStatus.HealSkill(SkillRow.Id, clone, heal, buff);
}

Expand All @@ -42,7 +41,7 @@ public override BattleStatus.Skill Use(
foreach (var target in SkillRow.SkillTargetType.GetTarget(caster))
{
target.Heal(healPoint);
infos.Add(new BattleStatus.Skill.SkillInfo((CharacterBase)target.Clone(), healPoint, caster.IsCritical(false),
infos.Add(new BattleStatus.Skill.SkillInfo(target.Id, target.IsDead, target.Thorn, healPoint, caster.IsCritical(false),
SkillRow.SkillCategory, simulatorWaveTurn));
}

Expand Down
7 changes: 3 additions & 4 deletions Lib9c/Model/Skill/NormalAttack.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@ public NormalAttack(
{
}

public override Model.BattleStatus.Skill Use(
CharacterBase caster,
public override BattleStatus.Skill Use(CharacterBase caster,
int simulatorWaveTurn,
IEnumerable<Buff.Buff> buffs)
IEnumerable<Buff.Buff> buffs, bool b)
{
var clone = (CharacterBase) caster.Clone();
var clone = b ? (CharacterBase) caster.Clone() : null;
var damage = ProcessDamage(caster, simulatorWaveTurn, true);
var buff = ProcessBuff(caster, simulatorWaveTurn, buffs);

Expand Down
Loading

0 comments on commit 6caf915

Please sign in to comment.