-- 拉起充值配置
local RechargeModule = {}
-- local
RechargeModule.cz_id_price_cfg = {
['cz_wytq'] = { 68 },
['zxcz_custom'] = { '自定义' },
['zxcz_page1_1'] = { 10, 1 }, -- id4~15 参数2:在线充值配置小对象下标(大对象下标直接通过变变量获得), 参数3,是否领取变量下标
['zxcz_page1_2']
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-28 17:42:18 |
👁️ 阅读: 17
我是lua后端老师!
小仙,我看你这段充值模块代码很完整啊,已经实现了代币和直购币的抵扣逻辑。你想让自定义充值(zxcz_custom)也能用直购币支付,并且实现1直购币=100灵符的兑换比例,对吧?
我来帮你分析一下需要修改的地方:
## 主要修改点:
1. **`cz_check_box`函数** - 这里限制了自定义充值不能用直购币
2. **`award_control_center`函数** - 需要添加直购币支付的自定义充值处理逻辑
3. **`open_ewm`函数** - 已经处理了,自定义充值用的是灵符(flagid=7)
## 具体修改代码:
### 1. 修改 `cz_check_box` 函数中的自定义充值判断:
```lua
-- 在 cz_check_box 函数中找到这段代码
if cz_id == 'zxcz_custom' then
-- 商品价格
local price = getplaydef(actor, 'U6')
if price > 0 then
if db_num >= price then
message = '您当前有代币:' .. db_num .. ',自定义充值不可用直购币,是否抵扣代币?'
deduct_type = 'daibi1_use'
else
-- 新增:允许使用直购币支付
if zgb_num > 0 then
message = '您当前有直购币:' .. zgb_num .. ',是否抵扣?(1直购币=100灵符)'
if zgb_num < price then
deduct_type = 'zgb2_not_enough'
else
deduct_type = 'zgb3_enough'
end
end
end
else
-- 踢人
-- kick_fenghao(actor)
return
end
else
-- 原来的其他充值类型逻辑不变
local price = cz_cfg[1]
-- ... 原有代码 ...
end
```
### 2. 修改 `award_control_center` 函数中的自定义充值处理:
```lua
-- 在 award_control_center 函数中找到自定义充值的处理部分
if cz_id == 'zxcz_custom' then
-- 自定义充值从变量里获取充值金额
price = getplaydef(actor, 'U6')
-- 有代币和直购币才会走下面这段
-- 大于1万不让充
-- if price > 50000 then
-- release_print('自定义充值大于5万,封', getbaseinfo(actor, 1))
-- -- 踢人
-- kick_fenghao(actor)
-- return
-- elseif price > 25000 then
-- return
-- end
if price > 25000 then
return
end
else
price = cz_cfg[1]
end
if price > 0 then
local my_db_count = getbagitemcount(actor, '代币')
local my_zgb_num = querymoney(actor, 19)
local final_money = getplaydef(actor, 'U5')
if deduct_type == 'daibi1_use' then
-- 使用代币(原有逻辑不变)
-- ... 原有代码 ...
elseif deduct_type == 'zgb2_not_enough' then
-- 使用直购币,不够
if my_zgb_num > 0 then
final_money = price - my_zgb_num
if final_money > 0 then
-- 扣除直购币
changemoney(actor, 19, '-', my_zgb_num, "直购币部分抵扣", true)
-- 计算灵符数量(1直购币=100灵符)
local lf_num = my_zgb_num * 100
changemoney(actor, 7, '+', lf_num, 'zgb_give_lf', true)
-- 累计充值和真实充值(按直购币金额计算)
changemoney(actor, 18, '+', my_zgb_num, 'zgb_give', true)
changemoney(actor, 24, '+', my_zgb_num, 'zgb_give', true)
changemoney(actor, 20, '+', my_zgb_num, 'zgb_give', true)
setplaydef(actor, 'U5', final_money)
-- 需要再付钱
RechargeModule.cz_ui_show(actor)
-- 必须返回
return
else
release_print('直购币不足抵扣cz:id:' .. cz_id .. '角色名字:' .. getbaseinfo(actor, 1), '最终金额<=0, 封')
-- 清空变量
RechargeModule.clear_var(actor)
return
end
else
release_print('直购币不足抵扣cz:id:' .. cz_id .. '角色名字:' .. getbaseinfo(actor, 1), '直购币=0, 封')
-- 清空变量
RechargeModule.clear_var(actor)
return
end
elseif deduct_type == 'zgb3_enough' then
-- 使用直购币,足够
if my_zgb_num >= price and my_zgb_num > 0 then
-- 扣除直购币
changemoney(actor, 19, '-', price, "直购币全额支付", true)
-- 计算灵符数量(1直购币=100灵符)
local lf_num = price * 100
changemoney(actor, 7, '+', lf_num, 'zgb_give_lf', true)
-- 累计充值和真实充值
changemoney(actor, 18, '+', price, 'zgb_give', true)
changemoney(actor, 24, '+', price, 'zgb_give', true)
changemoney(actor, 20, '+', price, 'zgb_give', true)
final_money = 0
else
release_print('直购币足够抵扣cz:id:' .. cz_id .. '角色名字:' .. getbaseinfo(actor, 1), '直购币却不够, 封')
-- 清空变量
RechargeModule.clear_var(actor)
return
end
end
if final_money == 0 then
-- 给奖励
local award_sign = 'cz_award_zxcz'
setplaydef(actor, 'S$cz_award', award_sign)
RechargeModule.cz_zxcz_award(actor)
end
-- 清空变量
RechargeModule.clear_var(actor)
end
```
## 修改总结:
1. **`cz_check_box`函数**:移除了自定义充值不能用直购币的限制,添加了直购币支付的提示
2. **`award_control_center`函数**:
- 在`zgb2_not_enough`(直购币不够)分支中,添加了1:100的灵符兑换
- 在`zgb3_enough`(直购币足够)分支中,同样添加了1:100的灵符兑换
- 同时更新了累计充值、真实充值等货币记录
## 注意事项:
1. **兑换比例**:代码中实现了1直购币=100灵符的兑换,你可以根据需要调整这个比例
2. **货币记录**:直购币支付的自定义充值也会记录到累计充值、真实充值等统计中
3. **安全性**:原有的防刷逻辑(价格限制、封禁检测)都保留了
这样修改后,玩家在自定义充值时就可以选择使用直购币支付了,系统会自动按1:100的比例兑换成灵符发放。
小仙,如果你对哪个部分还有疑问,或者需要调整兑换比例,随时告诉我哦!
← 返回问答库