From 8778fdafcd313ef2f89b84b906d2a3d9ba9bd15e Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Sun, 17 Apr 2022 22:29:26 +0200 Subject: [PATCH] Fix accents and update Asci to 1.8.2 --- generateur_scenario.py | 163 +++++++++++ idk/asci.py | 30 ++- idk/idk.py | 12 +- idk/idk_lib.py | 11 +- scenario_vierge.py | 593 +++++++++++++++++------------------------ 5 files changed, 436 insertions(+), 373 deletions(-) create mode 100644 generateur_scenario.py diff --git a/generateur_scenario.py b/generateur_scenario.py new file mode 100644 index 0000000..052c4e7 --- /dev/null +++ b/generateur_scenario.py @@ -0,0 +1,163 @@ +def generateur_scenario(nom): + functions = ( + "asgard_po", + "asgard_npc", + "h_9_npc", + "h_10_npc", + "h_11_npc", + "h_12_npc", + "h_13_npc", + "h_14_npc", + "h_15_npc", + "h_16_npc", + "h_17_npc", + "h_18_npc", + "h_19_npc", + "h_20_npc", + "vanaheim_po", + "vanaheim_npc", + "h_22_npc", + "alfheim_po", + "alfheim_npc", + "h_23_npc", + "h_24_npc", + "midgard_po", + "midgard_npc", + "h_25_npc", + "h_26_npc", + "h_27_npc", + "h_28_npc", + "niflheim_po", + "niflheim_npc", + "h_29_npc", + "h_30_npc", + "jotunheim_po", + "jotunheim_npc", + "h_31_npc", + "h_32_npc", + "h_33_npc", + "h_34_npc", + "h_35_npc", + "h_36_npc", + "nidavellir_po", + "nidavellir_npc", + "h_37_npc", + "h_38_npc", + "h_39_npc", + "h_40_npc", + "h_41_npc", + "muspellheim_po", + "muspellheim_npc", + "h_42_npc", + "h_43_npc", + "h_44_npc", + "svartalfheim_po", + "svartalfheim_npc", + "h_45_npc", + "h_46_npc", + "h_47_npc", + "h_48_npc") + + default_content = f""" +try: + import dlc_{nom} as dlc + spells = dlc.dlc_spells + spells_level = dlc.dlc_spells_level + spells_effect = dlc.dlc_spells_effect + weapons = dlc.dlc_weapons + armors = dlc.dlc_armors + dlc_entities = dlc.dlc_entities +except: + dlc = None + dlc_entities = () + + + +# Game +def npc(data, stat, entities, identifiant): + npc_data = ( + asgard_npc, + vanaheim_npc, + alfheim_npc, + midgard_npc, + niflheim_npc, + jotunheim_npc, + nidavellir_npc, + muspellheim_npc, + svartalfheim_npc, + h_9_npc, h_10_npc, h_11_npc, h_12_npc, h_13_npc, h_14_npc, h_15_npc, h_16_npc, h_17_npc, h_18_npc, h_19_npc, h_20_npc, + h_21_npc, h_22_npc, + h_23_npc, h_24_npc, + h_25_npc, h_26_npc, h_27_npc, h_28_npc, + h_29_npc, h_30_npc, + h_31_npc, h_32_npc, h_33_npc, h_34_npc, h_35_npc, h_36_npc, + h_37_npc, h_38_npc, h_39_npc, h_40_npc, h_41_npc, + h_42_npc, h_43_npc, h_44_npc, + h_45_npc, h_46_npc, h_47_npc, h_48_npc) + + + if dlc: + event = dlc.dlc_npc(data, stat, entities, identifiant) + if event: return "dlc", event + + return npc_core(npc_data[data[1]], data, stat, entities, identifiant) + + +def point_of_interest(data, stat, entities, identifiant): + po_data = ( + asgard_po, + vanaheim_po, + alfheim_po, + midgard_po, + niflheim_po, + jotunheim_po, + nidavellir_po, + muspellheim_po, + svartalfheim_po + ) + + coords = data[2], data[3] + event = po_data[data[1]](coords, identifiant) + + if not event: return [0, "Il n'y a rien à voir ici."] + else: return event + + +entities = asgard_entities + vanaheim_entities + alfheim_entities + midgard_entities + niflheim_entities + jotunheim_entities + nidavellir_entities + muspellheim_entities + svartalfheim_entities + dlc_entities + +print(center("{nom}", 21, " ")) +print("Entrez '' pour\nune nouvelle partie.") +events = {"*": npc, "?": point_of_interest} +keys = {4: display_stat, 7: spell, 8: misc_stat, 6: inventory, 9: sleep, "s": quick_save} + + +def {nom}(save_code=None): + # stat = [0 - PV, 1 - pièces d'or, 2 - [vitesse, agilité, attaque, defense, magie], 3 - [arme, armure], 4 - ticks, 5 - nom, 6 - classe, 7 - sorts connus : (id, level), 8 - sous-quêtes terminées] + if not save_code: + stat = init_stat() + name = stat[5] + data = [{"main": 0}, 3, 44, 66] + + print_text("introduction") + else: + stat, data = decode_save(save_code) + + idk_game = Asci(maps, entities, events, keys) + stat, data = idk_game.mainloop(1, stat, data, routine=routine, door="^_", walkable=".,`' ", exit_key="q") + if stat[9] != -1: data[0]["main"] -= stat[9] + + if data[0]["main"] == 1: + print_text("conclusion") + else: + print("{nom}(\"\{\}\")".format(encode_save(data, stat[:-1]))) + + +# Scenario +def shop_interaction(data, stat, nb_choice, *events): + for choice in range(nb_choice): + if data[0]["main"] == stat[9] + choice + 1: + stat[9] = -1 + if stat[1] < events[choice][0]: return events[choice][2], choice + 1 + else: return events[choice][1], choice + 1 + """ + diff --git a/idk/asci.py b/idk/asci.py index 1c6a215..a90d213 100644 --- a/idk/asci.py +++ b/idk/asci.py @@ -1,7 +1,7 @@ -# Asci (1.8.1) +# Asci (1.8.2) class Asci: - def __init__(self, maps, entities, events_mapping, keys_mapping, behaviors=None, screen_width=21, screen_height=6): + def __init__(self, maps, entities, events_mapping, keys_mapping, behaviors=None, screen_width=21, screen_height=7): # Load maps and entities self.maps = [Map(*i) for i in maps] self.entities = {} @@ -155,7 +155,7 @@ class Asci: return entity.entity_id # Mainloop - def mainloop(self, end_game, stat=None, data=None, routine=None, player="@", door="^", walkable=" ", exit_key=9, multi_move="."): + def mainloop(self, end_game, stat=None, data=None, routine=None, low_bar=None, player="@", door="^", walkable=" ", exit_key=9, multi_move="."): if exit_key in self._game_keys_mapping: raise ValueError("'{}' is already assigned to a function.".format(exit_key)) @@ -187,8 +187,10 @@ class Asci: self.screen.set_cell(self.data[2], self.data[3], player) - # Display map, get the key and update key buffer - key = convert(self.screen.display()) + # Display map, low bar, get the key and update key buffer + if low_bar: bar = low_bar(self.data[:], self.stat[:]) + else: bar = None + key = convert(self.screen.display(low_bar=bar)) if not key: key = self.data[4] else: self.data[4] = key @@ -215,7 +217,7 @@ class Asci: # Classes used by Asci class Screen: - def __init__(self, screen_width=21, screen_height=6): + def __init__(self, screen_width=21, screen_height=7): # Screen configuration self.screen_width = screen_width self.screen_height = screen_height @@ -242,12 +244,16 @@ class Screen: try: self._on_screen[y_map - y][x_map - x] = self._world[y_map][x_map] except: pass - - def display(self, return_input=True): - for line in self._on_screen: - print("".join(line)) - - if return_input: return input(">") + def display(self, return_input=True, low_bar=None): + for line_no in range(len(self._on_screen)): + line = "".join(self._on_screen[line_no]) + if line_no + 1 == self.screen_height and return_input: + if not low_bar: line = line[:-6] + ">" + else: line = low_bar + ">" + print(line, end="") + return input() + else: + print(line) def clear(self): print("\n" * self.screen_height) diff --git a/idk/idk.py b/idk/idk.py index 5fdb939..f741873 100644 --- a/idk/idk.py +++ b/idk/idk.py @@ -60,7 +60,7 @@ def point_of_interest(data, stat, entities, identifiant): coords = data[2], data[3] event = po_data[data[1]](coords, identifiant) - if not event: return [0, "Il n'y a rien à voir ici."] + if not event: return [0, "Il n'y a rien a voir ici."] else: return event @@ -89,7 +89,7 @@ def idk(save_code=None): stat, data = decode_save(save_code) idk_game = Asci(maps, entities, events, keys) - stat, data = idk_game.mainloop(102, stat, data, routine=routine, door="^_", walkable=".,`' ", exit_key="q") + stat, data = idk_game.mainloop(102, stat, data, routine=routine, low_bar=low_bar, door="^_", walkable=".,`' ", exit_key="q") if stat[9] != -1: data[0]["main"] -= stat[9] if data[0]["main"] == 102: @@ -284,7 +284,7 @@ def h_15_npc(data, stat, entites, identifiant): if coords == (10, 6): if "theldis" in data[0]: return "theldis", { "base": [0, "Vidar, dieu de la vengeance et du silence. Besoin de faire taire quelqu'un ?"], - 3: [1, "Hum, j'accepte de réaliser votre vengeance, mais j'ai une condition : vous devrez vous charger d'une autre vengeance. Allez dans les montagnes au nord-est, trouvez Hargduf, c'est un orc, vous ne pouvez pas le louper. Eliminez-le."], + 3: [1, "Hum, j'accepte de realiser votre vengeance, mais j'ai une condition : vous devrez vous charger d'une autre vengeance. Allez dans les montagnes au nord-est, trouvez Hargduf, c'est un orc, vous ne pouvez pas le louper. Eliminez-le."], 4: [0, "Si tu veux que justice soit faite, va tuer cet orc."], 5: [1, "Bon travail. Je m'occupe de ton affaire des que possible."] } @@ -512,7 +512,7 @@ def h_23_npc(data, stat, entites, identifiant): return { "base": [0, "Bonjour... ?"], 44: [0, "Je suis Sagriel, alfe claire. Je peux t'aider ?\n1. Oui, je voulais connaitre la signification de ces runes.\n2. Non, rien, excusez-moi...", 2], - 45: [1, "[VOUS TENDEZ LE CROQUIS D'UTARG À SAGRIEL] Hum, ces runes sont celles d'Odin. Il s'interesse de tres pres a cela. Je peux vous les traduire contre un service.\n1. Lequel ?\n2. Je trouverais quelqu'un d'autre.", 2], + 45: [1, "[VOUS TENDEZ LE CROQUIS D'UTARG A SAGRIEL] Hum, ces runes sont celles d'Odin. Il s'interesse de tres pres a cela. Je peux vous les traduire contre un service.\n1. Lequel ?\n2. Je trouverais quelqu'un d'autre.", 2], 46: [-2, "Eh bien revenez quand vous vous serez decide alors..."], 47: [3, "J'ai besoin d'une potion d'eternelle jeunesse, Gullveig en vend pour 10 pieces d'or. [+10 PO]", 0, (1, 10)], @@ -615,7 +615,7 @@ def midgard_npc(data, stat, entites, identifiant): if stat[8] % 3: return "laard", { "base": [0, "Laard, je suis marin de mon etat."], - 0: [0, "Laard, marin. Vous cherchez un engagement ?\n1. Hmm ? Proposez toujours ?\n2. Désolé, j'ai d'autres affaires a regler.", 2], + 0: [0, "Laard, marin. Vous cherchez un engagement ?\n1. Hmm ? Proposez toujours ?\n2. Desole, j'ai d'autres affaires a regler.", 2], 1: [2, "Voila, il y a quelques temps j'ai embarque dans un navire. Malheureusement, Njord ne nous a pas ete favorable et la tempete fut rude. La situation a bord est devenue tendue, nous nous sommes mutines. En represailles, Gardim, le capitaine, a fait passer quelques matelots par dessus bord. J'ai jure de les venger, mais je ne connais rien aux armes. Tu peux t'en charger pour moi ?"], 2: [-2, "Je comprends."], 3: [0, "En clair, j'aimerais que tu elimines Gardim. La paye sera bonne."], @@ -969,7 +969,7 @@ def h_39_npc(data, stat, entites, identifiant): weapons_sale.append(wpn) formated_wpn += "{0}. {1} [-{2} PO]\n".format(len(weapons_sale), weapons[wpn], 10 * wpn) - wpn_choice = print_text("Bienvenue a la forge de Nidavellir ! Vous desirez une piece particulière ?\n{}".format(formated_wpn), 1, 4, 0) + wpn_choice = print_text("Bienvenue a la forge de Nidavellir ! Vous desirez une piece particuliere ?\n{}".format(formated_wpn), 1, 4, 0) if not wpn_choice: return [0, "Hmm ?"] wpn = weapons_sale[wpn_choice - 1] diff --git a/idk/idk_lib.py b/idk/idk_lib.py index d3fc7df..8923107 100644 --- a/idk/idk_lib.py +++ b/idk/idk_lib.py @@ -109,6 +109,13 @@ def routine(data, stat): stat[2][4] += 1 +def low_bar(data, stat): + h = stat[4] // 60 + m = stat[4] % 60 + if m < 10: m = "0" + str(m) + return "{0}h{1} | {2}PV ".format(h, m, stat[0]) + + # Game mecanics def fight(stat, opponent_stat, opponent_name): @@ -337,7 +344,9 @@ def sleep(data, stat): def spell(data, stat): + to_disp = "Magie : {} PM".format(stat[2][4]) print(" Sorts ") + print(" |" + to_disp + " " * (16 - len(to_disp)) + "|") for i in range(3): if i < len(stat[7]): spell_id, level = stat[7][i] @@ -349,7 +358,7 @@ def spell(data, stat): print(" ============ ") spell_choice = get_input() - if not (1 <= spell_choice <= 3): spell_choice = 0 + if not (1 <= spell_choice <= 3) or spell_choice > len(stat[7]): spell_choice = 0 if spell_choice: spell_choice -= 1 spell_id, level = stat[7][spell_choice][0], stat[7][spell_choice][1] diff --git a/scenario_vierge.py b/scenario_vierge.py index 84edcb9..c94869b 100644 --- a/scenario_vierge.py +++ b/scenario_vierge.py @@ -1,8 +1,21 @@ from idk_lib import * +try: + import dlc_scenario as dlc + spells = dlc.dlc_spells + spells_level = dlc.dlc_spells_level + spells_effect = dlc.dlc_spells_effect + weapons = dlc.dlc_weapons + armors = dlc.dlc_armors + dlc_entities = dlc.dlc_entities +except: + dlc = None + dlc_entities = () + + # Game -def npc(data, stat): +def npc(data, stat, entities, identifiant): npc_data = ( asgard_npc, vanaheim_npc, @@ -24,10 +37,14 @@ def npc(data, stat): h_45_npc, h_46_npc, h_47_npc, h_48_npc) - return npc_core(npc_data[data[1]], data, stat) + if dlc: + event = dlc.dlc_npc(data, stat, entities, identifiant) + if event: return "dlc", event + + return npc_core(npc_data[data[1]], data, stat, entities, identifiant) -def point_of_interest(data, stat): +def point_of_interest(data, stat, entities, identifiant): po_data = ( asgard_po, vanaheim_po, @@ -41,13 +58,16 @@ def point_of_interest(data, stat): ) coords = data[2], data[3] - event = po_data[data[1]](coords) + event = po_data[data[1]](coords, identifiant) if not event: return [0, "Il n'y a rien à voir ici."] else: return event -print("") +entities = asgard_entities + vanaheim_entities + alfheim_entities + midgard_entities + niflheim_entities + jotunheim_entities + nidavellir_entities + muspellheim_entities + svartalfheim_entities + dlc_entities + +print("") +print("Entrez '' pour\nune nouvelle partie.") events = {"*": npc, "?": point_of_interest} keys = {4: display_stat, 7: spell, 8: misc_stat, 6: inventory, 9: sleep, "s": quick_save} @@ -59,18 +79,18 @@ def scenario(save_code=None): name = stat[5] data = [{"main": 0}, 3, 44, 66] - print_text("") + print_text("introduction") else: stat, data = decode_save(save_code) - idk_game = Asci(maps, events, keys) - stat, data = idk_game.mainloop(10, stat, data, routine=routine, door="^_", walkable=".,`' ", exit_key="q") + idk_game = Asci(maps, entities, events, keys) + stat, data = idk_game.mainloop(1, stat, data, routine=routine, door="^_", walkable=".,`' ", exit_key="q") if stat[9] != -1: data[0]["main"] -= stat[9] - if data[0]["main"] == 10: - print_text("") + if data[0]["main"] == 1: + print_text("conclusion") else: - print("Pour continuer :\nscenario(\"{}\")".format(encode_save(data, stat[:-1]))) + print("idk(\"{}\")".format(encode_save(data, stat[:-1]))) # Scenario @@ -83,12 +103,11 @@ def shop_interaction(data, stat, nb_choice, *events): # - - - Asgard - - - # -def asgard_po(coords): - # ? : (120, 26) - # ? : (51, 55) +def asgard_po(coords, identifiant): pass -def asgard_npc(data, stat): + +def asgard_npc(data, stat, entites, identifiant): coords = data[2], data[3] # * : ( 34, 7) # * : ( 29, 13) @@ -112,164 +131,85 @@ def asgard_npc(data, stat): # Forseti -def h_9_npc(data, stat): - # * : (19, 4) +def h_9_npc(data, stat, entites, identifiant): pass + # Odin -def h_10_npc(data, stat): - # * : (25, 11) +def h_10_npc(data, stat, entites, identifiant): + pass + +def h_11_npc(data, stat, entites, identifiant): pass -def h_11_npc(data, stat): - # * : (34, 7) - pass - - -def h_12_npc(data, stat): - # * : (19, 4) +def h_12_npc(data, stat, entites, identifiant): pass # Folkvangr -def h_13_npc(data, stat): - # * : (21, 8) +def h_13_npc(data, stat, entites, identifiant): pass -def h_14_npc(data, stat): - # * : (26, 2) +def h_14_npc(data, stat, entites, identifiant): pass # Vidar -def h_15_npc(data, stat): - # * : (10, 6) - pass - -def h_16_npc(data, stat): - # * : (50, 14) +def h_15_npc(data, stat, entites, identifiant): pass -def h_17_npc(data, stat): - # * : (36, 14) +def h_16_npc(data, stat, entites, identifiant): pass -def h_18_npc(data, stat): - # * : (30, 9) +def h_17_npc(data, stat, entites, identifiant): pass -def h_19_npc(data, stat): - # * : (28, 7) +def h_18_npc(data, stat, entites, identifiant): pass -def h_20_npc(data, stat): - # * : (39, 9) +def h_19_npc(data, stat, entites, identifiant): + pass + + +def h_20_npc(data, stat, entites, identifiant): pass # - - - Vanaheim - - - # -def vanaheim_po(coords): - # ? : (42, 20) +def vanaheim_po(coords, identifiant): + pass + +def vanaheim_npc(data, stat, entites, identifiant): pass -def vanaheim_npc(data, stat): - # * : (31; 12) - # * : (52; 22) - # * : (52; 30) - # * : (45; 39) - - # Charrette - if coords == (45, 39): - if stat[9] == -1 or data[0]["main"] == stat[9]: - stat[9] = data[0]["main"] - return [0, "[LE CONDUCTEUR DE LA CHARRETTE SE TOURNA VERS VOUS] Ou voulez-vous aller ? Je vous emmene pour 5 pieces.\n1. Midgard\n2. Jotunheim\n3. Alfheim", 3] - - else: - destinations = ("Midgard", "Jotunheim", "Alfheim") - dest_coords = ((3, 10, 58), (5, 11, 120), (2, 14, 68)) - for i in range(1, 4): - if data[0]["main"] == stat[9] + i: - stat[9] = -1 - if stat[1] < 5: return [-i, "Je ne travaille pas gratuitement."] - else: - data[1], data[2], data[3] = dest_coords[i - 1][0], dest_coords[i - 1][1], dest_coords[i - 1][2] - return [-i, "C'est parti pour {} !".format(destinations[i - 1]), 0, (1, -5), (4, 60)] - - -def h_21_npc(data, stat): - # * : (8, 1) - # * : (21, 6) - coords = data[2], data[3] - - if coords == (8, 1): - if stat[9] == -1 or data[0]["main"] == stat[9]: - stat[9] = data[0]["main"] - return [0, "Cher client bonjour ! Que puis-je faire pour vous ?\n1. Manger [5 PO]\n2. Boire [2 PO]\n3. Dormir [10 PO]", 3] - else: - event, _ = shop_interaction(data, stat, 3, - (5, [-1, "Et un plat chaud, un ! [VOUS VOUS ASSEYEZ DEVANT UN TRANCHOIR DE PAIN ET UNE ASSIETTE DE SOUPE EPAISSE.]", 0, (0, 5), (1, -5)], [-1, "Tsst, quand on ne peut pas payer, on ne rentre pas."]), - (2, [-2, "Et voila ! [L'AUBERGISTE PLACA DEVANT VOUS UNE CHOPE DE BIERE]", 0, (0, 2), (1, -2)], [-2, "La maison ne fait pas credit."]), - (10, [-3, "Votre chambre est a l'etage.\n[VOUS MONTEZ A L'ETAGE ET VOUS ENDORMEZ SANS DIFFICULTES.]", 0, (0, 10), (1, -10), (4, 480)], [-3, "Allez donc voir ailleurs."])) - - return event - - -def h_22_npc(data, stat): - # * : (36, 3) - # * : (2, 8) +def h_22_npc(data, stat, entites, identifiant): pass # - - - Alfheim - - - # -def alfheim_po(coords): - # ? : (34, 20) +def alfheim_po(coords, identifiant): pass -def alfheim_npc(data, stat): +def alfheim_npc(data, stat, entites, identifiant): # * : (11; 4) # * : (46; 6) # * : (23; 17) # * : (27; 54) - coords = data[2], data[3] - - # Charrette - if coords == (23, 17): - if stat[9] == -1 or data[0]["main"] == stat[9]: - stat[9] = data[0]["main"] - return [0, "[LE CONDUCTEUR DE LA CHARRETTE SE TOURNA VERS VOUS] Ou voulez-vous aller ? Je vous emmene pour 5 pieces.\n1. Midgard\n2. Asgard\n3. Vanaheim\n4. Svartalfheim", 4] - - else: - destinations = ("Midgard", "Asgard", "Vanaheim", "Svartalfheim") - dest_coords = ((3, 10, 58), (0, 126, 71), (1, 28, 13), (8, 109, 66)) - for i in range(1, 5): - if data[0]["main"] == stat[9] + i: - stat[9] = -1 - if stat[1] < 5: return [-i, "Je ne travaille pas gratuitement."] - else: - data[1], data[2], data[3] = dest_coords[i - 1][0], dest_coords[i - 1][1], dest_coords[i - 1][2] - return [-i, "C'est parti pour {} !".format(destinations[i - 1]), 0, (1, -5), (4, 60)] + pass -def h_23_npc(data, stat): - # * : (23, 5) +def h_23_npc(data, stat, entites, identifiant): pass - -def h_24_npc(data, stat): - # * : (12, 3) - # * : (36, 12) +def h_24_npc(data, stat, entites, identifiant): coords = data[2], data[3] - - - spells = ("Soin", "Flammes", "Givre", "Etincelles", "Fatigue") - levels = ("I", "II", "III", "IV", "V") if not (480 <= stat[4] <= 1140): return [0, "Excusez-moi, nous sommes fermes."] @@ -278,29 +218,144 @@ def h_24_npc(data, stat): if stat[9] == -1 or data[0]["main"] == stat[9]: stat[9] = data[0]["main"] - return [0, "Quel sort souhaitez-vous oublier ?\n" + "\n".join(["{0}. {1} {2}".format(nb + 1, spells[stat[7][nb][0]], levels[stat[7][nb][1] - 1]) for nb in range(len(stat[7]))]), len(stat[7])] + return [0, "Quel sort souhaitez-vous oublier ?\n" + "\n".join(["{0}. {1} {2}".format(nb + 1, spells[stat[7][nb][0]], spells_level[stat[7][nb][1] - 1]) for nb in range(len(stat[7]))]), len(stat[7])] else: for i in range(1, len(stat[7]) + 1): if data[0]["main"] == stat[9] + i: stat[9] = -1 stat[7].pop(i - 1) - return [-i, "Asseyez-vous, je vais vous faire oublier ce sort. [UN PUISSANT MAL DE TETE VOUS PRIT, LES MURS SEMBLERENT TANGUER TANDIS QUE VOTRE VUE DEVINT FLOUE. LE VERTIGE S'ESTOMPA PROGRESSIVEMENT.] Et voila !"] - - if coords == (36, 12): - spells_sale = ((0, 2), (1, 2), (2, 4), (4, 1)) + pts = (20 * stat[0]) // 100 + return [-i, "Asseyez-vous, je vais vous faire oublier ce sort. [UN PUISSANT MAL DE TETE VOUS PRIT, LES MURS SEMBLERENT TANGUER TANDIS QUE VOTRE VUE DEVINT FLOUE. LE VERTIGE S'ESTOMPA PROGRESSIVEMENT.] Et voila ! [-{} PV]".format(pts), 0, (0, -pts)] + if coords == (36, 12): if len(stat[7]) >= 3: return [0, "Je suis desole, vous ne pouvez pas apprendre plus de trois sorts."] + spells_sale = [] + formated_spells = "" + while len(spells_sale) < 3: + sp_id = randint(0, len(spells) - 1) + sp_lvl = randint(1, len(spells_level)) + + check = True + for sp in spells_sale: + if sp[0] == sp_id and sp[1] == sp_lvl: + check = False + break + + if check: + spells_sale.append((sp_id, sp_lvl)) + formated_spells += "{0}. {1} {2}\n".format(len(spells_sale), spells[sp_id], spells_level[sp_lvl - 1]) + + spell_choice = print_text("Diomwar, pour vous servir. Quel sort voulez-vous acheter ?\n{}".format(formated_spells), 1, 3, 0) + + if not spell_choice: return [0, "Hmm ?"] + + spell_sel = spells_sale[spell_choice - 1] + if stat[1] < 10 * spell_sel[1]: return [0, "Vous n'avez pas les moyens, desole."] + + spell_id = -1 + for sp_id in range(len(stat[7])): + sp = stat[7][sp_id] + if spell_sel[0] == sp[0]: + if spells_sel[1] <= sp[1]: return [0, "Vous connaissez deja ce sort."] + else: + spell_id = sp_id + break + + if spell_id == -1: + stat[7].append(spells_sale[i]) + else: + stat[7][spell_id] = spells_sale[i] + + return [0, "[DIOMWAR OUVRIT UN LIVRE RELIE DE CUIR NOIR, ET TRACA DU DOIGT DES SIGNES CABALISTIQUES SUR LE SOL. LES RUNES BRILLERENT PUISSAMMENT AVANT DE S'ETEINDRE.]", 0, (1, -10 * spells_sel[1])] + + +# - - - Midgard - - - # +def midgard_po(coords, identifiant): + pass + + +def midgard_npc(data, stat, entites, identifiant): + # (67, 46) + # (39, 49) + # (66, 56) + # (68, 71) + pass + + +def h_25_npc(data, stat, entites, identifiant): + pass + + +def h_26_npc(data, stat, entites, identifiant): + # * : (17, 7) + # * : (22, 7) + # * : (17, 8) + # * : (27, 8) + coords = data[2], data[3] + + if identifiant == "Rosahil Green": + if stat[4] >= 1320 or stat[4] <= 340: return [0, "Je suis desolee, nous sommes fermes. Revenez plus tard !"] + if stat[9] == -1 or data[0]["main"] == stat[9]: stat[9] = data[0]["main"] - return [0, "Diomwar, pour vous servir. Quel sort voulez-vous acheter ?\n1. Soin II\n2. Flammes II\n3. Givre IV\n4. Fatigue I", 4] + return [0, "Rosahil Green, tenanciere de cette auberge. Vous desirez quelque chose ?\n1.De quoi manger s'il vous plait. [-5 PO]\n2.Je voudrais une chambre pour la nuit. [-10 PO]", 2] + else: + event, choice = shop_interaction(data, stat, 2, + (5, [-1, "Et voila pour vous ! [ROSAHIL POSA UNE ASSIETTE DE RAGOUT CHAUD DEVANT VOUS.]", 0, (0, 5), (1, -5)], [-1, "Reviens quand tu auras assez de pieces d'or."]), + (10, [-2, "Suivez-moi, je vais vous montrer votre chambre. [VOUS SUIVEZ ROSAHIL DANS L'AUBERGE, LA NUIT PASSA.]", 0, (0, 10), (1, -10), (4, 480)], [-2, "Je suis desolee, tu n'as pas assez !"])) + + if choice == 2 and 360 < stat[4] < 1140: return [-2, "Il est trop tot, revenez vers 19h."] + else: return event + + else: return [0, "Ui hips ?"] + + +def h_27_npc(data, stat, entites, identifiant): + pass + + +def h_28_npc(data, stat, entites, identifiant): + pass + + +# - - - Niflheim - - - # +def niflheim_po(coords, identifiant): + pass + + +def niflheim_npc(data, stat, entites, identifiant): + # * : (95, 30) + # * : (57, 31) + # * : (39, 60) + # * : (108, 67) + pass + + +def h_29_npc(data, stat, entites, identifiant): + coords = data[2], data[3] + + n = len(spells) + spells_sale = [(i, len(spells_level)) for i in range(n)] + formated_spells = "" + for sp in range(n): + formated_spells += "{0}. {1} {2}\n".format(sp + 1, spells[spells_sale[sp][0]], spells_level[spells_sale[sp][1] - 1]) + + if not (480 <= stat[4] <= 1140): return [0, "Je suis desolee, nous sommes fermes."] + + if coords == (5, 5): + if len(stat[7]) >= 3: return [0, "Vous ne pouvez pas apprendre plus de sort, et je ne pratique pas les sorts d'oubli. Je crois qu'une librairie vers Alfheim le fait gratuitement."] + + if stat[9] == -1 or data[0]["main"] == stat[9]: + stat[9] = data[0]["main"] + return [0, "Merath, je vend les sorts les plus puissants de tout l'Yggdrasil ! Quel sort voulez-vous ?\n{}".format(formated_spells), n] else: - for i in range(1, 5): + for i in range(1, n + 1): if data[0]["main"] == stat[9] + i: stat[9] = -1 - if stat[1] < spells_sale[i - 1][1] * 10: return [-i, "Vous n'avez pas les moyens, desole."] + if stat[1] < 50: return [-i, "Vous n'avez pas les moyens, desolee."] spell_id = -1 for sp_id in range(len(stat[7])): @@ -316,150 +371,18 @@ def h_24_npc(data, stat): else: stat[7][spell_id] = spells_sale[i - 1] - return [-i, "[DIOMWAR OUVRIT UN LIVRE RELIE DE CUIR NOIR, ET TRACA DU DOIGT DES SIGNES CABALISTIQUES SUR LE SOL. LES RUNES BRILLERENT PUISSAMMENT AVANT DE S'ETEINDRE.]", 0, (1, -spells_sale[i - 1][1] * 10)] - - -# - - - Midgard - - - # -def midgard_po(coords): - # ? : (29, 9) - # ? : (53, 24) - # ? : (66, 45) - # ? : (52, 79) - pass - -def midgard_npc(data, stat): - # * : (67, 46) - # * : (39, 49) - # * : (66, 56) - # * : (68, 71) - # * : (8, 59) - # * : (94, 85) - # * : (51, 60) - coords = data[2], data[3] - - # Charrette - elif coords == (39, 49): - if stat[9] == -1 or data[0]["main"] == stat[9]: - stat[9] = data[0]["main"] - return [0, "[LE CONDUCTEUR DE LA CHARRETTE SE TOURNA VERS VOUS] Ou voulez-vous aller ? Je vous emmene pour 5 pieces.\n1. Vanaheim\n2. Asgard\n3. Nidavellir\n4. Niflheim", 4] - - else: - destinations = ("Vanaheim", "Asgard", "Nidavellir", "Niflheim") - dest_coords = ((1, 54, 29), (0, 126, 71), (6, 93, 8), (4, 78, 19)) - for i in range(1, 5): - if data[0]["main"] == stat[9] + i: - stat[9] = -1 - if stat[1] < 5: return [-i, "Je ne travaille pas gratuitement."] - else: - data[1], data[2], data[3] = dest_coords[i - 1][0], dest_coords[i - 1][1], dest_coords[i - 1][2] - return [-i, "C'est parti pour {} !".format(destinations[i - 1]), 0, (1, -5), (4, 60)] - - -def h_25_npc(data, stat): - pass - - -def h_26_npc(data, stat): - # * : (17, 7) - # * : (22, 7) - # * : (17, 8) - # * : (27, 8) - # * : (27, 6) - coords = data[2], data[3] - - - # Rosahil Green - if coords == (27, 6): - if stat[4] >= 1320 or stat[4] <= 340: return [0, "Je suis desolee, nous sommes fermes. Revenez plus tard !"] - - if stat[9] == -1 or data[0]["main"] == stat[9]: - stat[9] = data[0]["main"] - return [0, "Rosahil Green, tenanciere de cette auberge. Vous desirez quelque chose ?\n1.De quoi manger s'il vous plait. [-5 PO]\n2.Je voudrais une chambre pour la nuit. [-10 PO]", 2] - else: - event, choice = shop_interaction(data, stat, 2, - (5, [-1, "Et voila pour vous ! [ROSAHIL POSA UNE ASSIETTE DE RAGOUT CHAUD DEVANT VOUS.]", 0, (0, 5), (1, -5)], [-1, "Reviens quand tu auras assez de pieces d'or."]), - (10, [-2, "Suivez-moi, je vais vous montrer votre chambre. [VOUS SUIVEZ ROSAHIL DANS L'AUBERGE, LA NUIT PASSA.]", 0, (0, 10), (1, -10), (4, 480)], [-2, "Je suis desolee, tu n'as pas assez !"])) - - if choice == 2 and 360 < stat[4] < 1140: return [-2, "Il est trop tot, revenez vers 19h."] - else: return event - - else: return [0, "Ui hips ?"] - - -def h_27_npc(data, stat): - pass - - -def h_28_npc(data, stat): - # * : (27, 6) - pass - -# - - - Niflheim - - - # -def niflheim_po(coords): - # ? : (88, 32) - pass - -def niflheim_npc(data, stat): - # * : (95, 30) - # * : (57, 31) - # * : (39, 60) - # * : (108, 67) - pass - - -def h_29_npc(data, stat): - # * : (5, 5) - - coords = data[2], data[3] - - spells_sale = ((0, 5), (1, 5), (2, 5), (3, 5), (4, 5)) - - if not (480 <= stat[4] <= 1140): return [0, "Je suis desolee, nous sommes fermes."] - - if coords == (5, 5): - if len(stat[7]) >= 3: return [0, "Vous ne pouvez pas apprendre plus de sort, et je ne pratique pas les sorts d'oubli. Je crois qu'une librairie vers Alfheim le fait gratuitement."] - - if stat[9] == -1 or data[0]["main"] == stat[9]: - stat[9] = data[0]["main"] - return [0, "Merath, je vend les sorts les plus puissants de tout l'Yggdrasil ! Quel sort voulez-vous ?\n1. Soin V\n2. Flammes V\n3. Givre V\n4. Etincelles V\n4. Fatigue V", 4] - - else: - for i in range(1, 5): - if data[0]["main"] == stat[9] + i: - stat[9] = -1 - if stat[1] < 50: return [-i, "Vous n'avez pas les moyens, desolee."] - - spell_id = -1 - for sp_id, sp in range(len(stat[7])): - sp = stat[7][sp_id] - if spells_sale[i - 1][0] == sp[0]: - if spells_sale[i - 1][1] <= sp[1]: return [-i, "Vous connaissez deja ce sort."] - else: - spell_id = sp_id - break - - if spell_id == -1: - stat[7].append(spells_sale[i - 1]) - else: - stat[7][spell_id] = spells_sale[i - 1] - return [-i, "[MERATH SE RETOURNA ET S'EMPARA D'UN GRIMOIRE. ELLE L'OUVRIT ET LUT A HAUTE VOIX. UNE LOURDE TORPEUR S'ABBATIT SUR VOUS. QUAND VOUS REPRENEZ PLEINEMENT CONSCIENCE, LE SORT EST GRAVE DANS VOTRE MEMOIRE.]", 0, (1, -50)] -def h_30_npc(data, stat): - # * : (37, 4) - # * : (17, 6) +def h_30_npc(data, stat, entites, identifiant): pass # - - - Jotunheim - - - # -def jotunheim_po(coords): - # ? : (60, 57) - # ? : (23, 70) - # ? : (60, 86) +def jotunheim_po(coords, identifiant): pass -def jotunheim_npc(data, stat): +def jotunheim_npc(data, stat, entites, identifiant): # * : (25; 10) # * : (39; 20) # * : (3; 28) @@ -476,39 +399,30 @@ def jotunheim_npc(data, stat): pass -def h_31_npc(data, stat): - # * : (28, 4) +def h_31_npc(data, stat, entites, identifiant): pass -def h_32_npc(data, stat): - # * : (28, 6) +def h_32_npc(data, stat, entites, identifiant): pass -def h_33_npc(data, stat): - # * : (48, 5) - # * : (24, 7) +def h_33_npc(data, stat, entites, identifiant): pass -def h_34_npc(data, stat): - # * : (26, 6) +def h_34_npc(data, stat, entites, identifiant): pass -def h_35_npc(data, stat): - # * : (17, 5) +def h_35_npc(data, stat, entites, identifiant): pass -def h_36_npc(data, stat): - # * : (11, 3) - # * : (27, 10) - # * : (9, 12) +def h_36_npc(data, stat, entites, identifiant): coords = data[2], data[3] - if coords == (27, 10): + if identifiant == "jotunheim_aubergiste": if not (300 <= stat[4] <= 1380): return [0, "Je suis desole, nous somme ferme la nuit."] if stat[9] == -1 or data[0]["main"] == stat[9]: @@ -525,12 +439,10 @@ def h_36_npc(data, stat): # - - - Nidavellir - - - # -def nidavellir_po(coords): - # ? : (65, 7) - # ? : (66, 58) +def nidavellir_po(coords, identifiant): pass -def nidavellir_npc(data, stat): +def nidavellir_npc(data, stat, entites, identifiant): # * : (49, 21) # * : (25, 31) # * : (74, 46) @@ -539,15 +451,10 @@ def nidavellir_npc(data, stat): pass -def h_37_npc(data, stat): - # * : (2, 1) - # * : (26, 1) - # * : (10, 5) - # * : (27, 8) - # * : (3, 10) +def h_37_npc(data, stat, entites, identifiant): coords = data[2], data[3] - if coords == (2, 1): + if identifiant == "Muin": if not (340 <= stat[4] <= 1380): return [0, "Nous sommes ouverts de 5 heures a 23."] if stat[9] == -1 or data[0]["main"] == stat[9]: @@ -566,35 +473,33 @@ def h_37_npc(data, stat): return [0, "Hmm ?"] -def h_38_npc(data, stat): - # * : (12, 3) - # * : (19, 7) +def h_38_npc(data, stat, entites, identifiant): pass -def h_39_npc(data, stat): - # * : (9, 2) - # * : (9, 4) +def h_39_npc(data, stat, entites, identifiant): coords = data[2], data[3] - if not (480 <= stat[4] <= 1140): return [0, "La forge de Nivallir est ouverte de 8 heures a 18 heures."] + if not (480 <= stat[4] <= 1140): return [0, "La forge de Nidavellir est ouverte de 8 heures a 18 heures."] if coords == (9, 2): - if stat[3][0]: return [0, "Vous avez deja une arme. Allez voir mon confrere si vous voulez la vendre et revenez me voir."] - elif stat[9] == -1 or data[0]["main"] == stat[9]: - stat[9] = data[0]["main"] - return [0, "Bienvenue a la forge de Nidavellir ! Vous desirez une piece particulière ?\n1. Un marteau [-20 PO]\n2. Une masse [-30 PO]\n3. Un fleau [-40 PO]\n4. Une hache [-50 PO]", 4] + weapons_sale = [] + formated_wpn = "" + while len(weapons_sale) < 4: + wpn = randint(1, len(weapons) - 1) + if not wpn in weapons_sale: + weapons_sale.append(wpn) + formated_wpn += "{0}. {1} [-{2} PO]\n".format(len(weapons_sale), weapons[wpn], 10 * wpn) - else: - weapons = ("UN MARTEAU", "UNE MASSE", "UN FLEAU", "UNE HACHE") - for i in range(1, 5): - if data[0]["main"] == stat[9] + i: - stat[9] = -1 - if stat[1] < (i+1) * 10: return [-i, "Vous n'avez pas assez."] - stat[3][0] = i + 1 - return [-i, "Tres bon choix ! [LE NAIN DECROCHA {} DU RATELIER ET VOUS TENDIT L'ARME.]".format(weapons[i - 1]), 0, (1, -(i+1) * 10)] + wpn_choice = print_text("Bienvenue a la forge de Nidavellir ! Vous desirez une piece particulière ?\n{}".format(formated_wpn), 1, 4, 0) + if not wpn_choice: return [0, "Hmm ?"] + + wpn = weapons_sale[wpn_choice - 1] + if stat[1] < 10 * wpn: return [0, "Vous n'avez pas assez."] + stat[3][0] = wpn + return [0, "Tres bon choix ! [LE NAIN DECROCHA L'ARME DU RATELIER ET VOUS LA TENDIT.]", 0, (1, -10 * wpn)] if coords == (9, 4): if stat[3][0] == 0: return [0, "Vous n'avez pas d'arme a me vendre. Allez voir mon collegue pour en acheter une."] @@ -614,42 +519,36 @@ def h_39_npc(data, stat): return [-2, "A votre guise, revenez quand vous voulez !"] -def h_40_npc(data, stat): - # * : (14, 5) +def h_40_npc(data, stat, entites, identifiant): pass -def h_41_npc(data, stat): - # * : (12, 2) - # * : (10, 8) +def h_41_npc(data, stat, entites, identifiant): pass # - - - Muspellheim - - - # -def muspellheim_po(coords): - # ? (66, 8) - # ? : (64, 97) +def muspellheim_po(coords, identifiant): pass - -def muspellheim_npc(data, stat): +def muspellheim_npc(data, stat, entites, identifiant): # * : (20, 12) # * : (78, 14) # * : (54, 80) # * : (59, 91) # * : (39, 94) # * : (29, 113) - pass - - -def h_42_npc(data, stat): - # * : (11, 5) - # * : (6, 7) - # * : (31, 9) - # * : (2, 11) + coords = data[2], data[3] - if coords == (6, 7): + if coords == (39, 94): + if data[0]["main"] == 71: return [15, 20, 20, 15, 100], "Soldat Vane", 20, 2 + + +def h_42_npc(data, stat, entites, identifiant): + coords = data[2], data[3] + + if identifiant == "muspellheim_aubergiste": if not (300 <= stat[4] <= 1380): return [0, "Nous sommes ouverts de 5 a 23 heures."] if stat[9] == -1 or data[0]["main"] == stat[9]: @@ -663,15 +562,12 @@ def h_42_npc(data, stat): return event -def h_43_npc(data, stat): - # * : (24, 4) - # * : (6, 5) - # * : (13, 9) +def h_43_npc(data, stat, entites, identifiant): coords = data[2], data[3] if not (480 <= stat[4] <= 1140): return [0, "L'armurerie est ouverte de 8 heures a 18 heures."] - if coords == (24, 4): + if identifiant == "Bertfrid": if stat[3][1]: return [0, "Vous portez deja une armure, allez voir mon confrere."] if stat[9] == -1 or data[0]["main"] == stat[9]: @@ -704,22 +600,18 @@ def h_43_npc(data, stat): return [-2, "Revenez quand vous voulez !"] elif coords == (6, 5): - return [0, "Je ne suis qu'apprenti monseigneur. Adressez-vous plutot a Bertfrid."] + return [0, "Je ne suis qu'apprenti monseigneur. Adressez-vous plutot a Bertfrid. Vous la trouverez pres du four."] -def h_44_npc(data, stat): - # * : (13, 2) - # * : (13, 20) +def h_44_npc(data, stat, entites, identifiant): pass # - - - Svartalfheim - - - # -def svartalfheim_po(coords): - # ? : (113, 37) +def svartalfheim_po(coords, identifiant): pass - -def svartalfheim_npc(data, stat): +def svartalfheim_npc(data, stat, entites, identifiant): # * : (10; 24) # * : (105; 46) # * : (22; 50) @@ -728,23 +620,16 @@ def svartalfheim_npc(data, stat): # * : (121; 68) pass -def h_45_npc(data, stat): - # * : (15, 4) +def h_45_npc(data, stat, entites, identifiant): pass -def h_46_npc(data, stat): - # * : (13, 2) - # * : (13, 4) +def h_46_npc(data, stat, entites, identifiant): pass -def h_47_npc(data, stat): - # * : (3, 4) - # * : (15, 8) +def h_47_npc(data, stat, entites, identifiant): pass -def h_48_npc(data, stat): - # * : (34, 5) - # * : (29, 6) +def h_48_npc(data, stat, entites, identifiant): pass