public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 0: { m_ScoreInterval = reader.ReadEncodedInt(); m_Duration = reader.ReadTimeSpan(); m_Boards = reader.ReadItemList(); m_Hills = new HillOfTheKing[reader.ReadEncodedInt()]; for (int i = 0; i < m_Hills.Length; ++i) { m_Hills[i] = reader.ReadItem() as HillOfTheKing; } m_TeamInfo = new KHTeamInfo[reader.ReadEncodedInt()]; for (int i = 0; i < m_TeamInfo.Length; ++i) { m_TeamInfo[i] = new KHTeamInfo(i, reader); } break; } } }
private void ReKingify(Mobile m) { KHTeamInfo ti = null; if (m_Game == null || m == null) { return; } ti = m_Game.GetTeamInfo(m); if (ti == null) { return; } m_King = m; if (m_KingTimer == null) { m_KingTimer = new KingTimer(this); } m_KingTimer.Stop(); m_KingTimer.StartHillTicker(); if (m_King.Name != null) { PublicOverheadMessage(MessageType.Regular, 0x0481, false, String.Format("Taken by {0}!", m_King.Name)); } }
public int GetColor(Mobile mob) { KHTeamInfo teamInfo = GetTeamInfo(mob); if (teamInfo != null) { return(teamInfo.Color); } return(-1); }
public override bool OnDeath(Mobile mob, Container corpse) { Mobile killer = mob.FindMostRecentDamager(false); KHTeamInfo teamInfo = null; KHTeamInfo victInfo = GetTeamInfo(mob); int bonus = 0; if (killer != null && killer.Player) { teamInfo = GetTeamInfo(killer); } for (int i = 0; i < m_Controller.Hills.Length; i++) { if (m_Controller.Hills[i] == null) { continue; } if (m_Controller.Hills[i].King == mob) { bonus += m_Controller.Hills[i].CapturesSoFar; m_Controller.Hills[i].OnKingDied(mob, victInfo, killer, teamInfo); } if (m_Controller.Hills[i].King == killer) { bonus += 2; } } if (teamInfo != null && teamInfo != victInfo) { KHPlayerInfo playerInfo = teamInfo[killer]; if (playerInfo != null) { playerInfo.Kills += 1; playerInfo.Score += 1 + bonus; } } mob.CloseGump(typeof(KHBoardGump)); mob.SendGump(new KHBoardGump(mob, this)); m_Context.Requip(mob, corpse); DelayBounce(TimeSpan.FromSeconds(30.0), mob, corpse); return(false); }
public int CompareTo(object obj) { KHTeamInfo ti = (KHTeamInfo)obj; int res = ti.Score.CompareTo(this.Score); if (res == 0) { res = ti.Captures.CompareTo(this.Captures); if (res == 0) { res = ti.Kills.CompareTo(this.Kills); } } return(res); }
public KHController() { Visible = false; Movable = false; Name = "King of the Hill Controller"; m_Duration = TimeSpan.FromMinutes(30.0); m_Boards = new ArrayList(); m_Hills = new HillOfTheKing[4]; m_TeamInfo = new KHTeamInfo[8]; for (int i = 0; i < m_TeamInfo.Length; ++i) { m_TeamInfo[i] = new KHTeamInfo(i); } }
public virtual void OnKingDied(Mobile king, KHTeamInfo kingTeam, Mobile killer, KHTeamInfo killerTeam) { if (m_Game != null && CapturesSoFar > 0 && killer != null && king != null && kingTeam != null && killerTeam != null) { string kingName = king.Name; if (kingName == null) { kingName = ""; } string killerName = killer.Name; if (killerName == null) { killerName = ""; } m_Game.Alert("{0} ({1}) was dethroned by {2} ({3})!", kingName, kingTeam.Name, killerName, killerTeam.Name); } DeKingify(); }
public override void OnStart() { for (int i = 0; i < m_Controller.TeamInfo.Length; ++i) { KHTeamInfo teamInfo = m_Controller.TeamInfo[i]; teamInfo.Game = this; teamInfo.Reset(); } for (int i = 0; i < m_Context.Participants.Count; ++i) { ApplyHues(m_Context.Participants[i] as Participant, m_Controller.TeamInfo[i % m_Controller.TeamInfo.Length].Color); } if (m_FinishTimer != null) { m_FinishTimer.Stop(); } for (int i = 0; i < m_Controller.Hills.Length; i++) { if (m_Controller.Hills[i] != null) { m_Controller.Hills[i].Game = this; } } foreach (KHBoard board in m_Controller.Boards) { if (board != null && !board.Deleted) { board.m_Game = this; } } m_FinishTimer = Timer.DelayCall(m_Controller.Duration, new TimerCallback(Finish_Callback)); }
public KHPlayerInfo(KHTeamInfo teamInfo, Mobile player) { m_TeamInfo = teamInfo; m_Player = player; }
public KHBoardGump(Mobile mob, KHGame game) : base(60, 60) { m_Game = game; KHTeamInfo ourTeam = game.GetTeamInfo(mob); ArrayList entries = new ArrayList(); for (int i = 0; i < game.Context.Participants.Count; ++i) { KHTeamInfo teamInfo = game.Controller.TeamInfo[i % game.Controller.TeamInfo.Length]; if (teamInfo == null) { continue; } entries.Add(teamInfo); } entries.Sort(); /* * delegate( IRankedCTF a, IRankedCTF b ) * { * return b.Score - a.Score; * } );*/ int 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("King of the Hill Scoreboard"), LabelColor32, BlackColor32); AddImageTiled(32, 50, 264, 1, 9107); AddImageTiled(42, 52, 264, 1, 9157); for (int i = 0; i < entries.Count; ++i) { KHTeamInfo teamInfo = entries[i] as KHTeamInfo; 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); string leader = null; if (teamInfo.Leader != null) { leader = teamInfo.Leader.Name; } if (leader == null) { leader = "(none)"; } AddBorderedText(235 + 10, 85 + (i * 75), 250, 20, "Leader:", 0xFFC000, BlackColor32); AddBorderedText(235 + 15, 105 + (i * 75), 250, 20, leader, 0xFFC000, BlackColor32); } AddButton(314, height - 42, 247, 248, 1, GumpButtonType.Reply, 0); }
protected override void OnTick() { KHTeamInfo ti = null; KHPlayerInfo pi = null; if (m_Hill == null || m_Hill.Deleted || m_Hill.Game == null) { Stop(); return; } if (m_Hill.King == null || m_Hill.King.Deleted || !m_Hill.King.Alive) { m_Hill.DeKingify(); Stop(); return; } ti = m_Hill.Game.GetTeamInfo(m_Hill.King); if (ti != null) { pi = ti[m_Hill.King]; } if (ti == null || pi == null) { // error, bail m_Hill.DeKingify(); Stop(); return; } m_Counter++; m_Hill.King.RevealingAction(); if (m_Counter >= m_Hill.ScoreInterval) { string hill = m_Hill.Name; string king = m_Hill.King.Name; if (king == null) { king = ""; } if (hill == null || hill == "") { hill = "the hill"; } m_Hill.Game.Alert("{0} ({1}) is king of {2}!", king, ti.Name, hill); m_Hill.PublicOverheadMessage(MessageType.Regular, 0x0481, false, "Capture!"); pi.Captures++; m_Total++; pi.Score += m_Counter; m_Counter = 0; } else { m_Hill.PublicOverheadMessage(MessageType.Regular, 0x0481, false, (m_Hill.ScoreInterval - m_Counter).ToString()); } }
private void Finish_Callback() { ArrayList teams = new ArrayList(); for (int i = 0; i < m_Context.Participants.Count; ++i) { KHTeamInfo teamInfo = m_Controller.TeamInfo[i % m_Controller.TeamInfo.Length]; if (teamInfo == null) { continue; } teams.Add(teamInfo); } teams.Sort(); 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) { 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(); KHTeamInfo winner = (KHTeamInfo)(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; } KHPlayerInfo leader = ((KHTeamInfo)teams[i]).Leader; foreach (KHPlayerInfo pl in ((KHTeamInfo)teams[i]).Players.Values) { Mobile mob = pl.Player; if (mob == null) { continue; } 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"); 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}", item.Name, ((KHTeamInfo)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 game.", rank.ToString().ToLower(), cash); } else { mob.SendMessage("You have been awarded a {0} trophy for your participation in this game.", rank.ToString().ToLower()); } } } for (int i = 0; i < m_Context.Participants.Count; ++i) { Participant p = m_Context.Participants[i] as Participant; if (p == null || p.Players == null) { continue; } for (int j = 0; j < p.Players.Length; ++j) { DuelPlayer dp = p.Players[j]; if (dp != null && dp.Mobile != null) { dp.Mobile.CloseGump(typeof(KHBoardGump)); dp.Mobile.SendGump(new KHBoardGump(dp.Mobile, this)); } } if (i == winner.TeamID) { continue; } if (p != null && p.Players != null) { 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); }