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