【XMMatchGame·消消乐游戏】

原创 【XMMatchGame·消消乐游戏】 1.0.0

API接口(供其他插件调用)​

StartMatchChallenge - 启动消消乐挑战​

其他插件可以通过此API调用消消乐游戏,让玩家完成挑战后执行自定义逻辑。
方法签名:
C#:
bool StartMatchChallenge(
    string steamId,              // 玩家SteamID(字符串格式)
    int timeLimit,               // 时间限制(秒,最少10秒)
    int requiredScore,           // 要求分数(最少1分)
    int gridSize,                // 网格大小(5-15,推荐7-10)
    int itemTypeCount,           // 物品类型数量(3-10,推荐4-8)
    bool allowRetry,             // 失败后是否允许重试一次
    string rewardDescription,    // 奖励描述文字
    Action<bool> callback        // 回调函数:true=成功,false=失败
)
返回值:
  • true - 成功发起挑战
  • false - 发起失败(玩家不在线、参数无效等)
使用示例:
C#:
// 在其他插件中调用
[PluginReference]
private Plugin XMMatchGame;

// 发起挑战
void SendMatchChallenge(BasePlayer player)
{
    var success = XMMatchGame?.Call<bool>("StartMatchChallenge",
        player.UserIDString,     // 玩家SteamID
        60,                       // 60秒时限
        100,                      // 要求100分
        7,                        // 7x7网格
        6,                        // 6种物品
        true,                     // 允许重试
        "完成挑战即可获得豪华大礼包!",  // 描述
        (bool isPassed) =>        // 回调处理
        {
            if (isPassed)
            {
                // 挑战成功,执行奖励逻辑
                Puts($"{player.displayName} 完成了消消乐挑战!");
                GiveReward(player);
            }
            else
            {
                // 挑战失败
                Puts($"{player.displayName} 挑战失败!");
                player.ChatMessage("很遗憾,挑战失败了!");
            }
        }
    );
 
    if (!success.HasValue || !success.Value)
    {
        player.ChatMessage("无法发起挑战,请稍后再试!");
    }
}
注意事项:
  1. 必须使用 player.UserIDString 传递SteamID(字符串格式)
  2. 回调函数会在玩家完成或失败时自动调用
  3. 如果玩家选择重试且失败,仍会调用回调(false)
  4. 网格和物品数量会自动限制在合理范围内
  5. API挑战不会执行配置文件中的指令列表,而是通过回调处理

Hook钩子(供其他插件监听)​

OnMatchGameStart - 玩家开始游戏​

当玩家开始一局消消乐游戏时触发。
钩子签名:
C#:
void OnMatchGameStart(BasePlayer player, bool isChallengeMode)
参数:
  • player - 开始游戏的玩家
  • isChallengeMode - 是否为挑战模式(true=挑战,false=关卡)
使用示例:
C#:
void OnMatchGameStart(BasePlayer player, bool isChallengeMode)
{
    var mode = isChallengeMode ? "挑战模式" : "关卡模式";
    Puts($"{player.displayName} 开始了消消乐游戏 [{mode}]");
}

OnMatchGameSuccess - 玩家游戏成功​

当玩家成功完成一局游戏(达到目标分数)时触发。
钩子签名:
C#:
void OnMatchGameSuccess(BasePlayer player, int score, bool isChallengeMode)
参数:
  • player - 完成游戏的玩家
  • score - 本局获得的分数
  • isChallengeMode - 是否为挑战模式(true=挑战,false=关卡)
使用示例:
C#:
void OnMatchGameSuccess(BasePlayer player, int score, bool isChallengeMode)
{
    var mode = isChallengeMode ? "挑战" : "关卡";
    Puts($"{player.displayName} 成功完成了消消乐{mode}!得分:{score}");
 
    // 可以发放额外奖励
    if (score >= 500)
    {
        player.ChatMessage("恭喜!获得高分成就奖励!");
    }
}

OnMatchGameFailed - 玩家游戏失败​

当玩家未能完成游戏(未达到目标分数)时触发。
钩子签名:
C#:
void OnMatchGameFailed(BasePlayer player, int score, bool isChallengeMode)
参数:
  • player - 游戏失败的玩家
  • score - 本局获得的分数
  • isChallengeMode - 是否为挑战模式(true=挑战,false=关卡)
使用示例:
C#:
void OnMatchGameFailed(BasePlayer player, int score, bool isChallengeMode)
{
    var mode = isChallengeMode ? "挑战" : "关卡";
    Puts($"{player.displayName} 在消消乐{mode}中失败了。得分:{score}");
 
    // 可以给予鼓励或安慰奖
    if (score >= 80)
    {
        player.ChatMessage("虽然失败了,但表现不错!这是安慰奖~");
    }
}
Hook使用场景:
  • 统计玩家游戏数据
  • 发放额外奖励或成就
  • 记录游戏日志
  • 触发其他插件的关联功能
  • 实现自定义积分系统