public async Task ListDungeons() { var account = UserAccounts.GetAccount(Context.User); var defaultDungeons = EnemiesDatabase.DefaultDungeons; var availableDefaultDungeons = defaultDungeons.Where(d => d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var unavailableDefaultDungeons = defaultDungeons.Where(d => !d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var unlockedDungeons = account.Dungeons.Select(s => EnemiesDatabase.GetDungeon(s)); var availablePermUnlocks = unlockedDungeons.Where(d => !d.IsOneTimeOnly && d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var unavailablePermUnlocks = unlockedDungeons.Where(d => !d.IsOneTimeOnly && !d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var availableOneTimeUnlocks = unlockedDungeons.Where(d => d.IsOneTimeOnly && d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var unavailableOneTimeUnlocks = unlockedDungeons.Where(d => d.IsOneTimeOnly && !d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var embed = new EmbedBuilder(); embed.WithTitle("Dungeons"); if (defaultDungeons.Count() > 0) { embed.AddField("<:town:606236181243625493> Default Unlocks", $"Available: {string.Join(", ", availableDefaultDungeons)} \n Unavailable: {string.Join(", ", unavailableDefaultDungeons)}"); } if (availablePermUnlocks.Count() > 0) { embed.AddField("<:mapopen:606236181503410176> Places Discovered", $"Available: {string.Join(", ", availablePermUnlocks)} \n Unavailable: {string.Join(", ", unavailablePermUnlocks)}"); } if (availableOneTimeUnlocks.Count() > 0) { embed.AddField("<:dungeonkey:606237382047694919> Dungeon Keys", $"Available: {string.Join(", ", availableOneTimeUnlocks)} \n Unavailable: {string.Join(", ", unavailableOneTimeUnlocks)}"); } await Context.Channel.SendMessageAsync("", false, embed.Build()); }
protected override int InternalChooseBestTarget(List <ColossoFighter> targets) { friends ??= EnemyNames.Select(e => EnemiesDatabase.GetEnemy(e)).ToList(); var deadFriends = targets.Where(s => friends.Any(f => f.Name.Equals(s.Name) && !s.IsAlive)).ToList(); //Console.WriteLine($"{deadFriends.Count} dead targets.({targets.First().Name})"); return(targets.IndexOf(deadFriends.Random())); }
public override List <string> Apply(ColossoFighter User, ColossoFighter Target) { List <string> log = new List <string>(); if (EnemyNames.Select(e => EnemiesDatabase.GetEnemy(e)).ToList().Any(e => e.Name.Equals(Target.Name))) { log.Add($"{Target.Name} is {(Target.IsAlive ? "alive" : "dead")}"); var Replacement = (NPCEnemy)EnemiesDatabase.GetEnemy(EnemyNames.Random()).Clone(); Target.ReplaceWith(Replacement); log.Add($"{Target.Name} appears!"); } return(log); }
public override List <string> Apply(ColossoFighter user, ColossoFighter target) { List <string> log = new(); _friends ??= EnemyNames.Select(EnemiesDatabase.GetEnemy).ToList(); if (!_friends.Any(e => e.Name.Equals(target.Name))) { return(log); } //log.Add($"{Target.Name} is {(Target.IsAlive ? "alive" : "dead")}"); var replacement = (NpcEnemy)EnemiesDatabase.GetEnemy(EnemyNames.Random()).Clone(); target.ReplaceWith(replacement); log.Add($"{target.Name} appears!"); return(log); }
public void SetEnemy(EnemiesDatabase.enemy enemyType) { type = enemyType; _name = EnemiesDatabase.GenerateName(enemyType); statsBase = new DictionaryHolder(); statsCurrent = new DictionaryHolder(); statsBase = EnemiesDatabase.EnemyStats(enemyType); element = EnemiesDatabase.GetElement(enemyType); statsCurrent = statsBase; healthMax = statsCurrent.health; healthCurrent = healthMax; spellPointsMax = statsCurrent.slime; spellPointsCurrent = spellPointsMax; expGiven = statsCurrent.expPool; }
private void DefendRoutine() { //randomizes between -1(basic attack) and skill count int randomSkill = 0; randomSkill = Random.Range(-1, EnemiesDatabase.EnemySkill(enemy.GetEnemyType()).Count); //deal damage if (randomSkill < 0) { //damage player.GetComponent <CharacterStats>().TakeDamage(enemy.BasicAttack(), DictionaryHolder.element.Neutral); //basic WriteToInfoLabel(string.Format("<color=purple>{0}</color> used Basic Attack. <color=red>{1}</color> damage.", enemy.GetComponent <Enemy>().GetEnemyName(), enemy.BasicAttack().ToString())); } else { if (enemy.CanUseSkill(EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill])) { //damage player.GetComponent <CharacterStats>().TakeDamage(enemy.GetComponent <Enemy>().SkillDamage(EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill]), EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].GetElement()); //skill WriteToInfoLabel(string.Format("<color=purple>{0}</color> uses <color=" + DictionaryHolder.ElementColor(EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].GetElement()) + ">{1}</color> and deals <color=red>{2}</color> damage.", enemy.GetComponent <Enemy>().GetEnemyName(), EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].GetName(), enemy.GetComponent <Enemy>().SkillDamage(EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill]).ToString())); //skill effect EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].UseEffect(); } else { //damage player.GetComponent <CharacterStats>().TakeDamage(enemy.BasicAttack(), DictionaryHolder.element.Neutral); //basic WriteToInfoLabel(string.Format("<color=purple>{0}</color> tried to use <color=gray>{1}</color>.\n<color=purple>{2}</color> used Basic Attack. <color=red>{3}</color> damage.", enemy.GetComponent <Enemy>().GetEnemyName(), EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].GetName(), enemy.GetComponent <Enemy>().GetEnemyName(), enemy.BasicAttack().ToString())); } } }
public async Task ListDungeons() { var account = EntityConverter.ConvertUser(Context.User); var defaultDungeons = EnemiesDatabase.DefaultDungeons.Where(d => !d.Requirement.IsLocked(account)); var availableDefaultDungeons = defaultDungeons.Where(d => d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var unavailableDefaultDungeons = defaultDungeons.Where(d => !d.Requirement.Applies(account)).Select(s => s.Name).ToArray(); var unlockedDungeons = account.Dungeons.Where(s => EnemiesDatabase.HasDungeon(s)).Select(s => EnemiesDatabase.GetDungeon(s)).Where(d => !d.Requirement.IsLocked(account)); var availablePermUnlocks = availableDefaultDungeons .Concat(unlockedDungeons.Where(d => !d.IsOneTimeOnly && d.Requirement.FulfilledRequirements(account)) .Select(s => s.Name) .ToArray()); var unavailablePermUnlocks = unavailableDefaultDungeons .Concat(unlockedDungeons.Where(d => !d.IsOneTimeOnly && !d.Requirement.FulfilledRequirements(account)) .Select(s => s.Name) .ToArray()); var availableOneTimeUnlocks = unlockedDungeons.Where(d => d.IsOneTimeOnly && d.Requirement.FulfilledRequirements(account)).Select(s => s.Name).ToArray(); var unavailableOneTimeUnlocks = unlockedDungeons.Where(d => d.IsOneTimeOnly && !d.Requirement.FulfilledRequirements(account)).Select(s => s.Name).ToArray(); var embed = new EmbedBuilder(); embed.WithTitle("Dungeons"); if (availablePermUnlocks.Count() > 0) { embed.AddField("<:mapopen:606236181503410176> Places Discovered", $"Available: {string.Join(", ", availablePermUnlocks)} \nUnavailable: {string.Join(", ", unavailablePermUnlocks)}"); } if (availableOneTimeUnlocks.Count() + unavailableOneTimeUnlocks.Count() > 0) { embed.AddField("<:cave:607402486562684944> Dungeon Keys", $"Available: {string.Join(", ", availableOneTimeUnlocks)} \nUnavailable: {string.Join(", ", unavailableOneTimeUnlocks)}"); } await Context.Channel.SendMessageAsync("", false, embed.Build()); }
public override string Award(UserAccount userAccount) { List <string> awardLog = new List <string>(); if (RequireTag.Count > 0 && !RequireTag.All(t => userAccount.Tags.Contains(t))) { return(""); } if (Obtainable > 0 && userAccount.Tags.Count(r => r.Equals(Tag)) >= Obtainable) { return(""); } var giveTag = true; userAccount.AddXp(xp); userAccount.Inv.AddBalance(coins); if (HasChest) { userAccount.Inv.AwardChest(Chest); awardLog.Add($"{userAccount.Name} found a {Inventory.ChestIcons[Chest]} {Chest} chest!"); } if (Item != "") { var item = ItemDatabase.GetItem(Item); if (userAccount.Inv.Add(Item)) { awardLog.Add($"{userAccount.Name} found a {item.Icon} {item.Name}!"); } else { giveTag = false; } } if (EnemiesDatabase.TryGetDungeon(Dungeon, out var dungeon)) { if (!userAccount.Dungeons.Contains(dungeon.Name)) { userAccount.Dungeons.Add(dungeon.Name); awardLog.Add($"{userAccount.Name} found a {(dungeon.IsOneTimeOnly ? "<:dungeonkey:606237382047694919> Key" : "<:mapclosed:606236181486632985> Map")} to {dungeon.Name}!"); } } if (DjinnAndSummonsDatabase.TryGetDjinn(Djinn, out var djinn)) { if (!userAccount.DjinnPocket.djinn.Any(d => d.Djinnname == djinn.Djinnname)) { if (userAccount.DjinnPocket.AddDjinn(djinn)) { awardLog.Add($"{userAccount.Name} found the {djinn.Element} djinni {djinn.Emote} {djinn.Name}!"); if (userAccount.DjinnPocket.djinn.Count == 1) { awardLog.Add($"You have found your first djinni, the {djinn.Element} djinni {djinn.Emote} {djinn.Name}. " + $"To view what it can do, use the djinninfo command `i!di {djinn.Name}` and to take it with you on your journey, use `i!djinn take {djinn.Name}`. " + $"In battle you can use a djinn to unleash its powers. After that it will go into \"Ready\" mode. From there you can use it to call a summon. After summoning, a djinn will take some turns to recover. " + $"You can also team up with other people to use a higher number of djinn in even more powerful summon sequences! " + $"Make sure to check `i!help DjinnAndSummons` for a full list of the commands related to djinn!"); } } else { giveTag = false; } } else { giveTag = false; } } else if (Enum.TryParse <Element>(Djinn, out var element)) { djinn = DjinnAndSummonsDatabase.GetRandomDjinn(element); djinn.IsShiny = Global.Random.Next(0, 128) == 0; djinn.UpdateMove(); if (userAccount.DjinnPocket.AddDjinn(djinn)) { awardLog.Add($"{userAccount.Name} found the {djinn.Element} djinni {djinn.Emote} {djinn.Name}!"); if (userAccount.DjinnPocket.djinn.Count == 1) { awardLog.Add($"You have found your first djinni, the {djinn.Element} djinni {djinn.Emote} {djinn.Name}. " + $"To view what it can do, use the djinninfo command `i!di {djinn.Name}` and to take it with you on your journey, use `i!djinn take {djinn.Name}` as long as it matches one of your classes elements. " + $"In battle you can use a djinn to unleash its powers. After that it will go into \"Ready\" mode. From there you can use it to call a summon. After summoning, a djinn will take some turns to recover. " + $"You can also team up with other people to use a higher number of djinn in even more powerful summon sequences! " + $"Find more djinn by battling them in various towns and locations, and with some luck they will join you." + $"Make sure to check `i!help DjinnAndSummons` for a full list of the commands related to djinn!"); } } else { giveTag = false; } } if (DjinnAndSummonsDatabase.TryGetSummon(Summon, out var summon)) { if (!userAccount.DjinnPocket.summons.Contains(summon)) { userAccount.DjinnPocket.AddSummon(summon); awardLog.Add($"{userAccount.Name} found the summon tablet for {summon.Emote} {summon.Name}!"); } } if (Message != "") { awardLog.Add(string.Format(Message, userAccount.Name)); } if (giveTag && Tag != "") { userAccount.Tags.Add(Tag); } return(string.Join("\n", awardLog)); }
public override string Award(UserAccount userAccount) { List <string> awardLog = new List <string>(); if (RequireTag.Count > 0 && !RequireTag.All(t => userAccount.Tags.Contains(t))) { return(""); } if (Obtainable > 0 && userAccount.Tags.Count(r => r.Equals(Tag)) >= Obtainable) { return(""); } var giveTag = true; userAccount.AddXp(Xp); userAccount.Inv.AddBalance(Coins); if (HasChest) { userAccount.Inv.AwardChest(Chest); awardLog.Add($"{userAccount.Name} found a {Inventory.ChestIcons[Chest]} {Chest} chest!"); } if (Item != "") { var item = ItemDatabase.GetItem(Item); if (userAccount.Inv.Add(Item)) { awardLog.Add($"{userAccount.Name} found a {item.Icon} {item.Name}!"); } else { giveTag = false; } } if (EnemiesDatabase.TryGetDungeon(Dungeon, out var dungeon)) { if (!userAccount.Dungeons.Contains(dungeon.Name)) { userAccount.Dungeons.Add(dungeon.Name); awardLog.Add($"{userAccount.Name} found a {(dungeon.IsOneTimeOnly ? "<:dungeonkey:606237382047694919> Key" : "<:mapclosed:606236181486632985> Map")} to {dungeon.Name}!"); } } if (DjinnAndSummonsDatabase.TryGetDjinn(Djinn, out var djinn)) { if (userAccount.DjinnPocket.AddDjinn(djinn)) { awardLog.Add($"{userAccount.Name} found the {djinn.Element} djinni {djinn.Emote} {djinn.Name}!"); if (userAccount.DjinnPocket.Djinn.Count == 1) { awardLog.Add($"You have found your first djinni, the {djinn.Element} djinni {djinn.Emote} {djinn.Name}. " + $"To view what it can do, use the djinninfo command `i!di {djinn.Name}` and to take it with you on your journey, use `i!djinn take {djinn.Name}`. " + $"In battle you can use a djinn to unleash its powers. After that it will go into \"Ready\" mode. From there you can use it to call a summon. After summoning, a djinn will take some turns to recover. " + $"You can also team up with other people to use a higher number of djinn in even more powerful summon sequences! " + $"Make sure to check `i!help DjinnAndSummons` for a full list of the commands related to djinn!"); } if (djinn.IsEvent && userAccount.DjinnPocket.Djinn.Count(d => d.IsEvent) == 1) { awardLog.Add($"Congratulations, You have found an **Event Djinni**! They are custom made djinni, only available within the event, as a small trinket for your participation. " + $"They behave differently to other djinn, in that they will not count towards your Djinn Pocket limit or any class upgrades, " + $"however they will carry over if you decide to reset your game :)" + $"(Event Djinn will not be allowed in any upcoming tournaments.)"); } if (userAccount.DjinnPocket.Djinn.Count == userAccount.DjinnPocket.PocketSize) { awardLog.Add($"Attention! Your Djinn Pocket has reached its limit. " + $"In order to further obtain djinn, you must either make space by releasing djinn or upgrading it using `i!upgradedjinn`!"); } } else { giveTag = false; } } else if (Enum.TryParse <Element>(Djinn, out var element)) { djinn = DjinnAndSummonsDatabase.GetRandomDjinn(element); bool isShiny = Global.RandomNumber(0, 128 - userAccount.DjinnBadLuck < 0 ? 0 : 128 - userAccount.DjinnBadLuck) <= 0; if (!isShiny && userAccount.DjinnPocket.Djinn.Any(d => d.Djinnname == djinn.Djinnname)) { djinn = DjinnAndSummonsDatabase.GetRandomDjinn(element); } djinn.IsShiny = isShiny && djinn.CanBeShiny; djinn.UpdateMove(); if (userAccount.DjinnPocket.AddDjinn(djinn)) { awardLog.Add($"{userAccount.Name} found the {djinn.Element} djinni {djinn.Emote} {djinn.Name}!"); if (userAccount.DjinnPocket.Djinn.Count == 1) { awardLog.Add($"You have found your first djinni, the {djinn.Element} djinni {djinn.Emote} {djinn.Name}. " + $"To view what it can do, use the djinninfo command `i!di {djinn.Name}` and to take it with you on your journey, use `i!djinn take {djinn.Name}` as long as it matches one of your classes elements. " + $"In battle you can use a djinn to unleash its powers. After that it will go into \"Ready\" mode. From there you can use it to call a summon. After summoning, a djinn will take some turns to recover. " + $"You can also team up with other people to use a higher number of djinn in even more powerful summon sequences! " + $"Find more djinn by battling them in various towns and locations, and with some luck they will join you." + $"Make sure to check `i!help DjinnAndSummons` for a full list of the commands related to djinn!"); } if (userAccount.DjinnPocket.Djinn.Count == userAccount.DjinnPocket.PocketSize) { awardLog.Add($"Attention! Your Djinn Pocket has reached its limit. " + $"In order to further obtain djinn, you must either make space by releasing djinn or upgrading it using `i!upgradedjinn`!"); } if (djinn.IsShiny) { userAccount.DjinnBadLuck = 0; } else if (djinn.CanBeShiny) { userAccount.DjinnBadLuck++; } } else { giveTag = false; } } if (DjinnAndSummonsDatabase.TryGetSummon(Summon, out var summon)) { if (!userAccount.DjinnPocket.Summons.Contains(summon)) { userAccount.DjinnPocket.AddSummon(summon); awardLog.Add($"{userAccount.Name} found the summon tablet for {summon.Emote} {summon.Name}!"); } } if (Message != "") { awardLog.Add(string.Format(Message, userAccount.Name)); } if (giveTag && Tag != "") { userAccount.Tags.Add(Tag); } return(string.Join("\n", awardLog)); }
protected override bool InternalValidSelection(ColossoFighter user) { friends ??= EnemyNames.Select(e => EnemiesDatabase.GetEnemy(e)).ToList(); return(user.GetTeam().Any(s => friends.Any(f => f.Name.Equals(s.Name) && !s.IsAlive))); }