RunUO-FR

Forum de support pour RunUO en français.
 
AccueilAccueil  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  Connexion  

Partagez | 
 

 Poteau d'arnachement

Aller en bas 
AuteurMessage
Goat



Messages : 12
Date d'inscription : 31/05/2010

MessageSujet: Poteau d'arnachement   Jeu 3 Juin - 1:09

Quelqu'un à un script de poteau d'arnachement qui fonctionne bien ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Scriptiz

avatar

Messages : 101
Date d'inscription : 02/09/2008
Localisation : Belgium

MessageSujet: Re: Poteau d'arnachement   Jeu 3 Juin - 2:30

En voici un parmis d'autres :

PoteauArnachement.cs
Code:
/*
 * MODIFICATIONS
 *
 * NUMÉRO         DATE        AUTEUR
 * ------      ----------      ------
 * #01           2007-06-30      Merlock
 *    > L'animal devient invul
 * #02         2008-03-08      Gargouille
 *    > le temps passé attaché ne compte plus pour le Bonding
 * #03         2008-03-13      Merlock
 *    > les poteaux de villes !!!
 * #04 partage du pet entre lesmobs de l'account //Corrected by Plume
 * */
using System;
using Server;
using Server.Items;
using Server.Targeting;
using Server.Mobiles;
using Server.Commands;
using Server.Multis;
using Server.Accounting;//#04

namespace Server.Items
{
   public class LPTarget : Target
   {
      public LPTarget()
         : base( 5, false, TargetFlags.None )
      {
      }

      protected override void OnTarget( Mobile from, object targeted )
      {
         if ( targeted is PoteauArnachement )
         {
            PoteauArnachement pa = (PoteauArnachement)targeted;
            BaseHouse bh = BaseHouse.FindHouseAt( pa );
            if ( pa == null || bh == null || ( !bh.IsOwner( from ) && !bh.IsCoOwner( from ) ) || pa.Animal == null )
               from.SendMessage( "Vous devez cibler un poteau avec une monture attachée qui est sur votre terrain !!" );
            else
            {
               pa.Libere( null );
               from.SendMessage( "La monture s'en va d'elle-même" );
            }
         }
         else
            from.SendMessage( "Vous devez cibler un poteau" );
      }
   }

   public class CPTarget : Target
   {
      public CPTarget()
         : base( 5, false, TargetFlags.None )
      {
      }

      protected override void OnTarget( Mobile from, object targeted )
      {
         if ( targeted is PoteauArnachement && !( targeted is PoteauDeVille ) )
         {
            PoteauArnachement pa = (PoteauArnachement)targeted;
            PoteauDeVille pdv = new PoteauDeVille();
            pdv.Location = pa.Location;
            pdv.Map = pa.Map;
            pdv.Movable = false;
            pdv.Animal = pa.Animal;
            pdv.Maitre = pa.Maitre;
            pdv.Loyaute = pa.Loyaute;
            pdv.AI = pa.AI;
            pa.Delete();
            from.SendMessage( "Le poteau est maintenant un poteau de ville" );
         }
         else
            from.SendMessage( "Ceci n'est pas un poteau de joueur" );
      }
   }
   
   [FlipableAttribute( 0x14E7, 0x14E8 )]
   public class PoteauDeVille : PoteauArnachement
   {
      public new static void Initialize()
      {
         CommandSystem.Register( "ConvertPoteau", AccessLevel.Counselor, new CommandEventHandler( ConvertPoteau_OnCommand ) );
      }

      private static void ConvertPoteau_OnCommand( CommandEventArgs e )
      {
         e.Mobile.SendMessage( "Vous devez cibler un poteau de joueur a convertir" ); //You have to choose a mobile
         e.Mobile.Target = new CPTarget();
      }
      
      private DateTime m_TempsRestant;
      [CommandProperty( AccessLevel.GameMaster )]
      public DateTime TempsRestant
      {
         get
         {
            return m_TempsRestant;
         }
         set
         {
            m_TempsRestant = value;
         }
      }
      
      [Constructable]
      public PoteauDeVille()
      {
      }

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

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

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

         writer.Write( (DateTime)m_TempsRestant );
         
         if(Animal != null && m_TempsRestant + TimeSpan.FromHours(12) < DateTime.Now)
            Libere(null);
      }

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

         int version = reader.ReadInt();

         m_TempsRestant = reader.ReadDateTime();
      }
   }
   
   [FlipableAttribute( 0x14E7, 0x14E8 )]
   public class PoteauArnachement : Item
   {
      public  static void Initialize()
      {
         CommandSystem.Register( "LiberePoteau", AccessLevel.Player, new CommandEventHandler( LiberePoteau_OnCommand ) );
      }

      private static void LiberePoteau_OnCommand( CommandEventArgs e )
      {
         e.Mobile.SendMessage( "Vous devez cibler un poteau" ); //You have to choose a mobile
         e.Mobile.Target = new LPTarget();
      }
      
      private Mobile m_Maitre;
      private BaseCreature m_Animal;
      private int m_Loyaute;
      private AIType m_AI;

      [CommandProperty( AccessLevel.GameMaster )]
      public Mobile Maitre
      {
         get
         {
            return m_Maitre;
         }
         set
         {
            m_Maitre = value;
         }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public BaseCreature Animal
      {
         get
         {
            return m_Animal;
         }
         set
         {
            m_Animal = value;
         }
      }

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

      [CommandProperty( AccessLevel.GameMaster )]
      public AIType AI
      {
         get
         {
            return m_AI;
         }
         set
         {
            m_AI = value;
         }
      }

      [Constructable]
      public PoteauArnachement()
         : base( 0x14E8 )
      {
         Weight = 10.0;
         Name = "Poteau d'arnachement";
      }

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

      public void Libere( Mobile from )
      {
         m_Animal.Blessed = false; // Ajout #01

         /*
         //***Ajout #02 début
         if ( m_Animal.IsBondable && !m_Animal.IsBonded && ( m_Animal.BondingBegin != DateTime.MinValue ) )
         {
            TimeSpan inactive = (TimeSpan)( DateTime.Now - m_Animal.LastStable );
            m_Animal.BondingBegin += inactive;
         }
         m_Animal.LastStable = DateTime.MinValue;
         //***Ajout #02 fin
          * */

         if ( from == null )
         {
            m_Animal.Tamable = true;
            m_Animal.Controlled = false;
            m_Animal.Loyalty = m_Loyaute;
            m_Animal.AI = m_AI;
            m_Animal.ControlOrder = OrderType.Release;
            m_Animal = null;
         }
         else
         {
            m_Animal.Tamable = true;
            m_Animal.Controlled = true;
            m_Animal.ControlMaster = m_Maitre;
            m_Animal.Loyalty = m_Loyaute;
            m_Animal.AI = m_AI;
            m_Animal.ControlTarget = m_Maitre;
            m_Animal.ControlOrder = OrderType.Follow;
            m_Animal = null;
            from.Say( "*détache sa monture*" );
         }
      }

      public override void OnDoubleClick( Mobile from )
      {
         if ( this.Movable )
            from.SendMessage( "Le poteau doit être fixé au sol pour pouvoir l'utiliser" );
         else if ( !from.InRange( this.GetWorldLocation(), 2 ) )
            from.SendLocalizedMessage( 500486 );  //That is too far away.
         else if ( Animal != null )
         {
            if ( m_Animal.Deleted )
               m_Animal = null;
            else
            {
               if ( Maitre == null || Maitre.Deleted )
               {
                  Libere( null );
                  from.SendMessage( "La monture s'en va d'elle-même" );
               }
               else if ( from == m_Maitre || CheckAccount(from))
               {
                  if(from.Skills[SkillName.AnimalTaming].Base < m_Animal.MinTameSkill && m_Animal.MinTameSkill > 29.1 )//#04
                     from.SendMessage( "Vous n'êtes pas en mesure de controler cette créature." );
                  if ( from.Followers + m_Animal.ControlSlots > from.FollowersMax )
                     from.SendMessage( "Vous avez trop de suivant pour détacher cette créature." );
                  else
                     Libere( from );
               }
               else
                  from.SendMessage( "Ce poteau est déjà utilisé par {0}", m_Maitre.Name );
            }
         }
         else
         {
            from.Target = new PoteauArnachementTarget( this );
            from.SendMessage( "Quel animal voulez vous attacher ?" );
         }
      }

      //#04
      private bool CheckAccount(Mobile from)
      {
         Account a = Maitre.Account as Account;

         if ( a != null )
         {
            for ( int i = 0; i < a.Length; ++i )
            {
               if ( a[i] == from )
               {
                  m_Maitre = a[i];
                  return true;
               }
            }
         }
         
         return false;
      }
      //
      
      private class PoteauArnachementTarget : Target
      {
         private PoteauArnachement m_Poteau;

         public PoteauArnachementTarget( PoteauArnachement poteau )
            : base( 1, true, TargetFlags.None )
         {
            m_Poteau = poteau;
         }

         protected override void OnTarget( Mobile from, object targ )
         {
            if ( !( m_Poteau.Deleted ) )
            {
               if ( targ is BaseMount || targ is PackHorse || targ is PackLlama )
               {
                  BaseCreature creature = targ as BaseCreature;

                  if ( ( creature.Controlled && creature.ControlMaster == from ) )
                  {
                     m_Poteau.Animal = creature;
                     m_Poteau.Maitre = from;
                     m_Poteau.Loyaute = creature.Loyalty;
                     m_Poteau.AI = creature.AI;
                     creature.AI = AIType.AI_None;
                     //creature.Controlled = false;
                     creature.Tamable = false;
                     creature.ControlMaster = null;
                     creature.Blessed = true; // Ajout #01

                     /*
                     //***Ajout #02 début
                     if ( creature.IsBondable && !creature.IsBonded && ( creature.BondingBegin != DateTime.MinValue ) )
                     {
                        creature.LastStable = DateTime.Now;
                     }
                     //***Ajout #02 fin
                      */

                     if ( m_Poteau is PoteauDeVille )
                        ( (PoteauDeVille)m_Poteau ).TempsRestant = DateTime.Now;
                     
                     from.Say( "*attache sa monture au poteau*" );
                  }
                  else if ( creature.AI == AIType.AI_None )
                  {
                     from.SendMessage( "Cette creature est déjà attachée !" );
                  }
                  else
                  {
                     from.SendMessage( "Cette creature n'est pas sous votre controle !" );
                  }
               }
               else if ( targ is PlayerMobile )
               {
                  Mobile m = (Mobile)targ;

                  if ( m == from )
                  {
                     from.Say( "*a essaye de s'attacher au poteau*" );
                  }
                  else
                  {
                     from.Say( "*a essaye d'attacher {0}, mais n'a pas reussi", m.Name );
                  }
               }
               else
               {
                  from.SendMessage( "Cette creature n'est pas une monture !" );
               }
            }
            return;
         }
      }

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

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

         writer.Write( (Mobile)m_Animal );
         writer.Write( (Mobile)m_Maitre );
         writer.Write( (int)m_Loyaute );
         writer.Write( (int)m_AI );
         
      }

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

         int version = reader.ReadInt();

         switch ( version )
         {
            case 0:
               {
                  m_Animal = (BaseCreature)reader.ReadMobile();
                  m_Maitre = reader.ReadMobile();
                  m_Loyaute = reader.ReadInt();
                  m_AI = (AIType)reader.ReadInt();
                  break;
               }
         }
      }
   }
}
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://uoclassic.free.fr/
Goat



Messages : 12
Date d'inscription : 31/05/2010

MessageSujet: Re: Poteau d'arnachement   Jeu 3 Juin - 3:14

Merci beaucoup Smile

Mais j'ai un erreur a cette ligne Sad :

Ligne 343 - creature.AI = AIType.AI_None;

CS0117: Line 343: 'Server.Mobiles.AIType' ne contient pas de définition pour
'AI_None'
CS0117: Line 363: 'Server.Mobiles.AIType' ne contient pas de définition pour
'AI_None'
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Plume



Messages : 37
Date d'inscription : 05/09/2008

MessageSujet: Re: Poteau d'arnachement   Jeu 3 Juin - 6:51

Il faut rajouter dans le BaseAI.cs, dans l'enum, le AI_None pour que ça fonctionne!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Goat



Messages : 12
Date d'inscription : 31/05/2010

MessageSujet: Re: Poteau d'arnachement   Ven 4 Juin - 5:02

Et je rajoute sa comment et ou ?

Désolé je m'y connais pas dans se fichier..

Merci d'avance Smile

Steven
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Scriptiz

avatar

Messages : 101
Date d'inscription : 02/09/2008
Localisation : Belgium

MessageSujet: Re: Poteau d'arnachement   Ven 4 Juin - 8:53

Commence par ouvrir avec l'éditeur de ton choix le fichiers suivants :
RunUO\Scripts\Mobiles\AI\AI\BaseAI.cs

Directement après les directives using tu verras ceci (à peu de choses prêt selon si tu en as déjà ajouté ou non) :
Code:
namespace Server.Mobiles
{
   public enum AIType
   {
      AI_Use_Default,
      AI_Melee,
      AI_Animal,
      AI_Archer,
      AI_Healer,
      AI_Vendor,
      AI_Mage,
      AI_Berserk,
      AI_Predator,
      AI_Thief,
      AI_NecroMage
   }

Et donc à la fin de cette liste tu rajoute le AI_None (attention au majuscules/minuscules) comme ceci :
Code:
namespace Server.Mobiles
{
   public enum AIType
   {
      AI_Use_Default,
      AI_Melee,
      AI_Animal,
      AI_Archer,
      AI_Healer,
      AI_Vendor,
      AI_Mage,
      AI_Berserk,
      AI_Predator,
      AI_Thief,
      AI_NecroMage,   // on rajoute un virgule
      AI_None      // on rajoute le AI_None
   }
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://uoclassic.free.fr/
Goat



Messages : 12
Date d'inscription : 31/05/2010

MessageSujet: Re: Poteau d'arnachement   Sam 5 Juin - 2:47

Wow, merci beaucoup Very Happy Very Happy

En passant comme sa, tu as pas un petit script de AFK ? Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Scriptiz

avatar

Messages : 101
Date d'inscription : 02/09/2008
Localisation : Belgium

MessageSujet: Re: Poteau d'arnachement   Sam 5 Juin - 13:24

Ce serait une bonne occasion pour toi de le scripter par toi-même plutôt que de demande un tout fait, lit les tutos et si tu rencontre des problèmes on peut toujours t'aider.

Tutos utiles :
Tuto pour commande : http://runuo-fr.forumactif.org/tutoriaux-runuo-f10/creer-une-commande-t46.htm
Tuto pour un timer : http://runuo-fr.forumactif.org/tutoriaux-runuo-f10/creer-un-timer-t27.htm
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://uoclassic.free.fr/
Contenu sponsorisé




MessageSujet: Re: Poteau d'arnachement   

Revenir en haut Aller en bas
 
Poteau d'arnachement
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Problème poteau téléphonique détruit
» la pose de mon portail
» Enfin 8D /poteau/

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RunUO-FR :: Problèmes et questions :: Comment faire ?-
Sauter vers: