| 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 |
| CODE |
switch( pageID ) { case 1: { this.AddImage( image1 ); break; } case 2: { this.AddImage( image2 ); break; } ... } |
| 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" ) ); } } } |
| 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(); } } } |
| 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(); } } } } |
| CODE |
| public HumanRace() : base() { Name = "Humain"; } |
| CODE |
| public HumanRace() : base() { Name = "Humain"; ImageID = 132; } |
| CODE |
| this.AddImage(106, 157, entry.ImageID); |
| CODE |
| public HumanRace() : base() { Name = "Humain"; ImageID = 132; } |
| 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(); } } } } |
| 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(); } } } } |
| CODE |
| if ( m_State == ElectionState.Pending ) BeginPendingElection(); else if ( m_State == ElectionState.Campaign ) BeginCampaign(); else BeginElection(); } } |
| CODE |
| if ( m_State == ElectionState.Pending ) BeginPendingElection(); else if ( m_State == ElectionState.Campaign ) BeginCampaign(); else BeginElection(); } } } |
| CODE |
if ( m_State == ElectionState.Pending ) BeginPendingElection(); else if ( m_State == ElectionState.Campaign ) BeginCampaign(); else BeginElection(); break; } } } |
| 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(); } } } } |
| 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" ) ); } } } |
| 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(); } } } |
| CODE |
| ///////////////////////////////////////// private int m_ImageID; public int ImageID { get{ return m_ImageID;} set{ m_ImageID= value;} } ////////////////////////////////////////// |
| CODE |
| ///////////////////////////////////////// public virtual int ImageID{ get{ return 132; } } ////////////////////////////////////////// |
| 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; } |
| 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"; } |