From 845291acab0772b1c3ce7619370191a2226f81e3 Mon Sep 17 00:00:00 2001 From: DIKER0K Date: Sun, 7 Dec 2025 22:56:34 +0500 Subject: [PATCH] fix for coin accural #2 --- app/services/coins.py | 43 ++++++++--------------------- scripts/add_test_bonuses.py | 54 ------------------------------------- 2 files changed, 11 insertions(+), 86 deletions(-) delete mode 100644 scripts/add_test_bonuses.py diff --git a/app/services/coins.py b/app/services/coins.py index 4a6ee57..2b84bda 100644 --- a/app/services/coins.py +++ b/app/services/coins.py @@ -28,45 +28,24 @@ class CoinsService: current_total_time = user.get("total_time_played", 0) if last_update: - # Время с последнего начисления last_timestamp = last_update["timestamp"] seconds_since_update = int((now - last_timestamp).total_seconds()) - - # ограничиваем начисление временем текущей сессии - seconds_since_update = min(seconds_since_update, online_time) - - # Начисляем монеты только за полные минуты - minutes_to_reward = seconds_since_update // 60 - - # Если прошло меньше минуты, пропускаем + + # Берём минимум: сколько прошло по часам и сколько игрок реально онлайн + seconds_for_reward = min(seconds_since_update, online_time) + + # Начисляем только за полные минуты + minutes_to_reward = seconds_for_reward // 60 + if minutes_to_reward < 1: return + minutes_to_reward = min(minutes_to_reward, MAX_MINUTES_PER_UPDATE) else: - # Первое обновление (ограничиваем для безопасности) + # Первое обновление — считаем только от online_time, с лимитом для безопасности minutes_to_reward = min(online_time // 60, 5) - - # НА ВСЯКИЙ ЕСЛИ ПОПЫ ВСЕ-РАВНО НЕПРАВИЛЬНО НАЧИСЛЯЮТСЯ - - # if last_update: - # last_timestamp = last_update["timestamp"] - # seconds_since_update = int((now - last_timestamp).total_seconds()) - - # # Берём минимум: сколько прошло по часам и сколько игрок реально онлайн - # seconds_for_reward = min(seconds_since_update, online_time) - - # # Начисляем только за полные минуты - # minutes_to_reward = seconds_for_reward // 60 - - # if minutes_to_reward < 1: - # return - - # minutes_to_reward = min(minutes_to_reward, MAX_MINUTES_PER_UPDATE) - # else: - # # Первое обновление — считаем только от online_time, с лимитом для безопасности - # minutes_to_reward = min(online_time // 60, 5) - # if minutes_to_reward < 1: - # return + if minutes_to_reward < 1: + return if minutes_to_reward > 0: # Обновляем монеты и время diff --git a/scripts/add_test_bonuses.py b/scripts/add_test_bonuses.py deleted file mode 100644 index a201234..0000000 --- a/scripts/add_test_bonuses.py +++ /dev/null @@ -1,54 +0,0 @@ -# scripts/add_test_bonuses.py -from app.db.database import db -import uuid -from datetime import datetime - -# Коллекция для бонусов -bonus_types_collection = db.bonus_types - -# Очищаем существующие записи -bonus_types_collection.delete_many({}) - -# Добавляем типы бонусов -bonus_types = [ - { - "id": str(uuid.uuid4()), - "name": "Бонус опыта", - "description": "Увеличивает получаемый опыт на 100% (+10% за уровень)", - "effect_type": "experience", - "base_effect_value": 1.0, # +100% - "effect_increment": 0.1, # +10% за уровень - "price": 100, - "upgrade_price": 50, - "duration": 0, # Бесконечный - "max_level": 0 # Без ограничения уровня - }, - { - "id": str(uuid.uuid4()), - "name": "Бонус силы", - "description": "Увеличивает силу атаки на 10% (+5% за уровень)", - "effect_type": "strength", - "base_effect_value": 0.1, - "effect_increment": 0.05, - "price": 75, - "upgrade_price": 40, - "duration": 0, # Бесконечный - "max_level": 10 # Максимум 10 уровней - }, - { - "id": str(uuid.uuid4()), - "name": "Бонус скорости", - "description": "Временно увеличивает скорость передвижения на 20%", - "effect_type": "speed", - "base_effect_value": 0.2, - "effect_increment": 0.05, - "price": 40, - "upgrade_price": 30, - "duration": 1800, # 30 минут - "max_level": 5 - } -] - -# Вставляем бонусы в БД -bonus_types_collection.insert_many(bonus_types) -print(f"Добавлено {len(bonus_types)} типов бонусов")