|
@@ -5,16 +5,19 @@ using System.Linq;
|
|
|
using System.Threading.Tasks;
|
|
|
using MafiaTelegramBot.CustomCollections;
|
|
|
using MafiaTelegramBot.DataBase.Entity;
|
|
|
-using MafiaTelegramBot.DataBase.EntityDao;
|
|
|
using MafiaTelegramBot.Game.GameRoles;
|
|
|
using MafiaTelegramBot.Models;
|
|
|
using MafiaTelegramBot.Resources;
|
|
|
-using Newtonsoft.Json;
|
|
|
|
|
|
namespace MafiaTelegramBot.Game
|
|
|
{
|
|
|
public class Player
|
|
|
{
|
|
|
+ public UserEntity Info = new ();
|
|
|
+ public StatisticsList Statistics = new ();
|
|
|
+ public OpenedRolesEntity OpenedRoles = new ();
|
|
|
+ public AchievementsEntity Achievements = new ();
|
|
|
+
|
|
|
public GameRooms.GameRoom.Role CurrentRole = new NoneRole();
|
|
|
public int TurnOrder = -1;
|
|
|
private string _roomName = "";
|
|
@@ -27,57 +30,21 @@ namespace MafiaTelegramBot.Game
|
|
|
public bool CanBeBlockedNight = true;
|
|
|
public bool CanBeBlockedDay = true;
|
|
|
|
|
|
- public long Id
|
|
|
- {
|
|
|
- get => User.Id;
|
|
|
- set => User.Id = value;
|
|
|
- }
|
|
|
-
|
|
|
- public long ChatId
|
|
|
- {
|
|
|
- get => User.ChatId;
|
|
|
- set => User.ChatId = value;
|
|
|
- }
|
|
|
-
|
|
|
- public string Username
|
|
|
- {
|
|
|
- get => User.Username;
|
|
|
- set => User.Username = value;
|
|
|
- }
|
|
|
-
|
|
|
- public string NickName
|
|
|
- {
|
|
|
- get => User.NickName;
|
|
|
- set => User.NickName = value;
|
|
|
- }
|
|
|
-
|
|
|
- public int RankNumber
|
|
|
- {
|
|
|
- get => User.RankNumber;
|
|
|
- set => User.RankNumber = value;
|
|
|
- }
|
|
|
-
|
|
|
- public bool IsAdmin
|
|
|
- {
|
|
|
- get => User.IsAdmin > 0;
|
|
|
- set => User.IsAdmin = value ? 1 : 0;
|
|
|
- }
|
|
|
-
|
|
|
- public UserEntity User = new ();
|
|
|
- public StatisticsList Statistics = new ();
|
|
|
- public OpenedRolesEntity OpenedRoles = new ();
|
|
|
- public AchievementsEntity Achievements = new ();
|
|
|
-
|
|
|
public void SetActive()
|
|
|
{
|
|
|
_lastActivity = DateTime.Now;
|
|
|
}
|
|
|
|
|
|
- public TimeSpan GetLastActivityInterval()
|
|
|
+ private TimeSpan GetLastActivityInterval()
|
|
|
{
|
|
|
return DateTime.Now.Subtract(_lastActivity);
|
|
|
}
|
|
|
|
|
|
+ public bool IsInactive()
|
|
|
+ {
|
|
|
+ return GetLastActivityInterval().CompareTo(Constants.PLAYER_INACTIVE_INTERVAL) == 1 && !IsPlaying;
|
|
|
+ }
|
|
|
+
|
|
|
public string GetRoomName()
|
|
|
{
|
|
|
return _roomName;
|
|
@@ -99,12 +66,7 @@ namespace MafiaTelegramBot.Game
|
|
|
|
|
|
public override bool Equals(object? obj)
|
|
|
{
|
|
|
- return obj is Player player && player.Id == Id;
|
|
|
- }
|
|
|
-
|
|
|
- public override int GetHashCode()
|
|
|
- {
|
|
|
- return Id.GetHashCode();
|
|
|
+ return obj is Player player && player.Info.Id == Info.Id;
|
|
|
}
|
|
|
|
|
|
public Roles GetRole()
|
|
@@ -137,9 +99,8 @@ namespace MafiaTelegramBot.Game
|
|
|
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()]);
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId, $"{strings.congrats} {roles.Bodyguard}! {strings.you_can_use}");
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Bodyguard.ToString()]);
|
|
|
OpenedRoles.OpenBodyguard();
|
|
|
}
|
|
|
});
|
|
@@ -155,9 +116,8 @@ namespace MafiaTelegramBot.Game
|
|
|
Achievements.DoctorHeals++;
|
|
|
if (Achievements.DoctorHeals == 50)
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
- $"{strings.congrats} {roles.Necromancer}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Necromancer.ToString()]);
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId, $"{strings.congrats} {roles.Necromancer}! {strings.you_can_use}");
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Necromancer.ToString()]);
|
|
|
OpenedRoles.OpenNecromancer();
|
|
|
}
|
|
|
});
|
|
@@ -173,9 +133,8 @@ namespace MafiaTelegramBot.Game
|
|
|
Achievements.CopDispatches++;
|
|
|
if (Achievements.CopDispatches == 3)
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
- $"{strings.congrats} {roles.Fool}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Fool.ToString()]);
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId, $"{strings.congrats} {roles.Fool}! {strings.you_can_use}");
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Fool.ToString()]);
|
|
|
OpenedRoles.OpenFool();
|
|
|
}
|
|
|
});
|
|
@@ -188,9 +147,9 @@ namespace MafiaTelegramBot.Game
|
|
|
{
|
|
|
Task.Run(async () =>
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId,
|
|
|
$"{strings.congrats} {roles.Journalist}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Journalist.ToString()]);
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Journalist.ToString()]);
|
|
|
OpenedRoles.OpenJournalist();
|
|
|
});
|
|
|
}
|
|
@@ -205,9 +164,9 @@ namespace MafiaTelegramBot.Game
|
|
|
Achievements.GamesWhereCopCheckOnlyMafia++;
|
|
|
if (Achievements.GamesWhereCopCheckOnlyMafia == 3)
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId,
|
|
|
$"{strings.congrats} {roles.Detective}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Detective.ToString()]);
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Detective.ToString()]);
|
|
|
OpenedRoles.OpenDetective();
|
|
|
}
|
|
|
});
|
|
@@ -223,9 +182,9 @@ namespace MafiaTelegramBot.Game
|
|
|
Achievements.HaveSexWithDon++;
|
|
|
if (Achievements.HaveSexWithDon == 5)
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId,
|
|
|
$"{strings.congrats} {roles.Dame}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Dame.ToString()]);
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Dame.ToString()]);
|
|
|
OpenedRoles.OpenDame();
|
|
|
}
|
|
|
}
|
|
@@ -241,9 +200,9 @@ namespace MafiaTelegramBot.Game
|
|
|
Achievements.NotDispatchedOnSecondStage++;
|
|
|
if (Achievements.NotDispatchedOnSecondStage == 2)
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId,
|
|
|
$"{strings.congrats} {roles.Elder}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Elder.ToString()]);
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Elder.ToString()]);
|
|
|
OpenedRoles.OpenElder();
|
|
|
}
|
|
|
}
|
|
@@ -259,9 +218,9 @@ namespace MafiaTelegramBot.Game
|
|
|
Achievements.MafiaSoloWins++;
|
|
|
if (Achievements.MafiaSoloWins == 3)
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId,
|
|
|
$"{strings.congrats} {roles.Lawyer}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Lawyer.ToString()]);
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Lawyer.ToString()]);
|
|
|
OpenedRoles.OpenLawyer();
|
|
|
}
|
|
|
});
|
|
@@ -281,9 +240,9 @@ namespace MafiaTelegramBot.Game
|
|
|
else if ((Achievements.PreviousGameWinColor == 1 && color == 2)
|
|
|
|| (Achievements.PreviousGameWinColor == 2 && color == 1))
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId,
|
|
|
$"{strings.congrats} {roles.Werewolf}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Werewolf.ToString()]);
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Werewolf.ToString()]);
|
|
|
OpenedRoles.OpenWerewolf();
|
|
|
}
|
|
|
else
|
|
@@ -300,9 +259,9 @@ namespace MafiaTelegramBot.Game
|
|
|
{
|
|
|
Task.Run(async () =>
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId,
|
|
|
$"{strings.congrats} {roles.Hooker}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Hooker.ToString()]);
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Hooker.ToString()]);
|
|
|
OpenedRoles.OpenHooker();
|
|
|
});
|
|
|
}
|
|
@@ -314,7 +273,7 @@ namespace MafiaTelegramBot.Game
|
|
|
{
|
|
|
await Task.Run(async () =>
|
|
|
{
|
|
|
- team.Remove(Id);
|
|
|
+ team.Remove(Info.Id);
|
|
|
if (Achievements.PlayerWinTeam == "")
|
|
|
{
|
|
|
Achievements.PlayerWinTeam = BuildString(team);
|
|
@@ -343,9 +302,9 @@ namespace MafiaTelegramBot.Game
|
|
|
if (secondCross.Count == 0) Achievements.PlayerWinTeamTwo = BuildString(team);
|
|
|
else
|
|
|
{
|
|
|
- await Bot.SendWithMarkdown2(ChatId,
|
|
|
+ await Bot.SendWithMarkdown2(Info.ChatId,
|
|
|
$"{strings.congrats} {roles.Parasite}! {strings.you_can_use}");
|
|
|
- await Bot.SendStickerAsync(ChatId, Stickers.Sticker[Roles.Parasite.ToString()]);
|
|
|
+ await Bot.SendStickerAsync(Info.ChatId, Stickers.Sticker[Roles.Parasite.ToString()]);
|
|
|
OpenedRoles.OpenParasite();
|
|
|
}
|
|
|
}
|
|
@@ -371,7 +330,7 @@ namespace MafiaTelegramBot.Game
|
|
|
|
|
|
public char GetRank()
|
|
|
{
|
|
|
- return RankNumber switch
|
|
|
+ return Info.RankNumber switch
|
|
|
{
|
|
|
<100 => 'a',
|
|
|
>=100 and <300 => 'b',
|
|
@@ -386,22 +345,22 @@ namespace MafiaTelegramBot.Game
|
|
|
{
|
|
|
case 'a':
|
|
|
{
|
|
|
- RankNumber += CurrentRole.RankingCost;
|
|
|
+ Info.RankNumber += CurrentRole.RankingCost;
|
|
|
return CurrentRole.RankingCost;
|
|
|
}
|
|
|
case 'b':
|
|
|
{
|
|
|
- RankNumber += CurrentRole.RankingCost;
|
|
|
+ Info.RankNumber += CurrentRole.RankingCost;
|
|
|
return CurrentRole.RankingCost;
|
|
|
}
|
|
|
case 'c':
|
|
|
{
|
|
|
- RankNumber += (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
+ Info.RankNumber += (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
return (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
}
|
|
|
case 'd':
|
|
|
{
|
|
|
- RankNumber += (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
+ Info.RankNumber += (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
return (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
}
|
|
|
default: return 0;
|
|
@@ -414,17 +373,17 @@ namespace MafiaTelegramBot.Game
|
|
|
{
|
|
|
case 'b':
|
|
|
{
|
|
|
- RankNumber -= CurrentRole.RankingCost;
|
|
|
+ Info.RankNumber -= CurrentRole.RankingCost;
|
|
|
return CurrentRole.RankingCost;
|
|
|
}
|
|
|
case 'c':
|
|
|
{
|
|
|
- RankNumber -= (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
+ Info.RankNumber -= (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
return (int)(CurrentRole.RankingCost * Statistics[Roles.All].GetWinrate());
|
|
|
}
|
|
|
case 'd':
|
|
|
{
|
|
|
- RankNumber -= CurrentRole.RankingCost;
|
|
|
+ Info.RankNumber -= CurrentRole.RankingCost;
|
|
|
return CurrentRole.RankingCost;
|
|
|
}
|
|
|
default: return 0;
|