Grüße!
Meine Zeit in WoW ist schon eine ganze Weile her...
Ich weiß nicht mehr genau wie dort die Logs aussahen. Ich meine mich jedoch daran zu erinnern, das man da einiges an Vorverarbeitung (parsen) reinstecken musste, um mit den Daten was verarbeitbares anfangen zu können.
-> Ich gehe hier mal von einem einfachen Format aus, könnte im Prinzip CSV sein.
Der Code ist mit Vorsicht zu genießen. Ich bin selber noch am Dazulernen. Es gibt mit Sicherheit
pythonschere Wege das anzugehen.
Vielleicht kann ja einer der erfahrenen
mal darüber schauen.
Code: Alles auswählen
from collections import namedtuple
from recordtype import recordtype
def Player(LogFileRecord):
return recordtype("Player", ["name", "class_name", "total_damage_done", "spell_log"])(
name = LogFileRecord.player_name,
class_name = LogFileRecord.class_name,
total_damage_done = 0,
spell_log = {}
)
def Spell(LogFileRecord):
return recordtype("Spell", ["name", "damage_total"])(
name = LogFileRecord.class_name,
damage_total = LogFileRecord.spell_damage
)
def main():
LogFileRecord = namedtuple("LogFileRecord", ["player_name", "class_name", "spell_name", "spell_damage"])
log_content = [
["Asmongold", "Krieger", "Hinrichten", 120],
["Mcconnell", "Paladin", "Gottesschild", 0],
["Thuganomics", "Magier", "Frostblitz", 75],
["Asmongold", "Krieger", "Hinrichten", 240],
["Thuganomics", "Magier", "Frostblitz", 135],
["BaldKing", "Todesritter", "Auslöschen", 150],
["Thuganomics", "Magier", "Eislanze", 80],
["Mcconnell", "Paladin", "Ruhestein", 0]
]
log_file_records = map(LogFileRecord._make, log_content)
Raid = namedtuple("Raid", ["players"])(
players = {}
)
for record in log_file_records:
if record.player_name not in Raid.players:
Raid.players[record.player_name] = Player(record)
player = Raid.players[record.player_name]
spell_log = player.spell_log
if record.spell_name not in spell_log:
spell_log[record.spell_name] = Spell(record)
else:
spell_log[record.spell_name].damage_total += record.spell_damage
player.total_damage_done += record.spell_damage
for _ , player in Raid.players.items():
print(f"Spieler '{player.name}' [{player.class_name}] hat insgesamt {player.total_damage_done} Schaden ausgeteilt.")
if __name__ == '__main__':
main()