Vv引擎官方论坛

搜索
查看: 1045|回复: 0

[脚本发布] 极品转移脚本之动态勾选物品属性

[复制链接]
  • TA的每日心情
    郁闷
    2024-8-23 00:41
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    9

    主题

    38

    帖子

    558

    积分

    高级会员

    Rank: 4

    积分
    558
    发表于 2024-5-26 08:19:16 | 显示全部楼层 |阅读模式
    本脚本并非完整转移脚本,目前只写到了放入装备后动态获取装备属性,然后根据玩家勾选的属性运算需要费用等操作
    效果图:












    脚本代码:
    module('QuestDiary_XH_测试NPC', package.seeall)
    --本脚本由黑哥编写,详情咨询QQ:314110995
    local LitemValueList = {}--物品极品表类型组,用于存放放入OK框中物品的所有极品属性类型
    function main(Npc, Player)--主函数入口
        local S =
            [[
                <>\
                <>\
                <>请放入物品到下面的框中\
                <ItemBox:0:6:513:64:90:32:32:*:放入极品装备>
                <ItemBox:1:6:513:290:90:32:32:*:放入接受极品的装备>\
            ]]
         vvlib:OpenMerchantBigDlg(Player, 4, 402, 1, 4, 0, 0, 1, 400, 1, 1)
     Npc:Say(Player, '', S, false) --显示NPC界面
     --勾叉图Prguse3.wil 488未选中,489选中 引擎中对应的wil资源序号:6
     --物品框Prguse3.wil 513
    end
    function AllItemInSay(Npc,Player,sfgx)--全部OK框放入物品后触发,所有核心操作都从这里分发
        local say1 = '<>    请勾选要转移的属性:\\<> \\'
        local UserItem =Player:GetCustomBox(0)--提取OK框0的物品
        local S =
            [[
                <>\
                <>\
                <>请放入物品到下面的框中\
                <ItemBox:0:6:513:64:90:32:32:*:放入极品装备>
                <ItemBox:1:6:513:290:90:32:32:*:放入接受极品的装备>\
                <>\<>\<>\<>\<>\
            ]]
            if UserItem ~= nil then
                if sfgx == false then--检查玩家是否点击了勾选按钮,如果没有,证明是放入的新装备,所以要立即获取该装备的全部极品属性
                    GetItemValue(Npc,Player)--跳到极品获取的函数进行物品极品枚举操作
                end
                for i =1,#LitemValueList do--根据获取的极品列表数组进行操作
                    if LitemValueList[i].zt == 1 then--检查数组中当前序号的勾选状态
                        LitemValueList[i].TEXT=string.gsub(LitemValueList[i].TEXT,'488','489',1)--勾选则打勾
                    else
                        LitemValueList[i].TEXT=string.gsub(LitemValueList[i].TEXT,'489','488',1)--未勾选则打叉
                    end
                 say1=say1..LitemValueList[i].TEXT--显示列表中的文字信息(即极品列表信息)
                end
                say1=say1..GetPir(Npc,Player)--获取勾选后的所需价格运算
            end
        Npc:Say(Player, '', S..say1, false) --显示NPC界面
    end
    function GetPir(Npc,Player)--获取勾选后的极品转移所需元宝数量
        local x = ''
        local ybz = 0
        for i=1,#LitemValueList do
            if LitemValueList[i].zt == 1 then
                if LitemValueList[i].STD == 5 or LitemValueList[i].STD == 6 then
                    ybz =ybz + LitemValueList[i].Value * 2--如果是武器则设置为单个极品点数*2元宝
                else
                    ybz =ybz + LitemValueList[i].Value * 1--否则设置为单个极品点数*1元宝
                end
            end
        end
         x =x ..'<>                需要元宝数量:'..tostring(ybz)
        return x,ybz--返回对话文字和元宝值
    end
    function GXBH(Npc,Player,x)--勾选状态设置
        for i = 1,#LitemValueList do--循环数组数量即可进行操作
            if LitemValueList[i].gxid == tonumber(x) then--查看传入的参数x则能得到玩家勾选的是哪个条目
                if LitemValueList[i].zt == 0 then --检查该条目的勾选状态是否打勾,如果没有则设置为1(打勾)
                    LitemValueList[i].zt = 1
                else
                    LitemValueList[i].zt = 0--如果该条目已经打勾,证明玩家想取消勾选,所以设置0(取消打勾)
                end
            end
        end
        AllItemInSay(Npc,Player,true)
    end
    function GetItemValue(Npc,Player)--取得装备上所有允许转移的极品
        --LitemValueList 装备放入后的列表,里面包含放入装备的提示文字和勾选状态
        local UserItem =Player:GetCustomBox(0)
        local StdItem = vvlib:GetStdItemByIndex(UserItem.Index)
        delalldata(Npc, Player)--清空用于缓存的数组,以便放入新的数据
        if UserItem ~= nil then
           if StdItem ~= nil then
            if StdItem.StdMode == 5 or StdItem.StdMode == 6 then--判断物品类型,以便显示不同的文字信息
                for i = 0, 4 do--0-4循环则为极品属性位置0-4对应,如果改为0-13则几乎所有极品都拿出来了,但同时需要写更多文字提示
                    --进入循环第一件事是创建一个临时结构,里面包含了:NPC显示文字,物品属性位置,物品类型,和极品点数
                    local LS = {TEXT='',gxid=-1,zt=0,STD=StdItem.StdMode,Value=0}
                    if UserItem.Value[i] > 0 then--当物品的极品大于0则证明该物品的属性位置存在极品
                        if i == 0 then--根据属性位置设置不同的提示文字,武器的属性位置0则是攻击
                            LS.TEXT='<>     <Img:488:6:0:0/@GXBH(0)><攻击/@GXBH(0)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        elseif i == 1 then--根据属性位置设置不同的提示文字,武器的属性位置1则是魔法
                            LS.TEXT='<>     <Img:488:6:0:0/@GXBH(1)><魔法/@GXBH(1)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        elseif i == 2 then--根据属性位置设置不同的提示文字,武器的属性位置2则是道术
                            LS.TEXT='<>     <Img:488:6:0:0/@GXBH(2)><道术/@GXBH(2)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        elseif i ==  3 then--根据属性位置设置不同的提示文字,武器的属性位置3则是幸运
                            LS.TEXT='<>     <Img:488:6:0:0/@GXBH(3)><幸运/@GXBH(3)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        elseif i == 4 then--根据属性位置设置不同的提示文字,武器的属性位置4则是诅咒
                            LS.TEXT='<>     <Img:488:6:0:0/@GXBH(4)><诅咒/@GXBH(4)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        end
                        LS.gxid=i--记录下极品序号,用于勾选需要,同时此序号也是对应的物品属性位置
                        LS.Value= UserItem.Value[i]--记录下物品极品点数,用于运算价格
                        LitemValueList[#LitemValueList+1]=LS--将记录的类型加入到数组保存,注意后续所有操作都是依据此数组而操作
                    end
                end
            else
                for i = 0, 4 do
                    local LS = {TEXT='',gxid=-1,zt=0,STD=StdItem.StdMode,Value=0}
                    if UserItem.Value[i] > 0 then
                        if i == 0 then--根据属性位置设置不同的提示文字,非武器物品的属性位置0则是防御
                            LS.TEXT='<>     <Img:488:6:0:0/GXBH(0)><防御/@GXBH(0)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        elseif i == 1 then
                            LS.TEXT='<>     <Img:488:6:0:0/GXBH(1)><魔御/@GXBH(1)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        elseif i == 2 then
                            LS.TEXT='<>     <Img:488:6:0:0/GXBH(2)><攻击/@GXBH(2)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        elseif i ==  3 then
                            LS.TEXT='<>     <Img:488:6:0:0/GXBH(3)><魔法/@GXBH(3)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        elseif i == 4 then
                            LS.TEXT='<>     <Img:488:6:0:0/GXBH(4)><道术/@GXBH(4)>:+'.. tostring(UserItem.Value[i])..'\\<> \\'
                        end
                        LS.gxid=i
                        LS.Value= UserItem.Value[i]
                        LitemValueList[#LitemValueList+1]=LS
                    end
                end
            end
           end
        end
       -- return X
    end
    function delalldata(Npc,Player)--删除缓存的数组
        for i = #LitemValueList, 1, -1 do
            table.remove(LitemValueList,i)
        end
    end
    function ItemIntoBox0(Npc,Player)--0号框放入物品触发
        local UserItem
        UserItem=Player:GetCustomBox(1)
        if UserItem ~= nil then
            AllItemInSay(Npc,Player,false)
        else
            Player:SysMsg('请向右侧框内放入准备接收极品的装备',249,255,1) 
        end
    end
    function ItemOutBox0(Npc,Player)--0号框拿走物品触发
        AllItemInSay(Npc,Player,false)
    end
    function ItemIntoBox1(Npc,Player)--1号框放入物品触发
     local UserItem
        UserItem=Player:GetCustomBox(0)
        if UserItem ~= nil then
            AllItemInSay(Npc,Player,false)
        else
            Player:SysMsg('请在左侧框内放入带有极品的装备',249,255,1)
        end
    end
    function ItemOutBox1(Npc,Player)--1号框拿走物品触发
        AllItemInSay(Npc,Player,false)
    end


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    评分

    参与人数 1金钱 +10 收起 理由
    猫总 + 10 很给力!

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表