XingYunXiangLian = {}
local costDaMi2 = { { "灵符", 2888 } }
local config = include("QuestDiary/cfgcsv/cfg_XingYunXiangLian.lua") --幸运项链
function XingYunXiangLian.Request(actor)
local itemobj = linkbodyitem(actor, 3)
local xingYun = getplaydef(actor, VarCfg.U_xing_yun)
local xingYunCount = getplaydef(actor, VarCfg.U_xing_yun_count)
xingYun = xingYun + 1
local cfg = config[xingYun]
if itemobj == "0" then
Player.sendmsgEx(actor, "提示#251|:#255|你未佩戴|项链#249|项链强化失败...")
return
end
if xingYun == 13 then
Player.sendmsgEx(actor, "提示#251|:#255|你|幸运#249|已强化到|12#249|无法继续强化...")
GameEvent.push(EventCfg.onXingYunXiangLian,actor,12)
return
end
local name, num = Player.checkItemNumByTable(actor, cfg.moneynum)
if name then
Player.sendmsgEx(actor, string.format("提示#251|:#255|你的|%s#249|,不足|%d枚#249|无法强化幸运...", name, num))
return
end
Player.takeItemByTable(actor, cfg.moneynum, "幸运项链")
setplaydef(actor, VarCfg.U_xing_yun_count, xingYunCount + 1)
--判断天眷之人是否百分百成功
local success = 0
local tjzrFlag = getflagstatus(actor, VarCfg["F_天命_天眷之人标识"])
local todayFirst = getplaydef(actor, VarCfg["J_天命天眷之人第一次"])
-- 检查"天眷之人"特殊条件:拥有天眷之人标记且今日首次使用
if tjzrFlag == 1 and todayFirst == 0 then
-- 触发天眷之人特权:成功率设为100%(必定成功)
success = 100
-- 向玩家发送天眷之人触发提示消息
Player.sendmsgEx(actor, "[天眷之人]触发,您的幸运项链成功率百分之百!")
-- 标记玩家已使用过天眷之人特权(防止重复使用)
setplaydef(actor, VarCfg["J_天命天眷之人第一次"], 1)
else
-- 普通情况:使用配置文件中的基础成功率
success = cfg.successRate
end
-- 根据成功率进行随机判定强化结果
if randomex(success) then
-- 强化成功:保持当前幸运等级不变(xingYun已经+1)
setplaydef(actor, VarCfg.U_xing_yun, xingYun)
-- 发送成功消息:带颜色标记的富文本提示
Player.sendmsgEx(actor, "提示#251|:#255|恭喜你,强化|成功#249|幸运增加|1#249|点...")
else
-- 强化失败:幸运等级下降2点(xingYun-2,相当于从原值-1)
setplaydef(actor, VarCfg.U_xing_yun, xingYun - 2)
-- 发送失败消息:带颜色标记的富文本提示
Player.sendmsgEx(actor, "提示#251|:#255|对不起,强化|失败#249|幸运下降|1#249|点...")
end
if getplaydef(actor, VarCfg.U_xing_yun_count) >= 288 then
setplaydef(actor, VarCfg.U_xing_yun, 12)
Player.sendmsgEx(actor, "提示#251|:#255|恭喜你,强化次数|达到288次#249|幸运直接达到|12#249|点...")
end
GameEvent.push(EventCfg.onXingYunXiangLian,actor,getplaydef(actor, VarCfg.U_xing_yun))
XingYunXiangLian.setNecklaceAttributes(actor) --设置项链属性
XingYunXiangLian.SyncResponse(actor) --同步一次消息
end
function XingYunXiangLian.Request2(actor)
local itemobj = linkbodyitem(actor, 3)
if itemobj == "0" then
Player.sendmsgEx(actor, "强化幸运时请将项链佩戴在任务身上!#249")
return
end
local xingYun = getplaydef(actor, VarCfg.U_xing_yun)
if xingYun >= 12 then
Player.sendmsgEx(actor, "提示#251|:#255|你|幸运#249|已强化到|12#249|无法继续强化...")
return
end
local name, num = Player.checkItemNumByTable(actor, costDaMi2)
if name then
Player.sendmsgEx(actor, string.format("提示#251|:#255|,你的|%s#249|,不足|%d枚#249|无法强化幸运...", name, num))
return
end
Player.takeItemByTable(actor, costDaMi2, "幸运项链+12")
setplaydef(actor, VarCfg.U_xing_yun, 12)
GameEvent.push(EventCfg.onXingYunXiangLian,actor,getplaydef(actor, VarCfg.U_xing_yun))
messagebox(actor, "你的项链已经直接幸运强化+12!")
XingYunXiangLian.setNecklaceAttributes(actor) --设置项链属性
--同步一次消息
XingYunXiangLian.SyncResponse(actor)
end
--响应消息同步
function XingYunXiangLian.RequestSync(actor)
XingYunXiangLian.SyncResponse(actor)
end
--设置项链属性
function XingYunXiangLian.setNecklaceAttributes(actor, itemobj)
-- 获取玩家当前的幸运等级
local xingYun = getplaydef(actor, VarCfg.U_xing_yun)
-- 如果没有传递物品对象,则获取玩家身上的项链(装备位置3)
if not itemobj then
itemobj = linkbodyitem(actor, 3)
end
-- 根据幸运等级获取对应的配置数据,如果没有配置则使用空表
local cfg = config[xingYun] or {}
-- 配置数据安全检查:如果配置不存在,重置幸运等级并设置默认属性值
if not cfg then
xingYun = 0
cfg.element1 = 0 -- 设置默认属性1为0
cfg.element2 = 0 -- 设置默认属性2为0
end
-- 为物品设置新的附加属性:
-- 参数说明:actor=玩家, -2=操作类型,-2操作物品对象 "="=设置模式
-- 属性格式:"3#75#值|3#22#值|3#30#值" (装备类型#属性ID#属性值)
-- 75=属性1, 22=属性2, 30=属性3,都使用配置中的element值 攻击伤害 暴击 体力
setaddnewabil(actor, -2, "=",
string.format("3#75#%d|3#22#%d|3#30#%d", cfg.element1 or 0, cfg.element2 or 0, cfg.element2 or 0), itemobj)
-- 设置物品的附加数值:位置1,类型5,值为当前幸运等级
setitemaddvalue(actor, itemobj, 1, 5, xingYun)
-- 刷新物品显示,更新客户端物品信息
refreshitem(actor, itemobj)
-- 重新计算玩家的所有属性加成
recalcabilitys(actor)
end
------------引擎出发↓↓↓--------------------------
local function _onTakeOnNecklace(actor, itemobj)
XingYunXiangLian.setNecklaceAttributes(actor, itemobj)
end
local function _onTakeOffNecklace(actor, itemobj)
--清空属性
-- 获取玩家当前装备的项链(装备位置3)
local itemobj1 = linkbodyitem(actor, 3)
-- 调试输出语句(已注释):用于打印两个物品对象的信息
-- release_print(itemobj1, itemobj)
-- 重置传入物品对象的幸运值:将位置1类型5的数值设为0
setitemaddvalue(actor, itemobj, 1, 5, 0)
-- 重置玩家身上项链的幸运值:将位置1类型5的数值设为0
setitemaddvalue(actor, itemobj1, 1, 5, 0)
-- 清除传入物品的所有附加属性:
-- 参数说明:actor=玩家, -2=操作类型, "="=设置模式
-- 属性格式:"3#75#0|3#22#0|3#30#0" (装备类型#属性ID#属性值)
-- 将所有相关属性(75、22、30)都设置为0,实现属性重置
setaddnewabil(actor, -2, "=", string.format("3#75#%d|3#22#%d|3#30#%d", 0, 0, 0), itemobj)
-- 刷新物品显示,更新客户端物品信息
refreshitem(actor, itemobj)
-- 重新计算玩家的所有属性加成
recalcabilitys(actor)
end
--穿项链前出发
GameEvent.add(EventCfg.onTakeOnNecklace, _onTakeOnNecklace, XingYunXiangLian)
--脱下前项链出发
GameEvent.add(EventCfg.onTakeOffNecklace, _onTakeOffNecklace, XingYunXiangLian)
-------------网络消息↓↓↓--------------------------
Message.RegisterNetMsg(ssrNetMsgCfg.XingYunXiangLian, XingYunXiangLian)
--同步网络消息
function XingYunXiangLian.SyncResponse(actor, logindatas)
local xingYun = getplaydef(actor, VarCfg.U_xing_yun)
local xingYunCount = getplaydef(actor, VarCfg.U_xing_yun_count)
local tjzrFlag = getflagstatus(actor, VarCfg["F_天命_天眷之人标识"]) --是否百分百成功
local todayFirst = getplaydef(actor, VarCfg["J_天命天眷之人第一次"])
local _login_data = { ssrNetMsgCfg.XingYunXiangLian_SyncResponse, xingYun, xingYunCount, tjzrFlag, { todayFirst } }
if logindatas then
table.insert(logindatas, _login_data)
else
Message.sendmsg(actor, ssrNetMsgCfg.XingYunXiangLian_SyncResponse, xingYun, xingYunCount, tjzrFlag, { todayFirst })
end
end
--登录触发
local function _onLoginEnd(actor, logindatas)
XingYunXiangLian.SyncResponse(actor, logindatas)
end
--事件派发
GameEvent.add(EventCfg.onLoginEnd, _onLoginEnd, XingYunXiangLian)
return XingYunXiangLian