View Full Version: Pancarte de location de maison

RunUO.FR Support > Items > Pancarte de location de maison


Title: Pancarte de location de maison
Description: Acheter puis louer votre maison.


Shariz - August 24, 2003 10:34 PM (GMT)
CODE

//Pancarte de location automatique de maison.
//Fait par Shariz
//La Pancarte1 clône la pancarte principale. En cliquant dessus vous avez acces à la pancarte de base.

using System;
using Server;
using Server.Multis;
using Server.Gumps;
using Server.Items;
using Server.Network;
using Server.Mobiles;
using Server.Targeting;

namespace Server.Items
{
public class Pancarte : Item
{
public Mobile i_proprio;
public Mobile i_locataire;
public int i_Acheter = 100000;
public int i_Loyer = 15000;
public bool i_Location = false;
public DateTime i_Date = DateTime.Now;
public DateTime i_DateLocataire;
public int i_Argent = 0;
public int i_ArgentAdmin = 0;

private Point3D i_pointA;
private Point3D i_pointB;

 private Mobile m;
 
 [Constructable]
 public Pancarte() : base( 0xBD2 )
 {
  Name = "Maison à vendre";
  Movable = false;
 }

 public Pancarte( Serial serial ) : base( serial )
 {
 }


 [CommandProperty( AccessLevel.GameMaster )]
 public Point3D pointA
 {
  get { return i_pointA; }
  set { i_pointA = value; }
 }

 [CommandProperty( AccessLevel.GameMaster )]
 public Point3D pointB
 {
  get { return i_pointB; }
  set { i_pointB = value; }
 }


 [CommandProperty( AccessLevel.GameMaster )]
 public Mobile Proprio
 {
  get { return i_proprio; }
  set { i_proprio = value; }
 }
 [CommandProperty( AccessLevel.GameMaster )]
 public Mobile Locataire
 {
  get { return i_locataire; }
  set { i_locataire = value; }
 }

 [CommandProperty( AccessLevel.GameMaster )]
 public int Acheter
 {
  get {return i_Acheter;}
  set {i_Acheter = value;}
 }

 [CommandProperty( AccessLevel.GameMaster )]
 public int Loyer
 {
  get {return i_Loyer;}
  set {i_Loyer = value;}
 }

 [CommandProperty( AccessLevel.GameMaster )]
 public bool Location
 {
  get {return i_Location;}
  set {i_Location = value;}
 }

 [CommandProperty( AccessLevel.GameMaster )]
 public DateTime DateProprietaire
 {
  get {return i_Date;}
  set {i_Date = value;}
 }

 [CommandProperty( AccessLevel.GameMaster )]
 public DateTime DateLocataire
 {
  get {return i_DateLocataire;}
  set {i_DateLocataire = value;}
 }

 [CommandProperty( AccessLevel.GameMaster )]
 public int Argent
 {
  get {return i_Argent;}
  set {i_Argent = value;}
 }

 [CommandProperty( AccessLevel.GameMaster )]
 public int ArgentAdmin
 {
  get {return i_ArgentAdmin;}
  set {i_ArgentAdmin = value;}
 }

 public override void OnDoubleClick( Mobile m )
 {

  if (i_Date < DateTime.Now)
  {
   i_proprio = null; i_locataire = null; Name = "Maison à vendre";
  }

  if (i_Location == true && i_DateLocataire < DateTime.Now)
  {
   i_locataire = null; Name = "Maison à Louer";
  }

  if (i_proprio == null && m.AccessLevel < AccessLevel.GameMaster)
  {
   m.SendGump(new AcheterGump(m, this));
  }

  if (i_locataire == null && i_Location == true && i_proprio != null && i_proprio != m)
  {
   m.SendGump(new LoyerGump(m, this));
  }

  if (i_proprio == m || i_locataire == m || m.AccessLevel >= AccessLevel.GameMaster)
  {
   m.SendGump(new PancarteGump(m, this));
   m.SendSound(0xED);
  }
 
  if ( i_proprio != m && i_locataire != m )
  {
   if (i_proprio != null)
   {
    m.SendMessage("Le propriétaire : {0}", i_proprio.Name);
   }
   if (i_locataire != null)
   {
    m.SendMessage("Le locataire : {0}", i_locataire.Name);
   }
  }
 }

 public override void Serialize( GenericWriter writer )
 {
  base.Serialize( writer );

  writer.Write( (int) 1 ); // version


  writer.Write((Point3D) i_pointA);
  writer.Write((Point3D) i_pointB);

  writer.Write((Mobile) i_proprio);
  writer.Write((Mobile) i_locataire);
  writer.Write((int) i_Acheter);
  writer.Write((int) i_Loyer);
  writer.Write((bool) i_Location);
  writer.Write((DateTime) i_Date);
  writer.Write((DateTime) i_DateLocataire);
  writer.Write((int) i_Argent);
  writer.Write((int) i_ArgentAdmin);
 }

 public override void Deserialize( GenericReader reader )
 {
  base.Deserialize( reader );

  int version = reader.ReadInt();

  switch ( version )
  {
case 1:
{
i_pointA = reader.ReadPoint3D();
i_pointB = reader.ReadPoint3D();
goto case 0;
}
   case 0:
   {
    i_proprio = reader.ReadMobile();
    i_locataire = reader.ReadMobile();
    i_Acheter = reader.ReadInt();
    i_Loyer = reader.ReadInt();
    i_Location = reader.ReadBool();
    i_Date = reader.ReadDateTime();
    i_DateLocataire = reader.ReadDateTime();
    i_Argent = reader.ReadInt();
    i_ArgentAdmin = reader.ReadInt();

    break;
   }
  }
 }
}

public class PancarteGump : Gump
{
private Pancarte item;

public PancarteGump(Mobile from, Pancarte pancarte) : base (20, 30)
{
 Mobile mobile = from;
 item = pancarte;

 AddPage(0);
 AddBackground( 0, 0, 400, 350, 5054); // ( 0,0 Nbre point1 par rapport au gump / 260,350 longueur/hauteur. / image du gump )
 AddLabel(15, 10, 3, "Ecran de gestion des habitations.");

 if (from is PlayerMobile)
 {
  PlayerMobile m = (PlayerMobile)from;

  // Propriétaire
  if (item.i_proprio == m)
  {
   AddButton( 15, 250, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0);
   AddLabel(50, 250, 0x34, "Choisir un nouveau locataire.");

   if (item.i_Location == false)
   {
    AddButton( 15, 275, 0xFB7, 0xFB9, 8, GumpButtonType.Reply, 0);
    AddLabel(50, 275, 0x34, "Autoriser la location automatique.");
   }
   else
   {
    AddButton( 15, 275, 0xFB7, 0xFB9, 9, GumpButtonType.Reply, 0);
    AddLabel(50, 275, 0x34, "Interdire la location automatique. (supprimer locataire)");
   }


   AddButton( 15, 175, 0xFB7, 0xFB9, 11, GumpButtonType.Reply, 0);
   AddLabel(50, 175, 0x34, "Payer le bâtiment.");

   AddButton( 15, 300, 0xFB7, 0xFB9, 10, GumpButtonType.Reply, 0);
   AddLabel(50, 300, 0x34, "Récupérer l'argent.");
  }


   AddButton( 15, 50, 0xFB7, 0xFB9, 2, GumpButtonType.Reply, 0);
   AddLabel(50, 50, 0x34, "Changer le nom de la pancarte.");

   AddButton( 15, 75, 0xFB7, 0xFB9, 3, GumpButtonType.Reply, 0);
   AddLabel(50, 75, 0x34, "Acceder à la banque.");

   AddButton( 15, 100, 0xFB7, 0xFB9, 4, GumpButtonType.Reply, 0);
   AddLabel(50, 100, 0x34, "Locker un objet.");

   AddButton( 15, 125, 0xFB7, 0xFB9, 5, GumpButtonType.Reply, 0);
   AddLabel(50, 125, 0x34, "Délocker un objet.");

   AddButton( 15, 150, 0xFB7, 0xFB9, 6, GumpButtonType.Reply, 0);
   AddLabel(50, 150, 0x34, "Changer la pancarte.");

   if (item.i_proprio != m)
   {
    AddButton( 15, 175, 0xFB7, 0xFB9, 7, GumpButtonType.Reply, 0);
    AddLabel(50, 175, 0x34, "Payer un loyer.");
   }
 }

}

public override void OnResponse( NetState state, RelayInfo info )
{
 
   Mobile from = state.Mobile;
   if( from is PlayerMobile )
      {
       PlayerMobile m = ( PlayerMobile ) from;

  switch ( info.ButtonID )
  {
 
   case 1:
   {
    m.Target = new ProprioTarget(item);
   break;
   }

   case 2:
   {
    m.SendGump(new RenommerGump(from, item));
   break;
   }

   case 3:
   {
    m.BankBox.Open();
   break;
   }

   case 4:
   {
    m.Target = new LockerTarget(item);
   break;
   }
   
   case 5:
   {
    m.Target = new DeLockerTarget(item);
   break;
   }
   
   case 6:
   {
    m.SendGump( new NouvellePancarteGump(from, item));
   break;
   }

   case 7:
   {
    m.SendGump(new PayerGump(from, item));
   break;
   }

   case 8:
   {
    item.i_Location = true;
   break;
   }

   case 9:
   {
    item.i_Location = false;
    item.i_locataire = null;
   break;
   }

   case 10:
   {
    if (item.i_Argent > 0)
    {

     m.BankBox.DropItem( new Gold(item.i_Argent) );
     m.SendSound(0x2E3);
     m.SendMessage("Vous avez récuperer {0} pièces d'or.", item.i_Argent);
     item.i_Argent = 0;
    }
    else
    {
     m.SendMessage("Il n'y a pas d'or!");
     m.SendSound(0x1F0);
    }
   break;
   }

   case 11:
   {
    m.SendGump( new PayerAchatGump(from, item));
   break;
   }
  break;
  }
 }
}
}

public class ProprioTarget : Target
{
Pancarte pancarte;

public ProprioTarget(Pancarte i_Pancarte) : base( 5, false, TargetFlags.None) // base(Nbre de case, peut target le sol, bheu)
{
 pancarte = i_Pancarte;
}

protected override void OnTarget( Mobile from, object targ )
{
 PlayerMobile m = (PlayerMobile)from;

 if (targ is Mobile && targ != m)
 {
  PlayerMobile cible = (PlayerMobile)targ;

  if (cible == pancarte.i_locataire)
  {
   m.SendMessage("la cible est déjà locataire des lieux");
  }
  else if (pancarte.i_locataire == null)
  {
   pancarte.i_locataire = cible;
   pancarte.i_Location = false;
   m.SendMessage("le nouveau locataire est : {0}", cible.Name);
   cible.SendMessage("Vous êtes locataire");
  }
  else
  {
   m.SendMessage(" il y a déjà un locataire.");
   m.SendMessage("Pour supprimer le locataire, ciblez la pancarte.");
  }
 }
 else if (targ == pancarte)
 {
  if (pancarte.i_DateLocataire < DateTime.Now)
  {
   pancarte.i_locataire = null;
   m.SendMessage("Locataire supprimer!");
  }
  else
  {
   m.SendGump(new EffaceLocataireGump(from, pancarte));
  }
 }
 else if ( targ is Mobile && targ == m)
 {
  m.SendMessage("Vous ne pouvez pas vous cibler!");
 }
 else
 {
  m.SendMessage("Vous devez cibler un joueur ou votre pancarte!");
 }
}
}

public class EffaceLocataireGump : Gump
{
private Pancarte item;

public EffaceLocataireGump(Mobile from, Pancarte pancarte) : base(20, 30)
{
 Mobile mobile = from;
 item = pancarte;

 AddPage(0);
 AddBackground(0, 0, 50, 100, 5054);
 AddLabel(25, 10, 0x480, "Le bâtiment est louer par" + item.i_locataire + "jusqu'au : " + item.i_DateLocataire);
 AddLabel(25, 30, 0x480, "Voulez-vous vraiment supprimer ce locataire?");
 AddButton(25, 50, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0);
 AddLabel(60, 50, 0x480, "Valider");
}

public override void OnResponse(NetState state, RelayInfo info)
{
 Mobile from = state.Mobile;
 if (from is PlayerMobile)
 {
  PlayerMobile m = (PlayerMobile)from;
  TextRelay text = info.GetTextEntry( 1 );

  switch ( info.ButtonID )
  {
   case 1:
   {
    item.i_locataire = null;
    m.SendMessage("Locataire supprimer!");
   break;
   }
  }
 }
}
}


public class RenommerGump : Gump
{
private Pancarte item;
private string i_Nom;

public RenommerGump(Mobile from, Pancarte pancarte) : base (20, 30)
{
 Mobile mobile = from;
 item = pancarte;

 AddPage(0);
 AddBackground( 0, 0, 350, 100, 5054);
 AddLabel(25, 10, 0x480, "Renommer la pancarte.");
 //AddImage(25, 40, 0x16C);
 AddTextEntry( 25, 40, 300, 65, 0x480, 1, string.Empty);
 AddButton( 25, 70, 0xFB7, 0xFB9, 2, GumpButtonType.Reply, 0);
 AddLabel(60, 70, 0x480, "Valider");
}

public override void OnResponse( NetState state, RelayInfo info )
{
 
   Mobile from = state.Mobile;
   if( from is PlayerMobile )
      {
       PlayerMobile m = ( PlayerMobile ) from;
 TextRelay text = info.GetTextEntry( 1 );

  switch ( info.ButtonID )
  {
   case 1:
   {
    if (text != null)
    {
     i_Nom = "text.Text";
     item.Name = i_Nom;
     //m.SendMessage("Le nouveau nom est : {0}", item.Name);
    }
    break;
   }

   case 2:
   {
    item.Name = text.Text;
    m.SendMessage("le nouveau nom est : {0}", item.Name);
    break;
   }
  }
 }
}
}


public class LockerTarget : Target
{
Pancarte pancarte;

public LockerTarget(Pancarte i_Pancarte) : base( 8, false, TargetFlags.None) // base(Nbre de case, peut target le sol, bheu)
{
 pancarte = i_Pancarte;
}

protected override void OnTarget( Mobile from, object targ )
{
 PlayerMobile m = (PlayerMobile)from;

 if (targ is Mobile && targ != m)
 {
  m.SendMessage("Vous ne pouvez pas locker un personnage!");
 }
 else if (targ == pancarte || targ is Pancarte)
 {
  m.SendMessage("Vous ne pouvez pas locker la pancarte!");
 }
 else if ( targ is Mobile && targ == m)
 {
  m.SendMessage("Vous ne pouvez pas vous cibler!");
 }
 else if (targ is Item)
 {
  Item i_cible = (Item)targ;

if ( ( pancarte.pointA.X < i_cible.Location.X ) && ( i_cible.Location.X < pancarte.pointB.X ) && ( pancarte.pointA.Y < i_cible.Location.Y ) && ( i_cible.Location.Y < pancarte.pointB.Y ) )
{
  string nom = i_cible.Name;
  i_cible.Movable = false;
  i_cible.Name = nom + " locker par :" + m.Name;
}
else { m.SendMessage("Vous devez cibler un objet qui se trouve dans le batiment!"); }

 }

 else
 {
  m.SendMessage("Vous devez cibler un objet!");
 }
}
}


public class DeLockerTarget : Target
{
Pancarte pancarte;

public DeLockerTarget(Pancarte i_Pancarte) : base( 8, false, TargetFlags.None) // base(Nbre de case, peut target le sol, bheu)
{
 pancarte = i_Pancarte;
}

protected override void OnTarget( Mobile from, object targ )
{
 PlayerMobile m = (PlayerMobile)from;

 if (targ is Mobile && targ != m)
 {
  m.SendMessage("Vous ne pouvez pas délocker un personnage!");
 }
 else if (targ == pancarte || targ is Pancarte)
 {
  m.SendMessage("Vous ne pouvez pas délocker la pancarte!");
 }
 else if ( targ is Mobile && targ == m)
 {
  m.SendMessage("Vous ne pouvez pas vous cibler!");
 }
 else if (targ is Item)
 {
  Item i_cible = (Item)targ;

if ( ( pancarte.pointA.X < i_cible.Location.X ) && ( i_cible.Location.X < pancarte.pointB.X ) && ( pancarte.pointA.Y < i_cible.Location.Y ) && ( i_cible.Location.Y < pancarte.pointB.Y ) )
{
  string nom = i_cible.Name;

  i_cible.Movable = true;
  i_cible.Name = nom + " Délocker par :" + m.Name;
}
else { m.SendMessage("Vous devez cibler un objet qui se trouve dans le batiment!"); }
 }

 else
 {
  m.SendMessage("Vous devez cibler un objet!");
 }
}
}


public class NouvellePancarteGump : Gump
{
private Pancarte item;

public NouvellePancarteGump(Mobile from, Pancarte pancarte) : base (20, 30)
{
 Mobile mobile = from;
 item = pancarte; //(Pancarte)pancarte;


 AddPage(0);
 AddBackground( 0, 0, 500, 450, 5054);
 AddLabel(25, 10, 0x480, "Changer la pancarte.");
 //AddImageTiled(100, 100, 50, 50, 1358);
        AddImageTiled( 245, 40, 5, 370, 0x52 );

 AddButton( 25, 40, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0);
 AddLabel(60, 40, 0x480,"Cuivre");
 AddButton( 135, 40, 0xFB7, 0xFB9, 2, GumpButtonType.Reply, 0);
 AddLabel(170, 40, 0x480, "Cuivre");

 AddButton( 25, 60, 0xFB7, 0xFB9, 3, GumpButtonType.Reply, 0);
 AddLabel(60, 60, 0x480,"Bois");
 AddButton( 135, 60, 0xFB7, 0xFB9, 4, GumpButtonType.Reply, 0);
 AddLabel(170, 60, 0x480, "Bois");

 AddButton( 25, 80, 0xFB7, 0xFB9, 5, GumpButtonType.Reply, 0);
 AddLabel(60, 80, 0x480,"Librairie");
 AddButton( 135, 80, 0xFB7, 0xFB9, 6, GumpButtonType.Reply, 0);
 AddLabel(170, 80, 0x480, "Librairie");

 AddButton( 25, 100, 0xFB7, 0xFB9, 7, GumpButtonType.Reply, 0);
 AddLabel(60, 100, 0x480,"Boulangerie");
 AddButton( 135, 100, 0xFB7, 0xFB9, 8, GumpButtonType.Reply, 0);
 AddLabel(170, 100, 0x480, "Boulangerie");

 AddButton( 25, 120, 0xFB7, 0xFB9, 9, GumpButtonType.Reply, 0);
 AddLabel(60, 120, 0x480,"Tailleur");
 AddButton( 135, 120, 0xFB7, 0xFB9, 10, GumpButtonType.Reply, 0);
 AddLabel(170, 120, 0x480, "Tailleur");

 AddButton( 25, 140, 0xFB7, 0xFB9, 11, GumpButtonType.Reply, 0);
 AddLabel(60, 140, 0x480,"Bricoleur");
 AddButton( 135, 140, 0xFB7, 0xFB9, 12, GumpButtonType.Reply, 0);
 AddLabel(170, 140, 0x480, "Bricoleur");

 AddButton( 25, 160, 0xFB7, 0xFB9, 13, GumpButtonType.Reply, 0);
 AddLabel(60, 160, 0x480,"Boucherie");
 AddButton( 135, 160, 0xFB7, 0xFB9, 14, GumpButtonType.Reply, 0);
 AddLabel(170, 160, 0x480, "Boucherie");

 AddButton( 25, 180, 0xFB7, 0xFB9, 15, GumpButtonType.Reply, 0);
 AddLabel(60, 180, 0x480,"Dispensaire");
 AddButton( 135, 180, 0xFB7, 0xFB9, 16, GumpButtonType.Reply, 0);
 AddLabel(170, 180, 0x480, "Dispensaire");

 AddButton( 25, 200, 0xFB7, 0xFB9, 17, GumpButtonType.Reply, 0);
 AddLabel(60, 200, 0x480,"Mage");
 AddButton( 135, 200, 0xFB7, 0xFB9, 18, GumpButtonType.Reply, 0);
 AddLabel(170, 200, 0x480, "Mage");


 AddButton( 25, 220, 0xFB7, 0xFB9, 19, GumpButtonType.Reply, 0);
 AddLabel(60, 220, 0x480,"Menuiserie");
 AddButton( 135, 220, 0xFB7, 0xFB9, 20, GumpButtonType.Reply, 0);
 AddLabel(170, 220, 0x480, "Menuiserie");

 AddButton( 25, 240, 0xFB7, 0xFB9, 21, GumpButtonType.Reply, 0);
 AddLabel(60, 240, 0x480,"Douane");
 AddButton( 135, 240, 0xFB7, 0xFB9, 22, GumpButtonType.Reply, 0);
 AddLabel(170, 240, 0x480, "Douane");

 AddButton( 25, 260, 0xFB7, 0xFB9, 23, GumpButtonType.Reply, 0);
 AddLabel(60, 260, 0x480,"Auberge");
 AddButton( 135, 260, 0xFB7, 0xFB9, 24, GumpButtonType.Reply, 0);
 AddLabel(170, 260, 0x480, "Auberge");

 AddButton( 25, 280, 0xFB7, 0xFB9, 25, GumpButtonType.Reply, 0);
 AddLabel(60, 280, 0x480,"Navire");
 AddButton( 135, 280, 0xFB7, 0xFB9, 26, GumpButtonType.Reply, 0);
 AddLabel(170, 280, 0x480, "Navire");

 AddButton( 25, 300, 0xFB7, 0xFB9, 27, GumpButtonType.Reply, 0);
 AddLabel(60, 300, 0x480,"Etable");
 AddButton( 135, 300, 0xFB7, 0xFB9, 28, GumpButtonType.Reply, 0);
 AddLabel(170, 300, 0x480, "Etable");


 AddButton( 25, 320, 0xFB7, 0xFB9, 29, GumpButtonType.Reply, 0);
 AddLabel(60, 320, 0x480,"Barbier");
 AddButton( 135, 320, 0xFB7, 0xFB9, 30, GumpButtonType.Reply, 0);
 AddLabel(170, 320, 0x480, "Barbier");

 AddButton( 25, 340, 0xFB7, 0xFB9, 31, GumpButtonType.Reply, 0);
 AddLabel(60, 340, 0x480,"Barde");
 AddButton( 135, 340, 0xFB7, 0xFB9, 32, GumpButtonType.Reply, 0);
 AddLabel(170, 340, 0x480, "Barde");

 AddButton( 25, 360, 0xFB7, 0xFB9, 33, GumpButtonType.Reply, 0);
 AddLabel(60, 360, 0x480,"Archerie");
 AddButton( 135, 360, 0xFB7, 0xFB9, 34, GumpButtonType.Reply, 0);
 AddLabel(170, 360, 0x480, "Archerie");

 AddButton( 25, 380, 0xFB7, 0xFB9, 35, GumpButtonType.Reply, 0);
 AddLabel(60, 380, 0x480,"Armurier");
 AddButton( 135, 380, 0xFB7, 0xFB9, 36, GumpButtonType.Reply, 0);
 AddLabel(170, 380, 0x480, "Armurier");

 AddButton( 25, 400, 0xFB7, 0xFB9, 37, GumpButtonType.Reply, 0);
 AddLabel(60, 400, 0x480,"Bijoutier");
 AddButton( 135, 400, 0xFB7, 0xFB9, 38, GumpButtonType.Reply, 0);
 AddLabel(170, 400, 0x480, "Bijoutier");

//////////////////////////////////////////////////////////////

 AddButton( 270, 40, 0xFB7, 0xFB9, 39, GumpButtonType.Reply, 0);
 AddLabel(305, 40, 0x480,"Taverne");
 AddButton( 380, 40, 0xFB7, 0xFB9, 40, GumpButtonType.Reply, 0);
 AddLabel(415, 40, 0x480, "Taverne");

 AddButton( 270, 60, 0xFB7, 0xFB9, 41, GumpButtonType.Reply, 0);
 AddLabel(305, 60, 0x480,"Herboriste");
 AddButton( 380, 60, 0xFB7, 0xFB9, 42, GumpButtonType.Reply, 0);
 AddLabel(415, 60, 0x480, "Herboriste");

 AddButton( 270, 80, 0xFB7, 0xFB9, 43, GumpButtonType.Reply, 0);
 AddLabel(305, 80, 0x480,"Forge");
 AddButton( 380, 80, 0xFB7, 0xFB9, 44, GumpButtonType.Reply, 0);
 AddLabel(415, 80, 0x480, "Forge");

 AddButton( 270, 100, 0xFB7, 0xFB9, 45, GumpButtonType.Reply, 0);
 AddLabel(305, 100, 0x480,"Art");
 AddButton( 380, 100, 0xFB7, 0xFB9, 46, GumpButtonType.Reply, 0);
 AddLabel(415, 100, 0x480, "Art");

 AddButton( 270, 120, 0xFB7, 0xFB9, 47, GumpButtonType.Reply, 0);
 AddLabel(305, 120, 0x480,"Provision");
 AddButton( 380, 120, 0xFB7, 0xFB9, 48, GumpButtonType.Reply, 0);
 AddLabel(415, 120, 0x480, "Provision");

 AddButton( 270, 140, 0xFB7, 0xFB9, 49, GumpButtonType.Reply, 0);
 AddLabel(305, 140, 0x480,"Archerie");
 AddButton( 380, 140, 0xFB7, 0xFB9, 50, GumpButtonType.Reply, 0);
 AddLabel(415, 140, 0x480, "Archerie");

 AddButton( 270, 160, 0xFB7, 0xFB9, 51, GumpButtonType.Reply, 0);
 AddLabel(305, 160, 0x480,"Banque");
 AddButton( 380, 160, 0xFB7, 0xFB9, 52, GumpButtonType.Reply, 0);
 AddLabel(415, 160, 0x480, "Banque");

 AddButton( 270, 180, 0xFB7, 0xFB9, 53, GumpButtonType.Reply, 0);
 AddLabel(305, 180, 0x480,"Théatre");
 AddButton( 380, 180, 0xFB7, 0xFB9, 54, GumpButtonType.Reply, 0);
 AddLabel(415, 180, 0x480, "Théatre");

 AddButton( 270, 200, 0xFB7, 0xFB9, 55, GumpButtonType.Reply, 0);
 AddLabel(305, 200, 0x480,"Ruche");
 AddButton( 380, 200, 0xFB7, 0xFB9, 56, GumpButtonType.Reply, 0);
 AddLabel(415, 200, 0x480, "Ruche");

 

}

public override void OnResponse( NetState state, RelayInfo info )
{
   Mobile from = state.Mobile;

   if( from is PlayerMobile )
      {
        PlayerMobile m = ( PlayerMobile ) from;
  TextRelay text = info.GetTextEntry( 1 );

  switch ( info.ButtonID )
  {
   case 1: { item.ItemID = 3025; break; }
   case 2: { item.ItemID = 3026; break; }
   case 3: { item.ItemID = 3023; break; }
   case 4: { item.ItemID = 3024; break; }
   case 5: { item.ItemID = 2965; break; }
   case 6: { item.ItemID = 2966; break; }
   case 7: { item.ItemID = 2979; break; }
   case 8: { item.ItemID = 2980; break; }
   case 9: { item.ItemID = 2981; break; }
   case 10: { item.ItemID = 2982; break; }
   case 11: { item.ItemID = 2983; break; }
   case 12: { item.ItemID = 2984; break; }
   case 13: { item.ItemID = 2985; break; }
   case 14: { item.ItemID = 2986; break; }
   case 15: { item.ItemID = 2987; break; }
   case 16: { item.ItemID = 2988; break; }
   case 17: { item.ItemID = 2989; break; }
   case 18: { item.ItemID = 2990; break; }
   case 19: { item.ItemID = 2991; break; }
   case 20: { item.ItemID = 2992; break; }
   case 21: { item.ItemID = 2993; break; }
   case 22: { item.ItemID = 2994; break; }
   case 23: { item.ItemID = 2995; break; }
   case 24: { item.ItemID = 2996; break; }
   case 25: { item.ItemID = 2997; break; }
   case 26: { item.ItemID = 2998; break; }
   case 27: { item.ItemID = 2999; break; }
   case 28: { item.ItemID = 3000; break; }
   case 29: { item.ItemID = 3001; break; }
   case 30: { item.ItemID = 3002; break; }

   case 31: { item.ItemID = 3003; break; }
   case 32: { item.ItemID = 3004; break; }
   case 33: { item.ItemID = 3005; break; }
   case 34: { item.ItemID = 3006; break; }
   case 35: { item.ItemID = 3007; break; }
   case 36: { item.ItemID = 3008; break; }
   case 37: { item.ItemID = 3009; break; }
   case 38: { item.ItemID = 3010; break; }

////////////////////////////////////////////////////////////////////////

   case 39: { item.ItemID = 3011; break; }
   case 40: { item.ItemID = 3012; break; }
   case 41: { item.ItemID = 3013; break; }
   case 42: { item.ItemID = 3014; break; }
   case 43: { item.ItemID = 3015; break; }
   case 44: { item.ItemID = 3016; break; }
   case 45: { item.ItemID = 3017; break; }
   case 46: { item.ItemID = 3018; break; }
   case 47: { item.ItemID = 3019; break; }
   case 48: { item.ItemID = 3020; break; }

   case 49: { item.ItemID = 3021; break; }
   case 50: { item.ItemID = 3022; break; }
   case 51: { item.ItemID = 3083; break; }
   case 52: { item.ItemID = 3084; break; }
   case 53: { item.ItemID = 3085; break; }
   case 54: { item.ItemID = 3086; break; }
   case 55: { item.ItemID = 3139; break; }
   case 56: { item.ItemID = 3140; break; }
   case 57: { item.ItemID = 3019; break; }
   case 58: { item.ItemID = 3020; break; }
  }
 }
}
}


public class AcheterGump : Gump
{
private Pancarte item;
private int Prix;

public AcheterGump(Mobile from, Pancarte pancarte) : base (20, 30)
{
 Mobile mobile = from;
 item = pancarte;
 Prix = item.i_Acheter;


 AddPage(0);
 AddBackground( 0, 0, 250, 100, 5054);
 AddLabel(25, 10, 0x480, "Acheter le bâtiment.");
 AddLabel(25, 30, 0x480, "Le prix est " + item.i_Acheter +  " pièces d'or." );

 AddButton( 25, 60, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0);
 AddLabel(65, 60, 0x34, "Acheter");
}

public override void OnResponse( NetState state, RelayInfo info )
{
   Mobile from = state.Mobile;

   if( from is PlayerMobile )
      {
        PlayerMobile m = ( PlayerMobile ) from;
  TextRelay text = info.GetTextEntry( 1 );

  switch ( info.ButtonID )
  {
   case 1:
   {
    BankBox box = from.BankBox;
    int or = 0;

    if ( box != null)
    {
     Item[] po = box.FindItemsByType(typeof(Gold),true);

     for ( int i = 0; i < po.Length; ++i )
     {
      or += po[i].Amount;
     }

     if ( or > Prix)
     {
             box.ConsumeTotal( typeof(Gold), Prix, true );
      item.i_Date = DateTime.Now + TimeSpan.FromDays(60.0);
      item.i_proprio = from;
      item.i_ArgentAdmin += Prix;
      item.Name = "Maison à louer";

      from.SendMessage("Le propriétaire est : {0}.", item.i_proprio.Name);
      from.SendMessage("Vous achetez le bâtiment pour 60 jours!");
      from.SendMessage("Ce bâtiment vous appartient jusqu'au : {0}", item.i_Date);
     }
     else
     {
      from.SendMessage("Vous n'avez pas assez d'or dans votre coffre de banque.");
     }
    }
   break;
   }
  }
 }
}
}


public class LoyerGump : Gump
{
private Pancarte item;
private int Prix;


public LoyerGump(Mobile from, Pancarte pancarte) : base (20, 30)
{
 Mobile mobile = from;
 item = pancarte;
  Prix = item.i_Loyer;

 AddPage(0);
 AddBackground( 0, 0, 350, 100, 5054);
 AddLabel(25, 10, 0x480, "Louer le bâtiment.");
 AddLabel(25, 30, 0x480, "Le prix du loyer est " + item.i_Loyer +  " pièces d'or par semaine." );

 AddButton( 25, 60, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0);
 AddLabel(65, 60, 0x34, "Valider");
}

public override void OnResponse( NetState state, RelayInfo info )
{
   Mobile from = state.Mobile;
   if( from is PlayerMobile )
      {
        PlayerMobile m = ( PlayerMobile ) from;
  TextRelay text = info.GetTextEntry( 1 );

  switch ( info.ButtonID )
  {
   case 1:
   {
    BankBox box = from.BankBox;
    int or = 0;

    if ( box != null)
    {
     Item[] po = box.FindItemsByType(typeof(Gold),true);

     for ( int i = 0; i < po.Length; ++i )
     {
      or += po[i].Amount;
     }

     if ( or > Prix)
     {
             box.ConsumeTotal( typeof(Gold), Prix, true );
      item.i_DateLocataire = DateTime.Now + TimeSpan.FromDays (7.0);
      item.i_locataire = from;
      item.i_Argent += Prix;
      item.Name = m.Name;

      from.SendMessage("Vous êtes locataire pour une semaine!");
      from.SendMessage("Le locataire est : {0}.", item.i_locataire.Name);
      from.SendMessage("Vous louez ce bâtiment jusqu'au : {0}",item.i_DateLocataire);
     }
     else
     {
      from.SendMessage("Vous n'avez pas assez d'or dans votre coffre de banque.");
     }
    }
   break;
   }
  }
 }
}
}


public class PayerGump : Gump
{
private Pancarte item;
private int Prix;

public PayerGump(Mobile from, Pancarte pancarte) : base (20, 30)
{
 Mobile mobile = from;
 item = pancarte;
 Prix = item.i_Loyer;


 AddPage(0);
 AddBackground( 0, 0, 450, 150, 5054);
 AddLabel(25, 10, 0x480, "Payer un loyer.");
 AddLabel(25, 30, 0x480, "Le prix du loyer est " + item.i_Loyer +  " pièces d'or par semaine." );
 AddLabel(25, 50, 0x480, "Vous pouvez payer plusieurs loyer d'avance jusque :");
 AddLabel(25, 70, 0x480, "Date : " + item.i_Date);


 AddButton( 25, 90, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0);
 AddLabel(65, 90, 0x34, "Valider");

}

public override void OnResponse( NetState state, RelayInfo info )
{
 
   Mobile from = state.Mobile;
   if( from is PlayerMobile )
      {
       PlayerMobile m = ( PlayerMobile ) from;

 TextRelay text = info.GetTextEntry( 1 );

  switch ( info.ButtonID )
  {
   case 1:
   {
    BankBox box = from.BankBox;
    int or = 0;

    if ( box != null)
    {

     Item[] po = box.FindItemsByType(typeof(Gold),true);

     for ( int i = 0; i < po.Length; ++i )
     {
      or += po[i].Amount;

     }

     if ( or > Prix)
     {
             box.ConsumeTotal( typeof(Gold), Prix, true );
      item.i_DateLocataire = item.i_DateLocataire + TimeSpan.FromDays (7.0);
      item.i_Argent += Prix;

      from.SendMessage("Vous êtes locataire pour une semaine supplémentaire!");
      from.SendMessage("Vous êtes locataire jusqu'au :");
      from.SendMessage(" {0}.", item.i_DateLocataire);
     }
     else
     {
      from.SendMessage("Vous n'avez pas assez d'or dans votre coffre de banque.");
     }
    }
   break;
   }
  }
 }
}
}


public class PayerAchatGump : Gump
{
private Pancarte item;
private int Prix;

public PayerAchatGump(Mobile from, Pancarte pancarte) : base (20, 30)
{
 Mobile mobile = from;
 item = pancarte;
 Prix = item.i_Acheter;


 AddPage(0);
 AddBackground( 0, 0, 450, 150, 5054);
 AddLabel(25, 10, 0x480, "Payer le bâtiment.");
 AddLabel(25, 30, 0x480, "Le prix du bâtiment est " + item.i_Acheter +  " pièces d'or pour 60 jours." );
 AddLabel(25, 50, 0x480, "Vous pouvez payer plusieurs fois d'avance.");
 AddLabel(25, 70, 0x480, "Vous posséder ce bâtiment jusqu'au : " + item.i_Date);

 AddButton( 25, 90, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0);
 AddLabel(65, 90, 0x34, "Valider");
}

public override void OnResponse( NetState state, RelayInfo info )
{
   Mobile from = state.Mobile;
   if( from is PlayerMobile )
      {
        PlayerMobile m = ( PlayerMobile ) from;
  TextRelay text = info.GetTextEntry( 1 );

  switch ( info.ButtonID )
  {
   case 1:
   {
    BankBox box = from.BankBox;
    int or = 0;

    if ( box != null)
    {
     Item[] po = box.FindItemsByType(typeof(Gold),true);

     for ( int i = 0; i < po.Length; ++i )
     {
      or += po[i].Amount;
     }

     if ( or > Prix)
     {
             box.ConsumeTotal( typeof(Gold), Prix, true );
      item.i_Date = item.i_Date + TimeSpan.FromDays (60.0);
      item.i_ArgentAdmin += Prix;

      from.SendMessage("Vous êtes propriétaire pour 60 jours supplémentaire!");
      from.SendMessage("Vous êtes propriétaire jusqu'au : ");
      from.SendMessage(" {0}.", item.i_Date);
     }
     else
     {
      from.SendMessage("Vous n'avez pas assez d'or dans votre coffre de banque.");
     }
    }
   break;
   }
  }
 }
}
}



//Pancarte qui permet de cloner une pancarte de base. (fait un lien vers une pancarte de base).
public class Pancarte1 : Item
{
public Item i_Lien;

 private Mobile m;
 
 [Constructable]
 public Pancarte1() : base( 0xBD2 )
 {
  Name = "Pancarte Double";
  Movable = false;

 }

 public Pancarte1( Serial serial ) : base( serial )
 {

 }

 [CommandProperty( AccessLevel.GameMaster )]
 public Item Lien
 {
  get { return i_Lien; }
  set { i_Lien = value; }
 }



 public override void OnDoubleClick( Mobile m )
 {
  Pancarte p_Lien = (Pancarte)i_Lien;

  if (m.AccessLevel >= AccessLevel.GameMaster && i_Lien == null)
  {
   //Pancarte1 item = this;

   m.Target = new LienTarget(this);
  }

  if (i_Lien != null)
  {
   if (p_Lien.i_proprio == m || p_Lien.i_locataire == m)
   {
    m.SendGump(new PancarteGump(m, p_Lien));
    m.SendSound(0xED);
   }
   else
   {
    m.SendMessage("Vous n'êtes ni le propriétaire, ni le locataire!");
   }
  }
 }

 public override void Serialize( GenericWriter writer )
 {
  base.Serialize( writer );

  writer.Write( (int) 0 ); // version

  writer.Write(i_Lien);
 }

 public override void Deserialize( GenericReader reader )
 {
  base.Deserialize( reader );

  int version = reader.ReadInt();

  switch ( version )
  {
   case 0:
   {
    i_Lien = reader.ReadItem();
   break;
   }
  }
 }
}


public class LienTarget : Target
{

Pancarte1 pancarte;

public LienTarget(Pancarte1 i_Pancarte) : base( 20, false, TargetFlags.None)
{
 pancarte = i_Pancarte;
}

protected override void OnTarget( Mobile from, object targ )
{
 PlayerMobile m = (PlayerMobile)from;

 if (targ is Pancarte)
 {
  Pancarte pancarteLien = (Pancarte)targ;

  pancarte.i_Lien = pancarteLien; //.ItemID;
 
 }
 else if (targ is Mobile)
 {
  m.SendMessage("Vous ne pouvez pas cibler un personnage!");
 }
 else
 {
  m.SendMessage("Vous devez cibler la pancarte de base!");
 }


}
}





}



Modifier le 02/02/2004
Maintenant il y a moyen de délimiter le batiment avec le pointA et le pointB pour éviter que les joueurs place des objets n'importe où.
Le pointA doit se situer dans le coin supérieur-gauche et le pointB dans le coin inférieur-droit. Pour placer les point utiliser la commande .props.

Signé : Shariz l'ami des plus petits.

crystal - August 25, 2003 12:09 PM (GMT)
Terrible sa , se serait génial dans les ville pour les statiques ou les chambre d'hotels

Sna - August 25, 2003 05:54 PM (GMT)
ou un brin modifie pour un chateau prenable par siege par exempleeeeeuuuuuu :rolleyes:

merciii tout plein :D

Shariz - August 26, 2003 04:30 AM (GMT)
Je suis en train de l'amélioré, pour faire en plus une pancarte de guilde (ça permet de placer une pierre de guilde, ect...) et une pancarte de vendeur (pour placer un ou plusieur vendeur au choix.). J'ai mis aussi 5 invité maximum (c'est le GM qui choisi), les invités peuvent gérer les pancarte comme les locataire mais avec des fonction en moins. Tous seras au profit du proprio. Sauf l'achat de la maison.

Signé : Shariz lami des plus petits.

Kaervek - January 17, 2004 06:22 AM (GMT)
Il y a juste un ptit problème...

Si quelqu'un lock un item, via la pncarte, une autre personne peut le delocker! Même un item placé par gm peut être délocké...

J'ai cherché pour voir s'il n'y aurait pas un script de base qui serait une référence à tous les items afin d'y ajouter une variable qui reprendrait le numéro de série du lockeur mais je n'en trouve pas...

Une idée? (Pcq avec mes "abuseurs pro" ils m'ont déjà viré les portes de chacune des maisons qui appartenaient à quelqu'un... <_< )

Shariz - January 17, 2004 11:54 AM (GMT)
Le mieux serait d'ajouter deux variable point3D sur la pancarte et de vérifiez si l'objet locker/delocker se trouve entre ses 2 variables Point3D.

exemple : le premier point se trouve à 10,110,0 et le deuxieme à 20,120,0
Verifiez si l'objet se trouve entre le point (10 et 20) et (110et 120).

Il faudra mettre c'est deux variables à la main par un GM et ce pour chaque pancarte. C'est un gros boulot mais je ne vois pas d'autres solutions.

Je vais faire ce petit script, mais je peus pas le faire tout de suite.

Une autre solution :
Tu peus aussi mettre une variable Point3D et deux valeur hauteur et largeur.
exemple : le premier point se trouve à 10,110,0 et les deux autres variables ont une valeur de 25.
Vérifiez si l'objet se trouve entre le point (10 et 10+variable(25)) et (110 et 110+variable(25))

Je crois que la 2emes solutions est la meilleur.

Signé : Shariz l'ami des plus petits.

PS :Tu peus aussi utiliser une variable point2D à la place d'un point3D vu que pour ce script on a pas besoin de connaître la hauteur.

Signé : Shariz l'ami des plus petits.

Kaervek - January 20, 2004 03:28 PM (GMT)
Ok merci Shariz :D *attend le script car a du mal à voir comment faire els verifs avec els points 3D*

Shariz - January 22, 2004 11:42 PM (GMT)
je n'ais pas oublier ce script, mais je cherche toujours comment décortiquer une variable Point2D. Je crois que c'est variable.Y et variable.X, mais je ne suis pas sur.

Signé : Shariz l'ami des plus petits.

Voilà :

le script ressemble à quelque chose comme ça.

CODE

public Point2D point = 100,100; //Tu peus aussi placer la variable avec la commande props.
public Point2D point2 = 110,110;

if ( (point.X < targ.Location.X > point2.X) && (point.Y < targ.Location.Y > point2.Y) )

{
}


Ps : Faut que je test encore se script, j'ai pas eu le temps

Zdravo - January 26, 2004 09:56 AM (GMT)
en tout cas, jolie travail ;)

Shariz - February 2, 2004 10:17 PM (GMT)
Voilà la pancarte est corriger.
J'ai modifier le premier post.

Il suffit de rajouter ceci :

les variables
CODE

private Point3D i_pointA;
private Point3D i_pointB;


[CommandProperty( AccessLevel.GameMaster )]
public Point3D pointA
{
 get { return i_pointA; }
 set { i_pointA = value; }
}

[CommandProperty( AccessLevel.GameMaster )]
public Point3D pointB
{
 get { return i_pointB; }
 set { i_pointB = value; }
}



serialize
CODE


 writer.Write((Point3D) i_pointA);
 writer.Write((Point3D) i_pointB);



deserialize (si la pancarte existe déjà dans le shard, il faut mettre une autre case : . Sinon, il y aura une erreur de version.
CODE

i_pointA = reader.ReadPoint3D();
i_pointB = reader.ReadPoint3D();



CODE


public class LockerTarget : Target
{
Pancarte pancarte;

public LockerTarget(Pancarte i_Pancarte) : base( 8, false, TargetFlags.None) // base(Nbre de case, peut target le sol, bheu)
{
 pancarte = i_Pancarte;
}

protected override void OnTarget( Mobile from, object targ )
{
 Perso m = (Perso)from;
 from.Frozen = false;

 if (targ is Mobile && targ != m)
 {
  m.SendMessage("Vous ne pouvez pas locker un personnage!");
 }
 else if (targ == pancarte || targ is Pancarte || targ is PancarteMini || targ is PancarteDouble)
 {
  m.SendMessage("Vous ne pouvez pas locker la pancarte!");
 }
 else if ( targ is Mobile && targ == m)
 {
  m.SendMessage("Vous ne pouvez pas vous cibler!");
 }
 else if (targ is Item)
 {
  Item i_cible = (Item)targ;

if ( ( pancarte.pointA.X < i_cible.Location.X ) && ( i_cible.Location.X < pancarte.pointB.X ) && ( pancarte.pointA.Y < i_cible.Location.Y ) && ( i_cible.Location.Y < pancarte.pointB.Y ) )
{
  string nom = i_cible.Name;

  i_cible.Movable = false;
  i_cible.Name = nom + " locker par :" + m.Name;
}
else { m.SendMessage("Vous devez cibler un objet qui se trouve dans le batiment!"); }


 }

 else
 {
  m.SendMessage("Vous devez cibler un objet!");
 }
}
}


public class DeLockerTarget : Target
{
Pancarte pancarte;

public DeLockerTarget(Pancarte i_Pancarte) : base( 8, false, TargetFlags.None) // base(Nbre de case, peut target le sol, bheu)
{
 pancarte = i_Pancarte;
}

protected override void OnTarget( Mobile from, object targ )
{
 Perso m = (Perso)from;
 from.Frozen = false;

 if (targ is Mobile && targ != m)
 {
  m.SendMessage("Vous ne pouvez pas délocker un personnage!");
 }
 else if (targ == pancarte || targ is Pancarte || targ is PancarteMini || targ is PancarteDouble)
 {
  m.SendMessage("Vous ne pouvez pas délocker la pancarte!");
 }
 else if ( targ is Mobile && targ == m)
 {
  m.SendMessage("Vous ne pouvez pas vous cibler!");
 }
 else if (targ is Item)
 {
  Item i_cible = (Item)targ;

if ( ( pancarte.pointA.X < i_cible.Location.X ) && (  i_cible.Location.X  < pancarte.pointB.X) && ( pancarte.pointA.Y < i_cible.Location.Y ) && ( i_cible.Location.X  < pancarte.pointB.Y) )
{
  string nom = i_cible.Name;

  i_cible.Movable = true;
  i_cible.Name = nom + " Délocker par :" + m.Name;
}
else { m.SendMessage("Vous devez cibler un objet qui se trouve dans le batiment!"); }
 }

 else
 {
  m.SendMessage("Vous devez cibler un objet!");
 }

}
}




Signé : Shariz l'ami des plus petits.

Kaervek - February 3, 2004 04:51 AM (GMT)
Merci mais j'ai encore une erreur dans cette partie:

CODE
if ( ( pancarte.pointA.X < i_cible.Location.X ) && (  i_cible.Location.X  < pancarte.pointB.X) && ( pancarte.pointA.Y < i_cible.Location.Y ) && ( i_cible.Location.X  < pancarte.pointB.Y) )


Ca me dit que le script ne contient pas de définition pour le point A

Shariz - February 3, 2004 10:42 AM (GMT)
tu as mis la variable pointA et pointB dans la pancarte?
il faut aussi la mettre dans le serialize et deserialize.

Signé : Shariz l'ami des plus petits.

Kaervek - February 4, 2004 12:59 PM (GMT)
Je l'ai fait... Et ca marche :D
Sinon tu as testé ton système? Car je viens d'essayer in game et ca me dit que l'objet entre les points n'est pas dans le batiment.

(Là chuis occupé, regarderai le script apres voir si je trouve d'où ca peut venir... Ou si toi tu passes et comprends direct, merci.)

Shariz - February 4, 2004 07:52 PM (GMT)
oui, je l'ai essayer et ça marche parfaitement.
le pointA se trouve dans le coin supérieur-gauche du batiment et le pointB dans le coin inferieur-droit.
Si tu inverse les points, ça ne peut pas marcher.

Signé : Shariz l'ami des plus petits.



Kaervek - February 5, 2004 05:04 AM (GMT)
Heu oui merci.
En fait 'javais un bug avec le delocker (locker fonctionnait) donc j'ai repris les conditions du locker et depuis ca fonctionne lol... Surement fait une gaffe dans le copier-coller. Désolé :unsure:

Et encore emlrci pour ce script ;)




Hosted for free by InvisionFree