From 1e2b82b64b8b1a23d67944cff8a5c88827ff3dad Mon Sep 17 00:00:00 2001 From: WarrentyExpired Date: Wed, 22 Jul 2026 11:22:45 -0400 Subject: [PATCH] #W# Getting things ready for the Virtue system. Added Virtue Tome. --- Scripts/Mobiles/Base/BaseCreature.cs | 9 +++ Scripts/Mobiles/Base/PlayerMobile.cs | 88 +++++++++++++++++----------- 2 files changed, 64 insertions(+), 33 deletions(-) diff --git a/Scripts/Mobiles/Base/BaseCreature.cs b/Scripts/Mobiles/Base/BaseCreature.cs index d912d4e..8acb840 100644 --- a/Scripts/Mobiles/Base/BaseCreature.cs +++ b/Scripts/Mobiles/Base/BaseCreature.cs @@ -3295,6 +3295,15 @@ namespace Server.Mobiles public virtual void OnKilledBy( Mobile mob ) { + if ( mob is PlayerMobile && this.Karma < 0 ) + { + PlayerMobile pm = (PlayerMobile)mob; + int pointsToAward = Math.Abs( this.Karma ) / 1000; + if ( pointsToAward < 1 ) + pointsToAward = 1; + pm.VirtuePoints += pointsToAward; + pm.SendMessage( 63, "You have gained {0} Virtue Points for vanquishing evil!", pointsToAward ); + } } public override void OnDeath( Container c ) diff --git a/Scripts/Mobiles/Base/PlayerMobile.cs b/Scripts/Mobiles/Base/PlayerMobile.cs index 4b6e590..a5bfea4 100644 --- a/Scripts/Mobiles/Base/PlayerMobile.cs +++ b/Scripts/Mobiles/Base/PlayerMobile.cs @@ -97,6 +97,7 @@ namespace Server.Mobiles private int m_QuestLevel; private string m_MapMarkers; + private int m_VirtuePoints; #region Getters & Setters @@ -278,6 +279,13 @@ namespace Server.Mobiles set{ SetFlag( PlayerFlag.AcceptGuildInvites, value ); } } + [CommandProperty( AccessLevel.GameMaster )] + public int VirtuePoints + { + get { return m_VirtuePoints; } + set { m_VirtuePoints = value; } + } + #endregion #region Auto Arrow Recovery @@ -1824,40 +1832,53 @@ namespace Server.Mobiles base.Deserialize( reader ); int version = reader.ReadInt(); - m_PeacedUntil = reader.ReadDateTime(); - m_AnkhNextUse = reader.ReadDateTime(); - m_AllianceMessageHue = reader.ReadEncodedInt(); - m_GuildMessageHue = reader.ReadEncodedInt(); - m_QuestLevel = reader.ReadInt(); - m_MapMarkers = reader.ReadString(); - - int rank = reader.ReadEncodedInt(); - int maxRank = Guilds.RankDefinition.Ranks.Length -1; - if( rank > maxRank ) - rank = maxRank; - - m_GuildRank = Guilds.RankDefinition.Ranks[rank]; - m_LastOnline = reader.ReadDateTime(); - m_Profession = reader.ReadEncodedInt(); - - if ( reader.ReadBool() ) + switch ( version ) { - m_HairModID = reader.ReadInt(); - m_HairModHue = reader.ReadInt(); - m_BeardModID = reader.ReadInt(); - m_BeardModHue = reader.ReadInt(); - } + case 1: + { + m_VirtuePoints = reader.ReadInt(); + goto case 0; + } + case 0: + { + m_PeacedUntil = reader.ReadDateTime(); + m_AnkhNextUse = reader.ReadDateTime(); + m_AllianceMessageHue = reader.ReadEncodedInt(); + m_GuildMessageHue = reader.ReadEncodedInt(); + m_QuestLevel = reader.ReadInt(); + m_MapMarkers = reader.ReadString(); - m_NpcGuild = (NpcGuild)reader.ReadInt(); - m_NpcGuildJoinTime = reader.ReadDateTime(); - m_NpcGuildGameTime = reader.ReadTimeSpan(); - m_Camp = reader.ReadDateTime(); - m_Bedroll = reader.ReadDateTime(); - m_PermaFlags = reader.ReadStrongMobileList(); - m_Flags = (PlayerFlag)reader.ReadInt(); - m_LongTermElapse = reader.ReadTimeSpan(); - m_ShortTermElapse = reader.ReadTimeSpan(); - m_GameTime = reader.ReadTimeSpan(); + int rank = reader.ReadEncodedInt(); + int maxRank = Guilds.RankDefinition.Ranks.Length -1; + if( rank > maxRank ) + rank = maxRank; + + m_GuildRank = Guilds.RankDefinition.Ranks[rank]; + m_LastOnline = reader.ReadDateTime(); + m_Profession = reader.ReadEncodedInt(); + + if ( reader.ReadBool() ) + { + m_HairModID = reader.ReadInt(); + m_HairModHue = reader.ReadInt(); + m_BeardModID = reader.ReadInt(); + m_BeardModHue = reader.ReadInt(); + } + + m_NpcGuild = (NpcGuild)reader.ReadInt(); + m_NpcGuildJoinTime = reader.ReadDateTime(); + m_NpcGuildGameTime = reader.ReadTimeSpan(); + m_Camp = reader.ReadDateTime(); + m_Bedroll = reader.ReadDateTime(); + m_PermaFlags = reader.ReadStrongMobileList(); + m_Flags = (PlayerFlag)reader.ReadInt(); + m_LongTermElapse = reader.ReadTimeSpan(); + m_ShortTermElapse = reader.ReadTimeSpan(); + m_GameTime = reader.ReadTimeSpan(); + + break; + } + } StatCap = 200; Skills.Cap = 7000; @@ -1911,7 +1932,8 @@ namespace Server.Mobiles base.Serialize( writer ); - writer.Write( (int) 0 ); // version + writer.Write( (int) 1 ); // version + writer.Write( (int) m_VirtuePoints ); writer.Write( (DateTime) m_PeacedUntil ); writer.Write( (DateTime) m_AnkhNextUse );