rom24-quickmud-python 2.9.18__py3-none-any.whl → 2.9.20__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,11 +11,23 @@ from mud.models.constants import AffectFlag, PlayerFlag, Position
11
11
  from mud.world.char_find import get_char_room
12
12
 
13
13
 
14
+ def _display_name(character: Character | None) -> str:
15
+ if character is None:
16
+ return "Someone"
17
+ name = getattr(character, "name", None)
18
+ if isinstance(name, str) and name:
19
+ return name
20
+ short_descr = getattr(character, "short_descr", None)
21
+ if isinstance(short_descr, str) and short_descr:
22
+ return short_descr
23
+ return "Someone"
24
+
25
+
14
26
  def add_follower(char: Character, master: Character) -> None:
15
27
  """
16
28
  Add char as a follower of master.
17
29
 
18
- ROM Reference: src/act_comm.c add_follower (lines 1600-1620)
30
+ ROM Reference: src/act_comm.c add_follower (lines 1591-1607)
19
31
  """
20
32
  if char.master is not None:
21
33
  return # Already following someone
@@ -28,6 +40,19 @@ def add_follower(char: Character, master: Character) -> None:
28
40
  if char not in master.followers:
29
41
  master.followers.append(char)
30
42
 
43
+ # ROM lines 1602-1605: act("$n now follows you.", ch, NULL, master, TO_VICT)
44
+ # gated on can_see(master, ch); act("You now follow $N.", ch, NULL, master, TO_CHAR).
45
+ from mud.world.vision import can_see_character
46
+
47
+ if can_see_character(master, char):
48
+ master_messages = getattr(master, "messages", None)
49
+ if isinstance(master_messages, list):
50
+ master_messages.append(f"{_display_name(char)} now follows you.")
51
+
52
+ char_messages = getattr(char, "messages", None)
53
+ if isinstance(char_messages, list):
54
+ char_messages.append(f"You now follow {_display_name(master)}.")
55
+
31
56
 
32
57
  def stop_follower(char: Character) -> None:
33
58
  """
@@ -48,6 +73,19 @@ def stop_follower(char: Character) -> None:
48
73
  if hasattr(master, "followers") and char in master.followers:
49
74
  master.followers.remove(char)
50
75
 
76
+ # ROM lines 1626-1630: act("$n stops following you.", ch, NULL, ch->master, TO_VICT);
77
+ # act("You stop following $N.", ch, NULL, ch->master, TO_CHAR); gated on
78
+ # can_see(ch->master, ch) && ch->in_room != NULL.
79
+ from mud.world.vision import can_see_character
80
+
81
+ if can_see_character(master, char) and getattr(char, "room", None) is not None:
82
+ master_messages = getattr(master, "messages", None)
83
+ if isinstance(master_messages, list):
84
+ master_messages.append(f"{_display_name(char)} stops following you.")
85
+ char_messages = getattr(char, "messages", None)
86
+ if isinstance(char_messages, list):
87
+ char_messages.append(f"You stop following {_display_name(master)}.")
88
+
51
89
  char.master = None
52
90
  char.leader = None
53
91
 
@@ -221,16 +259,45 @@ def do_group(char: Character, args: str) -> str:
221
259
  if char_affected & AffectFlag.CHARM:
222
260
  return "You like your master too much to leave!"
223
261
 
224
- # Already in group - remove
262
+ leader_name = _display_name(char)
263
+ victim_name_str = _display_name(victim)
264
+
265
+ # Already in group - remove (ROM src/act_comm.c:1838-1847)
225
266
  if is_same_group(victim, char) and char is not victim:
226
267
  victim.leader = None
227
- victim_name = getattr(victim, "short_descr", None) or getattr(victim, "name", "them")
228
- return f"You remove {victim_name} from your group."
229
-
230
- # Add to group
268
+ # TO_VICT: "$n removes you from $s group."
269
+ victim_messages = getattr(victim, "messages", None)
270
+ if isinstance(victim_messages, list):
271
+ victim_messages.append(f"{leader_name} removes you from {leader_name}'s group.")
272
+ # TO_NOTVICT: "$n removes $N from $s group."
273
+ room = getattr(char, "room", None)
274
+ if room is not None:
275
+ notvict_msg = f"{leader_name} removes {victim_name_str} from {leader_name}'s group."
276
+ for occupant in list(getattr(room, "people", []) or []):
277
+ if occupant is char or occupant is victim:
278
+ continue
279
+ occ_messages = getattr(occupant, "messages", None)
280
+ if isinstance(occ_messages, list):
281
+ occ_messages.append(notvict_msg)
282
+ return f"You remove {victim_name_str} from your group."
283
+
284
+ # Add to group (ROM src/act_comm.c:1850-1854)
231
285
  victim.leader = char
232
- victim_name = getattr(victim, "short_descr", None) or getattr(victim, "name", "someone")
233
- return f"{victim_name} joins your group."
286
+ # TO_VICT: "You join $n's group."
287
+ victim_messages = getattr(victim, "messages", None)
288
+ if isinstance(victim_messages, list):
289
+ victim_messages.append(f"You join {leader_name}'s group.")
290
+ # TO_NOTVICT: "$N joins $n's group."
291
+ room = getattr(char, "room", None)
292
+ if room is not None:
293
+ notvict_msg = f"{victim_name_str} joins {leader_name}'s group."
294
+ for occupant in list(getattr(room, "people", []) or []):
295
+ if occupant is char or occupant is victim:
296
+ continue
297
+ occ_messages = getattr(occupant, "messages", None)
298
+ if isinstance(occ_messages, list):
299
+ occ_messages.append(notvict_msg)
300
+ return f"{victim_name_str} joins your group."
234
301
 
235
302
 
236
303
  def do_gtell(char: Character, args: str) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rom24-quickmud-python
3
- Version: 2.9.18
3
+ Version: 2.9.20
4
4
  Summary: A modern Python port of the ROM 2.4b6 MUD engine with full telnet server and JSON world loading
5
5
  Author-email: Mark Jedrzejczyk <mark.jedrzejczyk@gmail.com>
6
6
  Maintainer-email: Mark Jedrzejczyk <mark.jedrzejczyk@gmail.com>
@@ -59,7 +59,7 @@ mud/commands/doors.py,sha256=KWMQPVJHs8-xPFE08kStOOU9x5ugN5sEFuo7nlQL2Z8,19777
59
59
  mud/commands/equipment.py,sha256=BXUJhe_volohdgUKpugV8Wfcn-pHXG6ooaKeF6LmcI4,22882
60
60
  mud/commands/feedback.py,sha256=qEmUlVy1KC6ludpAREdqvf8gpa8jmgN4AMLor0EoO7E,2472
61
61
  mud/commands/give.py,sha256=BcZjqFm1WqhoRi9qZJ8G9zRu_buXptwg9Y7_oSNnFVE,8787
62
- mud/commands/group_commands.py,sha256=FZeOKy0bu50B4vB3X-pfE-hjZ3CbpI5qSES8Jc56gGM,16916
62
+ mud/commands/group_commands.py,sha256=Cz3LNTCccR4ghpyE5QORDlZBwpzkli93uueF3zZBoHk,20077
63
63
  mud/commands/healer.py,sha256=noZ3t97C_0j1GEJd8nUNYYv4clHxuD4dvFSR3c1gfUA,7576
64
64
  mud/commands/help.py,sha256=GfQWy6MyFtDc-mW1dM7pPN1SFVsWtIGno8uR4dRQYjg,11124
65
65
  mud/commands/imc.py,sha256=v1lPP2xDjQjkk7negwjCXJtcRPQkBEIGWmpPKf1XPzU,12204
@@ -216,9 +216,9 @@ mud/world/obj_find.py,sha256=tgnUkbFjnCl586Lzl6yRzCmllZSNEfQpQlrxCMVcUGU,5295
216
216
  mud/world/time_persistence.py,sha256=K4uhRpu08IDHY5uReBYTvw4BHuqsSxWvbv-h1VsPvf8,1663
217
217
  mud/world/vision.py,sha256=NRk3cvrGyyldU4W98qAVlYZp9wL-IUE1dTgk6DpM-NA,11609
218
218
  mud/world/world_state.py,sha256=3KpiDP6v24sZDn9-g44UypXpegzgRShHo1XvektJzdU,8810
219
- rom24_quickmud_python-2.9.18.dist-info/licenses/LICENSE,sha256=anQ2j9As6sIC8tZgQCXbo0-09JDH9vPiqhA9djnOvkY,1078
220
- rom24_quickmud_python-2.9.18.dist-info/METADATA,sha256=Gath7nkg7vP0AgqOnrU6xmSEiNQg1HFEFGo1sn5CBQU,15671
221
- rom24_quickmud_python-2.9.18.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
222
- rom24_quickmud_python-2.9.18.dist-info/entry_points.txt,sha256=VFru08UQTXZA_CkK-NBjJmWHyEX5a3864fQHjhaojbw,41
223
- rom24_quickmud_python-2.9.18.dist-info/top_level.txt,sha256=Fk1WPmabIIjp7_iZXLYpbAVqiq7lG7TeAHt30AsOKtQ,4
224
- rom24_quickmud_python-2.9.18.dist-info/RECORD,,
219
+ rom24_quickmud_python-2.9.20.dist-info/licenses/LICENSE,sha256=anQ2j9As6sIC8tZgQCXbo0-09JDH9vPiqhA9djnOvkY,1078
220
+ rom24_quickmud_python-2.9.20.dist-info/METADATA,sha256=2ZdXr4J9qst8o-JpVWVsZJFT2F2Gpnf9vkYZ1_GA7xE,15671
221
+ rom24_quickmud_python-2.9.20.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
222
+ rom24_quickmud_python-2.9.20.dist-info/entry_points.txt,sha256=VFru08UQTXZA_CkK-NBjJmWHyEX5a3864fQHjhaojbw,41
223
+ rom24_quickmud_python-2.9.20.dist-info/top_level.txt,sha256=Fk1WPmabIIjp7_iZXLYpbAVqiq7lG7TeAHt30AsOKtQ,4
224
+ rom24_quickmud_python-2.9.20.dist-info/RECORD,,