示例#1
0
        public void AddMember(Mobile mob)
        {
            Members.Add(new PlayerState(mob, this, Members));
            Item item = mob.FindItemOnLayer(Layer.OuterTorso) as Item;

            if (item != null)
            {
                if (item.Movable == false)
                {
                    mob.AddToBackpack(FactionItem.Imbue(new Robe(), this, false, Definition.HuePrimary));
                    mob.SendAsciiMessage("You have been granted a robe which signifies your faction.");
                }

                if (item.Movable == true)
                {
                    mob.AddToBackpack(item);
                    mob.EquipItem(FactionItem.Imbue(new Robe(), this, false, Definition.HuePrimary));
                    mob.SendAsciiMessage("You have been granted a robe which signifies your faction.");
                }
            }
            else
            {
                mob.EquipItem(FactionItem.Imbue(new Robe(), this, false, Definition.HuePrimary));
                mob.SendAsciiMessage("You have been granted a robe which signifies your faction.");
            }

            mob.InvalidateProperties();
            mob.Delta(MobileDelta.Noto);
        }
示例#2
0
        public static Item Imbue(Item item, Faction faction, bool expire, int hue)
        {
            if ((item is IFactionItem))
            {
                FactionItem state = Find(item);

                if (state == null)
                {
                    state = new FactionItem(item, faction);
                    state.Attach();
                }

                if (expire)
                {
                    state.StartExpiration();
                }

                state.m_OrigHue      = item.Hue;
                state.m_OrigLootType = item.LootType;
                item.Hue             = hue;
                item.LootType        = LootType.Blessed;
            }

            return(item);
        }
示例#3
0
        public static Item Imbue(Item item, Faction faction, bool expire, int hue, int MinRank = 0)
        {
            if (!(item is IFactionItem))
            {
                return(item);
            }

            FactionItem state = Find(item);

            if (state == null)
            {
                state = new FactionItem(item, faction, MinRank);
                state.Attach();
            }

            if (expire)
            {
                state.StartExpiration();
            }

            if (hue >= 0)
            {
                item.Hue = hue;
            }

            return(item);
        }
示例#4
0
        public override void OnGiveReward(PlayerMobile to, Item item, IComunityCollection collection, int hue)
        {
            if (this.Faction != null)
            {
                FactionEquipment.CheckProperties(item);
                FactionItem.Imbue(item, Faction, false, -1, MinRank);

                if (!(item is Spellbook || item is ShrineGem))
                {
                    item.LootType = LootType.Regular;
                }

                if (item is IWearableDurability)
                {
                    ((IWearableDurability)item).MaxHitPoints = 255;
                    ((IWearableDurability)item).HitPoints    = 255;
                }

                if (item is IOwnerRestricted)
                {
                    ((IOwnerRestricted)item).Owner = to;
                    to.SendLocalizedMessage(1094803); // This faction reward is bound to you, and cannot be traded.
                }

                item.InvalidateProperties();
            }

            base.OnGiveReward(to, item, collection, hue);
        }
示例#5
0
        public static void FactionTownReset_OnCommand(CommandEventArgs e)
        {
            MonolithCollection monoliths = BaseMonolith.Monoliths;

            for (int i = 0; i < monoliths.Count; ++i)
            {
                monoliths[i].Sigil = null;
            }

            TownCollection towns = Town.Towns;

            for (int i = 0; i < towns.Count; ++i)
            {
                towns[i].Silver  = 0;
                towns[i].Sheriff = null;
                towns[i].Finance = null;
                towns[i].Tax     = 0;
                towns[i].Owner   = null;
            }

            SigilCollection sigils = Sigil.Sigils;

            for (int i = 0; i < sigils.Count; ++i)
            {
                sigils[i].Corrupted         = null;
                sigils[i].Corrupting        = null;
                sigils[i].LastStolen        = DateTime.MinValue;
                sigils[i].GraceStart        = DateTime.MinValue;
                sigils[i].CorruptionStart   = DateTime.MinValue;
                sigils[i].PurificationStart = DateTime.MinValue;
                sigils[i].LastMonolith      = null;
                sigils[i].ReturnHome();
            }

            FactionCollection factions = Faction.Factions;

            for (int i = 0; i < factions.Count; ++i)
            {
                Faction f = factions[i];

                ArrayList list = new ArrayList(f.State.FactionItems);

                for (int j = 0; j < list.Count; ++j)
                {
                    FactionItem fi = (FactionItem)list[j];

                    if (fi.Expiration == DateTime.MinValue)
                    {
                        fi.Item.Delete();
                    }
                    else
                    {
                        fi.Detach();
                    }
                }
            }
        }
示例#6
0
        public void AddMember(Mobile mob)
        {
            Members.Add(new PlayerState(mob, this, Members));

            mob.AddToBackpack(FactionItem.Imbue(new Robe(), this, false, Definition.HuePrimary));
            mob.SendLocalizedMessage(1010374);               // You have been granted a robe which signifies your faction

            mob.InvalidateProperties();
            mob.Delta(MobileDelta.Noto);
        }
		public static void FactionTownReset_OnCommand( CommandEventArgs e )
		{
			List<BaseMonolith> monoliths = BaseMonolith.Monoliths;

			for ( int i = 0; i < monoliths.Count; ++i )
				monoliths[i].Sigil = null;

			List<Town> towns = Town.Towns;

			for ( int i = 0; i < towns.Count; ++i )
			{
				towns[i].Silver = 0;
				towns[i].Sheriff = null;
				towns[i].Finance = null;
				towns[i].Tax = 0;
				towns[i].Owner = null;
			}

			List<Sigil> sigils = Sigil.Sigils;

			for ( int i = 0; i < sigils.Count; ++i )
			{
				sigils[i].Corrupted = null;
				sigils[i].Corrupting = null;
				sigils[i].LastStolen = DateTime.MinValue;
				sigils[i].GraceStart = DateTime.MinValue;
				sigils[i].CorruptionStart = DateTime.MinValue;
				sigils[i].PurificationStart = DateTime.MinValue;
				sigils[i].LastMonolith = null;
				sigils[i].ReturnHome();
			}

			List<Faction> factions = Faction.Factions;

			for ( int i = 0; i < factions.Count; ++i )
			{
				Faction f = factions[i];

				List<FactionItem> list = new List<FactionItem>( f.State.FactionItems );

				for ( int j = 0; j < list.Count; ++j )
				{
					FactionItem fi = list[j];

					if ( fi.Expiration == DateTime.MinValue )
						fi.Item.Delete();
					else
						fi.Detach();
				}
			}
		}
示例#8
0
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if (info.ButtonID == 1)
            {
                var pack = m_Mobile.Backpack;

                if (pack != null && m_Item.IsChildOf(pack))
                {
                    if (pack.ConsumeTotal(typeof(Silver), m_Definition.SilverCost))
                    {
                        int hue;

                        if (m_Item is SpellScroll)
                        {
                            hue = 0;
                        }
                        else if (info.IsSwitched(1))
                        {
                            hue = m_Faction.Definition.HuePrimary;
                        }
                        else
                        {
                            hue = m_Faction.Definition.HueSecondary;
                        }

                        FactionItem.Imbue(m_Item, m_Faction, true, hue);
                    }
                    else
                    {
                        m_Mobile.SendLocalizedMessage(1042204); // You do not have enough silver.
                    }
                }
            }

            if (m_Tool?.Deleted == false && m_Tool.UsesRemaining > 0)
            {
                m_Mobile.SendGump(new CraftGump(m_Mobile, m_CraftSystem, m_Tool, m_Notice));
            }
            else if (m_Notice != null)
            {
                if (m_Notice.Number > 0)
                {
                    m_Mobile.SendLocalizedMessage(m_Notice.Number);
                }
                else
                {
                    m_Mobile.SendMessage(m_Notice.String);
                }
            }
        }
		public virtual void AddMember( Mobile mob )
		{
			PlayerState ps = new PlayerState( mob, this, Members );
			Members.Add( ps );

			mob.AddToBackpack( FactionItem.Imbue( new Robe(), this, false, Definition.HuePrimary ) );
			mob.SendLocalizedMessage( 1010374 ); // You have been granted a robe which signifies your faction

			mob.InvalidateProperties();
			mob.Delta( MobileDelta.Noto );

			mob.FixedEffect( 0x373A, 10, 30 );
			mob.PlaySound( 0x209 );

			OnRankUpdate( ps );
		}
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if (info.ButtonID == 1)
            {
                Container pack = m_Mobile.Backpack;

                if (pack != null && m_Item.IsChildOf(pack))
                {
                    if (pack.ConsumeTotal(typeof(Silver), m_Definition.SilverCost))
                    {
                        int hue;

                        if (m_Item is SpellScroll)
                        {
                            hue = 0;
                        }
                        else if (info.IsSwitched(1))
                        {
                            hue = m_Faction.Definition.HuePrimary;
                        }
                        else
                        {
                            hue = m_Faction.Definition.HueSecondary;
                        }

                        FactionItem.Imbue(m_Item, m_Faction, true, hue);
                    }
                    else
                    {
                        m_Mobile.SendAsciiMessage("You do not have enough silver.");
                    }
                }
            }

            if (m_Tool != null && !m_Tool.Deleted && m_Tool.UsesRemaining > 0)
            {
                m_Mobile.SendGump(new CraftGump(m_Mobile, m_CraftSystem, m_Tool, m_Notice));
            }
            else if (m_Notice is string)
            {
                m_Mobile.SendAsciiMessage((string)m_Notice);
            }
            else if (m_Notice is int && ((int)m_Notice) > 0)
            {
                m_Mobile.SendLocalizedMessage((int)m_Notice);
            }
        }
示例#11
0
        public static FactionItem Find(Item item)
        {
            if (item is IFactionItem)
            {
                FactionItem state = ((IFactionItem)item).FactionItemState;

                if (state != null && state.HasExpired)
                {
                    state.Detach();
                    state = null;
                }

                return(state);
            }

            return(null);
        }
示例#12
0
        public static FactionItem Find(Item item)
        {
            if (item is IFactionItem factionItem)
            {
                FactionItem state = factionItem.FactionItemState;

                if (state?.HasExpired == true)
                {
                    state.Detach();
                    state = null;
                }

                return(state);
            }

            return(null);
        }
示例#13
0
        public static Item Imbue(Item item, Faction faction, bool expire, int hue)
        {
            if (item is not IFactionItem)
            {
                return(item);
            }

            var state = Find(item);

            if (state == null)
            {
                state = new FactionItem(item, faction);
                state.Attach();
            }

            if (expire)
            {
                state.StartExpiration();
            }

            item.Hue = hue;
            return(item);
        }
示例#14
0
        public FactionState(GenericReader reader)
        {
            int version = reader.ReadEncodedInt();

            switch (version)
            {
            case 6:
            case 5:
            {
                m_LastAtrophy = reader.ReadDateTime();
                goto case 4;
            }

            case 4:
            {
                int count = reader.ReadEncodedInt();

                for (int i = 0; i < count; ++i)
                {
                    DateTime time = reader.ReadDateTime();

                    if (i < m_LastBroadcasts.Length)
                    {
                        m_LastBroadcasts[i] = time;
                    }
                }

                goto case 3;
            }

            case 3:
            case 2:
            case 1:
            {
                Election ele = new Election(reader);

                if (Settings.Enabled)
                {
                    m_Election = ele;
                }
                else
                {
                    m_Election = new Election(m_Faction);
                }

                goto case 0;
            }

            case 0:
            {
                m_Faction = Faction.ReadReference(reader);

                if (m_Election.Faction == null)
                {
                    m_Election.Faction = m_Faction;
                }

                m_Commander = reader.ReadMobile();

                if (version < 5)
                {
                    m_LastAtrophy = DateTime.UtcNow;
                }

                if (version < 4)
                {
                    DateTime time = reader.ReadDateTime();

                    if (m_LastBroadcasts.Length > 0)
                    {
                        m_LastBroadcasts[0] = time;
                    }
                }

                m_Tithe  = reader.ReadEncodedInt();
                m_Silver = reader.ReadEncodedInt();

                int memberCount = reader.ReadEncodedInt();

                m_Members = new List <PlayerState>();

                for (int i = 0; i < memberCount; ++i)
                {
                    PlayerState pl = new PlayerState(reader, m_Faction, m_Members);

                    if (pl.Mobile != null)
                    {
                        if (Settings.Enabled)
                        {
                            m_Members.Add(pl);
                        }
                        else
                        {
                            Settings.AddDisabledNotice(pl.Mobile);
                        }
                    }
                }

                m_Faction.State = this;

                m_Faction.ZeroRankOffset = m_Members.Count;
                m_Members.Sort();

                for (int i = m_Members.Count - 1; i >= 0; i--)
                {
                    PlayerState player = m_Members[i];

                    if (player.KillPoints <= 0)
                    {
                        m_Faction.ZeroRankOffset = i;
                    }
                    else
                    {
                        player.RankIndex = i;
                    }
                }

                m_FactionItems = new List <FactionItem>();

                if (version >= 2)
                {
                    int factionItemCount = reader.ReadEncodedInt();

                    for (int i = 0; i < factionItemCount; ++i)
                    {
                        FactionItem factionItem = new FactionItem(reader, m_Faction);

                        if (Settings.Enabled)
                        {
                            Timer.DelayCall(TimeSpan.Zero, new TimerCallback(factionItem.CheckAttach));         // sandbox attachment
                        }
                    }
                }

                m_FactionTraps = new List <BaseFactionTrap>();

                if (version >= 3)
                {
                    int factionTrapCount = reader.ReadEncodedInt();

                    for (int i = 0; i < factionTrapCount; ++i)
                    {
                        BaseFactionTrap trap = reader.ReadItem() as BaseFactionTrap;

                        if (trap != null && !trap.CheckDecay())
                        {
                            if (Settings.Enabled)
                            {
                                m_FactionTraps.Add(trap);
                            }
                            else
                            {
                                trap.Delete();
                            }
                        }
                    }
                }

                break;
            }
            }

            if (version < 6 && Settings.Enabled && Core.ML)
            {
                FactionCollectionBox box = new FactionCollectionBox(m_Faction);
                WeakEntityCollection.Add("factions", box);
                box.MoveToWorld(m_Faction.Definition.Stronghold.CollectionBox, Faction.Facet);
            }

            if (version < 1)
            {
                m_Election = new Election(m_Faction);
            }
        }
示例#15
0
        public static Item Imbue( Item item, Faction faction, bool expire, int hue )
        {
            if ( !( item is IFactionItem ) )
            {
                return item;
            }

            FactionItem state = Find( item );

            if ( state == null )
            {
                state = new FactionItem( item, faction );
                state.Attach();
            }

            if ( expire )
            {
                state.StartExpiration();
            }

            item.Hue = hue;
            return item;
        }
示例#16
0
        public FactionState( GenericReader reader )
        {
            int version = reader.ReadEncodedInt();

            switch ( version )
            {
                case 4:
                {
                    int count = reader.ReadEncodedInt();

                    for ( int i = 0; i < count; ++i )
                    {
                        DateTime time = reader.ReadDateTime();

                        if ( i < m_LastBroadcasts.Length )
                            m_LastBroadcasts[i] = time;
                    }

                    goto case 3;
                }
                case 3:
                case 2:
                case 1:
                {
                    m_Election = new Election( reader );

                    goto case 0;
                }
                case 0:
                {
                    m_Faction = Faction.ReadReference( reader );

                    m_Commander = reader.ReadMobile();

                    if ( version < 4 )
                    {
                        DateTime time = reader.ReadDateTime();

                        if ( m_LastBroadcasts.Length > 0 )
                            m_LastBroadcasts[0] = time;
                    }

                    m_Tithe = reader.ReadEncodedInt();
                    m_Silver = reader.ReadEncodedInt();

                    int memberCount = reader.ReadEncodedInt();

                    m_Members = new PlayerStateCollection();

                    for ( int i = 0; i < memberCount; ++i )
                    {
                        PlayerState pl = new PlayerState( reader, m_Faction, m_Members );

                        if ( pl.Mobile != null )
                            m_Members.Add( pl );
                    }

                    m_Faction.State = this;
                    m_Faction.UpdateRanks();

                    m_FactionItems = new FactionItemCollection();

                    if ( version >= 2 )
                    {
                        int factionItemCount = reader.ReadEncodedInt();

                        for ( int i = 0; i < factionItemCount; ++i )
                        {
                            FactionItem factionItem = new FactionItem( reader, m_Faction );

                            if ( !factionItem.HasExpired )
                                factionItem.Attach();
                            else
                                Timer.DelayCall( TimeSpan.Zero, new TimerCallback( factionItem.Detach ) ); // sandbox detachment
                        }
                    }

                    m_FactionTraps = new FactionTrapCollection();

                    if ( version >= 3 )
                    {
                        int factionTrapCount = reader.ReadEncodedInt();

                        for ( int i = 0; i < factionTrapCount; ++i )
                        {
                            BaseFactionTrap trap = reader.ReadItem() as BaseFactionTrap;

                            if ( trap != null && !trap.CheckDecay() )
                                m_FactionTraps.Add( trap );
                        }
                    }

                    break;
                }
            }

            if ( version < 1 )
                m_Election = new Election( m_Faction );
        }
示例#17
0
        public FactionState(IGenericReader reader)
        {
            var version = reader.ReadEncodedInt();

            switch (version)
            {
            case 5:
            {
                LastAtrophy = reader.ReadDateTime();
                goto case 4;
            }

            case 4:
            {
                var count = reader.ReadEncodedInt();

                for (var i = 0; i < count; ++i)
                {
                    var time = reader.ReadDateTime();

                    if (i < m_LastBroadcasts.Length)
                    {
                        m_LastBroadcasts[i] = time;
                    }
                }

                goto case 3;
            }

            case 3:
            case 2:
            case 1:
            {
                Election = new Election(reader);

                goto case 0;
            }

            case 0:
            {
                m_Faction = Faction.ReadReference(reader);

                m_Commander = reader.ReadEntity <Mobile>();

                if (version < 5)
                {
                    LastAtrophy = Core.Now;
                }

                if (version < 4)
                {
                    var time = reader.ReadDateTime();

                    if (m_LastBroadcasts.Length > 0)
                    {
                        m_LastBroadcasts[0] = time;
                    }
                }

                Tithe  = reader.ReadEncodedInt();
                Silver = reader.ReadEncodedInt();

                var memberCount = reader.ReadEncodedInt();

                Members = new List <PlayerState>();

                for (var i = 0; i < memberCount; ++i)
                {
                    var pl = new PlayerState(reader, m_Faction, Members);

                    if (pl.Mobile != null)
                    {
                        Members.Add(pl);
                    }
                }

                m_Faction.State = this;

                m_Faction.ZeroRankOffset = Members.Count;
                Members.Sort();

                for (var i = Members.Count - 1; i >= 0; i--)
                {
                    var player = Members[i];

                    if (player.KillPoints <= 0)
                    {
                        m_Faction.ZeroRankOffset = i;
                    }
                    else
                    {
                        player.RankIndex = i;
                    }
                }

                FactionItems = new List <FactionItem>();

                if (version >= 2)
                {
                    var factionItemCount = reader.ReadEncodedInt();

                    for (var i = 0; i < factionItemCount; ++i)
                    {
                        var factionItem = new FactionItem(reader, m_Faction);

                        Timer.StartTimer(factionItem.CheckAttach);         // sandbox attachment
                    }
                }

                Traps = new List <BaseFactionTrap>();

                if (version >= 3)
                {
                    var factionTrapCount = reader.ReadEncodedInt();

                    for (var i = 0; i < factionTrapCount; ++i)
                    {
                        if (reader.ReadEntity <Item>() is BaseFactionTrap trap && !trap.CheckDecay())
                        {
                            Traps.Add(trap);
                        }
                    }
                }

                break;
            }
            }

            if (version < 1)
            {
                Election = new Election(m_Faction);
            }
        }
示例#18
0
        public FactionState(GenericReader reader)
        {
            int version = reader.ReadEncodedInt();

            switch (version)
            {
            case 5:
            {
                m_LastAtrophy = reader.ReadDateTime();
                goto case 4;
            }

            case 4:
            {
                int count = reader.ReadEncodedInt();

                for (int i = 0; i < count; ++i)
                {
                    DateTime time = reader.ReadDateTime();

                    if (i < m_LastBroadcasts.Length)
                    {
                        m_LastBroadcasts[i] = time;
                    }
                }

                goto case 3;
            }

            case 3:
            case 2:
            case 1:
            {
                m_Election = new Election(reader);

                goto case 0;
            }

            case 0:
            {
                m_Faction = Faction.ReadReference(reader);

                m_Commander = reader.ReadMobile();

                if (version < 5)
                {
                    m_LastAtrophy = DateTime.UtcNow;
                }

                if (version < 4)
                {
                    DateTime time = reader.ReadDateTime();

                    if (m_LastBroadcasts.Length > 0)
                    {
                        m_LastBroadcasts[0] = time;
                    }
                }

                m_Tithe  = reader.ReadEncodedInt();
                m_Silver = reader.ReadEncodedInt();

                int memberCount = reader.ReadEncodedInt();

                m_Members = new List <PlayerState>();

                for (int i = 0; i < memberCount; ++i)
                {
                    PlayerState pl = new PlayerState(reader, m_Faction, m_Members);

                    if (pl.Mobile != null)
                    {
                        m_Members.Add(pl);
                    }
                }

                m_Faction.State = this;

                m_Faction.ZeroRankOffset = m_Members.Count;
                m_Members.Sort();

                for (int i = m_Members.Count - 1; i >= 0; i--)
                {
                    PlayerState player = m_Members[i];

                    if (player.KillPoints <= 0)
                    {
                        m_Faction.ZeroRankOffset = i;
                    }
                    else
                    {
                        player.RankIndex = i;
                    }
                }

                m_FactionItems = new List <FactionItem>();

                if (version >= 2)
                {
                    int factionItemCount = reader.ReadEncodedInt();

                    for (int i = 0; i < factionItemCount; ++i)
                    {
                        FactionItem factionItem = new FactionItem(reader, m_Faction);

                        Timer.DelayCall(TimeSpan.Zero, new TimerCallback(factionItem.CheckAttach));         // sandbox attachment
                    }
                }

                m_FactionTraps = new List <BaseFactionTrap>();

                if (version >= 3)
                {
                    int factionTrapCount = reader.ReadEncodedInt();

                    for (int i = 0; i < factionTrapCount; ++i)
                    {
                        BaseFactionTrap trap = reader.ReadItem() as BaseFactionTrap;

                        if (trap != null && !trap.CheckDecay())
                        {
                            m_FactionTraps.Add(trap);
                        }
                    }
                }

                break;
            }
            }

            if (version < 1)
            {
                m_Election = new Election(m_Faction);
            }
        }
示例#19
0
		public static Item Imbue( Item item, Faction faction, bool expire, int hue )
		{
			if ( (item is IFactionItem) )
			{
				FactionItem state = Find( item );

				if ( state == null )
				{
					state = new FactionItem( item, faction );
					state.Attach();
				}

				if ( expire )
					state.StartExpiration();

				state.m_OrigHue = item.Hue;
				state.m_OrigLootType = item.LootType;
				item.Hue = hue;
				item.LootType = LootType.Blessed;
			}

			return item;
		}
示例#20
0
		public FactionState( GenericReader reader )
		{
			int version = reader.ReadEncodedInt();

			switch ( version )
			{
                case 5:
                    {
                        m_LastAtrophy = reader.ReadDateTime();
                        goto case 4;
                    }
				case 4:
				{
					int count = reader.ReadEncodedInt();

					for ( int i = 0; i < count; ++i )
					{
						DateTime time = reader.ReadDateTime();

						if ( i < m_LastBroadcasts.Length )
							m_LastBroadcasts[i] = time;
					}

					goto case 3;
				}
				case 3:
				case 2:
				case 1:
				{
					m_Election = new Election( reader );

					goto case 0;
				}
				case 0:
				{
					m_Faction = Faction.ReadReference( reader );

					m_Commander = reader.ReadMobile();

                    if (version < 5)
                        m_LastAtrophy = DateTime.Now;

					if ( version < 4 )
					{
						DateTime time = reader.ReadDateTime();

						if ( m_LastBroadcasts.Length > 0 )
							m_LastBroadcasts[0] = time;
					}

					m_Tithe = reader.ReadEncodedInt();
					m_Silver = reader.ReadEncodedInt();

					int memberCount = reader.ReadEncodedInt();

					m_Members = new List<PlayerState>();

					for ( int i = 0; i < memberCount; ++i )
					{
						PlayerState pl = new PlayerState( reader, m_Faction, m_Members );

						if ( pl.Mobile != null )
							m_Members.Add( pl );
					}

					m_Faction.State = this;

                    m_Faction.ZeroRankOffset = m_Members.Count;
                    m_Members.Sort();

                    for (int i = m_Members.Count - 1; i >= 0; i--)
                    {
                        PlayerState player = m_Members[i];

                        if (player.KillPoints <= 0)
                            m_Faction.ZeroRankOffset = i;
                        else
                            player.RankIndex = i;
                    }


					m_FactionItems = new List<FactionItem>();

					if ( version >= 2 )
					{
						int factionItemCount = reader.ReadEncodedInt();

						for ( int i = 0; i < factionItemCount; ++i )
						{
							FactionItem factionItem = new FactionItem( reader, m_Faction );

                            Timer.DelayCall(TimeSpan.Zero, new TimerCallback(factionItem.CheckAttach)); // sandbox attachment
						}
					}

					m_FactionTraps = new List<BaseFactionTrap>();

					if ( version >= 3 )
					{
						int factionTrapCount = reader.ReadEncodedInt();

						for ( int i = 0; i < factionTrapCount; ++i )
						{
							BaseFactionTrap trap = reader.ReadItem() as BaseFactionTrap;

							if ( trap != null && !trap.CheckDecay() )
								m_FactionTraps.Add( trap );
						}
					}

					break;
				}
			}

			if ( version < 1 )
				m_Election = new Election( m_Faction );
		}
示例#21
0
        public FactionState(GenericReader reader)
        {
            int version = reader.ReadEncodedInt();

            switch (version)
            {
            case 4:
            {
                int count = reader.ReadEncodedInt();

                for (int i = 0; i < count; ++i)
                {
                    DateTime time = reader.ReadDateTime();

                    if (i < m_LastBroadcasts.Length)
                    {
                        m_LastBroadcasts[i] = time;
                    }
                }

                goto case 3;
            }

            case 3:
            case 2:
            case 1:
            {
                m_Election = new Election(reader);

                goto case 0;
            }

            case 0:
            {
                m_Faction = Faction.ReadReference(reader);

                m_Commander = reader.ReadMobile();

                if (version < 4)
                {
                    DateTime time = reader.ReadDateTime();

                    if (m_LastBroadcasts.Length > 0)
                    {
                        m_LastBroadcasts[0] = time;
                    }
                }

                m_Tithe  = reader.ReadEncodedInt();
                m_Silver = reader.ReadEncodedInt();

                int memberCount = reader.ReadEncodedInt();

                m_Members = new PlayerStateCollection();

                for (int i = 0; i < memberCount; ++i)
                {
                    PlayerState pl = new PlayerState(reader, m_Faction, m_Members);

                    if (pl.Mobile != null)
                    {
                        m_Members.Add(pl);
                    }
                }

                m_Faction.State = this;
                m_Faction.UpdateRanks();

                m_FactionItems = new FactionItemCollection();

                if (version >= 2)
                {
                    int factionItemCount = reader.ReadEncodedInt();

                    for (int i = 0; i < factionItemCount; ++i)
                    {
                        FactionItem factionItem = new FactionItem(reader, m_Faction);

                        if (!factionItem.HasExpired)
                        {
                            factionItem.Attach();
                        }
                        else
                        {
                            Timer.DelayCall(TimeSpan.Zero, new TimerCallback(factionItem.Detach));                                         // sandbox detachment
                        }
                    }
                }

                m_FactionTraps = new FactionTrapCollection();

                if (version >= 3)
                {
                    int factionTrapCount = reader.ReadEncodedInt();

                    for (int i = 0; i < factionTrapCount; ++i)
                    {
                        BaseFactionTrap trap = reader.ReadItem() as BaseFactionTrap;

                        if (trap != null && !trap.CheckDecay())
                        {
                            m_FactionTraps.Add(trap);
                        }
                    }
                }

                break;
            }
            }

            if (version < 1)
            {
                m_Election = new Election(m_Faction);
            }
        }
示例#22
0
        public static void FactionReset_OnCommand(CommandEventArgs e)
        {
            List <BaseMonolith> monoliths = BaseMonolith.Monoliths;

            for (int i = 0; i < monoliths.Count; ++i)
            {
                monoliths[i].Sigil = null;
            }

            List <Town> towns = Town.Towns;

            for (int i = 0; i < towns.Count; ++i)
            {
                towns[i].Silver  = 0;
                towns[i].Sheriff = null;
                towns[i].Finance = null;
                towns[i].Tax     = 0;
                towns[i].Owner   = null;
            }

            List <Sigil> sigils = Sigil.Sigils;

            for (int i = 0; i < sigils.Count; ++i)
            {
                sigils[i].Corrupted         = null;
                sigils[i].Corrupting        = null;
                sigils[i].LastStolen        = DateTime.MinValue;
                sigils[i].GraceStart        = DateTime.MinValue;
                sigils[i].CorruptionStart   = DateTime.MinValue;
                sigils[i].PurificationStart = DateTime.MinValue;
                sigils[i].LastMonolith      = null;
                sigils[i].ReturnHome();
            }

            List <Faction> factions = Faction.Factions;

            for (int i = 0; i < factions.Count; ++i)
            {
                Faction f = factions[i];

                List <PlayerState> playerStateList = new List <PlayerState>(f.Members);

                for (int j = 0; j < playerStateList.Count; ++j)
                {
                    f.RemoveMember(playerStateList[j].Mobile);
                }

                List <FactionItem> factionItemList = new List <FactionItem>(f.State.FactionItems);

                for (int j = 0; j < factionItemList.Count; ++j)
                {
                    FactionItem fi = (FactionItem)factionItemList[j];

                    if (fi.Expiration == DateTime.MinValue)
                    {
                        fi.Item.Delete();
                    }
                    else
                    {
                        fi.Detach();
                    }
                }

                List <BaseFactionTrap> factionTrapList = new List <BaseFactionTrap>(f.Traps);

                for (int j = 0; j < factionTrapList.Count; ++j)
                {
                    factionTrapList[j].Delete();
                }
            }
        }