Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,149 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Items;
using Server.Mobiles;
namespace Server.Items
{
public class Bladeweave : WeaponAbility
{
private class BladeWeaveRedirect
{
public WeaponAbility NewAbility;
public int ClilocEntry;
public BladeWeaveRedirect(WeaponAbility ability, int cliloc)
{
NewAbility = ability;
ClilocEntry = cliloc;
}
}
private static Dictionary<Mobile, BladeWeaveRedirect> m_NewAttack = new Dictionary<Mobile, BladeWeaveRedirect>();
public static bool BladeWeaving(Mobile attacker, out WeaponAbility a)
{
BladeWeaveRedirect bwr;
bool success = m_NewAttack.TryGetValue(attacker, out bwr);
if (success)
a = bwr.NewAbility;
else
a = null;
return success;
}
public Bladeweave()
{
}
public override int BaseMana { get { return 30; } }
public override bool OnBeforeSwing(Mobile attacker, Mobile defender)
{
if (!Validate(attacker) || !CheckMana(attacker, false))
return false;
int ran = -1;
if (attacker is BaseCreature && PetTrainingHelper.CheckSecondarySkill((BaseCreature)attacker, SkillName.Bushido))
{
ran = Utility.Random(9);
}
else
{
bool canfeint = attacker.Skills[WeaponAbility.Feint.GetSecondarySkill(attacker)].Value >= WeaponAbility.Feint.GetRequiredSecondarySkill(attacker);
bool canblock = attacker.Skills[WeaponAbility.Block.GetSecondarySkill(attacker)].Value >= WeaponAbility.Block.GetRequiredSecondarySkill(attacker);
if (canfeint && canblock)
{
ran = Utility.Random(9);
}
else if (canblock)
{
ran = Utility.Random(8);
}
else
{
ran = Utility.RandomList(0, 1, 2, 3, 4, 5, 6, 8);
}
}
switch (ran)
{
case 0:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.ArmorIgnore, 1028838);
break;
case 1:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.BleedAttack, 1028839);
break;
case 2:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.ConcussionBlow, 1028840);
break;
case 3:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.CrushingBlow, 1028841);
break;
case 4:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.DoubleStrike, 1028844);
break;
case 5:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.MortalStrike, 1028846);
break;
case 6:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.ParalyzingBlow, 1028848);
break;
case 7:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.Block, 1028853);
break;
case 8:
m_NewAttack[attacker] = new BladeWeaveRedirect(WeaponAbility.Feint, 1028857);
break;
default:
// should never happen
return false;
}
return ((BladeWeaveRedirect)m_NewAttack[attacker]).NewAbility.OnBeforeSwing(attacker, defender);
}
public override bool OnBeforeDamage(Mobile attacker, Mobile defender)
{
BladeWeaveRedirect bwr;
if (m_NewAttack.TryGetValue(attacker, out bwr))
return bwr.NewAbility.OnBeforeDamage(attacker, defender);
else
return base.OnBeforeDamage(attacker, defender);
}
public override void OnHit(Mobile attacker, Mobile defender, int damage)
{
if (CheckMana(attacker, false))
{
BladeWeaveRedirect bwr;
if (m_NewAttack.TryGetValue(attacker, out bwr))
{
attacker.SendLocalizedMessage(1072841, "#" + bwr.ClilocEntry.ToString());
bwr.NewAbility.OnHit(attacker, defender, damage);
}
else
base.OnHit(attacker, defender, damage);
m_NewAttack.Remove(attacker);
ClearCurrentAbility(attacker);
}
}
public override void OnMiss(Mobile attacker, Mobile defender)
{
BladeWeaveRedirect bwr;
if (m_NewAttack.TryGetValue(attacker, out bwr))
bwr.NewAbility.OnMiss(attacker, defender);
else
base.OnMiss(attacker, defender);
m_NewAttack.Remove(attacker);
}
}
}