fishing changes and stuff

master
Lan 4 years ago
parent 2b8312c0c6
commit 5f9ebe48a4
  1. 9
      Kehyeedra3/ApplicationDbContextFactory.cs
  2. 4
      Kehyeedra3/Bot.cs
  3. 8
      Kehyeedra3/Command handler.cs
  4. 2
      Kehyeedra3/Commands.cs
  5. 232
      Kehyeedra3/Commands/Admin.cs
  6. 371
      Kehyeedra3/Commands/Economy.cs
  7. 11
      Kehyeedra3/Commands/Help.cs
  8. 273
      Kehyeedra3/Commands/Interactive.cs
  9. 2
      Kehyeedra3/Commands/Stuff.cs
  10. 4
      Kehyeedra3/Extensions.cs
  11. 11
      Kehyeedra3/Kehyeedra3.csproj
  12. 85
      Kehyeedra3/Services/Models/BattleFishCharacters.cs
  13. 21
      Kehyeedra3/Services/Models/Fishing.cs
  14. 64
      Kehyeedra3/Services/Models/User.cs
  15. 2
      Kehyeedra3/Services/ReminderService.cs

@ -1,8 +1,12 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design; using Microsoft.EntityFrameworkCore.Design;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
using Pomelo.EntityFrameworkCore.MySql.Storage;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using dotenv.net;
using System.IO;
namespace Kehyeedra3 namespace Kehyeedra3
{ {
@ -10,9 +14,12 @@ namespace Kehyeedra3
{ {
public ApplicationDbContext CreateDbContext(string[] args = null) public ApplicationDbContext CreateDbContext(string[] args = null)
{ {
DotEnv.Config(filePath: Path.Combine(AppContext.BaseDirectory, ".env"));
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>(); var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseMySql(Environment.GetEnvironmentVariable("KEHYEEDRA_CONNSTR")); optionsBuilder.UseMySql(Environment.GetEnvironmentVariable("KEHYEEDRA_CONNSTR"),
x => { x.EnableRetryOnFailure(); x.CharSet(CharSet.Utf8Mb4); });
return new ApplicationDbContext(optionsBuilder.Options); return new ApplicationDbContext(optionsBuilder.Options);
} }

@ -12,6 +12,7 @@ using System.Net.Http;
using Kehyeedra3.Services; using Kehyeedra3.Services;
using System.Threading; using System.Threading;
using Discord.Addons.Interactive; using Discord.Addons.Interactive;
using dotenv.net;
namespace Kehyeedra3 namespace Kehyeedra3
{ {
@ -54,6 +55,7 @@ namespace Kehyeedra3
public async Task CreateBot() public async Task CreateBot()
{ {
DotEnv.Config(filePath: Path.Combine(AppContext.BaseDirectory, ".env"));
var Config = Configuration.Load(); var Config = Configuration.Load();
Clockboy = new System.Timers.Timer(); Clockboy = new System.Timers.Timer();
@ -81,7 +83,7 @@ namespace Kehyeedra3
.AddSingleton(_bot) .AddSingleton(_bot)
.AddSingleton(_cmds) .AddSingleton(_cmds)
.AddSingleton(AudioService) .AddSingleton(AudioService)
.AddSingleton(new InteractiveService(_bot, TimeSpan.FromSeconds(30))) .AddSingleton(new InteractiveService(_bot))
.BuildServiceProvider(); .BuildServiceProvider();
await CommandHandler.InstallCommands(); await CommandHandler.InstallCommands();

@ -81,11 +81,13 @@ namespace Kehyeedra3
{ {
if (!arg.Author.IsBot) if (!arg.Author.IsBot)
{ {
var message = arg as SocketUserMessage; if(arg is SocketUserMessage message)
{
if (message == null) return;
var Context = new SocketCommandContext(_bot, message); var Context = new SocketCommandContext(_bot, message);
using (var Database = new ApplicationDbContextFactory().CreateDbContext()) using (var Database = new ApplicationDbContextFactory().CreateDbContext())
{ {
if(!Database.Users.Any(x=>x.Id == arg.Author.Id)) if (!Database.Users.Any(x => x.Id == arg.Author.Id))
{ {
Database.Users.Add(new Services.Models.User Database.Users.Add(new Services.Models.User
{ {
@ -104,7 +106,6 @@ namespace Kehyeedra3
} }
} }
if (message == null) return;
int argPos = 0; int argPos = 0;
if (message.HasMentionPrefix(_bot.CurrentUser, ref argPos)) if (message.HasMentionPrefix(_bot.CurrentUser, ref argPos))
@ -165,6 +166,7 @@ namespace Kehyeedra3
} }
} }
} }
}
public static async Task InstallModules() public static async Task InstallModules()
{ {

@ -8,8 +8,6 @@ using System.Net;
using System.Linq; using System.Linq;
using System.Data; using System.Data;
using Kehyeedra3.Services; using Kehyeedra3.Services;
using MySql.Data;
using MySql.Data.MySqlClient;
using Kehyeedra3.Services.Models; using Kehyeedra3.Services.Models;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.Internal;

@ -1,16 +1,14 @@
using Discord; using Discord;
using Discord.Addons.Interactive; using Discord.Addons.Interactive;
using Discord.Commands; using Discord.Commands;
using ImageMagick;
using Kehyeedra3.Preconditions; using Kehyeedra3.Preconditions;
using Kehyeedra3.Services.Models; using Kehyeedra3.Services.Models;
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Kehyeedra3.Commands namespace Kehyeedra3.Commands
@ -54,7 +52,7 @@ namespace Kehyeedra3.Commands
} }
[RequireRolePrecondition(AccessLevel.ServerAdmin)] [RequireRolePrecondition(AccessLevel.ServerAdmin)]
[Command("say"), Summary("Sends given message to given channel (admin only)")] [Command("say"), Summary("Sends given message to given channel (admin only)")]
public async Task Say(ITextChannel channel, [Remainder]string message) public async Task Say(ITextChannel channel, [Remainder] string message)
{ {
await channel.SendMessageAsync(message); await channel.SendMessageAsync(message);
} }
@ -78,7 +76,7 @@ namespace Kehyeedra3.Commands
{ {
using var Database = new ApplicationDbContextFactory().CreateDbContext(); using var Database = new ApplicationDbContextFactory().CreateDbContext();
List<User> users = Database.Users.OrderByDescending(user => user.Money).ToList(); List<User> users = Database.Users.AsQueryable().OrderByDescending(user => user.Money).ToList();
User bank = Database.Users.FirstOrDefault(x => x.Id == 0); User bank = Database.Users.FirstOrDefault(x => x.Id == 0);
int existing = 0; int existing = 0;
@ -108,7 +106,7 @@ namespace Kehyeedra3.Commands
} }
else else
{ {
await Context.Channel.SendMessageAsync($"Economy has been stabilized by removing {0-difference / 10000d}% from bank"); await Context.Channel.SendMessageAsync($"Economy has been stabilized by removing {0 - difference / 10000d}% from bank");
} }
} }
} }
@ -118,7 +116,7 @@ namespace Kehyeedra3.Commands
} }
} }
[RequireRolePrecondition(AccessLevel.BotOwner)] [RequireRolePrecondition(AccessLevel.BotOwner)]
[Command("modifymoney"), Alias("mm"),Summary("add / set")] [Command("modifymoney"), Alias("mm"), Summary("add / set")]
public async Task ModMoney(string type, int amount, IUser target = null) public async Task ModMoney(string type, int amount, IUser target = null)
{ {
User user; User user;
@ -313,6 +311,226 @@ namespace Kehyeedra3.Commands
// return; // return;
// } // }
//} //}
[RequireRolePrecondition(AccessLevel.BotOwner)]
[Command("getimag")]
public async Task TestCommand(string name)
{
name += ".png";
string path = Path.Combine(Environment.CurrentDirectory, "btextures");
DirectoryInfo idir = new DirectoryInfo(path);
var file = idir.GetFiles().FirstOrDefault(i => i.Name == name);
if (file != null)
{
await Context.Channel.SendFileAsync(file.FullName);
}
else
{
Console.WriteLine("File does not exist, check brain for damaged goods?");
}
}
[RequireRolePrecondition(AccessLevel.ServerAdmin)]
[Command("makeimag")]
public async Task MakeImage()
{
string path = Path.Combine(Environment.CurrentDirectory, "btextures");
using (MagickImage layer1 = new MagickImage(Path.Combine(path, "tbackground.png"), new MagickReadSettings
{
BackgroundColor = MagickColors.Transparent,
FillColor = MagickColors.White
}))
{
layer1.Compose = CompositeOperator.Over;
using (MagickImage layer2 = new MagickImage(Path.Combine(path, "tforeground.png"), new MagickReadSettings
{
BackgroundColor = MagickColors.Transparent,
FillColor = MagickColors.Black
}))
{
layer1.Composite(layer2, 245, 158, CompositeOperator.Over); //x, y
}
using (MagickImage layer3 = new MagickImage($"label:Haha The Machine Go BRrrrrr", new MagickReadSettings //text
{
Width = 250,
Height = 25,
TextGravity = Gravity.Center,
FillColor = MagickColors.Black,
BackgroundColor = MagickColors.None
}))
{
layer1.Composite(layer3, 245, 449, CompositeOperator.Over);
}
MemoryStream outputStream = new MemoryStream();
layer1.Write(outputStream);
outputStream.Position = 0;
await Context.Channel.SendFileAsync(outputStream, "imaeg.png");
}
}
[RequireRolePrecondition(AccessLevel.ServerAdmin)]
[Command("lc")]
public async Task MakeLevelCard()
{
string path = Path.Combine(Environment.CurrentDirectory, "btextures");
string avatar = "";
string rod = "";
string tier = "";
ulong lvl = 0;
ulong xp = 0;
int total = 0;
int minc = 0;
int maxc = 0;
Fishing fuser;
User user;
Dictionary<FishSpecies, int[]> inv = new Dictionary<FishSpecies, int[]>();
using (var Database = new ApplicationDbContextFactory().CreateDbContext())
{
user = Database.Users.FirstOrDefault(i => i.Id == Context.User.Id);
fuser = Database.Fishing.FirstOrDefault(i => i.Id == Context.User.Id);
}
if (fuser == null || user == null)
{
rod = "rod1.png";
tier = "tier1.png";
}
else
{
lvl = fuser.Lvl;
xp = fuser.TXp;
var finv = fuser.GetInventory();
switch (fuser.RodUsed)
{
case 0:
{
rod = "rod1.png";
tier = "tier1.png";
}
break;
case 1:
{
rod = "rod2.png";
tier = "tier2.png";
}
break;
case 2:
{
rod = "rod3.png";
tier = "tier3.png";
}
break;
case 3:
{
rod = "rod4.png";
tier = "tier4.png";
}
break;
}
foreach (var fish in finv)
{
total += (fish.Value[0] + fish.Value[1] + fish.Value[2]);
}
}
avatar = user.Avatar;
if (avatar == "https://cdn.discordapp.com/embed/avatars/0.png")
{
avatar = Path.Combine(path, "noavatar.png");
}
using (MagickImage card = new MagickImage(Path.Combine(path, "background.png"), new MagickReadSettings //background
{
BackgroundColor = MagickColors.Transparent,
FillColor = MagickColors.Black,
}))
{
card.Compose = CompositeOperator.Over;
using (MagickImage iavatar = new MagickImage(Path.Combine(avatar), new MagickReadSettings //avatar
{
BackgroundColor = MagickColors.None
}))
{
card.Composite(iavatar, 5, 5, CompositeOperator.Over);
}
using (MagickImage frame = new MagickImage(Path.Combine(path, "cover.png"), new MagickReadSettings //cover
{
BackgroundColor = MagickColors.None
}))
{
card.Composite(frame, CompositeOperator.Over);
}
using (MagickImage frame = new MagickImage(Path.Combine(path, tier), new MagickReadSettings //tier glow
{
BackgroundColor = MagickColors.None
}))
{
card.Composite(frame, 5, 5, CompositeOperator.Over);
}
//using (MagickImage frame = new MagickImage(Path.Combine(path, rod), new MagickReadSettings //rod
//{
// BackgroundColor = MagickColors.None
//}))
//{
// card.Composite(frame, 79, 79, CompositeOperator.Over);
//}
using (MagickImage frame = new MagickImage(Path.Combine(path, "frame.png"), new MagickReadSettings //frame
{
BackgroundColor = MagickColors.None
}))
{
card.Composite(frame, CompositeOperator.Over);
}
using (MagickImage xpbar = new MagickImage(Path.Combine(path, "xpbar.png"), new MagickReadSettings //xp bar
{
BackgroundColor = MagickColors.None
}))
{
card.Composite(xpbar, 405, 5, CompositeOperator.Over);
}
//using (MagickImage name = new MagickImage($"label:\n{Context.User.Username}", new MagickReadSettings
//{BackgroundColor = MagickColors.None, FillColor = MagickColors.White, FontPointsize = 20 }))
// {
// card.Composite(name, 6, 6, CompositeOperator.Over);
// }
using (MagickImage stats = new MagickImage($"label:" +
$"\nFishing Lv : {lvl}" +
$"\nXP : {xp}" +
$"\nMax catch : {maxc}" +
$"\nMin catch : {minc}" +
$"\nTotal Fish : {total}", new MagickReadSettings
{
BackgroundColor = MagickColors.None,
FillColor = MagickColors.White,
FontPointsize = 12
}))
{
card.Composite(stats,146,5, CompositeOperator.Over);
}
MemoryStream outputStream = new MemoryStream();
card.Write(outputStream);
outputStream.Position = 0;
await Context.Channel.SendFileAsync(outputStream, "profile.png");
}
}
} }
} }

@ -8,8 +8,10 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using ImageMagick;
using System.Threading.Channels; using System.Threading.Channels;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kehyeedra3.Preconditions;
namespace Kehyeedra3.Commands namespace Kehyeedra3.Commands
{ {
@ -21,7 +23,6 @@ namespace Kehyeedra3.Commands
"**Platinum**,", "**Platinum**,",
"**Plastids**,", "**Plastids**,",
"a ticking **Time Bomb**,", "a ticking **Time Bomb**,",
"**Neural Sensors**,",
"an **Amethyst**,", "an **Amethyst**,",
"**Germanium**,", "**Germanium**,",
"a **Hotdog**,", "a **Hotdog**,",
@ -192,19 +193,24 @@ namespace Kehyeedra3.Commands
public async Task FishCommand() public async Task FishCommand()
{ {
ulong time = ulong.Parse(DateTime.Now.ToString("yyyyMMddHHmm")); ulong time = ulong.Parse(DateTime.Now.ToString("yyyyMMddHHmm"));
ulong lastfish;
ulong totalXp; ulong totalXp;
ulong xp; ulong xp;
ulong level; ulong level;
ulong lvlXp; ulong lvlXp;
int prestige; int prestige;
int rod; int rod;
int BigBait = 0;
int RareBait = 0;
int SpecialBait = 0;
int Lettuce = 0;
Dictionary<FishSpecies, int[]> inv = new Dictionary<FishSpecies, int[]>(); Dictionary<FishSpecies, int[]> inv = new Dictionary<FishSpecies, int[]>();
Dictionary<Items, int[]> items = new Dictionary<Items, int[]>();
List<Fish> fishes = Fishing.GetFishList(); List<Fish> fishes = Fishing.GetFishList();
using (var Database = new ApplicationDbContextFactory().CreateDbContext()) using (var Database = new ApplicationDbContextFactory().CreateDbContext())
{ {
var user = Database.Fishing.FirstOrDefault(x => x.Id == Context.User.Id); var user = Database.Fishing.FirstOrDefault(x => x.Id == Context.User.Id);
var guser = Database.Users.FirstOrDefault(x => x.Id == Context.User.Id);
if (user == null) if (user == null)
{ {
{ {
@ -219,8 +225,58 @@ namespace Kehyeedra3.Commands
{ {
inv = user.GetInventory(); inv = user.GetInventory();
} }
if (user.LastFish >= time)
{
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\narrrrr-right, ye scurby bastard, I know yer eager t' scour the seven seas but ye needs t' wait till the next minute t' pillage the booty'o'the depths, savvy?");
return;
}
items = guser.GetGenInve(); //
int[] subtract = { 0 };
subtract[0] = -1;
if (items.TryGetValue(Items.SpecialBait, out int[] SpecB))
{
SpecialBait = SpecB[0];
BigBait = SpecB[0];
RareBait = SpecB[0];
if (SpecialBait > 0)
{
SpecB[0] -= 1;
}
else
{
if (items.TryGetValue(Items.BigBait, out int[] BigB))
{
BigBait = BigB[0];
if (BigBait > 0)
{
BigB[0] -= 1;
}
}
if (items.TryGetValue(Items.RareBait, out int[] RareB))
{
RareBait = RareB[0];
if (RareBait > 0)
{
RareB[0] -= 1;
}
}
}
}
if (items.TryGetValue(Items.Lettuce, out int[] Lettu))
{
Lettuce = Lettu[0];
if (Lettuce > 0)
{
Lettu[0] -= 1;
}
}
guser.SetGenInve(items);
level = user.Lvl; level = user.Lvl;
lastfish = user.LastFish;
totalXp = user.TXp; totalXp = user.TXp;
lvlXp = user.Xp; lvlXp = user.Xp;
rod = user.RodUsed; rod = user.RodUsed;
@ -229,23 +285,24 @@ namespace Kehyeedra3.Commands
await Database.SaveChangesAsync(); await Database.SaveChangesAsync();
} }
int rari = SRandom.Next(0, 2001);
if (lastfish < time)
{
int rari = (SRandom.Next(0, 2001));
int weigh = SRandom.Next(10, 1501+prestige*500); int weigh = SRandom.Next(10, 1501+prestige*500);
int tierRoll = SRandom.Next(0, 81+prestige*40); int tierRoll = SRandom.Next(0, 20*rod+10*prestige+1);
int dCatchRoll = SRandom.Next(0, 1000+prestige*20); int dCatchRoll = SRandom.Next(0, 1000+prestige*20);
int dcatch = 1; int dcatch = 1;
ulong rarity; int rarity;
int weight; int weight;
bool bBig = false;
bool bRar = false;
bool bSpe = false;
bool bLet = false;
if (dCatchRoll > 1000) if (dCatchRoll > 1000)
{ {
int many = 1020; int many = 1020;
dcatch += 1; dcatch += 1;
while (many+20 < dCatchRoll) while (many < dCatchRoll)
{ {
dcatch += 1; dcatch += 1;
many += 10+(dcatch*5); many += 10+(dcatch*5);
@ -254,25 +311,55 @@ namespace Kehyeedra3.Commands
if (level < 100 && prestige == 0) if (level < 100 && prestige == 0)
{ {
rarity = level * 10 + (ulong)rari; rarity = (int)level * 10 + rari;
weight = (int)level * 5 + weigh; weight = (int)level * 5 + weigh;
} }
else if (level < 100 && prestige == 1) else if (level < 100 && prestige == 1)
{ {
rarity = 1000 + (ulong)rari; rarity = 1000 + rari;
weight = (int)level * 2 + 500 + weigh; weight = (int)level * 3 + 500 + weigh;
}
else if (level >= 100 && prestige > 1)
{
rarity = 1000 + rari;
weight = 800 + weigh;
} }
else else
{ {
rarity = 1000 + (ulong)rari; rarity = 1000 + rari;
weight = 700 + weigh; weight = 500 + weigh;
}
if (BigBait > 0)
{
weight += 1000;
bBig = true;
}
if (RareBait > 0)
{
rarity += 500;
bRar = true;
}
if (SpecialBait > 0)
{
bSpe = true;
}
if (Lettuce > 0)
{
bLet = true;
} }
Fish fish; Fish fish;
if (rarity == 777 || (rarity > 2060 && rarity <= 2070) || rarity == 2777) if (rarity == 777 || (rarity > 2060 && rarity <= 2070) || rarity == 2777 || rarity > 2500 && rarity < 2510 && bRar ||rarity > 2510 && rarity < 2520 && bSpe)
{ {
if (rod >= 3 && tierRoll > 60) int wRoll = SRandom.Next(0, 101);
if (wRoll == 77 && bSpe)
{
List<Fish> possibleFishes = fishes.Where(f => (int)f.Rarity == (int)FishRarity.Unreasonable).ToList();
fish = possibleFishes[SRandom.Next(possibleFishes.Count)];
xp = 7777;
}
else if (rod >= 3 && tierRoll > 60)
{ {
List<Fish> possibleFishes = fishes.Where(f => (int)f.Rarity == (int)FishRarity.T4Legendary).ToList(); List<Fish> possibleFishes = fishes.Where(f => (int)f.Rarity == (int)FishRarity.T4Legendary).ToList();
fish = possibleFishes[SRandom.Next(possibleFishes.Count)]; fish = possibleFishes[SRandom.Next(possibleFishes.Count)];
@ -298,12 +385,16 @@ namespace Kehyeedra3.Commands
} }
if (rarity == 777 || rarity == 2777) if (rarity == 777 || rarity == 2777)
{ {
xp = 77+(77*Convert.ToUInt64(rod/2)); xp = 77+ Convert.ToUInt64(77*rod/2);
} }
} }
else if (rarity > 1700) else if (rarity > 1700)
{ {
rarity = Convert.ToUInt64(SRandom.Next(1700, 2801)); rarity = SRandom.Next(1700, 2801);
if (bRar || bSpe)
{
rarity += 200;
}
if (rod >= 3 && tierRoll > 60) if (rod >= 3 && tierRoll > 60)
{ {
List<Fish> possibleFishes = fishes.Where(f => (int)f.Rarity == (int)FishRarity.T4Uncommon).ToList(); List<Fish> possibleFishes = fishes.Where(f => (int)f.Rarity == (int)FishRarity.T4Uncommon).ToList();
@ -387,19 +478,24 @@ namespace Kehyeedra3.Commands
FishSize size; FishSize size;
if (fish.Rarity == FishRarity.Legendary || fish.Rarity == FishRarity.T2Legendary || fish.Rarity == FishRarity.T3Legendary || fish.Rarity == FishRarity.T4Legendary ) if (weight >= (1000 - Convert.ToInt32(level * 2))) //second weight roll
{
weight = 1000;
}
if (weight >= (1000 - Convert.ToInt32(level * 2)))
{ {
weight = SRandom.Next(100, 2001) + Convert.ToInt32(level * 5 + (Convert.ToUInt64(prestige * 500))); weight = SRandom.Next(100, 2001) + Convert.ToInt32(level * 5 + (Convert.ToUInt64(prestige * 500)));
} }
if (fish.Rarity == FishRarity.Legendary || fish.Rarity == FishRarity.T2Legendary || fish.Rarity == FishRarity.T3Legendary || fish.Rarity == FishRarity.T4Legendary) if (fish.Rarity == FishRarity.Legendary || fish.Rarity == FishRarity.T2Legendary || fish.Rarity == FishRarity.T3Legendary || fish.Rarity == FishRarity.T4Legendary)
{ {
weight = SRandom.Next(2000 + Convert.ToInt32(level * 20), 40001 + prestige * 10000); weight = SRandom.Next(2000 + Convert.ToInt32(level * 20), 40001 + prestige * 10000);
} }
if (fish.Rarity == FishRarity.Unreasonable)
{
weight = SRandom.Next(4000, 6000);
}
if (bBig)
{
weight += 1000;
}
if (weight >= 1000) if (weight >= 1000)
{ {
@ -429,6 +525,11 @@ namespace Kehyeedra3.Commands
size = FishSize.Small; size = FishSize.Small;
} }
if (bLet)
{
xp = Convert.ToUInt64(Math.Round(xp * 1.1, 0, MidpointRounding.ToEven)) * (ulong)dcatch;
}
string lvlUp = ""; string lvlUp = "";
using (var Database = new ApplicationDbContextFactory().CreateDbContext()) using (var Database = new ApplicationDbContextFactory().CreateDbContext())
@ -515,26 +616,42 @@ namespace Kehyeedra3.Commands
lvlUp = $"You need **{toNextLvl}**xp more to reach Level **{level + 1}**"; lvlUp = $"You need **{toNextLvl}**xp more to reach Level **{level + 1}**";
} }
await Database.SaveChangesAsync().ConfigureAwait(false); // :] await Database.SaveChangesAsync().ConfigureAwait(false);
} }
if (dcatch == 1) string baited = "";
string baiRa = "";
string baiBi = "";
string baiLe = "";
if (bRar || bBig)
{
baited += "\nYou used bait. ";
if (bRar)
{ {
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n {fish.Emote} You have caught a {weight / 100d}kg **{fish.Name}**, rarity: {fish.Rarity}\nYou gain **{xp}**xp.\n{lvlUp}"); baiRa = "(+)";
} }
else if (bBig)
{ {
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n {fish.Emote} You have caught **{dcatch}** {weight / 100d}kg **{fish.Name}**, rarity: {fish.Rarity}\nYou gain **{xp}**xp.\n{lvlUp}"); baiBi = "(+)";
} }
}
if (bLet)
{
baited += "\nYou ate lettuce. ";
baiLe = "(+10%)";
}
if (dcatch == 1)
{
await Context.Channel.SendMessageAsync($"{Context.User.Mention}{baited}\n{fish.Emote} You have caught a {weight / 100d}kg{baiBi} **{fish.Name}**, rarity: {fish.Rarity}{baiRa}\nYou gain **{xp}**xp{baiLe}.\n{lvlUp}");
} }
else else
{ {
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYour line snaps. Your disappointment is immeasurable, and your day is ruined."); await Context.Channel.SendMessageAsync($"{Context.User.Mention}{baited}\n{fish.Emote} You have caught **{dcatch}** {weight / 100d}kg{baiBi} **{fish.Name}**, rarity: {fish.Rarity}{baiRa}\nYou gain **{xp}**xp{baiLe}.\n{lvlUp}");
} }
} }
else else
{ {
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\narrrrr-right, ye scurby bastard, I know yer eager t' scour the seven seas but ye needs t' wait till the next minute t' pillage the booty'o'the depths, savvy?"); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYour line snaps. Your disappointment is immeasurable, and your day is ruined.");
} }
} }
@ -549,12 +666,38 @@ namespace Kehyeedra3.Commands
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou don't own any fishing rods. Try **fishing**."); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou don't own any fishing rods. Try **fishing**.");
return; return;
} }
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou have unlocked fishing rods up to **T{user.RodOwned+1}**\nYou have currently equipped a **T{user.RodUsed+1}** rod"); string rodtype;
if (user.RodUsed == 0)
{
rodtype = "Basic";
}
else if (user.RodUsed == 1)
{
rodtype = "Reinforced";
}
else if (user.RodUsed == 2)
{
rodtype = "Spectral";
}
else if (user.RodUsed == 3)
{
rodtype = "Cosmic";
}
else
{
rodtype = "Currently unobtainable";
}
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou have unlocked fishing rods up to **Tier {user.RodOwned+1}**\nYou have currently equipped a **{rodtype} Fishing Rod** (T{user.RodUsed+1}).");
} }
} }
[Command("setrod"),Summary("Set your fishing rod to the desired tier (for example: 'setrod 1' to set to default rod.)")] [Command("setrod"),Summary("Set your fishing rod to the desired tier (for example: 'setrod 1' to set to default rod.)")]
public async Task SetRod(byte tier) public async Task SetRod(byte tier)
{ {
if (tier < 1)
{
tier = 1;
}
using (var Database = new ApplicationDbContextFactory().CreateDbContext()) using (var Database = new ApplicationDbContextFactory().CreateDbContext())
{ {
var user = Database.Fishing.FirstOrDefault(x => x.Id == Context.User.Id); var user = Database.Fishing.FirstOrDefault(x => x.Id == Context.User.Id);
@ -563,7 +706,7 @@ namespace Kehyeedra3.Commands
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou don't own any fishing rods. Try **fishing**."); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou don't own any fishing rods. Try **fishing**.");
return; return;
} }
if (tier - 1 <= user.RodOwned) if ((tier - 1) <= user.RodOwned)
{ {
user.RodUsed = Convert.ToByte(tier - 1); user.RodUsed = Convert.ToByte(tier - 1);
string rodtype = ""; string rodtype = "";
@ -587,16 +730,131 @@ namespace Kehyeedra3.Commands
{ {
rodtype = "Currently unobtainable"; rodtype = "Currently unobtainable";
} }
await Context.Channel.SendMessageAsync($"You are now using a **{rodtype} (T{tier})** rod"); await Context.Channel.SendMessageAsync($"You are now using a **{rodtype} Fishing Rod** (T{tier}).");
} }
else else
{ {
await Context.Channel.SendMessageAsync($"You don't have that rod. You own rods up to **T{user.RodOwned+1}**"); await Context.Channel.SendMessageAsync($"You don't have that rod. You own rods up to **Tier {user.RodOwned+1}**.");
} }
await Database.SaveChangesAsync().ConfigureAwait(false); await Database.SaveChangesAsync().ConfigureAwait(false);
} }
} }
[Command("craft", RunMode = RunMode.Async), Alias("c"), Summary("Specify 'r' to refine ingredients.")]
public async Task Crafting(string option = null)
{
using (var Database = new ApplicationDbContextFactory().CreateDbContext())
{
var fuser = Database.Fishing.FirstOrDefault(i => i.Id == Context.User.Id);
var user = Database.Users.FirstOrDefault(i => i.Id == Context.User.Id);
if (fuser == null || fuser.Lvl < 30)
{
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou can't craft anything yet.\nCome back when you reach **Lvl 30**.");
return;
}
var finv = fuser.GetInventory();
var items = user.GetGenInve();
if (!items.TryGetValue(Items.UpgradeT2, out int[] T2Up))
{
T2Up = new int[] { 0 };
items.Add(Items.UpgradeT2, T2Up);
}
if (!items.TryGetValue(Items.RodFrame, out int[] Rod))
{
Rod = new int[] { 0 };
items.Add(Items.RodFrame, Rod);
}
if (option != null && option.ToLowerInvariant().Contains("r")) //finish this area up retard
{
var fish = finv.FirstOrDefault(f => f.Key == FishSpecies.LuckyCatfish).Value[(int)FishSize.Large];
if (fish < 1 || user.Money < 1000)
{
string missing = "";
if (fish < 1)
{
missing += "a **Lucky Catfish**";
}
if (fish < 1 && user.Money < 1000)
{
missing += " & ";
}
else
{
missing += " ";
}
if (user.Money < 1000)
{
missing += $"**{(1000 - user.Money).ToYeedraDisplay()}%**";
}
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou are missing {missing}.");
return;
}
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nProcess 1 **Lucky Catfish** for **0.1000%**? \n(Owned: {fish})\n");
var inp = await NextMessageAsync();
if (inp.Content.ToLowerInvariant().Contains("yes"))
{
if (finv.TryGetValue(FishSpecies.LuckyCatfish, out int[] Fesh))
{
Fesh[2] -= 1;
T2Up[0] += 1;
}
user.GrantMoney(Database.Users.FirstOrDefault(x => x.Id == 0), -1000);
user.SetGenInve(items);
fuser.SetInventory(finv);
await Database.SaveChangesAsync();
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou have obtained **Lucky Paste**");
}
}
else
{
if (fuser.RodOwned > 0)
{
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou already have everything currently craftable.");
return;
}
if (T2Up[0] != 0 && Rod[0] != 0)
{
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nDo you want to craft the **Reinforced Fishing Rod**?\nThis will use 1 **Lucky Paste** and 1 **Incomplete Rod**.");
var inp = await NextMessageAsync();
if (inp.Content != null && inp.Content.ToLowerInvariant().Contains("yes"))
{
T2Up[0] -= 1;
Rod[0] -= 1;
fuser.RodOwned += 1;
user.SetGenInve(items);
await Database.SaveChangesAsync();
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou have successfully crafted a **Reinforced Fishing Rod**, **;setrod 2** to use it.");
}
else
{
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nok retard.");
}
}
else
{
string msg = "You are missing parts.\n";
if (T2Up[0] < 1)
{
msg += "**Lucky Paste**\n";
}
if (Rod[0] < 1)
{
msg += "**Incomplete Rod**";
}
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n{msg}");
}
}
}
}
[Command("fishinventory"), Alias("finv", "fishinv"), Summary("Shows the fish you have currently. Variables: fish tier")] [Command("fishinventory"), Alias("finv", "fishinv"), Summary("Shows the fish you have currently. Variables: fish tier")]
public async Task FishInventory(int? tier = null, IGuildUser user = null) public async Task FishInventory(int? tier = null, IGuildUser user = null)
{ {
@ -639,6 +897,7 @@ namespace Kehyeedra3.Commands
List<Fish> fishes = Fishing.GetFishList(); List<Fish> fishes = Fishing.GetFishList();
List<Fish> unrfish = fishes.Where(f => (int)f.Rarity == (int)FishRarity.Unreasonable).ToList();
List<Fish> legfish = fishes.Where(f => (int)f.Rarity == (int)FishRarity.Legendary).ToList(); List<Fish> legfish = fishes.Where(f => (int)f.Rarity == (int)FishRarity.Legendary).ToList();
List<Fish> rarfish = fishes.Where(f => (int)f.Rarity == (int)FishRarity.Rare).ToList(); List<Fish> rarfish = fishes.Where(f => (int)f.Rarity == (int)FishRarity.Rare).ToList();
List<Fish> uncfish = fishes.Where(f => (int)f.Rarity == (int)FishRarity.Uncommon).ToList(); List<Fish> uncfish = fishes.Where(f => (int)f.Rarity == (int)FishRarity.Uncommon).ToList();
@ -680,6 +939,7 @@ namespace Kehyeedra3.Commands
return; return;
} }
string unreasonable = "";
string legendary = ""; string legendary = "";
string rare = ""; string rare = "";
string uncommon = ""; string uncommon = "";
@ -714,7 +974,11 @@ namespace Kehyeedra3.Commands
} }
fishtext += $" ]\n"; fishtext += $" ]\n";
if (legfish.Any( f => f.Id == entry.Key)) if (unrfish.Any(f => f.Id == entry.Key))
{
unreasonable += $"{fishtext}";
}
if (legfish.Any(f => f.Id == entry.Key))
{ {
legendary += $"{fishtext}"; legendary += $"{fishtext}";
} }
@ -732,6 +996,10 @@ namespace Kehyeedra3.Commands
} }
} }
string locker = $""; string locker = $"";
if (unreasonable != "")
{
locker += $"{unreasonable}\n";
}
if (legendary != "") if (legendary != "")
{ {
locker += $"{legendary}\n"; locker += $"{legendary}\n";
@ -777,13 +1045,17 @@ namespace Kehyeedra3.Commands
user = Database.Users.FirstOrDefault(x => x.Id == Context.User.Id); user = Database.Users.FirstOrDefault(x => x.Id == Context.User.Id);
inv = user.GetGenInve(); inv = user.GetGenInve();
foreach (var entry in inv) foreach (var entry in inv)
{
if (entry.Value[0] > 0)
{ {
item = items.FirstOrDefault(x => x.Id == entry.Key); item = items.FirstOrDefault(x => x.Id == entry.Key);
message += $"**{item.Name}**: **{entry.Value[0]}**\n"; message += $"**{item.Name}**: **{entry.Value[0]}**\n";
} }
}
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n{message}"); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n{message}");
} }
} }
[RequireRolePrecondition(AccessLevel.ServerAdmin)]
[Command("tradebuy", RunMode = RunMode.Async), Summary("Unfinished command")] [Command("tradebuy", RunMode = RunMode.Async), Summary("Unfinished command")]
public async Task TradingBuy(int amount, string itemtype, int price, [Remainder] string item) public async Task TradingBuy(int amount, string itemtype, int price, [Remainder] string item)
{ {
@ -826,7 +1098,7 @@ namespace Kehyeedra3.Commands
if (Database.StoreFronts.Any(x => x.StoreItemType == StoreItemType.Fish)) if (Database.StoreFronts.Any(x => x.StoreItemType == StoreItemType.Fish))
{ {
var stores = Database.StoreFronts.Where(x => x.StoreItemType == StoreItemType.Fish).ToList(); var stores = Database.StoreFronts.AsQueryable().Where(x => x.StoreItemType == StoreItemType.Fish).ToList();
stores.Shuffle(); stores.Shuffle();
@ -864,6 +1136,7 @@ namespace Kehyeedra3.Commands
} }
} }
} }
[RequireRolePrecondition(AccessLevel.ServerAdmin)]
[Command("tradesell"), Summary("Unfinished command")] [Command("tradesell"), Summary("Unfinished command")]
public async Task TradingSell(int amount, string itemtype, int price, [Remainder] string item) public async Task TradingSell(int amount, string itemtype, int price, [Remainder] string item)
{ {
@ -910,6 +1183,7 @@ namespace Kehyeedra3.Commands
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nInvalid trade type. Come back when the error command is fixed lmaoy").ConfigureAwait(false); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nInvalid trade type. Come back when the error command is fixed lmaoy").ConfigureAwait(false);
} }
} }
[RequireRolePrecondition(AccessLevel.ServerAdmin)]
[Command("tradeoffers"), Summary("Unfinished command")] [Command("tradeoffers"), Summary("Unfinished command")]
public async Task ShowOffers(bool localOffers = true) public async Task ShowOffers(bool localOffers = true)
{ {
@ -918,7 +1192,7 @@ namespace Kehyeedra3.Commands
StringBuilder message = new StringBuilder(); StringBuilder message = new StringBuilder();
if (localOffers) if (localOffers)
{ {
var stores = database.StoreFronts.Where(x => x.UserId == Context.User.Id); var stores = database.StoreFronts.AsQueryable().Where(x => x.UserId == Context.User.Id);
foreach(var store in stores) foreach(var store in stores)
{ {
@ -1016,7 +1290,7 @@ namespace Kehyeedra3.Commands
User skuld; User skuld;
using (var Database = new ApplicationDbContextFactory().CreateDbContext()) using (var Database = new ApplicationDbContextFactory().CreateDbContext())
{ {
users = Database.Users.OrderByDescending(user => user.Money).ToList(); users = Database.Users.AsQueryable().OrderByDescending(user => user.Money).ToList();
bank = Database.Users.FirstOrDefault(x => x.Id == 0); bank = Database.Users.FirstOrDefault(x => x.Id == 0);
skuld = Database.Users.FirstOrDefault(x => x.Id == 1); skuld = Database.Users.FirstOrDefault(x => x.Id == 1);
} }
@ -1039,7 +1313,7 @@ namespace Kehyeedra3.Commands
List<Fishing> users; List<Fishing> users;
using (var Database = new ApplicationDbContextFactory().CreateDbContext()) using (var Database = new ApplicationDbContextFactory().CreateDbContext())
{ {
users = Database.Fishing.OrderByDescending(user => user.TXp).ToList(); users = Database.Fishing.AsQueryable().OrderByDescending(user => user.TXp).ToList();
string leaderboardMessage = "**Top Ten Smelliest Fishermen**:"; string leaderboardMessage = "**Top Ten Smelliest Fishermen**:";
int placing = 0; int placing = 0;
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
@ -1151,7 +1425,7 @@ namespace Kehyeedra3.Commands
} }
else else
{ {
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou were added to database."); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou were added to the database.");
} }
return; return;
} }
@ -1191,10 +1465,15 @@ namespace Kehyeedra3.Commands
var muser = database.Users.FirstOrDefault(x => x.Id == Context.User.Id); var muser = database.Users.FirstOrDefault(x => x.Id == Context.User.Id);
string pres = ""; string pres = "";
double cawe = 0; double cawe = 0;
if (user.Prestige > 0) if (user.Prestige == 1)
{ {
pres = $" +{user.Prestige}P"; pres = $" +{user.Prestige}P";
cawe = 500; cawe = 500 + user.Lvl * 3d;
}
else if (user.Prestige > 1)
{
pres = $" +{user.Prestige}P";
cawe = 800;
} }
else else
{ {

@ -131,5 +131,16 @@ namespace Kehyeedra3.Commands
} }
} }
} }
[Command("serverinv"), Summary("Invite to bot server (mainly used for assets)")]
public async Task BotServerInvite()
{
await Context.Channel.SendMessageAsync("discord.gg/DAW53N9");
}
[Command("botinv"), Summary("Post the bot invite link")]
public async Task BotInvite()
{
await Context.Channel.SendMessageAsync("Main bot: https://discordapp.com/api/oauth2/authorize?client_id=303457448168128519&scope=bot&permissions=0 \n" +
"Test bot: https://discordapp.com/api/oauth2/authorize?client_id=319942676319436810&scope=bot&permissions=0");
}
} }
} }

@ -11,10 +11,13 @@ using System.Collections.ObjectModel;
using System.IO.Enumeration; using System.IO.Enumeration;
using System.IO.IsolatedStorage; using System.IO.IsolatedStorage;
using System.Linq; using System.Linq;
using System.Reflection.Metadata;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Text; using System.Text;
using System.Threading.Channels; using System.Threading.Channels;
using System.Threading.Tasks; using System.Threading.Tasks;
using ImageMagick;
namespace Kehyeedra3.Commands namespace Kehyeedra3.Commands
{ {
@ -32,7 +35,7 @@ namespace Kehyeedra3.Commands
using (var Database = new ApplicationDbContextFactory().CreateDbContext()) using (var Database = new ApplicationDbContextFactory().CreateDbContext())
{ {
var user = Database.Users.FirstOrDefault(x => x.Id == Context.User.Id); var user = Database.Users.FirstOrDefault(x => x.Id == Context.User.Id);
var userfish = Database.Battlefish.Where(x => x.UserId == Context.User.Id); var userfish = Database.Battlefish.AsQueryable().Where(x => x.UserId == Context.User.Id);
int attb = 0; int attb = 0;
int defb = 0; int defb = 0;
@ -47,12 +50,12 @@ namespace Kehyeedra3.Commands
} }
else else
{ {
var fish = userfish.FirstOrDefault(x => x.FishType == user.CurrentBattlefish); var ufish = userfish.FirstOrDefault(x => x.FishType == user.CurrentBattlefish);
if (fish == null) if (ufish == null)
{ {
fish = userfish.FirstOrDefault(); ufish = userfish.FirstOrDefault();
} }
switch (fish.FishType) switch (ufish.FishType)
{ {
case Services.Models.BattleFish.Herring: case Services.Models.BattleFish.Herring:
{ {
@ -104,76 +107,6 @@ namespace Kehyeedra3.Commands
string bfishlist = ""; string bfishlist = "";
if (opt == "change" || opt == "c")
{
string bfishlistname = "";
foreach (var fesh in userfish)
{
string prefix = "Hatchling";
string suffix = "";
if (fesh.Lvl >= 15)
{
prefix = "Young";
}
if (fesh.Lvl >= 30)
{
prefix = "Adolescent";
}
if (fesh.Lvl >= 50)
{
prefix = "Adult";
}
switch ((int)fesh.FishType)
{
case 1:
{
if (fesh.Lvl >= 100)
{
bfishlistname += $"ton";
suffix = $"Authentic Masculine";
}
bfishlistname = $"{prefix} Herring{suffix}";
}
break;
case 2:
{
if (fesh.Lvl >= 100)
{
prefix = $"Great Sage";
}
bfishlistname = $"{prefix} Birgus";
}
break;
case 3:
{
if (fesh.Lvl >= 100)
{
prefix = $"President";
}
bfishlistname = $"{prefix} Abama";
}
break;
case 4:
{
if (fesh.Lvl >= 100)
{
suffix += $" XTREME";
prefix = $"Hardboiled";
}
bfishlistname = $"{prefix} Pistashrimp{suffix}";
}
break;
}
bfishlist += $"{(byte)fesh.FishType} : LVL {fesh.Lvl} {bfishlistname}\n";
}
}
if (option == null)
{
var fish = userfish.FirstOrDefault(x => x.FishType == user.CurrentBattlefish); var fish = userfish.FirstOrDefault(x => x.FishType == user.CurrentBattlefish);
if (fish == null) if (fish == null)
{ {
@ -187,7 +120,6 @@ namespace Kehyeedra3.Commands
double lvm = 20; double lvm = 20;
double lvmhp = 100; double lvmhp = 100;
int lvdf = 5;
for (int i = 0; i < fish.Lvl; i++) for (int i = 0; i < fish.Lvl; i++)
{ {
@ -198,12 +130,13 @@ namespace Kehyeedra3.Commands
int lvlmhp = Convert.ToInt32(lvmhp) / 10; int lvlmhp = Convert.ToInt32(lvmhp) / 10;
int att = lvlm * attb; int att = lvlm * attb;
int def = lvdf * defb; int def = 5 * defb;
int hp = lvlmhp * hpb; int hp = lvlmhp * hpb;
int ap = lvlmhp * apb; int ap = lvlmhp * apb;
int dg = lvlm * dgb; int dg = dgb;
string prefix = "Hatchling"; string prefix = "Hatchling";
string stats = "";
if (fish.Lvl >= 15) if (fish.Lvl >= 15)
{ {
@ -341,13 +274,86 @@ namespace Kehyeedra3.Commands
} }
break; break;
} }
message.AppendLine($"LVL {fish.Lvl} **{prefix} {species}**\nName: **{fish.Name}**\nStats: **ATK : {att} DEF : {def}% HP : {hp} AP : {ap}**\nActions:\n{attacks}\n\n"); stats = $"LVL {fish.Lvl} **{prefix} {species}**\nName: **{fish.Name}**\nStats: **ATK : {att} DEF : {def}% HP : {hp} AP : {ap}**\nActions:\n{attacks}\n\n";
if (opt == "")
{
message.AppendLine(stats);
await Context.Channel.SendMessageAsync(message.ToString()); await Context.Channel.SendMessageAsync(message.ToString());
return;
} }
else if (option == "name" && sec != null || option == "n" && sec != null)
if (opt == "change" || opt == "c")
{ {
var fish = userfish.FirstOrDefault(x => x.FishType == user.CurrentBattlefish); string bfishlistname = "";
foreach (var fesh in userfish)
{
prefix = "Hatchling";
string suffix = "";
if (fesh.Lvl >= 15)
{
prefix = "Young";
}
if (fesh.Lvl >= 30)
{
prefix = "Adolescent";
}
if (fesh.Lvl >= 50)
{
prefix = "Adult";
}
switch ((int)fesh.FishType)
{
case 1:
{
if (fesh.Lvl >= 100)
{
bfishlistname += $"ton";
suffix = $"Authentic Masculine";
}
bfishlistname = $"{prefix} Herring{suffix}";
}
break;
case 2:
{
if (fesh.Lvl >= 100)
{
prefix = $"Great Sage";
}
bfishlistname = $"{prefix} Birgus";
}
break;
case 3:
{
if (fesh.Lvl >= 100)
{
prefix = $"President";
}
bfishlistname = $"{prefix} Abama";
}
break;
case 4:
{
if (fesh.Lvl >= 100)
{
suffix += $" XTREME";
prefix = $"Hardboiled";
}
bfishlistname = $"{prefix} Pistashrimp{suffix}";
}
break;
}
bfishlist += $"{(byte)fesh.FishType} : LVL {fesh.Lvl} {bfishlistname}\n";
}
}
if (option == "name" && sec != null || option == "n" && sec != null)
{
if (fish == null) if (fish == null)
{ {
fish = userfish.FirstOrDefault(); fish = userfish.FirstOrDefault();
@ -400,7 +406,7 @@ namespace Kehyeedra3.Commands
await Context.Channel.SendMessageAsync($"Sorry **{Context.User.Mention}**, I can't give credit.\nCome back when you're a little, ***mmmmm***, richer.\n*You're missing {(500 - user.Money)/10000d}%.*"); await Context.Channel.SendMessageAsync($"Sorry **{Context.User.Mention}**, I can't give credit.\nCome back when you're a little, ***mmmmm***, richer.\n*You're missing {(500 - user.Money)/10000d}%.*");
return; return;
} }
string species = "";
switch ((int)rep) switch ((int)rep)
{ {
case 1: case 1:
@ -502,6 +508,36 @@ namespace Kehyeedra3.Commands
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou don't own that."); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou don't own that.");
} }
} }
else if (option == "combat" || option == "cb")
{
int eatt = 10;
int edf = 0;
int edg = 5;
int a1 = 0;
int d1 = 0;
int d2 = 0;
bool eturn = false;
if (sec == "enemy")
{
eturn = true;
}
if (eturn)
{
a1 = eatt;
d1 = def;
d2 = dg;
}
else
{
a1 = att;
d1 = edf;
d2 = edg;
}
int dmg = CalculateDamage(a1, d1, d2);
await Context.Channel.SendMessageAsync($"Damage is **{dmg}**");
//await Context.Channel.SendMessageAsync($"*Combat test yeah baby*\nYour stats:\n**ATK : {att} DEF : {def}% HP : {hp} AP : {ap}**\nActions:\n{attacks}\n");
}
else else
{ {
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nAre you confused? Try **bf help** if you are having trouble with your bf."); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nAre you confused? Try **bf help** if you are having trouble with your bf.");
@ -510,6 +546,26 @@ namespace Kehyeedra3.Commands
} }
} }
public static int CalculateDamage(int a1, int d1, int d2)
{
int roll = SRandom.Next(5, 11);
int rolldg = SRandom.Next(0, 11);
if (roll == 10)
{
a1 *= 2;
}
if (rolldg * d2 >= 50)
{
return 0;
}
else
{
return ((a1 * roll) / 10 - (a1 * d1 / 100));
}
}
[Command("gstore", RunMode = RunMode.Async),Alias("gs")] [Command("gstore", RunMode = RunMode.Async),Alias("gs")]
public async Task GeneralStore(string input = null) public async Task GeneralStore(string input = null)
{ {
@ -550,9 +606,12 @@ namespace Kehyeedra3.Commands
string itemtxt = ""; string itemtxt = "";
foreach (User.Item i in itemlist) foreach (User.Item i in itemlist)
{
if ((int)i.Id < 200)
{ {
itemtxt += $"{(int)i.Id} : {i.Name} for {((long)i.Price).ToYeedraDisplay()}%\n"; itemtxt += $"{(int)i.Id} : {i.Name} for {((long)i.Price).ToYeedraDisplay()}%\n";
} }
}
if (input != null) if (input != null)
{ {
@ -565,11 +624,11 @@ namespace Kehyeedra3.Commands
} }
else if (input == "b" || input == "buy") else if (input == "b" || input == "buy")
{ {
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSpecify the item.\n{itemtxt}"); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nWhich item?\n{itemtxt}");
var inp = await NextMessageAsync(); var inp = await NextMessageAsync();
item = itemlist.FirstOrDefault(i => (int)i.Id == int.Parse(inp.Content)); item = itemlist.FirstOrDefault(i => (int)i.Id == int.Parse(inp.Content));
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSpecify the amount."); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nHow many?");
inp = await NextMessageAsync(); inp = await NextMessageAsync();
items = user.GetGenInve(); items = user.GetGenInve();
@ -585,19 +644,22 @@ namespace Kehyeedra3.Commands
if (int.Parse(inp.Content) * item.Price <= user.Money) if (int.Parse(inp.Content) * item.Price <= user.Money)
{ {
amount[0] += int.Parse(inp.Content); amount[0] += int.Parse(inp.Content);
int count = int.Parse(inp.Content);
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nThis will cost you {count * item.Price}.\nType 'ok' to confirm.");
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nThis will cost you {ulong.Parse(inp.Content) * (ulong)item.Price}.\nType 'ok' to confirm.");
inp = await NextMessageAsync(); inp = await NextMessageAsync();
if (inp.Content.ToLowerInvariant() == "ok") if (inp.Content.ToLowerInvariant() == "ok")
{ {
if (!user.GrantMoney(Database.Users.FirstOrDefault(x => x.Id == 0), -(amount[0] * item.Price))) if (!user.GrantMoney(Database.Users.FirstOrDefault(x => x.Id == 0), -(count * item.Price)))
{ {
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nBank has no money, convince someone to gamble."); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nBank has no money, convince someone to gamble.");
return; return;
} }
user.SetGenInve(items); user.SetGenInve(items);
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nBought {count} of {item.Name}.");
await Database.SaveChangesAsync(); await Database.SaveChangesAsync();
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nBought {int.Parse(inp.Content)} of {item.Name}.");
} }
else else
{ {
@ -724,15 +786,34 @@ namespace Kehyeedra3.Commands
return; return;
} }
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSpecify the item.\n\n{locker}"); await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSpecify the item, size, and amount. (ID size amount)\n\n{locker}");
inp = await NextMessageAsync(); inp = await NextMessageAsync(timeout: TimeSpan.FromMinutes(2));
fish = fishes.FirstOrDefault(i => (int)i.Id == int.Parse(inp.Content));
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSpecify the size. 0 = small, 1 = medium, 2 = large\n"); var inpsep = inp.Content.Split(" ");
inp = await NextMessageAsync(); int siz = 0;
size = (FishSize)int.Parse(inp.Content); switch (inpsep[1].ToString().ToLowerInvariant())
await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSpecify the amount.\n"); {
inp = await NextMessageAsync(); case "s":
int amount = int.Parse(inp.Content); {
siz = 0;
}
break;
case "m":
{
siz = 1;
}
break;
case "l":
{
siz = 2;
}
break;
}
fish = fishes.FirstOrDefault(i => (int)i.Id == int.Parse(inpsep[0]));
size = (FishSize)siz;
int amount = int.Parse(inpsep[2]);
int amountcheck = fishinv.FirstOrDefault(f => f.Key == fish.Id).Value[(int)size]; int amountcheck = fishinv.FirstOrDefault(f => f.Key == fish.Id).Value[(int)size];
if (amountcheck < amount) if (amountcheck < amount)
{ {

@ -11,6 +11,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ImageMagick;
namespace Kehyeedra3.Commands namespace Kehyeedra3.Commands
{ {
@ -322,5 +323,6 @@ namespace Kehyeedra3.Commands
} }
} }
} }
} }
} }

@ -1,6 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.IO;
using System.Linq;
namespace Kehyeedra3 namespace Kehyeedra3
{ {
@ -21,6 +24,7 @@ namespace Kehyeedra3
} }
//https://stackoverflow.com/a/1262619 //https://stackoverflow.com/a/1262619
public static void Shuffle<T>(this IList<T> list) public static void Shuffle<T>(this IList<T> list)
{ {

@ -8,14 +8,15 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Discord.Addons.Interactive" Version="1.0.1" /> <PackageReference Include="Discord.Addons.Interactive" Version="2.0.0" />
<PackageReference Include="Discord.Net" Version="2.1.1" /> <PackageReference Include="Discord.Net" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.2" /> <PackageReference Include="dotenv.net" Version="2.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.2"> <PackageReference Include="Magick.NET-Q16-AnyCPU" Version="7.22.2.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.11">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.1" /> <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.2.4" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -0,0 +1,85 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Kehyeedra3.Services.Models
{
public class BattleFishCharacters
{
public enum Character
{
Null = 0,
HoboShrimp = 1,
PocketSalmon = 2,
Holder2 = 3,
Holder3 = 4
}
public class BFCharacter
{
public Character Id;
public string Name;
public string Emote;
public string Intro;
public int Attack;
public int Defense;
public int BaseHealth;
public int BaseActionPoints;
public int DodgeRate;
}
public static List<BFCharacter> GetBFCharList()
{
return new List<BFCharacter>
{
new BFCharacter()
{
Id = Character.Null,
Name = "Secret Squirrel",
Emote = "<:skirel:762643322254393364>",
Intro = "He looks defeated.",
Attack = 5,
Defense = 0,
BaseHealth = 25,
BaseActionPoints = 0,
DodgeRate = 0
},
new BFCharacter()
{
Id = Character.HoboShrimp,
Name = "Hobo Shrimp",
Emote = "<:missingLeg:682586847830081551>",
Intro = "He's been a little down on his luck lately.",
Attack = 5,
Defense = 5,
BaseHealth = 5,
BaseActionPoints = 5,
DodgeRate = 5
},
new BFCharacter()
{
Id = Character.PocketSalmon,
Name = "Pocket Salmon",
Emote = "<:missingLeg:682586847830081551>",
Intro = "I pray your pockets don't have holes.",
Attack = 5,
Defense = 5,
BaseHealth = 5,
BaseActionPoints = 5,
DodgeRate = 5
}
};
}
}
}

@ -15,7 +15,7 @@ namespace Kehyeedra3.Services.Models
Common, Uncommon, Rare, Legendary, Common, Uncommon, Rare, Legendary,
T2Rare, T2Legendary, T2Uncommon, T2Common, T2Rare, T2Legendary, T2Uncommon, T2Common,
T3Rare, T3Legendary, T3Uncommon, T3Common, T3Rare, T3Legendary, T3Uncommon, T3Common,
T4Rare, T4Legendary, T4Uncommon, T4Common T4Rare, T4Legendary, T4Uncommon, T4Common, Unreasonable
} }
public class Fish public class Fish
{ {
@ -58,6 +58,13 @@ namespace Kehyeedra3.Services.Models
{ {
return new List<Fish> return new List<Fish>
{ {
new Fish()
{
Id = FishSpecies.Wakasagihime,
Name = "Touhoufish",
Emote = "<:wakasagihime:793084118949691433><:emptyslot:709350723199959101>",
Rarity = FishRarity.Unreasonable
},
new Fish() new Fish()
{ {
Id = FishSpecies.LuckyCatfish, Id = FishSpecies.LuckyCatfish,
@ -194,9 +201,9 @@ namespace Kehyeedra3.Services.Models
new Fish() //// Tier 2 new Fish() //// Tier 2
{ {
Id = FishSpecies.T2Circusfish, Id = FishSpecies.T2Leg,
Name = "Circusfish", Name = "Hypnofish",
Emote = "<:missingLeg:682586847830081551>", Emote = "<:paska:786244602440450109><:hypnoosi:786244623478947841>",
Rarity = FishRarity.T2Legendary Rarity = FishRarity.T2Legendary
}, },
new Fish() new Fish()
@ -210,7 +217,7 @@ namespace Kehyeedra3.Services.Models
{ {
Id = FishSpecies.T2Gunfish, Id = FishSpecies.T2Gunfish,
Name = "Gunfish", Name = "Gunfish",
Emote = "<:missingLeg:682586847830081551>", Emote = "<:gunfishleft:793492588799590460><:gunfishright:793492625277714442>",
Rarity = FishRarity.T2Uncommon Rarity = FishRarity.T2Uncommon
}, },
new Fish() new Fish()
@ -285,6 +292,8 @@ namespace Kehyeedra3.Services.Models
public enum FishSpecies public enum FishSpecies
{ {
//unreasonable
Wakasagihime = 0,
//legendary //legendary
LuckyCatfish = 1, LuckyCatfish = 1,
//rare //rare
@ -309,7 +318,7 @@ namespace Kehyeedra3.Services.Models
Carp = 18, Carp = 18,
Megacrab = 19, Megacrab = 19,
//T2 Legendary //T2 Legendary
T2Circusfish = 20, T2Leg = 20,
//T2 Rare //T2 Rare
T2Swolefish = 21, T2Swolefish = 21,
//T2 Uncommon //T2 Uncommon

@ -22,7 +22,7 @@ namespace Kehyeedra3.Services.Models
public bool GrantMoney(User bank, long amount) public bool GrantMoney(User bank, long amount)
{ {
if(bank.Money > amount) if(bank.Money >= amount)
{ {
Money += amount; Money += amount;
bank.Money -= amount; bank.Money -= amount;
@ -55,15 +55,60 @@ namespace Kehyeedra3.Services.Models
new Item() new Item()
{ {
Id = Items.DirtyBoot, Id = Items.DirtyBoot,
Name = "Lan's Love", Name = "Love",
Price = 100 Price = 100
}, },
new Item() new Item()
{ {
Id = Items.Lettuce, Id = Items.Lettuce,
Name = "Lettuce", Name = "Learning Lettuce",
Price = 50 Price = 50
} },
new Item()
{
Id = Items.RareBait,
Name = "Rare Bait",
Price = 50
},
new Item()
{
Id = Items.BigBait,
Name = "Big Bait",
Price = 20
},
new Item()
{
Id = Items.SpecialBait,
Name = "Master Bait",
Price = 100
},
new Item()
{
Id = Items.RodFrame,
Name = "Incomplete Rod",
Price = 500
},
new Item()
{
Id = Items.UpgradeT2,
Name = "Lucky Paste",
Price = 1000
},
new Item()
{
Id = Items.UpgradeT3,
Name = "T2 Scraps",
Price = 2000
},
new Item()
{
Id = Items.UpgradeT4,
Name = "T3 Cream",
Price = 4000
},
}; };
} }
public class Item public class Item
@ -98,7 +143,16 @@ namespace Kehyeedra3.Services.Models
public enum Items public enum Items
{ {
DirtyBoot = 0, DirtyBoot = 0,
Lettuce = 1 Lettuce = 1,
RareBait = 2,
BigBait = 3,
SpecialBait = 4,
RodFrame = 5,
UpgradeT2 = 200,
UpgradeT3 = 201,
UpgradeT4 = 202,
} }
public class ItemSlot public class ItemSlot
{ {

@ -58,7 +58,7 @@ namespace Kehyeedra3.Services
} }
catch { await (await Bot._bot.GetUser(242040333309837327).GetOrCreateDMChannelAsync()).SendMessageAsync($"Time of error ^\n" + catch { await (await Bot._bot.GetUser(242040333309837327).GetOrCreateDMChannelAsync()).SendMessageAsync($"Time of error ^\n" +
$"A fucky wucky has occurred, uwu\nFix wemindew sewwis dimwiwt" + $"A fucky wucky has occurred, uwu\nFix wemindew sewwis dimwiwt" +
$"\nThis was the reminder: {reminder.Id} {reminder.UserId} {reminder.Send.FromYeedraStamp()}"); } $"\nThis was the reminder: {reminder.Id} \nto: {reminder.UserId} \ntime: {reminder.Send.FromYeedraStamp()}"); }
} }
public async Task Tick() public async Task Tick()

Loading…
Cancel
Save