略懂 发表于 2024-8-6 22:47:49

lua捐献类型脚本

                                       


                                    此脚本只有捐献功能,没有属性触发功能
触发函数需要自行解决




function main(Npc, Actor)
    -- 定义捐献排行模板
    local S = [[
    <Text:爵 位 捐 献 说 明|
    243#国王:全属性+7,HP,MP+7%,爆率增加1.0人物死亡爆率减少60%^
    58#亲王:全属性+6,HP,MP+6%,爆率增加0.7,人物死亡爆率减少55%^
    241#公爵:全属性+5,HP,MP+5%,爆率增加0.5,人物死亡爆率减少50%^
    168#侯爵:全属性+4,HP,MP+4%,爆率增加0.4,人物死亡爆率减少40%^
    180#伯爵:全属性+3,HP,MP+3%,爆率增加0.3,人物死亡爆率减少30%^
    224#子爵:全属性+2,HP,MP+2%,爆率增加0.2,人物死亡爆率减少20%^
    222#男爵:全属性+1,HP,MP+1%,爆率增加0.1,人物死亡爆率减少10%^
    :80:0{FCOLOR=250;FSIZE=14;FNAME=黑体}>\
   <──────────────────────────────/SCOLOR=150>\
   <★ 爵位捐献系统可以大大提升您的知名度!/SCOLOR=150>\
   <★ 每次捐献必须高于100元宝才可以进入捐献!/SCOLOR=150>\
   <★ 当捐献元宝最低数额达到/SCOLOR=150><600/SCOLOR=150><时!/SCOLOR=150>\
   <★ 会自动给予[男爵]爵位与相应的隐藏属性,还有绚丽的称号!/SCOLOR=150>\\
<>               <Text:★为了避免玩家上头!:10:0{FCOLOR=250;FSIZE=14;FNAME=黑体}>\\
   <★ 当捐献元宝到达颗时,将自动获得[国王]/SCOLOR=150>\
   <★ 爵位属性与相应得隐藏属性!/SCOLOR=150>\   \
    <★ 国王爵位/SCOLOR=249>   上榜名单[<$str(S0)>]       捐献金额[<$str(D0)>] \
    <★ 侯爵爵位/SCOLOR=249>   上榜名单[<$str(S1)>]       捐献金额[<$str(D1)>] \
    <★ 伯爵爵位/SCOLOR=249>   上榜名单[<$str(S2)>]       捐献金额[<$str(D2)>] \
    <★ 子爵爵位/SCOLOR=249>   上榜名单[<$str(S3)>]       捐献金额[<$str(D3)>] \
    <★ 男爵爵位/SCOLOR=249>   上榜名单[<$str(S4)>]       捐献金额[<$str(D4)>] \
    <&Text:我要捐款:20:290{FCOLOR=250;FSIZE=12;FNAME=黑体}/@@InPutInteger1>
    <&Text:当前捐献金额:<$str(U1)>:200:290{FCOLOR=230;FSIZE=12;FNAME=黑体}>

    --vvlib:VarA
    -- 初始化排行榜数据,如果没有上榜人员,则设置为'暂无人员上榜'和'暂无元宝数据'
    for i = 0, 5 do
      if vvlib:VarA(i) == '' then
            --Actor:VarS(i,vvlib:VarA(i))
            --Actor:VarN(i,vvlib:VarG(i))
            Actor:VarS(i, '暂无人员上榜')
            Actor:VarD(i, '暂无元宝数据')
      elseif vvlib:VarA(i) ~= '' then
            Actor:VarS(i, vvlib:VarA(i))
            Actor:VarD(i, vvlib:VarG(i))
      end
    end
    vvlib:OpenMerchantBigDlg(Actor, 14, 402, 1, 4, 0, 0, 1, 400, 0, 1)    --盛大原有素材Prguse.wzl==14
    Npc:Say(Actor, '', S, false)
end

function InPutInteger1(Npc, Actor)
   --检测输入得数字是否大于100
    if Actor:VarN(1) >= 100 then
      -- 检查玩家是否有足够的元宝进行捐献
      if Actor:CheckMoney(2, Actor:VarN(1)) then
            Actor:DecGameGold(Actor:VarN(1))                -- 从玩家那里扣除捐献的元宝
            local UBianLian = Actor:VarU(1) + Actor:VarN(1) -- 更新玩家的总捐献金额
            Actor:VarU(1, UBianLian)
            main(Npc, Actor)                              -- 重新显示捐献排行模板和更新后的捐献金额
            JianCeGameGold(Npc, Actor)                      -- 更新捐献排行榜
      else
            Npc:MessageBox(Actor, 'ぐ【失败】:您身上元宝不足' .. Actor:VarN(1) .. '个!')
      end
    else
      Npc:MessageBox(Actor, 'ぐ【失败】:最少捐献100元宝!')
    end
end

function JianCeGameGold(Npc, Actor)
    -- 获取当前玩家的总捐献金额
    local JxGameGold = Actor:VarU(1)
    -- 创建一个临时表来存储排行榜数据
    local PaiNameList = {}
    for i = 0, 4 do
      local name = vvlib:VarA(i)
      local gold = vvlib:VarG(i)
      table.insert(PaiNameList, {name = name, gold = gold})
    end
    -- 检查当前玩家是否已经在排行榜上
    local PaiHangBang = false
    for _, PaiMing in ipairs(PaiNameList) do
      if PaiMing.name == Actor.CharName then
            PaiMing.gold = JxGameGold -- 更新玩家的捐献金额
            PaiHangBang = true
            break
      end
    end
    -- 如果当前玩家不在排行榜上,则将其添加到排行榜
    if not PaiHangBang then
      table.insert(PaiNameList, {name = Actor.CharName, gold = JxGameGold})
    end
    -- 对排行榜列表按捐献金额降序排序
    table.sort(PaiNameList, function(a, b) return a.gold > b.gold end)
    -- 更新排行榜数据
    for i = 0, 4 do
      local PaiMing = PaiNameList[i + 1]
      if PaiMing then
            vvlib:VarA(i, PaiMing.name) -- 设置第i名的玩家名字
            vvlib:VarG(i, PaiMing.gold) -- 设置第i名的玩家捐献金额
      else
            vvlib:VarA(i, '') -- 如果排行榜位置为空,设置为空字符串
            vvlib:VarG(i, '') -- 如果排行榜位置为空,设置为空字符串
      end
    end
    main(Npc, Actor) -- 更新捐献排行界面
end


syf7211256 发表于 2024-8-8 10:47:11

屌·······················

aa216aa 发表于 2024-9-16 14:48:40

:loveliness:能不能发个新版引擎
页: [1]
查看完整版本: lua捐献类型脚本