View Full Version: Livre d'etude

RunUO.FR Support > Items > Livre d'etude


Title: Livre d'etude
Description: Beta 1.0


Julien - August 19, 2003 08:53 PM (GMT)
Héhé oui on frime un peu avec "beta" :)

Enfin soite Bon

CODE
// created on 13/08/2003 at 19:26
/************************************************************************************/
/* Bouquin d'etude beta 1.0 pour RunUO.            */
/* Julien [Sniperbart]                */
/* Caractèristique :                */
/* - Augmentation du skills etudiable            */
/* - Timer pour eviter abus de etude            */
/* - Au Double clic, livre devient utilisable seulement par un joueur unique  */
/* - limitation en skills caps  (A venir dans prochaine Version)     */
/* Remerciement : crystal, Sna, Inconu.            */
/* - L'idée du script n'est pas de moi, mais j'avais envie d'essayer de le coder */
/************************************************************************************/
using Server;
using System;
using Server.Mobiles;
using Server.Network;
using Server.Items;

namespace Server.Items
{

public class  BouquinAnatomy05 : Item
{
public Mobile Proprietaire;
public bool m_Utilise;
public double dbl_DureeTimer;
public double dbl_DureeOnTick;
public int int_AugmDeEtude;
public int Clic_2;

/**************** GM command*****************/

[CommandProperty( AccessLevel.GameMaster )]
public bool Utilise
{
 get { return m_Utilise; }
 set { m_Utilise = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public double DureeTimer
{
 get { return dbl_DureeTimer; }
 set { dbl_DureeTimer = value; }
}

[CommandProperty( AccessLevel.GameMaster )]
public double DureeOnTick
{
 get { return dbl_DureeOnTick; }
 set { dbl_DureeOnTick = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public int AugmDeEtude
{
 get { return int_AugmDeEtude; }
 set { int_AugmDeEtude = value; }
}

/************************Objet***********/
[Constructable]
public BouquinAnatomy05() : base( 0xFF0 )

{
Weight = 2.0;
Name = "Bouquin d'etude";
dbl_DureeTimer = 30.0;
dbl_DureeOnTick = 1.0;
int_AugmDeEtude = 5;

}
/********************** Lorsque on double clique****************/
public override void OnDoubleClick( Mobile from )
{
if(Proprietaire == null)
   {
    Proprietaire = from;
   }
 
   if ((Proprietaire == from) && (m_Utilise == false))
  {
    m_Utilise = true;
    from.PlaySound(0x249);
    new TimerBouquinAnatomy05(this).Start();
   
 }

 if (Proprietaire != from)
  {
    from.SendMessage("Ce livre ne vous appartient pas");
   }
   
   if ((Proprietaire == from)&& (m_Utilise == true))
    {
 from.SendMessage("Vous êtes concentrée sur votre lecture");
  }
 
 

}
/*************************Serialize***************************/
public BouquinAnatomy05( Serial serial ) : base( serial )
{
}

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

 writer.Write( (int) 0 );
 writer.Write( (Mobile) Proprietaire);
 writer.Write( (bool) m_Utilise);
 writer.Write( (double) dbl_DureeTimer);
 writer.Write( (double) dbl_DureeOnTick);
 writer.Write( (int) int_AugmDeEtude);
}

public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
  {
   case 0:
     {
      Proprietaire = reader.ReadMobile();
      m_Utilise = reader.ReadBool();
      dbl_DureeTimer = reader.ReadDouble();
      dbl_DureeOnTick = reader.ReadDouble();
      int_AugmDeEtude = reader.ReadInt();
      break;
      }
  }
}

}

/*************Timer*********************/

public class TimerBouquinAnatomy05 : Timer
{
private BouquinAnatomy05 m_TimerBouquinAnatomy05Var;

public TimerBouquinAnatomy05(BouquinAnatomy05 m_TimerBouquinAnatomy05) : base( TimeSpan.FromSeconds(m_TimerBouquinAnatomy05.dbl_DureeTimer),TimeSpan.FromSeconds (m_TimerBouquinAnatomy05.dbl_DureeOnTick),1) //base( TimeSpan.FromSeconds(delai avant premier tick),TimeSpan.FromSeconds(durée du tick),nombre de répétition)
{

m_TimerBouquinAnatomy05Var = m_TimerBouquinAnatomy05;
 
}
                             
protected override void OnTick()
{
m_TimerBouquinAnatomy05Var.m_Utilise = false;
m_TimerBouquinAnatomy05Var.Proprietaire.Skills[SkillName.Anatomy].BaseFixedPoint +=  m_TimerBouquinAnatomy05Var.int_AugmDeEtude;
m_TimerBouquinAnatomy05Var.Proprietaire.SendMessage("La lecture prend fin");
m_TimerBouquinAnatomy05Var.Proprietaire.PlaySound(0x217);
Stop();
 
}

}

}


Bon je vais vous expliquer comment crée le livre pour les novice, les autres il comprendrons parfaitement :) (oui moi aussi je suis novice)

1) chercher la ligne
CODE
public class  BouquinAnatomy05 : Item


Idéal est de faire une covention pour le scripte.
"BouquinSkillNiveauDElevation"

Ici En exemple Anatomy avec une elevation de 0.5 par lecture.
Pas compliquer vous remplacée "BouquinAnatomy05"
On va prendre "BouquinMagery05"

2)
CODE
[Constructable]
public BouquinAnatomy05() : base( 0xFF0 )


Ici on remplace le constructeur par le nouvelle Items (BouquinMagery05)

3)
CODE
/*************************Serialize***************************/
public BouquinAnatomy05( Serial serial ) : base( serial )
{
}


Ici on remplace encore par BouquinMagery05 pris comme exemple

4) Bon le timer, le plus chiant de tout.

Voila ce qu'on va faire, on va encore prendre 2 ou 3 convention :

- TimerBouquinSkills, ici dans exemple TimerBouquinMagery05

Cherche :
CODE
public class TimerBouquinAnatomy05 : Timer


Comme d'hab on remplace par le new items
CODE
public class TimerBouquinMagery05 : Timer



CODE
private BouquinAnatomy05 m_TimerBouquinAnatomy05Var;


Ici on refait encore un remplacement par

CODE
private BouquinMagery05 m_TimerMagery05Var;


Le constructeur :

CODE
public TimerBouquinAnatomy05(BouquinAnatomy05 m_TimerBouquinAnatomy05)


On remplace ce qui donne Attention ici nouvelle variable Sans "Var" a la fin.


CODE
public TimerBouquinMagery05(BouquinMagery05 m_TimerBouquinMagery05)


Ici on remplace encore et encore

CODE
base( TimeSpan.FromSeconds(m_TimerBouquinAnatomy05.dbl_DureeTimer),TimeSpan.FromSeconds (m_TimerBouquinAnatomy05.dbl_DureeOnTick),1)


Ce qui donne :

CODE
base( TimeSpan.FromSeconds(m_TimerBouquinMagery05.dbl_DureeTimer),TimeSpan.FromSeconds (m_TimerBouquinMagery05.dbl_DureeOnTick),1)


Et enfin on termine gros

CODE
{

m_TimerBouquinAnatomy05Var = m_TimerBouquinAnatomy05;
 
}
     
       
protected override void OnTick()
{
m_TimerBouquinAnatomy05Var.m_Utilise = false;
m_TimerBouquinAnatomy05Var.Proprietaire.Skills[SkillName.Anatomy].BaseFixedPoint +=  m_TimerBouquinAnatomy05Var.int_AugmDeEtude;
m_TimerBouquinAnatomy05Var.Proprietaire.SendMessage("La lecture prend fin");
m_TimerBouquinAnatomy05Var.Proprietaire.PlaySound(0x217);
Stop();
 
}


--> On remplace TOUT les "m_TimerBouquinAnatomy05Var" par "m_TimerMagery05Var"

Et le "m_TimerBouquinAnatomy05" par "m_TimerBouquinMagery05"

Sa a l'aire compliquer mais en faite ce n'est QUE du remplacement.

Bien entendu vous enregistrée sous un nouveau fichier .CS

Edit :
CODE
 new TimerBouquinAnatomy05(this).Start();


Par
CODE
 new TimerBouquinMagery05(this).Start();


L'appelle du timer ^-^


-----------------------------------------------------------------------------------------------

Alors maintenant la configuration de Items:

Chercher le constructeur
CODE

public BouquinAnatomy05() : base( 0xFF0 )

{
Weight = 2.0; // Ici le poids du livre
Name = "Bouquin d'etude"; // ici le nom du livre
dbl_DureeTimer = 30.0; // Alors ici la durée avant la fin de la lecture
dbl_DureeOnTick = 1.0; // La durée du OnTick, laissée a 1 seconde par default
int_AugmDeEtude = 5; // Augmentation de etude, ici 0.5 par lecture

}



Bon et bien le skills a montée

C'est dans le timer.

CODE

protected override void OnTick()
{
m_TimerBouquinAnatomy05Var.m_Utilise = false;


// ICI
m_TimerBouquinAnatomy05Var.Proprietaire.Skills
[SkillName.Anatomy].BaseFixedPoint += m_TimerBouquinAnatomy05Var.int_AugmDeEtude;
// Remplacée "Anatomy" par le skills voulu.


m_TimerBouquinAnatomy05Var.Proprietaire.SendMessage("La lecture prend fin");
m_TimerBouquinAnatomy05Var.Proprietaire.PlaySound(0x217);
Stop();
 
}


Et voila, pff finis. Bon ne vous affoler pas c'est juste que du remplacement.

Dans la prochaine version, une limitation en skills max a montée va etre implenter.
Et le réglage d'un message.

Les commande Set Gm son en débus de script. logiquement devrais pas les expliquer c'est pas chinois.

Ps: je suis toujour a la recherche de la commande pour checker un skills et la comparée a une valeur int. Merci B)

Sna - August 20, 2003 07:38 AM (GMT)
pour la montee de skills, il suffit de faire coincider ca
[SkillName.Anatomy].BaseFixedPoint += m_TimerBouquinAnatomy05Var.int_AugmDeEtude;

et ca
[SkillName.Anatomy].CapFixedPoint
qui est le cap de la skill en tenant compte des powerscrolls et autre :)

donc avant d'assigner, prends la valeur de la skill ds une var temporaire, tu la compare avec cette valeur la, si elle depasse, tu mets le cap, et si ca depasse pas ca monte

neanmoins, n'oublie pas qu avec ca, un joueur a 700 pts de skill qui beneficiera du livre ne pourra plus monter aucune autre skill avant d'avoir perdu l'excedent de points
le plus simple serait une commande permettant a un joueur d'enseigner a un autre les skills qu il a a 100, car cans ce cas, on peut utiliser la methode Teach de BaseCreature, qui est nettement plus facile et plus complete




Hosted for free by InvisionFree