【XMYangGame·羊了个羊游戏】

原创 【XMYangGame·羊了个羊游戏】 1.0.0

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

StartYangChallenge - 启动羊了个羊挑战​

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

// 发起挑战
void SendYangChallenge(BasePlayer player)
{
    var success = XMYangGame?.Call<bool>("StartYangChallenge",
        player.UserIDString,     // 玩家SteamID
        60,                       // 60秒时限
        100,                      // 要求100分
        40,                       // 40张卡牌
        10,                       // 10种卡牌类型
        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钩子(供其他插件监听)​

OnYangGameStart - 玩家开始游戏​

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

OnYangGameSuccess - 玩家游戏成功​

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

OnYangGameFailed - 玩家游戏失败​

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