public override void OnTick() { CheckForDisqualification(); // check for anyone carrying flags if (HomeBases != null) { ArrayList dlist = null; foreach (CTFBase b in HomeBases) { if (b == null || b.Deleted) { if (dlist == null) { dlist = new ArrayList(); } dlist.Add(b); continue; } if (!b.Deleted && b.Flag != null && !b.Flag.Deleted) { if (b.Flag.RootParent is Mobile) { Mobile m = b.Flag.RootParent as Mobile; // make sure a participant has it IChallengeEntry entry = GetParticipant(m); if (entry != null) { // display the flag //m.PublicOverheadMessage( MessageType.Regular, BaseChallengeGame.TeamColor(b.Team), false, b.Team.ToString()); Effects.SendTargetParticles(m, 0x375A, 35, 10, BaseChallengeGame.TeamColor(b.Team), 0x00, 9502, (EffectLayer)255, 0x100); } else { b.ReturnFlag(); } } else // if the flag somehow ends up on the ground, send it back to the base if (!b.HasFlag) { b.ReturnFlag(); } } } if (dlist != null) { foreach (CTFBase b in dlist) { HomeBases.Remove(b); } } } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 0: int count = reader.ReadInt(); for (int i = 0; i < count; i++) { CTFBase b = reader.ReadItem() as CTFBase; HomeBases.Add(b); } m_Challenger = reader.ReadMobile(); m_Organizers.Add(m_Challenger); m_GameLocked = reader.ReadBool(); m_GameInProgress = reader.ReadBool(); m_TotalPurse = reader.ReadInt(); m_EntryFee = reader.ReadInt(); m_ArenaSize = reader.ReadInt(); m_TargetScore = reader.ReadInt(); m_MatchLength = reader.ReadTimeSpan(); TimeSpan elapsed = reader.ReadTimeSpan(); if (elapsed > TimeSpan.Zero) { m_MatchStart = DateTime.Now - elapsed; } m_MatchEnd = reader.ReadDateTime(); count = reader.ReadInt(); for (int i = 0; i < count; i++) { ChallengeEntry entry = new ChallengeEntry(); entry.Participant = reader.ReadMobile(); string sname = reader.ReadString(); // look up the enum by name ChallengeStatus status = ChallengeStatus.None; try{ status = (ChallengeStatus)Enum.Parse(typeof(ChallengeStatus), sname); } catch {} entry.Status = status; entry.Accepted = reader.ReadBool(); entry.PageBeingViewed = reader.ReadInt(); entry.Score = reader.ReadInt(); entry.Winner = reader.ReadBool(); entry.Team = reader.ReadInt(); Participants.Add(entry); } break; } if (GameCompleted) { Timer.DelayCall(PostGameDecayTime, new TimerCallback(Delete)); } // start the challenge timer StartChallengeTimer(); SetNameHue(); }