• 注册后才能下载/购买插件!快来注册吧,注册即可免费下载 精翻插件 !【点我注册
  • RustSB.COM向广大野生Rust插件作者发出入驻邀请!详情请见[原创作者条约]
【XMSkillLibrary·技能库】(8折优惠截止8.25!!!)

新品 【XMSkillLibrary·技能库】(8折优惠截止8.25!!!) 0.0.3

XMSkillLibrary API 使用指南​

概述​

XMSkillLibrary 提供了完整的API接口,供其他插件调用技能系统。所有API调用都会执行完整的技能流程,包括触发特效、消息提示、视觉效果、伤害计算和持续效果。

重要特性​

距离限制​

  • API调用会检查释放距离:超出技能配置中的"触发伤害半径米"将无法释放
  • 无释放者的API调用:不受距离限制(如CallSkill方法)
  • 距离检查失败:返回false并在控制台输出距离信息

伤害区分​

  • 玩家对玩家:使用"玩家对玩家最小/最大伤害"配置
  • 非玩家对玩家(NPC、动物、其他插件):使用"玩家最小/最大伤害"配置
  • 智能判断:自动识别释放者类型并应用对应伤害值

API 方法列表​

1. CallSkill - 基础技能调用​

用途:对指定玩家释放技能(无释放者,天雷效果)
C#:
var result = XMSkillLibrary.Call("CallSkill", targetUserId, skillId, customReleaserName);
参数
  • targetUserId (string): 目标玩家的UserIDString
  • skillId (int): 技能编号(1-26为硬编码技能,100+为自定义技能)
  • customReleaserName (string, 可选): 自定义释放者名称,用于聊天提示的{0}占位符
返回值:bool - 技能是否成功释放
示例
C#:
// 对玩家释放雷电技能(技能1)
var result = XMSkillLibrary.Call("CallSkill", player.UserIDString, 1);

// 使用自定义释放者名称
var result = XMSkillLibrary.Call("CallSkill", player.UserIDString, 1, "恶龙王");
// 聊天提示将显示:"恶龙王将释放雷电技能!"

2. CallSkillWithReleaser - 带释放者的技能调用​

用途:指定释放者对目标玩家释放技能
C#:
var result = XMSkillLibrary.Call("CallSkillWithReleaser", releaserUserId, targetUserId, skillId, customReleaserName);
参数
  • releaserUserId (string): 释放者的UserIDString
  • targetUserId (string): 目标玩家的UserIDString
  • skillId (int): 技能编号
  • customReleaserName (string, 可选): 自定义释放者名称,用于聊天提示的{0}占位符
返回值:bool - 技能是否成功释放
示例
C#:
// 玩家A对玩家B释放火箭弹技能(技能2)
var result = XMSkillLibrary.Call("CallSkillWithReleaser",
    playerA.UserIDString,
    playerB.UserIDString,
    2);
// BOSS对玩家释放技能,使用自定义BOSS名称
var result = XMSkillLibrary.Call("CallSkillWithReleaser",
    bossPlayer.UserIDString,
    player.UserIDString,
    1,
    "火焰巨龙");
// 聊天提示将显示:"火焰巨龙将释放雷电技能!"
注意
  • 支持NPC作为释放者,会自动在所有BasePlayer实体中查找
  • 会检查释放者与目标的距离,超出技能配置的伤害半径将失败

3. CallSkillDirect - 直接实体调用(推荐)​

用途:直接传递实体引用,最高效的调用方式
C#:
var result = XMSkillLibrary.Call("CallSkillDirect", releaserEntity, targetEntity, skillId, customReleaserName);
参数
  • releaserEntity (BasePlayer): 释放者实体(可以是玩家或NPC)
  • targetEntity (BasePlayer): 目标玩家实体
  • skillId (int): 技能编号
  • customReleaserName (string, 可选): 自定义释放者名称,用于聊天提示的{0}占位符
返回值:bool - 技能是否成功释放
示例
C#:
// NPC对玩家释放技能(最推荐的方式)
var result = XMSkillLibrary.Call("CallSkillDirect", npc, player, 1);

// 玩家对玩家释放技能
var result = XMSkillLibrary.Call("CallSkillDirect", attacker, victim, 5);

// 使用自定义名称的NPC技能
var result = XMSkillLibrary.Call("CallSkillDirect", npc, player, 1, "守护者机器人");
// 聊天提示将显示:"守护者机器人将释放雷电技能!"
注意
  • 会检查释放者与目标的距离,超出技能配置的伤害半径将失败
  • 玩家对玩家使用"玩家对玩家伤害"配置,NPC对玩家使用"玩家伤害"配置

4. CallSkillAtPosition - 位置技能调用​

用途:从指定位置对目标释放技能
C#:
var result = XMSkillLibrary.Call("CallSkillAtPosition", targetUserId, skillId, x, y, z, customReleaserName);
参数
  • targetUserId (string): 目标玩家的UserIDString
  • skillId (int): 技能编号
  • x, y, z (float): 释放位置坐标
  • customReleaserName (string, 可选): 自定义释放者名称,用于聊天提示的{0}占位符
返回值:bool - 技能是否成功释放
示例
C#:
// 从指定坐标对玩家释放技能
var result = XMSkillLibrary.Call("CallSkillAtPosition",
    player.UserIDString,
    1,
    100.0f, 50.0f, 200.0f);

// 建筑反击,使用自定义名称
var result = XMSkillLibrary.Call("CallSkillAtPosition",
    player.UserIDString,
    1,
    turret.transform.position.x,
    turret.transform.position.y,
    turret.transform.position.z,
    "玩家名称的炮塔");
// 聊天提示将显示:"玩家名称的炮塔将释放雷电技能!"

5. CallSkillAtPositionExclude - 位置技能调用(排除实体)​

用途:从指定位置对目标释放技能,排除指定实体不受伤害
C#:
var result = XMSkillLibrary.Call("CallSkillAtPositionExclude", targetUserId, skillId, x, y, z, excludeEntityId, customReleaserName);

参数
  • targetUserId (string): 目标玩家的UserIDString
  • skillId (int): 技能编号
  • x, y, z (float): 释放位置坐标
  • excludeEntityId (ulong): 排除的实体网络ID
  • customReleaserName (string, 可选): 自定义释放者名称,用于聊天提示的{0}占位符
返回值:bool - 技能是否成功释放
示例
C#:
// 建筑反击,排除建筑自身不受伤害
var result = XMSkillLibrary.Call("CallSkillAtPositionExclude",
    player.UserIDString,
    1,
    building.transform.position.x,
    building.transform.position.y,
    building.transform.position.z,
    building.net.ID,
    "玩家名称的建筑");

自定义释放者名称功能​

功能说明​

所有API现在都支持可选的customReleaserName参数,用于自定义聊天提示中的释放者名称。

使用场景​

  1. 测试插件:实体反击时显示"玩家名称的建筑"
  2. BOSS插件:显示BOSS的真实名称而不是"未知力量"
  3. 建筑插件:炮塔反击时显示"玩家名称的炮塔"
  4. NPC插件:自定义NPC名称显示

聊天提示格式​

技能配置中的聊天提示使用{0}作为释放者名称的占位符:
  • 配置:"触发设置 - 触发时聊天提示": "警告!{0}将释放{1}技能!"
  • 效果:"警告!恶龙王将释放雷电技能!"

名称优先级​

  1. 有自定义名称:使用customReleaserName参数
  2. 无自定义名称:使用默认逻辑
    • BasePlayer:使用player.displayName
    • BaseNpc:显示"NPC"
    • 其他实体:显示实体的ShortPrefabName
    • null:显示"未知力量"

配置说明​

伤害配置​

每个技能都有两套伤害配置:
玩家对玩家伤害
  • "玩家使用设置 - 玩家对玩家最小伤害": 0.0
  • "玩家使用设置 - 玩家对玩家最大伤害": 0.0
  • 当玩家对其他玩家释放技能时使用

非玩家对玩家伤害:​

  • "伤害设置 - 玩家最小伤害": 5.0
  • "伤害设置 - 玩家最大伤害": 10.0
  • 当NPC、动物或其他插件对玩家释放技能时使用

距离配置​

  • "触发设置 - 触发伤害半径米": 10.0
  • 既是技能的伤害范围,也是API调用的最大释放距离
  • 超出此距离的API调用将失败

完整示例​

BOSS插件示例​

C#:
public class WorldBoss : RustPlugin
{
    [PluginReference]
    private Plugin XMSkillLibrary;

    private void OnEntityDeath(BasePlayer boss, HitInfo info)
    {
        if (boss.displayName != "世界BOSS") return;

        var killer = info.InitiatorPlayer;
        if (killer == null) return;

        // BOSS死亡时对击杀者释放奖励技能,使用自定义BOSS名称
        XMSkillLibrary?.Call("CallSkillDirect", boss, killer, 25, "恶龙王"); // 回血技能
    }

    private void BossAttack(BasePlayer boss, BasePlayer target)
    {
        // BOSS攻击时随机释放技能,使用自定义BOSS名称
        int randomSkill = UnityEngine.Random.Range(1, 6);
        XMSkillLibrary?.Call("CallSkillDirect", boss, target, randomSkill, "火焰巨龙");
        // 聊天提示:"警告!火焰巨龙将释放XX技能!"
    }
}

NPC反击插件示例​

C#:
private void OnEntityTakeDamage(BasePlayer npc, HitInfo info)
{
    var attacker = info.InitiatorPlayer;
    if (attacker == null) return;

    // NPC被攻击时反击,使用自定义NPC名称
    if (UnityEngine.Random.Range(0, 100) < 30) // 30%概率
    {
        XMSkillLibrary?.Call("CallSkillDirect", npc, attacker, 1, "守护者机器人"); // 雷电反击
        // 聊天提示:"警告!守护者机器人将释放雷电技能!"
    }
}

测试插件示例​

C#:
// 实体反击示例
private void OnEntityAttacked(BaseEntity entity, BasePlayer attacker)
{
    var owner = GetEntityOwner(entity);
    if (owner == null) return;

    // 构造自定义释放者名称
    string entityType = GetEntityDisplayName(entity);
    string customName = $"{owner.displayName}的{entityType}";

    // 实体反击,使用自定义名称
    XMSkillLibrary?.Call("CallSkill",
        attacker.UserIDString,
        UnityEngine.Random.Range(1, 6),
        customName);
    // 聊天提示:"警告!玩家名称的炮塔将释放XX技能!"
}

注意事项​

  1. API调用跳过冷却和成功率检查,确保技能必定释放
  2. 距离限制:API会检查释放距离,超出配置的伤害半径将失败
  3. 伤害区分:自动区分玩家对玩家和非玩家对玩家的伤害值
  4. 所有技能都有完整的视觉效果,包括特效、消息、伤害
  5. 推荐使用CallSkillDirect,性能最好,最直接,支持实体引用
  6. NPC支持:所有API都支持NPC作为释放者或目标
  7. 错误处理:API会返回bool值表示是否成功,建议检查返回值
  8. 插件引用:记得在插件中添加[PluginReference] private Plugin XMSkillLibrary;

常见问题​

Q: 为什么API调用返回false?​

A: 可能的原因:
  • 释放者与目标距离超出技能配置的伤害半径
  • 目标玩家不存在或已离线
  • 技能编号不存在
  • 目标玩家有免疫权限

Q: 如何设置PVP和PVE不同的伤害?​

A: 在配置文件中分别设置:
  • PVP伤害:修改"玩家对玩家最小/最大伤害"
  • PVE伤害:修改"玩家最小/最大伤害"

Q: 如何调整技能释放距离?​

A: 修改配置文件中的"触发伤害半径米",这个值既是伤害范围也是释放距离



技能库插件的4个API(最简单通俗解释):​

CallSkill - 天雷劈人
用途:天上掉技能砸玩家
没有释放者,就像天雷一样从天而降
只需要目标玩家ID和技能编号

CallSkillWithReleaser - A打B
用途:A玩家对B玩家释放技能
有明确的释放者和目标
需要两个玩家ID和技能编号
会检查距离限制

CallSkillDirect - 直接传实体
用途:最直接的方式,直接传玩家实体
不用查找玩家,直接传实体引用
最高效,推荐NPC插件使用
也会检查距离限制

CallSkillAtPosition - 指定位置放技能
用途:从某个位置对玩家释放技能
比如建筑、炮塔、陷阱反击
从指定坐标朝玩家释放技能
适合非玩家实体的反击

总结:
1和4是"无人释放" - 天雷和位置技能
2和3是"有人释放" - 玩家对玩家,NPC对玩家