Fix saves and equipping inside fight (Closes #2)

This commit is contained in:
Matyáš Caras 2022-05-17 17:03:25 +02:00
parent a98cc869dd
commit dce622c7b3
3 changed files with 42 additions and 12 deletions

View file

@ -1,4 +1,5 @@
import math import math
from lib.item import Item
from lib.menu import MenuManager from lib.menu import MenuManager
@ -84,19 +85,28 @@ class FightHandler:
if len(self.inventory) == 0: if len(self.inventory) == 0:
FightMenu([self.lang["return"]],f" {self.lang['inside_inv']} \n") FightMenu([self.lang["return"]],f" {self.lang['inside_inv']} \n")
else: else:
op = []
items = []
s = "" s = ""
for i,item in enumerate(self.inventory): for i,item in enumerate(self.inventory):
if type(item) is not str: if type(item) is Item: # Pokud je předmět třídy Item, zobrazit zda-li je vybaven nebo ne
if(i == len(self.inventory)): if self.equipped["weapon"] == item or self.equipped["armor"] == item:
s += f"- {item.name}" op.append(f"- {item.name} | {self.lang['equipped']}")
else: else:
s += f"- {item.name}\n" op.append(f"- {item.name}")
items.append(item)
else: else:
if(i == len(self.inventory)): if(i == len(self.inventory)): # poslední, nepřidávat newline
s += f"- {item}" s += f"- {item}"
else: else:
s += f"- {item}\n" 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 def attack(self): # Provede útok vypočítáním ze statů útoku a obrany
p = randrange(len(self.attacks)) p = randrange(len(self.attacks))

View file

@ -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 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.inventory.append(i)
self.equipped[i.type] = i self.equipped[i.type] = i
self.save.equipped[i.type]
if "enemies" in data["meta"].keys(): if "enemies" in data["meta"].keys():
# Načte nepřátele # Načte nepřátele
for en in data["meta"]["enemies"]: for en in data["meta"]["enemies"]:
@ -67,6 +68,7 @@ class Game: # Hlavní třída, uchovává údaje o hře
if(selection == 0): if(selection == 0):
self.current = self.save.currentPrompt self.current = self.save.currentPrompt
self.inventory = self.save.inventory self.inventory = self.save.inventory
self.equipped = self.save.equipped
self.print_text() self.print_text()
elif(selection == 1): elif(selection == 1):
self.print_text() self.print_text()
@ -145,6 +147,8 @@ class Game: # Hlavní třída, uchovává údaje o hře
input() input()
system("cls||clear") system("cls||clear")
keyboard.remove_all_hotkeys() keyboard.remove_all_hotkeys()
self.equipped = m.equipped
self.save.equipped = m.equipped
if m.hp < 1: if m.hp < 1:
# Nepřítel byl poražen # Nepřítel byl poražen
print(self.lang["defeated"].replace("$enemy",enemy["name"])) 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.current = self.nodes[self.current]["actions"][0] # Přesune na první akci
self.print_text() self.print_text()
else: else:
# Hráč byl poražen TODO: Otestovat # Hráč byl poražen
print(self.lang["defeat"].replace("$enemy",enemy["name"])) print(self.lang["defeat"].replace("$enemy",enemy["name"]))
sleep(3) sleep(3)
self.print_text() self.print_text()
@ -200,6 +204,7 @@ class Game: # Hlavní třída, uchovává údaje o hře
# Vybavit # Vybavit
i = items[m.selected] i = items[m.selected]
self.equipped[i.type] = i self.equipped[i.type] = i
self.save.equipped[i.type] = i
self.print_text() self.print_text()
def print_animated(self,animid): # Zobrazí animaci def print_animated(self,animid): # Zobrazí animaci

View file

@ -9,7 +9,8 @@ class SaveManager: # Spravuje ukládání
self.id = gid # ID hry self.id = gid # ID hry
self.currentPrompt = "" # Aktuální node self.currentPrompt = "" # Aktuální node
self.inventory = [] # Předměty v inventáři 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 self.lang = lang
def load(self): def load(self):
@ -21,12 +22,20 @@ class SaveManager: # Spravuje ukládání
system("cls||clear") system("cls||clear")
print(self.lang["no_comp"]) print(self.lang["no_comp"])
sleep(5) sleep(5)
inv = [] self.inventory = []
for item in data["inventory"]: # Zpracovat inventář (zvlášť pouze text a zvlášť vybavitelné) for item in data["inventory"]: # Zpracovat inventář (zvlášť pouze text a zvlášť vybavitelné)
if type(item) is str: if type(item) is str:
inv.append(item) self.inventory.append(item)
else: 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 True
return False return False
@ -38,6 +47,12 @@ class SaveManager: # Spravuje ukládání
else: else:
# Pro vybavitelné předměty # Pro vybavitelné předměty
inv.append({"name":item.name,"atk":item.attack,"def":item.defense}) 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: with open(f"./saves/{self.id}.yml",mode="w",encoding="utf-8") as f:
yaml.dump(data,f) yaml.dump(data,f)