|
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Threading.Tasks;
|
|
|
using MafiaTelegramBot.CustomCollections;
|
|
|
+using MafiaTelegramBot.DataBase;
|
|
|
using MafiaTelegramBot.DataBase.Entity;
|
|
|
using MafiaTelegramBot.DataBase.EntityDao;
|
|
|
using MafiaTelegramBot.Game.GameRoles;
|
|
@@ -144,24 +145,27 @@ namespace MafiaTelegramBot.Game
|
|
|
|
|
|
public void BodyguardRoleAchievementEvent()
|
|
|
{
|
|
|
- Task.Run(async() =>
|
|
|
+ if (!OpenedRoles.Bodyguard)
|
|
|
{
|
|
|
- Achievements.DoctorHeals++;
|
|
|
- if (Achievements.DoctorHeals == 10)
|
|
|
+ Task.Run(async() =>
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
- $"{strings.congrats} {roles.Bodyguard}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Bodyguard.ToString()]);
|
|
|
- OpenedRoles.OpenBodyguard();
|
|
|
- }
|
|
|
- });
|
|
|
+ Achievements.DoctorHeals++;
|
|
|
+ if (Achievements.DoctorHeals == 10)
|
|
|
+ {
|
|
|
+ await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ $"{strings.congrats} {roles.Bodyguard}! {strings.you_can_use}");
|
|
|
+ await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Bodyguard.ToString()]);
|
|
|
+ OpenedRoles.OpenBodyguard();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void NecromancerRoleAchievementEvent()
|
|
|
{
|
|
|
- Task.Run(async() =>
|
|
|
+ if (!OpenedRoles.Necromancer)
|
|
|
{
|
|
|
- if (!OpenedRoles.Necromancer)
|
|
|
+ Task.Run(async () =>
|
|
|
{
|
|
|
Achievements.DoctorHeals++;
|
|
|
if (Achievements.DoctorHeals == 50)
|
|
@@ -171,15 +175,15 @@ namespace MafiaTelegramBot.Game
|
|
|
await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Necromancer.ToString()]);
|
|
|
OpenedRoles.OpenNecromancer();
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void FoolRoleAchievementEvent()
|
|
|
{
|
|
|
- Task.Run(async() =>
|
|
|
+ if (!OpenedRoles.Fool)
|
|
|
{
|
|
|
- if (!OpenedRoles.Fool)
|
|
|
+ Task.Run(async () =>
|
|
|
{
|
|
|
Achievements.CopDispatches++;
|
|
|
if (Achievements.CopDispatches == 3)
|
|
@@ -189,29 +193,29 @@ namespace MafiaTelegramBot.Game
|
|
|
await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Fool.ToString()]);
|
|
|
OpenedRoles.OpenFool();
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void JournalistAchievementEvent()
|
|
|
{
|
|
|
- Task.Run(async() =>
|
|
|
+ if (!OpenedRoles.Journalist)
|
|
|
{
|
|
|
- if (!OpenedRoles.Journalist)
|
|
|
+ Task.Run(async () =>
|
|
|
{
|
|
|
await Bot.SendWithMarkdown2(ChatId,
|
|
|
$"{strings.congrats} {roles.Journalist}! {strings.you_can_use}");
|
|
|
await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Journalist.ToString()]);
|
|
|
OpenedRoles.OpenJournalist();
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void DetectiveAchievementEvent()
|
|
|
{
|
|
|
- Task.Run(async() =>
|
|
|
+ if (!OpenedRoles.Detective)
|
|
|
{
|
|
|
- if (!OpenedRoles.Detective)
|
|
|
+ Task.Run(async () =>
|
|
|
{
|
|
|
Achievements.GamesWhereCopCheckOnlyMafia++;
|
|
|
if (Achievements.GamesWhereCopCheckOnlyMafia == 3)
|
|
@@ -221,8 +225,8 @@ namespace MafiaTelegramBot.Game
|
|
|
await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Detective.ToString()]);
|
|
|
OpenedRoles.OpenDetective();
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void DameRoleAchievementEvent()
|
|
@@ -264,9 +268,9 @@ namespace MafiaTelegramBot.Game
|
|
|
}
|
|
|
public void LawyerRoleAchievementEvent()
|
|
|
{
|
|
|
- Task.Run(async() =>
|
|
|
+ if (!OpenedRoles.Lawyer)
|
|
|
{
|
|
|
- if (!OpenedRoles.Lawyer)
|
|
|
+ Task.Run(async() =>
|
|
|
{
|
|
|
Achievements.MafiaSoloWins++;
|
|
|
if(Achievements.MafiaSoloWins == 3)
|
|
@@ -276,8 +280,8 @@ namespace MafiaTelegramBot.Game
|
|
|
await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Lawyer.ToString()]);
|
|
|
OpenedRoles.OpenLawyer();
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void WerewolfRoleAchievementEvent(int color, bool reset = false)
|
|
@@ -305,16 +309,63 @@ namespace MafiaTelegramBot.Game
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
- public void ParasiteRoleAchievementEvent()
|
|
|
+
|
|
|
+ public void ParasiteRoleAchievementEvent(List<long> team)
|
|
|
{
|
|
|
- Task.Run(() =>
|
|
|
+
|
|
|
+ if (!OpenedRoles.Parasite)
|
|
|
{
|
|
|
- if (!OpenedRoles.Parasite)
|
|
|
+ Task.Run(async() =>
|
|
|
{
|
|
|
-
|
|
|
- }
|
|
|
- });
|
|
|
+ team.Remove(Id);
|
|
|
+ if (Achievements.PlayerWinTeam == "")
|
|
|
+ {
|
|
|
+ Achievements.PlayerWinTeam = BuildString(team);
|
|
|
+ Achievements.PlayerWinTeamTwo = "";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var firstTeam = Achievements.PlayerWinTeam.Split('|').Select(long.Parse).ToList();
|
|
|
+ var firstCross = team.Intersect(firstTeam).ToList();
|
|
|
+ if (firstCross.Count == 0)
|
|
|
+ {
|
|
|
+ Achievements.PlayerWinTeam = BuildString(team);
|
|
|
+ Achievements.PlayerWinTeamTwo = "";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Achievements.PlayerWinTeam = BuildString(firstCross);
|
|
|
+ if (Achievements.PlayerWinTeamTwo == "")
|
|
|
+ Achievements.PlayerWinTeamTwo = BuildString(team);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var secondTeam = Achievements.PlayerWinTeamTwo.Split('|').Select(long.Parse).ToList();
|
|
|
+ var secondCross = team.Intersect(secondTeam).ToList();
|
|
|
+ if (secondCross.Count == 0) Achievements.PlayerWinTeamTwo = BuildString(team);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ $"{strings.congrats} {roles.Parasite}! {strings.you_can_use}");
|
|
|
+ await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Parasite.ToString()]);
|
|
|
+ OpenedRoles.OpenParasite();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ string BuildString(List<long> list)
|
|
|
+ {
|
|
|
+ var result = team.Aggregate("", (current, id) => current + (id + '|'));
|
|
|
+ return result.Remove(result.Length - 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void ResetParasiteProgress()
|
|
|
+ {
|
|
|
+ Achievements.PlayerWinTeam = "";
|
|
|
+ Achievements.PlayerWinTeamTwo = "";
|
|
|
}
|
|
|
}
|
|
|
}
|