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(); } }
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 ); }
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 ); }
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; } } }
public DDPlayerInfo( DDTeamInfo teamInfo, Mobile player ) { m_TeamInfo = teamInfo; m_Player = player; }
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); }
public DDPlayerInfo(DDTeamInfo teamInfo, Mobile player) { m_TeamInfo = teamInfo; m_Player = player; }
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(); } }
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); }