> cat /wizhelp/plugins
> _
======================================================================== Plugin Development ======================================================================== Plugins add commands and features without modifying core code. PLUGIN STRUCTURE: ```python def setup_plugin(game_state): """Required setup function""" return { 'name': 'Plugin Name', 'version': '1.0', 'author': 'YourName', 'description': 'What it does', 'commands': { 'cmdname': handler_function }, 'hooks': { 'on_combat_hit': combat_handler } } ``` COMMAND HANDLER: ```python def handle_mycommand(player, params): """mycommand <args> - Command description""" if not params: player.message("Usage: mycommand <args>") return # Command logic here player.message(f"You used: {params}") ``` AVAILABLE HOOKS: - on_combat_hit(attacker, target, damage) - on_player_move(player, from_room, to_room) - on_player_death(player, killer) - on_war_start(war_data) - on_war_end(war_data) - on_item_use(player, item) - on_heartbeat() - on_player_connect(player) - on_player_disconnect(player) REAL EXAMPLE - DICE PLUGIN: ```python import random def handle_roll(player, params): """roll [sides] - Roll dice""" sides = 6 # Default d6 if params: try: sides = int(params.replace('d', '')) except: player.message("Usage: roll [6/20/100]") return result = random.randint(1, sides) player.message(f"You roll 1d{sides}: {result}") # Show to room room = player.game_state.rooms.get(player._location) for uuid, entity in room.inventory.get_items(): if hasattr(entity, 'is_player') and entity != player: entity.message(f"{player.name} rolls 1d{sides}: {result}") def setup_plugin(game_state): return { 'name': 'Dice Roller', 'version': '1.0', 'author': 'YourName', 'description': 'Roll various dice', 'commands': { 'roll': handle_roll } } ``` MANAGEMENT: plugins - List all plugins reload_plugin <n> - Reload after changes enable_plugin <n> - Enable a plugin disable_plugin <n> - Disable a plugin TIPS: - Test thoroughly before enabling - Use try/except for error handling - Don't modify game_state directly - Document your commands clearly ========================================================================
> _