|
@@ -175,36 +175,25 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
var maxObjects = votes.Where(item => item.count == max).ToList();
|
|
|
if(maxObjects.Count == 1)
|
|
|
{
|
|
|
- var currentRole = Players.GetIfContains(maxObjects[0].id)?.CurrentRole;
|
|
|
- if (currentRole != null)
|
|
|
- await currentRole.Kill();
|
|
|
+ if (Players.ContainsKey(maxObjects[0].id))
|
|
|
+ await Players[maxObjects[0].id].CurrentRole.Kill();
|
|
|
}
|
|
|
}
|
|
|
foreach (var (role, players) in PlayersRole)
|
|
|
{
|
|
|
if (role is Roles.Mafia)
|
|
|
foreach (var mafia in players) await mafia.CurrentRole.ApplyNightActionResult();
|
|
|
- else if (players.Count == 1)
|
|
|
- {
|
|
|
- var player = players.GetIfContains(0);
|
|
|
- if (role != Roles.Doctor)
|
|
|
- if (player != null)
|
|
|
- player.CanBeHealed = true;
|
|
|
- if (player?.CurrentRole != null) await player.CurrentRole.ApplyNightActionResult();
|
|
|
- }
|
|
|
+ else if (players.Count == 1) await players[0].CurrentRole.ApplyNightActionResult();
|
|
|
}
|
|
|
var afterKill = Players.Values.ToDictionary(p=>p.Id,p=>p.IsAlive);
|
|
|
var message = strings.city_wakes_up;
|
|
|
if(afterKill.IsEquals(beforeKill)) message += strings.everyone_survived;
|
|
|
else foreach (var (id, alive) in afterKill)
|
|
|
- if(beforeKill[id] != alive)
|
|
|
+ if(beforeKill[id] != alive && Players.ContainsKey(id))
|
|
|
{
|
|
|
- var player = Players.GetIfContains(id);
|
|
|
- message += player != null
|
|
|
- ? alive
|
|
|
- ? $"\n{player.NickName} {strings.will_be_ressurected}"
|
|
|
- : $"\n{player.NickName} {strings.will_be_killed}"
|
|
|
- : "";
|
|
|
+ message += alive
|
|
|
+ ? $"\n{Players[id].NickName} {strings.will_be_ressurected}"
|
|
|
+ : $"\n{Players[id].NickName} {strings.will_be_killed}";
|
|
|
await PlayersCh.SendTo(id, alive ? strings.you_will_be_ressurected : strings.you_will_be_killed);
|
|
|
}
|
|
|
message += '\n' + mafiaNotAgree;
|
|
@@ -248,8 +237,7 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
break;
|
|
|
case 1:
|
|
|
{
|
|
|
- var player = VoteUpList.GetIfContains(0);
|
|
|
- if(player != null ) await player.CurrentRole.Dispatch();
|
|
|
+ await VoteUpList[0].CurrentRole.Dispatch();
|
|
|
break;
|
|
|
}
|
|
|
default:
|
|
@@ -262,8 +250,7 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
await PlayersCh.Send(strings.nothing_up_to_dispatch);
|
|
|
break;
|
|
|
case 1:
|
|
|
- var player = VoteUpList.GetIfContains(0);
|
|
|
- if(player != null ) await player.CurrentRole.Dispatch();
|
|
|
+ await contenders[0].CurrentRole.Dispatch();
|
|
|
break;
|
|
|
case > 1:
|
|
|
await DefencePhase(contenders);
|
|
@@ -274,8 +261,7 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
await PlayersCh.Send(strings.nothing_up_to_dispatch);
|
|
|
break;
|
|
|
case 1:
|
|
|
- var contender = VoteUpList.GetIfContains(0);
|
|
|
- if(contender != null ) await contender.CurrentRole.Dispatch();
|
|
|
+ await contenders[0].CurrentRole.Dispatch();
|
|
|
break;
|
|
|
default:
|
|
|
await PlayersCh.Send(strings.villagers_could_not_decide);
|
|
@@ -300,11 +286,9 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
var voteKillCopy = VoteKillList.ToDictionary(e => e.Key, e => e.Value);
|
|
|
foreach (var (playerId, targetId) in voteKillCopy.Where(item => item.Value != 0))
|
|
|
{
|
|
|
- var player = Players.GetIfContains(playerId);
|
|
|
- var target = Players.GetIfContains(targetId);
|
|
|
- message += player != null && target != null
|
|
|
- ? $"\n({player.TurnOrder}) {player.NickName} {strings.vote_to} " +
|
|
|
- $"({target.TurnOrder}) {target.NickName}" : "";
|
|
|
+ message += Players.ContainsKey(playerId) && Players.ContainsKey(targetId)
|
|
|
+ ? $"\n({Players[playerId].TurnOrder}) {Players[playerId].NickName} {strings.vote_to} " +
|
|
|
+ $"({Players[targetId].TurnOrder}) {Players[targetId].NickName}" : "";
|
|
|
}
|
|
|
if (message == strings.results_of_voting) message = strings.no_one_voted;
|
|
|
await PlayersCh.Send(message);
|
|
@@ -317,7 +301,7 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
if (votes.Count == 0) return result;
|
|
|
var max = votes.Max(item => item.count);
|
|
|
var maxObjects = votes.Where(item => item.count == max);
|
|
|
- result.AddRange(maxObjects.Select(obj => Players.GetIfContains(obj.id)).Where(player => player != null));
|
|
|
+ result.AddRange(from obj in maxObjects where Players.ContainsKey(obj.id) select Players[obj.id]);
|
|
|
VoteUpList.Clear();
|
|
|
VoteKillList.Clear();
|
|
|
return result.ToList();
|
|
@@ -325,41 +309,39 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
|
|
|
private async Task PutUpVote(long playerId, long targetId, int messageId, bool toKill = false)
|
|
|
{
|
|
|
- var player = Players.GetIfContains(playerId);
|
|
|
- if (player != null)
|
|
|
+ if (Players.ContainsKey(playerId))
|
|
|
{
|
|
|
if (targetId == 0 && VoteKillList.AddUniqueByKey(playerId, targetId))
|
|
|
{
|
|
|
- if (!toKill) await PlayersCh.SendExcept(player.ChatId, $"{player.NickName} {strings.skip_vote}");
|
|
|
- await PlayersCh.EditTo(player.Id, messageId, strings.you_skip_vote);
|
|
|
+ if (!toKill) await PlayersCh.SendExcept(playerId, $"{Players[playerId].NickName} {strings.skip_vote}");
|
|
|
+ await PlayersCh.EditTo(playerId, messageId, strings.you_skip_vote);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- var target = Players.GetIfContains(targetId);
|
|
|
- if (target != null)
|
|
|
+ if (Players.ContainsKey(targetId))
|
|
|
{
|
|
|
if (!toKill)
|
|
|
{
|
|
|
- if (VoteUpList.AddUnique(target))
|
|
|
+ if (VoteUpList.AddUnique(Players[targetId]))
|
|
|
{
|
|
|
if (playerId != targetId)
|
|
|
{
|
|
|
- await PlayersCh.SendExcept(player.ChatId, $"{player.NickName} {strings.put_up_vote_to} {target.NickName}");
|
|
|
- await PlayersCh.EditTo(player.Id, messageId, $"{strings.you_vote_player} {target.NickName}");
|
|
|
+ await PlayersCh.SendExcept(playerId, $"{Players[playerId].NickName} {strings.put_up_vote_to} {Players[targetId].NickName}");
|
|
|
+ await PlayersCh.EditTo(playerId, messageId, $"{strings.you_vote_player} {Players[targetId].NickName}");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- await PlayersCh.SendExcept(player.ChatId, $"{player.NickName} {strings.vote_to_self}");
|
|
|
- await PlayersCh.EditTo(player.Id, messageId, strings.you_vote_to_self);
|
|
|
+ await PlayersCh.SendExcept(playerId, $"{Players[playerId].NickName} {strings.vote_to_self}");
|
|
|
+ await PlayersCh.EditTo(playerId, messageId, strings.you_vote_to_self);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (VoteKillList.AddUniqueByKey(playerId, targetId))
|
|
|
{
|
|
|
if (playerId != targetId)
|
|
|
- await PlayersCh.EditTo(player.Id, messageId, $"{strings.you_vote_player} {target.NickName}");
|
|
|
+ await PlayersCh.EditTo(playerId, messageId, $"{strings.you_vote_player} {Players[targetId].NickName}");
|
|
|
else
|
|
|
- await PlayersCh.EditTo(player.Id, messageId, strings.you_vote_to_self);
|
|
|
+ await PlayersCh.EditTo(playerId, messageId, strings.you_vote_to_self);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -375,9 +357,7 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
foreach (var (_, value) in PlayersRole)
|
|
|
{
|
|
|
if (value.Count != 1) continue;
|
|
|
- var yellowPlayer = value.GetIfContains(0);
|
|
|
- if (yellowPlayer == null) continue;
|
|
|
- var yellowResult = await yellowPlayer.CurrentRole.IsWon();
|
|
|
+ var yellowResult = await value[0].CurrentRole.IsWon();
|
|
|
if (yellowResult != "") additionalResult += "\n" + yellowResult;
|
|
|
}
|
|
|
|
|
@@ -391,12 +371,8 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
await PlayersCh.Send(strings.mafia_won + additionalResult, exceptDied: false);
|
|
|
await PlayersCh.SendSticker(Stickers.Sticker["MafiaWins"]);
|
|
|
}
|
|
|
-
|
|
|
if (PlayersRole.ContainsKey(Roles.Fool) && PlayersRole[Roles.Fool].Count == 1)
|
|
|
- {
|
|
|
- var player = PlayersRole[Roles.Fool].GetIfContains(0);
|
|
|
- if(player != null) await player.CurrentRole.IsWon();
|
|
|
- }
|
|
|
+ await PlayersRole[Roles.Fool][0].CurrentRole.IsWon();
|
|
|
var rolesMessage = strings.in_this_game_roles;
|
|
|
var sortedPLayers = Players.Values.ToList();
|
|
|
sortedPLayers.Sort((x, y) => x.TurnOrder - y.TurnOrder);
|