#W# Initial Commit: Avatars Conquest

This commit is contained in:
WarrentyExpired 2026-07-03 20:19:48 -04:00
commit 8eae46895e
7512 changed files with 416187 additions and 0 deletions

View file

@ -0,0 +1,377 @@
using System;
using Server.Items;
using Server.Network;
using Server.Targeting;
using Server.Engines.Craft;
using Server.Mobiles;
using Server.Misc;
namespace Server.Items
{
public abstract class BaseOre : Item
{
private CraftResource m_Resource;
[CommandProperty( AccessLevel.GameMaster )]
public CraftResource Resource
{
get{ return m_Resource; }
set{ m_Resource = value; InvalidateProperties(); }
}
public abstract BaseIngot GetIngot();
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (int) m_Resource );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
OreInfo info = OreInfo.Iron;
m_Resource = CraftResources.GetFromOreInfo( info );
break;
}
}
}
public BaseOre( CraftResource resource ) : this( resource, 1 )
{
}
public BaseOre( CraftResource resource, int amount ) : base( Utility.Random( 4 ) )
{
{
double random = Utility.RandomDouble();
if ( 0.12 >= random )
ItemID = 0x19B7;
else if ( 0.18 >= random )
ItemID = 0x19B8;
else if ( 0.25 >= random )
ItemID = 0x19BA;
else
ItemID = 0x19B9;
}
Stackable = true;
Amount = amount;
Hue = CraftResources.GetHue( resource );
m_Resource = resource;
}
public BaseOre( Serial serial ) : base( serial )
{
}
public override void AddNameProperty( ObjectPropertyList list )
{
if ( Amount > 1 )
list.Add( 1050039, "{0}\t#{1}", Amount, 1026583 ); // ~1_NUMBER~ ~2_ITEMNAME~
else
list.Add( 1026583 ); // ore
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( !CraftResources.IsStandard( m_Resource ) )
{
int num = CraftResources.GetLocalizationNumber( m_Resource );
if ( num > 0 )
list.Add( num );
else
list.Add( CraftResources.GetName( m_Resource ) );
}
}
public override int LabelNumber
{
get
{
return 1042853; // iron ore;
}
}
public override void OnDoubleClick( Mobile from )
{
if ( !Movable )
return;
if ( RootParent is BaseCreature )
{
from.SendLocalizedMessage( 500447 ); // That is not accessible
return;
}
else if ( from.InRange( this.GetWorldLocation(), 2 ) )
{
from.SendLocalizedMessage( 501971 ); // Select the forge on which to smelt the ore, or another pile of ore with which to combine it.
from.Target = new InternalTarget( this );
}
else
{
from.SendLocalizedMessage( 501976 ); // The ore is too far away.
}
}
private class InternalTarget : Target
{
private BaseOre m_Ore;
public InternalTarget( BaseOre ore ) : base ( 2, false, TargetFlags.None )
{
m_Ore = ore;
}
private bool IsForge( object obj )
{
if ( obj.GetType().IsDefined( typeof( ForgeAttribute ), false ) )
return true;
int itemID = 0;
if ( obj is Item )
itemID = ((Item)obj).ItemID;
else if ( obj is StaticTarget )
itemID = ((StaticTarget)obj).ItemID;
return ( itemID == 4017 || (itemID >= 6522 && itemID <= 6569) );
}
protected override void OnTarget( Mobile from, object targeted )
{
if ( m_Ore.Deleted )
return;
if ( !from.InRange( m_Ore.GetWorldLocation(), 2 ) )
{
from.SendLocalizedMessage( 501976 ); // The ore is too far away.
return;
}
#region Combine Ore
if ( targeted is BaseOre )
{
BaseOre ore = (BaseOre)targeted;
if ( !ore.Movable )
return;
else if ( m_Ore == ore )
{
from.SendLocalizedMessage( 501972 ); // Select another pile or ore with which to combine this.
from.Target = new InternalTarget( ore );
return;
}
else if ( ore.Resource != m_Ore.Resource )
{
from.SendLocalizedMessage( 501979 ); // You cannot combine ores of different metals.
return;
}
int worth = ore.Amount;
if ( ore.ItemID == 0x19B9 )
worth *= 8;
else if ( ore.ItemID == 0x19B7 )
worth *= 2;
else
worth *= 4;
int sourceWorth = m_Ore.Amount;
if ( m_Ore.ItemID == 0x19B9 )
sourceWorth *= 8;
else if ( m_Ore.ItemID == 0x19B7 )
sourceWorth *= 2;
else
sourceWorth *= 4;
worth += sourceWorth;
int plusWeight = 0;
int newID = ore.ItemID;
if ( ore.DefaultWeight != m_Ore.DefaultWeight )
{
if ( ore.ItemID == 0x19B7 || m_Ore.ItemID == 0x19B7 )
{
newID = 0x19B7;
}
else if ( ore.ItemID == 0x19B9 )
{
newID = m_Ore.ItemID;
plusWeight = ore.Amount * 2;
}
else
{
plusWeight = m_Ore.Amount * 2;
}
}
if ( (ore.ItemID == 0x19B9 && worth > 120000) || (( ore.ItemID == 0x19B8 || ore.ItemID == 0x19BA ) && worth > 60000) || (ore.ItemID == 0x19B7 && worth > 30000))
{
from.SendLocalizedMessage( 1062844 ); // There is too much ore to combine.
return;
}
else if ( ore.RootParent is Mobile && (plusWeight + ((Mobile)ore.RootParent).Backpack.TotalWeight) > ((Mobile)ore.RootParent).Backpack.MaxWeight )
{
from.SendLocalizedMessage( 501978 ); // The weight is too great to combine in a container.
return;
}
ore.ItemID = newID;
if ( ore.ItemID == 0x19B9 )
{
ore.Amount = worth / 8;
m_Ore.Delete();
}
else if ( ore.ItemID == 0x19B7 )
{
ore.Amount = worth / 2;
m_Ore.Delete();
}
else
{
ore.Amount = worth / 4;
m_Ore.Delete();
}
return;
}
#endregion
if ( IsForge( targeted ) )
{
double difficulty = 50.0;
double minSkill = difficulty - 25.0;
double maxSkill = difficulty + 25.0;
if ( difficulty > 50.0 && difficulty > Server.Misc.SkillCheck.TradeSkill( from, Trades.Mining, false ) )
{
from.SendLocalizedMessage( 501986 ); // You have no idea how to smelt this strange ore!
return;
}
if ( m_Ore.Amount <= 1 && m_Ore.ItemID == 0x19B7 )
{
from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot.
return;
}
if ( Server.Misc.SkillCheck.TestTrade( from, Trades.Mining, minSkill, maxSkill ) )
{
if ( m_Ore.Amount <= 0 )
{
from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot.
}
else
{
int amount = m_Ore.Amount;
if ( m_Ore.Amount > 30000 )
amount = 30000;
BaseIngot ingot = m_Ore.GetIngot();
if ( m_Ore.ItemID == 0x19B7 )
{
if ( m_Ore.Amount % 2 == 0 )
{
amount /= 2;
m_Ore.Delete();
}
else
{
amount /= 2;
m_Ore.Amount = 1;
}
}
else if ( m_Ore.ItemID == 0x19B9 )
{
amount *= 2;
m_Ore.Delete();
}
else
{
amount /= 1;
m_Ore.Delete();
}
ingot.Amount = amount;
from.AddToBackpack( ingot );
//from.PlaySound( 0x57 );
from.SendLocalizedMessage( 501988 ); // You smelt the ore removing the impurities and put the metal in your backpack.
}
}
else if ( m_Ore.Amount < 2 && m_Ore.ItemID == 0x19B9 )
{
from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal.
m_Ore.ItemID = 0x19B8;
}
else if ( m_Ore.Amount < 2 && m_Ore.ItemID == 0x19B8 || m_Ore.ItemID == 0x19BA )
{
from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal.
m_Ore.ItemID = 0x19B7;
}
else
{
from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal.
m_Ore.Amount /= 2;
}
}
}
}
}
public class IronOre : BaseOre
{
[Constructable]
public IronOre() : this( 1 )
{
}
[Constructable]
public IronOre( int amount ) : base( CraftResource.Iron, amount )
{
}
public IronOre( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new IronIngot();
}
}
}