/
vechnoilive
/
RuleForge_GenAI_Lab
Обзор
Документация
Войти
/
vechnoilive
/
RuleForge_GenAI_Lab
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
rules.py
178 строк
7 KB
vechnoilive
upload files
20 ноя 2025, 01:00
20 ноя 2025, 01:00
823b56d
Код
Авторство
О чём код?
from settings import DEFAULT_GRAVITY, RULES import random class Rule: def __init__(self, rule_id, name, apply_fn, remove_fn): self.id = rule_id self.name = name self.apply_fn = apply_fn self.remove_fn = remove_fn self.active = False class RuleSystem: def __init__(self, game): self.game = game self.rules = {} self.global_state = { "gravity": DEFAULT_GRAVITY, "player_scale": 1.0, "water_deadly": False, "time_scale": 1.0, # additional multipliers and flags "player_speed_mult": 1.0, "proj_speed_mult": 1.0, "enemy_scale_mult": 1.0, "enemy_damage_mult": 1.0, "player_damage_mult": 1.0 } self._register_builtin() def _register_builtin(self): # existing self.register("gravity_low", RULES["gravity_low"], lambda: self._set_gravity(DEFAULT_GRAVITY * 0.6), lambda: self._set_gravity(DEFAULT_GRAVITY)) self.register("gravity_high", RULES["gravity_high"], lambda: self._set_gravity(DEFAULT_GRAVITY * 1.6), lambda: self._set_gravity(DEFAULT_GRAVITY)) self.register("player_tiny", RULES["player_tiny"], lambda: self._set_player_scale(0.7), lambda: self._set_player_scale(1.0)) self.register("player_giant", RULES["player_giant"], lambda: self._set_player_scale(1.5), lambda: self._set_player_scale(1.0)) self.register("water_deadly", RULES["water_deadly"], lambda: self._set_water_deadly(True), lambda: self._set_water_deadly(False)) self.register("time_fast", RULES["time_fast"], lambda: self._set_time_scale(1.4), lambda: self._set_time_scale(1.0)) # new: player speed self.register("player_fast", "Ускорение игрока", lambda: self._set_player_speed_mult(1.35), lambda: self._set_player_speed_mult(1.0)) self.register("player_slow", "Замедление игрока", lambda: self._set_player_speed_mult(0.75), lambda: self._set_player_speed_mult(1.0)) # projectile speed self.register("proj_speed_up", "Ускорение снарядов", lambda: self._set_proj_speed_mult(1.6), lambda: self._set_proj_speed_mult(1.0)) self.register("proj_speed_down", "Замедление снарядов", lambda: self._set_proj_speed_mult(0.6), lambda: self._set_proj_speed_mult(1.0)) # enemy scale & damage modifiers (global approximations) self.register("mob_small", "Враги уменьшены", lambda: self._set_enemy_scale_mult(0.8), lambda: self._set_enemy_scale_mult(1.0)) self.register("mob_big", "Враги увеличены", lambda: self._set_enemy_scale_mult(1.4), lambda: self._set_enemy_scale_mult(1.0)) self.register("mob_damage_up", "Урон врагов ↑", lambda: self._set_enemy_damage_mult(1.4), lambda: self._set_enemy_damage_mult(1.0)) self.register("mob_damage_down", "Урон врагов ↓", lambda: self._set_enemy_damage_mult(0.7), lambda: self._set_enemy_damage_mult(1.0)) self.register("mob_health_up", "HP врагов ↑", lambda: self._set_enemy_health_mult(1.4), lambda: self._set_enemy_health_mult(1.0)) self.register("mob_health_down", "HP врагов ↓", lambda: self._set_enemy_health_mult(0.7), lambda: self._set_enemy_health_mult(1.0)) def apply_to_enemies(self, fn): scene = self.game.scene if hasattr(scene, "level") and hasattr(scene.level, "enemies"): for en in scene.level.enemies: try: fn(en) except: pass def register(self, rid, name, apply_fn, remove_fn): self.rules[rid] = Rule(rid, name, apply_fn, remove_fn) def activate(self, rid): r = self.rules.get(rid) if r and not r.active: r.apply_fn() r.active = True return True return False def deactivate(self, rid): r = self.rules.get(rid) if r and r.active: r.remove_fn() r.active = False return True return False def reset_god_buffs(self): """Сбрасывает ВСЕ бонусы богов""" # Деактивируем ВСЕ активные правила for rule_id, rule in self.rules.items(): # ← self.rules (не active_rules) if rule.active: rule.remove_fn() # ← Вызываем функцию удаления rule.active = False # Переинициализируем global_state с дефолт значениями from settings import DEFAULT_GRAVITY self.global_state = { "gravity": DEFAULT_GRAVITY, "player_scale": 1.0, "water_deadly": False, "time_scale": 1.0, "player_speed_mult": 1.0, "proj_speed_mult": 1.0, "enemy_scale_mult": 1.0, "enemy_damage_mult": 1.0, "player_damage_mult": 1.0, } # Убеждаемся, что time_scale сброшен if hasattr(self.game, 'time_scale'): self.game.time_scale = 1.0 print("[RULES] ✅ Все бонусы богов сброшены!") def toggle(self, rid): if self.rules[rid].active: return self.deactivate(rid) return self.activate(rid) def random_rule_effect(self): rid = random.choice(list(self.rules.keys())) self.toggle(rid) return rid, self.rules[rid].active # internal setters def _set_gravity(self, value): self.global_state["gravity"] = value def _set_player_scale(self, value): self.global_state["player_scale"] = value def _set_water_deadly(self, val): self.global_state["water_deadly"] = val def _set_time_scale(self, val): self.global_state["time_scale"] = val self.game.time_scale = val def _set_player_speed_mult(self, v): self.global_state["player_speed_mult"] = v def _set_proj_speed_mult(self, v): self.global_state["proj_speed_mult"] = v def _set_enemy_scale_mult(self, v): self.global_state["enemy_scale_mult"] = v def _set_enemy_damage_mult(self, v): self.global_state["enemy_damage_mult"] = v def _set_enemy_health_mult(self, v): self.global_state["enemy_health_mult"] = v