2025-04-13 19:57:00 +08:00

127 lines
4.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)PassiveID.;
public override string Name => "智慧与力量";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public (Character? character = null) : base(SkillType.Passive, character)
{
Effects.Add(new (this));
}
public override IEnumerable<Effect> AddPassiveEffectToCharacter()
{
return Effects;
}
}
public class (Skill skill) : Effect(skill)
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"当生命值低于 30% 时,进入力量模式,核心属性转为力量,将所有基础智力转化为额外力量;当生命值高于或等于 30% 时,进入智力模式,核心属性转为智力,还原所有基础智力。力量模式下,造成伤害必定暴击;智力模式下,获得 15% 闪避率和 15% 魔法抗性。" +
(Skill.Character != null ? "(当前模式:" + CharacterSet.GetPrimaryAttributeName(Skill.Character.PrimaryAttribute) + "" : "");
private double = 0;
private double = 0.15;
private double = 0.15;
private bool = false;
public override void OnEffectGained(Character character)
{
ResetEffect(character, true);
}
public override void OnEffectLost(Character character)
{
if (character.PrimaryAttribute == PrimaryAttribute.INT)
{
ResetEffect(character, false);
}
}
private void ResetEffect(Character character, bool isAdd)
{
if (isAdd)
{
= true;
character.ExEvadeRate += ;
character.MDF.AddAllValue();
}
else
{
= false;
character.ExEvadeRate -= ;
character.MDF.AddAllValue(-);
}
}
public override bool BeforeCriticalCheck(Character character, ref double throwingBonus)
{
throwingBonus += 100;
return false;
}
public override void OnTimeElapsed(Character character, double elapsed)
{
Changed(character);
}
public override void OnAttributeChanged(Character character)
{
Changed(character);
}
private void Changed(Character character)
{
if (Skill.Character != null)
{
Character c = Skill.Character;
if (c.HP < c.MaxHP * 0.3)
{
if (c.PrimaryAttribute == PrimaryAttribute.INT)
{
double pastHP = c.HP;
double pastMaxHP = c.MaxHP;
double pastMP = c.MP;
double pastMaxMP = c.MaxMP;
c.PrimaryAttribute = PrimaryAttribute.STR;
= c.BaseINT;
c.ExINT -= ;
c.ExSTR += ;
c.Recovery(pastHP, pastMP, pastMaxHP, pastMaxMP);
if ()
{
ResetEffect(character, false);
}
}
}
else
{
if (c.PrimaryAttribute == PrimaryAttribute.STR)
{
double pastHP = c.HP;
double pastMaxHP = c.MaxHP;
double pastMP = c.MP;
double pastMaxMP = c.MaxMP;
c.PrimaryAttribute = PrimaryAttribute.INT;
c.ExSTR -= ;
c.ExINT += ;
= 0;
c.Recovery(pastHP, pastMP, pastMaxHP, pastMaxMP);
if (!)
{
ResetEffect(character, true);
}
}
}
}
}
}
}