View Full Version: traire les bebettes

RunUO.FR Support > Probleme de script > traire les bebettes


Title: traire les bebettes


crystal - July 16, 2003 03:25 PM (GMT)
CODE
using System;
using Server;
using Server.Items;
using Server.Prompts;
using Server.Targeting;
using Server.Network;
using Server.Mobiles;


namespace Server.Items
/*
Lait et fromage Crystal 2003 (laitage.cs,laitage_items.cs et fromage.cs)
le script comprend 1 seau pour traire vache , brebis , chevre .
3 bouteilles de laits et 3 moule plein de fromages (je prefere les bouteilles que les pichets c'est stackable)
*/
{
public class sautalait : Item
{
 private int Laitage; //quantité de lait de base du seau
 private int bestiole; // Id du body de la bestiole
 
 [CommandProperty( AccessLevel.GameMaster )]
  public int Laitage
  {
   get { return m_Laitage; }
   set { m_Laitage = value; }
  }
 [CommandProperty( AccessLevel.GameMaster )]
  public int bestiole
  {
   get { return m_bestiole; }
   set { m_bestiole = value; }
  }
 
 [Constructable]
 public sautalait() : base( 0x12B3 )
 {
  Weight = 1.0;
  Hue = 0x96D;
  Name = "Sceau de traite";
 }
   public override void GetProperties( ObjectPropertyList list )
 {
  base.GetProperties( list );

  list.Add( 1060584, Laitage.ToString() ); // affiche la quantité en tool tipe
  list.Add( 1060584, bestiole.ToString() ); // affiche la bete de provenance en tool tipe
 }

 public virtual void DisplayDurabilityTo( Mobile from )
 {
  LabelToAffix( from, 1017323, AffixType.Append, ": " + Laitage.ToString(),"de" + bestiole.ToString() ); // Durability
 }

 
 public override void OnDoubleClick (Mobile from )
 {
  from.Target = new onvavoirlesvaches( this );
  from.SendMessage(0x96D, "Quelle animal voulez vous traire ?" );
 }
 public sautalait( Serial serial ) : base( serial )
 {
 }
 
 public override void Serialize( GenericWriter writer )
 {
  base.Serialize( writer );
 
  writer.Write( (int) 0 ); // version
  writer.Write( (int) Laitage ); // on ecrit le nombre de litre
  writer.Write( (int) bestiole); // on sauve la bebete
 }
 
 public override void Deserialize( GenericReader reader )
 {
  base.Deserialize( reader );
 
 
  int version = reader.ReadInt();
  switch ( version )
  {
   case 0:
    {
     Laitage = reader.ReadInt();// on lit le nombre de charge
     bestiole = (bestiole)reader.ReadInt();// on lit la bebete
     break;
    }
  }
 }
}

public class onvavoirlesvaches : Target
{
 private sautalait m_saut;
 
 /*this is my problem's how to give the seau properties to the target ?*/
 
 public onvavoirlesvaches( sautalait m_saut) : base( 3, false, TargetFlags.None )
 {
  m_bestiole m_saut.bestiole;
  m_laitage m_saut.Laitage;
 }
 /* le target aura 2 effets , si c'est un animal a traire , il extrait du lait en echange de 2 point de Bouffe
  * si c'est une bouteille il extrait 1L du seau et fait une bouteille pleine , chaque lait a une propriété soif
  * allant de 1 a 3 pour le lait de chevre , on pourra transformez cela en faim avec les fromages */
 
 protected override void OnTarget( Mobile from, object o )
 {
  if ((m_laitage = 0) && (m_bestiole = 0) && ( o is Mobile))
  {
  //Mobile m_mobile =(Mobile)o
  m_bestiole = o.Body;
  from.SendMessage (0x96D,"le seau est pret ");
  }
  else
   if (( o is Mobile) && (m_laitage <= 50))
   //{
   //Mobile m_mobile =(Mobile)o
     if (o.Hunger > 2)
      if ((o = Cow) && (m_bestiole = 0x0216 ))
      {
      ++m_laitage;
      o.Hunger =-2;
      from.SendMessage(0x96D, "vous trayez 1 litre de lait de vache" );
      }
      else if ((o = Goat) && (m_bestiole = 0x0088 ))
      {
      ++m_laitage;
      o.Hunger =-2;
      from.SendMessage(0x96D, "vous trayez 1 litre de lait de chevre" );
      }
      else if ((o = Sheep) && (m_bestiole = 0x0207 ))
      {
      ++m_laitage;
      o.Hunger =-2;
      from.SendMessage(0x96D, "vous trayez 1 litre de lait a cette brebis" );
      }
      else
      {
      from.SendMessage(0x96D, "vous ne pouvez obtenir de lait de cela!" );
      }
     else
     {
     from.SendMessage(0x96D, "cette bete est affamée , vous ne pouvez la traire !" );
     }
     
   else if ((o is Bottle ) && ( m_laitage > 0 ))
    {
    m_laitage = -1; // consommer 1 litre du sceau
    //o.Consume(); // consommer la bouteille targettée vide (faudra verifeir que sa en bouffe pas plus que 1)
    }
     if ((m_bestiole = 0x0216) || (m_bestiole = 0x0231 ))
     {
     from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de vache",m_bestiole);
     from.AddToBackpack( new Bottlecowmilk() );// donnez une bouteille pleine
     }
     else if (m_bestiole = 0x0088 )
     {
     from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de Chèvre");
     from.AddToBackpack( new Bottlegoatmilk() );
     }
     else if (m_bestiole = 0x0207) //par defaut
     {
     from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de brebis ");
     from.AddToBackpack( new Bottlesheepmilk() );
     }
    else
    {
    from.SendMessage (0x96D,"ce n'est pas une bouteille ou le seau est vide");
    }
   else
   {
   from.SendMessage (0x96D,"Sa ne peut pas fonctionner ainsi");
   }
 
 }
 
}
}



QUOTE
Scripts: Compiling C# scripts...failed (8 errors, 0 warnings)
- Error: Scripts\crystal\laitage.cs: CS1519: (line 146, column 5) Invalid token
'else' in class, struct, or interface member declaration
- Error: Scripts\crystal\laitage.cs: CS1519: (line 146, column 16) Invalid toke
n 'is' in class, struct, or interface member declaration
- Error: Scripts\crystal\laitage.cs: CS1519: (line 146, column 26) Invalid toke
n ')' in class, struct, or interface member declaration
- Error: Scripts\crystal\laitage.cs: CS1519: (line 146, column 43) Invalid toke
n '>' in class, struct, or interface member declaration
- Error: Scripts\crystal\laitage.cs: CS1519: (line 148, column 15) Invalid toke
n '=' in class, struct, or interface member declaration
- Error: Scripts\crystal\laitage.cs: CS1519: (line 149, column 14) Invalid toke
n '(' in class, struct, or interface member declaration
- Error: Scripts\crystal\laitage.cs: CS0116: (line 151, column 7) A namespace d
oes not directly contain members such as fields or methods
- Error: Scripts\crystal\laitage.cs: CS1022: (line 177, column 2) Type or names
pace definition, or end-of-file expected
Scripts: One or more scripts failed to compile or no script files were found.


4 jour que je m'arrache les cheveux la dessus , j'en ai marre lol

CoolDev - July 16, 2003 08:21 PM (GMT)
Oula, il y a plusieurs problèmes.
Le premier viens de l'indentation, les accolades n'étaient pas aux bons endroits, je les aie remise là où je pense qu'elles doivent se trouver, mais comme je n'ai pas testé le script, ce sera à toi de voir si c'est ok.
Ensuite vient leproblème des tests d'égalité, il ne faut pas 1 mais 2 signes =
Tu as aussi mis un = à laplace d'un is lorsque tu testais si ton objet était un certains type d'animal.
Dans ton objet onvavoirlesvaches, tu avais oublié de déclarer les variables m_bestiole et m_laitage, et tu essayais de les instancier sans = !! (faut perdre les mauvaises habitudes de sphere ;) )
Lors de la désérialisation tu essayais de lire une variable de type bestiole au lieu d'une variable de type int.
J'ai mis en commentaire les lignes d'ajout des bouteilles dans le sac car je ne possède pas ces scripts. N'oublie pas de les décommenter.

Vala, je n'ai pas testé le script mais il compile à présent. J'espère que ca t'aura aidé.
CODE
using System;
using Server;
using Server.Items;
using Server.Prompts;
using Server.Targeting;
using Server.Network;
using Server.Mobiles;


namespace Server.Items
/*
Lait et fromage Crystal 2003 (laitage.cs,laitage_items.cs et fromage.cs)
le script comprend 1 seau pour traire vache , brebis , chevre .
3 bouteilles de laits et 3 moule plein de fromages (je prefere les bouteilles que les pichets c'est stackable)
*/
{
  public class sautalait : Item
{
  private int m_Laitage; //quantité de lait de base du seau
  private int m_bestiole; // Id du body de la bestiole

  [CommandProperty( AccessLevel.GameMaster )]
   public int Laitage
   {
    get { return m_Laitage; }
    set { m_Laitage = value; }
   }
   
  [CommandProperty( AccessLevel.GameMaster )]
   public int bestiole
   {
    get { return m_bestiole; }
    set { m_bestiole = value; }
   }

  [Constructable]
  public sautalait() : base( 0x12B3 )
  {
    Weight = 1.0;
    Hue = 0x96D;
    Name = "Sceau de traite";
  }
 
   public override void GetProperties( ObjectPropertyList list )
  {
    base.GetProperties( list );

    list.Add( 1060584, Laitage.ToString() ); // affiche la quantité en tool tipe
    list.Add( 1060584, bestiole.ToString() ); // affiche la bete de provenance en tool tipe
  }

  public virtual void DisplayDurabilityTo( Mobile from )
  {
    LabelToAffix( from, 1017323, AffixType.Append, ": " + Laitage.ToString(),"de" + bestiole.ToString() ); // Durability
  }


  public override void OnDoubleClick (Mobile from )
  {
    from.Target = new onvavoirlesvaches( this );
    from.SendMessage(0x96D, "Quelle animal voulez vous traire ?" );
   }
  public sautalait( Serial serial ) : base( serial )
  {
  }

  public override void Serialize( GenericWriter writer )
  {
    base.Serialize( writer );
 
    writer.Write( (int) 0 ); // version
    writer.Write( (int) Laitage ); // on ecrit le nombre de litre
    writer.Write( (int) bestiole); // on sauve la bebete
  }

  public override void Deserialize( GenericReader reader )
  {
    base.Deserialize( reader );  
 
    int version = reader.ReadInt();
    switch ( version )
    {
     case 0:
      {
        Laitage = reader.ReadInt();// on lit le nombre de charge
        bestiole = (int)reader.ReadInt();// on lit la bebete
        break;
      }
    }
  }
}

public class onvavoirlesvaches : Target
{
  private sautalait m_saut;
  int m_bestiole,m_laitage;
  Mobile m_mobile = null;

  /*this is my problem's how to give the seau properties to the target ?*/

  public onvavoirlesvaches( sautalait m_saut) : base( 3, false, TargetFlags.None )
  {
    m_bestiole = m_saut.bestiole;
    m_laitage = m_saut.Laitage;
  }
  /* le target aura 2 effets , si c'est un animal a traire , il extrait du lait en echange de 2 point de Bouffe
   * si c'est une bouteille il extrait 1L du seau et fait une bouteille pleine , chaque lait a une propriété soif
   * allant de 1 a 3 pour le lait de chevre , on pourra transformez cela en faim avec les fromages */
 
  protected override void OnTarget( Mobile from, object o )
  {
   if( o is Mobile)    
         m_mobile =(Mobile)o;
     
   
    if ((m_laitage == 0) && (m_bestiole == 0) && m_mobile != null)
    {
      m_bestiole = m_mobile.Body;
       from.SendMessage (0x96D,"le seau est pret ");
    }
    else if ( m_mobile != null && (m_laitage <= 50))
    {
    //Mobile m_mobile =(Mobile)o
       if (m_mobile.Hunger > 2)
       {
          if ((m_mobile is Cow) && (m_bestiole == 0x0216 ))
          {
            ++m_laitage;
           m_mobile.Hunger =-2;
             from.SendMessage(0x96D, "vous trayez 1 litre de lait de vache" );
          }
          else if ((o is Goat) && (m_bestiole == 0x0088 ))
          {
             ++m_laitage;
             m_mobile.Hunger =-2;
             from.SendMessage(0x96D, "vous trayez 1 litre de lait de chevre" );
          }
          else if ((o is Sheep) && (m_bestiole == 0x0207 ))
          {
             ++m_laitage;
             m_mobile.Hunger =-2;
             from.SendMessage(0x96D, "vous trayez 1 litre de lait a cette brebis" );
          }
          else
          {
             from.SendMessage(0x96D, "vous ne pouvez obtenir de lait de cela!" );
          }
         }
         else
         {
             from.SendMessage(0x96D, "cette bete est affamée , vous ne pouvez la traire !" );
         }
     }  
      else if ((o is Bottle ) && ( m_laitage > 0 ))
      {
         m_laitage = -1; // consommer 1 litre du sceau
         //o.Consume(); // consommer la bouteille targettée vide (faudra verifeir que sa en bouffe pas plus que 1)
   
         if ((m_bestiole == 0x0216) || (m_bestiole == 0x0231 ))
         {
            from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de vache",m_bestiole);
            //from.AddToBackpack( new Bottlecowmilk() );// donnez une bouteille pleine
         }
         else if (m_bestiole == 0x0088 )
         {
           from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de Chèvre");
            //from.AddToBackpack( new Bottlegoatmilk() );
         }
         else if (m_bestiole == 0x0207) //par defaut
         {
            from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de brebis ");
            //from.AddToBackpack( new Bottlesheepmilk() );
         }
       else
       {
          from.SendMessage (0x96D,"ce n'est pas une bouteille ou le seau est vide");
       }
      }
    else
    {
       from.SendMessage (0x96D,"Sa ne peut pas fonctionner ainsi");
    }
   }
  }
}

Sna - July 16, 2003 08:28 PM (GMT)
et une target corrigee.... une :)

CODE
public class onvavoirlesvaches : Target
{
private sautalait m_saut;

/*this is my problem's how to give the seau properties to the target ?*/

public onvavoirlesvaches( sautalait m_saut) : base( 3, false, TargetFlags.None )
{
 m_bestiole m_saut.bestiole;
 m_laitage m_saut.Laitage;
}
/* le target aura 2 effets , si c'est un animal a traire , il extrait du lait en echange de 2 point de Bouffe
* si c'est une bouteille il extrait 1L du seau et fait une bouteille pleine , chaque lait a une propriété soif
* allant de 1 a 3 pour le lait de chevre , on pourra transformez cela en faim avec les fromages */

protected override void OnTarget( Mobile from, object o )
{
 if ((m_laitage == 0) && (m_bestiole == 0) && ( o is Mobile))
 {
  //Mobile m_mobile =(Mobile)o
  m_bestiole = o.Body;
  from.SendMessage (0x96D,"le seau est pret ");
 }
 if (( o is Mobile) && (m_laitage <= 50))
 {
  Mobile m_mobile =(Mobile)o
  if (m_mobile.Hunger > 2)
  {
   if ((m_mobile is Cow) && (m_bestiole = 0x0216 ))
   {
    ++m_laitage;
    o.Hunger =-2;
    from.SendMessage(0x96D, "vous trayez 1 litre de lait de vache" );
   }
   else if (m_mobile is Goat && (m_bestiole == 0x0088 ))
   {
    ++m_laitage;
    o.Hunger =-2;
    from.SendMessage(0x96D, "vous trayez 1 litre de lait de chevre" );
   }
   else if ((m_mobile is Sheep) && (m_bestiole == 0x0207 ))
   {
    ++m_laitage;
    o.Hunger =-2;
    from.SendMessage(0x96D, "vous trayez 1 litre de lait a cette brebis" );
   }
   else
   {
    from.SendMessage(0x96D, "vous ne pouvez obtenir de lait de cela!" );
   }
  }
  else
  {
   from.SendMessage(0x96D, "cette bete est affamée , vous ne pouvez la traire !" );
  }
 }
 
 else if ((o is Bottle ) && ( m_laitage > 0 ))
 {
  m_laitage = -1; // consommer 1 litre du sceau
  //o.Consume(); // consommer la bouteille targettée vide (faudra verifeir que sa en bouffe pas plus que 1)
  if ((m_bestiole == 0x0216) || (m_bestiole == 0x0231 ))
  {
   from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de vache",m_bestiole);
   from.AddToBackpack( new Bottlecowmilk() );// donnez une bouteille pleine
  }
  else if (m_bestiole == 0x0088 )
  {
   from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de Chèvre");
   from.AddToBackpack( new Bottlegoatmilk() );
  }
  else if (m_bestiole == 0x0207) //par defaut
  {
   from.SendMessage (0x96D,"vous remplissez un Bouteille de lait de brebis ");
   from.AddToBackpack( new Bottlesheepmilk() );
  }
  else
  {
   from.SendMessage (0x96D,"ce n'est pas une bouteille ou le seau est vide");
  }
 }
 else
 {
  from.SendMessage (0x96D,"Sa ne peut pas fonctionner ainsi");
 }
}
}

note du correcteur : dans un if, pour verifier une egalite c'est pas x = y mais plutot x == y :)

j'ai corrige que les if else etc :)

Hughlander - November 25, 2004 01:09 PM (GMT)
QUOTE (crystal @ Jul 16 2003, 04:25 PM)
list.Add( 1060584, Laitage.ToString() ); // affiche la quantité en tool tipe
list.Add( 1060584, bestiole.ToString() ); // affiche la bete de provenance en tool tipe

J'ai put constater que les ObjectPropertyList n'affiche qu'un seul text provenant d'un même ID autrement dis il n'affichera que la dernière entrer a savoir la bête de provenance et pas la quantité




* Hosted for free by InvisionFree