From dce622c7b3483265ed5ed3970cffd6cf814efb87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Tue, 17 May 2022 17:03:25 +0200 Subject: [PATCH] Fix saves and equipping inside fight (Closes #2) --- lib/fight.py | 22 ++++++++++++++++------ lib/game.py | 7 ++++++- lib/save.py | 25 ++++++++++++++++++++----- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/lib/fight.py b/lib/fight.py index cf0f365..2382fe5 100644 --- a/lib/fight.py +++ b/lib/fight.py @@ -1,4 +1,5 @@ import math +from lib.item import Item from lib.menu import MenuManager @@ -84,19 +85,28 @@ class FightHandler: if len(self.inventory) == 0: FightMenu([self.lang["return"]],f" {self.lang['inside_inv']} \n") else: + op = [] + items = [] s = "" for i,item in enumerate(self.inventory): - if type(item) is not str: - if(i == len(self.inventory)): - s += f"- {item.name}" + if type(item) is Item: # Pokud je předmět třídy Item, zobrazit zda-li je vybaven nebo ne + if self.equipped["weapon"] == item or self.equipped["armor"] == item: + op.append(f"- {item.name} | {self.lang['equipped']}") else: - s += f"- {item.name}\n" + op.append(f"- {item.name}") + items.append(item) else: - if(i == len(self.inventory)): + if(i == len(self.inventory)): # poslední, nepřidávat newline s += f"- {item}" else: s += f"- {item}\n" - FightMenu([self.lang["return"]],f" {self.lang['inside_inv']} \n{s}") + items.append(None) + op.append(self.lang["return"]) + m = FightMenu(op,f" {self.lang['inside_inv']} \n{s}") + if(m.selected != len(op)-1): + # Vybavit + i = items[m.selected] + self.equipped[i.type] = i def attack(self): # Provede útok vypočítáním ze statů útoku a obrany p = randrange(len(self.attacks)) diff --git a/lib/game.py b/lib/game.py index 8bccc0a..f0f5740 100644 --- a/lib/game.py +++ b/lib/game.py @@ -38,6 +38,7 @@ class Game: # Hlavní třída, uchovává údaje o hře i = next((x for x in self.equippable if x.name == item[name]["name"])) # V případě, že nenalezne předmět, vrací None self.inventory.append(i) self.equipped[i.type] = i + self.save.equipped[i.type] if "enemies" in data["meta"].keys(): # Načte nepřátele for en in data["meta"]["enemies"]: @@ -67,6 +68,7 @@ class Game: # Hlavní třída, uchovává údaje o hře if(selection == 0): self.current = self.save.currentPrompt self.inventory = self.save.inventory + self.equipped = self.save.equipped self.print_text() elif(selection == 1): self.print_text() @@ -145,6 +147,8 @@ class Game: # Hlavní třída, uchovává údaje o hře input() system("cls||clear") keyboard.remove_all_hotkeys() + self.equipped = m.equipped + self.save.equipped = m.equipped if m.hp < 1: # Nepřítel byl poražen print(self.lang["defeated"].replace("$enemy",enemy["name"])) @@ -152,7 +156,7 @@ class Game: # Hlavní třída, uchovává údaje o hře self.current = self.nodes[self.current]["actions"][0] # Přesune na první akci self.print_text() else: - # Hráč byl poražen TODO: Otestovat + # Hráč byl poražen print(self.lang["defeat"].replace("$enemy",enemy["name"])) sleep(3) self.print_text() @@ -200,6 +204,7 @@ class Game: # Hlavní třída, uchovává údaje o hře # Vybavit i = items[m.selected] self.equipped[i.type] = i + self.save.equipped[i.type] = i self.print_text() def print_animated(self,animid): # Zobrazí animaci diff --git a/lib/save.py b/lib/save.py index 2e58db4..d06c208 100644 --- a/lib/save.py +++ b/lib/save.py @@ -9,7 +9,8 @@ class SaveManager: # Spravuje ukládání self.id = gid # ID hry self.currentPrompt = "" # Aktuální node self.inventory = [] # Předměty v inventáři - self.version = 1 + self.equipped = {"weapon":None,"armor":None} # Výbava + self.version = 2 self.lang = lang def load(self): @@ -21,12 +22,20 @@ class SaveManager: # Spravuje ukládání system("cls||clear") print(self.lang["no_comp"]) sleep(5) - inv = [] + self.inventory = [] for item in data["inventory"]: # Zpracovat inventář (zvlášť pouze text a zvlášť vybavitelné) if type(item) is str: - inv.append(item) + self.inventory.append(item) else: - inv.append(Item(item["name"],item["atk"],item["def"])) + i = Item(item["name"],item["atk"],item["def"]) + self.inventory.append(i) + # Přidat stejnou kopii jako vybavenou pokud je vybavena + if(data["equipped"]["weapon"] is not None): + if(data["equipped"]["weapon"]["name"] == i.name): + self.equipped["weapon"] = i + if(data["equipped"]["armor"] is not None): + if(data["equipped"]["armor"]["name"] == i.name): + self.equipped["armor"] = i return True return False @@ -38,6 +47,12 @@ class SaveManager: # Spravuje ukládání else: # Pro vybavitelné předměty inv.append({"name":item.name,"atk":item.attack,"def":item.defense}) - data = {"id":self.id,"currentPrompt":self.currentPrompt,"inventory":self.inventory,"version":1} + + # Zpracovat vybavené předměty + if(self.equipped["weapon"] is not None): + self.equipped["weapon"] = {"name":self.equipped["weapon"].name,"atk":self.equipped["weapon"].attack} + if(self.equipped["armor"] is not None): + self.equipped["armor"] = {"name":self.equipped["armor"].name,"def":self.equipped["armor"].defense} + data = {"id":self.id,"currentPrompt":self.currentPrompt,"inventory":inv,"version":self.version,"equipped":self.equipped} with open(f"./saves/{self.id}.yml",mode="w",encoding="utf-8") as f: yaml.dump(data,f)