Fix saves and equipping inside fight (Closes #2)
This commit is contained in:
parent
a98cc869dd
commit
dce622c7b3
3 changed files with 42 additions and 12 deletions
22
lib/fight.py
22
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))
|
||||
|
|
|
@ -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
|
||||
|
|
25
lib/save.py
25
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)
|
||||
|
|
Reference in a new issue