Updated game

This commit is contained in:
MeBeBruno committed 2026-08-10 15:57:08 +02:00
1 parent 6a56e5a921
commit f924016478
7 files changed
+180 -65

No files matched your search

+59 -23
View File
@@ -66,7 +66,8 @@ def initialize_database():
killer_identifier TEXT,
victim_identifier TEXT,
victim_previous_target TEXT,
kill_timestamp TEXT
kill_timestamp TEXT,
report_status TEXT DEFAULT 'confirmed'
)
""")
try:
@@ -85,6 +86,11 @@ def initialize_database():
connection.execute("ALTER TABLE player ADD COLUMN late_joiner INTEGER DEFAULT 0")
except sqlite3.OperationalError:
pass
try:
connection.execute("ALTER TABLE kill_log ADD COLUMN report_status TEXT DEFAULT 'confirmed'")
except sqlite3.OperationalError:
pass
cursor = connection.execute("SELECT configuration_value FROM game_configuration WHERE configuration_key = 'game_status'")
if not cursor.fetchone():
connection.execute("INSERT INTO game_configuration (configuration_key, configuration_value) VALUES ('game_status', 'pending')")
@@ -246,7 +252,7 @@ def process_administrator_action(action_type, form_data):
connection.execute("UPDATE player SET target_identifier = ? WHERE player_identifier = ?", (new_target, attacker_identifier))
timestamp = datetime.now(european_timezone).isoformat()
connection.execute("INSERT INTO kill_log (killer_identifier, victim_identifier, victim_previous_target, kill_timestamp) VALUES (?, ?, ?, ?)", (attacker_identifier, target_identifier, new_target, timestamp))
connection.execute("INSERT INTO kill_log (killer_identifier, victim_identifier, victim_previous_target, kill_timestamp, report_status) VALUES (?, ?, ?, ?, 'confirmed')", (attacker_identifier, target_identifier, new_target, timestamp))
alive_count_record = connection.execute("SELECT COUNT(*) as alive_count FROM player WHERE is_alive = 1 AND is_approved = 1").fetchone()
if alive_count_record["alive_count"] <= 1:
@@ -259,32 +265,52 @@ def process_administrator_action(action_type, form_data):
connection.commit()
has_game_state_changed = True
elif action_type == "edit_kill":
elif action_type == "delete_report":
kill_identifier = form_data.get("kill_identifier")
new_killer_identifier = form_data.get("new_killer_identifier")
if new_killer_identifier == "":
new_killer_identifier = None
new_timestamp = form_data.get("kill_timestamp")
report = connection.execute("SELECT * FROM kill_log WHERE kill_identifier = ?", (kill_identifier,)).fetchone()
old_kill = connection.execute("SELECT * FROM kill_log WHERE kill_identifier = ?", (kill_identifier,)).fetchone()
if old_kill:
old_killer_identifier = old_kill["killer_identifier"]
if old_killer_identifier != new_killer_identifier:
if old_killer_identifier:
connection.execute("UPDATE player SET score = MAX(0, score - 1) WHERE player_identifier = ?", (old_killer_identifier,))
if new_killer_identifier:
connection.execute("UPDATE player SET score = score + 1 WHERE player_identifier = ?", (new_killer_identifier,))
connection.execute("UPDATE kill_log SET killer_identifier = ?, kill_timestamp = ? WHERE kill_identifier = ?", (new_killer_identifier, new_timestamp, kill_identifier))
connection.commit()
has_game_state_changed = True
if report and report["report_status"] == 'pending':
connection.execute("UPDATE player SET pending_attacker_identifier = NULL WHERE player_identifier = ?", (report["victim_identifier"],))
connection.execute("DELETE FROM kill_log WHERE kill_identifier = ?", (kill_identifier,))
connection.commit()
has_game_state_changed = True
elif action_type == "force_confirm_report":
kill_identifier = form_data.get("kill_identifier")
report = connection.execute("SELECT * FROM kill_log WHERE kill_identifier = ?", (kill_identifier,)).fetchone()
if report and report["report_status"] == 'pending':
attacker_identifier = report["killer_identifier"]
victim_identifier = report["victim_identifier"]
victim = connection.execute("SELECT target_identifier, is_alive FROM player WHERE player_identifier = ?", (victim_identifier,)).fetchone()
if victim and victim["is_alive"] == 1:
new_target = victim["target_identifier"]
connection.execute("UPDATE player SET is_alive = 0, target_identifier = NULL, pending_attacker_identifier = NULL WHERE player_identifier = ?", (victim_identifier,))
connection.execute("UPDATE player SET target_identifier = ?, score = score + 1 WHERE player_identifier = ?", (new_target, attacker_identifier))
timestamp = datetime.now(european_timezone).isoformat()
connection.execute("UPDATE kill_log SET report_status = 'confirmed', kill_timestamp = ? WHERE kill_identifier = ?", (timestamp, kill_identifier))
alive_count_record = connection.execute("SELECT COUNT(*) as alive_count FROM player WHERE is_alive = 1 AND is_approved = 1").fetchone()
if alive_count_record["alive_count"] <= 1:
status_record = connection.execute("SELECT configuration_value FROM game_configuration WHERE configuration_key = 'game_status'").fetchone()
current_status = status_record["configuration_value"] if status_record else "unknown"
connection.execute("UPDATE game_configuration SET configuration_value = 'finished' WHERE configuration_key = 'game_status'")
if alive_count_record["alive_count"] == 1 and current_status != 'finished':
connection.execute("UPDATE player SET score = score + 3 WHERE is_alive = 1 AND is_approved = 1")
connection.commit()
has_game_state_changed = True
elif action_type == "revoke_kill":
kill_identifier = form_data.get("kill_identifier")
kill_record = connection.execute("SELECT * FROM kill_log WHERE kill_identifier = ?", (kill_identifier,)).fetchone()
if kill_record:
if kill_record and kill_record["report_status"] == 'confirmed':
if kill_record["killer_identifier"]:
connection.execute("UPDATE player SET score = MAX(0, score - 1) WHERE player_identifier = ?", (kill_record["killer_identifier"],))
@@ -297,7 +323,7 @@ def process_administrator_action(action_type, form_data):
if player_pointing_to_target:
connection.execute("UPDATE player SET target_identifier = ? WHERE player_identifier = ?", (victim_identifier, player_pointing_to_target["player_identifier"]))
connection.execute("DELETE FROM kill_log WHERE kill_identifier = ?", (kill_identifier,))
connection.execute("UPDATE kill_log SET report_status = 'revoked' WHERE kill_identifier = ?", (kill_identifier,))
alive_count = connection.execute("SELECT COUNT(*) as alive_count FROM player WHERE is_alive = 1 AND is_approved = 1").fetchone()["alive_count"]
if alive_count > 1:
@@ -581,9 +607,16 @@ def handle_elimination_request():
attacker = connection.execute("SELECT target_identifier FROM player WHERE player_identifier = ?", (attacker_identifier,)).fetchone()
if attacker and attacker["target_identifier"]:
victim_identifier = attacker["target_identifier"]
victim = connection.execute("SELECT target_identifier FROM player WHERE player_identifier = ?", (victim_identifier,)).fetchone()
connection.execute("UPDATE player SET pending_attacker_identifier = ? WHERE player_identifier = ?", (attacker_identifier, victim_identifier))
timestamp = datetime.now(european_timezone).isoformat()
connection.execute("INSERT INTO kill_log (killer_identifier, victim_identifier, victim_previous_target, kill_timestamp, report_status) VALUES (?, ?, ?, ?, 'pending')", (attacker_identifier, victim_identifier, victim["target_identifier"], timestamp))
connection.commit()
emit("elimination_verification_requested", to=victim_identifier)
websocket_manager.emit("admin_state_changed", to="administrator_room")
connection.close()
@websocket_manager.on("confirm_elimination")
@@ -601,7 +634,7 @@ def handle_elimination_confirmation():
connection.execute("UPDATE player SET target_identifier = ?, score = score + 1 WHERE player_identifier = ?", (new_target, attacker_identifier))
timestamp = datetime.now(european_timezone).isoformat()
connection.execute("INSERT INTO kill_log (killer_identifier, victim_identifier, victim_previous_target, kill_timestamp) VALUES (?, ?, ?, ?)", (attacker_identifier, victim_identifier, new_target, timestamp))
connection.execute("UPDATE kill_log SET report_status = 'confirmed', kill_timestamp = ? WHERE killer_identifier = ? AND victim_identifier = ? AND report_status = 'pending'", (timestamp, attacker_identifier, victim_identifier))
alive_count_record = connection.execute("SELECT COUNT(*) as alive_count FROM player WHERE is_alive = 1 AND is_approved = 1").fetchone()
if alive_count_record["alive_count"] <= 1:
@@ -614,6 +647,7 @@ def handle_elimination_confirmation():
connection.commit()
websocket_manager.emit("game_state_changed")
websocket_manager.emit("admin_state_changed", to="administrator_room")
connection.close()
@websocket_manager.on("reject_elimination")
@@ -626,8 +660,10 @@ def handle_elimination_rejection():
if victim and victim["pending_attacker_identifier"]:
attacker_identifier = victim["pending_attacker_identifier"]
connection.execute("UPDATE player SET pending_attacker_identifier = NULL WHERE player_identifier = ?", (victim_identifier,))
connection.execute("UPDATE kill_log SET report_status = 'rejected' WHERE killer_identifier = ? AND victim_identifier = ? AND report_status = 'pending'", (attacker_identifier, victim_identifier))
connection.commit()
emit("elimination_rejected", to=attacker_identifier)
websocket_manager.emit("admin_state_changed", to="administrator_room")
connection.close()
if __name__ == "__main__":