From d399af040d96b9af65ce118cbbedffed54fb8614 Mon Sep 17 00:00:00 2001 From: 0x_Hazel <0x.voidweaver@gmail.com> Date: Wed, 10 Jan 2024 10:04:56 +0000 Subject: [PATCH 1/3] Incorporated say and pose into encounter system --- commands/encounter_cmdset.py | 48 +++++++++++++++++++++++++++++++- typeclasses/characters.py | 9 ++++++ typeclasses/encounter_handler.py | 14 ++++++++-- 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/commands/encounter_cmdset.py b/commands/encounter_cmdset.py index 978b3ec..2f5e609 100644 --- a/commands/encounter_cmdset.py +++ b/commands/encounter_cmdset.py @@ -100,6 +100,7 @@ class CmdRP(EncounterCommand): "Free-form text input (for describing your actions in RP)" energy_cost = 0 key = "rp" + arg_regex = None aliases = [">"] help_category = "Encounter" @@ -118,11 +119,56 @@ class CmdFlee(EncounterCommand): super().handler().msg_all(f"{self.caller.key} left the encounter") super().handler().remove_character(self.caller) +class CmdOOC(EncounterCommand): + "Say something out-of-character" + energy_cost = 0 + key = "(" + arg_regex = None + + def func(self): + super().handler().msg_all(f"({self.caller}: {self.args.strip()})") + +class CmdPose(EncounterCommand): + """ + strike a pose + + Usage: + pose + pose's + + Example: + pose is standing by the wall, smiling. + -> others will see: + Tom is standing by the wall, smiling. + + Describe an action being taken. The pose text will + automatically begin with your name. + """ + key = "pose" + aliases = [":", "emote"] + locks = "cmd:all()" + arg_regex = None + energy_cost = 0 + def parse(self): + args = self.args + if args and not args[0] in ["'", ",", ":"]: + args = " %s" % args.strip() + self.args = args + def func(self): + if super().can_perform(): + if not self.args: + self.msg("What do you want to do?") + else: + msg = f"{self.caller.name}{self.args}" + super().handler().msg_all_rich((msg, {'type':'pose'}), self.caller) + class SetEncounterSpecial(CmdSet): def at_cmdset_creation(self): self.add(CmdPass) self.add(CmdRP) - self.add(CmdFlee) + self.add(CmdFlee) + self.add(CmdOOC) + self.add(CmdPose) # Encounter-related character commands diff --git a/typeclasses/characters.py b/typeclasses/characters.py index 4b0b2d8..afec07c 100644 --- a/typeclasses/characters.py +++ b/typeclasses/characters.py @@ -27,3 +27,12 @@ class Character(ClothedCharacter): return False return True + def at_pre_say(self, speech): + if self.ndb.encounter_handler: + if self.ndb.encounter_handler.is_turn(self): + self.ndb.encounter_handler.msg_all(f"{self} says, \"{speech}\"") + else: + self.ndb.encounter_handler.pre_say(self) + return None + else: + return speech diff --git a/typeclasses/encounter_handler.py b/typeclasses/encounter_handler.py index a3e5119..e25dade 100644 --- a/typeclasses/encounter_handler.py +++ b/typeclasses/encounter_handler.py @@ -68,6 +68,10 @@ class EncounterHandler(DefaultScript): for char in self.db.characters.values(): char.msg(message) + def msg_all_rich(self, text, obj): + for char in self.db.characters.values(): + char.msg(text = text, from_obj = obj) + def can_act(self, cmd): caller = cmd.caller cmdname = cmd.key @@ -80,10 +84,16 @@ class EncounterHandler(DefaultScript): caller.msg("You do not have enough energy remaining") caller.msg(f"You have: {self.db.turn_energy}, but need {energy}") else: - caller.msg("(It's not your turn yet!)") - caller.msg("(You can talk out-of-character using parentheses)") + self.pre_say(caller) return False + def is_turn(self, char): + return self.db.turns[self.db.turn_index] == char.id + + def pre_say(self, caller): + caller.msg("(It's not your turn yet!)") + caller.msg("(You can talk out-of-character using parentheses)") + def has_default_target(self, caller): if (len(self.db.characters) == 2) and (caller in self.db.characters.values()): keys = list(self.db.characters.keys()) From 140d430235c4f41370e71dfdbb92f8b2fa9969b6 Mon Sep 17 00:00:00 2001 From: 0x_hazel <0x.voidweaver@gmail.com> Date: Sat, 13 Jan 2024 11:47:18 +0800 Subject: [PATCH 2/3] Allow encounter handlers to properly close --- typeclasses/encounter_handler.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/typeclasses/encounter_handler.py b/typeclasses/encounter_handler.py index e25dade..4c04901 100644 --- a/typeclasses/encounter_handler.py +++ b/typeclasses/encounter_handler.py @@ -13,8 +13,6 @@ class EncounterHandler(DefaultScript): def at_script_creation(self): # When initiating the encounter self.key = f"encounter_handler_{random.randint(1, 1000)}" - self.desc = "Handles an encounter" - self.persistent = True self.db.characters = {} self.db.turns = [] @@ -34,15 +32,11 @@ class EncounterHandler(DefaultScript): del character.ndb.encounter_handler character.revoke_encounter_cmdset() - def at_start(self): - # When initializing or rebooting - for character in self.db.characters.values(): - self._init_character(character) - def at_stop(self): - # When deinitializing or rebooting + # When deinitializing for character in list(self.db.characters.values()): self._cleanup_character(character) + self.delete() def add_character(self, character): # Adds a character to the encounter @@ -58,10 +52,9 @@ class EncounterHandler(DefaultScript): if len(self.db.characters) == 1: char = list(self.db.characters.values())[0] char.msg("You are no longer in an encounter.") - self._cleanup_character(char) - self.stop() + self.at_stop() elif not self.db.characters: - self.stop() + self.at_stop() def msg_all(self, message): # Sends text to all players in the encounter From 68cd345d75c0ef3e874cd5729b933fe40d8050b5 Mon Sep 17 00:00:00 2001 From: 0x_Hazel <0x.voidweaver@gmail.com> Date: Sat, 13 Jan 2024 04:21:58 +0000 Subject: [PATCH 3/3] Removed being able to engage yourself in an encounter --- commands/encounter_cmdset.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/commands/encounter_cmdset.py b/commands/encounter_cmdset.py index 2f5e609..13d106b 100644 --- a/commands/encounter_cmdset.py +++ b/commands/encounter_cmdset.py @@ -177,7 +177,7 @@ class CmdEngage(Command): Initiates an encounter with the selected target """ key = "engage" - aliases = ["encounter"] + aliases = ["encounter", "fight"] def func(self): if not self.args: self.caller.msg("Usage: engage ") @@ -185,6 +185,9 @@ class CmdEngage(Command): target = self.caller.search(self.args) if not target: return + if target == self.caller: + self.caller.msg("You can't initiate an encounter with yourself!") + return if target.ndb.encounter_handler: target.ndb.encounter_handler.add_character(self.caller) target.ndb.encounter_handler.msg_all(f"{self.caller} joins the encounter")