View Full Version: Tutorial sur les timer ?

RunUO.FR Support > Tutorial en Français > Tutorial sur les timer ?


Title: Tutorial sur les timer ?


Kaervek - October 30, 2003 06:01 AM (GMT)
Quelqu'un pourrait-il faire un tutorial sur les timer svp? Ou Donner un lien où en trouver un? Merci. :D

Didi - November 4, 2003 10:38 PM (GMT)
Il n'y a rien sur les timer c'est vrai ... mais en decortiquant un script sur ce forum, j'ai réussi a faire un pewtit timer de base.
Je le met ici puisqu'il est simple :P
Pour l'activer, un item bien simple ou on doubleclique dessus : une statue :P

(les deux bouits de code se suivent ... le "namespace Server.Items {" se terminera à la fin du dexieme
L'item
CODE
using System;
using System.Collections;
using Server.Targeting;
using Server.Network;
using Server.Mobiles;

namespace Server.Items
{

public class StatueTimer : Item
{
 [Constructable]
public StatueTimer() : base(0x139D)
 {
  Weight = 10; // poid de l'item
  Name = "TimerTest"; // Nom de l'item
  Hue = 2; // couleur de l'item
 }
     public override void OnDoubleClick( Mobile from ) // lorsqu'on doubleclique dessus
     {
     MonTimer timer = new MonTimer(from); //Il cré un objet nommé timer
  timer.Start(); //Il lance le timer
     }
     

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

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

  writer.Write((int) 0);
 }

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

  int version = reader.ReadInt();
 }
}


La partie:
public override void OnDoubleClick( Mobile from )
{
MonTimer timer = new MonTimer(from);
timer.Start();
}

veut dire qu'on cré un objet nommé timer et qu'on le fait partir. On le défini en tant que "MonTimer", mais pour le script ca ne veut rien dire ... on le défini donc juste en dessous.
CODE
public class MonTimer : Timer
{
private Mobile m; //On utilisera une variable m plus loin, on indique que ce sera un mobile

public MonTimer(Mobile from ) : base
( TimeSpan.FromSeconds (20.0), TimeSpan.FromSeconds (20.0) ) // On indique le temps que durera le script aux deux endroits. Ici 20 secondes
{
m = from; // on précise que la varibale m sera finalewment le mobile from
m.SendMessage("Début du timer"); // on précise a celui qui a activer le Timer que celui-ci démare
}

protected override void OnTick() //Ici c'est la fin du timer, autrement dit ici apres 20 secondes
{
m.SendMessage("Fin du timer"); //on précise a celui qui a activer le Timer que celui-ci se termine
Stop(); // On précise que le timer ne recommance pas. Sans le stop, vous verrez "Fin du timer" a tous les 20 secondes.

}
}
}


Voila. En gros, ce qui se passe au debut du timer vous remplacez m.SendMessage("Début du timer");
Et pour ce qui se passe a la fin, vous remplacez
m.SendMessage("Fin du timer");

Simple finalement :P

Kaervek - November 5, 2003 06:45 PM (GMT)
Merci ca m'aidera déjà mais c'était surtout pour des relations vis-à-vis du temps irl en fait dont j'aurais besoin ^^ ;)
Les explications ca aide beaucoup :)
*veut devenir un pro du timer* lol

crystal - November 5, 2003 06:53 PM (GMT)
TimeSpan.FromSeconds


sa c'est l'heure en seconde

pour 2H30 tu obtient 9400

Kaervek - November 5, 2003 07:22 PM (GMT)
Non c'est bon, j'ai compris, en fait pour ce que je voulais, il fallait modifier le Playermobile ;)
*A compris en voyant le script de pub de shariz*

Didi - November 5, 2003 09:13 PM (GMT)
Mais hum il a tjrs été question du temp IRL :P

Sinon pour le temps IG je présume que la clock ou le gump du vendeur utilise sa quelquepart :P

Edit: au moment du post du tuto javais oublier l'auteur :P Donc Merci a Shariz pour son petit script qui en enlevant les éléments qui ne servait pas pour le tuto a permis celui-ci :P

Kaervek - December 15, 2003 06:00 PM (GMT)
Et pour un timer qui fonctionne sur un objet? (en gros, je veux pas balancer le timer par rapport à un pj mais par rapport à un item)

Voila le début de script que j'ai fait:
CODE
using System;
using Server.Network;
using Server.Items;
using Server.Mobiles;
using Server.Gumps;
using Server.Misc;
using Server.Targeting;

namespace Server.Items
{
  public class ArbreMana : Item
  {
  public int i_Pousse = 0;
  [CommandProperty( AccessLevel.GameMaster )]
  public int Pousse
  {
   get {return i_Pousse;}
   set {i_Pousse = value;}
  }
 
     [Constructable]
     public ArbreMana() : base( 3384 )
     {
        Movable = false;
  Name = "Arbre Mana";
     }

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

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

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

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

        int version = reader.ReadInt();
  i_Pousse = reader.ReadInt();
     }

     public override void OnDoubleClick( Mobile from )
     {
    from.Emote("*Secoue l'Arbre pour obtenir des Noix de Mana*");
        from.AddToBackpack (new NoixMana (1 * Pousse) );
  this.Pousse = 0;
  TimerArbreMana timer = new TimerArbreMana(from);
  timer.Start();
         
     }    
 
  public class TimerArbreMana : Timer
{
public TimerArbreMana(Mobile from) : base
//( TimeSpan.FromMinutes (1.0), TimeSpan.FromMinutes (1.0) )
( TimeSpan.FromSeconds (5.0), TimeSpan.FromSeconds (5.0) )
{

}

protected override void OnTick()
{
Pousse += 1;
}
}

   
  }
}


Quelqu'un a une idée?

Ps: J'ai posté ceci dans les tutos timer étant donné que ca parle d'un type de timer encore non divulgué dans ce topic :) Et que, par conséquent, ça permet de faire avancer "le tuto"

Didi - December 16, 2003 02:34 AM (GMT)
ou est le prob ??

Kaervek - December 16, 2003 04:53 AM (GMT)
Ca reconnait pas le Pousse qui doit augmanter au OnTick ^^ Et franchement, je vois pas d'où peut venir le prob :unsure:

jorsca - January 12, 2004 12:39 PM (GMT)
Il faut que tu passes en parametre ton item au timer pour pouvoir le modifier. La propriete Pousse est dans ton item et tu l'appelles dans ton timer.
Tu peux aussi faire une methode OnTick dans ton item qui sera appele a chaque Tick de ton timer, mais la encore il faut passer une reference de ton item a ton timer. Ca doit ressembler a un truc comme ca:

CODE


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

namespace Server.Items
{
 public class ArbreMana : Item
 {
   public int i_Pousse = 0;
   [CommandProperty( AccessLevel.GameMaster )]
   public int Pousse
   {
     get {return i_Pousse;}
     set {i_Pousse = value;}
   }

   [Constructable]
   public ArbreMana() : base( 3384 )
   {
     Movable = false;
     Name = "Arbre Mana";
   }

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

   public override void Serialize( GenericWriter writer )
   {
     base.Serialize( writer );
     writer.Write( (int) 0 ); // version
     writer.Write((int) i_Pousse);
   }

   public override void Deserialize( GenericReader reader )
   {
     base.Deserialize( reader );
     int version = reader.ReadInt();
     i_Pousse = reader.ReadInt();
   }

   public override void OnDoubleClick( Mobile from )
   {
     from.Emote("*Secoue l'Arbre pour obtenir des Noix de Mana*");
     from.AddToBackpack (new NoixMana (1 * Pousse) );
     this.Pousse = 0;
     TimerArbreMana timer = new TimerArbreMana(from, this);
     timer.Start();
   }

   public void OnTick()
   {
     Pousse++;
   }

 public class TimerArbreMana : Timer
 {
   private ArbreMana _arbre;

   public TimerArbreMana(Mobile from, ArbreMana arbre) : base
   //( TimeSpan.FromMinutes (1.0), TimeSpan.FromMinutes (1.0) )
   ( TimeSpan.FromSeconds (5.0), TimeSpan.FromSeconds (5.0) )
   {
     _arbre = arbre;
   }

   protected override void OnTick()
   {
     _arbre.OnTick();
   }
 }
}


La evidemment ce n'est pas super avantageux mais ca l'est plus quand ton timer est dans un autre fichier pour avoir toutes tes methodes dans ta classe d'item.




Hosted for free by InvisionFree