public static int GetPlayerTaskCount(MHSGroupType groupType, PlayerMobile player) { int count = 0; if (player == null) { return(count); } MHSPersistance.CheckAndCreateMHSAccountEntry(player); foreach (MHSCreaturePlayerEntry creatureEntry in player.m_MHSPlayerEntry.m_CreatureEntries) { if (creatureEntry.m_GroupType != groupType) { continue; } foreach (MHSCreatureTaskPlayerEntry taskEntry in creatureEntry.m_Tasks) { if (taskEntry.m_TimesCompleted > 0) { count++; } } } return(count); }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); //Version 0 if (version >= 0) { m_PlayerMobile = (PlayerMobile)reader.ReadMobile(); m_GrimoirePage = (GrimoirePage)reader.ReadInt(); m_BossPageNumber = reader.ReadInt(); m_ChampionPageNumber = reader.ReadInt(); m_LoHBossPageNumber = reader.ReadInt(); m_RarePageNumber = reader.ReadInt(); m_ParagonPageNumber = reader.ReadInt(); m_TotalPointsEarned = reader.ReadInt(); m_AvailablePoints = reader.ReadInt(); int creatureEntriesCount = reader.ReadInt(); for (int a = 0; a < creatureEntriesCount; a++) { Type creatureType = Type.GetType(reader.ReadString()); MHSGroupType groupType = (MHSGroupType)reader.ReadInt(); int timesKilled = reader.ReadInt(); DateTime lastKilled = reader.ReadDateTime(); MHSCreaturePlayerEntry creaturePlayerEntry = new MHSCreaturePlayerEntry(creatureType, groupType); creaturePlayerEntry.m_TimesKilled = timesKilled; creaturePlayerEntry.m_LastKilled = lastKilled; int taskCount = reader.ReadInt(); for (int b = 0; b < taskCount; b++) { MHSTaskType taskType = (MHSTaskType)reader.ReadInt(); int timesCompleted = reader.ReadInt(); DateTime lastCompleted = reader.ReadDateTime(); MHSCreatureTaskPlayerEntry taskEntry = new MHSCreatureTaskPlayerEntry(taskType); taskEntry.m_TimesCompleted = timesCompleted; taskEntry.m_LastTimeCompleted = lastCompleted; creaturePlayerEntry.m_Tasks.Add(taskEntry); } m_CreatureEntries.Add(creaturePlayerEntry); } } //--------- MHSPersistance.m_PlayerEntries.Add(this); }
public static List <MHSCreatureTask> GetCreatureTasks(MHSGroupType groupType) { List <MHSCreatureTask> m_Tasks = new List <MHSCreatureTask>(); switch (groupType) { case MHSGroupType.Boss: m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage66PercentOfTotalNoPoisonOrCreatureDamage, false, 8)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage66PercentOfTotal, false, 7)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage33PercentOfTotalNoPoisonOrCreatureDamage, false, 6)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage33PercentOfTotal, false, 5)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage5PercentOfTotal, true, 3)); break; case MHSGroupType.Champion: m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage95PercentOfTotalNoPoisonOrCreatureDamage, false, 6)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage95PercentOfTotal, false, 5)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage66PercentOfTotalNoPoisonOrCreatureDamage, false, 4)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage66PercentOfTotal, false, 3)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage5PercentOfTotal, true, 2)); break; case MHSGroupType.LoHBoss: m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage66PercentOfTotalNoPoisonOrCreatureDamage, false, 6)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage66PercentOfTotal, false, 5)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage33PercentOfTotalNoPoisonOrCreatureDamage, false, 4)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage33PercentOfTotal, false, 3)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage5PercentOfTotal, true, 2)); break; case MHSGroupType.Rare: m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage95PercentOfTotalNoPoisonOrCreatureDamage, false, 5)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage95PercentOfTotal, false, 4)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage5PercentOfTotalNoPoisonOrCreatureDamage, false, 3)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage5PercentOfTotal, true, 2)); break; case MHSGroupType.Paragon: m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage95PercentOfTotalNoPoisonOrCreatureDamage, false, 4)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage95PercentOfTotal, false, 3)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage5PercentOfTotalNoPoisonOrCreatureDamage, false, 2)); m_Tasks.Add(new MHSCreatureTask(MHSTaskType.Damage5PercentOfTotal, true, 1)); break; } return(m_Tasks); }
public static int GetGroupTypeTextHue(MHSGroupType groupType) { int hue = 0; switch (groupType) { case MHSGroupType.Boss: hue = BossTextHue; break; case MHSGroupType.Champion: hue = ChampionTextHue; break; case MHSGroupType.LoHBoss: hue = LoHBossTextHue; break; case MHSGroupType.Rare: hue = RareTextHue; break; case MHSGroupType.Paragon: hue = ParagonTextHue; break; } return(hue); }
public static string GetGroupTypeName(MHSGroupType groupType) { string name = ""; switch (groupType) { case MHSGroupType.Boss: name = "Boss"; break; case MHSGroupType.Champion: name = "Champion"; break; case MHSGroupType.LoHBoss: name = "League of Heroes"; break; case MHSGroupType.Rare: name = "Rare"; break; case MHSGroupType.Paragon: name = "Paragon"; break; } return(name); }
public MHSCreatureEntryGump(PlayerMobile player) : base(7, 7) { if (player == null) { return; } if (player.Deleted) { return; } MHSPersistance.CheckAndCreateMHSAccountEntry(player); Closable = true; Disposable = true; Dragable = true; Resizable = false; AddImage(205, 193, 11010); AddImage(204, 1, 11010); AddImage(3, 192, 11010); AddImage(3, 1, 11010); AddImage(301, 265, 2081); AddImage(300, 12, 2081); AddImage(301, 79, 2081); AddImage(302, 142, 2081); AddImage(301, 207, 2081); AddImage(299, 335, 2081); AddImage(43, 266, 2081); AddImage(41, 14, 2081); AddImage(43, 83, 2081); AddImage(43, 145, 2081); AddImage(43, 209, 2081); AddImage(41, 335, 2081); AddImage(43, 334, 2081); AddImage(220, 13, 2440); AddItem(131, 297, 6873); AddItem(154, 319, 6872); AddItem(124, 277, 6874); AddItem(149, 277, 6875); AddItem(177, 297, 6876); AddItem(194, 292, 6877); AddItem(203, 301, 6922); AddItem(162, 315, 6923); AddItem(104, 300, 6924); AddItem(143, 330, 6925); AddItem(192, 323, 6938); //---------------------------- int whiteTextHue = 2499; int greenTextHue = 0x3F; int greyTextHue = 2401; int blueTextHue = 2603; int yellowTextHue = 2550; int lightGreenTextHue = 2599; int orangeTextHue = 149; int purpleTextHue = 1164; int lightPurpleTextHue = 2628; int bossTextHue = 2115; int championTextHue = 2603; int LoHBossTextHue = 2607; int rareTextHue = 1101; int paragonTextHue = 2124; int pageNumber = 1; int maxPageCount = 1; string creatureTypeText = ""; int creatureTypeHue = bossTextHue; string creatureNameText = ""; int creatureNameHue = bossTextHue; string creatureTitleText = ""; int creatureTitleHue = yellowTextHue; int creatureIconItemId = 9780; int creatureIconHue = 0; int creatureIconOffsetX = 0; int creatureIconOffsetY = 0; int timesKilled = 0; string lastKilled = ""; MHSGroupType groupType = MHSGroupType.Boss; Type creatureType = null; switch (player.m_MHSPlayerEntry.m_GrimoirePage) { case MHSPlayerEntry.GrimoirePage.Boss: groupType = MHSGroupType.Boss; pageNumber = player.m_MHSPlayerEntry.m_BossPageNumber; maxPageCount = MHSCreatures.BossList.Count; creatureType = MHSCreatures.BossList[pageNumber - 1]; creatureTypeText = "Bosses"; creatureTypeHue = bossTextHue; creatureNameHue = bossTextHue; break; case MHSPlayerEntry.GrimoirePage.Champion: groupType = MHSGroupType.Champion; pageNumber = player.m_MHSPlayerEntry.m_ChampionPageNumber; maxPageCount = MHSCreatures.ChampionList.Count; creatureType = MHSCreatures.ChampionList[pageNumber - 1]; creatureTypeText = "Champions"; creatureTypeHue = championTextHue; creatureNameHue = championTextHue; break; case MHSPlayerEntry.GrimoirePage.LoHBoss: groupType = MHSGroupType.LoHBoss; pageNumber = player.m_MHSPlayerEntry.m_LoHBossPageNumber; maxPageCount = MHSCreatures.LoHBossList.Count; creatureType = MHSCreatures.LoHBossList[pageNumber - 1]; creatureTypeText = "League of Heroes"; creatureTypeHue = LoHBossTextHue; creatureNameHue = LoHBossTextHue; break; case MHSPlayerEntry.GrimoirePage.Rare: groupType = MHSGroupType.Rare; pageNumber = player.m_MHSPlayerEntry.m_RarePageNumber; maxPageCount = MHSCreatures.RareList.Count; creatureType = MHSCreatures.RareList[pageNumber - 1]; creatureTypeText = "Rare Creatures"; creatureTypeHue = rareTextHue; creatureNameHue = rareTextHue; break; case MHSPlayerEntry.GrimoirePage.Paragon: groupType = MHSGroupType.Paragon; pageNumber = player.m_MHSPlayerEntry.m_ParagonPageNumber; maxPageCount = MHSCreatures.ParagonList.Count; creatureType = MHSCreatures.ParagonList[pageNumber - 1]; creatureTypeText = "Paragons"; creatureTypeHue = paragonTextHue; creatureNameHue = paragonTextHue; break; } if (creatureType == null) { player.CloseGump(typeof(MHSCreatureEntryGump)); return; } MHSCreatureDetail creatureDetail = MHSCreatures.GetCreatureDetail(groupType, creatureType); creatureNameText = creatureDetail.m_Name; creatureTitleText = creatureDetail.m_Title; creatureIconItemId = creatureDetail.m_IconItemID; creatureIconHue = creatureDetail.m_IconHue; creatureIconOffsetX = creatureDetail.m_IconOffsetX; creatureIconOffsetY = creatureDetail.m_IconOffsetY; MHSCreaturePlayerEntry creaturePlayerEntry = MHSCreatures.GetCreaturePlayerEntry(player, groupType, creatureType); timesKilled = creaturePlayerEntry.m_TimesKilled; if (creaturePlayerEntry.m_LastKilled != DateTime.MaxValue) { lastKilled = creaturePlayerEntry.m_LastKilled.ToShortDateString(); } //Left Page AddLabel(Utility.CenteredTextOffset(305, creatureTypeText), 14, creatureTypeHue, creatureTypeText); //Creature Type AddLabel(Utility.CenteredTextOffset(180, creatureNameText), 40, creatureNameHue, creatureNameText); //Creature Name AddLabel(Utility.CenteredTextOffset(180, creatureTitleText), 60, creatureTitleHue, creatureTitleText); //Creature Title AddItem(148 + creatureIconOffsetX, 99 + creatureIconOffsetY, creatureIconItemId, creatureIconHue); //Creature Icon AddLabel(90, 195, whiteTextHue, "Times Killed"); AddItem(158, 199, 6884); AddLabel(198, 195, greenTextHue, timesKilled.ToString()); AddLabel(78, 225, whiteTextHue, "Last Kill Date"); AddItem(158, 221, 6160); AddLabel(195, 225, greenTextHue, lastKilled); AddButton(83, 372, 2151, 2154, 1, GumpButtonType.Reply, 0); AddLabel(117, 376, greenTextHue, "Go to Table of Contents"); //Right Page AddLabel(405, 40, orangeTextHue, "Kill Tasks"); int startX = 310; int startY = 65; for (int a = 0; a < creatureDetail.m_Tasks.Count; a++) { MHSCreatureTask creatureTask = creatureDetail.m_Tasks[a]; string[] taskDescription = MHSCreatures.GetTaskDescription(creatureTask.m_TaskType); bool repeatable = creatureTask.m_Repeatable; int pointsGranted = creatureTask.m_PointsGranted; int timesCompleted = 0; DateTime lastCompleted = DateTime.MaxValue; foreach (MHSCreatureTaskPlayerEntry creaturePlayerTask in creaturePlayerEntry.m_Tasks) { if (creaturePlayerTask.m_TaskType == creatureTask.m_TaskType) { timesCompleted = creaturePlayerTask.m_TimesCompleted; lastCompleted = creaturePlayerTask.m_LastTimeCompleted; break; } } if (timesCompleted > 0 && !repeatable) { AddImage(startX, startY, 9730, 0); } else { AddImage(startX, startY, 9727, 0); } startY += 3; for (int b = 0; b < taskDescription.Length; b++) { string descriptionText = taskDescription[b]; if (timesCompleted > 0 && !repeatable) { AddLabel(startX + 40, startY, greyTextHue, descriptionText); } else { AddLabel(startX + 40, startY, whiteTextHue, descriptionText); } startY += 18; } int pointsX = 438; string text = pointsGranted.ToString() + " Points"; AddLabel(Utility.CenteredTextOffset(pointsX, text), startY, lightGreenTextHue, text); if (repeatable) { text = "(Repeatable Task)"; startY += 18; AddLabel(Utility.CenteredTextOffset(pointsX + 5, text), startY, blueTextHue, text); } startY += 25; } //Store Values m_PageNumber = pageNumber; m_MaxPageCount = maxPageCount; if (pageNumber <= maxPageCount && pageNumber > 1) { AddButton(345, 378, 4014, 4014, 10, GumpButtonType.Reply, 0); //Previous } string pagePosition = "Page " + pageNumber.ToString() + " of " + maxPageCount.ToString(); AddLabel(Utility.CenteredTextOffset(430, pagePosition), 378, 2499, pagePosition); if (pageNumber < maxPageCount) { AddButton(490, 378, 4007, 4007, 11, GumpButtonType.Reply, 0); //Next } }
public MHSCreaturePlayerEntry(Type type, MHSGroupType groupType) { m_CreatureType = type; m_GroupType = groupType; }
public static void ResolveCreatureKilled(MHSGroupType groupType, BaseCreature creature, PlayerMobile player, double damagePercent, bool takenPoisonDamage, bool takenCreatureDamage) { List <MHSCreatureTask> creatureTasks = MHSCreatures.GetCreatureTasks(groupType); MHSCreaturePlayerEntry creaturePlayerEntry = MHSCreatures.GetCreaturePlayerEntry(player, groupType, creature.GetType()); MHSCreatureTaskPlayerEntry bestValidTask = null; int highestTaskPoints = 0; int creatureIndex = -1; int taskIndex = -1; foreach (MHSCreatureTask creatureTask in creatureTasks) { bool taskSuccessful = false; switch (creatureTask.m_TaskType) { case MHSTaskType.Damage5PercentOfTotal: if (damagePercent >= .05) { taskSuccessful = true; } break; case MHSTaskType.Damage5PercentOfTotalNoPoisonOrCreatureDamage: if (damagePercent >= .05 && !takenPoisonDamage && !takenCreatureDamage) { taskSuccessful = true; } break; case MHSTaskType.Damage33PercentOfTotal: if (damagePercent >= .33) { taskSuccessful = true; } break; case MHSTaskType.Damage33PercentOfTotalNoPoisonOrCreatureDamage: if (damagePercent >= .33 && !takenPoisonDamage && !takenCreatureDamage) { taskSuccessful = true; } break; case MHSTaskType.Damage66PercentOfTotal: if (damagePercent >= .66) { taskSuccessful = true; } break; case MHSTaskType.Damage66PercentOfTotalNoPoisonOrCreatureDamage: if (damagePercent >= .66 && !takenPoisonDamage && !takenCreatureDamage) { taskSuccessful = true; } break; case MHSTaskType.Damage95PercentOfTotal: if (damagePercent >= .95) { taskSuccessful = true; } break; case MHSTaskType.Damage95PercentOfTotalNoPoisonOrCreatureDamage: if (damagePercent >= .95 && !takenPoisonDamage && !takenCreatureDamage) { taskSuccessful = true; } break; } if (!taskSuccessful) { continue; } MHSCreatureTaskPlayerEntry playerTaskEntry = null; int index = 0; for (int a = 0; a < creaturePlayerEntry.m_Tasks.Count; a++) { if (creatureTask.m_TaskType == creaturePlayerEntry.m_Tasks[a].m_TaskType) { playerTaskEntry = creaturePlayerEntry.m_Tasks[a]; break; } } if (playerTaskEntry == null) { playerTaskEntry = new MHSCreatureTaskPlayerEntry(creatureTask.m_TaskType); creaturePlayerEntry.m_Tasks.Add(playerTaskEntry); index = creaturePlayerEntry.m_Tasks.Count - 1; } if (playerTaskEntry.m_TimesCompleted > 0 && !creatureTask.m_Repeatable) { continue; } if (creatureTask.m_PointsGranted > highestTaskPoints) { highestTaskPoints = creatureTask.m_PointsGranted; bestValidTask = playerTaskEntry; } } if (highestTaskPoints > 0 && bestValidTask != null) { creaturePlayerEntry.m_TimesKilled++; creaturePlayerEntry.m_LastKilled = DateTime.UtcNow; bestValidTask.m_TimesCompleted++; bestValidTask.m_LastTimeCompleted = DateTime.UtcNow; player.m_MHSPlayerEntry.m_AvailablePoints += highestTaskPoints; player.m_MHSPlayerEntry.m_TotalPointsEarned += highestTaskPoints; MHSCreatureDetail creatureDetail = MHSCreatures.GetCreatureDetail(groupType, creature.GetType()); string creatureName = creatureDetail.m_Name; string groupName = MHSCreatures.GetGroupTypeName(groupType); string[] taskDescription = MHSCreatures.GetTaskDescription(bestValidTask.m_TaskType); string taskName = ""; int textHue = GetGroupTypeTextHue(groupType); for (int a = 0; a < taskDescription.Length; a++) { taskName += taskDescription[a]; if (a != taskDescription.Length - 1) { taskName += " "; } } string message = "You have earned " + highestTaskPoints.ToString() + " points in the Monster Hunter's Society for the task of: " + creatureName + " [" + groupName + "]" + " - " + taskName + "."; player.SendMessage(textHue, message); player.FixedEffect(0x373A, 10, 30, 0, 0); player.PlaySound(0x5A7); } }
public static MHSCreaturePlayerEntry GetCreaturePlayerEntry(PlayerMobile player, MHSGroupType groupType, Type creatureType) { MHSPersistance.CheckAndCreateMHSAccountEntry(player); foreach (MHSCreaturePlayerEntry creatureEntry in player.m_MHSPlayerEntry.m_CreatureEntries) { if (creatureEntry.m_CreatureType == creatureType && creatureEntry.m_GroupType == groupType) { return(creatureEntry); } } MHSCreaturePlayerEntry newEntry = new MHSCreaturePlayerEntry(creatureType, groupType); player.m_MHSPlayerEntry.m_CreatureEntries.Add(newEntry); return(newEntry); }
public static MHSCreatureDetail GetCreatureDetail(MHSGroupType groupType, Type creatureType) { MHSCreatureDetail creatureDetail = new MHSCreatureDetail(); switch (groupType) { #region Bosses case MHSGroupType.Boss: if (creatureType == typeof(TheDeepOne)) { creatureDetail.m_Name = "The Deep One"; creatureDetail.m_Title = "Oceanic Terror"; creatureDetail.m_IconItemID = 17037; creatureDetail.m_IconHue = 2569; creatureDetail.m_IconOffsetX = 0; creatureDetail.m_IconOffsetY = 0; } if (creatureType == typeof(EmperorDragon)) { creatureDetail.m_Name = "Lyth the Destroyer"; creatureDetail.m_Title = "Emperor Dragon"; creatureDetail.m_IconItemID = 9780; creatureDetail.m_IconHue = 0; creatureDetail.m_IconOffsetX = 0; creatureDetail.m_IconOffsetY = 0; } if (creatureType == typeof(DemonwebQueen)) { creatureDetail.m_Name = "Demonweb Queen"; creatureDetail.m_Title = "Arachnid Matriarch"; creatureDetail.m_IconItemID = 8531; creatureDetail.m_IconHue = 0; creatureDetail.m_IconOffsetX = 0; creatureDetail.m_IconOffsetY = 0; } if (creatureType == typeof(Maggot)) { creatureDetail.m_Name = "Maggot"; creatureDetail.m_Title = "Diseased Behemoth"; creatureDetail.m_IconItemID = 11650; creatureDetail.m_IconHue = 0; creatureDetail.m_IconOffsetX = 0; creatureDetail.m_IconOffsetY = 0; } if (creatureType == typeof(AncientNecromancer)) { creatureDetail.m_Name = "Ancient Necromancer"; creatureDetail.m_Title = "Eldritch Horror"; creatureDetail.m_IconItemID = 17050; creatureDetail.m_IconHue = 0; creatureDetail.m_IconOffsetX = 0; creatureDetail.m_IconOffsetY = 0; } break; #endregion #region Champions case MHSGroupType.Champion: if (creatureType == typeof(Atraxis)) { } break; #endregion #region LoH Boss case MHSGroupType.LoHBoss: /* * if (creatureType == typeof(SuperOgreLord)) * { * } */ break; #endregion #region Rare case MHSGroupType.Rare: if (creatureType == typeof(Dragon)) { } break; #endregion #region Paragon case MHSGroupType.Paragon: if (creatureType == typeof(Dragon)) { } break; #endregion } //Assign Tasks List <MHSCreatureTask> m_Tasks = GetCreatureTasks(groupType); foreach (MHSCreatureTask task in m_Tasks) { creatureDetail.m_Tasks.Add(new MHSCreatureTask(task.m_TaskType, task.m_Repeatable, task.m_PointsGranted)); } return(creatureDetail); }