|
@@ -1,6 +1,8 @@
|
|
|
-using System.Collections.Generic;
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
using System.Threading.Tasks;
|
|
|
using CardCollector.Controllers;
|
|
|
+using CardCollector.DataBase.EntityDao;
|
|
|
using CardCollector.Resources;
|
|
|
|
|
|
namespace CardCollector.DataBase.Entity
|
|
@@ -9,6 +11,11 @@ namespace CardCollector.DataBase.Entity
|
|
|
{
|
|
|
public class UserSession
|
|
|
{
|
|
|
+ private readonly UserEntity user;
|
|
|
+ public UserSession(UserEntity user)
|
|
|
+ {
|
|
|
+ this.user = user;
|
|
|
+ }
|
|
|
/* Текущее состояние пользователя */
|
|
|
public UserState State = UserState.Default;
|
|
|
|
|
@@ -28,12 +35,54 @@ namespace CardCollector.DataBase.Entity
|
|
|
/* Сообщения в чате пользователя */
|
|
|
public readonly List<int> Messages = new();
|
|
|
|
|
|
- public async Task ClearMessages(UserEntity user)
|
|
|
+ /* Прибыль, которую может получить пользователь, подсчитывается во время команды профиля */
|
|
|
+ public int IncomeCoins;
|
|
|
+ public int IncomeGems;
|
|
|
+ private DateTime LastPayout;
|
|
|
+
|
|
|
+ public async Task ClearMessages()
|
|
|
{
|
|
|
foreach (var messageId in Messages)
|
|
|
await MessageController.DeleteMessage(user, messageId);
|
|
|
Messages.Clear();
|
|
|
}
|
|
|
+
|
|
|
+ public async Task CalculateIncome()
|
|
|
+ {
|
|
|
+ IncomeCoins = 0;
|
|
|
+ IncomeGems = 0;
|
|
|
+ LastPayout = DateTime.Now;
|
|
|
+ foreach (var sticker in user.Stickers.Values)
|
|
|
+ {
|
|
|
+ var stickerInfo = await StickerDao.GetStickerByHash(sticker.ShortHash);
|
|
|
+ var payoutInterval = LastPayout - sticker.Payout;
|
|
|
+ var payoutsCount = payoutInterval.Minutes / stickerInfo.IncomeTime;
|
|
|
+ if (payoutsCount < 1) continue;
|
|
|
+ var multiplier = payoutsCount * sticker.Count;
|
|
|
+ IncomeCoins += stickerInfo.IncomeCoins * multiplier;
|
|
|
+ IncomeGems += stickerInfo.IncomeGems * multiplier;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task PayOut()
|
|
|
+ {
|
|
|
+ IncomeCoins = 0;
|
|
|
+ IncomeGems = 0;
|
|
|
+ foreach (var sticker in user.Stickers.Values)
|
|
|
+ {
|
|
|
+ var stickerInfo = await StickerDao.GetStickerByHash(sticker.ShortHash);
|
|
|
+ var payoutInterval = LastPayout - sticker.Payout;
|
|
|
+ var payoutsCount = payoutInterval.Minutes / stickerInfo.IncomeTime;
|
|
|
+ if (payoutsCount < 1) continue;
|
|
|
+ var multiplier = payoutsCount * sticker.Count;
|
|
|
+ var prevDate = sticker.Payout;
|
|
|
+ sticker.Payout += new TimeSpan(0, stickerInfo.IncomeTime, 0) * payoutsCount;
|
|
|
+ IncomeCoins += stickerInfo.IncomeCoins * multiplier;
|
|
|
+ IncomeGems += stickerInfo.IncomeGems * multiplier;
|
|
|
+ }
|
|
|
+ user.Cash.Coins += IncomeCoins;
|
|
|
+ user.Cash.Gems += IncomeGems;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|