RunUO-FR
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
RunUO-FR

Forum de support pour RunUO en français.
 
AccueilAccueil  Dernières imagesDernières images  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -23%
EVGA SuperNOVA 650 G6 – Alimentation PC 100% ...
Voir le deal
77.91 €

 

 Erreur Serialize/Deserialize

Aller en bas 
2 participants
AuteurMessage
Blunt

Blunt


Messages : 9
Date d'inscription : 05/09/2008
Age : 32
Localisation : Repentigny

Erreur Serialize/Deserialize Empty
MessageSujet: Erreur Serialize/Deserialize   Erreur Serialize/Deserialize Icon_minipostedLun 28 Sep - 2:04

Salut, j'ai des la misère avec la (de)serialise de mon playermobile ^^". Je vous montre

Code:
using System;
using System.Collections;
using Server;
using Server.Misc;
using Server.Items;
using Server.Gumps;
using Server.Multis;
using Server.Engines.Help;
using Server.ContextMenus;
using Server.Network;
using Server.Spells;
using Server.Spells.Fifth;
using Server.Spells.Seventh;
using Server.Targeting;
using Server.Engines.Quests;
using Server.Factions;
using Server.Regions;
using Server.Accounting;

namespace Server.Mobiles
{
   [Flags]
   public enum PlayerFlag // First 16 bits are reserved for default-distro use, start custom flags at 0x00010000
   {
      None            = 0x00000000,
      Glassblowing      = 0x00000001,
      Masonry            = 0x00000002,
      SandMining         = 0x00000004,
      StoneMining         = 0x00000008,
      ToggleMiningStone   = 0x00000010,
      KarmaLocked         = 0x00000020,
      AutoRenewInsurance   = 0x00000040,
      UseOwnFilter      = 0x00000080,
      PublicMyRunUO      = 0x00000100,
      PagingSquelched      = 0x00000200,
      Young            = 0x00000400
   }
   
   public enum Race
   {
      Humnis,
      Draedz,
      Filium,
      Akua
   }
   
   public enum Classe
   {
           
   }

   public enum NpcGuild
   {
      None,
      MagesGuild,
      WarriorsGuild,
      ThievesGuild,
      RangersGuild,
      HealersGuild,
      MinersGuild,
      MerchantsGuild,
      TinkersGuild,
      TailorsGuild,
      FishermensGuild,
      BardsGuild,
      BlacksmithsGuild
   }

   public enum SolenFriendship
   {
      None,
      Red,
      Black
   }

   public class PlayerMobile : Mobile
   {
      private class CountAndTimeStamp
      {
         private int m_Count;
         private DateTime m_Stamp;

         public CountAndTimeStamp()
         {
         }

         public DateTime TimeStamp { get{ return m_Stamp; } }
         public int Count
         {
            get { return m_Count; }
            set   { m_Count = value; m_Stamp = DateTime.Now; }
         }
      }

      private DesignContext m_DesignContext;

      private NpcGuild m_NpcGuild;
      private DateTime m_NpcGuildJoinTime;
      private TimeSpan m_NpcGuildGameTime;
      private PlayerFlag m_Flags;
      private int m_StepsTaken;
      private int m_Profession;
      private int m_Niveau;
      private int m_Xp;
      private int m_Exp;
      private Classe m_Classe;
      private Race m_Race;

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

      public int StepsTaken
      {
         get{ return m_StepsTaken; }
         set{ m_StepsTaken = value; }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public NpcGuild NpcGuild
      {
         get{ return m_NpcGuild; }
         set{ m_NpcGuild = value; }
      }   
/***** AJOUT *****/      
      [CommandProperty( AccessLevel.GameMaster )]
      public int Niveau
      {
         get{ return m_Niveau; }
         set{ m_Niveau = value; }
      }
      
      [CommandProperty( AccessLevel.GameMaster )]
      public int Xp
      {
         get{ return m_Xp; }
         set{ m_Xp = value; }
      }
      
      [CommandProperty( AccessLevel.GameMaster )]
      public int Exp
      {
         get{ return m_Exp; }
         set{ m_Exp = value; }
      }
      
      [CommandProperty( AccessLevel.GameMaster )]
      public Classe Classe
      {
         get{ return m_Classe; }
         set{ m_Classe = value; }
      }
      
      [CommandProperty( AccessLevel.GameMaster )]
      public Race Race
      {
         get{ return m_Race; }
         set{ m_Race = value; }
      }
/***** AJOUT *****/
      [CommandProperty( AccessLevel.GameMaster )]
      public DateTime NpcGuildJoinTime
      {
         get{ return m_NpcGuildJoinTime; }
         set{ m_NpcGuildJoinTime = value; }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public TimeSpan NpcGuildGameTime
      {
         get{ return m_NpcGuildGameTime; }
         set{ m_NpcGuildGameTime = value; }
      }

      public PlayerFlag Flags
      {
         get{ return m_Flags; }
         set{ m_Flags = value; }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool PagingSquelched
      {
         get{ return GetFlag( PlayerFlag.PagingSquelched ); }
         set{ SetFlag( PlayerFlag.PagingSquelched, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool Glassblowing
      {
         get{ return GetFlag( PlayerFlag.Glassblowing ); }
         set{ SetFlag( PlayerFlag.Glassblowing, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool Masonry
      {
         get{ return GetFlag( PlayerFlag.Masonry ); }
         set{ SetFlag( PlayerFlag.Masonry, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool SandMining
      {
         get{ return GetFlag( PlayerFlag.SandMining ); }
         set{ SetFlag( PlayerFlag.SandMining, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool StoneMining
      {
         get{ return GetFlag( PlayerFlag.StoneMining ); }
         set{ SetFlag( PlayerFlag.StoneMining, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool ToggleMiningStone
      {
         get{ return GetFlag( PlayerFlag.ToggleMiningStone ); }
         set{ SetFlag( PlayerFlag.ToggleMiningStone, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool KarmaLocked
      {
         get{ return GetFlag( PlayerFlag.KarmaLocked ); }
         set{ SetFlag( PlayerFlag.KarmaLocked, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool AutoRenewInsurance
      {
         get{ return GetFlag( PlayerFlag.AutoRenewInsurance ); }
         set{ SetFlag( PlayerFlag.AutoRenewInsurance, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool UseOwnFilter
      {
         get{ return GetFlag( PlayerFlag.UseOwnFilter ); }
         set{ SetFlag( PlayerFlag.UseOwnFilter, value ); }
      }

      [CommandProperty( AccessLevel.GameMaster )]
      public bool PublicMyRunUO
      {
         get{ return GetFlag( PlayerFlag.PublicMyRunUO ); }
         set{ SetFlag( PlayerFlag.PublicMyRunUO, value ); InvalidateMyRunUO(); }
      }


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

         switch ( version )
         {
            case 18:
            {
               m_SolenFriendship = (SolenFriendship) reader.ReadEncodedInt();
               m_Niveau = reader.ReadInt();
               m_Xp =  reader.ReadInt();
               m_Exp =  reader.ReadInt();
               m_Classe = (Classe) reader.ReadInt();
               m_Race = (Race) reader.ReadInt();
               
               goto case 17;
            }
            case 17:
            case 16:
            {
               m_Quest = QuestSerializer.DeserializeQuest( reader );

               if ( m_Quest != null )
                  m_Quest.From = this;

               int count = reader.ReadEncodedInt();

               if ( count > 0 )
               {
                  m_DoneQuests = new ArrayList();

                  for ( int i = 0; i < count; ++i )
                  {
                     Type questType = QuestSerializer.ReadType( QuestSystem.QuestTypes, reader );
                     DateTime restartTime;

                     if ( version < 17 )
                        restartTime = DateTime.MaxValue;
                     else
                        restartTime = reader.ReadDateTime();

                     m_DoneQuests.Add( new QuestRestartInfo( questType, restartTime ) );
                  }
               }

               m_Profession = reader.ReadEncodedInt();
               goto case 15;
            }
            case 15:
            {
               m_LastCompassionLoss = reader.ReadDeltaTime();
               goto case 14;
            }
            case 14:
            {
               m_CompassionGains = reader.ReadEncodedInt();

               if ( m_CompassionGains > 0 )
                  m_NextCompassionDay = reader.ReadDeltaTime();

               goto case 13;
            }
            case 13: // just removed m_PayedInsurance list
            case 12:
            {
               m_BOBFilter = new Engines.BulkOrders.BOBFilter( reader );
               goto case 11;
            }
            case 11:
            {
               if ( version < 13 )
               {
                  ArrayList payed = reader.ReadItemList();

                  for ( int i = 0; i < payed.Count; ++i )
                     ((Item)payed[i]).PayedInsurance = true;
               }

               goto case 10;
            }
            case 10:
            {
               if ( reader.ReadBool() )
               {
                  m_HairModID = reader.ReadInt();
                  m_HairModHue = reader.ReadInt();
                  m_BeardModID = reader.ReadInt();
                  m_BeardModHue = reader.ReadInt();

                  // We cannot call SetHairMods( -1, -1 ) here because the items have not yet loaded
                  Timer.DelayCall( TimeSpan.Zero, new TimerCallback( RevertHair ) );
               }

               goto case 9;
            }
            case 9:
            {
               SavagePaintExpiration = reader.ReadTimeSpan();

               if ( SavagePaintExpiration > TimeSpan.Zero )
               {
                  BodyMod = ( Female ? 184 : 183 );
                  HueMod = 0;
               }

               goto case 8;
            }
            case 8:
            {
               m_NpcGuild = (NpcGuild)reader.ReadInt();
               m_NpcGuildJoinTime = reader.ReadDateTime();
               m_NpcGuildGameTime = reader.ReadTimeSpan();
               goto case 7;
            }
            case 7:
            {
               m_PermaFlags = reader.ReadMobileList();
               goto case 6;
            }
            case 6:
            {
               NextTailorBulkOrder = reader.ReadTimeSpan();
               goto case 5;
            }
            case 5:
            {
               NextSmithBulkOrder = reader.ReadTimeSpan();
               goto case 4;
            }
            case 4:
            {
               m_LastJusticeLoss = reader.ReadDeltaTime();
               m_JusticeProtectors = reader.ReadMobileList();
               goto case 3;
            }
            case 3:
            {
               m_LastSacrificeGain = reader.ReadDeltaTime();
               m_LastSacrificeLoss = reader.ReadDeltaTime();
               m_AvailableResurrects = reader.ReadInt();
               goto case 2;
            }
            case 2:
            {
               m_Flags = (PlayerFlag)reader.ReadInt();
               goto case 1;
            }
            case 1:
            {
               m_LongTermElapse = reader.ReadTimeSpan();
               m_ShortTermElapse = reader.ReadTimeSpan();
               m_GameTime = reader.ReadTimeSpan();
               goto case 0;
            }
            case 0:
            {
               break;
            }
         }

         // Professions weren't verified on 1.0 RC0
         if ( !CharacterCreation.VerifyProfession( m_Profession ) )
            m_Profession = 0;

         if ( m_PermaFlags == null )
            m_PermaFlags = new ArrayList();

         if ( m_JusticeProtectors == null )
            m_JusticeProtectors = new ArrayList();

         if ( m_BOBFilter == null )
            m_BOBFilter = new Engines.BulkOrders.BOBFilter();

         ArrayList list = this.Stabled;

         for ( int i = 0; i < list.Count; ++i )
         {
            BaseCreature bc = list[i] as BaseCreature;

            if ( bc != null )
               bc.IsStabled = true;
         }
      }
      
      public override void Serialize( GenericWriter writer )
      {
         //cleanup our anti-macro table
         foreach ( Hashtable t in m_AntiMacroTable.Values )
         {
            ArrayList remove = new ArrayList();
            foreach ( CountAndTimeStamp time in t.Values )
            {
               if ( time.TimeStamp + SkillCheck.AntiMacroExpire <= DateTime.Now )
                  remove.Add( time );
            }

            for (int i=0;i<remove.Count;++i)
               t.Remove( remove[i] );
         }

         //decay our kills
         if ( m_ShortTermElapse < this.GameTime )
         {
            m_ShortTermElapse += TimeSpan.FromHours( 8 );
            if ( ShortTermMurders > 0 )
               --ShortTermMurders;
         }

         if ( m_LongTermElapse < this.GameTime )
         {
            m_LongTermElapse += TimeSpan.FromHours( 40 );
            if ( Kills > 0 )
               --Kills;
         }

         base.Serialize( writer );
         
         writer.Write( (int) 18 ); // version

         
         writer.WriteEncodedInt( (int) m_SolenFriendship );
         writer.Write( (int) m_Niveau );
         writer.Write( (int) m_Xp );
         writer.Write( (int) m_Exp );
         writer.Write( (int) m_Classe );
         writer.Write( (int) m_Race );

         QuestSerializer.Serialize( m_Quest, writer );

         if ( m_DoneQuests == null )
         {
            writer.WriteEncodedInt( (int) 0 );
         }
         else
         {
            writer.WriteEncodedInt( (int) m_DoneQuests.Count );

            for ( int i = 0; i < m_DoneQuests.Count; ++i )
            {
               QuestRestartInfo restartInfo = (QuestRestartInfo)m_DoneQuests[i];

               QuestSerializer.Write( (Type) restartInfo.QuestType, QuestSystem.QuestTypes, writer );
               writer.Write( (DateTime) restartInfo.RestartTime );
            }
         }
         writer.WriteEncodedInt( (int) m_Profession );

         writer.WriteDeltaTime( m_LastCompassionLoss );

         writer.WriteEncodedInt( m_CompassionGains );

         if ( m_CompassionGains > 0 )
            writer.WriteDeltaTime( m_NextCompassionDay );

         m_BOBFilter.Serialize( writer );

         bool useMods = ( m_HairModID != -1 || m_BeardModID != -1 );

         writer.Write( useMods );

         if ( useMods )
         {
            writer.Write( (int) m_HairModID );
            writer.Write( (int) m_HairModHue );
            writer.Write( (int) m_BeardModID );
            writer.Write( (int) m_BeardModHue );
         }

         writer.Write( SavagePaintExpiration );

         writer.Write( (int) m_NpcGuild );
         writer.Write( (DateTime) m_NpcGuildJoinTime );
         writer.Write( (TimeSpan) m_NpcGuildGameTime );

         writer.WriteMobileList( m_PermaFlags, true );

         writer.Write( NextTailorBulkOrder );

         writer.Write( NextSmithBulkOrder );

         writer.WriteDeltaTime( m_LastJusticeLoss );
         writer.WriteMobileList( m_JusticeProtectors, true );

         writer.WriteDeltaTime( m_LastSacrificeGain );
         writer.WriteDeltaTime( m_LastSacrificeLoss );
         writer.Write( m_AvailableResurrects );

         writer.Write( (int) m_Flags );

         writer.Write( m_LongTermElapse );
         writer.Write( m_ShortTermElapse );
         writer.Write( this.GameTime );
      }

      

J'ai quelque peu raccourcis le script mais l'essentiel y est ^^. Merci de votre aide!
Revenir en haut Aller en bas
Scriptiz

Scriptiz


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

Erreur Serialize/Deserialize Empty
MessageSujet: Re: Erreur Serialize/Deserialize   Erreur Serialize/Deserialize Icon_minipostedSam 3 Oct - 0:11

Qu'a tu modifié/ajouté au PlayerMobile depuis la dernière fois où ça fonctionnait?

Ca compile mais il te dit qu'il doit supprimer tous les objets ou alors ça ne compile juste pas?

Peux-tu nous faire un copier/coller de la console RunUO ?
Revenir en haut Aller en bas
http://uoclassic.free.fr/
Blunt

Blunt


Messages : 9
Date d'inscription : 05/09/2008
Age : 32
Localisation : Repentigny

Erreur Serialize/Deserialize Empty
MessageSujet: Re: Erreur Serialize/Deserialize   Erreur Serialize/Deserialize Icon_minipostedDim 4 Oct - 5:05

Il compile si je Fas Y ( donc, yes ) pour supprimer les mobiles. J'ai changé cela:

Code:
     
      private int m_Niveau;
      private int m_Xp;
      private int m_Exp;
      private Classe m_Classe;
      private Race m_Race;

Code:

/***** AJOUT *****/     
      [CommandProperty( AccessLevel.GameMaster )]
      public int Niveau
      {
        get{ return m_Niveau; }
        set{ m_Niveau = value; }
      }
     
      [CommandProperty( AccessLevel.GameMaster )]
      public int Xp
      {
        get{ return m_Xp; }
        set{ m_Xp = value; }
      }
     
      [CommandProperty( AccessLevel.GameMaster )]
      public int Exp
      {
        get{ return m_Exp; }
        set{ m_Exp = value; }
      }
     
      [CommandProperty( AccessLevel.GameMaster )]
      public Classe Classe
      {
        get{ return m_Classe; }
        set{ m_Classe = value; }
      }
     
      [CommandProperty( AccessLevel.GameMaster )]
      public Race Race
      {
        get{ return m_Race; }
        set{ m_Race = value; }
      }
/***** AJOUT *****/

Code:

              m_Niveau = reader.ReadInt();
              m_Xp =  reader.ReadInt();
              m_Exp =  reader.ReadInt();
              m_Classe = (Classe) reader.ReadInt();
              m_Race = (Race) reader.ReadInt();

Code:

        writer.Write( (int) m_Niveau );
        writer.Write( (int) m_Xp );
        writer.Write( (int) m_Exp );
        writer.Write( (int) m_Classe );
        writer.Write( (int) m_Race );

Merci Smile
Revenir en haut Aller en bas
Scriptiz

Scriptiz


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

Erreur Serialize/Deserialize Empty
MessageSujet: Re: Erreur Serialize/Deserialize   Erreur Serialize/Deserialize Icon_minipostedVen 9 Oct - 1:23

Déjà ta classe et la race sont deux objets, tu ne peux pas les sérializés juste en les castant en Int et en utilisant un ReadInt.

Il faut que dans ces classes tu écrives leurs propres méthodes Serialize et Deserialize.

Le soucis aussi après c'est que tu aura deux int en trop dans tes saves si tu as fait des saves avec ce serialize, donc si c'est le cas n'oublie pas de les lires dans des bêtes valeurs que tu ne reserialisera pas par la suite.

Sinon tu peux juste les effacer, et mettre la serialisation de tes deux objets dans les classes qui les décrivent (Race et Classe).
Revenir en haut Aller en bas
http://uoclassic.free.fr/
Contenu sponsorisé





Erreur Serialize/Deserialize Empty
MessageSujet: Re: Erreur Serialize/Deserialize   Erreur Serialize/Deserialize Icon_miniposted

Revenir en haut Aller en bas
 
Erreur Serialize/Deserialize
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Serialize/Deserialize
» Erreur avec le système de Breeding sur serveur 2.3

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