找回密码
 registerss
搜索
查看: 95|回复: 0

[软件分享] 技能回调 修改技能信息回调 Lua脚本案例

[复制链接]
  • 打卡等级:本地老炮
  • 打卡总天数:602
  • 打卡月天数:17
  • 打卡总奖励:599
  • 最近打卡:2026-09-29 14:19:05
Waylee 发表于 2026-2-9 17:11 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?registerss

×
-- 技能后置回调控制
-- 在所有引擎条件判断通过后、技能实际执行前触发 (SkillCore_T::ProcessSkillRequest)

-- 脚本ID
x769009_g_ScriptId = 769009

--**********************************
-- 技能后置回调 (SkillStart)
-- sceneId:     场景ID
-- selfId:      施法者ID
-- nTargetID:   目标ID (-1表示无目标)
-- nSkillID:    技能ID
-- nMenPai:     施法者门派ID
-- fPosX:       目标坐标X (浮点数)
-- fPosZ:       目标坐标Z (浮点数)
-- fDir:        施法方向 (浮点数)
-- CharData:    角色数据对象
-- getData:     获取角色技能数据函数 getData(sceneId, selfId, CharData, nIndex)
-- setData:     设置角色技能数据函数 setData(sceneId, selfId, CharData, nIndex, nValue)
--
-- getData/setData 的 nIndex 含义:
--   0: ActivatedSkill  - 当前激活的技能ID 
--   1: TargetObjID     - 目标对象ID 
--   2: TargetGUID      - 目标GUID
--   3: TargetPos.X     - 目标坐标X (float转int)
--   4: TargetPos.Z     - 目标坐标Z (float转int)
--   5: TargetDirection  - 目标方向 (float转int)
--   6: IgnoreConditionCheck - 是否忽略条件检查
--   7: ErrCode         - 错误码
--   8: ObjID           - 对象ID (只读)
--   9: ObjType         - 对象类型 (只读, 1=人类)
--  10: MenPai          - 门派ID (只读, 仅人类有效)
--
-- 返回值: 0=放行  非0=拦截技能执行
--   (需要配合技能放行白名单,免疫nil值和异常值)
--**********************************
function x769009_callback_SkillStart(sceneId, selfId, nTargetID, nSkillID, nMenPai, fPosX, fPosZ, fDir, CharData, getData, setData)
       x769009_NotifyTip(sceneId, selfId,
        "技能回调   施法者:" .. tostring(selfId) ..
        "   受害者:" .. tostring(nTargetID) ..
        "   技能ID:" .. tostring(nSkillID) ..
        "   坐标:" .. tostring(fPosX) .. "," .. tostring(fPosZ) ..
        "   方向:" .. tostring(fDir) ..
        "   门派:" .. tostring(nMenPai))

   -- 默认放行
    return 0
end

--============================================================
-- 用法案例(取消注释即可使用)
--============================================================

-- 案例1: 打印技能详细信息(调试用)
-- function x769009_callback_SkillStart(sceneId, selfId, nTargetID, nSkillID, nMenPai, fPosX, fPosZ, fDir, CharData, getData, setData)
--     x769009_NotifyTip(sceneId, selfId,
--         "技能回调   施法者:" .. tostring(selfId) ..
--         "   受害者:" .. tostring(nTargetID) ..
--         "   技能ID:" .. tostring(nSkillID) ..
--         "   坐标:" .. tostring(fPosX) .. "," .. tostring(fPosZ) ..
--         "   方向:" .. tostring(fDir) ..
--         "   门派:" .. tostring(nMenPai))
--     return 0
-- end

-- 案例2: 拦截特定技能
-- function x769009_callback_SkillStart(sceneId, selfId, nTargetID, nSkillID, nMenPai, fPosX, fPosZ, fDir, CharData, getData, setData)
--     if nSkillID == 123 then
--         x769009_NotifyTip(sceneId, selfId, "该技能已被禁用!")
--         return 1  -- 拦截
--     end
--     return 0  -- 放行
-- end

-- 案例3: 使用getData读取角色数据
-- function x769009_callback_SkillStart(sceneId, selfId, nTargetID, nSkillID, nMenPai, fPosX, fPosZ, fDir, CharData, getData, setData)
--     local curSkill = getData(sceneId, selfId, CharData, 0)   -- 当前激活技能
--     local targetId = getData(sceneId, selfId, CharData, 1)   -- 目标ID
--     local objType  = getData(sceneId, selfId, CharData, 9)   -- 对象类型
--     local menPai   = getData(sceneId, selfId, CharData, 10)  -- 门派
--     x769009_NotifyTip(sceneId, selfId,
--         "getData: curSkill=" .. curSkill ..
--         " targetId=" .. targetId ..
--         " objType=" .. objType ..
--         " menPai=" .. menPai)
--     return 0
-- end

-- 案例4: 使用setData修改目标(将技能重定向到自己)
-- function x769009_callback_SkillStart(sceneId, selfId, nTargetID, nSkillID, nMenPai, fPosX, fPosZ, fDir, CharData, getData, setData)
--     if nSkillID == 456 then
--         setData(sceneId, selfId, CharData, 1, selfId)  -- 将目标改为自己
--     end
--     return 0
-- end

-- 案例5: 根据门派限制技能使用
-- function x769009_callback_SkillStart(sceneId, selfId, nTargetID, nSkillID, nMenPai, fPosX, fPosZ, fDir, CharData, getData, setData)
--     -- 门派0(少林)禁止使用技能ID 100
--     if nMenPai == 0 and nSkillID == 100 then
--         x769009_NotifyTip(sceneId, selfId, "少林弟子不可使用此技能!")
--         return 1
--     end
--     return 0
-- end

-- 通用提示函数
function x769009_NotifyTip( sceneId, selfId, Msg )
    BeginEvent( sceneId )
        AddText( sceneId, Msg )
    EndEvent( sceneId )
    DispatchMissionTips( sceneId, selfId )
end
您需要登录后才可以回帖 登录 | registerss

本版积分规则

QQ|手机版|雪舞知识库 ( 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 )|天天打卡

GMT+8, 2026-9-29 18:40 , Processed in 0.066216 second(s), 26 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表