| CODE |
using System; using Server; using Server.Gumps; using Server.Targeting; using Server.Mobiles; namespace Server.Items { /////////////////////////////////////// // Component de la Boite aux lettres // /////////////////////////////////////// public class BoiteAuLettreComponent : AddonComponent { bool owned = false; public Mobile owner; public Mobile[] perso = new Mobile[] { null, null, null }; int m_dir; [CommandProperty( AccessLevel.GameMaster )] public Mobile Proprio { get { return owner; } set { owner = value; InvalidateProperties(); } } // dir : 0 North 1 West public BoiteAuLettreComponent(int dir) : base(0x1ED4) { switch(dir) { case 0 : { ItemID = 0x1ED4; break; } case 1 : { ItemID = 0x1ED7; break; } } Name = "Boite aux lettres"; m_dir = dir; } public BoiteAuLettreComponent( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version writer.Write( (Mobile) owner ); writer.Write( (bool) owned ); for(int i=0;i<perso.Length;i++) { writer.Write( (Mobile) perso[i]); } writer.Write( (int) m_dir ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); owner = reader.ReadMobile(); owned = reader.ReadBool(); for(int i=0;i<perso.Length;i++) { perso[i] = reader.ReadMobile(); } m_dir = reader.ReadInt(); } public override void OnDoubleClick(Mobile from) { if( owned == false ) { owner = from; owned = true; } from.SendGump( new InternalGump( from,this ) ); } public void AddPerso(Mobile target,Mobile from) { int i; for(i=0; i<perso.Length; i++) { if(perso[i] == null) { perso[i] = (Mobile)target; from.SendMessage(perso[i].Name+" Ajouté"); return; } } } public Mobile GetPerso( int i ) { return perso[i]; } public void RemovePerso( int i) { perso[i] = null; } public void Redeed(Mobile from) { this.Delete(); switch(m_dir) { case 0: from.AddToBackpack( new BoiteAuLettreSudDeed() ); break; case 1: from.AddToBackpack( new BoiteAuLettreEstDeed() ); break; } } } //////////////////////////// // Gump Boite aux lettres // //////////////////////////// public class InternalGump : Gump { Mobile m_from; BoiteAuLettreComponent m_item; public void AddButtonLabeled( int x, int y, int buttonID, string text ) { AddButton( x, y - 1, 4005, 4007, buttonID, GumpButtonType.Reply, 0 ); AddHtml( x + 35, y, 240, 20,""+text+"",false, false ); } public void AddButtonLabeledDel( int x, int y, int buttonID, string text ) { AddButton( x, y - 1, 4017, 4019, buttonID, GumpButtonType.Reply, 0 ); AddHtml( x + 35, y, 240, 20,""+text+"",false, false ); } public InternalGump(Mobile from,BoiteAuLettreComponent item) : base(100,100) { m_from = from; m_item = item; AddBackground( 55, 60, 280, 200, 5054 ); AddLabel( 140, 70, 0x26, "Boite aux Lettres" ); AddLabel( 240,240, 0,"Enola v 0.1"); // emplacement 1 AddImageTiled( 80, 100, 182, 23, 0x52 ); AddImageTiled( 81, 101, 180, 21, 0xBBC ); if(m_item.perso[0] != null) AddLabelCropped( 91, 101, 180, 21, 0, m_item.perso[0].Name); AddButtonLabeled(270,100,1,""); // emplacement 2 AddImageTiled( 80, 120, 182, 23, 0x52 ); AddImageTiled( 81, 121, 180, 21, 0xBBC ); if(m_item.perso[1] != null) AddLabelCropped( 91, 121, 180, 21, 0, m_item.perso[1].Name); AddButtonLabeled(270,120,2,""); // emplacement 3 AddImageTiled( 80, 140, 182, 23, 0x52 ); AddImageTiled( 81, 141, 180, 21, 0xBBC ); if(m_item.perso[2] != null) AddLabelCropped( 91, 141, 180, 21, 0, m_item.perso[2].Name); AddButtonLabeled(270,140,3,""); // Boutton owner if(m_from == m_item.owner) { AddButtonLabeled(100,200,4,"Ajouter une personne"); AddButtonLabeled(100,220,8,"Redeed"); AddButtonLabeledDel(300,100,5,""); AddButtonLabeledDel(300,120,6,""); AddButtonLabeledDel(300,140,7,""); } } public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) { int val = info.ButtonID; switch(val) { case 0: break; case 1: { m_from.Target = new SendTarget(m_item,0); m_from.SendMessage("Que desirez vous envoyer?"); break; } case 2: { m_from.Target = new SendTarget(m_item,1); m_from.SendMessage("Que desirez vous envoyer?"); break; } case 3: { m_from.Target = new SendTarget(m_item,2); m_from.SendMessage("Que desirez vous envoyer?"); break; } case 4: { m_from.Target = new AddTarget(m_item); m_from.SendMessage("Qui desirez vous ajouter?"); break; } case 5: { m_item.RemovePerso(0); break; } case 6: { m_item.RemovePerso(1); break; } case 7: { m_item.RemovePerso(2); break; } case 8: { m_item.Redeed(m_from); m_from.SendMessage("Vous Redeedez la boite aux lettres"); break; } default: break; } } } /////////////////////////// // Target Ajout Personne // /////////////////////////// public class AddTarget : Target { BoiteAuLettreComponent m_item; public AddTarget(BoiteAuLettreComponent item) : base(3,false,TargetFlags.None) { m_item = item; } protected override void OnTarget(Mobile from, object targ) { if(targ is PlayerMobile) { Mobile target = (Mobile) targ; m_item.AddPerso(target,from); } } } ////////////////// // Target Envoi // ////////////////// public class SendTarget : Target { int pos; BoiteAuLettreComponent m_item; public SendTarget(BoiteAuLettreComponent item, int val) : base(0,false,TargetFlags.None) { pos = val; m_item = item; } protected override void OnTarget(Mobile from, object targ) { try { if( targ is PapierALettre) { PapierALettre target = (PapierALettre) targ; if(target.IsChildOf(from.Backpack)) { Mobile to = m_item.GetPerso(pos); to.AddToBackpack(target); from.SendMessage("Objet envoyé a: "+to.Name); to.SendMessage(0x22,"Vous venez de recevoir une lettre"); target.Auteur = from; } else from.SendMessage("L'objet doit etre dans votre sac!"); } else from.SendMessage("Vous ne pouvez pas envoyer cela!"); } catch(NullReferenceException) { from.SendMessage("Personne Invalide!"); } } } ///////////////////////////// // Addon Boite aux Lettres // ///////////////////////////// public class BoiteAuLettreAddon : BaseAddon { public int m_dir; [Constructable] public BoiteAuLettreAddon(int dir) { AddComponent( new BoiteAuLettreComponent(dir), 0, 0, 0 ); Name = "Boite au lettre"; } public BoiteAuLettreAddon( 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(); } } //////////////////////////// // Deed Boite aux lettres // //////////////////////////// public class BoiteAuLettreSudDeed : BaseAddonDeed { public override BaseAddon Addon{ get{ return new BoiteAuLettreAddon(0); } } // public override int LabelNumber{ get{ return 1044329; } } // abbatoir [Constructable] public BoiteAuLettreSudDeed() { Name = "Boite aux lettres Sud"; } public BoiteAuLettreSudDeed( 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 BoiteAuLettreEstDeed : BaseAddonDeed { public override BaseAddon Addon{ get{ return new BoiteAuLettreAddon(1); } } // public override int LabelNumber{ get{ return 1044329; } } // abbatoir [Constructable] public BoiteAuLettreEstDeed() { Name = "Boite aux lettres Est"; } public BoiteAuLettreEstDeed( 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 PapierALettre : BaseBook { Mobile sender; [CommandProperty( AccessLevel.GameMaster )] public Mobile Auteur { get { return sender; } set { sender = value; InvalidateProperties(); } } [Constructable] public PapierALettre() : base(0x14ED) { Name = "Papier a lettre"; } public PapierALettre( Serial serial ) : base( serial ) { } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); sender = reader.ReadMobile(); } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int)0 ); // version writer.Write( (Mobile) sender); } } } |