bayuMIR/Mirserver/Mir200/Envir/QuestDiary/游戏功能/A1_一大陆/武器升级.lua
2026-06-18 02:06:14 +08:00

209 lines
5.8 KiB
Lua

WuQiShengJIOBJ = Up_BaseClass:new()
WuQiShengJIOBJ._name = "WuQiShengJIOBJ"
-- NPCID
WuQiShengJIOBJ.id = { 13 }
for i, v in ipairs(WuQiShengJIOBJ.id or {}) do
Npc.clicknpcCfg[v] = WuQiShengJIOBJ
end
-- 配置文件
WuQiShengJIOBJ.cfg = {
ps = {
"1.武器可升级<7次/FCOLOR=251>,最高提升<21点/FCOLOR=251>攻击",
"<2.满7次后:/FCOLOR=249>",
" 附加攻击<大于13点/FCOLOR=251>",
" 可获得:<攻击速度+1/FCOLOR=251>",
" 附加攻击<大于16点/FCOLOR=251>",
" 可获得:<攻击速度+1、攻击伤害+2%/FCOLOR=251>",
" 附加攻击<大于19点/FCOLOR=251>",
" 可获得:<攻击速度+1、攻击伤害+2%、神圣一击+2%/FCOLOR=251>",
"<3.成功率50%/FCOLOR=70>",
" 成功<增加/FCOLOR=249><随机1-3点攻击/FCOLOR=251>!",
" 失败<减少/FCOLOR=249><随机0-1点攻击/FCOLOR=251>!",
},
top = 7,
random = { 1, 3 },
xh = {
--* 神兽之精、神兽之丹 按升级次数 增加数量 第2次为2个 升级第7次就7个
{ "黑铁矿石", 4, 0 },
{ "神兽之精", 1, 0 },
{ "神兽之丹", 1, 0 },
},
drop_xh = {
{ "神兽之精", 5, 0 },
{ "神兽之丹", 5, 0 },
},
reset_xh = {
{ "神兽之精", 100, 0 },
{ "神兽之丹", 100, 0 },
},
cgl = 50,
}
-- ---* 加入上线同步数据
-- Player.sycCfg[WuQiShengJIOBJ._name] = WuQiShengJIOBJ.cfg
WuQiShengJIOBJ.topAtt = {
[13] = {
id = 20,
value = 1
},
[16] = {
id = 25,
value = 2
},
[19] = {
id = 79,
value = 200
},
}
function WuQiShengJIOBJ:up(actor, p1, p2, p3, data)
if not Npc.CheckNPCRange(actor, 13) then
return
end
local equipmakeindex = GetItemByPos(actor, 1)
if equipmakeindex == "0" then
Func.sendmsg9(actor, "请先佩戴好要升级的武器!")
return
end
local level = GetInt(3, equipmakeindex, VarCfg.item.int["武器升级"]) or 0
if level >= self.cfg.top then
Func.sendmsg9(actor, "当前武器升级次数已满,可以重置!")
return
end
---* 计算消耗
local baohu = data[1].baohu > 0 and true or false
local xh = self:calcxh(actor, level, baohu)
if Func.takeitmes(actor, xh, true, true) then
local feilei = ConstCfg.temattr["武器升级"]
local attr = getitemattr(actor, equipmakeindex, feilei)
local attrNum = 0
if attr then
local attPart = Func.splitString(attr, "#")
if attPart then
attrNum = tonumber(attPart[3])
end
end
if Func.random(50) then
SetInt(3, equipmakeindex, VarCfg.item.int["武器升级"], level + 1)
local _random = math.random(1, 3)
additemattr(actor, equipmakeindex, feilei, 3, 4, _random)
SendItemVarToc(actor, equipmakeindex)
Func.sendmsg9(actor, string.format("[武器升级]:#70|恭喜,升级成功,获得#251|攻击:+%d#215|.", _random))
Message:SubLink(actor, self._name .. "_upBool", { 21100 })
if level + 1 >= self.cfg.top then
self:setAttr(actor)
end
else
if not baohu then
local _random = math.random(-1, 0)
if attrNum > 0 and _random < 0 then
additemattr(actor, equipmakeindex, feilei, 3, 4, _random)
-- Func.sendmsg9(actor, "[武器升级]:#70|抱歉,升级失败,未使用保护,本次#251|攻击-1#215|!")
Message:SubLink(actor, self._name .. "_upBool", { 21100 })
end
end
Message:SubLink(actor, self._name .. "_upBool", { 21102 })
-- Func.sendmsg9(actor, "[武器升级]:#70|抱歉,升级失败!")
end
end
end
--* 计算消耗
function WuQiShengJIOBJ:calcxh(actor, level, baofu)
local up_cs = 0
local xh = table.Copy(self.cfg.xh)
for i, v in ipairs(xh) do
if i > 1 then
v[2] = level + 1
end
end
if baofu then
xh = Func.deep_merge(xh, self.cfg.drop_xh)
end
return xh
end
---* 7次后附加属性
function WuQiShengJIOBJ:setAttr(actor)
local equipmakeindex = GetItemByPos(actor, 1)
if equipmakeindex == "0" then
return
end
local level = GetInt(3, equipmakeindex, VarCfg.item.int["武器升级"]) or 0
if level < self.cfg.top then
return
end
local feilei = ConstCfg.temattr["武器升级"]
local attr = getitemattr(actor, equipmakeindex, feilei)
local attrNum = 0
if attr then
local attPart = Func.splitString(attr, "#")
if attPart then
attrNum = tonumber(attPart[3])
end
end
local attStr = {}
for key, value in pairs(self.topAtt or {}) do
if attrNum >= key then
attStr[value.id] = value.value
end
end
if table.nums(attStr) > 0 then
additemattrEX(actor, equipmakeindex, feilei, 3, attStr)
end
end
---* 重置升级
function WuQiShengJIOBJ:reset(actor)
Func.messagebox(actor, "[武器升级]本次重置将清除武器升级所有属性\n是否确认重置?", "@wuqishengji_reset", "@exit")
end
function wuqishengji_reset(actor)
if not Npc.CheckNPCRange(actor, 13) then
return
end
local equipmakeindex = GetItemByPos(actor, 1)
if equipmakeindex == "0" then
Func.sendmsg9(actor, "请先佩戴好要重置的武器!")
return
end
local level = GetInt(3, equipmakeindex, VarCfg.item.int["武器升级"]) or 0
if level < WuQiShengJIOBJ.cfg.top then
Func.sendmsg9(actor, "当前武器升级次数未满,不可以重置!")
return
end
if Func.takeitmes(actor, WuQiShengJIOBJ.cfg.reset_xh, true, true) then
SetInt(3, equipmakeindex, VarCfg.item.int["武器升级"], 0)
SendItemVarToc(actor, equipmakeindex)
local feilei = ConstCfg.temattr["武器升级"]
delitemattr(actor, equipmakeindex, feilei, 0)
Func.sendmsg9(actor, "重置成功!")
end
end
WuQiShengJIOBJ.allowFunc = {"up", "reset"}
return WuQiShengJIOBJ