View Full Version: probleme pour un gumps

RunUO.FR Support > Probleme de script > probleme pour un gumps


Title: probleme pour un gumps
Description: modif d'un numero par un string ou...


zedar - April 21, 2004 01:36 PM (GMT)
g cree un grump pour mes races mais le probleme c que je voudrai changer l image de la race quand je clic sur le bouton correspondant....... je vous donne un petit appercu de ce que g fait,:( c un gump que je cree a partir du systeme de race sur runuo.com)


CODE
using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Engines.Classes;
using Server.Engines.Races;
using Server.Mobiles;

namespace Server.Gumps
{
public class RaceMenu : Gump
{
 private int gumpX, gumpY = 0;
 private int buttonID = 1;
 private int pageID = 1;
 private int pageRef = 1;

 public void CreatePage( PlayerRace entry, int id )
 {
  AddPage( pageID );
  this.AddBackground(96, 145, 158, 130, 9200);
 
                                               this.AddImage(106, 157, 132);  // ici je voudrai changer l image pour mes 6 races les numero de mes image vont de 106 a 132
 
                                                 AddHtml( 277, 139, 235, 288, String.Format( "<center>{0}</center><p>{1}</p><p>Starting Strength: {2}<br>Starting Dex: {3}<br>Starting Int: {4}</p>", entry.Name, entry.Description, entry.Strength, entry.Dexterity, entry.Intelligence ), true, true );
  AddButton( 350, 426, 1149, 1148, id, GumpButtonType.Reply, 0 );

  ++pageID;
 }

 public void CreateOption( PlayerRace entry )
 {
  AddButton( 100, gumpY, 5050, 5051, 444, GumpButtonType.Page, pageRef );
  AddLabel( 145, gumpY, 1152, entry.Name );

  ++pageRef;
  gumpY += 27;
 }
     
...........................ext

Enola - April 21, 2004 04:30 PM (GMT)
essaye de rajouter un switch pour contenir ton this.AddImage( )

genre:
CODE

switch( pageID )
{
  case 1: { this.AddImage( image1 ); break; }
  case 2: { this.AddImage( image2 ); break; }
  ...
}

zedar - April 23, 2004 11:04 AM (GMT)
marche pas ........... :(

slade15 - April 23, 2004 11:56 AM (GMT)
desolé j ne peut pas t'aider, j ne cree pas comme ca mes gump, mais j'avais en tete la meme idee Enola

montre la site de ton script notament le OnResponse

zedar - April 23, 2004 10:53 PM (GMT)
racemenu.cs



CODE

using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Engines.Classes;
using Server.Engines.Races;
using Server.Mobiles;

namespace Server.Gumps
{
public class RaceMenu : Gump
{
 private int gumpX, gumpY = 0;
 private int buttonID = 1;
 private int pageID = 1;
 private int pageRef = 1;

 public void CreatePage( PlayerRace entry, int id )
 {
  AddPage( pageID );
  this.AddBackground(96, 145, 158, 130, 9200);
 
  AddHtml( 277, 139, 235, 288, String.Format( "<center>{0}</center><p>{1}</p><p>Starting Strength: {2}<br>Starting Dex: {3}<br>Starting Int: {4}</p>", entry.Name, entry.Description, entry.Strength, entry.Dexterity, entry.Intelligence ), true, true );
  AddButton( 350, 426, 1149, 1148, id, GumpButtonType.Reply, 0 );

  ++pageID;
 }

 public void CreateOption( PlayerRace entry )
 {
  AddButton( 100, gumpY, 5050, 5051, 444, GumpButtonType.Page, pageRef );
  AddLabel( 145, gumpY, 1152, entry.Name );

  ++pageRef;
  gumpY += 27;
 }
     
 
   
 
   
 public RaceMenu( Mobile from ) : base ( 0, 0 )
 {
  Closable = false;
  Dragable = false;
  Disposable = false;

  AddImageTiled( 70, 70, 470, 400, 2702);
  AddAlphaRegion( 70, 70, 470, 400 );
  AddImageTiled( 70, 63, 470, 7, 9201);
  AddImage( 63, 63, 9200);
  AddImage( 540, 63, 9202);
  AddImageTiled( 63, 70, 7, 400, 9203);
  AddImageTiled( 540, 70, 7, 400, 9205);
  AddImage( 63, 470, 9206);
  AddImage( 540, 470, 9208);
  AddImageTiled( 70, 470, 470, 7, 9207);
  AddImageTiled( 70, 120, 470, 7, 9204);
  AddHtml( 70, 90, 470, 50, "<center><basefont color=#FFFFFF>Race Selection Menu</font></center>", false, false );
  AddImage( 13, 48, 10440 );

  gumpY = 280;

  foreach( PlayerRace race in RaceSystem.Instance.Races )
  {
   if ( race.CanSelect( (dovPlayerMobile)from ) )
    CreateOption( race );
  }

  for( int i = 0; i < RaceSystem.Instance.Races.Count; ++i )
  {
   PlayerRace race = (PlayerRace)RaceSystem.Instance.Races[i];
   
   if ( race.CanSelect( (dovPlayerMobile)from ) )
    CreatePage( race, i );
  }
 }

 public override void OnResponse( NetState state, RelayInfo info )
 {
  dovPlayerMobile from = state.Mobile as dovPlayerMobile;

  PlayerRace entry = (PlayerRace)RaceSystem.Instance.Races[info.ButtonID];

  if ( entry != null )
  {
   from.Race = entry;

   entry.OnSelection( from );

   from.SendMessage( "Tu es maintenant {0} {1}", VowelStart( entry.Name.ToLower() ) ? "un" : "un", entry.Name );
  }
 }

 private bool VowelStart( string text )
 {
  return ( text.StartsWith( "a" ) || text.StartsWith( "e" ) || text.StartsWith( "i" ) ||
   text.StartsWith( "o" ) || text.StartsWith( "u" ) );
 }  
}
}




humanrace.cs
CODE

using System;
using Server;
using Server.Mobiles;
using Server.Engines.Classes;

namespace Server.Engines.Races
{
public sealed class HumanRace : PlayerRace
{

 public override string Description{ get{ return "Humans, by far, are the most populous race. One of the original races created by the gods, humans have been on the earth since the beginning. A gift of the Gods of Neutrality, humans lives are destined to be short, but because of the limited duration they fill their days with passion and ambition. Humans usually live for about 90 years.  Wherever one may travel they will encounter humans. Of course there are some exceptions, but for the most part they live everywhere. Humans can be civilized or barbarian; intelligent or stupid; black or white.  The common human is generally a farmer, one who tills the land in the manner of classic England. They are not serfs necessarily; there seem to be many freemen farmers, but the common folk generally are not distinguished. If one travels to the cities, they will see merchants and shopkeepers, artisans and artists replace the common farmer. Humans are typically between 5.5 to 6 feet tall with an average weight of 150 lbs. Hair and eye color can range from almost any combination."; } }
 public override string Title{ get{ return "L' Humain"; } }

    public override bool Enabled{ get{ return true; } }
 public override int Strength{ get{ return 40; } }
 public override int Intelligence{ get{ return 40; } }
 public override int Dexterity{ get{ return 40; } }
 public override Point3D StoneLocation{ get{ return new Point3D( 1616,1637, 35 ); } }

 public HumanRace() : base()
 {
  Name = "Humain";
 }

 public HumanRace( 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();
 }
}
}



Moi aussi g pas l habitude de faire mes gumps comme sa mais c le systeme de TheOutkastDev je souhette simplement ameliore et personaliser les gumps .....tu veu voir le aussi dovPlayerMobile.cs ? ( c bizard que sur runuo.com il l ont pas reposter se system il est pourtant tres bien)

Didi - April 24, 2004 01:53 PM (GMT)
tu est en train de modifier un tres gros systeme, c'est la que sa devient compliquer.

Ta penser rajouter une int dans les props des race? , au meme titre que description. Ce int serait le id de limage que tu initialiserais dans humanrace.cs

ensuite, tu placerais ton image dans le createpage a lendroit ou tu lka voudrais. en faissant appelk par exemple à entry.ImageID.

Non ?

zedar - April 24, 2004 04:48 PM (GMT)
heu par exemple je fait




humanrace.cs je rajoute...
public override int imagetype{ get{ return 132; } }


et dans le race menu je met...


AddImage( 540, 63, String.Format( entry.imagetype ), true, true );


c sa ???

(comme sa g une erreur serveur no suitable methode donc c pas comme sa qu il faut le faire)

slade15 - April 24, 2004 06:34 PM (GMT)
mais dans RaceMenu entry n'existe pas

si tu l'ajoute ca doit etre

HumanRace entry et pas PlayerRace entry

slade15 - April 24, 2004 06:36 PM (GMT)
suitable = override c'est ca ?

Didi - April 24, 2004 09:18 PM (GMT)
Zedar oui comme sa, mais au depart il faut que tu la cré cette variable dans le PlayerRace.

faire le get set et le seriallize/deserialize.

Je parle chinois ? :rolleyes:

Didi - April 24, 2004 09:19 PM (GMT)
slade15 non, il doit ajouter la variable au player Race, pas seulement au human race, sinon sa sert a rien.

zedar - April 25, 2004 08:56 AM (GMT)
faire le get set et le seriallize/deserialize ?



il y a dejas un seriallize/deserialize en fin de script de humanrace.cs ..... ext


je vois pas .... tu peu me donner un exemple svp merci

slade15 - April 25, 2004 10:11 AM (GMT)
zedar c'est dans le PlayerRace que tu doit ajouter la variable sinon ca marchera que pour les humains

poste ton PlayerRace

zedar - April 25, 2004 10:27 AM (GMT)
playerrace.cs


CODE
using System;
using System.Collections;
using Server;
using Server.Mobiles;
using Server.Gumps;
using Server.Engines.Classes;

namespace Server.Engines.Races
{
public enum RaceRelation
{
 Enemy = 0,
 Ally = 1,
 Neutral = 2
}

public enum ElectionState
{
 Pending,
 Campaign,
 Election
}

public class CandidateInfo
{
 private Mobile m_Mobile;
 private int m_Votes;

 public Mobile Mobile{ get{ return m_Mobile; } }

 public int Votes
 {
  get{ return m_Votes; }
  set{ m_Votes = value; }
 }

 public CandidateInfo( Mobile m )
 {
  m_Mobile = m;
  m_Votes = 0;
 }

 public CandidateInfo( GenericReader reader )
 {
  int version = reader.ReadInt();

  m_Mobile = reader.ReadMobile();
  m_Votes = reader.ReadInt();
 }

 public void Serialize( GenericWriter writer )
 {
  writer.Write( (int)0 );

  writer.Write( m_Mobile );
  writer.Write( m_Votes );
 }
}

public abstract class PlayerRace : BaseEntry
{
 public const int MaxCandidates = 5;
 
 public virtual TimeSpan ElectionPendingPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }
 public virtual TimeSpan CampaignPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }
 public virtual TimeSpan ElectionPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }

 public abstract string Title{ get; }

 public virtual int MaleBodyMod{ get{ return 0; } }
 public virtual int FemaleBodyMod{ get{ return 0; } }
 
 public virtual int Strength{ get{ return 10; } }
 public virtual int Intelligence{ get{ return 10; } }
 public virtual int Dexterity{ get{ return 10; } }

 public virtual Point3D StoneLocation{ get{ return new Point3D( 1475,1645, 20 ); } }
 public virtual Map StoneMap{ get{ return Map.Felucca; } }

 private Mobile m_Leader;
       
 private string m_Message;
 
 private ElectionState m_State;

 private ArrayList m_Classes = new ArrayList();
 
 private ArrayList m_Allies = new ArrayList();
 private ArrayList m_Enemies = new ArrayList();
 private ArrayList m_WarInvitations = new ArrayList();
 private ArrayList m_WarDeclarations = new ArrayList();
 private ArrayList m_AllyInvitations = new ArrayList();
 private ArrayList m_AllyDeclarations = new ArrayList();
 private ArrayList m_Candidates = new ArrayList();
 private ArrayList m_Voted = new ArrayList();

 private RaceControlStone m_Stone;

 private Timer m_ElectionTimer;

 public ArrayList Classes
 {
  get{ return m_Classes; }
  set{ m_Classes = value; }
 }

 public ArrayList Allies
 {
  get{ return m_Allies; }
 }

 public ArrayList Enemies
 {
  get{ return m_Enemies; }
 }

 public ArrayList WarInvitations
 {
  get{ return m_WarInvitations; }
 }

 public ArrayList WarDeclarations
 {
  get{ return m_WarDeclarations; }
 }

 public ArrayList AllyInvitations
 {
  get{ return m_AllyInvitations; }
 }

 public ArrayList AllyDeclarations
 {
  get{ return m_AllyDeclarations; }
 }

 public ArrayList Candidates
 {
  get{ return m_Candidates; }
  set{ m_Candidates = value; }
 }

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

 [CommandProperty( AccessLevel.GameMaster )]
 public string Message
 {
  get{ return m_Message; }
  set{ m_Message = value; }
 }

 public ElectionState State
 {
  get{ return m_State; }
  set{ m_State = value; }
 }

 public PlayerRace() : base()
 {
  BeginPendingElection();
 }

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

 public override void OnSelection( dovPlayerMobile from )
 {
  from.Title = Title;
  from.RawStr = Strength;
  from.RawDex = Dexterity;
  from.RawInt = Intelligence;
  from.BodyMod = from.Female ? FemaleBodyMod : MaleBodyMod;

  from.Location = new Point3D( this.StoneLocation.X, this.StoneLocation.Y + 1, this.StoneLocation.Z );
  from.Map = StoneMap;

  if ( ClassSystem.Enabled )
  {
   from.CloseGump( typeof( ClassMenu ) );
   from.SendGump( new ClassMenu( from ) );
  }

  base.OnSelection( from );
 }

 public bool IsLeader( Mobile from )
 {
  return ( m_Leader != null && m_Leader == from );
 }

 #region Race Relations
 public virtual bool IsEnemy( PlayerRace race )
 {
  return m_Enemies.Contains( race );
 }

 public virtual bool IsAlly( PlayerRace race )
 {
  return m_Allies.Contains( race );
 }

 public virtual RaceRelation GetRelation( PlayerRace race )
 {
  if ( m_Enemies.Contains( race ) )
   return RaceRelation.Enemy;
  else if ( m_Allies.Contains( race ) )
   return RaceRelation.Ally;
  else
   return RaceRelation.Neutral;
 }

 public void AddEnemy( PlayerRace race )
 {
  if ( !m_Enemies.Contains( race ) )
  {
   m_Enemies.Add( race );

   SendToAll( String.Format( "RACE MESSAGE: A state of war has been declared with the {0} race!", race.Name ) );

   foreach( Mobile m in Members )
    m.Delta( MobileDelta.Noto );
  }
 }

 public void RemoveEnemy( PlayerRace race )
 {
  if ( m_Enemies.Contains( race ) )
  {
   m_Enemies.Remove( race );

   SendToAll( String.Format( "RACE MESSAGE: The race is no longer at war with the {0} race.", race.Name ) );

   foreach( Mobile m in Members )
    m.Delta( MobileDelta.Noto );
  }
 }

 public void RemoveAlly( PlayerRace race )
 {
  if ( m_Allies.Contains( race ) )
  {
   m_Allies.Remove( race );

   SendToAll( String.Format( "RACE MESSAGE: The race is no longer allied with the {0} race.", race.Name ) );

   foreach( Mobile m in Members )
    m.Delta( MobileDelta.Noto );
  }
 }

 public void AddAlly( PlayerRace race )
 {
  if ( !m_Allies.Contains( race ) )
  {
   m_Allies.Add( race );

   SendToAll( String.Format( "RACE MESSAGE: A state of allied relations has been declared with the {0} race!", race.Name ) );

   foreach( Mobile m in Members )
    m.Delta( MobileDelta.Noto );
  }
 }

 public void AddWarDeclaration( PlayerRace race )
 {
  if ( !m_WarDeclarations.Contains( race ) )
  {
   m_WarDeclarations.Add( race );

   race.WarInvitations.Add( this );

   SendToAll( String.Format( "RACE MESSAGE: A war invitation has been sent to the {0} race!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: A war invitation has been sent by the {0} race!", this.Name ) );
  }
 }

 public void RemoveWarDeclaration( PlayerRace race )
 {
  if ( m_WarDeclarations.Contains( race ) )
  {
   m_WarDeclarations.Remove( race );

   race.WarInvitations.Remove( this );

   SendToAll( String.Format( "RACE MESSAGE: The war invitation against the {0} race was canceled!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: The war invitation sent by the {0} race was canceled!", this.Name ) );
  }
 }

 public void AcceptWarInvitation( PlayerRace race )
 {
  if ( m_WarInvitations.Contains( race ) && !IsEnemy( race ) )
  {
   m_WarInvitations.Remove( race );

   race.WarDeclarations.Remove( this );

   AddEnemy( race );

   race.AddEnemy( this );
  }
 }

 public void DeclineWarInvitation( PlayerRace race )
 {
  if ( m_WarInvitations.Contains( race ) )
  {
   m_WarInvitations.Remove( race );

   race.WarDeclarations.Remove( this );

   SendToAll( String.Format( "RACE MESSAGE: The war invitation from the {0} race was declined!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: The war invitation against the {0} race was declined!", this.Name ) );
  }
 }

 public void AddAllyDeclaration( PlayerRace race )
 {
  if ( !m_AllyDeclarations.Contains( race ) )
  {
   m_AllyDeclarations.Add( race );

   race.AllyInvitations.Add( this );

   SendToAll( String.Format( "RACE MESSAGE: An ally invitation has been sent to the {0} race!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: An ally invitation has been sent by the {0} race!", this.Name ) );
    }
 }

 public void RemoveAllyDeclaration( PlayerRace race )
 {
  if ( m_AllyDeclarations.Contains( race ) )
  {
   m_AllyDeclarations.Remove( race );

   race.AllyInvitations.Remove( this );

   SendToAll( String.Format( "RACE MESSAGE: The ally invitation with the {0} race was canceled!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: The ally invitation sent by the {0} race was canceled!", this.Name ) );
  }
 }

 public void AcceptAllyInvitation( PlayerRace race )
 {
  if ( m_AllyInvitations.Contains( race ) && !IsAlly( race ) )
  {
   m_AllyInvitations.Remove( race );

   race.RemoveAllyDeclaration( this );

   AddAlly( race );

   race.AddAlly( this );
  }
 }

 public void DeclineAllyInvitation( PlayerRace race )
 {
  m_AllyInvitations.Remove( race );

  race.AllyDeclarations.Remove( this );

  SendToAll( String.Format( "RACE MESSAGE: The ally invitation from the {0} race was declined!", race.Name ) );

  race.SendToAll( String.Format( "RACE MESSAGE: The ally invitation with the {0} race was declined!", this.Name ) );
 }

 public void DeclareNeutralRelations( PlayerRace race )
 {
  if ( IsEnemy( race ) )
  {
   RemoveEnemy( race );
   race.RemoveEnemy( this );
  }
  else if ( IsAlly( race ) )
  {
   RemoveAlly( race );
   race.RemoveAlly( this );
  }
 }
 #endregion

 #region Election
 public bool CanCampaign( Mobile m )
 {
  return ( m_State == ElectionState.Campaign && m_Candidates.Count < MaxCandidates && !IsCandidate( m ) );
 }

 public bool CanVote( Mobile voter )
 {
  return ( m_State == ElectionState.Election && !m_Voted.Contains( voter ) );
 }

 public CandidateInfo GetCandidateInfo( Mobile m )
 {
  foreach( CandidateInfo info in m_Candidates )
  {
   if ( info.Mobile == m )
    return info;
  }
  return null;
 }

 public bool IsCandidate( Mobile from )
 {
  foreach( CandidateInfo info in m_Candidates )
  {
   if ( info.Mobile == from )
    return true;
  }
  return false;
 }

 public void AddCandidate( Mobile m )
 {
  CandidateInfo info = new CandidateInfo( m );

  m_Candidates.Add( info );

  m.SendMessage( "You are now running for race leadership." );
 }
 
 public void Vote( Mobile voter, Mobile candidate )
 {
  if ( !CanVote( voter ) )
  {
   voter.SendMessage( "You have already voted." );
  }
  else if ( !IsCandidate( candidate ) )
  {
   voter.SendMessage( "That person is not a candidate" );
  }
  else
  {
   CandidateInfo info = GetCandidateInfo( candidate );

   info.Votes++;

   m_Voted.Add( voter );

   voter.SendMessage( "You have voted for {0}", candidate.Name );
  }
 }

 public void BeginPendingElection()
 {
  SendToAll( "A new election is pending." );
 
  m_State = ElectionState.Pending;

  if ( m_ElectionTimer != null && m_ElectionTimer.Running )
   m_ElectionTimer.Stop();

  m_ElectionTimer = new ElectionPendingTimer( this );

  m_ElectionTimer.Start();
 }
 
 public void BeginCampaign()
 {
  m_State = ElectionState.Campaign;

  if ( m_ElectionTimer != null && m_ElectionTimer.Running )
   m_ElectionTimer.Stop();

  m_ElectionTimer = new CampaignTimer( this );

  m_ElectionTimer.Start();

  SendToAll( "Campaigning for race leadership has begun." );
 }

 public void EndCampaign()
 {
  SendToAll( "Campaigning for race leadership has ended." );

  if ( m_Candidates.Count <= 0 )
  {
   SendToAll( "Nobody ran for race leadership." );

   BeginPendingElection();
  }
  else if ( m_Candidates.Count == 1 )
  {
   CandidateInfo info = (CandidateInfo)m_Candidates[0];

   m_Leader = info.Mobile;

   SendToAll( "Only one person entered in the election. They win the election by default." );

   m_Candidates.Clear();

   BeginPendingElection();
  }
  else
  {
   BeginElection();
  }
 }

 public void BeginElection()
 {
  m_State = ElectionState.Election;

  if ( m_ElectionTimer != null && m_ElectionTimer.Running )
   m_ElectionTimer.Stop();

  m_ElectionTimer = new VotingTimer( this );

  m_ElectionTimer.Start();
 
  SendToAll( "Voting for race leadership has now begun." );
 }

 public void EndElection()
 {
  SendToAll( "The results are for the election are in." );

  m_Voted.Clear();
 
  Mobile highest = null;
  int votes = 0;

  foreach( CandidateInfo info in m_Candidates )
  {
   if ( info.Votes > votes )
   {
    highest = info.Mobile;
    votes = info.Votes;
   }
  }

  m_Candidates.Clear();


  if ( highest != null )
  {
   if ( highest == m_Leader )
   {
    SendToAll( String.Format( "{0} was re-elected as the race leader.", Leader.Name ) );
   }
   else
   {
    SendToAll( String.Format( "{0} was elected as the new race leader.", highest.Name ) );

    m_Leader = highest;
   }
  }

  BeginPendingElection();
 }
 #endregion

 public void SendToAll( string message )
 {
  foreach( Mobile m in Members )
  {
   if ( m != null )
    m.SendMessage( message );
  }
 }

 public void CreateControlStone()
 {
  m_Stone = new RaceControlStone( this );
 }

 public override void Delete()
 {
 }

 public override void OnDelete()
 {
 }

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

  writer.Write( (int)0 );
  writer.Write( m_Candidates.Count );

  foreach( CandidateInfo info in m_Candidates )
  {
   info.Serialize( writer );
  }

  writer.WriteItemList( m_WarInvitations, true );
  writer.WriteItemList( m_WarDeclarations, true );
  writer.WriteItemList( m_AllyInvitations, true );
  writer.WriteItemList( m_AllyDeclarations, true );
  writer.WriteItemList( m_Classes, true );
  writer.WriteItemList( m_Allies, true );
  writer.WriteItemList( m_Enemies, true );
  writer.WriteMobileList( m_Voted, true );
  writer.Write( m_Leader );
  writer.Write( m_Message );
  writer.Write( (int)m_State );
  writer.Write( m_Stone );
 }

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

  int version = reader.ReadInt();

  int length = reader.ReadInt();

  for( int i = 0; i < length; ++i )
  {
   CandidateInfo info = new CandidateInfo( reader );

   m_Candidates.Add( info );
  }
  m_WarInvitations = reader.ReadItemList();
  m_WarDeclarations = reader.ReadItemList();
  m_AllyInvitations = reader.ReadItemList();
  m_AllyDeclarations = reader.ReadItemList();
  m_Classes = reader.ReadItemList();
  m_Allies = reader.ReadItemList();
  m_Enemies = reader.ReadItemList();
  m_Voted = reader.ReadMobileList();
  m_Leader = reader.ReadMobile();
  m_Message = reader.ReadString();
  m_State = (ElectionState)reader.ReadInt();
  m_Stone = reader.ReadItem() as RaceControlStone;

  if ( m_State == ElectionState.Pending )
   BeginPendingElection();
  else if ( m_State == ElectionState.Campaign )
   BeginCampaign();
  else
   BeginElection();
 }

 private class ElectionPendingTimer : Timer
 {
  private PlayerRace m_Race;

  public ElectionPendingTimer( PlayerRace race ) : base( race.ElectionPendingPeriod )
  {
   m_Race = race;
  }

  protected override void OnTick()
  {
   m_Race.BeginCampaign();
  }
 }

 private class CampaignTimer : Timer
 {
  private PlayerRace m_Race;

  public CampaignTimer( PlayerRace race ) : base( race.CampaignPeriod )
  {
   m_Race = race;
  }

  protected override void OnTick()
  {
   m_Race.EndCampaign();
  }
 }

 private class VotingTimer : Timer
 {
  private PlayerRace m_Race;

  public VotingTimer( PlayerRace race ) : base( race.ElectionPeriod )
  {
   m_Race = race;
  }

  protected override void OnTick()
  {
   m_Race.EndElection();
  }
 }
}
}


moi je penser mettre une ligne differente pour chaque races humanrace.cs elfrace.cs ext avec le numero adequoite

slade15 - April 25, 2004 10:41 AM (GMT)
donc si j'ai bien compris mtn tu ajoute a ce scripte

private int m_ImageID;

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

le serial
writer.Write( (int) m_ImageID);


le deSerial
m_ImageID= reader.ReadInt();


et mtn dans racemenu.cs

tu peut faire AddImage( X, Y, entry.ImageID); //je suis pas sur des parametre du AddIMage



zedar - April 25, 2004 10:59 AM (GMT)
ok merci je vais voir si sa marche

zedar - April 25, 2004 12:50 PM (GMT)
bon sa ma pri la tete j ai cree un image qui represente toutes les races a la foi est elle change pas quand on appuy sur le boutton voila ;)

Didi - April 25, 2004 12:57 PM (GMT)
[CommandProperty( AccessLevel.GameMaster )] est inutile puisqu'on pourra jamais faire un .props la dessus ^^

Donc après avoir fait ce que slade à dit qui est tout vrai, tu doit l'.initialiser dans toutes tes races. comem ton human race, tu ajoutera sa:

là ou il y a :
CODE
public HumanRace() : base()
{
 Name = "Humain";
}

Tu inscrira
CODE
public HumanRace() : base()
{
 Name = "Humain";
 ImageID = 132;
}


Et pour ton image
CODE
this.AddImage(106, 157, entry.ImageID);

slade15 - April 25, 2004 02:09 PM (GMT)
oui juste j'ai oublié de dire d'initier la variable

zedar - April 25, 2004 06:36 PM (GMT)
Error:scripts\custom\RaceSystem\Races\playerRace.cs Cs0116: <line10,column 1> a namesspace does not directly contain members such as fields or methods




Error:scripts\custom\RaceSystem\Races\playerRace.cs : Cs1518: <line12,column 8> Expected class, delegate, enum, interface, or struct


tu fait comment pour initialiser la varible stp

Didi - April 25, 2004 08:32 PM (GMT)
je lai écrit :P

CODE
public HumanRace() : base()
{
Name = "Humain";
ImageID = 132;
}

Tu rajotue le meme imageID a toutes tes races en changeant le chiffre.

Pour les erreurs ... faudrait que tu recopie ton playerrace actuel

zedar - April 26, 2004 11:26 AM (GMT)
playerrace.cs


CODE
using System;
using System.Collections;
using Server;
using Server.Mobiles;
using Server.Gumps;
using Server.Engines.Classes;

namespace Server.Engines.Races
{

private int m_ImageID;

public int ImageID
{
get{ return m_ImageID;}
set{ m_ImageID= value;}
}

le serial
writer.Write( (int) m_ImageID);


le deSerial
m_ImageID= reader.ReadInt();

public enum RaceRelation
{
 Enemy = 0,
 Ally = 1,
 Neutral = 2
}

public enum ElectionState
{
 Pending,
 Campaign,
 Election
}

public class CandidateInfo
{
 private Mobile m_Mobile;
 private int m_Votes;

 public Mobile Mobile{ get{ return m_Mobile; } }

 public int Votes
 {
  get{ return m_Votes; }
  set{ m_Votes = value; }
 }

 public CandidateInfo( Mobile m )
 {
  m_Mobile = m;
  m_Votes = 0;
 }

 public CandidateInfo( GenericReader reader )
 {
  int version = reader.ReadInt();

  m_Mobile = reader.ReadMobile();
  m_Votes = reader.ReadInt();
 }

 public void Serialize( GenericWriter writer )
 {
  writer.Write( (int)0 );

  writer.Write( m_Mobile );
  writer.Write( m_Votes );
 }
}

public abstract class PlayerRace : BaseEntry
{
 public const int MaxCandidates = 5;
 
 public virtual TimeSpan ElectionPendingPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }
 public virtual TimeSpan CampaignPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }
 public virtual TimeSpan ElectionPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }

 public abstract string Title{ get; }

 public virtual int MaleBodyMod{ get{ return 0; } }
 public virtual int FemaleBodyMod{ get{ return 0; } }
 
 public virtual int Strength{ get{ return 10; } }
 public virtual int Intelligence{ get{ return 10; } }
 public virtual int Dexterity{ get{ return 10; } }

 public virtual Point3D StoneLocation{ get{ return new Point3D( 1475,1645, 20 ); } }
 public virtual Map StoneMap{ get{ return Map.Felucca; } }

 private Mobile m_Leader;
       
 private string m_Message;
 
 private ElectionState m_State;

 private ArrayList m_Classes = new ArrayList();
 
 private ArrayList m_Allies = new ArrayList();
 private ArrayList m_Enemies = new ArrayList();
 private ArrayList m_WarInvitations = new ArrayList();
 private ArrayList m_WarDeclarations = new ArrayList();
 private ArrayList m_AllyInvitations = new ArrayList();
 private ArrayList m_AllyDeclarations = new ArrayList();
 private ArrayList m_Candidates = new ArrayList();
 private ArrayList m_Voted = new ArrayList();

 private RaceControlStone m_Stone;

 private Timer m_ElectionTimer;

 public ArrayList Classes
 {
  get{ return m_Classes; }
  set{ m_Classes = value; }
 }

 public ArrayList Allies
 {
  get{ return m_Allies; }
 }

 public ArrayList Enemies
 {
  get{ return m_Enemies; }
 }

 public ArrayList WarInvitations
 {
  get{ return m_WarInvitations; }
 }

 public ArrayList WarDeclarations
 {
  get{ return m_WarDeclarations; }
 }

 public ArrayList AllyInvitations
 {
  get{ return m_AllyInvitations; }
 }

 public ArrayList AllyDeclarations
 {
  get{ return m_AllyDeclarations; }
 }

 public ArrayList Candidates
 {
  get{ return m_Candidates; }
  set{ m_Candidates = value; }
 }

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

 [CommandProperty( AccessLevel.GameMaster )]
 public string Message
 {
  get{ return m_Message; }
  set{ m_Message = value; }
 }

 public ElectionState State
 {
  get{ return m_State; }
  set{ m_State = value; }
 }

 public PlayerRace() : base()
 {
  BeginPendingElection();
 }

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

 public override void OnSelection( dovPlayerMobile from )
 {
  from.Title = Title;
  from.RawStr = Strength;
  from.RawDex = Dexterity;
  from.RawInt = Intelligence;
  from.BodyMod = from.Female ? FemaleBodyMod : MaleBodyMod;

  from.Location = new Point3D( this.StoneLocation.X, this.StoneLocation.Y + 1, this.StoneLocation.Z );
  from.Map = StoneMap;

  if ( ClassSystem.Enabled )
  {
   from.CloseGump( typeof( ClassMenu ) );
   from.SendGump( new ClassMenu( from ) );
  }

  base.OnSelection( from );
 }

 public bool IsLeader( Mobile from )
 {
  return ( m_Leader != null && m_Leader == from );
 }

 #region Race Relations
 public virtual bool IsEnemy( PlayerRace race )
 {
  return m_Enemies.Contains( race );
 }

 public virtual bool IsAlly( PlayerRace race )
 {
  return m_Allies.Contains( race );
 }

 public virtual RaceRelation GetRelation( PlayerRace race )
 {
  if ( m_Enemies.Contains( race ) )
   return RaceRelation.Enemy;
  else if ( m_Allies.Contains( race ) )
   return RaceRelation.Ally;
  else
   return RaceRelation.Neutral;
 }

 public void AddEnemy( PlayerRace race )
 {
  if ( !m_Enemies.Contains( race ) )
  {
   m_Enemies.Add( race );

   SendToAll( String.Format( "RACE MESSAGE: A state of war has been declared with the {0} race!", race.Name ) );

   foreach( Mobile m in Members )
    m.Delta( MobileDelta.Noto );
  }
 }

 public void RemoveEnemy( PlayerRace race )
 {
  if ( m_Enemies.Contains( race ) )
  {
   m_Enemies.Remove( race );

   SendToAll( String.Format( "RACE MESSAGE: The race is no longer at war with the {0} race.", race.Name ) );

   foreach( Mobile m in Members )
    m.Delta( MobileDelta.Noto );
  }
 }

 public void RemoveAlly( PlayerRace race )
 {
  if ( m_Allies.Contains( race ) )
  {
   m_Allies.Remove( race );

   SendToAll( String.Format( "RACE MESSAGE: The race is no longer allied with the {0} race.", race.Name ) );

   foreach( Mobile m in Members )
    m.Delta( MobileDelta.Noto );
  }
 }

 public void AddAlly( PlayerRace race )
 {
  if ( !m_Allies.Contains( race ) )
  {
   m_Allies.Add( race );

   SendToAll( String.Format( "RACE MESSAGE: A state of allied relations has been declared with the {0} race!", race.Name ) );

   foreach( Mobile m in Members )
    m.Delta( MobileDelta.Noto );
  }
 }

 public void AddWarDeclaration( PlayerRace race )
 {
  if ( !m_WarDeclarations.Contains( race ) )
  {
   m_WarDeclarations.Add( race );

   race.WarInvitations.Add( this );

   SendToAll( String.Format( "RACE MESSAGE: A war invitation has been sent to the {0} race!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: A war invitation has been sent by the {0} race!", this.Name ) );
  }
 }

 public void RemoveWarDeclaration( PlayerRace race )
 {
  if ( m_WarDeclarations.Contains( race ) )
  {
   m_WarDeclarations.Remove( race );

   race.WarInvitations.Remove( this );

   SendToAll( String.Format( "RACE MESSAGE: The war invitation against the {0} race was canceled!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: The war invitation sent by the {0} race was canceled!", this.Name ) );
  }
 }

 public void AcceptWarInvitation( PlayerRace race )
 {
  if ( m_WarInvitations.Contains( race ) && !IsEnemy( race ) )
  {
   m_WarInvitations.Remove( race );

   race.WarDeclarations.Remove( this );

   AddEnemy( race );

   race.AddEnemy( this );
  }
 }

 public void DeclineWarInvitation( PlayerRace race )
 {
  if ( m_WarInvitations.Contains( race ) )
  {
   m_WarInvitations.Remove( race );

   race.WarDeclarations.Remove( this );

   SendToAll( String.Format( "RACE MESSAGE: The war invitation from the {0} race was declined!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: The war invitation against the {0} race was declined!", this.Name ) );
  }
 }

 public void AddAllyDeclaration( PlayerRace race )
 {
  if ( !m_AllyDeclarations.Contains( race ) )
  {
   m_AllyDeclarations.Add( race );

   race.AllyInvitations.Add( this );

   SendToAll( String.Format( "RACE MESSAGE: An ally invitation has been sent to the {0} race!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: An ally invitation has been sent by the {0} race!", this.Name ) );
    }
 }

 public void RemoveAllyDeclaration( PlayerRace race )
 {
  if ( m_AllyDeclarations.Contains( race ) )
  {
   m_AllyDeclarations.Remove( race );

   race.AllyInvitations.Remove( this );

   SendToAll( String.Format( "RACE MESSAGE: The ally invitation with the {0} race was canceled!", race.Name ) );

   race.SendToAll( String.Format( "RACE MESSAGE: The ally invitation sent by the {0} race was canceled!", this.Name ) );
  }
 }

 public void AcceptAllyInvitation( PlayerRace race )
 {
  if ( m_AllyInvitations.Contains( race ) && !IsAlly( race ) )
  {
   m_AllyInvitations.Remove( race );

   race.RemoveAllyDeclaration( this );

   AddAlly( race );

   race.AddAlly( this );
  }
 }

 public void DeclineAllyInvitation( PlayerRace race )
 {
  m_AllyInvitations.Remove( race );

  race.AllyDeclarations.Remove( this );

  SendToAll( String.Format( "RACE MESSAGE: The ally invitation from the {0} race was declined!", race.Name ) );

  race.SendToAll( String.Format( "RACE MESSAGE: The ally invitation with the {0} race was declined!", this.Name ) );
 }

 public void DeclareNeutralRelations( PlayerRace race )
 {
  if ( IsEnemy( race ) )
  {
   RemoveEnemy( race );
   race.RemoveEnemy( this );
  }
  else if ( IsAlly( race ) )
  {
   RemoveAlly( race );
   race.RemoveAlly( this );
  }
 }
 #endregion

 #region Election
 public bool CanCampaign( Mobile m )
 {
  return ( m_State == ElectionState.Campaign && m_Candidates.Count < MaxCandidates && !IsCandidate( m ) );
 }

 public bool CanVote( Mobile voter )
 {
  return ( m_State == ElectionState.Election && !m_Voted.Contains( voter ) );
 }

 public CandidateInfo GetCandidateInfo( Mobile m )
 {
  foreach( CandidateInfo info in m_Candidates )
  {
   if ( info.Mobile == m )
    return info;
  }
  return null;
 }

 public bool IsCandidate( Mobile from )
 {
  foreach( CandidateInfo info in m_Candidates )
  {
   if ( info.Mobile == from )
    return true;
  }
  return false;
 }

 public void AddCandidate( Mobile m )
 {
  CandidateInfo info = new CandidateInfo( m );

  m_Candidates.Add( info );

  m.SendMessage( "You are now running for race leadership." );
 }
 
 public void Vote( Mobile voter, Mobile candidate )
 {
  if ( !CanVote( voter ) )
  {
   voter.SendMessage( "You have already voted." );
  }
  else if ( !IsCandidate( candidate ) )
  {
   voter.SendMessage( "That person is not a candidate" );
  }
  else
  {
   CandidateInfo info = GetCandidateInfo( candidate );

   info.Votes++;

   m_Voted.Add( voter );

   voter.SendMessage( "You have voted for {0}", candidate.Name );
  }
 }

 public void BeginPendingElection()
 {
  SendToAll( "A new election is pending." );
 
  m_State = ElectionState.Pending;

  if ( m_ElectionTimer != null && m_ElectionTimer.Running )
   m_ElectionTimer.Stop();

  m_ElectionTimer = new ElectionPendingTimer( this );

  m_ElectionTimer.Start();
 }
 
 public void BeginCampaign()
 {
  m_State = ElectionState.Campaign;

  if ( m_ElectionTimer != null && m_ElectionTimer.Running )
   m_ElectionTimer.Stop();

  m_ElectionTimer = new CampaignTimer( this );

  m_ElectionTimer.Start();

  SendToAll( "Campaigning for race leadership has begun." );
 }

 public void EndCampaign()
 {
  SendToAll( "Campaigning for race leadership has ended." );

  if ( m_Candidates.Count <= 0 )
  {
   SendToAll( "Nobody ran for race leadership." );

   BeginPendingElection();
  }
  else if ( m_Candidates.Count == 1 )
  {
   CandidateInfo info = (CandidateInfo)m_Candidates[0];

   m_Leader = info.Mobile;

   SendToAll( "Only one person entered in the election. They win the election by default." );

   m_Candidates.Clear();

   BeginPendingElection();
  }
  else
  {
   BeginElection();
  }
 }

 public void BeginElection()
 {
  m_State = ElectionState.Election;

  if ( m_ElectionTimer != null && m_ElectionTimer.Running )
   m_ElectionTimer.Stop();

  m_ElectionTimer = new VotingTimer( this );

  m_ElectionTimer.Start();
 
  SendToAll( "Voting for race leadership has now begun." );
 }

 public void EndElection()
 {
  SendToAll( "The results are for the election are in." );

  m_Voted.Clear();
 
  Mobile highest = null;
  int votes = 0;

  foreach( CandidateInfo info in m_Candidates )
  {
   if ( info.Votes > votes )
   {
    highest = info.Mobile;
    votes = info.Votes;
   }
  }

  m_Candidates.Clear();


  if ( highest != null )
  {
   if ( highest == m_Leader )
   {
    SendToAll( String.Format( "{0} was re-elected as the race leader.", Leader.Name ) );
   }
   else
   {
    SendToAll( String.Format( "{0} was elected as the new race leader.", highest.Name ) );

    m_Leader = highest;
   }
  }

  BeginPendingElection();
 }
 #endregion

 public void SendToAll( string message )
 {
  foreach( Mobile m in Members )
  {
   if ( m != null )
    m.SendMessage( message );
  }
 }

 public void CreateControlStone()
 {
  m_Stone = new RaceControlStone( this );
 }

 public override void Delete()
 {
 }

 public override void OnDelete()
 {
 }

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

  writer.Write( (int)0 );
  writer.Write( m_Candidates.Count );

  foreach( CandidateInfo info in m_Candidates )
  {
   info.Serialize( writer );
  }

  writer.WriteItemList( m_WarInvitations, true );
  writer.WriteItemList( m_WarDeclarations, true );
  writer.WriteItemList( m_AllyInvitations, true );
  writer.WriteItemList( m_AllyDeclarations, true );
  writer.WriteItemList( m_Classes, true );
  writer.WriteItemList( m_Allies, true );
  writer.WriteItemList( m_Enemies, true );
  writer.WriteMobileList( m_Voted, true );
  writer.Write( m_Leader );
  writer.Write( m_Message );
  writer.Write( (int)m_State );
  writer.Write( m_Stone );
 }

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

  int version = reader.ReadInt();

  int length = reader.ReadInt();

  for( int i = 0; i < length; ++i )
  {
   CandidateInfo info = new CandidateInfo( reader );

   m_Candidates.Add( info );
  }
  m_WarInvitations = reader.ReadItemList();
  m_WarDeclarations = reader.ReadItemList();
  m_AllyInvitations = reader.ReadItemList();
  m_AllyDeclarations = reader.ReadItemList();
  m_Classes = reader.ReadItemList();
  m_Allies = reader.ReadItemList();
  m_Enemies = reader.ReadItemList();
  m_Voted = reader.ReadMobileList();
  m_Leader = reader.ReadMobile();
  m_Message = reader.ReadString();
  m_State = (ElectionState)reader.ReadInt();
  m_Stone = reader.ReadItem() as RaceControlStone;

  if ( m_State == ElectionState.Pending )
   BeginPendingElection();
  else if ( m_State == ElectionState.Campaign )
   BeginCampaign();
  else
   BeginElection();
 }

 private class ElectionPendingTimer : Timer
 {
  private PlayerRace m_Race;

  public ElectionPendingTimer( PlayerRace race ) : base( race.ElectionPendingPeriod )
  {
   m_Race = race;
  }

  protected override void OnTick()
  {
   m_Race.BeginCampaign();
  }
 }

 private class CampaignTimer : Timer
 {
  private PlayerRace m_Race;

  public CampaignTimer( PlayerRace race ) : base( race.CampaignPeriod )
  {
   m_Race = race;
  }

  protected override void OnTick()
  {
   m_Race.EndCampaign();
  }
 }

 private class VotingTimer : Timer
 {
  private PlayerRace m_Race;

  public VotingTimer( PlayerRace race ) : base( race.ElectionPeriod )
  {
   m_Race = race;
  }

  protected override void OnTick()
  {
   m_Race.EndElection();
  }
 }
}
}





slade15 - April 26, 2004 11:40 AM (GMT)
tu peut pas ajouter a ce endroit la


private int m_ImageID;

public int ImageID
{
get{ return m_ImageID;}
set{ m_ImageID= value;}
}

le serial
writer.Write( (int) m_ImageID);


le deSerial
m_ImageID= reader.ReadInt();


slade15 - April 26, 2004 11:49 AM (GMT)
voici la version modifie (non testé)

CODE

using System;
using System.Collections;
using Server;
using Server.Mobiles;
using Server.Gumps;
using Server.Engines.Classes;

namespace Server.Engines.Races
{

public enum RaceRelation
{
Enemy = 0,
Ally = 1,
Neutral = 2
}

public enum ElectionState
{
Pending,
Campaign,
Election
}

public class CandidateInfo
{
private Mobile m_Mobile;
private int m_Votes;

public Mobile Mobile{ get{ return m_Mobile; } }

public int Votes
{
 get{ return m_Votes; }
 set{ m_Votes = value; }
}

public CandidateInfo( Mobile m )
{
 m_Mobile = m;
 m_Votes = 0;
}

public CandidateInfo( GenericReader reader )
{
 int version = reader.ReadInt();

 m_Mobile = reader.ReadMobile();
 m_Votes = reader.ReadInt();
}

public void Serialize( GenericWriter writer )
{
 writer.Write( (int)0 );

 writer.Write( m_Mobile );
 writer.Write( m_Votes );
}
}

public abstract class PlayerRace : BaseEntry
{
public const int MaxCandidates = 5;

public virtual TimeSpan ElectionPendingPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }
public virtual TimeSpan CampaignPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }
public virtual TimeSpan ElectionPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }

public abstract string Title{ get; }

public virtual int MaleBodyMod{ get{ return 0; } }
public virtual int FemaleBodyMod{ get{ return 0; } }

public virtual int Strength{ get{ return 10; } }
public virtual int Intelligence{ get{ return 10; } }
public virtual int Dexterity{ get{ return 10; } }

public virtual Point3D StoneLocation{ get{ return new Point3D( 1475,1645, 20 ); } }
public virtual Map StoneMap{ get{ return Map.Felucca; } }

private Mobile m_Leader;
     
private string m_Message;

private ElectionState m_State;

private ArrayList m_Classes = new ArrayList();

private ArrayList m_Allies = new ArrayList();
private ArrayList m_Enemies = new ArrayList();
private ArrayList m_WarInvitations = new ArrayList();
private ArrayList m_WarDeclarations = new ArrayList();
private ArrayList m_AllyInvitations = new ArrayList();
private ArrayList m_AllyDeclarations = new ArrayList();
private ArrayList m_Candidates = new ArrayList();
private ArrayList m_Voted = new ArrayList();

private RaceControlStone m_Stone;

private Timer m_ElectionTimer;
/////////////////////////////////////////
private int m_ImageID;

public int ImageID
{
get{ return m_ImageID;}
set{ m_ImageID= value;}
}
//////////////////////////////////////////


public ArrayList Classes
{
 get{ return m_Classes; }
 set{ m_Classes = value; }
}

public ArrayList Allies
{
 get{ return m_Allies; }
}

public ArrayList Enemies
{
 get{ return m_Enemies; }
}

public ArrayList WarInvitations
{
 get{ return m_WarInvitations; }
}

public ArrayList WarDeclarations
{
 get{ return m_WarDeclarations; }
}

public ArrayList AllyInvitations
{
 get{ return m_AllyInvitations; }
}

public ArrayList AllyDeclarations
{
 get{ return m_AllyDeclarations; }
}

public ArrayList Candidates
{
 get{ return m_Candidates; }
 set{ m_Candidates = value; }
}

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

[CommandProperty( AccessLevel.GameMaster )]
public string Message
{
 get{ return m_Message; }
 set{ m_Message = value; }
}

public ElectionState State
{
 get{ return m_State; }
 set{ m_State = value; }
}

public PlayerRace() : base()
{
 BeginPendingElection();
}

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

public override void OnSelection( dovPlayerMobile from )
{
 from.Title = Title;
 from.RawStr = Strength;
 from.RawDex = Dexterity;
 from.RawInt = Intelligence;
 from.BodyMod = from.Female ? FemaleBodyMod : MaleBodyMod;

 from.Location = new Point3D( this.StoneLocation.X, this.StoneLocation.Y + 1, this.StoneLocation.Z );
 from.Map = StoneMap;

 if ( ClassSystem.Enabled )
 {
  from.CloseGump( typeof( ClassMenu ) );
  from.SendGump( new ClassMenu( from ) );
 }

 base.OnSelection( from );
}

public bool IsLeader( Mobile from )
{
 return ( m_Leader != null && m_Leader == from );
}

#region Race Relations
public virtual bool IsEnemy( PlayerRace race )
{
 return m_Enemies.Contains( race );
}

public virtual bool IsAlly( PlayerRace race )
{
 return m_Allies.Contains( race );
}

public virtual RaceRelation GetRelation( PlayerRace race )
{
 if ( m_Enemies.Contains( race ) )
  return RaceRelation.Enemy;
 else if ( m_Allies.Contains( race ) )
  return RaceRelation.Ally;
 else
  return RaceRelation.Neutral;
}

public void AddEnemy( PlayerRace race )
{
 if ( !m_Enemies.Contains( race ) )
 {
  m_Enemies.Add( race );

  SendToAll( String.Format( "RACE MESSAGE: A state of war has been declared with the {0} race!", race.Name ) );

  foreach( Mobile m in Members )
   m.Delta( MobileDelta.Noto );
 }
}

public void RemoveEnemy( PlayerRace race )
{
 if ( m_Enemies.Contains( race ) )
 {
  m_Enemies.Remove( race );

  SendToAll( String.Format( "RACE MESSAGE: The race is no longer at war with the {0} race.", race.Name ) );

  foreach( Mobile m in Members )
   m.Delta( MobileDelta.Noto );
 }
}

public void RemoveAlly( PlayerRace race )
{
 if ( m_Allies.Contains( race ) )
 {
  m_Allies.Remove( race );

  SendToAll( String.Format( "RACE MESSAGE: The race is no longer allied with the {0} race.", race.Name ) );

  foreach( Mobile m in Members )
   m.Delta( MobileDelta.Noto );
 }
}

public void AddAlly( PlayerRace race )
{
 if ( !m_Allies.Contains( race ) )
 {
  m_Allies.Add( race );

  SendToAll( String.Format( "RACE MESSAGE: A state of allied relations has been declared with the {0} race!", race.Name ) );

  foreach( Mobile m in Members )
   m.Delta( MobileDelta.Noto );
 }
}

public void AddWarDeclaration( PlayerRace race )
{
 if ( !m_WarDeclarations.Contains( race ) )
 {
  m_WarDeclarations.Add( race );

  race.WarInvitations.Add( this );

  SendToAll( String.Format( "RACE MESSAGE: A war invitation has been sent to the {0} race!", race.Name ) );

  race.SendToAll( String.Format( "RACE MESSAGE: A war invitation has been sent by the {0} race!", this.Name ) );
 }
}

public void RemoveWarDeclaration( PlayerRace race )
{
 if ( m_WarDeclarations.Contains( race ) )
 {
  m_WarDeclarations.Remove( race );

  race.WarInvitations.Remove( this );

  SendToAll( String.Format( "RACE MESSAGE: The war invitation against the {0} race was canceled!", race.Name ) );

  race.SendToAll( String.Format( "RACE MESSAGE: The war invitation sent by the {0} race was canceled!", this.Name ) );
 }
}

public void AcceptWarInvitation( PlayerRace race )
{
 if ( m_WarInvitations.Contains( race ) && !IsEnemy( race ) )
 {
  m_WarInvitations.Remove( race );

  race.WarDeclarations.Remove( this );

  AddEnemy( race );

  race.AddEnemy( this );
 }
}

public void DeclineWarInvitation( PlayerRace race )
{
 if ( m_WarInvitations.Contains( race ) )
 {
  m_WarInvitations.Remove( race );

  race.WarDeclarations.Remove( this );

  SendToAll( String.Format( "RACE MESSAGE: The war invitation from the {0} race was declined!", race.Name ) );

  race.SendToAll( String.Format( "RACE MESSAGE: The war invitation against the {0} race was declined!", this.Name ) );
 }
}

public void AddAllyDeclaration( PlayerRace race )
{
 if ( !m_AllyDeclarations.Contains( race ) )
 {
  m_AllyDeclarations.Add( race );

  race.AllyInvitations.Add( this );

  SendToAll( String.Format( "RACE MESSAGE: An ally invitation has been sent to the {0} race!", race.Name ) );

  race.SendToAll( String.Format( "RACE MESSAGE: An ally invitation has been sent by the {0} race!", this.Name ) );
   }
}

public void RemoveAllyDeclaration( PlayerRace race )
{
 if ( m_AllyDeclarations.Contains( race ) )
 {
  m_AllyDeclarations.Remove( race );

  race.AllyInvitations.Remove( this );

  SendToAll( String.Format( "RACE MESSAGE: The ally invitation with the {0} race was canceled!", race.Name ) );

  race.SendToAll( String.Format( "RACE MESSAGE: The ally invitation sent by the {0} race was canceled!", this.Name ) );
 }
}

public void AcceptAllyInvitation( PlayerRace race )
{
 if ( m_AllyInvitations.Contains( race ) && !IsAlly( race ) )
 {
  m_AllyInvitations.Remove( race );

  race.RemoveAllyDeclaration( this );

  AddAlly( race );

  race.AddAlly( this );
 }
}

public void DeclineAllyInvitation( PlayerRace race )
{
 m_AllyInvitations.Remove( race );

 race.AllyDeclarations.Remove( this );

 SendToAll( String.Format( "RACE MESSAGE: The ally invitation from the {0} race was declined!", race.Name ) );

 race.SendToAll( String.Format( "RACE MESSAGE: The ally invitation with the {0} race was declined!", this.Name ) );
}

public void DeclareNeutralRelations( PlayerRace race )
{
 if ( IsEnemy( race ) )
 {
  RemoveEnemy( race );
  race.RemoveEnemy( this );
 }
 else if ( IsAlly( race ) )
 {
  RemoveAlly( race );
  race.RemoveAlly( this );
 }
}
#endregion

#region Election
public bool CanCampaign( Mobile m )
{
 return ( m_State == ElectionState.Campaign && m_Candidates.Count < MaxCandidates && !IsCandidate( m ) );
}

public bool CanVote( Mobile voter )
{
 return ( m_State == ElectionState.Election && !m_Voted.Contains( voter ) );
}

public CandidateInfo GetCandidateInfo( Mobile m )
{
 foreach( CandidateInfo info in m_Candidates )
 {
  if ( info.Mobile == m )
   return info;
 }
 return null;
}

public bool IsCandidate( Mobile from )
{
 foreach( CandidateInfo info in m_Candidates )
 {
  if ( info.Mobile == from )
   return true;
 }
 return false;
}

public void AddCandidate( Mobile m )
{
 CandidateInfo info = new CandidateInfo( m );

 m_Candidates.Add( info );

 m.SendMessage( "You are now running for race leadership." );
}

public void Vote( Mobile voter, Mobile candidate )
{
 if ( !CanVote( voter ) )
 {
  voter.SendMessage( "You have already voted." );
 }
 else if ( !IsCandidate( candidate ) )
 {
  voter.SendMessage( "That person is not a candidate" );
 }
 else
 {
  CandidateInfo info = GetCandidateInfo( candidate );

  info.Votes++;

  m_Voted.Add( voter );

  voter.SendMessage( "You have voted for {0}", candidate.Name );
 }
}

public void BeginPendingElection()
{
 SendToAll( "A new election is pending." );
 
 m_State = ElectionState.Pending;

 if ( m_ElectionTimer != null && m_ElectionTimer.Running )
  m_ElectionTimer.Stop();

 m_ElectionTimer = new ElectionPendingTimer( this );

 m_ElectionTimer.Start();
}

public void BeginCampaign()
{
 m_State = ElectionState.Campaign;

 if ( m_ElectionTimer != null && m_ElectionTimer.Running )
  m_ElectionTimer.Stop();

 m_ElectionTimer = new CampaignTimer( this );

 m_ElectionTimer.Start();

 SendToAll( "Campaigning for race leadership has begun." );
}

public void EndCampaign()
{
 SendToAll( "Campaigning for race leadership has ended." );

 if ( m_Candidates.Count <= 0 )
 {
  SendToAll( "Nobody ran for race leadership." );

  BeginPendingElection();
 }
 else if ( m_Candidates.Count == 1 )
 {
  CandidateInfo info = (CandidateInfo)m_Candidates[0];

  m_Leader = info.Mobile;

  SendToAll( "Only one person entered in the election. They win the election by default." );

  m_Candidates.Clear();

  BeginPendingElection();
 }
 else
 {
  BeginElection();
 }
}

public void BeginElection()
{
 m_State = ElectionState.Election;

 if ( m_ElectionTimer != null && m_ElectionTimer.Running )
  m_ElectionTimer.Stop();

 m_ElectionTimer = new VotingTimer( this );

 m_ElectionTimer.Start();
 
 SendToAll( "Voting for race leadership has now begun." );
}

public void EndElection()
{
 SendToAll( "The results are for the election are in." );

 m_Voted.Clear();
 
 Mobile highest = null;
 int votes = 0;

 foreach( CandidateInfo info in m_Candidates )
 {
  if ( info.Votes > votes )
  {
   highest = info.Mobile;
   votes = info.Votes;
  }
 }

 m_Candidates.Clear();


 if ( highest != null )
 {
  if ( highest == m_Leader )
  {
   SendToAll( String.Format( "{0} was re-elected as the race leader.", Leader.Name ) );
  }
  else
  {
   SendToAll( String.Format( "{0} was elected as the new race leader.", highest.Name ) );

   m_Leader = highest;
  }
 }

 BeginPendingElection();
}
#endregion

public void SendToAll( string message )
{
 foreach( Mobile m in Members )
 {
  if ( m != null )
   m.SendMessage( message );
 }
}

public void CreateControlStone()
{
 m_Stone = new RaceControlStone( this );
}

public override void Delete()
{
}

public override void OnDelete()
{
}

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

 writer.Write( (int)1 ); //version devient 1
 
 writer.Write( (int) m_ImageID); //// ajoute a la version 1
 
 writer.Write( m_Candidates.Count );

 foreach( CandidateInfo info in m_Candidates )
 {
  info.Serialize( writer );
 }

 writer.WriteItemList( m_WarInvitations, true );
 writer.WriteItemList( m_WarDeclarations, true );
 writer.WriteItemList( m_AllyInvitations, true );
 writer.WriteItemList( m_AllyDeclarations, true );
 writer.WriteItemList( m_Classes, true );
 writer.WriteItemList( m_Allies, true );
 writer.WriteItemList( m_Enemies, true );
 writer.WriteMobileList( m_Voted, true );
 writer.Write( m_Leader );
 writer.Write( m_Message );
 writer.Write( (int)m_State );
 writer.Write( m_Stone );
}

public override void Deserialize( GenericReader reader )
{
 base.Deserialize( reader );
 int version = reader.ReadInt();
 switch ( version )
 {
 case 1:
  {
   m_ImageID= reader.ReadInt();
 goto case 0;
  }
  case 0:
  {  
   int length = reader.ReadInt();

   for( int i = 0; i < length; ++i )
   {
    CandidateInfo info = new CandidateInfo( reader );

    m_Candidates.Add( info );
   }
   m_WarInvitations = reader.ReadItemList();
   m_WarDeclarations = reader.ReadItemList();
   m_AllyInvitations = reader.ReadItemList();
   m_AllyDeclarations = reader.ReadItemList();
   m_Classes = reader.ReadItemList();
   m_Allies = reader.ReadItemList();
   m_Enemies = reader.ReadItemList();
   m_Voted = reader.ReadMobileList();
   m_Leader = reader.ReadMobile();
   m_Message = reader.ReadString();
   m_State = (ElectionState)reader.ReadInt();
   m_Stone = reader.ReadItem() as RaceControlStone;

   if ( m_State == ElectionState.Pending )
     BeginPendingElection();
   else if ( m_State == ElectionState.Campaign )
     BeginCampaign();
   else
     BeginElection();
  }
}

private class ElectionPendingTimer : Timer
{
 private PlayerRace m_Race;

 public ElectionPendingTimer( PlayerRace race ) : base( race.ElectionPendingPeriod )
 {
  m_Race = race;
 }

 protected override void OnTick()
 {
  m_Race.BeginCampaign();
 }
}

private class CampaignTimer : Timer
{
 private PlayerRace m_Race;

 public CampaignTimer( PlayerRace race ) : base( race.CampaignPeriod )
 {
  m_Race = race;
 }

 protected override void OnTick()
 {
  m_Race.EndCampaign();
 }
}

private class VotingTimer : Timer
{
 private PlayerRace m_Race;

 public VotingTimer( PlayerRace race ) : base( race.ElectionPeriod )
 {
  m_Race = race;
 }

 protected override void OnTick()
 {
  m_Race.EndElection();
 }
}
}
}

zedar - April 26, 2004 03:34 PM (GMT)
1 erreur

line 668 column 2

one or more script failed to compile or no script files were found

Didi - April 26, 2004 11:37 PM (GMT)
lerreur c'est ?

zedar - April 26, 2004 11:53 PM (GMT)
la ligne 668 c le dernier }de :

CODE
  if ( m_State == ElectionState.Pending )
    BeginPendingElection();
  else if ( m_State == ElectionState.Campaign )
    BeginCampaign();
  else
    BeginElection();
 }
}




le message d erreur c



Error: Scripts\custom\RaceSystem\PlayerRace.cs: CS1513: <line 668, column 2> } expected
Scripts: one or more script failed to compile or no script files were found .
- press return to exit, or R to try again

slade15 - April 27, 2004 10:49 AM (GMT)
manque un } pour fermer le switch , dsl c ma faute

CODE
 if ( m_State == ElectionState.Pending )
   BeginPendingElection();
 else if ( m_State == ElectionState.Campaign )
   BeginCampaign();
 else
   BeginElection();
 }
 }
}

zedar - April 27, 2004 12:09 PM (GMT)
Error: Scripts\custom\RaceSystem\PlayerRace.cs: CS0163: <line 632, column 2> } Control cannot fall through from one case label <'case 0:'> to another
Scripts: one or more script failed to compile or no script files were found .
- press return to exit, or R to try again
:P

slade15 - April 27, 2004 03:42 PM (GMT)
essaye d'ajouter break;

CODE

 if ( m_State == ElectionState.Pending )
   BeginPendingElection();
 else if ( m_State == ElectionState.Campaign )
   BeginCampaign();
 else
   BeginElection();

   break;
  }
 }
}

zedar - April 27, 2004 09:44 PM (GMT)
bon il il a plus de message d erreur mais quand le gump est lancer j obtien pas la bonne image est sa reste la meme on dirai que la valeur de imageid reste a 0
est ne prend pas les valeurs voulu ......

slade15 - April 28, 2004 08:32 AM (GMT)
tu peut montrer ce qu'est devenu ton raceMenu.cs et humanRace.cs

zedar - April 28, 2004 09:50 AM (GMT)
playerrace.cs

CODE
using System;
using System.Collections;
using Server;
using Server.Mobiles;
using Server.Gumps;
using Server.Engines.Classes;

namespace Server.Engines.Races
{

public enum RaceRelation
{
Enemy = 0,
Ally = 1,
Neutral = 2
}

public enum ElectionState
{
Pending,
Campaign,
Election
}

public class CandidateInfo
{
private Mobile m_Mobile;
private int m_Votes;

public Mobile Mobile{ get{ return m_Mobile; } }

public int Votes
{
get{ return m_Votes; }
set{ m_Votes = value; }
}

public CandidateInfo( Mobile m )
{
m_Mobile = m;
m_Votes = 0;
}

public CandidateInfo( GenericReader reader )
{
int version = reader.ReadInt();

m_Mobile = reader.ReadMobile();
m_Votes = reader.ReadInt();
}

public void Serialize( GenericWriter writer )
{
writer.Write( (int)0 );

writer.Write( m_Mobile );
writer.Write( m_Votes );
}
}

public abstract class PlayerRace : BaseEntry
{
public const int MaxCandidates = 5;

public virtual TimeSpan ElectionPendingPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }
public virtual TimeSpan CampaignPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }
public virtual TimeSpan ElectionPeriod{ get{ return TimeSpan.FromMinutes( 1 ); } }

public abstract string Title{ get; }

public virtual int MaleBodyMod{ get{ return 0; } }
public virtual int FemaleBodyMod{ get{ return 0; } }

public virtual int Strength{ get{ return 10; } }
public virtual int Intelligence{ get{ return 10; } }
public virtual int Dexterity{ get{ return 10; } }

public virtual Point3D StoneLocation{ get{ return new Point3D( 1475,1645, 20 ); } }
public virtual Map StoneMap{ get{ return Map.Felucca; } }

private Mobile m_Leader;
     
private string m_Message;

private ElectionState m_State;

private ArrayList m_Classes = new ArrayList();

private ArrayList m_Allies = new ArrayList();
private ArrayList m_Enemies = new ArrayList();
private ArrayList m_WarInvitations = new ArrayList();
private ArrayList m_WarDeclarations = new ArrayList();
private ArrayList m_AllyInvitations = new ArrayList();
private ArrayList m_AllyDeclarations = new ArrayList();
private ArrayList m_Candidates = new ArrayList();
private ArrayList m_Voted = new ArrayList();

private RaceControlStone m_Stone;

private Timer m_ElectionTimer;
/////////////////////////////////////////
private int m_ImageID;

public int ImageID
{
get{ return m_ImageID;}
set{ m_ImageID= value;}
}
//////////////////////////////////////////


public ArrayList Classes
{
get{ return m_Classes; }
set{ m_Classes = value; }
}

public ArrayList Allies
{
get{ return m_Allies; }
}

public ArrayList Enemies
{
get{ return m_Enemies; }
}

public ArrayList WarInvitations
{
get{ return m_WarInvitations; }
}

public ArrayList WarDeclarations
{
get{ return m_WarDeclarations; }
}

public ArrayList AllyInvitations
{
get{ return m_AllyInvitations; }
}

public ArrayList AllyDeclarations
{
get{ return m_AllyDeclarations; }
}

public ArrayList Candidates
{
get{ return m_Candidates; }
set{ m_Candidates = value; }
}

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

[CommandProperty( AccessLevel.GameMaster )]
public string Message
{
get{ return m_Message; }
set{ m_Message = value; }
}

public ElectionState State
{
get{ return m_State; }
set{ m_State = value; }
}

public PlayerRace() : base()
{
BeginPendingElection();
}

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

public override void OnSelection( dovPlayerMobile from )
{
from.Title = Title;
from.RawStr = Strength;
from.RawDex = Dexterity;
from.RawInt = Intelligence;
from.BodyMod = from.Female ? FemaleBodyMod : MaleBodyMod;

from.Location = new Point3D( this.StoneLocation.X, this.StoneLocation.Y + 1, this.StoneLocation.Z );
from.Map = StoneMap;

if ( ClassSystem.Enabled )
{
 from.CloseGump( typeof( ClassMenu ) );
 from.SendGump( new ClassMenu( from ) );
}

base.OnSelection( from );
}

public bool IsLeader( Mobile from )
{
return ( m_Leader != null && m_Leader == from );
}

#region Race Relations
public virtual bool IsEnemy( PlayerRace race )
{
return m_Enemies.Contains( race );
}

public virtual bool IsAlly( PlayerRace race )
{
return m_Allies.Contains( race );
}

public virtual RaceRelation GetRelation( PlayerRace race )
{
if ( m_Enemies.Contains( race ) )
 return RaceRelation.Enemy;
else if ( m_Allies.Contains( race ) )
 return RaceRelation.Ally;
else
 return RaceRelation.Neutral;
}

public void AddEnemy( PlayerRace race )
{
if ( !m_Enemies.Contains( race ) )
{
 m_Enemies.Add( race );

 SendToAll( String.Format( "RACE MESSAGE: A state of war has been declared with the {0} race!", race.Name ) );

 foreach( Mobile m in Members )
  m.Delta( MobileDelta.Noto );
}
}

public void RemoveEnemy( PlayerRace race )
{
if ( m_Enemies.Contains( race ) )
{
 m_Enemies.Remove( race );

 SendToAll( String.Format( "RACE MESSAGE: The race is no longer at war with the {0} race.", race.Name ) );

 foreach( Mobile m in Members )
  m.Delta( MobileDelta.Noto );
}
}

public void RemoveAlly( PlayerRace race )
{
if ( m_Allies.Contains( race ) )
{
 m_Allies.Remove( race );

 SendToAll( String.Format( "RACE MESSAGE: The race is no longer allied with the {0} race.", race.Name ) );

 foreach( Mobile m in Members )
  m.Delta( MobileDelta.Noto );
}
}

public void AddAlly( PlayerRace race )
{
if ( !m_Allies.Contains( race ) )
{
 m_Allies.Add( race );

 SendToAll( String.Format( "RACE MESSAGE: A state of allied relations has been declared with the {0} race!", race.Name ) );

 foreach( Mobile m in Members )
  m.Delta( MobileDelta.Noto );
}
}

public void AddWarDeclaration( PlayerRace race )
{
if ( !m_WarDeclarations.Contains( race ) )
{
 m_WarDeclarations.Add( race );

 race.WarInvitations.Add( this );

 SendToAll( String.Format( "RACE MESSAGE: A war invitation has been sent to the {0} race!", race.Name ) );

 race.SendToAll( String.Format( "RACE MESSAGE: A war invitation has been sent by the {0} race!", this.Name ) );
}
}

public void RemoveWarDeclaration( PlayerRace race )
{
if ( m_WarDeclarations.Contains( race ) )
{
 m_WarDeclarations.Remove( race );

 race.WarInvitations.Remove( this );

 SendToAll( String.Format( "RACE MESSAGE: The war invitation against the {0} race was canceled!", race.Name ) );

 race.SendToAll( String.Format( "RACE MESSAGE: The war invitation sent by the {0} race was canceled!", this.Name ) );
}
}

public void AcceptWarInvitation( PlayerRace race )
{
if ( m_WarInvitations.Contains( race ) && !IsEnemy( race ) )
{
 m_WarInvitations.Remove( race );

 race.WarDeclarations.Remove( this );

 AddEnemy( race );

 race.AddEnemy( this );
}
}

public void DeclineWarInvitation( PlayerRace race )
{
if ( m_WarInvitations.Contains( race ) )
{
 m_WarInvitations.Remove( race );

 race.WarDeclarations.Remove( this );

 SendToAll( String.Format( "RACE MESSAGE: The war invitation from the {0} race was declined!", race.Name ) );

 race.SendToAll( String.Format( "RACE MESSAGE: The war invitation against the {0} race was declined!", this.Name ) );
}
}

public void AddAllyDeclaration( PlayerRace race )
{
if ( !m_AllyDeclarations.Contains( race ) )
{
 m_AllyDeclarations.Add( race );

 race.AllyInvitations.Add( this );

 SendToAll( String.Format( "RACE MESSAGE: An ally invitation has been sent to the {0} race!", race.Name ) );

 race.SendToAll( String.Format( "RACE MESSAGE: An ally invitation has been sent by the {0} race!", this.Name ) );
  }
}

public void RemoveAllyDeclaration( PlayerRace race )
{
if ( m_AllyDeclarations.Contains( race ) )
{
 m_AllyDeclarations.Remove( race );

 race.AllyInvitations.Remove( this );

 SendToAll( String.Format( "RACE MESSAGE: The ally invitation with the {0} race was canceled!", race.Name ) );

 race.SendToAll( String.Format( "RACE MESSAGE: The ally invitation sent by the {0} race was canceled!", this.Name ) );
}
}

public void AcceptAllyInvitation( PlayerRace race )
{
if ( m_AllyInvitations.Contains( race ) && !IsAlly( race ) )
{
 m_AllyInvitations.Remove( race );

 race.RemoveAllyDeclaration( this );

 AddAlly( race );

 race.AddAlly( this );
}
}

public void DeclineAllyInvitation( PlayerRace race )
{
m_AllyInvitations.Remove( race );

race.AllyDeclarations.Remove( this );

SendToAll( String.Format( "RACE MESSAGE: The ally invitation from the {0} race was declined!", race.Name ) );

race.SendToAll( String.Format( "RACE MESSAGE: The ally invitation with the {0} race was declined!", this.Name ) );
}

public void DeclareNeutralRelations( PlayerRace race )
{
if ( IsEnemy( race ) )
{
 RemoveEnemy( race );
 race.RemoveEnemy( this );
}
else if ( IsAlly( race ) )
{
 RemoveAlly( race );
 race.RemoveAlly( this );
}
}
#endregion

#region Election
public bool CanCampaign( Mobile m )
{
return ( m_State == ElectionState.Campaign && m_Candidates.Count < MaxCandidates && !IsCandidate( m ) );
}

public bool CanVote( Mobile voter )
{
return ( m_State == ElectionState.Election && !m_Voted.Contains( voter ) );
}

public CandidateInfo GetCandidateInfo( Mobile m )
{
foreach( CandidateInfo info in m_Candidates )
{
 if ( info.Mobile == m )
  return info;
}
return null;
}

public bool IsCandidate( Mobile from )
{
foreach( CandidateInfo info in m_Candidates )
{
 if ( info.Mobile == from )
  return true;
}
return false;
}

public void AddCandidate( Mobile m )
{
CandidateInfo info = new CandidateInfo( m );

m_Candidates.Add( info );

m.SendMessage( "You are now running for race leadership." );
}

public void Vote( Mobile voter, Mobile candidate )
{
if ( !CanVote( voter ) )
{
 voter.SendMessage( "You have already voted." );
}
else if ( !IsCandidate( candidate ) )
{
 voter.SendMessage( "That person is not a candidate" );
}
else
{
 CandidateInfo info = GetCandidateInfo( candidate );

 info.Votes++;

 m_Voted.Add( voter );

 voter.SendMessage( "You have voted for {0}", candidate.Name );
}
}

public void BeginPendingElection()
{
SendToAll( "A new election is pending." );

m_State = ElectionState.Pending;

if ( m_ElectionTimer != null && m_ElectionTimer.Running )
 m_ElectionTimer.Stop();

m_ElectionTimer = new ElectionPendingTimer( this );

m_ElectionTimer.Start();
}

public void BeginCampaign()
{
m_State = ElectionState.Campaign;

if ( m_ElectionTimer != null && m_ElectionTimer.Running )
 m_ElectionTimer.Stop();

m_ElectionTimer = new CampaignTimer( this );

m_ElectionTimer.Start();

SendToAll( "Campaigning for race leadership has begun." );
}

public void EndCampaign()
{
SendToAll( "Campaigning for race leadership has ended." );

if ( m_Candidates.Count <= 0 )
{
 SendToAll( "Nobody ran for race leadership." );

 BeginPendingElection();
}
else if ( m_Candidates.Count == 1 )
{
 CandidateInfo info = (CandidateInfo)m_Candidates[0];

 m_Leader = info.Mobile;

 SendToAll( "Only one person entered in the election. They win the election by default." );

 m_Candidates.Clear();

 BeginPendingElection();
}
else
{
 BeginElection();
}
}

public void BeginElection()
{
m_State = ElectionState.Election;

if ( m_ElectionTimer != null && m_ElectionTimer.Running )
 m_ElectionTimer.Stop();

m_ElectionTimer = new VotingTimer( this );

m_ElectionTimer.Start();

SendToAll( "Voting for race leadership has now begun." );
}

public void EndElection()
{
SendToAll( "The results are for the election are in." );

m_Voted.Clear();

Mobile highest = null;
int votes = 0;

foreach( CandidateInfo info in m_Candidates )
{
 if ( info.Votes > votes )
 {
  highest = info.Mobile;
  votes = info.Votes;
 }
}

m_Candidates.Clear();


if ( highest != null )
{
 if ( highest == m_Leader )
 {
  SendToAll( String.Format( "{0} was re-elected as the race leader.", Leader.Name ) );
 }
 else
 {
  SendToAll( String.Format( "{0} was elected as the new race leader.", highest.Name ) );

  m_Leader = highest;
 }
}

BeginPendingElection();
}
#endregion

public void SendToAll( string message )
{
foreach( Mobile m in Members )
{
 if ( m != null )
  m.SendMessage( message );
}
}

public void CreateControlStone()
{
m_Stone = new RaceControlStone( this );
}

public override void Delete()
{
}

public override void OnDelete()
{
}

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

writer.Write( (int)1 ); //version devient 1

writer.Write( (int) m_ImageID); //// ajoute a la version 1

writer.Write( m_Candidates.Count );


foreach( CandidateInfo info in m_Candidates )
{
 info.Serialize( writer );
}

writer.WriteItemList( m_WarInvitations, true );
writer.WriteItemList( m_WarDeclarations, true );
writer.WriteItemList( m_AllyInvitations, true );
writer.WriteItemList( m_AllyDeclarations, true );
writer.WriteItemList( m_Classes, true );
writer.WriteItemList( m_Allies, true );
writer.WriteItemList( m_Enemies, true );
writer.WriteMobileList( m_Voted, true );
writer.Write( m_Leader );
writer.Write( m_Message );
writer.Write( (int)m_State );
writer.Write( m_Stone );
}

public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
 {
  m_ImageID= reader.ReadInt();
goto case 0;
 }
 case 0:
 {  
  int length = reader.ReadInt();

  for( int i = 0; i < length; ++i )
  {
   CandidateInfo info = new CandidateInfo( reader );

   m_Candidates.Add( info );
  }
  m_WarInvitations = reader.ReadItemList();
  m_WarDeclarations = reader.ReadItemList();
  m_AllyInvitations = reader.ReadItemList();
  m_AllyDeclarations = reader.ReadItemList();
  m_Classes = reader.ReadItemList();
  m_Allies = reader.ReadItemList();
  m_Enemies = reader.ReadItemList();
  m_Voted = reader.ReadMobileList();
  m_Leader = reader.ReadMobile();
  m_Message = reader.ReadString();
  m_State = (ElectionState)reader.ReadInt();
  m_Stone = reader.ReadItem() as RaceControlStone;

  if ( m_State == ElectionState.Pending )
    BeginPendingElection();
  else if ( m_State == ElectionState.Campaign )
    BeginCampaign();
  else
    BeginElection();
 
break;
 }
 }
}
private class ElectionPendingTimer : Timer
{
private PlayerRace m_Race;

public ElectionPendingTimer( PlayerRace race ) : base( race.ElectionPendingPeriod )
{
 m_Race = race;
}

protected override void OnTick()
{
 m_Race.BeginCampaign();
}
}

private class CampaignTimer : Timer
{
private PlayerRace m_Race;

public CampaignTimer( PlayerRace race ) : base( race.CampaignPeriod )
{
 m_Race = race;
}

protected override void OnTick()
{
 m_Race.EndCampaign();
}
}

private class VotingTimer : Timer
{
private PlayerRace m_Race;

public VotingTimer( PlayerRace race ) : base( race.ElectionPeriod )
{
 m_Race = race;
}

protected override void OnTick()
{
 m_Race.EndElection();
}
}
}
}


racemenu.cs
CODE
using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Engines.Classes;
using Server.Engines.Races;
using Server.Mobiles;

namespace Server.Gumps
{
public class RaceMenu : Gump
{
 private int gumpX, gumpY = 0;
 private int buttonID = 1;
 private int pageID = 1;
 private int pageRef = 1;

 public void CreatePage( PlayerRace entry, int id )
 {
  AddPage( pageID );
  this.AddBackground(96, 145, 158, 130, 9200);
  AddImage( 540, 63, 9202);
 this.AddImage(99, 150, entry.ImageID);
  AddHtml( 281, 156, 235, 269, String.Format( "<center>{0}</center><p>{1}</p><p> Force: {2}<br> Dexterite: {3}<br> Inteligence: {4}</p>", entry.Name, entry.Description, entry.Strength, entry.Dexterity, entry.Intelligence ), true, true );
  AddButton( 361, 429, 1149, 1148, id, GumpButtonType.Reply, 0 );
 
  ++pageID;
 }


 public void CreateOption( PlayerRace entry )
 {
  AddButton( 100, gumpY, 5050, 5051, 444, GumpButtonType.Page, pageRef );
  AddLabel( 145, gumpY, 1152, entry.Name );
 
 
 

  ++pageRef;
  gumpY += 27;
 }  
   
 public RaceMenu( Mobile from ) : base ( 0, 0 )
 {
  Closable = false;
  Dragable = false;
  Disposable = false;

  AddImageTiled( 70, 70, 470, 400, 2702);
  AddAlphaRegion( 70, 70, 470, 400 );
  AddImageTiled( 70, 63, 470, 7, 9201);
  AddImage( 63, 63, 9200);
  AddImage( 540, 63, 9202);
  AddImageTiled( 63, 70, 7, 400, 9203);
  AddImageTiled( 540, 70, 7, 400, 9205);
  AddImage( 63, 470, 9206);
  AddImage( 540, 470, 9208);
  AddImageTiled( 70, 470, 470, 7, 9207);
  AddImageTiled( 70, 120, 470, 7, 9204);
  AddHtml( 70, 90, 470, 50, "<center><basefont color=#FFFFFF>Menu de Selection de Votre Race</font></center>", false, false );
  AddImage( 13, 48, 10440 );

  gumpY = 280;

  foreach( PlayerRace race in RaceSystem.Instance.Races )
  {
   if ( race.CanSelect( (dovPlayerMobile)from ) )
    CreateOption( race );
  }

  for( int i = 0; i < RaceSystem.Instance.Races.Count; ++i )
  {
   PlayerRace race = (PlayerRace)RaceSystem.Instance.Races[i];
   
   if ( race.CanSelect( (dovPlayerMobile)from ) )
    CreatePage( race, i );
  }
 }

 public override void OnResponse( NetState state, RelayInfo info )
 {
  dovPlayerMobile from = state.Mobile as dovPlayerMobile;

  PlayerRace entry = (PlayerRace)RaceSystem.Instance.Races[info.ButtonID];

  if ( entry != null )
  {
   from.Race = entry;

   entry.OnSelection( from );

   from.SendMessage( "Tu es maintenant {0} {1}", VowelStart( entry.Name.ToLower() ) ? "un" : "un", entry.Name );
  }
 }

 private bool VowelStart( string text )
 {
  return ( text.StartsWith( "a" ) || text.StartsWith( "e" ) || text.StartsWith( "i" ) ||
   text.StartsWith( "o" ) || text.StartsWith( "u" ) );
 }  
}
}



humanrace.cs

CODE
using System;
using Server;
using Server.Mobiles;
using Server.Engines.Classes;

namespace Server.Engines.Races
{
public sealed class HumanRace : PlayerRace
{

 public override string Description{ get{ return " La population humaine est la plus diversifiée et la plus importante de toutes les races. les humain sont versatiles et aventureux avec une remarquable capacite a assimiler un enseignement magique ou martial ils font de tres bon sorciers ou soldats, aussi bien que artisant commercants, marchants, fermier ils sont l espece dominante de ce monde *Race recomander par le staff*"; } }
 public override string Title{ get{ return " L' Humain"; } }
 
 
    public override bool Enabled{ get{ return true; } }
 public override int Strength{ get{ return 40; } }
 public override int Intelligence{ get{ return 40; } }
 public override int Dexterity{ get{ return 40; } }

 public override Point3D StoneLocation{ get{ return new Point3D( 1616,1637, 35 ); } }

 public HumanRace() : base()
 {
  Name = "Humain";
  ImageID = 131;
 }

 public HumanRace( 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();
 }
}
}

zedar - April 28, 2004 09:54 AM (GMT)
et si on metté un string au lieu d un int ??

slade15 - April 28, 2004 10:33 AM (GMT)
j sais pas, normalement avec le int c'est bien

tu avais dit que l'image restais la meme, cette image corespend a une des races?


zedar - April 28, 2004 02:05 PM (GMT)
non, c celle qui corespond au numero 0 celle qui est verte avec ecrit blackpark dessus

Didi - April 28, 2004 04:26 PM (GMT)
bon je voit pas pk sa marche pas, enfin on va essayer autrechose.

Remplace
CODE
/////////////////////////////////////////
private int m_ImageID;

public int ImageID
{
get{ return m_ImageID;}
set{ m_ImageID= value;}
}
//////////////////////////////////////////

par
CODE
/////////////////////////////////////////
public virtual int ImageID{ get{ return 132; } }
//////////////////////////////////////////


Il te faudra enlever le serialize/deserialize de limageID

Et dans human race.cs

au lieu de
CODE
public override int Dexterity{ get{ return 0; } }

public override Point3D StoneLocation{ get{ return new Point3D( 1616,1637, 35 ); } }

public HumanRace() : base()
{
 Name = "Humain";
 ImageID = 131;
}

tu mettera
CODE
public override int Dexterity{ get{ return 40; } }
public override int ImageID{ get{ return 131; } }
public override Point3D StoneLocation{ get{ return new Point3D( 1616,1637, 35 ); } }

public HumanRace() : base()
{
 Name = "Humain";
}


Si sa non plus sa marche pas, je voit pas ou ets le prob.

(pour enlever le serialize/deserialize, je te conseil avant de faire les modif que je tai dit de remettre ta version, d'enlever "imageID" du serialize, lancer server, sauver, fermer server, vider le deserialize.)

slade15 - April 28, 2004 04:57 PM (GMT)
je suis a cout d'idee mtn

zedar - April 29, 2004 08:33 AM (GMT)
trop bien sa marche :) franchement sens vous j aurrai laisser tombee cette modif
(je metterai un remerciment pour vous sur le site de se shard)
je profine un peu le gump si vous vouler la modif complete faite moi signe je vous lanverai....

Didi - April 29, 2004 01:43 PM (GMT)
Bon sa marche. La question est: pourquoi lautre maniere a pas marcher ?

Un entry ne s'occupe que des virtual ?




Hosted for free by InvisionFree