예제 #1
0
파일: DoubleDom.cs 프로젝트: nathanvy/runuo
		public void Dominate( DDWayPoint point, Mobile from, DDTeamInfo team )
		{
			if ( point == null || from == null || team == null || !m_Capturable )
				return;

			bool wasDom = ( m_Controller.PointA != null && m_Controller.PointB != null && 
				m_Controller.PointA.TeamOwner == m_Controller.PointB.TeamOwner && m_Controller.PointA.TeamOwner != null );

			point.TeamOwner = team;
			Alert( "{0} has captured {1}!", team.Name, point.Name );

			bool isDom = ( m_Controller.PointA != null && m_Controller.PointB != null && 
				m_Controller.PointA.TeamOwner == m_Controller.PointB.TeamOwner && m_Controller.PointA.TeamOwner != null );

			if ( wasDom && !isDom )
			{
				Alert( "Domination averted!" );

				if ( m_Controller.PointA != null )
					m_Controller.PointA.SetNonCaptureHue();

				if ( m_Controller.PointB != null )
					m_Controller.PointB.SetNonCaptureHue();

				if ( m_CaptureTimer != null )
					m_CaptureTimer.Stop();
				m_CaptureTimer = null;
			}
			
			if ( !wasDom && isDom )
			{
				m_CapStage = 0;
				m_CaptureTimer = Timer.DelayCall( TimeSpan.Zero, TimeSpan.FromSeconds( 1.0 ), new TimerCallback( CaptureTick ) );
				m_CaptureTimer.Start();
			}
		}
예제 #2
0
파일: DoubleDom.cs 프로젝트: nathanvy/runuo
		public DDBoardGump( Mobile mob, DDGame game, DDTeamInfo section )
			: base( 60, 60 )
		{
			m_Game = game;

			DDTeamInfo ourTeam = game.GetTeamInfo( mob );

			List<IRankedCTF> entries = new List<IRankedCTF>();

			if ( section == null )
			{
				for ( int i = 0; i < game.Context.Participants.Count; ++i )
				{
					DDTeamInfo teamInfo = game.Controller.TeamInfo[i % game.Controller.TeamInfo.Length];

					if ( teamInfo != null )
						entries.Add( teamInfo );
				}
			}
			else
			{
				foreach ( DDPlayerInfo player in section.Players.Values )
				{
					if ( player.Score > 0 )
						entries.Add( player );
				}
			}

			entries.Sort( delegate( IRankedCTF a, IRankedCTF b )
			{
				return b.Score - a.Score;
			} );

			int height = 0;

			if ( section == null )
				height = 73 + ( entries.Count * 75 ) + 28;

			Closable = false;

			AddPage( 0 );

			AddBackground( 1, 1, 398, height, 3600 );

			AddImageTiled( 16, 15, 369, height - 29, 3604 );

			for ( int i = 0; i < entries.Count; i += 1 )
				AddImageTiled( 22, 58 + ( i * 75 ), 357, 70, 0x2430 );

			AddAlphaRegion( 16, 15, 369, height - 29 );

			AddImage( 215, -45, 0xEE40 );
			//AddImage( 330, 141, 0x8BA );

			AddBorderedText( 22, 22, 294, 20, Center( "DD Scoreboard" ), LabelColor32, BlackColor32 );

			AddImageTiled( 32, 50, 264, 1, 9107 );
			AddImageTiled( 42, 52, 264, 1, 9157 );

			if ( section == null )
			{
				for ( int i = 0; i < entries.Count; ++i )
				{
					DDTeamInfo teamInfo = entries[i] as DDTeamInfo;

					AddImage( 30, 70 + ( i * 75 ), 10152 );
					AddImage( 30, 85 + ( i * 75 ), 10151 );
					AddImage( 30, 100 + ( i * 75 ), 10151 );
					AddImage( 30, 106 + ( i * 75 ), 10154 );

					AddImage( 24, 60 + ( i * 75 ), teamInfo == ourTeam ? 9730 : 9727, teamInfo.Color - 1 );

					int nameColor = LabelColor32;
					int borderColor = BlackColor32;

					switch ( teamInfo.Color )
					{
						case 0x47E:
							nameColor = 0xFFFFFF;
							break;

						case 0x4F2:
							nameColor = 0x3399FF;
							break;

						case 0x4F7:
							nameColor = 0x33FF33;
							break;

						case 0x4FC:
							nameColor = 0xFF00FF;
							break;

						case 0x021:
							nameColor = 0xFF3333;
							break;

						case 0x01A:
							nameColor = 0xFF66FF;
							break;

						case 0x455:
							nameColor = 0x333333;
							borderColor = 0xFFFFFF;
							break;
					}

					AddBorderedText( 60, 65 + ( i * 75 ), 250, 20, String.Format( "{0}: {1}", LadderGump.Rank( 1 + i ), teamInfo.Name ), nameColor, borderColor );

					AddBorderedText( 50 + 10, 85 + ( i * 75 ), 100, 20, "Score:", 0xFFC000, BlackColor32 );
					AddBorderedText( 50 + 15, 105 + ( i * 75 ), 100, 20, teamInfo.Score.ToString( "N0" ), 0xFFC000, BlackColor32 );

					AddBorderedText( 110 + 10, 85 + ( i * 75 ), 100, 20, "Kills:", 0xFFC000, BlackColor32 );
					AddBorderedText( 110 + 15, 105 + ( i * 75 ), 100, 20, teamInfo.Kills.ToString( "N0" ), 0xFFC000, BlackColor32 );

					AddBorderedText( 160 + 10, 85 + ( i * 75 ), 100, 20, "Captures:", 0xFFC000, BlackColor32 );
					AddBorderedText( 160 + 15, 105 + ( i * 75 ), 100, 20, teamInfo.Captures.ToString( "N0" ), 0xFFC000, BlackColor32 );

					DDPlayerInfo pl = teamInfo.Leader;

					AddBorderedText( 235 + 10, 85 + ( i * 75 ), 250, 20, "Leader:", 0xFFC000, BlackColor32 );

					if ( pl != null )
						AddBorderedText( 235 + 15, 105 + ( i * 75 ), 250, 20, pl.Player.Name, 0xFFC000, BlackColor32 );
				}
			}
			else
			{
			}

			AddButton( 314, height - 42, 247, 248, 1, GumpButtonType.Reply, 0 );
		}
예제 #3
0
파일: DoubleDom.cs 프로젝트: nathanvy/runuo
		public DDController()
		{
			Visible = false;
			Movable = false;

			m_Duration = TimeSpan.FromMinutes( 30.0 );

			m_TeamInfo = new DDTeamInfo[2];

			for ( int i = 0; i < m_TeamInfo.Length; ++i )
				m_TeamInfo[i] = new DDTeamInfo( i );
		}
예제 #4
0
파일: DoubleDom.cs 프로젝트: nathanvy/runuo
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
				case 0:
				{
					m_Duration = reader.ReadTimeSpan();
					m_TeamInfo = new DDTeamInfo[reader.ReadEncodedInt()];

					for ( int i = 0; i < m_TeamInfo.Length; ++i )
						m_TeamInfo[i] = new DDTeamInfo( i, reader );

					m_PointA = reader.ReadItem() as DDWayPoint;
					m_PointB = reader.ReadItem() as DDWayPoint;

					break;
				}
			}
		}
예제 #5
0
파일: DoubleDom.cs 프로젝트: nathanvy/runuo
		public DDPlayerInfo( DDTeamInfo teamInfo, Mobile player )
		{
			m_TeamInfo = teamInfo;
			m_Player = player;
		}
예제 #6
0
        private void Finish_Callback()
        {
            List <DDTeamInfo> teams = new List <DDTeamInfo>();

            for (int i = 0; i < m_Context.Participants.Count; ++i)
            {
                DDTeamInfo teamInfo = m_Controller.TeamInfo[i % m_Controller.TeamInfo.Length];

                if (teamInfo != null)
                {
                    teams.Add(teamInfo);
                }
            }

            teams.Sort(delegate(DDTeamInfo a, DDTeamInfo b)
            {
                return(b.Score - a.Score);
            });

            Tournament tourny = m_Context.m_Tournament;

            StringBuilder sb = new StringBuilder();

            if (tourny != null && tourny.TournyType == TournyType.FreeForAll)
            {
                sb.Append(m_Context.Participants.Count * tourny.PlayersPerParticipant);
                sb.Append("-man FFA");
            }
            else if (tourny != null && tourny.TournyType == TournyType.RandomTeam)
            {
                sb.Append(tourny.ParticipantsPerMatch);
                sb.Append("-team");
            }
            else if (tourny != null && tourny.TournyType == TournyType.RedVsBlue)
            {
                sb.Append("Red v Blue");
            }
            else if (tourny != null && tourny.TournyType == TournyType.Faction)
            {
                sb.Append(tourny.ParticipantsPerMatch);
                sb.Append("-team Faction");
            }
            else if (tourny != null)
            {
                for (int i = 0; i < tourny.ParticipantsPerMatch; ++i)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append('v');
                    }

                    sb.Append(tourny.PlayersPerParticipant);
                }
            }

            if (m_Controller != null)
            {
                sb.Append(' ').Append(m_Controller.Title);
            }

            string title = sb.ToString();

            DDTeamInfo winner = (DDTeamInfo)(teams.Count > 0 ? teams[0] : null);

            for (int i = 0; i < teams.Count; ++i)
            {
                TrophyRank rank = TrophyRank.Bronze;

                if (i == 0)
                {
                    rank = TrophyRank.Gold;
                }
                else if (i == 1)
                {
                    rank = TrophyRank.Silver;
                }

                DDPlayerInfo leader = ((DDTeamInfo)teams[i]).Leader;

                foreach (DDPlayerInfo pl in ((DDTeamInfo)teams[i]).Players.Values)
                {
                    Mobile mob = pl.Player;

                    if (mob == null)
                    {
                        continue;
                    }

                    //"Red v Blue DD Champion"

                    sb = new StringBuilder();

                    sb.Append(title);

                    if (pl == leader)
                    {
                        sb.Append(" Leader");
                    }

                    if (pl.Score > 0)
                    {
                        sb.Append(": ");

                        sb.Append(pl.Score.ToString("N0"));
                        sb.Append(pl.Score == 1 ? " point" : " points");

                        if (pl.Kills > 0)
                        {
                            sb.Append(", ");
                            sb.Append(pl.Kills.ToString("N0"));
                            sb.Append(pl.Kills == 1 ? " kill" : " kills");
                        }

                        if (pl.Captures > 0)
                        {
                            sb.Append(", ");
                            sb.Append(pl.Captures.ToString("N0"));
                            sb.Append(pl.Captures == 1 ? " capture" : " captures");
                        }
                    }

                    Item item = new Trophy(sb.ToString(), rank);

                    if (pl == leader)
                    {
                        item.ItemID = 4810;
                    }

                    item.Name = String.Format("{0}, {1} team", item.Name, ((DDTeamInfo)teams[i]).Name.ToLower());

                    if (!mob.PlaceInBackpack(item))
                    {
                        mob.BankBox.DropItem(item);
                    }

                    int cash = pl.Score * 250;

                    if (cash > 0)
                    {
                        item = new BankCheck(cash);

                        if (!mob.PlaceInBackpack(item))
                        {
                            mob.BankBox.DropItem(item);
                        }

                        mob.SendMessage("You have been awarded a {0} trophy and {1:N0}gp for your participation in this tournament.", rank.ToString().ToLower(), cash);
                    }
                    else
                    {
                        mob.SendMessage("You have been awarded a {0} trophy for your participation in this tournament.", rank.ToString().ToLower());
                    }
                }
            }

            for (int i = 0; i < m_Context.Participants.Count; ++i)
            {
                Participant p = m_Context.Participants[i] as Participant;

                for (int j = 0; j < p.Players.Length; ++j)
                {
                    DuelPlayer dp = p.Players[j];

                    if (dp != null && dp.Mobile != null)
                    {
                        dp.Mobile.CloseGump(typeof(DDBoardGump));
                        dp.Mobile.SendGump(new DDBoardGump(dp.Mobile, this));
                    }
                }

                if (i == winner.TeamID)
                {
                    continue;
                }

                for (int j = 0; j < p.Players.Length; ++j)
                {
                    if (p.Players[j] != null)
                    {
                        p.Players[j].Eliminated = true;
                    }
                }
            }

            m_Context.Finish(m_Context.Participants[winner.TeamID] as Participant);
        }
예제 #7
0
 public DDPlayerInfo(DDTeamInfo teamInfo, Mobile player)
 {
     m_TeamInfo = teamInfo;
     m_Player   = player;
 }
예제 #8
0
        private void CaptureTick()
        {
            DDTeamInfo team = null;

            if (m_Controller.PointA != null && m_Controller.PointA.TeamOwner != null)
            {
                team = m_Controller.PointA.TeamOwner;
            }
            else if (m_Controller.PointB != null && m_Controller.PointB.TeamOwner != null)
            {
                team = m_Controller.PointB.TeamOwner;
            }

            if (team == null)
            {
                m_Capturable = true;
                if (m_CaptureTimer != null)
                {
                    m_CaptureTimer.Stop();
                }
                m_CaptureTimer = null;
                return;
            }

            if (++m_CapStage < 10)
            {
                Alert("{0} is dominating... {1}", team.Name, 10 - m_CapStage);

                if (m_Controller.PointA != null)
                {
                    m_Controller.PointA.SetCaptureHue(m_CapStage);
                }

                if (m_Controller.PointB != null)
                {
                    m_Controller.PointB.SetCaptureHue(m_CapStage);
                }
            }
            else
            {
                Alert("{0} has scored!", team.Name);

                team.Score    += 100;
                team.Captures += 1;

                m_Capturable = false;
                m_CapStage   = 0;
                m_CaptureTimer.Stop();
                m_CaptureTimer = null;

                if (m_Controller.PointA != null)
                {
                    m_Controller.PointA.TeamOwner = null;
                    m_Controller.PointA.SetUncapturableHue();
                }

                if (m_Controller.PointB != null)
                {
                    m_Controller.PointB.TeamOwner = null;
                    m_Controller.PointB.SetUncapturableHue();
                }

                m_UncaptureTimer = Timer.DelayCall(TimeSpan.FromSeconds(30.0), new TimerCallback(UncaptureTick));
                m_UncaptureTimer.Start();
            }
        }
예제 #9
0
        public DDBoardGump(Mobile mob, DDGame game, DDTeamInfo section)
            : base(60, 60)
        {
            m_Game = game;

            DDTeamInfo ourTeam = game.GetTeamInfo(mob);

            List <IRankedCTF> entries = new List <IRankedCTF>();

            if (section == null)
            {
                for (int i = 0; i < game.Context.Participants.Count; ++i)
                {
                    DDTeamInfo teamInfo = game.Controller.TeamInfo[i % game.Controller.TeamInfo.Length];

                    if (teamInfo != null)
                    {
                        entries.Add(teamInfo);
                    }
                }
            }
            else
            {
                foreach (DDPlayerInfo player in section.Players.Values)
                {
                    if (player.Score > 0)
                    {
                        entries.Add(player);
                    }
                }
            }

            entries.Sort(delegate(IRankedCTF a, IRankedCTF b)
            {
                return(b.Score - a.Score);
            });

            int height = 0;

            if (section == null)
            {
                height = 73 + (entries.Count * 75) + 28;
            }

            Closable = false;

            AddPage(0);

            AddBackground(1, 1, 398, height, 3600);

            AddImageTiled(16, 15, 369, height - 29, 3604);

            for (int i = 0; i < entries.Count; i += 1)
            {
                AddImageTiled(22, 58 + (i * 75), 357, 70, 0x2430);
            }

            AddAlphaRegion(16, 15, 369, height - 29);

            AddImage(215, -45, 0xEE40);
            //AddImage( 330, 141, 0x8BA );

            AddBorderedText(22, 22, 294, 20, Center("DD Scoreboard"), LabelColor32, BlackColor32);

            AddImageTiled(32, 50, 264, 1, 9107);
            AddImageTiled(42, 52, 264, 1, 9157);

            if (section == null)
            {
                for (int i = 0; i < entries.Count; ++i)
                {
                    DDTeamInfo teamInfo = entries[i] as DDTeamInfo;

                    AddImage(30, 70 + (i * 75), 10152);
                    AddImage(30, 85 + (i * 75), 10151);
                    AddImage(30, 100 + (i * 75), 10151);
                    AddImage(30, 106 + (i * 75), 10154);

                    AddImage(24, 60 + (i * 75), teamInfo == ourTeam ? 9730 : 9727, teamInfo.Color - 1);

                    int nameColor   = LabelColor32;
                    int borderColor = BlackColor32;

                    switch (teamInfo.Color)
                    {
                    case 0x47E:
                        nameColor = 0xFFFFFF;
                        break;

                    case 0x4F2:
                        nameColor = 0x3399FF;
                        break;

                    case 0x4F7:
                        nameColor = 0x33FF33;
                        break;

                    case 0x4FC:
                        nameColor = 0xFF00FF;
                        break;

                    case 0x021:
                        nameColor = 0xFF3333;
                        break;

                    case 0x01A:
                        nameColor = 0xFF66FF;
                        break;

                    case 0x455:
                        nameColor   = 0x333333;
                        borderColor = 0xFFFFFF;
                        break;
                    }

                    AddBorderedText(60, 65 + (i * 75), 250, 20, String.Format("{0}: {1}", LadderGump.Rank(1 + i), teamInfo.Name), nameColor, borderColor);

                    AddBorderedText(50 + 10, 85 + (i * 75), 100, 20, "Score:", 0xFFC000, BlackColor32);
                    AddBorderedText(50 + 15, 105 + (i * 75), 100, 20, teamInfo.Score.ToString("N0"), 0xFFC000, BlackColor32);

                    AddBorderedText(110 + 10, 85 + (i * 75), 100, 20, "Kills:", 0xFFC000, BlackColor32);
                    AddBorderedText(110 + 15, 105 + (i * 75), 100, 20, teamInfo.Kills.ToString("N0"), 0xFFC000, BlackColor32);

                    AddBorderedText(160 + 10, 85 + (i * 75), 100, 20, "Captures:", 0xFFC000, BlackColor32);
                    AddBorderedText(160 + 15, 105 + (i * 75), 100, 20, teamInfo.Captures.ToString("N0"), 0xFFC000, BlackColor32);

                    DDPlayerInfo pl = teamInfo.Leader;

                    AddBorderedText(235 + 10, 85 + (i * 75), 250, 20, "Leader:", 0xFFC000, BlackColor32);

                    if (pl != null)
                    {
                        AddBorderedText(235 + 15, 105 + (i * 75), 250, 20, pl.Player.Name, 0xFFC000, BlackColor32);
                    }
                }
            }
            else
            {
            }

            AddButton(314, height - 42, 247, 248, 1, GumpButtonType.Reply, 0);
        }