rom24-quickmud-python 2.2.1__py3-none-any.whl → 2.3.1__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.
mud/combat/death.py CHANGED
@@ -557,7 +557,10 @@ def raw_kill(victim: Character) -> Object | None:
557
557
  """Handle character death by creating a corpse and removing the victim."""
558
558
 
559
559
  from mud.combat.engine import stop_fighting as _stop_fighting
560
-
560
+
561
+ # Trigger death mobprog handled in apply_damage before raw_kill
562
+ # ROM Reference: src/fight.c:1136-1180 (mp_death_trigger called before raw_kill)
563
+
561
564
  _stop_fighting(victim, True)
562
565
  death_cry(victim)
563
566
  corpse = make_corpse(victim)
mud/combat/engine.py CHANGED
@@ -535,6 +535,11 @@ def apply_damage(
535
535
  old_pos = victim.position
536
536
  victim.hit -= damage
537
537
 
538
+ # Trigger HP percent mobprog (ROM Reference: src/fight.c:1094-1136)
539
+ victim_is_npc = getattr(victim, "is_npc", False)
540
+ if victim_is_npc and victim.hit > 0:
541
+ mobprog.mp_hprct_trigger(victim, attacker)
542
+
538
543
  # Immortals don't die (ROM IS_IMMORTAL check)
539
544
  if not victim.is_npc and victim.is_immortal() and victim.hit < 1:
540
545
  victim.hit = 1
@@ -9,6 +9,7 @@ from mud.characters import is_clan_member, is_same_clan
9
9
  from mud.models.character import Character, character_registry
10
10
  from mud.models.constants import CommFlag, Position
11
11
  from mud.net.protocol import broadcast_global, broadcast_room, send_to_char
12
+ from mud.mobprog import mp_speech_trigger
12
13
 
13
14
  if TYPE_CHECKING:
14
15
  from mud.net.session import Session
@@ -118,7 +118,7 @@ from .typo_guards import do_qui, do_murde, do_reboo, do_shutdow, do_alia, do_col
118
118
  from .misc_player import do_afk, do_replay, do_config, do_permit, do_peek, do_unread
119
119
  from .remaining_rom import (
120
120
  do_wimpy, do_deaf, do_quiet, do_envenom, do_gain, do_groups, do_guild,
121
- do_flag, do_mob, do_bs, do_go, do_junk, do_tap, do_teleport
121
+ do_flag, do_mob, do_bs, do_go, do_junk, do_tap, do_teleport, do_qmread
122
122
  )
123
123
  from .healer import do_heal
124
124
  from .help import do_help, do_wizlist
@@ -243,6 +243,7 @@ COMMANDS: list[Command] = [
243
243
  Command("answer", do_answer, min_position=Position.RESTING),
244
244
  Command("music", do_music, min_position=Position.RESTING),
245
245
  Command("clan", do_clantalk, min_position=Position.SLEEPING),
246
+ Command("clantalk", do_clantalk, min_position=Position.SLEEPING), # ROM alias
246
247
  Command(
247
248
  "immtalk",
248
249
  do_immtalk,
@@ -395,6 +396,8 @@ COMMANDS: list[Command] = [
395
396
  Command("incognito", do_incognito, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
396
397
  Command("poofin", do_poofin, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
397
398
  Command("poofout", do_poofout, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
399
+ Command("bamfin", do_poofin, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL), # ROM alias
400
+ Command("bamfout", do_poofout, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL), # ROM alias
398
401
  Command("echo", do_echo, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
399
402
  Command("recho", do_recho, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
400
403
  Command("zecho", do_zecho, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
@@ -439,6 +442,7 @@ COMMANDS: list[Command] = [
439
442
  Command("resets", do_resets, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
440
443
  Command("alist", do_alist, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
441
444
  Command("edit", do_edit, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
445
+ Command("olc", do_edit, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL), # ROM alias for edit
442
446
  Command("mpedit", do_mpedit, min_position=Position.DEAD, min_trust=LEVEL_IMMORTAL),
443
447
  # Miscellaneous Player Commands
444
448
  Command("afk", do_afk, min_position=Position.SLEEPING),
@@ -535,6 +539,12 @@ COMMANDS: list[Command] = [
535
539
  log_level=LogLevel.ALWAYS,
536
540
  min_trust=LEVEL_HERO,
537
541
  ),
542
+ Command(
543
+ "qmread",
544
+ do_qmread,
545
+ admin_only=True,
546
+ min_trust=MAX_LEVEL,
547
+ ),
538
548
  # OLC Commands - ROM style (no @ prefix)
539
549
  Command("redit", cmd_redit, admin_only=True, min_trust=LEVEL_HERO),
540
550
  Command("aedit", cmd_aedit, admin_only=True, min_trust=LEVEL_HERO),
mud/commands/give.py CHANGED
@@ -133,8 +133,12 @@ def do_give(char: Character, args: str) -> str:
133
133
  obj_name = getattr(obj, "short_descr", None) or getattr(obj, "name", "something")
134
134
  victim_name = getattr(victim, "short_descr", None) or getattr(victim, "name", "them")
135
135
 
136
- # Trigger bribe mobprog if NPC and has trigger
137
- # (Mobprog triggering would go here)
136
+ # Trigger give mobprog if NPC and has trigger
137
+ # ROM Reference: src/act_obj.c:841-842
138
+ victim_is_npc = getattr(victim, "is_npc", False)
139
+ if victim_is_npc:
140
+ from mud.mobprog import mp_give_trigger
141
+ mp_give_trigger(victim, char, obj)
138
142
 
139
143
  return f"You give {obj_name} to {victim_name}."
140
144
 
@@ -550,3 +550,22 @@ def _send_to_char(char: Character, message: str) -> None:
550
550
  if not hasattr(char, "output_buffer"):
551
551
  char.output_buffer = []
552
552
  char.output_buffer.append(message)
553
+
554
+
555
+ def do_qmread(char: Character, args: str) -> str:
556
+ """
557
+ QuickMUD config file read command.
558
+
559
+ ROM Reference: src/interp.h declares do_qmread but never implements it.
560
+ This is a stub for ROM command parity.
561
+
562
+ Usage: qmread
563
+
564
+ Note: In ROM QuickMUD, this was planned to read qmconfig.rc but was
565
+ never fully implemented. The qmconfig command handles config reading.
566
+ """
567
+ trust = get_trust(char)
568
+ if trust < MAX_LEVEL:
569
+ return "Huh?"
570
+
571
+ return "QMConfig settings can be viewed with 'qmconfig' command."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rom24-quickmud-python
3
- Version: 2.2.1
3
+ Version: 2.3.1
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>
@@ -53,11 +53,11 @@ Dynamic: license-file
53
53
 
54
54
  # QuickMUD - A Modern ROM 2.4 Python Port
55
55
 
56
- [![PyPI version](https://badge.fury.io/py/quickmud.svg)](https://badge.fury.io/py/quickmud)
56
+ [![Version](https://img.shields.io/badge/version-2.3.1-blue.svg)](https://github.com/avinson/rom24-quickmud)
57
57
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
58
58
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
59
- [![Tests](https://img.shields.io/badge/tests-1435%2F1436%20passing-brightgreen.svg)](https://github.com/Nostoi/rom24-quickmud-python)
60
- [![ROM 2.4b Parity](https://img.shields.io/badge/ROM%202.4b%20Parity-100%25-success.svg)](ROM_PARITY_FEATURE_TRACKER.md)
59
+ [![Tests](https://img.shields.io/badge/tests-1555%20passing-brightgreen.svg)](https://github.com/Nostoi/rom24-quickmud-python)
60
+ [![ROM 2.4b Parity](https://img.shields.io/badge/ROM%202.4b%20Parity-100%25-success.svg)](docs/parity/ROM_PARITY_FEATURE_TRACKER.md)
61
61
  [![Function Coverage](https://img.shields.io/badge/ROM%20C%20Functions-96.1%25-blue.svg)](FUNCTION_MAPPING.md)
62
62
 
63
63
  **QuickMUD is a modern Python port of the legendary ROM 2.4b6 MUD engine**, derived from ROM 2.4b6, Merc 2.1 and DikuMUD. This is a complete rewrite that brings the classic text-based MMORPG experience to modern Python with async networking, JSON world data, and **100% ROM 2.4b behavioral parity**.
@@ -312,7 +312,7 @@ For developers interested in extending QuickMUD beyond ROM 2.4b:
312
312
 
313
313
  ### 📚 For Contributors
314
314
 
315
- See [ROM_PARITY_FEATURE_TRACKER.md](ROM_PARITY_FEATURE_TRACKER.md) for detailed feature status and [AGENTS.md](AGENTS.md) for AI-assisted development workflows.
315
+ See [ROM_PARITY_FEATURE_TRACKER.md](docs/parity/ROM_PARITY_FEATURE_TRACKER.md) for detailed feature status and [AGENTS.md](AGENTS.md) for AI-assisted development workflows.
316
316
 
317
317
  **Development Guidelines**:
318
318
 
@@ -33,8 +33,8 @@ mud/characters/__init__.py,sha256=BTnH4-W4m7WtjqvOgiLK2BbgzBA0nPLKb71kaa1BnB4,16
33
33
  mud/characters/conditions.py,sha256=h7anKi7gy-WqBjP15N761SqEehlAsj6tTp4qdd62W6w,1523
34
34
  mud/characters/follow.py,sha256=FRLfR-Lm-navW_gpSQxTuTZp84C0AczHVx5BEaewR5w,2286
35
35
  mud/combat/__init__.py,sha256=7_DhedX3e2-cpBcQa3zgUH7F83MDpLpDAdSZhtc84LM,166
36
- mud/combat/death.py,sha256=YxdOVG8rIoTh1MEhXg2gdB0QXOFvT9zf7_ejlKLbSOE,19005
37
- mud/combat/engine.py,sha256=ZKIepIawdkiwiOgr-Vue_WZ-MlKI4jDoKciM_q9FH1Y,51780
36
+ mud/combat/death.py,sha256=9lznnkjeOp6GlDuzHNqq50QujcVKM7IF0wI91HNABUI,19167
37
+ mud/combat/engine.py,sha256=rm5dJBOZ5zaGhv_ayVMC7xp0gVZhW3xvcGZDcU2p-K0,51998
38
38
  mud/combat/kill_table.py,sha256=oR77me5GJLGXi3q5ZnQAdp3S5lsfJNhiCmaXOMQrNgA,1040
39
39
  mud/combat/messages.py,sha256=qxi7fkyW1V2mVZeXAtgdSehLhv7CmcPwe1SCyelCkHU,6262
40
40
  mud/combat/safety.py,sha256=EcQdUbE_vUFEhKv5ZG86ba4mNd6VG1Bw1ZWQW2sGYTc,3019
@@ -48,16 +48,16 @@ mud/commands/build.py,sha256=uJaJYtmFHrwAoUl0RDWPAWVHduVNZrxtPsAnH-M5j_w,85938
48
48
  mud/commands/channels.py,sha256=1PewUVrMk1Uh7dUj7ZZgUyL9xkQbSN7BY9KtBkL4GAc,1584
49
49
  mud/commands/character.py,sha256=xM41dx3lZBcrNRWAcMBjt5PiFi9q077oVkmmuiIFGf4,4223
50
50
  mud/commands/combat.py,sha256=DByqMIgUFdg31J5v3OX3bEPTTwwYXPmQ1hWFFjBeiEc,32867
51
- mud/commands/communication.py,sha256=71KrA-pzt02NSdCTYMmgtOJYxhINVA1fd8Ik3-CZ5OI,19317
51
+ mud/commands/communication.py,sha256=H3OjaI41Y6dbwje7RDSn2SHoqXtqlv2pjZhxSR52HnQ,19359
52
52
  mud/commands/compare.py,sha256=AmGl2OJy5KS_0U2zqv0EwSwpgfFee70oaDZC6xZ7Tzw,5176
53
53
  mud/commands/consider.py,sha256=rQwLTZq28nfdpnBmEgpV72FSvJJE5JPuPMhtMouN-hE,2230
54
54
  mud/commands/consumption.py,sha256=oKhXIS0mPRr-qq8HRxEHrrsSaHY_rgfjqjd8xC46_Eg,8009
55
55
  mud/commands/decorators.py,sha256=n_ezcovFkycAZOVxg0UNtMZLtiSlF0Yj8yqYt4YVY1U,345
56
- mud/commands/dispatcher.py,sha256=Te0lyBz7mEWuAsQGWVuzRFSG0h21bktIyP0GJTZNJsI,37892
56
+ mud/commands/dispatcher.py,sha256=cWfQaUG8KH3KAwZKFb5UC9Ti-8KGJO4dsCIZ4heKd2w,38406
57
57
  mud/commands/doors.py,sha256=M3TUHyD2PULh5H4Dsj1k6Jgn8qvAIWW687d2tyTVdyM,16058
58
58
  mud/commands/equipment.py,sha256=RknjKfCLeR1djSHF3jvB3LHcTjFpuuRJJNSgdtnn17A,9075
59
59
  mud/commands/feedback.py,sha256=qEmUlVy1KC6ludpAREdqvf8gpa8jmgN4AMLor0EoO7E,2472
60
- mud/commands/give.py,sha256=qQy1g5twwj90iKxwktAg88isSQ_Uz8Fj6JiSjVkUYFg,6593
60
+ mud/commands/give.py,sha256=njzoCLD6m2ZKzvi8yjBwzJbR-hrN7JtBCKDxXsvn1zc,6760
61
61
  mud/commands/group_commands.py,sha256=wmJj07pSImQLzGQ7QrGZPpmRGlhMQoEK4tj_cWMTLlg,12413
62
62
  mud/commands/healer.py,sha256=1ahakNX2AW36zvbgqYnT6upvfvoXL-FX3TS7zK21RVs,2296
63
63
  mud/commands/help.py,sha256=GfQWy6MyFtDc-mW1dM7pPN1SFVsWtIGno8uR4dRQYjg,11124
@@ -88,7 +88,7 @@ mud/commands/obj_manipulation.py,sha256=g4ZTIUrt6mdq7jqfMR7KymeLETEWF2sNZZVGEbTV
88
88
  mud/commands/player_config.py,sha256=1J7v-viVe40slfLfzDC42ZLLMwF0vixdWkWFlMIvc0I,6082
89
89
  mud/commands/player_info.py,sha256=rZBb3s4saq9kVyjP5Xg7K6udPiZTyptp9O0Ynpe8Etw,4811
90
90
  mud/commands/position.py,sha256=hK-VBeiKjvngAbGlhzXk_GRwIaZu4bXb3FMHuH8L-6U,2418
91
- mud/commands/remaining_rom.py,sha256=J1BV2ACiZO8TCA-1Zuns5SnMXfESDR2oCUjW5F-Aalc,16885
91
+ mud/commands/remaining_rom.py,sha256=OWSQXJ56-9ENPINZ6-S-UK4yvhxef0EBKKdGCtfVwEU,17441
92
92
  mud/commands/session.py,sha256=2_ANNkF_sbOhgbAaU8gRbzzDhjrDM43yLqYP0USyG5Q,8292
93
93
  mud/commands/shop.py,sha256=rP21ukn2HrvyxFxhLfUjO12WAcCu2fVuSMR_NZBU9-c,35269
94
94
  mud/commands/socials.py,sha256=f-nXb5i2G6-GK42Uq0o5IEvy-tf0OTDm73p3q4SgU5E,1553
@@ -200,9 +200,9 @@ mud/world/movement.py,sha256=Y7it7pXrPORgKyy2tRB8br_kb4-s9UK-gj0N-E2U9oM,18695
200
200
  mud/world/obj_find.py,sha256=7QjVAhA-XEqAEm0CoanNtBuYj6rKijNSu8Vu1JcueMY,4304
201
201
  mud/world/vision.py,sha256=q8VjzSzm0cbNrHX6-o0j1UG-jlcM3Z9bzUxK6T-Bsi8,9862
202
202
  mud/world/world_state.py,sha256=W9ABMADlY5H-ZmywACsryFKZp34OufjzMRD6WT331qg,7917
203
- rom24_quickmud_python-2.2.1.dist-info/licenses/LICENSE,sha256=anQ2j9As6sIC8tZgQCXbo0-09JDH9vPiqhA9djnOvkY,1078
204
- rom24_quickmud_python-2.2.1.dist-info/METADATA,sha256=LWqWeukreJ_6nfCInB2DwK9h-I7h-OMOSF2H5jxii3U,11714
205
- rom24_quickmud_python-2.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
206
- rom24_quickmud_python-2.2.1.dist-info/entry_points.txt,sha256=VFru08UQTXZA_CkK-NBjJmWHyEX5a3864fQHjhaojbw,41
207
- rom24_quickmud_python-2.2.1.dist-info/top_level.txt,sha256=Fk1WPmabIIjp7_iZXLYpbAVqiq7lG7TeAHt30AsOKtQ,4
208
- rom24_quickmud_python-2.2.1.dist-info/RECORD,,
203
+ rom24_quickmud_python-2.3.1.dist-info/licenses/LICENSE,sha256=anQ2j9As6sIC8tZgQCXbo0-09JDH9vPiqhA9djnOvkY,1078
204
+ rom24_quickmud_python-2.3.1.dist-info/METADATA,sha256=CnA8AuQvIrXaL0bO8ad6Kb8B799L9h_r655igYMHVD0,11748
205
+ rom24_quickmud_python-2.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
206
+ rom24_quickmud_python-2.3.1.dist-info/entry_points.txt,sha256=VFru08UQTXZA_CkK-NBjJmWHyEX5a3864fQHjhaojbw,41
207
+ rom24_quickmud_python-2.3.1.dist-info/top_level.txt,sha256=Fk1WPmabIIjp7_iZXLYpbAVqiq7lG7TeAHt30AsOKtQ,4
208
+ rom24_quickmud_python-2.3.1.dist-info/RECORD,,