| CODE |
using System; using Server.Mobiles; using Server.Gumps; using Server.Network; using Server.Targeting; using System.Collections; namespace Server.Items { public class ArenaStone : Item { private Map m_MapFrom; private Map m_MapTo; private bool m_Active; private Point3D m_Player1Dest; private Point3D m_Player2Dest; private Point3D m_ExitWinner; private Point3D m_ExitLooser; private int m_Gold; private PlayerMobile m_Player1; private PlayerMobile m_Player2; private int m_1Kills = 0; private int m_1Fame = 0; private int m_1Karma = 0; private int m_1ShortMurders = 0; private int m_2Kills = 0; private int m_2Fame = 0; private int m_2Karma = 0; private int m_2ShortMurders = 0; [CommandProperty( AccessLevel.GameMaster )] public bool Active { get { return m_Active; } set { m_Active = value; InvalidateProperties(); } } [CommandProperty( AccessLevel.GameMaster )] public Map MapFrom { get { return m_MapFrom; } set { m_MapFrom = value; } } [CommandProperty( AccessLevel.GameMaster )] public Map MapTo { get { return m_MapTo; } set { m_MapTo = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Gold { get { return m_Gold; } set { m_Gold = value; } } [CommandProperty( AccessLevel.GameMaster )] public Point3D Player1Dest { get { return m_Player1Dest; } set { m_Player1Dest = value; } } [CommandProperty( AccessLevel.GameMaster )] public Point3D Player2Dest { get { return m_Player2Dest; } set { m_Player2Dest = value; } } [CommandProperty( AccessLevel.GameMaster )] public Point3D ExitWinner { get { return m_ExitWinner; } set { m_ExitWinner = value; } } [CommandProperty( AccessLevel.GameMaster )] public Point3D ExitLooser { get { return m_ExitLooser; } set { m_ExitLooser = value; } } [CommandProperty( AccessLevel.GameMaster )] public PlayerMobile Player1 { get { return m_Player1; } set { m_Player1 = value; } } [CommandProperty( AccessLevel.GameMaster )] public PlayerMobile Player2 { get { return m_Player2; } set { m_Player2 = value; } } [CommandProperty( AccessLevel.GameMaster )] public int LongKills1 { get { return m_1Kills; } set { m_1Kills = value; } } [CommandProperty( AccessLevel.GameMaster )] public int LongKills2 { get { return m_2Kills; } set { m_2Kills = value; } } [CommandProperty( AccessLevel.GameMaster )] public int ShortKills1 { get { return m_1ShortMurders; } set { m_1ShortMurders = value; } } [CommandProperty( AccessLevel.GameMaster )] public int ShortKills2 { get { return m_2ShortMurders; } set { m_2ShortMurders = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Karma1 { get { return m_1Karma; } set { m_1Karma = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Karma2 { get { return m_2Karma; } set { m_2Karma = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Fame1 { get { return m_1Fame; } set { m_1Fame = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Fame2 { get { return m_2Fame; } set { m_2Fame = value; } } [Constructable] public ArenaStone() : base( 0xED4 ) { Movable = false; Hue = 0; Name = "a challenge stone"; Active = false; } public override void OnDoubleClick( Mobile from ) { if (from is PlayerMobile) { //this.Active = false; if ( !from.InRange( GetWorldLocation(), 3 ) ) { from.SendLocalizedMessage( 500446 ); // That is too far away. //this.Active = true; } else if ( this.m_Active == false ) { from.SendMessage( "Cette pierre est en court d'utilisation !" ); //this.Active = true; } else if (( this.MapTo == null ) || ( this.Player1Dest == Point3D.Zero ) || ( this.Player2Dest == Point3D.Zero ) || (this.ExitWinner == Point3D.Zero ) || (this.ExitLooser == Point3D.Zero )) { from.SendMessage( "Pierre mal configurée , appellez un GM pour corriger cela !"); //this.Active = true; } else { this.Active = false; from.SendGump( new ArenaGump( from, this ) ); } } } public ArenaStone( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 );// version writer.Write( m_MapTo ); writer.Write( m_Active ); writer.Write( m_Player1Dest ); writer.Write( m_Player2Dest ); writer.Write( m_ExitWinner ); writer.Write( m_ExitLooser ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 0: { m_MapTo = reader.ReadMap(); m_Active = reader.ReadBool(); m_Player1Dest = reader.ReadPoint3D(); m_Player2Dest = reader.ReadPoint3D(); m_ExitWinner = reader.ReadPoint3D(); m_ExitLooser = reader.ReadPoint3D(); break; } } } private class ArenaGump : Gump { private Mobile m_Player1; private ArenaStone m_Item; public ArenaGump( Mobile from, ArenaStone item ) : base( 10, 30 ) { m_Player1 = from; m_Item = item; this.Closable = false; AddBackground( 200, 100, 340, 250, 2600 ); AddLabel( 285, 125, 0x384, string.Format("Provoquer en Duel votre opposant")); AddButton( 250, 310, 0xF3, 0xF2, 0, GumpButtonType.Reply, 0 ); AddButton( 260, 165, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); AddLabel( 295, 168, 0x384, "1000 gold"); AddButton( 380, 165, 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0 ); AddLabel( 415, 168, 0x384, "2000 gold"); AddButton( 260, 215, 0xFA5, 0xFA7, 3, GumpButtonType.Reply, 0 ); AddLabel( 295, 218, 0x384, "3000 gold"); AddButton( 380, 215, 0xFA5, 0xFA7, 4, GumpButtonType.Reply, 0 ); AddLabel( 415, 218, 0x384, "5000 gold"); AddButton( 260, 265, 0xFA5, 0xFA7, 5, GumpButtonType.Reply, 0 ); AddLabel( 295, 268, 0x384, "10000 gold"); } public override void OnResponse( NetState state, RelayInfo info ) //Function for GumpButtonType.Reply Buttons { Mobile from = state.Mobile; switch ( info.ButtonID ) { case 6: { if( from is PlayerMobile ) { PlayerMobile m = ( PlayerMobile ) from; Container bp = from.Backpack; if (bp != null) { int gold = 0; gold = bp.GetAmount(typeof(Gold)); if ( gold >= m_Item.Gold ) { m.Hidden = false; m_Item.Player1 = m; m.Target = new ArenaTarget( m_Player1, m_Item ); m.SendMessage( "Choisissez votre Opposant s'il vous plait" ); break; } else { m.SendMessage( "Vous n'avez pas assez d'or" ); m.SendGump( new ArenaGump( from, m_Item ) ); break; } } } else { from.SendMessage( "Abandon!!"); m_Item.Active = true; break; } break; } case 5: { m_Item.Gold = 10000; goto case 6; } case 4: { m_Item.Gold = 5000; goto case 6; } case 3: { m_Item.Gold = 3000; goto case 6; } case 2: { m_Item.Gold = 2000; goto case 6; } case 1: { m_Item.Gold = 1000; goto case 6; } case 0: { m_Item.Active = true; from.SendMessage( "Fermé !!" ); break; } } } } private class ArenaTarget : Target { private Mobile m_Player1; private ArenaStone m_Item; public ArenaTarget( Mobile from, ArenaStone item ) : base ( 6, false, TargetFlags.None ) { m_Player1 = from; m_Item = item; } protected override void OnTargetCancel (Mobile from, TargetCancelType Canceled ) { from.SendMessage(43, "Duel abandonné!" ); m_Item.Active = true; m_Item.Player1 = null; } protected override void OnCantSeeTarget (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; m_Item.Player1 = null; } protected override void OnNonlocalTarget (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; m_Item.Player1 = null; } protected override void OnTargetNotAccessible (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; m_Item.Player1 = null; } protected override void OnTargetOutOfLOS (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; m_Item.Player1 = null; } protected override void OnTargetOutOfRange (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; m_Item.Player1 = null; } protected override void OnTargetUntargetable (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; m_Item.Player1 = null; } protected override void OnTargetDeleted (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; m_Item.Player1 = null; } protected override void OnTarget( Mobile from, object target ) { if( target is Item ) { from.SendMessage( "Vous ne pouvez choisir cela !" ); from.Target = new ArenaTarget( m_Player1, m_Item ); } if ( target is PlayerMobile ) { PlayerMobile m = (PlayerMobile) target; if ( !m.InRange ( m_Item, 3 ) ) { from.SendMessage( "Ce joueur est trop loin. Duel abandonné.." ); m_Item.Player1 = null; m_Item.Active = true; } else if ( !from.CheckAlive() || !m.CheckAlive() ) { if ( !from.CheckAlive() ) { from.SendMessage( "Vous devez être vivant pour defier quelqu'un. Duel abandonné." ); m_Item.Player1 = null; m_Item.Active = true; } if ( !m.CheckAlive() ) { from.SendMessage( "Votre opposant doit être en vie pour le défier. Duel abandonné" ); m_Item.Player1 = null; m_Item.Active = true; } } else { m.SendGump( new ArenaAcceptGump( m, m_Player1, m_Item ) ); } } } } private class ArenaAcceptGump : Gump { private Mobile m_Player2; private Mobile m_Player1; private ArenaStone m_Item; public ArenaAcceptGump( Mobile opponent, Mobile challenger, ArenaStone item ) : base( 20, 30 ) { m_Player2 = opponent; m_Player1 = challenger; m_Item = item; this.Closable = false; AddBackground( 200, 200, 300, 150, 2600 ); AddLabel( 260, 220, 0, string.Format("La mise est de {0} pièce d'or", m_Item.Gold) ); AddButton( 320, 270, 0xF9, 0xF8, 1, GumpButtonType.Reply, 0 ); AddButton( 320, 300, 0xF3, 0xF2, 2, GumpButtonType.Reply, 0 ); } public override void OnResponse( NetState state, RelayInfo info ) //Function for GumpButtonType.Reply Buttons { Mobile from = state.Mobile; switch ( info.ButtonID ) { case 2: { from.SendMessage( "Le duel est abandonné." ); m_Player1.SendMessage( "Le duel est abandonné." ); m_Item.Player1 = null; m_Item.Active = true; break; } case 1: { PlayerMobile m = (PlayerMobile)from; Container bp = m.Backpack; if (bp != null) { int gold = 0; gold = bp.GetAmount(typeof(Gold)); if ( gold >= m_Item.Gold ) { m.Hidden = false; m_Item.Player2 = m; m_Item.MapFrom = m_Item.Player2.Map; m_Player1.SendMessage( "Le défi est acepté. Que le combat commence!" ); m_Player2.SendMessage( "Le défi est acepté. Que le combat commence!" ); bp.ConsumeUpTo( typeof( Gold ), m_Item.Gold ); bp = m_Player1.Backpack; bp.ConsumeUpTo( typeof( Gold ), m_Item.Gold ); m_Item.ShortKills1 = m_Item.Player1.ShortTermMurders; m_Item.ShortKills2 = m_Item.Player2.ShortTermMurders; m_Item.LongKills1 = m_Item.Player1.Kills; m_Item.LongKills2 = m_Item.Player2.Kills; m_Item.Karma1 = m_Item.Player1.Karma; m_Item.Karma2 = m_Item.Player2.Karma; m_Item.Fame1 = m_Item.Player1.Fame; m_Item.Fame2 = m_Item.Player2.Fame; m_Player1.Map = m_Item.MapTo; m_Player2.Map = m_Item.MapTo; m_Player1.Location = m_Item.Player1Dest; m_Player2.Location = m_Item.Player2Dest; m_Item.Player1.Kills = 10; m_Item.Player2.Kills = 10; InternalTimer timer = new InternalTimer( m_Item ); timer.Start(); break; } else { m.SendMessage( "Vous n'avez pas assez d'or" ); m_Item.Player1 = null; m_Item.Active = true; break; } } break; } } } } private class InternalTimer : Timer { private int m_Seconds = 3600; private int m_Count; private ArenaStone m_Item; public InternalTimer( ArenaStone item ) : base( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 )) { m_Item = item; } protected override void OnTick() { m_Seconds--; m_Count = (int)(m_Seconds / 60); bool finish = false; if ( !m_Item.Player1.Alive ) { if (!m_Item.Player2.Alive) //Match Nul 2 morts { Stop(); Mobile m = (Mobile)m_Item.Player1; m.PlaySound( 0x214 ); m.FixedEffect( 0x376A, 10, 16 ); m.Resurrect(); Corpse corpse = null; IPooledEnumerable eable = m.Map.GetItemsInRange( m.Location, 10 ); foreach ( Item item in eable ) { if ( item is Corpse ) { Corpse tempCorpse = item as Corpse; if(tempCorpse.Owner == m) { corpse = tempCorpse; break; } } } eable.Free(); if( corpse != null) { foreach ( Item equipment in corpse.EquipItems ) m.EquipItem( equipment ); ArrayList list = new ArrayList( corpse.Items ); foreach ( Item backpackItem in list ) m.AddToBackpack( backpackItem ); corpse.Delete(); } m = (Mobile)m_Item.Player2; m.PlaySound( 0x214 ); m.FixedEffect( 0x376A, 10, 16 ); m.Resurrect(); corpse = null; eable = m.Map.GetItemsInRange( m.Location, 10 ); foreach ( Item item in eable ) { if ( item is Corpse ) { Corpse tempCorpse = item as Corpse; if(tempCorpse.Owner == m) { corpse = tempCorpse; break; } } } eable.Free(); if( corpse != null) { foreach ( Item equipment in corpse.EquipItems ) m.EquipItem( equipment ); ArrayList list = new ArrayList( corpse.Items ); foreach ( Item backpackItem in list ) m.AddToBackpack( backpackItem ); corpse.Delete(); } m_Item.Player1.SendMessage( "Vous avez tué votre opposant mais etes également mort. Le duel est fini et l'or restitué" ); m_Item.Player2.SendMessage( "Vous avez tué votre opposant mais etes également mort. Le duel est fini et l'or restitué" ); Gold gold1 = new Gold( m_Item.Gold ); Gold gold2 = new Gold( m_Item.Gold ); m_Item.Player1.AddToBackpack( gold1 ); m_Item.Player2.AddToBackpack( gold2 ); m_Item.Player1.Location = m_Item.ExitWinner; m_Item.Player2.Location = m_Item.ExitLooser; finish = true; } else //Gain Player 2 { Stop(); Mobile m = (Mobile)m_Item.Player1; m.PlaySound( 0x214 ); m.FixedEffect( 0x376A, 10, 16 ); m.Resurrect(); Corpse corpse = null; IPooledEnumerable eable = m.Map.GetItemsInRange( m.Location, 10 ); foreach ( Item item in eable ) { if ( item is Corpse ) { Corpse tempCorpse = item as Corpse; if(tempCorpse.Owner == m) { corpse = tempCorpse; break; } } } eable.Free(); if( corpse != null) { foreach ( Item equipment in corpse.EquipItems ) m.EquipItem( equipment ); ArrayList list = new ArrayList( corpse.Items ); foreach ( Item backpackItem in list ) m.AddToBackpack( backpackItem ); corpse.Delete(); } m_Item.Player1.SendMessage( "Vous avez Perdu" ); m_Item.Player2.SendMessage( "Vous gagnez le combat et {0} piéces d'or", (m_Item.Gold*2) ); //BankCheck gold1 = new BankCheck( m_Item.Gold ); BankCheck gold2 = new BankCheck( (m_Item.Gold*2) ); //m_Item.Player1.AddToBackpack( gold1 ); m_Item.Player2.AddToBackpack( gold2 ); m_Item.Player2.Location = m_Item.ExitWinner; m_Item.Player1.Location = m_Item.ExitLooser; finish = true; } } else { if (!m_Item.Player2.Alive) //Gain Player 1 { Stop(); Mobile m = (Mobile)m_Item.Player2; m.PlaySound( 0x214 ); m.FixedEffect( 0x376A, 10, 16 ); m.Resurrect(); Corpse corpse = null; IPooledEnumerable eable = m.Map.GetItemsInRange( m.Location, 10 ); foreach ( Item item in eable ) { if ( item is Corpse ) { Corpse tempCorpse = item as Corpse; if(tempCorpse.Owner == m) { corpse = tempCorpse; break; } } } eable.Free(); if( corpse != null) { foreach ( Item equipment in corpse.EquipItems ) m.EquipItem( equipment ); ArrayList list = new ArrayList( corpse.Items ); foreach ( Item backpackItem in list ) m.AddToBackpack( backpackItem ); corpse.Delete(); } m_Item.Player2.SendMessage( "Vous avez Perdu" ); m_Item.Player1.SendMessage( "Vous gagnez le combat et {0} piéces d'or", (m_Item.Gold*2) ); BankCheck gold1 = new BankCheck( (m_Item.Gold*2) ); //BankCheck gold2 = new BankCheck( m_Item.Gold ); m_Item.Player1.AddToBackpack( gold1 ); //m_Item.Player2.AddToBackpack( gold2 ); m_Item.Player2.Location = m_Item.ExitWinner; m_Item.Player1.Location = m_Item.ExitLooser; finish = true; } } if ( finish == false ) { if ( (m_Count == ( 30 )) || (m_Count == ( 20 )) ||(m_Count == ( 15 )) || ((m_Count <= ( 10 )) && (m_Count >= (2)))) { m_Item.Player1.SendMessage( "Le duel se termine dans {0} minutes", m_Count ); m_Item.Player2.SendMessage( "Le duel se termine dans {0} minutes", m_Count ); } if ( m_Count == ( 1 )) { m_Item.Player1.SendMessage( "Il reste {0} minutes", m_Count ); m_Item.Player2.SendMessage( "Il reste {0} minutes", m_Count ); } if ( m_Count == 0 && m_Seconds == 0 ) //Match Nul { Stop(); m_Item.Player1.SendMessage( "Vous n'avez pas réussi a tuer votre adversaire le défi est annulé, l'or restitué" ); m_Item.Player2.SendMessage( "Vous n'avez pas réussi a tuer votre adversaire le défi est annulé, l'or restitué" ); m_Item.Player1.Karma = m_Item.Karma1; m_Item.Player2.Karma = m_Item.Karma2; m_Item.Player1.Fame = m_Item.Fame1; m_Item.Player2.Fame = m_Item.Fame2; m_Item.Player1.ShortTermMurders = m_Item.ShortKills1; m_Item.Player2.ShortTermMurders = m_Item.ShortKills2; m_Item.Player1.Kills = m_Item.LongKills1; m_Item.Player2.Kills = m_Item.LongKills2; Gold gold1 = new Gold( m_Item.Gold ); Gold gold2 = new Gold( m_Item.Gold ); m_Item.Player1.AddToBackpack( gold1 ); m_Item.Player2.AddToBackpack( gold2 ); m_Item.Player1.Map = m_Item.MapFrom; m_Item.Player2.Map = m_Item.MapFrom; m_Item.Player1.Location = m_Item.ExitWinner; m_Item.Player2.Location = m_Item.ExitLooser; Server.Scripts.Commands.CommandHandlers.GetFollowers_OnTarget( m_Item.Player1, m_Item.Player1 ); Server.Scripts.Commands.CommandHandlers.GetFollowers_OnTarget( m_Item.Player2, m_Item.Player2 ); m_Item.Player1 = null; m_Item.Player2 = null; m_Item.Karma1 = 0; m_Item.Karma2 = 0; m_Item.Fame1 = 0; m_Item.Fame2 = 0; m_Item.ShortKills1 = 0; m_Item.ShortKills2 = 0; m_Item.LongKills1 = 0; m_Item.LongKills2 = 0; m_Item.Gold = 0; m_Item.MapFrom = null; m_Item.Active = true; } } else { m_Item.Player1.Karma = m_Item.Karma1; m_Item.Player2.Karma = m_Item.Karma2; m_Item.Player1.Fame = m_Item.Fame1; m_Item.Player2.Fame = m_Item.Fame2; m_Item.Player1.ShortTermMurders = m_Item.ShortKills1; m_Item.Player2.ShortTermMurders = m_Item.ShortKills2; m_Item.Player1.Kills = m_Item.LongKills1; m_Item.Player2.Kills = m_Item.LongKills2; m_Item.Player1.Map = m_Item.MapFrom; m_Item.Player2.Map = m_Item.MapFrom; Server.Scripts.Commands.CommandHandlers.GetFollowers_OnTarget( m_Item.Player1, m_Item.Player1 ); Server.Scripts.Commands.CommandHandlers.GetFollowers_OnTarget( m_Item.Player2, m_Item.Player2 ); m_Item.Player1 = null; m_Item.Player2 = null; m_Item.Karma1 = 0; m_Item.Karma2 = 0; m_Item.Fame1 = 0; m_Item.Fame2 = 0; m_Item.ShortKills1 = 0; m_Item.ShortKills2 = 0; m_Item.LongKills1 = 0; m_Item.LongKills2 = 0; m_Item.Gold = 0; m_Item.MapFrom = null; m_Item.Active = true; } } } } } |
| CODE |
| using System; using Server.Mobiles; using Server.Gumps; using Server.Network; using Server.Targeting; using System.Collections; namespace Server.Items { public class ArenaStone : Item { private Map m_MapFrom; private Map m_MapTo; private bool m_Active; private Point3D m_Player1Dest; private Point3D m_Player2Dest; private Point3D m_ExitWinner; private Point3D m_ExitLooser; private int m_Gold; private PlayerMobile m_Player1; private PlayerMobile m_Player2; private int m_1Kills = 0; private int m_1Fame = 0; private int m_1Karma = 0; private int m_1ShortMurders = 0; private int m_2Kills = 0; private int m_2Fame = 0; private int m_2Karma = 0; private int m_2ShortMurders = 0; [CommandProperty( AccessLevel.GameMaster )] public bool Active { get { return m_Active; } set { m_Active = value; InvalidateProperties(); } } [CommandProperty( AccessLevel.GameMaster )] public Map MapFrom { get { return m_MapFrom; } set { m_MapFrom = value; } } [CommandProperty( AccessLevel.GameMaster )] public Map MapTo { get { return m_MapTo; } set { m_MapTo = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Gold { get { return m_Gold; } set { m_Gold = value; } } [CommandProperty( AccessLevel.GameMaster )] public Point3D Player1Dest { get { return m_Player1Dest; } set { m_Player1Dest = value; } } [CommandProperty( AccessLevel.GameMaster )] public Point3D Player2Dest { get { return m_Player2Dest; } set { m_Player2Dest = value; } } [CommandProperty( AccessLevel.GameMaster )] public Point3D ExitWinner { get { return m_ExitWinner; } set { m_ExitWinner = value; } } [CommandProperty( AccessLevel.GameMaster )] public Point3D ExitLooser { get { return m_ExitLooser; } set { m_ExitLooser = value; } } [CommandProperty( AccessLevel.GameMaster )] public PlayerMobile Player1 { get { return m_Player1; } set { m_Player1 = value; } } [CommandProperty( AccessLevel.GameMaster )] public PlayerMobile Player2 { get { return m_Player2; } set { m_Player2 = value; } } [CommandProperty( AccessLevel.GameMaster )] public int LongKills1 { get { return m_1Kills; } set { m_1Kills = value; } } [CommandProperty( AccessLevel.GameMaster )] public int LongKills2 { get { return m_2Kills; } set { m_2Kills = value; } } [CommandProperty( AccessLevel.GameMaster )] public int ShortKills1 { get { return m_1ShortMurders; } set { m_1ShortMurders = value; } } [CommandProperty( AccessLevel.GameMaster )] public int ShortKills2 { get { return m_2ShortMurders; } set { m_2ShortMurders = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Karma1 { get { return m_1Karma; } set { m_1Karma = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Karma2 { get { return m_2Karma; } set { m_2Karma = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Fame1 { get { return m_1Fame; } set { m_1Fame = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Fame2 { get { return m_2Fame; } set { m_2Fame = value; } } [Constructable] public ArenaStone() : base( 0xED4 ) { Movable = false; Hue = 0; Name = "Pierre d'arene"; Active = false; } public override void OnDoubleClick( Mobile from ) { if (from is PlayerMobile) { if ( !from.InRange( GetWorldLocation(), 3 ) ) { from.SendLocalizedMessage( 500446 ); // That is too far away. //this.Active = true; } else if ( this.m_Active == false && this.MapTo != null ) { from.SendMessage( "Cette pierre est en court d'utilisation !" ); } else if (( this.MapFrom == null ) || ( this.Player1Dest == Point3D.Zero ) || ( this.Player2Dest == Point3D.Zero ) || (this.ExitWinner == Point3D.Zero ) || (this.ExitLooser == Point3D.Zero )) { from.SendMessage( "Pierre mal confidurée , appellez un GM pour corrigé cela !"); } else { this.Active = false; from.SendGump( new ArenaGump( from, this ) ); } } } public ArenaStone( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 );// version writer.Write( m_MapTo ); writer.Write( m_Active ); writer.Write( m_Player1Dest ); writer.Write( m_Player2Dest ); writer.Write( m_ExitWinner ); writer.Write( m_ExitLooser ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 0: { m_MapTo = reader.ReadMap(); m_Active = reader.ReadBool(); m_Player1Dest = reader.ReadPoint3D(); m_Player2Dest = reader.ReadPoint3D(); m_ExitWinner = reader.ReadPoint3D(); m_ExitLooser = reader.ReadPoint3D(); break; } } } private class ArenaGump : Gump { private Mobile m_Player1; private ArenaStone m_Item; public ArenaGump( Mobile from, ArenaStone item ) : base( 10, 30 ) { m_Player1 = from; m_Item = item; this.Closable = false; AddBackground( 200, 100, 340, 250, 2600 ); AddLabel( 285, 125, 0x384, string.Format("Provoquer en Duel votre opposant")); AddButton( 250, 310, 0xF3, 0xF2, 0, GumpButtonType.Reply, 0 ); AddButton( 260, 165, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); AddLabel( 295, 168, 0x384, "1000 gold"); AddButton( 380, 165, 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0 ); AddLabel( 415, 168, 0x384, "2000 gold"); AddButton( 260, 215, 0xFA5, 0xFA7, 3, GumpButtonType.Reply, 0 ); AddLabel( 295, 218, 0x384, "3000 gold"); AddButton( 380, 215, 0xFA5, 0xFA7, 4, GumpButtonType.Reply, 0 ); AddLabel( 415, 218, 0x384, "5000 gold"); AddButton( 260, 265, 0xFA5, 0xFA7, 5, GumpButtonType.Reply, 0 ); AddLabel( 295, 268, 0x384, "10000 gold"); } public override void OnResponse( NetState state, RelayInfo info ) //Function for GumpButtonType.Reply Buttons { Mobile from = state.Mobile; switch ( info.ButtonID ) { case 6: { if( from is PlayerMobile ) { PlayerMobile m = ( PlayerMobile ) from; Container bp = from.Backpack; if (bp != null) { int gold = 0; gold = bp.GetAmount(typeof(Gold)); if ( gold >= m_Item.Gold ) { m.Hidden = false; m_Item.Player1 = m; m.Target = new ArenaTarget( m_Player1, m_Item ); m.SendMessage( " Choisissez votre Opposant s'il vous plait " ); break; } else { m.SendMessage( "Vous n'avez pas assez d'or" ); m.SendGump( new ArenaGump( from, m_Item ) ); break; } } } else { from.SendMessage( "Abandon!!"); m_Item.Active = true; break; } break; } case 5: { m_Item.Gold = 10000; goto case 6; } case 4: { m_Item.Gold = 5000; goto case 6; } case 3: { m_Item.Gold = 3000; goto case 6; } case 2: { m_Item.Gold = 2000; goto case 6; } case 1: { m_Item.Gold = 1000; goto case 6; } case 0: { m_Item.Active = true; from.SendMessage( "Fermé !!" ); break; } } } } private class ArenaTarget : Target { private Mobile m_Player1; private ArenaStone m_Item; public ArenaTarget( Mobile from, ArenaStone item ) : base ( 6, false, TargetFlags.None ) { m_Player1 = from; m_Item = item; } protected override void OnTargetCancel (Mobile from, TargetCancelType Canceled ) { from.SendMessage(43, "Duel abandonné!" ); m_Item.Active = true; } protected override void OnCantSeeTarget (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; } protected override void OnNonlocalTarget (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; } protected override void OnTargetNotAccessible (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; } protected override void OnTargetOutOfLOS (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; } protected override void OnTargetOutOfRange (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; } protected override void OnTargetUntargetable (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; } protected override void OnTargetDeleted (Mobile from, object target ) { from.SendMessage( 43, "Opposant innaccessible , Duel abandonné." ); m_Item.Active = true; } protected override void OnTarget( Mobile from, object target ) { if( target is Item ) { from.SendMessage( "Vous ne pouvez choisir cela !" ); from.Target = new ArenaTarget( m_Player1, m_Item ); } if ( target is PlayerMobile ) { PlayerMobile m = (PlayerMobile) target; if ( !m.InRange ( m_Item, 3 ) ) { from.SendMessage( " Ce joueurs est trop loin. Duel abandonné.." ); m_Item.Player1 = null; m_Item.Active = true; } else if ( !from.CheckAlive() || !m.CheckAlive() ) { if ( !from.CheckAlive() ) { from.SendMessage( "Vous devez être vivant pour cela. Duel abandonné." ); m_Item.Player1 = null; m_Item.Active = true; } if ( !m.CheckAlive() ) { from.SendMessage( "Votre opposant doit être en vie pour le défié. Duel abandonné " ); m_Item.Player1 = null; m_Item.Active = true; } } else { m.SendGump( new ArenaAcceptGump( m, m_Player1, m_Item ) ); } } } } private class ArenaAcceptGump : Gump { private Mobile m_Player2; private Mobile m_Player1; private ArenaStone m_Item; public ArenaAcceptGump( Mobile opponent, Mobile challenger, ArenaStone item ) : base( 20, 30 ) { m_Player2 = opponent; m_Player1 = challenger; m_Item = item; this.Closable = false; AddBackground( 200, 200, 300, 150, 2600 ); AddLabel( 260, 220, 0, string.Format("La mise est de {0} pièce d'or", m_Item.Gold) ); AddButton( 320, 270, 0xF9, 0xF8, 1, GumpButtonType.Reply, 0 ); AddButton( 320, 300, 0xF3, 0xF2, 2, GumpButtonType.Reply, 0 ); } public override void OnResponse( NetState state, RelayInfo info ) //Function for GumpButtonType.Reply Buttons { Mobile from = state.Mobile; switch ( info.ButtonID ) { case 2: { from.SendMessage( "Le duel est abandonné." ); m_Player1.SendMessage( "Le duel est abandonné." ); m_Item.Player1 = null; m_Item.Active = true; break; } case 1: { PlayerMobile m = (PlayerMobile)from; Container bp = m.Backpack; if (bp != null) { int gold = 0; gold = bp.GetAmount(typeof(Gold)); if ( gold >= m_Item.Gold ) { m.Hidden = false; m_Item.Player2 = m; m_Item.MapFrom = m_Item.Player2.Map; m_Player1.SendMessage( "Le défi est acepté. Que le combat commence!" ); m_Player2.SendMessage( "Le défi est acepté. Que le combat commence!" ); bp.ConsumeUpTo( typeof( Gold ), m_Item.Gold ); bp = m_Player1.Backpack; bp.ConsumeUpTo( typeof( Gold ), m_Item.Gold ); m_Item.ShortKills1 = m_Item.Player1.ShortTermMurders; m_Item.ShortKills2 = m_Item.Player2.ShortTermMurders; m_Item.LongKills1 = m_Item.Player1.Kills; m_Item.LongKills2 = m_Item.Player2.Kills; m_Item.Karma1 = m_Item.Player1.Karma; m_Item.Karma2 = m_Item.Player2.Karma; m_Item.Fame1 = m_Item.Player1.Fame; m_Item.Fame2 = m_Item.Player2.Fame; m_Player1.Map = m_Item.MapTo; m_Player2.Map = m_Item.MapTo; m_Player1.Location = m_Item.Player1Dest; m_Player2.Location = m_Item.Player2Dest; m_Item.Player1.Kills = 10; m_Item.Player2.Kills = 10; InternalTimer timer = new InternalTimer( m_Item ); timer.Start(); break; } else { m.SendMessage( "vous n'avez pas assez d'or" ); m_Item.Player1 = null; m_Item.Active = true; break; } } break; } } } } private class InternalTimer : Timer { private int m_Seconds = 3600; private int m_Count; private ArenaStone m_Item; public InternalTimer( ArenaStone item ) : base( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 )) { m_Item = item; } protected override void OnTick() { m_Seconds--; m_Count = (int)(m_Seconds / 60); bool finish = false; if ( !m_Item.Player1.Alive ) { if (!m_Item.Player2.Alive) //Match Nul 2 morts { Stop(); Mobile m = (Mobile)m_Item.Player1; m.PlaySound( 0x214 ); m.FixedEffect( 0x376A, 10, 16 ); m.Resurrect(); Corpse corpse = null; IPooledEnumerable eable = m.Map.GetItemsInRange( m.Location, 10 ); foreach ( Item item in eable ) { if ( item is Corpse ) { Corpse tempCorpse = item as Corpse; if(tempCorpse.Owner == m) { corpse = tempCorpse; break; } } } eable.Free(); if( corpse != null) { foreach ( Item equipment in corpse.EquipItems ) m.EquipItem( equipment ); ArrayList list = new ArrayList( corpse.Items ); foreach ( Item backpackItem in list ) m.AddToBackpack( backpackItem ); corpse.Delete(); } m = (Mobile)m_Item.Player2; m.PlaySound( 0x214 ); m.FixedEffect( 0x376A, 10, 16 ); m.Resurrect(); corpse = null; eable = m.Map.GetItemsInRange( m.Location, 10 ); foreach ( Item item in eable ) { if ( item is Corpse ) { Corpse tempCorpse = item as Corpse; if(tempCorpse.Owner == m) { corpse = tempCorpse; break; } } } eable.Free(); if( corpse != null) { foreach ( Item equipment in corpse.EquipItems ) m.EquipItem( equipment ); ArrayList list = new ArrayList( corpse.Items ); foreach ( Item backpackItem in list ) m.AddToBackpack( backpackItem ); corpse.Delete(); } m_Item.Player1.SendMessage( "Vous avez tué votre opposant mais etes également mort. Le duel est finni et l'or restitué " ); m_Item.Player2.SendMessage( "Vous avez tué votre opposant mais etes également mort. Le duel est finni et l'or restitué " ); Gold gold1 = new Gold( m_Item.Gold ); Gold gold2 = new Gold( m_Item.Gold ); m_Item.Player1.AddToBackpack( gold1 ); m_Item.Player2.AddToBackpack( gold2 ); m_Item.Player1.Location = m_Item.ExitWinner; m_Item.Player2.Location = m_Item.ExitLooser; finish = true; } else //Gain Player 2 { Stop(); Mobile m = (Mobile)m_Item.Player1; m.PlaySound( 0x214 ); m.FixedEffect( 0x376A, 10, 16 ); m.Resurrect(); Corpse corpse = null; IPooledEnumerable eable = m.Map.GetItemsInRange( m.Location, 10 ); foreach ( Item item in eable ) { if ( item is Corpse ) { Corpse tempCorpse = item as Corpse; if(tempCorpse.Owner == m) { corpse = tempCorpse; break; } } } eable.Free(); if( corpse != null) { foreach ( Item equipment in corpse.EquipItems ) m.EquipItem( equipment ); ArrayList list = new ArrayList( corpse.Items ); foreach ( Item backpackItem in list ) m.AddToBackpack( backpackItem ); corpse.Delete(); } m_Item.Player1.SendMessage( "Vous avez Perdu" ); m_Item.Player2.SendMessage( "Vous gagnez le combat et {0} piéces d'or ", (m_Item.Gold*2) ); //BankCheck gold1 = new BankCheck( m_Item.Gold ); BankCheck gold2 = new BankCheck( (m_Item.Gold*2) ); //m_Item.Player1.AddToBackpack( gold1 ); m_Item.Player2.AddToBackpack( gold2 ); m_Item.Player2.Location = m_Item.ExitWinner; m_Item.Player1.Location = m_Item.ExitLooser; finish = true; } } else { if (!m_Item.Player2.Alive) //Gain Player 1 { Stop(); Mobile m = (Mobile)m_Item.Player2; m.PlaySound( 0x214 ); m.FixedEffect( 0x376A, 10, 16 ); m.Resurrect(); Corpse corpse = null; IPooledEnumerable eable = m.Map.GetItemsInRange( m.Location, 10 ); foreach ( Item item in eable ) { if ( item is Corpse ) { Corpse tempCorpse = item as Corpse; if(tempCorpse.Owner == m) { corpse = tempCorpse; break; } } } eable.Free(); if( corpse != null) { foreach ( Item equipment in corpse.EquipItems ) m.EquipItem( equipment ); ArrayList list = new ArrayList( corpse.Items ); foreach ( Item backpackItem in list ) m.AddToBackpack( backpackItem ); corpse.Delete(); } m_Item.Player2.SendMessage( "Vous avez Perdu" ); m_Item.Player1.SendMessage( "Vous gagnez le combat et {0} piéces d'or ", (m_Item.Gold*2) ); BankCheck gold1 = new BankCheck( (m_Item.Gold*2) ); //BankCheck gold2 = new BankCheck( m_Item.Gold ); m_Item.Player1.AddToBackpack( gold1 ); //m_Item.Player2.AddToBackpack( gold2 ); m_Item.Player2.Location = m_Item.ExitWinner; m_Item.Player1.Location = m_Item.ExitLooser; finish = true; } } if ( finish == false ) { if ( (m_Count == ( 30 )) || (m_Count == ( 20 )) ||(m_Count == ( 15 )) || ((m_Count <= ( 10 )) && (m_Count >= (2)))) { m_Item.Player1.SendMessage( " Le duel se termine dans {0} minutes ", m_Count ); m_Item.Player2.SendMessage( " Le duel se termine dans {0} minutes ", m_Count ); } if ( m_Count == ( 1 )) { m_Item.Player1.SendMessage( "Il reste {0} minutes", m_Count ); m_Item.Player2.SendMessage( "Il reste {0} minutes", m_Count ); } if ( m_Count == 0 && m_Seconds == 0 ) //Match Nul { Stop(); m_Item.Player1.SendMessage( "Vous n'avez pas réussi a tué votre adversaire le défi est annulé,l'or restitué" ); m_Item.Player2.SendMessage( "Vous n'avez pas réussi a tué votre adversaire le défi est annulé,l'or restitué" ); m_Item.Player1.Karma = m_Item.Karma1; m_Item.Player2.Karma = m_Item.Karma2; m_Item.Player1.Fame = m_Item.Fame1; m_Item.Player2.Fame = m_Item.Fame2; m_Item.Player1.ShortTermMurders = m_Item.ShortKills1; m_Item.Player2.ShortTermMurders = m_Item.ShortKills2; m_Item.Player1.Kills = m_Item.LongKills1; m_Item.Player2.Kills = m_Item.LongKills2; Gold gold1 = new Gold( m_Item.Gold ); Gold gold2 = new Gold( m_Item.Gold ); m_Item.Player1.AddToBackpack( gold1 ); m_Item.Player2.AddToBackpack( gold2 ); m_Item.Player1.Map = m_Item.MapFrom; m_Item.Player2.Map = m_Item.MapFrom; m_Item.Player1.Location = m_Item.ExitWinner; m_Item.Player2.Location = m_Item.ExitLooser; Server.Scripts.Commands.CommandHandlers.GetFollowers_OnTarget( m_Item.Player1, m_Item.Player1 ); Server.Scripts.Commands.CommandHandlers.GetFollowers_OnTarget( m_Item.Player2, m_Item.Player2 ); m_Item.Active = true; } } else { m_Item.Player1.Karma = m_Item.Karma1; m_Item.Player2.Karma = m_Item.Karma2; m_Item.Player1.Fame = m_Item.Fame1; m_Item.Player2.Fame = m_Item.Fame2; m_Item.Player1.ShortTermMurders = m_Item.ShortKills1; m_Item.Player2.ShortTermMurders = m_Item.ShortKills2; m_Item.Player1.Kills = m_Item.LongKills1; m_Item.Player2.Kills = m_Item.LongKills2; m_Item.Player1.Map = m_Item.MapFrom; m_Item.Player2.Map = m_Item.MapFrom; Server.Scripts.Commands.CommandHandlers.GetFollowers_OnTarget( m_Item.Player1, m_Item.Player1 ); Server.Scripts.Commands.CommandHandlers.GetFollowers_OnTarget( m_Item.Player2, m_Item.Player2 ); m_Item.Player1 = null; m_Item.Player2 = null; m_Item.Karma1 = 0; m_Item.Karma2 = 0; m_Item.Fame1 = 0; m_Item.Fame2 = 0; m_Item.ShortKills1 = 0; m_Item.ShortKills2 = 0; m_Item.LongKills1 = 0; m_Item.LongKills2 = 0; m_Item.Gold = 0; m_Item.MapTo = null; m_Item.Active = true; } } } } } |