# 战斗邀请响应功能修复

## 问题描述

当玩家在游戏大厅收到战斗邀请时，输入 `accept 20241111` 或 `reject 20241111` 会被识别为"无效选项"，无法正确处理邀请响应。

### 错误场景
```
【20245738】>
*** 20241111 邀请你战斗！***
输入 'accept 20241111' 接受，或 'reject 20241111' 拒绝
【20245738】> accept 20241111
无效选项。请输入1-5。  ❌ 错误提示
```

## 原因分析

在 `GameClient::handleLobbyInput()` 函数中，代码只处理数字选项 1-5，没有处理 `accept` 和 `reject` 命令。

### 修复前的代码
```cpp
void GameClient::handleLobbyInput(const std::string& input) {
    if (input.empty()) {
        return;
    }
    
    if (input == "1") {
        // Chat
        ...
    } else if (input == "2") {
        // List players
        ...
    }
    // ... 其他选项
    else {
        std::cout << "无效选项。请输入1-5。" << std::endl;  // ❌ 所有非1-5的输入都报错
    }
}
```

## 解决方案

在 `handleLobbyInput()` 函数开头添加邀请响应命令的处理逻辑：

### 修复后的代码
```cpp
void GameClient::handleLobbyInput(const std::string& input) {
    if (input.empty()) {
        return;
    }
    
    // ✅ 新增：检查是否是邀请响应命令
    if (input.find("accept ") == 0 || input.find("reject ") == 0) {
        size_t spacePos = input.find(' ');
        if (spacePos != std::string::npos) {
            std::string response = input.substr(0, spacePos);  // "accept" 或 "reject"
            std::string inviter = input.substr(spacePos + 1);  // 邀请者用户名
            
            bool accept = (response == "accept");
            std::string msg = Protocol::buildMessage(Protocol::C2S_INVITE_RSP, 
                {inviter, accept ? "yes" : "no"});
            sendMessage(msg);
        }
        return;  // 处理完毕，直接返回
    }
    
    // 原有的菜单选项处理
    if (input == "1") {
        ...
    }
    ...
}
```

## 功能说明

### 1. 命令格式解析
- 检测以 `accept ` 或 `reject ` 开头的输入
- 提取命令类型（accept/reject）
- 提取邀请者用户名

### 2. 协议构建
- `accept username` → 发送 `INVITE_RSP|username|yes`
- `reject username` → 发送 `INVITE_RSP|username|no`

### 3. 服务器处理
服务器收到邀请响应后，会通过 `ClientHandler::handleInviteResponse()` 处理：
- 验证邀请是否有效
- 接受：创建战斗房间，双方进入战斗
- 拒绝：通知邀请者被拒绝

## 正确使用流程

### 玩家A（邀请方）
```
【20241111】> 3
目标玩家用户名：20245738
【服务器】邀请已发送（等待服务器实现此消息）
```

### 玩家B（被邀请方）
```
【20245738】>
*** 20241111 邀请你战斗！***
输入 'accept 20241111' 接受，或 'reject 20241111' 拒绝
【20245738】> accept 20241111
```

### 接受邀请后
```
*** 战斗开始！***
对手：20241111
...
>>> 你的回合 <<<
【战斗】>
```

### 拒绝邀请
```
【20245738】> reject 20241111
【服务器】已拒绝邀请
```

## 相关文件
- `src/client/GameClient.cpp` - 客户端输入处理
- `src/server/ClientHandler.cpp` - 服务器邀请响应处理
- `src/server/GameLobby.cpp` - 大厅邀请逻辑
- `include/common/Protocol.h` - 协议定义

## 编译状态
✅ 已重新编译
✅ 客户端：76KB
✅ 服务器：1.7MB
✅ 无编译错误

## 测试建议
1. 启动服务器
2. 启动两个客户端（玩家A和玩家B）
3. 玩家A邀请玩家B
4. 玩家B输入 `accept 玩家A用户名`
5. 验证双方是否成功进入战斗

## 后续优化建议
1. 添加邀请发送成功的确认消息
2. 添加邀请超时机制（如30秒自动取消）
3. 支持简化命令：直接输入 `accept` 接受最近的邀请
4. 添加邀请队列，显示所有待处理的邀请
