> 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

========================================================================    

> _