#W# Initial Commit: Avatars Conquest
This commit is contained in:
commit
5df497787a
7510 changed files with 416048 additions and 0 deletions
230
Scripts/Engines/Craft/Core/Repair.cs
Normal file
230
Scripts/Engines/Craft/Core/Repair.cs
Normal file
|
|
@ -0,0 +1,230 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
using Server.Targeting;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
|
||||
namespace Server.Engines.Craft
|
||||
{
|
||||
public class Repair
|
||||
{
|
||||
public Repair()
|
||||
{
|
||||
}
|
||||
|
||||
public static void Do( Mobile from, CraftSystem craftSystem, BaseTool tool )
|
||||
{
|
||||
from.Target = new InternalTarget( craftSystem, tool );
|
||||
from.SendLocalizedMessage( 1044276 ); // Target an item to repair.
|
||||
}
|
||||
|
||||
private class InternalTarget : Target
|
||||
{
|
||||
private CraftSystem m_CraftSystem;
|
||||
private BaseTool m_Tool;
|
||||
|
||||
public InternalTarget( CraftSystem craftSystem, BaseTool tool ) : base ( 2, false, TargetFlags.None )
|
||||
{
|
||||
m_CraftSystem = craftSystem;
|
||||
m_Tool = tool;
|
||||
}
|
||||
|
||||
private static void EndGolemRepair( object state )
|
||||
{
|
||||
((Mobile)state).EndAction( typeof( Golem ) );
|
||||
}
|
||||
|
||||
private int GetWeakenChance( Mobile mob, Trades trade, int curHits, int maxHits )
|
||||
{
|
||||
// 40% - (1% per hp lost) - (1% per 10 craft skill)
|
||||
return (40 + (maxHits - curHits)) - (int)((SkillCheck.TradeSkill( mob, trade, false ) ) / 10);
|
||||
}
|
||||
|
||||
private bool CheckWeaken( Mobile mob, Trades trade, int curHits, int maxHits )
|
||||
{
|
||||
return ( GetWeakenChance( mob, trade, curHits, maxHits ) > Utility.Random( 100 ) );
|
||||
}
|
||||
|
||||
private int GetRepairDifficulty( int curHits, int maxHits )
|
||||
{
|
||||
return (((maxHits - curHits) * 1250) / Math.Max( maxHits, 1 )) - 250;
|
||||
}
|
||||
|
||||
private bool CheckRepairDifficulty( Mobile mob, Trades trade, int curHits, int maxHits )
|
||||
{
|
||||
double difficulty = GetRepairDifficulty( curHits, maxHits ) * 0.1;
|
||||
|
||||
return SkillCheck.TestTrade( mob, trade, difficulty - 25.0, difficulty + 25.0 );
|
||||
}
|
||||
|
||||
private bool IsSpecialClothing( BaseClothing clothing )
|
||||
{
|
||||
// Armor repairable but not craftable
|
||||
|
||||
if( m_CraftSystem is DefTailoring )
|
||||
{
|
||||
return (clothing is BearMask)
|
||||
|| (clothing is DeerMask);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool IsSpecialWeapon( BaseWeapon weapon )
|
||||
{
|
||||
// Weapons repairable but not craftable
|
||||
|
||||
if ( m_CraftSystem is DefTinkering )
|
||||
{
|
||||
return ( weapon is Cleaver )
|
||||
|| ( weapon is Hatchet )
|
||||
|| ( weapon is Pickaxe )
|
||||
|| ( weapon is ButcherKnife )
|
||||
|| ( weapon is SkinningKnife );
|
||||
}
|
||||
else if ( m_CraftSystem is DefCarpentry )
|
||||
{
|
||||
return ( weapon is Club )
|
||||
|| ( weapon is BlackStaff );
|
||||
}
|
||||
else if ( m_CraftSystem is DefTailoring )
|
||||
{
|
||||
return ( weapon is Whip );
|
||||
}
|
||||
else if ( m_CraftSystem is DefBlacksmithy )
|
||||
{
|
||||
return ( weapon is Pitchfork );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override void OnTarget( Mobile from, object targeted )
|
||||
{
|
||||
int number;
|
||||
|
||||
if ( m_CraftSystem.CanCraft( from, m_Tool, targeted.GetType() ) == 1044267 )
|
||||
{
|
||||
number = 1044282; // You must be near a forge and and anvil to repair items. * Yes, there are two and's *
|
||||
}
|
||||
else if ( targeted is BaseWeapon )
|
||||
{
|
||||
BaseWeapon weapon = (BaseWeapon)targeted;
|
||||
Trades trade = m_CraftSystem.MainSkill;
|
||||
int toWeaken = 0;
|
||||
|
||||
double skillLevel = SkillCheck.TradeSkill( from, trade, false );
|
||||
|
||||
if ( skillLevel >= 90.0 )
|
||||
toWeaken = 1;
|
||||
else if ( skillLevel >= 70.0 )
|
||||
toWeaken = 2;
|
||||
else
|
||||
toWeaken = 3;
|
||||
|
||||
if ( m_CraftSystem.CraftItems.SearchForSubclass( weapon.GetType() ) == null && !IsSpecialWeapon( weapon ) )
|
||||
{
|
||||
number = 1044277; // That item cannot be repaired.
|
||||
}
|
||||
else if ( !weapon.IsChildOf( from.Backpack ) )
|
||||
{
|
||||
number = 1044275; // The item must be in your backpack to repair it.
|
||||
}
|
||||
else if ( weapon.MaxHitPoints <= 0 || weapon.HitPoints == weapon.MaxHitPoints )
|
||||
{
|
||||
number = 1044281; // That item is in full repair
|
||||
}
|
||||
else if ( weapon.MaxHitPoints <= toWeaken )
|
||||
{
|
||||
number = 1044278; // That item has been repaired many times, and will break if repairs are attempted again.
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( CheckWeaken( from, trade, weapon.HitPoints, weapon.MaxHitPoints ) )
|
||||
{
|
||||
weapon.MaxHitPoints -= toWeaken;
|
||||
weapon.HitPoints = Math.Max( 0, weapon.HitPoints - toWeaken );
|
||||
}
|
||||
|
||||
if ( CheckRepairDifficulty( from, trade, weapon.HitPoints, weapon.MaxHitPoints ) )
|
||||
{
|
||||
number = 1044279; // You repair the item.
|
||||
m_CraftSystem.PlayCraftEffect( from );
|
||||
weapon.HitPoints = weapon.MaxHitPoints;
|
||||
}
|
||||
else
|
||||
{
|
||||
number = 1044280; // You fail to repair the item.
|
||||
m_CraftSystem.PlayCraftEffect( from );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if ( targeted is BaseArmor )
|
||||
{
|
||||
BaseArmor armor = (BaseArmor)targeted;
|
||||
Trades trade = m_CraftSystem.MainSkill;
|
||||
int toWeaken = 0;
|
||||
|
||||
double skillLevel = SkillCheck.TradeSkill( from, trade, false );
|
||||
|
||||
if ( skillLevel >= 90.0 )
|
||||
toWeaken = 1;
|
||||
else if ( skillLevel >= 70.0 )
|
||||
toWeaken = 2;
|
||||
else
|
||||
toWeaken = 3;
|
||||
|
||||
if ( m_CraftSystem.CraftItems.SearchForSubclass( armor.GetType() ) == null )
|
||||
{
|
||||
number = 1044277; // That item cannot be repaired.
|
||||
}
|
||||
else if ( !armor.IsChildOf( from.Backpack ) )
|
||||
{
|
||||
number = 1044275; // The item must be in your backpack to repair it.
|
||||
}
|
||||
else if ( armor.MaxHitPoints <= 0 || armor.HitPoints == armor.MaxHitPoints )
|
||||
{
|
||||
number = 1044281; // That item is in full repair
|
||||
}
|
||||
else if ( armor.MaxHitPoints <= toWeaken )
|
||||
{
|
||||
number = 1044278; // That item has been repaired many times, and will break if repairs are attempted again.
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( CheckWeaken( from, trade, armor.HitPoints, armor.MaxHitPoints ) )
|
||||
{
|
||||
armor.MaxHitPoints -= toWeaken;
|
||||
armor.HitPoints = Math.Max( 0, armor.HitPoints - toWeaken );
|
||||
}
|
||||
|
||||
if ( CheckRepairDifficulty( from, trade, armor.HitPoints, armor.MaxHitPoints ) )
|
||||
{
|
||||
number = 1044279; // You repair the item.
|
||||
m_CraftSystem.PlayCraftEffect( from );
|
||||
armor.HitPoints = armor.MaxHitPoints;
|
||||
}
|
||||
else
|
||||
{
|
||||
number = 1044280; // You fail to repair the item.
|
||||
m_CraftSystem.PlayCraftEffect( from );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( targeted is Item )
|
||||
{
|
||||
number = 1044277;
|
||||
}
|
||||
else
|
||||
{
|
||||
number = 500426; // You can't repair that.
|
||||
}
|
||||
|
||||
CraftContext context = m_CraftSystem.GetContext( from );
|
||||
from.SendGump( new CraftGump( from, m_CraftSystem, m_Tool, number ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue