--前端开始]]
local npc = { } -- 类
npc.CONFIG = { -- 配置
MSG_ID = 6011, -- 通信协议号
UI_NAME = "my_wqhc", -- UI界面名称
needItems = {"黑铁矿石", "金币"}, -- 需要的材料
levels = {
[1] = {needNum = {1, 2, 3}, needMoney = 10000, successRate = 100},
[2] =
🤖 回答引擎: 浮生梦专用2 |
🕒 时间: 2026-03-08 01:49:15 |
👁️ 阅读: 26
--前端开始]]
local npc = { } -- 类
npc.CONFIG = { -- 配置
MSG_ID = 6011, -- 通信协议号
UI_NAME = "my_wqhc", -- UI界面名称
needItems = {"黑铁矿石", "金币"}, -- 需要的材料
levels = {
[1] = {needNum = {10, 1000000}, successRate = 100},
[2] = {needNum = {10, 1000000}, successRate = 90},
[3] = {needNum = {10, 1000000}, successRate = 80},
[4] = {needNum = {10, 1000000}, successRate = 70},
[5] = {needNum = {10, 1000000}, successRate = 60},
[6] = {needNum = {10, 1000000}, successRate = 50},
[7] = {needNum = {10, 1000000}, successRate = 40},
[8] = {needNum = {10, 1000000}, successRate = 30},
[9] = {needNum = {10, 1000000}, successRate = 20},
[10] = {needNum = {10, 1000000}, successRate = 10},
}
}
function npc:Lmain() -- 前端的入口处
local ui = GUI:npcUi(self.CONFIG.UI_NAME) -- 调用export
self.ui = ui
local data = {
-- name = "", -- 名字过滤:包含关键字
stdMode = {5,6}, -- 分类过滤:支持单数字,也支持多个数组如 {5, 6, 22}
itemsPerRow = 5, -- 排版:每行显示几个
spacingX = 45, -- 排版:X方向间距
spacingY = 45, -- 排版:Y方向间距
startX = 25, -- 排版:起始X
startYOffset = 45, -- 排版:第一个物品距离顶部的Y偏移量
paddingY = 5, -- 排版:上下边缘留白
jumpToTop = true -- 排版:刷新后是否强制回到顶部
}
GUI:bag(ui.ScrollView_1, data,function (itemData) -- 创建背包函数
GUI:updataItembox(ui.ItemShow_1,itemData.MakeIndex) -- 更新装备信息到装备栏
if itemData and itemData.MakeIndex then
self.itemMKindex = itemData.MakeIndex
end
end)
-- 更新材料显示
GUI:ItemShow_updateItem(ui.ItemShow_2, {
index = SL:itemname2idx("黑铁矿石"),
count = 10,
})
GUI:ItemShow_updateItem(ui.ItemShow_3, {
index = SL:itemname2idx("金币"),
count = 1000000,
})
GUI:checkBoxOnly(ui,6) -- 设置复选框为唯一
GUI:onClick(ui.Button_1,function ()
local where = GUI:getCheckboxOnley(ui,6)
if not where then
SL:tips("请选择存放位置!")
return
end
SL:sendServer(self.CONFIG.MSG_ID, 1, self.itemMKindex, where)
end)
end
--前端结束]]
function npc:Smain(actor,p1,p2,p3,str)
local player = class(actor) -- 面向对象获取人物对象
if not player then return end
-- 路由分发机制
local dis = {
[1] = self.func1, -- 方法1
[2] = self.func2, -- 方法2
[3] = self.func3, -- 方法3
}
local handler = dis[p1]
if handler then
handler(self, actor, player, p2, p3, str)
else
player:send("未知的操作请求! 错误码:" .. tostring(p1))
-- 下日志!
end
end
function npc:func1(actor, player, p2, p3, str) -- 方法1
-- p2: 物品的唯一标识 MakeIndex
-- p3: 选择的目标位置 where
local makeIndex = p2
local targetPos = p3
if not makeIndex or not targetPos then
player:send("参数错误")
return
end
local itemobj = player:linkItem(makeIndex)
-- 获取当前装备的强化等级
local curEquipStar = player:getItemStar(itemobj) or 0
if curEquipStar >= 10 then
player:send("已经达到了最高等级!")
return
end
local nextLevel = curEquipStar + 1
local levelConfig = self.CONFIG.levels[nextLevel]
if not levelConfig then
player:send("配置错误")
return
end
-- 检查材料
local needItem1 = self.CONFIG.needItems[1] -- 黑铁矿石
local needItem2 = self.CONFIG.needItems[2] -- 金币
if not player:checkItem(needItem1, levelConfig.needNum[1]) then
player:send("没有足够的" .. needItem1)
return
end
if not player:checkMoney(needItem2, levelConfig.needNum[2]) then
player:send("没有足够的" .. needItem2)
return
end
-- 扣除材料
player:take(needItem1, levelConfig.needNum[1])
player:decMoney(needItem2, levelConfig.needNum[2])
-- 成功率判断
local randomValue = math.random(1, 100)
if randomValue <= levelConfig.successRate then
-- 强化成功
player:incItemStar(targetPos)
player:send("强化成功!当前等级:" .. (curEquipStar + 1))
-- 检查是否达到全身强化奖励条件
self:checkTotalStarReward(actor, player)
else
-- 强化失败
if curEquipStar > 0 then
player:decItemStar(targetPos)
player:send("强化失败!等级下降为:" .. (curEquipStar - 1))
else
player:send("强化失败!等级不变")
end
end
end
function npc:func2(actor, player, p2, p3, str) -- 方法2
-- 备用功能
player:send("功能2暂未开放")
end
function npc:func3(actor, player, p2, p3, str) -- 方法3
-- 备用功能
player:send("功能3暂未开放")
end
function npc:checkTotalStarReward(actor, player)
-- 检查全身强化等级并给予奖励
local totalStar = 0
local equipCount = 0
local equipPositions = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} -- 装备位置
for _, pos in ipairs(equipPositions) do
local star = player:getItemStar(pos) or 0
totalStar = totalStar + star
if star > 0 then
equipCount = equipCount + 1
end
end
-- 平均强化等级
local avgStar = equipCount > 0 and math.floor(totalStar / equipCount) or 0
-- 根据平均等级给予属性加成
if avgStar >= 5 and avgStar < 10 then
local att = "3#4#50|3#6#50|3#8#50" -- 生命+5% 主属性+5% 双防+5%
player:attlist("全身强化+5奖励", att)
player:send("激活全身强化+5属性加成!")
elseif avgStar >= 10 and avgStar < 15 then
local att = "3#4#100|3#6#100|3#8#100" -- 生命+10% 主属性+10% 双防+10%
player:attlist("全身强化+10奖励", att)
player:send("激活全身强化+10属性加成!")
elseif avgStar >= 15 then
local att = "3#4#150|3#6#150|3#8#150" -- 生命+15% 主属性+15% 双防+15%
player:attlist("全身强化+15奖励", att)
player:send("激活全身强化+15属性加成!")
end
end
return npc
← 返回问答库