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
|
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))
|
||||||
|
|
|
@ -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
|
||||||
|
|
25
lib/save.py
25
lib/save.py
|
@ -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)
|
||||||
|
|
Reference in a new issue