using System;
using Server.Items;
using Server.Network;
using Server.Mobiles;
namespace Server.Games.PaintBall
{
public class PaintBallArmor : BaseArmor
{
public override int BasePhysicalResistance{ get{ return 0; } }
public override int BaseFireResistance{ get{ return 0; } }
public override int BaseColdResistance{ get{ return 0; } }
public override int BasePoisonResistance{ get{ return 0; } }
public override int BaseEnergyResistance{ get{ return 0; } }
public override int InitMinHits{ get{ return 3; } }
public override int InitMaxHits{ get{ return 3; } }
public override int AosStrReq{ get{ return 0; } }
public override int OldStrReq{ get{ return 0; } }
public override int OldDexBonus{ get{ return 0; } }
public override int ArmorBase{ get{ return 0; } }
public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } }
public PaintBallArmor( int hue, int itemid, Layer layer ) : base( itemid )
{
Name = "Paintball Armor";
Hue = hue;
Layer = layer;
Movable = false;
Weight = 1;
DexRequirement = 0;
StrRequirement = 0;
IntRequirement = 0;
}
public override int OnHit( BaseWeapon weapon, int damageTaken )
{
if( weapon is PaintBallWeapon )
HitPoints -= 1;
if( HitPoints == 0 )
Delete();
return 0;
}
public PaintBallArmor( 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 class PaintBall : Item
{
[Constructable]
public PaintBall( int hue ) : this( hue, 1 )
{
}
[Constructable]
public PaintBall( int hue, int amount ) : base( 3962 )
{
Name = "Paintballs";
Hue = hue;
Stackable = true;
Weight = .1;
Amount = amount;
Movable = false;
}
public PaintBall( 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 class PaintBallWeapon : BaseRanged
{
public override int EffectID{ get{ return 3962; } }
public override Type AmmoType{ get{ return typeof( PaintBall ); } }
public override Item Ammo{ get{ return new PaintBall( this.Hue ); } }
public override int AosStrengthReq{ get{ return 0; } }
public override int AosMinDamage{ get{ return 0; } }
public override int AosMaxDamage{ get{ return 0; } }
public override int AosSpeed{ get{ return 15; } }
public override int OldStrengthReq{ get{ return 0; } }
public override int OldMinDamage{ get{ return 0; } }
public override int OldMaxDamage{ get{ return 0; } }
public override int OldSpeed{ get{ return 20; } }
public override int DefMaxRange{ get{ return 10; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.ShootBow; } }
public PaintBallGameItem m_PBGI;
public PaintBallWeapon( int hue, PaintBallGameItem pbgi ) : base( 5042 )
{
Name = "A Paintball Gun";
Hue = hue;
Weight = 1;
Movable = false;
DexRequirement = 0;
StrRequirement = 0;
IntRequirement = 0;
Layer = Layer.TwoHanded;
m_PBGI = pbgi;
}
public override TimeSpan OnSwing( Mobile attacker, Mobile defender )
{
if ( DateTime.Now > (attacker.LastMoveTime + TimeSpan.FromSeconds( 1.0 )) )
{
if( OnFired( attacker, defender ) )
if( CheckHit( attacker, defender ) )
OnHit( attacker, defender );
}
return GetDelay( attacker );
}
public override bool OnFired( Mobile attacker, Mobile defender )
{
if( !m_PBGI.Active )
{
attacker.SendMessage( "The game has not started yet!" );
return false;
}
if( defender.ChestArmor != null && defender.ChestArmor is PaintBallArmor )
{
if( defender.ChestArmor.Hue == Hue )
{
attacker.SendMessage( "Do not attack your own team!" );
return false;
}
}
Container pack = attacker.Backpack;
if( attacker.Player && (pack == null || !pack.ConsumeTotal( AmmoType, 1 ) ) )
return false;
attacker.MovingEffect( defender, EffectID, 18, 1, false, false, Hue, 3 );
return true;
}
public override void OnHit( Mobile attacker, Mobile defender )
{
PlaySwingAnimation( attacker );
PlayHurtAnimation( defender );
attacker.PlaySound( GetHitAttackSound( attacker, defender ) );
defender.PlaySound( GetHitDefendSound( attacker, defender ) );
int damage = AbsorbDamage( attacker, defender, 0 );
}
public override void OnMiss( Mobile attacker, Mobile defender )
{
}
public override int AbsorbDamage( Mobile attacker, Mobile defender, int damage )
{
PaintBallArmor armor;
if( defender.NeckArmor != null )
armor = defender.NeckArmor as PaintBallArmor;
else if( defender.HandArmor != null )
armor = defender.HandArmor as PaintBallArmor;
else if( defender.ArmsArmor != null )
armor = defender.ArmsArmor as PaintBallArmor;
else if( defender.HeadArmor != null )
armor = defender.HeadArmor as PaintBallArmor;
else if( defender.LegsArmor != null )
armor = defender.LegsArmor as PaintBallArmor;
else if( defender.ChestArmor != null )
armor = defender.ChestArmor as PaintBallArmor;
else
{
//--End Of Game-------------------------------------------
//defender.Location = m_PBGI.ExitDest;
attacker.SendMessage( "You have just removed that player from the game!" );
m_PBGI.Delete();
BankBox bank = attacker.BankBox;
//bank.DropItem( new Token() );
bank.DropItem( new BankCheck( 1000 ) );
//attacker.SendMessage( "A token has been placed in your bankbox, congradulations!" );
attacker.SendMessage( "A bank check has been placed in your bankbox, congradulations!" );
return 0;
}
damage = armor.OnHit( this, damage );
return 0;
}
/*public void EndOfGame()
{
foreach( PlayerMobile pm in Players )
{
PlayerMobile player = pm as PlayerMobile;
pm.SendMessage( "The game is over, removing all items" );
pm.Location = ExitDest;
pm.Map = MapDest;
pm.Hidden = true;
pm.Warmode = false;
pm.Team = TeamType.None;
m_Active = false;
ArrayList toDelete = new ArrayList();
foreach( Item item in pm.Items )
if( item is PaintBallArmor || item is PaintBallWeapon || item is PaintBall )
toDelete.Add( item );
foreach( Item item in toDelete )
item.Delete();
}
Players.Clear();
foreach( PlayerStorage ps in StoredPlayerStats )
ps.Restore();
StoredPlayerStats.Clear();
base.OnAfterDelete();
}*/
public PaintBallWeapon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( m_PBGI );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch( version )
{
case 0:
{
m_PBGI = reader.ReadItem() as PaintBallGameItem;
break;
}
}
}
}
}