/*: * @plugindesc v1.05 LiuYue_SeniorChest 高级箱子 * @author 流逝的岁月 * * @help * ============================================================================ * 介绍 * ============================================================================ * * * 这款插件提供了打开宝箱时出现物品界面,使箱中的物品变得可选择 * * * *------------------------------------------------------------------- * *使用条例:本插件完全免费,随意魔改 * *------------------------------------------------------------------- * * * * * * *以下是可以使用的插件指令 *-----------------------PluginCommand------------------------- * * ZzySCF OverlapMode x(Single/Overlap/Event) //这会修改打开宝箱的叠加模式 * ZzySCF ShowMode x(Chest/YuanShen) //这会修改打开宝箱的窗口显示模式 * ZzySCF IsFilterText x(true/false) //这会修改在打开宝箱时忽略文本 * ZzySCF CoinIcon x //金币所使用的图标,需要填写图标素材图中对应的ID值 * * * ZzySCF CMaxCols x //这会修改使显示模式--Chest的选项框中打开宝箱时显示的最大列数 * ZzySCF IsCAllTake x(true/false) //这会修改使显示模式--Chest的选项框中是否包含全部拿取的命令 * ZzySCF CAllTakeText x //这会修改使显示模式--Chest的选项框中全部拿取命令的文本 * ZzySCF IsCClose x(true/false) //这会修改使显示模式--Chest的选项框中是否包含退出宝箱的命令 * ZzySCF CCloseText x //这会修改使显示模式--Chest的选项框中退出宝箱命令的文本 * ZzySCF IsCAutoLine x(true/false) //这会修改使显示模式--Chest的选项框中开启关闭拿取宝箱时自动队列 * * * ZzySCF YMaxCols x //这会修改使显示模式--YuanShen的选项框中打开宝箱时显示的最大列数 * ZzySCF YMaxList x //这会修改使显示模式--YuanShen的选项框中打开宝箱时显示的最大行数 * ZzySCF YWindowWidth x //这会修改使显示模式--YuanShen的窗口宽度 * ZzySCF YWindowOp x //这会修改使显示模式--YuanShen的窗口透明度 * ZzySCF YTakeRange x //这会修改使显示模式--YuanShen的出现显示范围 * ZzySCF YColor1 x //这会修改使显示模式--YuanShen的显示底板颜色1 * ZzySCF YColor2 x //这会修改使显示模式--YuanShen的显示底板颜色2 * ZzySCF YOffsetX x //这会修改使显示模式--YuanShen的窗口偏移X,这可以是一个正负值 * ZzySCF YOffsetY x //这会修改使显示模式--YuanShen的窗口偏移Y,这可以是一个正负值 * ZzySCF YFadeFrame x //这会修改使显示模式--YuanShen的窗口出现或是消失所需要的渐变帧数时长 * ZzySCF YDistance x //这会修改使显示模式--YuanShen的窗口绘制道具背景的间距 * ZzySCF YIsHorShow x(true/false) //这会修改使显示模式--YuanShen的窗口是否水平绘制道具背景的渐变色 * ZzySCF YIsAutoOpen x(true/false) //这会修改使显示模式--YuanShen的窗口开过的宝箱再次接近时,会自动开箱 * ZzySCF YIsLimitWindow x(true/false) //这会修改使显示模式--YuanShen的显示宝箱窗口限制在屏幕内 * * ZzySCF CoinColor x //这会修改打开宝箱后显示金币文本的颜色 * * * *以下是可以使用的脚本函数 *-----------------------Script Function------------------------- * * * Zzy.SCF.OverlapMode(mode) //这会修改打开宝箱的叠加模式 * Zzy.SCF.ShowMode(mode) //这会修改打开宝箱的窗口显示模式 * Zzy.SCF.IsFilterText(enable) //这会修改在打开宝箱时忽略文本 * Zzy.SCF.CoinIcon(iconIndex) //金币所使用的图标,需要填写图标素材图中对应的ID值 * * Zzy.SCF.CMaxCols(cols) //这会修改使显示模式--Chest的选项框中打开宝箱时显示的最大列数 * Zzy.SCF.IsCAllTake(enable) //这会修改使显示模式--Chest的选项框中是否包含全部拿取的命令 * Zzy.SCF.CAllTakeText(tText) //这会修改使显示模式--Chest的选项框中全部拿取命令的文本 * Zzy.SCF.IsCClose(enable) //这会修改使显示模式--Chest的选项框中是否包含退出宝箱的命令 * Zzy.SCF.CCloseText(tText) //这会修改使显示模式--Chest的选项框中退出宝箱命令的文本 * Zzy.SCF.IsCAutoLine(enable) //这会修改使显示模式--Chest的选项框中开启关闭拿取宝箱时自动队列 * * Zzy.SCF.YMaxCols(cols) //这会修改使显示模式--YuanShen的选项框中打开宝箱时显示的最大列数 * Zzy.SCF.YMaxList(list) //这会修改使显示模式--YuanShen的选项框中打开宝箱时显示的最大行数 * Zzy.SCF.YWindowWidth(width) //这会修改使显示模式--YuanShen的窗口宽度 * Zzy.SCF.YWindowOp(op) //这会修改使显示模式--YuanShen的窗口透明度 * Zzy.SCF.YTakeRange(range) //这会修改使显示模式--YuanShen的出现显示范围 * Zzy.SCF.YColor1(color) //这会修改使显示模式--YuanShen的显示底板颜色1 * Zzy.SCF.YColor2(color) //这会修改使显示模式--YuanShen的显示底板颜色2 * Zzy.SCF.YOffsetX(ofx) //这会修改使显示模式--YuanShen的窗口偏移X,这可以是一个正负值 * Zzy.SCF.YOffsetY(ofy) //这会修改使显示模式--YuanShen的窗口偏移Y,这可以是一个正负值 * Zzy.SCF.YFadeFrame(fFrame) //这会修改使显示模式--YuanShen的窗口出现或是消失所需要的渐变帧数时长 * Zzy.SCF.YDistance(dis) //这会修改使显示模式--YuanShen的窗口绘制道具背景的间距 * Zzy.SCF.YIsHorShow(enable) //这会修改使显示模式--YuanShen的窗口是否水平绘制道具背景的渐变色 * Zzy.SCF.YIsAutoOpen(enable) //这会修改使显示模式--YuanShen的窗口开过的宝箱再次接近时,会自动开箱 * Zzy.SCF.YIsLimitWindow(enable) //这会修改使显示模式--YuanShen的显示宝箱窗口限制在屏幕内 * * Zzy.SCF.CoinColor(color) //这会修改打开宝箱后显示金币文本的颜色 * * *以下是一些数据库中使用到的便签,请将他们写在 数据库->道具/武器/护甲->注释 之中 *---------------------DataBase Note-------------------- * * //这会使这个道具在宝箱中打开时呈现设置的颜色,可以用#xxxxxx或rgba(x,x,x,x)的格式 * * * * * * *以下是一些地图中事件用到的便签信息,请将他们写在 地图->事件->事件指令->注释 之中 *---------------------Note Case-------------------- * * //这会将本事件视为一个箱子,在打开始进入箱子界面 * * * * ------------------------------------------------------------ 我叫坂本:v1.05 兼容LiuYue_GainItemTips提示道具插件,如果处于YuanShen模式下获取物品,也会进行显示 我叫坂本:v1.04 拓展脚本函数 我叫坂本:v1.03 添加与旧存档兼容,修复宝箱中武器以及护甲无法添加到背包中的bug 我叫坂本:v1.02 调整yuanshen箱子在地图边缘显示位置的问题,增加可控的额外参数 我叫坂本:v1.01 优化,添加新的参数 我叫坂本:v1.00 完成插件 ------------------------------------------------------------ * @param ---设置--- * @default * * * @param OverlapMode * @text 相同物品重叠模式 * @parent ---设置--- * @type combo * @option Single * @option Overlap * @option Event * @desc 在打开宝箱时,出现相同物品的重叠模式,Single代表所有道具独立不会重叠,Overlap代表相同道具重叠,Event代表事件中设置的重叠方式 * @default Event * * * @param ShowMode * @text 物品显示模式 * @parent ---设置--- * @type combo * @option Chest * @option YuanShen * @desc 打开宝箱后,窗口的显示模式,Chest代表窗口中存放道具,YuanShen代表游戏《原神》中宝箱物品的显示方式 * @default Chest * * * * @param IsFilterText * @text 是否过滤文本 * @parent ---设置--- * @type boolean * @on YES * @off NO * @desc 触发被视为箱子的事件时,是否会过滤所显示文本的功能 * YES - true NO - false * @default true * * * @param CoinIcon * @text 金币图标 * @parent ---设置--- * @type Number * @desc 显示金币的图标,请填写ID值 * @default 313 * * * @param CountNumWidth * @text 数字预留距离 * @parent ---设置--- * @type text * @desc 这个是物品数量的间隔距离,可以属于对应的0代表预留的数字宽度 * @default 0000 * * @param CountCoinWidth * @text 金币预留距离 * @parent ---设置--- * @type text * @desc 这个是金币数量的间隔距离,可以属于对应的0代表预留的数字宽度 * @default 00000 * * * @param ---Chest模式窗口--- * @default * * @param CMaxCols * @text 每行数量 * @parent ---Chest模式窗口--- * @type Number * @min 1 * @desc 每一行能显示的数量,默认值为2个 * @default 2 * * @param IsCAllTake * @text 是否拥有全部取走选项 * @parent ---Chest模式窗口--- * @type boolean * @on YES * @off NO * @desc 打开箱子后,选择窗口是否拥有全部取走的选项 * YES - true NO - false * @default true * * @param CAllTakeText * @text 全部取走文本 * @parent ---Chest模式窗口--- * @type Text * @desc 打开箱子后,选择窗口显示全部取走的文本内容 * @default 全部取走 * * * @param IsCClose * @text 是否拥有关闭宝箱选项 * @parent ---Chest模式窗口--- * @type boolean * @on YES * @off NO * @desc 打开箱子后,选择窗口是否拥有关闭宝箱的选项 * YES - true NO - false * @default true * * @param CCloseText * @text 关闭宝箱文本 * @parent ---Chest模式窗口--- * @type Text * @desc 打开箱子后,选择窗口显示全部取走的文本内容 * @default 关闭宝箱 * * @param IsCAutoLine * @text 是否自动队列 * @parent ---Chest模式窗口--- * @type boolean * @on YES * @off NO * @desc 再点击取出道具后,是否宝箱中所有道具都会向前移动一格 * YES - true NO - false * @default true * * * @param ---YuanShen模式窗口--- * @default * * @param YMaxCols * @text 每行数量 * @parent ---YuanShen模式窗口--- * @type Number * @min 1 * @desc 每一行能显示的数量,默认值为1个 * @default 1 * * @param YMaxList * @text 最大行数 * @parent ---YuanShen模式窗口--- * @type Number * @min 1 * @desc 能同时显示的最大行数,默认值为5个 * @default 5 * * @param YWindowWidth * @text 窗口宽度 * @parent ---YuanShen模式窗口--- * @type Number * @desc 显示的窗口的最大宽度,默认值为180 * @default 280 * * @param YWindowOp * @text 窗口透明度 * @parent ---YuanShen模式窗口--- * @type Number * @min 0 * @desc 显示的窗口的透明度,默认值为255 * @default 255 * * * * * * * @param YTakeRange * @text 拾取范围 * @parent ---YuanShen模式窗口--- * @type Number * @desc 宝箱开启后,玩家在一定范围内会显示窗口,范围为正方形,默认值为1 * @default 1 * * @param YColor1 * @text 底板颜色1 * @parent ---YuanShen模式窗口--- * @type text * @desc 这是打开宝箱后显示道具的底板颜色1,默认为rgba(0, 0, 0, 0.6)灰黑色 * @default rgba(0, 0, 0, 0.6) * * @param YColor2 * @text 底板颜色2 * @parent ---YuanShen模式窗口--- * @type text * @desc 这是打开宝箱后显示道具的底板颜色1,默认为rgba(0, 0, 0, 0)黑色 * @default rgba(0, 0, 0, 0) * * * @param YOffsetX * @text 窗口偏移X * @parent ---YuanShen模式窗口--- * @type text * @desc 显示窗口的偏移量X,这可以是一个正负整数值 * @default 20 * * @param YOffsetY * @text 窗口偏移Y * @parent ---YuanShen模式窗口--- * @type text * @desc 显示窗口的偏移量Y,这可以是一个正负整数值 * @default -160 * * @param YFadeFrame * @text 渐变时长 * @parent ---YuanShen模式窗口--- * @type Number * @desc 宝箱窗口出现到显示所经过的帧数时长 * @default 10 * * @param YDistance * @text 矩形间距 * @parent ---YuanShen模式窗口--- * @type Number * @desc 绘制的道具背景矩形框的间距,默认值为2,代表2像素 * @default 2 * * @param YIsHorShow * @text 是否水平绘制 * @parent ---YuanShen模式窗口--- * @type boolean * @on YES * @off NO * @desc 显示的道具背景框垂直或是水平绘制,选择true进行水平绘制 * YES - true NO - false * @default true * * * @param YIsAutoOpen * @text 是否自动开箱 * @parent ---YuanShen模式窗口--- * @type boolean * @on YES * @off NO * @desc 开过的宝箱将会自动记录,下次接近返回时会自动打开 * YES - true NO - false * @default true * * @param YIsLimitWindow * @text 是否限制在屏幕中 * @parent ---YuanShen模式窗口--- * @type boolean * @on YES * @off NO * @desc 开启限制后,宝箱显示内容将不会出屏,防止发生显示不完全的问题 * YES - true NO - false * @default true * * @param ---道具设置--- * @default * * @param CoinColor * @text 金币文字显示颜色 * @parent ---道具设置--- * @type text * @desc 打开宝箱后金币显示的颜色值,可填写#000000~#ffffff或rgba(0,0,0,0)~rgba(255,255,255,1)这两种颜色码格式,默认为白色 * @default #ffffff * * @param ---音效--- * @default * * @param TakeSound * @text 取走时音效名称 * @parent ---音效--- * @type file * @dir audio/se * @desc 取走宝箱中物品时,会产生的音效,填写audio/se文件夹下的音频名称 * @default Cursor1 * * @param TakeVolume * @text 取走时音量 * @parent ---音效--- * @type Number * @desc 音量大小,默认100 * @default 100 * @param TakePitch * @text 取走时声调 * @parent ---音效--- * @type Number * @desc 声调,默认100 * @default 100 * @param TakePan * @text 取走时声道 * @parent ---音效--- * @type Number * @desc 声道,默认0 * @default 0 * * * * @param NoItemSound * @text 空物品音效名称 * @parent ---音效--- * @type file * @dir audio/se * @desc 取走宝箱中物品时,会产生的音效,填写audio/se文件夹下的音频名称 * @default Cancel1 * * @param NoItemVolume * @text 空物品音量 * @parent ---音效--- * @type Number * @desc 音量大小,默认100 * @default 100 * @param NoItemPitch * @text 空物品声调 * @parent ---音效--- * @type Number * @desc 声调,默认100 * @default 100 * @param NoItemPan * @text 空物品声道 * @parent ---音效--- * @type Number * @desc 声道,默认0 * @default 0 * * * @param ChangeItemSound * @text 切换选择音效名称 * @parent ---音效--- * @type file * @dir audio/se * @desc 取走宝箱中物品时,会产生的音效,填写audio/se文件夹下的音频名称 * @default Knock * * @param ChangeItemVolume * @text 切换选择音量 * @parent ---音效--- * @type Number * @desc 音量大小,默认100 * @default 100 * @param ChangeItemPitch * @text 切换选择声调 * @parent ---音效--- * @type Number * @desc 声调,默认100 * @default 100 * @param ChangeItemPan * @text 切换选择声道 * @parent ---音效--- * @type Number * @desc 声道,默认0 * @default 0 * * * @param AllTakeSound * @text 全部取走音效名称 * @parent ---音效--- * @type file * @dir audio/se * @desc 取走宝箱中物品时,会产生的音效,填写audio/se文件夹下的音频名称 * @default Equip2 * * @param AllTakeVolume * @text 全部取走音量 * @parent ---音效--- * @type Number * @desc 音量大小,默认100 * @default 100 * @param AllTakePitch * @text 全部取走声调 * @parent ---音效--- * @type Number * @desc 声调,默认100 * @default 100 * @param AllTakePan * @text 全部取走声道 * @parent ---音效--- * @type Number * @desc 声道,默认0 * @default 0 * * * @param CloseSound * @text 关闭宝箱音效名称 * @parent ---音效--- * @type file * @dir audio/se * @desc 取走宝箱中物品时,会产生的音效,填写audio/se文件夹下的音频名称 * @default Chest2 * * @param CloseVolume * @text 关闭宝箱音量 * @parent ---音效--- * @type Number * @desc 音量大小,默认100 * @default 100 * @param ClosePitch * @text 关闭宝箱声调 * @parent ---音效--- * @type Number * @desc 声调,默认100 * @default 100 * @param ClosePan * @text 关闭宝箱声道 * @parent ---音效--- * @type Number * @desc 声道,默认0 * @default 0 * * * */ var LiuYue = LiuYue || {}; LiuYue.LiuYue_SeniorChest = true;//插件启动 var Zzy = Zzy || {}; Zzy.SCF = Zzy.SCF || {}; Zzy.SCF.version = 1.04; Zzy.Parameters = PluginManager.parameters('LiuYue_SeniorChest'); Zzy.Param = Zzy.Param || {}; Zzy.Param.SCFOverlapMode = String(Zzy.Parameters['OverlapMode']); Zzy.Param.SCFShowMode = String(Zzy.Parameters['ShowMode']); Zzy.Param.SCFIsFilterText = eval(String(Zzy.Parameters['IsFilterText'])); Zzy.Param.SCFCoinIcon = parseInt(Zzy.Parameters['CoinIcon']);//金币图标 Zzy.Param.SCFCMaxCols = parseInt(Zzy.Parameters['CMaxCols']);//最大列数 Zzy.Param.SCFIsCAllTake = eval(String(Zzy.Parameters['IsCAllTake']));//是否拥有全部取走选项 Zzy.Param.SCFCAllTakeText = String(Zzy.Parameters['CAllTakeText']);//全部取走文本 Zzy.Param.SCFIsCClose = eval(String(Zzy.Parameters['IsCClose']));//是否拥有关闭宝箱选项 Zzy.Param.SCFCCloseText = String(Zzy.Parameters['CCloseText']);//全部取走文本 Zzy.Param.SCFIsCAutoLine = eval(String(Zzy.Parameters['IsCAutoLine']));//自动队列 Zzy.Param.SCFYMaxCols = parseInt(Zzy.Parameters['YMaxCols']);//最大列数 Zzy.Param.SCFYMaxList = parseInt(Zzy.Parameters['YMaxList']);//最大行数 Zzy.Param.SCFYWindowWidth = parseInt(Zzy.Parameters['YWindowWidth']);//窗口宽度 Zzy.Param.SCFYWindowOp = parseInt(Zzy.Parameters['YWindowOp']);//窗口透明度 Zzy.Param.SCFYTakeRange = parseInt(Zzy.Parameters['YTakeRange']);//拾取范围 Zzy.Param.SCFYColor1 = String(Zzy.Parameters['YColor1']);//底板颜色1 Zzy.Param.SCFYColor2 = String(Zzy.Parameters['YColor2']);//底板颜色2 Zzy.Param.SCFYOffsetX = Number(Zzy.Parameters['YOffsetX']);//窗口偏移X Zzy.Param.SCFYOffsetY = Number(Zzy.Parameters['YOffsetY']);//窗口偏移Y Zzy.Param.SCFYFadeFrame = Number(Zzy.Parameters['YFadeFrame']);//渐变帧数 Zzy.Param.SCFYDistance = parseInt(Zzy.Parameters['YDistance']);//矩形间距 Zzy.Param.SCFYIsHorShow = eval(String(Zzy.Parameters['YIsHorShow']));//是否水平绘制 Zzy.Param.SCFYIsAutoOpen = eval(String(Zzy.Parameters['YIsAutoOpen']));//自动开箱 Zzy.Param.SCFYIsLimitWindow = eval(String(Zzy.Parameters['YIsLimitWindow']));//限制屏幕 Zzy.Param.SCFCoinColor = String(Zzy.Parameters['CoinColor']);//金币颜色 Zzy.Param.SCFCountNumWidth = String(Zzy.Parameters['CountNumWidth']);//道具预留 Zzy.Param.SCFCountCoinWidth = String(Zzy.Parameters['CountCoinWidth']);//金币预留 //声音 Zzy.SCF.MakeSE = function(seName,seVolume,sePitch,sePan) { if(!seName)return undefined; var se = { name:seName, volume:(seVolume ? seVolume : 100), pitch:(sePitch ? sePitch : 100), pan:(sePan ? sePan : 0) }; return se; } Zzy.Param.SCFTakeSound = String(Zzy.Parameters['TakeSound']); Zzy.Param.SCFTakeVolume = parseInt(Zzy.Parameters['TakeVolume']); Zzy.Param.SCFTakePitch = parseInt(Zzy.Parameters['TakePitch']); Zzy.Param.SCFTakePan = parseInt(Zzy.Parameters['TakePan']); Zzy.Param.SCFTakeSE = Zzy.SCF.MakeSE(Zzy.Param.SCFTakeSound,Zzy.Param.SCFTakeVolume,Zzy.Param.SCFTakePitch,Zzy.Param.SCFTakePan); Zzy.Param.SCFNoItemSound = String(Zzy.Parameters['NoItemSound']); Zzy.Param.SCFNoItemVolume = parseInt(Zzy.Parameters['NoItemVolume']); Zzy.Param.SCFNoItemPitch = parseInt(Zzy.Parameters['NoItemPitch']); Zzy.Param.SCFNoItemPan = parseInt(Zzy.Parameters['NoItemPan']); Zzy.Param.SCFNoItemSE = Zzy.SCF.MakeSE(Zzy.Param.SCFNoItemSound,Zzy.Param.SCFNoItemVolume,Zzy.Param.SCFNoItemPitch,Zzy.Param.SCFNoItemPan); Zzy.Param.SCFAllTakeSound = String(Zzy.Parameters['AllTakeSound']); Zzy.Param.SCFAllTakeVolume = parseInt(Zzy.Parameters['AllTakeVolume']); Zzy.Param.SCFAllTakePitch = parseInt(Zzy.Parameters['AllTakePitch']); Zzy.Param.SCFAllTakePan = parseInt(Zzy.Parameters['AllTakePan']); Zzy.Param.SCFAllTakeSE = Zzy.SCF.MakeSE(Zzy.Param.SCFAllTakeSound,Zzy.Param.SCFAllTakeVolume,Zzy.Param.SCFAllTakePitch,Zzy.Param.SCFAllTakePan); Zzy.Param.SCFCloseSound = String(Zzy.Parameters['CloseSound']); Zzy.Param.SCFCloseVolume = parseInt(Zzy.Parameters['CloseVolume']); Zzy.Param.SCFClosePitch = parseInt(Zzy.Parameters['ClosePitch']); Zzy.Param.SCFClosePan = parseInt(Zzy.Parameters['ClosePan']); Zzy.Param.SCFCloseSE = Zzy.SCF.MakeSE(Zzy.Param.SCFCloseSound,Zzy.Param.SCFCloseVolume,Zzy.Param.SCFClosePitch,Zzy.Param.SCFClosePan); Zzy.Param.SCFChangeItemSound = String(Zzy.Parameters['ChangeItemSound']); Zzy.Param.SCFChangeItemVolume = parseInt(Zzy.Parameters['ChangeItemVolume']); Zzy.Param.SCFChangeItemPitch = parseInt(Zzy.Parameters['ChangeItemPitch']); Zzy.Param.SCFChangeItemPan = parseInt(Zzy.Parameters['ChangeItemPan']); Zzy.Param.SCFChangeItemSE = Zzy.SCF.MakeSE(Zzy.Param.SCFChangeItemSound,Zzy.Param.SCFChangeItemVolume,Zzy.Param.SCFChangeItemPitch,Zzy.Param.SCFChangeItemPan); Zzy.Param.SCFAllSE = []; Zzy.Param.SCFAllSE = [undefined,Zzy.Param.SCFTakeSE,Zzy.Param.SCFNoItemSE,Zzy.Param.SCFAllTakeSE,Zzy.Param.SCFCloseSE,Zzy.Param.SCFChangeItemSE]; //1.取物品 //2.没有物品 //3.全部拿走 //4.关闭宝箱 //5.切换选项 Zzy.SCF.TempCacheChest = [];//缓存箱 Zzy.SCF.TempSpeed1 = 16; Zzy.SCF.TempSpeed2 = 8; Zzy.SCF.TempSpeed3 = 4; Zzy.SCF.TempCallInfo = undefined;//临时呼叫信息 Zzy.SCF.TempNotRepeatFrame = 3;//临时等待帧数,这是为了方式宝箱出现双次打开,因为框架特殊的机制,在未拥有指令行的事件中,触碰有概率出现执行两次start函数的情况 //通过等待帧数来避免此类情况的执行 //================================================================= //DataManager //================================================================= Zzy.SCF.DataManager_loadGame = DataManager.loadGame; DataManager.loadGame = function(savefileId) //旧存档兼容 { var result = Zzy.SCF.DataManager_loadGame.call(this,savefileId); this.ZzySCFInitData(); return result; } DataManager.ZzySCFInitData = function()//初始化参数 { if(!$gameSystem.GetIsZzySCFLoaded()) { //初始化 $gameSystem.ZzySCFInitData();//初始化数据 $gameSystem.SetIsZzySCFLoaded(true); } } //================================================================= //Game_System //================================================================= Zzy.SCF.Game_System_initialize = Game_System.prototype.initialize; Game_System.prototype.initialize = function() { Zzy.SCF.Game_System_initialize.call(this); this.ZzySCFInitData();//初始化数据 this._IsZzySCFLoaded = true;//是否载入完成 }; Game_System.prototype.GetIsZzySCFLoaded = function() { if(this._IsZzySCFLoaded === undefined) {this._IsZzySCFLoaded = false;} return this._IsZzySCFLoaded; } Game_System.prototype.SetIsZzySCFLoaded = function(enable) { this._IsZzySCFLoaded = enable; } Game_System.prototype.ZzySCFInitData = function() { this._ZzySCFOverlapMode = Zzy.SCF.OverlapModeToID(Zzy.Param.SCFOverlapMode); this._ZzySCFShowMode = Zzy.SCF.ShowModeToID(Zzy.Param.SCFShowMode); this._ZzySCFIsFilterText = Zzy.Param.SCFIsFilterText; this._ZzySCFCoinIcon = Zzy.Param.SCFCoinIcon; this._ZzySCFCMaxCols = Zzy.Param.SCFCMaxCols;//最大列数 this._ZzySCFIsCAllTake = Zzy.Param.SCFIsCAllTake;//是否拥有全部取走选项 this._ZzySCFCAllTakeText = Zzy.Param.SCFCAllTakeText;//全部取走文本 this._ZzySCFIsCClose = Zzy.Param.SCFIsCClose;//是否拥有关闭宝箱选项 this._ZzySCFCCloseText = Zzy.Param.SCFCCloseText;//全部取走文本 this._ZzySCFIsCAutoLine = Zzy.Param.SCFIsCAutoLine;//自动队列 this._ZzySCFYMaxCols = Zzy.Param.SCFYMaxCols;//最大列数 this._ZzySCFYMaxList = Zzy.Param.SCFYMaxList;//最大行数 this._ZzySCFYWindowWidth = Zzy.Param.SCFYWindowWidth;//窗口最大宽度 this._ZzySCFYWindowOp = Zzy.Param.SCFYWindowOp;//窗口透明度 this._ZzySCFYTakeRange = Zzy.Param.SCFYTakeRange;//拾取范围 this._ZzySCFYColor1 = Zzy.Param.SCFYColor1;//底板颜色1 this._ZzySCFYColor2 = Zzy.Param.SCFYColor2;//底板颜色2 this._ZzySCFYOffsetX = Zzy.Param.SCFYOffsetX;//窗口偏移X this._ZzySCFYOffsetY = Zzy.Param.SCFYOffsetY;//窗口偏移Y this._ZzySCFYFadeFrame = Zzy.Param.SCFYFadeFrame;//渐变帧数时长 this._ZzySCFYDistance = Zzy.Param.SCFYDistance;//水平间距 this._ZzySCFYIsHorShow = Zzy.Param.SCFYIsHorShow;//是否水平 this._ZzySCFYIsAutoOpen = Zzy.Param.SCFYIsAutoOpen;//是否接近自动开箱 this._ZzySCFYIsLimitWindow = Zzy.Param.SCFYIsLimitWindow;//限制界限 this._ZzySCFCoinColor = Zzy.Param.SCFCoinColor;//金币颜色 this._ZzySCFStorage = [];//库存 this._ZzySCFYunChestFlag = [];//打开标记,标记着打开的宝箱事件 this._ZzySCFYunEmptyCheck = [];//空白检测标记 this._ZzySCFWaitCallInfo = undefined; this._ZzySCFWaitOfChest = undefined; } Game_System.prototype.GetZzySCFCoinColor = function() { return this._ZzySCFCoinColor; } Game_System.prototype.IsZzySCFYunEmptyCheck = function(mapId,evId) { if(!this._ZzySCFYunEmptyCheck[mapId] || !this._ZzySCFYunEmptyCheck[mapId][evId]) {return false;} return true; } Game_System.prototype.AddZzySCFYunEmptyCheck = function(mapId,evId) { if(!this._ZzySCFYunEmptyCheck[mapId]) {this._ZzySCFYunEmptyCheck[mapId] = [];} this._ZzySCFYunEmptyCheck[mapId][evId] = true; } Game_System.prototype.GetZzySCFYunChestFlag = function(mapId) { if(!this._ZzySCFYunChestFlag[mapId]) {this._ZzySCFYunChestFlag[mapId] = [];} return this._ZzySCFYunChestFlag[mapId]; } Game_System.prototype.AddYunChestFlag = function(mapId,eventId)//添加开启标记宝箱事件 { if(!this._ZzySCFYunChestFlag[mapId]) { this._ZzySCFYunChestFlag[mapId] = []; } for(var i=0;i= 0) { this._ChestWindow.deselect(); } else { this.popScene();//退出 } } } Scene_ZzySCFChest.prototype.OnSelectProcessOk = function() { if(this._SelectWindow.active) { this._SelectWindow.OnProcessOk(); } this._SelectWindow.activate(); } Scene_ZzySCFChest.prototype.initPosition = function() { this._ChestWindow.y = this._HelpWindow.height; this._SelectWindow.y = Graphics.boxHeight-this._SelectWindow.height; this._SelectWindow.startY = this._SelectWindow.y; this._ChestWindow.height = Graphics.boxHeight-this._HelpWindow.height-this._SelectWindow.height; } Scene_ZzySCFChest.prototype.create = function() { Scene_MenuBase.prototype.create.call(this); this.CreateChestWindow();//创造相关窗口 }; Scene_ZzySCFChest.prototype.AllTakeChest = function() { this._ChestWindow.TakeAll(); } //================================================================ //Window_ZzySCFChestBase //================================================================ //窗口基类 function Window_ZzySCFChestBase() { this.initialize.apply(this, arguments); } Window_ZzySCFChestBase.prototype = Object.create(Window_Selectable.prototype); Window_ZzySCFChestBase.prototype.constructor = Window_ZzySCFChestBase; Window_ZzySCFChestBase.prototype.initialize = function(x,y,w,h) { x = x ? x : 0; y = y ? y : 0; w = w ? w : Graphics.boxWidth; h = h ? h : Graphics.boxHeight; Window_Selectable.prototype.initialize.call(this,x,y,w,h); this.evId = 0; this.mapId = 0; this.initWindow(); }; Window_ZzySCFChestBase.prototype.initWindow = function() { this.Hide(); } Window_ZzySCFChestBase.prototype.Hide = function() { this.visible = false; this.opacity = 0; } Window_ZzySCFChestBase.prototype.Show = function() { this.visible = true; this.opacity = 255; } Window_ZzySCFChestBase.prototype.CallOpen = function() { } Window_ZzySCFChestBase.prototype.OnProcessOk = function() { } //================================================================ //Window_ZzySCFChest //================================================================ //一般模式窗口 function Window_ZzySCFChest() { this.initialize.apply(this, arguments); } Window_ZzySCFChest.prototype = Object.create(Window_ZzySCFChestBase.prototype); Window_ZzySCFChest.prototype.constructor = Window_ZzySCFChest; Window_ZzySCFChest.prototype.initialize = function() { this.evId = 0; this.mapId = 0; this._list = []; Window_ZzySCFChestBase.prototype.initialize.call(this); this.refreshList(); this.refresh(); this.select(0); this.activate(); }; Window_ZzySCFChest.prototype.CallOpen = function() { Window_ZzySCFChestBase.prototype.CallOpen.call(this); this.Show(); this.open();//呼叫打开 } Window_ZzySCFChest.prototype.updateOpen = function() { if (this._opening) { this.openness += Zzy.SCF.TempSpeed1; if (this.isOpen()) { this._opening = false; } } }; Window_ZzySCFChest.prototype.updateClose = function() { if (this._closing) { this.openness -= Zzy.SCF.TempSpeed1; if (this.isClosed()) { this._closing = false; this.Hide();//执行隐藏 } } }; Window_ZzySCFChest.prototype.open = function() { this.openness = 0; this._opening = true; this._closing = false; }; Window_ZzySCFChest.prototype.close = function() { this.openness = 255; this._closing = true; this._opening = false; }; Window_ZzySCFChest.prototype.refreshList = function()//刷新List { this.evId = Zzy.SCF.TempCallInfo.evId; this.mapId = Zzy.SCF.TempCallInfo.mapId; //获取list this._list = $gameSystem.GetZzySCFStorage(this.mapId,this.evId); } Window_ZzySCFChest.prototype.maxItems = function() { //如果其中道具数不足时,将会填充为额外的空道具槽 var minItems = this.maxPageRows() * this.maxCols(); return this._list.length > minItems ? this._list.length : minItems; } Window_ZzySCFChest.prototype.maxCols = function() { return $gameSystem._ZzySCFCMaxCols; } Window_ZzySCFChest.prototype.drawItem = function(index) { var info = this._list[index]; if(info) { var rect = this.itemRectForText(index); var align = this.itemTextAlign(); this.resetTextColor(); this.changePaintOpacity(true); var item = undefined; this.resetTextColor(); switch(info.typeId) { case 1://金币 item = {}; item.iconIndex = $gameSystem._ZzySCFCoinIcon; item.name = this.currencyUnit(); item.isCoin = true; this.changeTextColor($gameSystem.GetZzySCFCoinColor()); break; case 2:item = $dataItems[info.itemId]; this.setZzySCFItemColor(item); break; case 3:item = $dataWeapons[info.itemId]; this.setZzySCFItemColor(item); break; case 4:item = $dataArmors[info.itemId]; this.setZzySCFItemColor(item); break; } if(item) { var numberWidth = 0; if(item.isCoin) { numberWidth = this.coinWidth(); } else { numberWidth = this.numberWidth(); } this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth); this.drawItemNumber(info, rect.x, rect.y, rect.width); } } } Window_ZzySCFChest.prototype.setZzySCFItemColor = function(item) { if(!item.zzySCF || !item.zzySCF.color) {this.resetTextColor();} else {this.changeTextColor(item.zzySCF.color);} } Window_ZzySCFChest.prototype.drawItemName = function(item, x, y, width) { width = width || 312; if (item) { var iconBoxWidth = Window_Base._iconWidth + 4; this.drawIcon(item.iconIndex, x + 2, y + 2); this.drawText(item.name, x + iconBoxWidth, y, width - iconBoxWidth); } }; Window_ZzySCFChest.prototype.drawItemNumber = function(info, x, y, width) { if (this.needsNumber()) { if(info.typeId === 1) { this.drawText('x', x, y, width - this.textWidth(Zzy.Param.SCFCountCoinWidth), 'right'); } else { this.drawText('x', x, y, width - this.textWidth(Zzy.Param.SCFCountNumWidth), 'right'); } this.drawText(String(info.value), x, y, width, 'right'); } }; Window_ZzySCFChest.prototype.needsNumber = function() { return true; }; Window_ZzySCFChest.prototype.numberWidth = function() { return this.textWidth(Zzy.Param.SCFCountNumWidth); }; Window_ZzySCFChest.prototype.coinWidth = function() { return this.textWidth(Zzy.Param.SCFCountCoinWidth); } Window_ZzySCFChest.prototype.currencyUnit = function() { return TextManager.currencyUnit; }; Window_ZzySCFChest.prototype.itemTextAlign = function() { return 'left'; }; Window_ZzySCFChest.prototype.drawAllItems = function() { var topIndex = this.topIndex(); for (var i = 0; i < this.maxPageItems(); i++) { var index = topIndex + i; if (index < this.maxItems()) { this.drawItem(index); } } }; Window_ZzySCFChest.prototype.OnProcessOk = function() { //双击取出道具 var index = this.index(); var info = this._list[index]; if(info) { this.GetListInfo(index); var value = info.value;//数量 var id = info.itemId; if($gameSystem._ZzySCFIsCAutoLine) { //向前遍历 var tList = $gameSystem.GetZzySCFStorage(this.mapId,this.evId); var len = tList.length; for(var i=index;i= 0) { if (hitIndex === this.index()) { if (triggered && this.isTouchOkEnabled()) { this.processOk(); } } else if (this.isCursorMovable()) { this.select(hitIndex); } } else if (this._stayCount >= 10) { if (y < this.padding) { this.cursorUp(); } else if (y >= this.height - this.padding) { this.cursorDown(); } } if (this.index() !== lastIndex) { this.playSelectSound(); } }; //================================================================ //Window_ZzySCFHelp //================================================================ function Window_ZzySCFHelp() { this.initialize.apply(this, arguments); } Window_ZzySCFHelp.prototype = Object.create(Window_Help.prototype); Window_ZzySCFHelp.prototype.constructor = Window_ZzySCFHelp; Window_ZzySCFHelp.prototype.initialize = function() { Window_Help.prototype.initialize.call(this); this.movePos = 0; this._ChestWindow = undefined; this.isRefresh = true; this.srcIndex = undefined; }; Window_ZzySCFHelp.prototype.CallOpen = function() { //位移过程 this.Show(); this.open();//呼叫打开 } Window_ZzySCFHelp.prototype.BindChestWindow = function(pointer) { this._ChestWindow = pointer; this.srcIndex = this._ChestWindow._index; } Window_ZzySCFHelp.prototype.updateOpen = function() { if (this._opening) { this.movePos += Zzy.SCF.TempSpeed2; if(this.movePos >= 0) { this.movePos = 0; this._opening = false; } this.y = this.movePos; } }; Window_ZzySCFHelp.prototype.updateClose = function() { if (this._closing) { this.movePos -= Zzy.SCF.TempSpeed2; if(this.movePos <= -this.height) { this.movePos = -this.height; this._closing = false; this.Hide();//执行隐藏 } this.y = this.movePos; } }; Window_ZzySCFHelp.prototype.open = function() { this.movePos = -this.height; this._opening = true; this._closing = false; }; Window_ZzySCFHelp.prototype.close = function() { this.movePos = 0; this._closing = true; this._opening = false; }; Window_ZzySCFHelp.prototype.Hide = function() { this.visible = false; this.opacity = 0; } Window_ZzySCFHelp.prototype.Show = function() { this.visible = true; this.opacity = 255; } Window_ZzySCFHelp.prototype.update = function() { if(this._ChestWindow._index !== this.srcIndex) { this.srcIndex = this._ChestWindow._index; this.isRefresh = true; } if(this.isRefresh) { this.setInfo(this._ChestWindow._list[this.srcIndex]); this.isRefresh = false; } } Window_ZzySCFHelp.prototype.setInfo = function(info) { if(!info) {this.setText('');} else { var item = undefined; switch(info.typeId) { case 2:item = $dataItems[info.itemId];break; case 3:item = $dataWeapons[info.itemId];break; case 4:item = $dataArmors[info.itemId];break; default: } this.setText(item ? item.description : ''); } } //================================================================ //Window_ZzySCFSelect //================================================================ function Window_ZzySCFSelect() { this.initialize.apply(this, arguments); } Window_ZzySCFSelect.prototype = Object.create(Window_Selectable.prototype); Window_ZzySCFSelect.prototype.constructor = Window_ZzySCFSelect; Window_ZzySCFSelect.prototype.initialize = function() { var height = this.GetHeight(); this._list = [];//存放数组 Window_Selectable.prototype.initialize.call(this,0,0,Graphics.boxWidth,height); this.startY = 0; this.movePos = 0; this.setList(); this.refresh(); this.activate();//设置为活跃 }; Window_ZzySCFSelect.prototype.GetHeight = function() { return this.getCount() ? this.fittingHeight(1) : 0; } Window_ZzySCFSelect.prototype.CallOpen = function() { //位移过程 this.Show(); this.open();//呼叫打开 } Window_ZzySCFSelect.prototype.updateOpen = function() { if (this._opening) { this.movePos -= Zzy.SCF.TempSpeed3; if(this.movePos <= 0) { this.movePos = 0; this._opening = false; this.refresh(); } this.y = this.startY+this.movePos; } }; Window_ZzySCFSelect.prototype.updateClose = function() { if (this._closing) { this.movePos += Zzy.SCF.TempSpeed3; if(this.movePos >= this.height) { this.movePos = this.height; this._closing = false; this.Hide();//执行隐藏 } this.y = this.startY+this.movePos; } }; Window_ZzySCFSelect.prototype.open = function() { this.movePos = this.height; this._opening = true; this._closing = false; }; Window_ZzySCFSelect.prototype.close = function() { this.movePos = 0; this._closing = true; this._opening = false; }; Window_ZzySCFSelect.prototype.Hide = function() { this.visible = false; this.opacity = 0; } Window_ZzySCFSelect.prototype.Show = function() { this.visible = true; this.opacity = 255; } Window_ZzySCFSelect.prototype.maxCols = function() { return this.getCount(); } Window_ZzySCFSelect.prototype.getCount = function()//指令数值 { var ev = $gameMap.event(Zzy.SCF.TempCallInfo.evId); var count = 0; count += $gameSystem.GetZzySCFIsCAllTake(ev) ? 1 : 0; count += $gameSystem.GetZzySCFIsCClose(ev) ? 1 : 0; return count; } Window_ZzySCFSelect.prototype.setList = function()//设置列表 { this._list = []; var ev = $gameMap.event(Zzy.SCF.TempCallInfo.evId); if($gameSystem.GetZzySCFIsCAllTake(ev)) { var info = {}; info.text = $gameSystem.GetZzySCFCAllTakeText(ev);//显示文本 info.commandId = 1; this._list.push(info); } if($gameSystem.GetZzySCFIsCClose(ev)) { var info = {}; info.text = $gameSystem.GetZzySCFCCloseText(ev); info.commandId = 2; this._list.push(info); } } Window_ZzySCFSelect.prototype.drawItem = function(index) { var rect = this.itemRectForText(index); var align = this.itemTextAlign(); this.resetTextColor(); this.changePaintOpacity(true); this.drawText(this._list[index].text, rect.x, rect.y, rect.width, align); } Window_ZzySCFSelect.prototype.itemTextAlign = function() { return 'center'; }; Window_ZzySCFSelect.prototype.drawAllItems = function() { var topIndex = this.topIndex(); for (var i = 0; i < this.maxPageItems(); i++) { var index = topIndex + i; if (index < this.maxItems()) { this.drawItem(index); } } }; Window_ZzySCFSelect.prototype.maxItems = function() { return this.getCount(); }; Window_ZzySCFSelect.prototype.processCursorMove = function() { if (this.isCursorMovable()) { var lastIndex = this.index(); if (this.index() !== lastIndex) { SoundManager.playCursor(); } } }; Window_ZzySCFSelect.prototype.processHandling = function() //跳过键盘响应 { if (this.isOpenAndActive()) { } }; Window_ZzySCFSelect.prototype.processOk = function() { if (this.itemCan()) { this.playOkSound(); this.updateInputData(); this.callOkHandler(); } else { this.playBuzzerSound(); } }; Window_ZzySCFSelect.prototype.playCancelSound = function() { SoundManager.playCancel(); } Window_ZzySCFSelect.prototype.playOkSound = function() { var info = this._list[this._index]; if(!info) { SoundManager.playOk(); return; } switch(info.commandId) { case 1: if(!Zzy.SCF.PlaySE(3)) {SoundManager.playOk();} case 2: if(!Zzy.SCF.PlaySE(4)) {SoundManager.playOk();} } }; Window_ZzySCFSelect.prototype.playBuzzerSound = function() { SoundManager.playBuzzer(); }; Window_ZzySCFSelect.prototype.itemCan = function() { return !!this._list[this.index()]; } Window_ZzySCFSelect.prototype.OnProcessOk = function() { var index = this.index(); var info = this._list[index]; if(info) { switch(info.commandId) { case 1://全部拿走 this.AllTakeProcess(); break; case 2://关闭宝箱 this.PopScene();//退出 break; } } } Window_ZzySCFSelect.prototype.PopScene = function() { if(SceneManager._scene instanceof Scene_ZzySCFChest) { SceneManager._scene.popScene();//退出 } } Window_ZzySCFSelect.prototype.AllTakeProcess = function()//全部拿取 { if(SceneManager._scene instanceof Scene_ZzySCFChest) { SceneManager._scene.AllTakeChest();// } } //================================================================ //Window_ZzySCFYuanShen //================================================================ //原神模式窗口 function Window_ZzySCFYuanShen() { this.initialize.apply(this, arguments); } Window_ZzySCFYuanShen.prototype = Object.create(Window_ZzySCFChestBase.prototype); Window_ZzySCFYuanShen.prototype.constructor = Window_ZzySCFYuanShen; Window_ZzySCFYuanShen.prototype.initialize = function() { var w = this.getWidth(); var h = this.getHeight(); Window_ZzySCFChestBase.prototype.initialize.call(this,-w,-h,w,h); //缓入缓出 this.fadeIn = false; this.fadeOut = false; this.froceClose = false;//强制关闭 this.closeEvId = 0;//强制关闭时的ID this.emptyClear = false;//空白检测,优化效率 this.CfadeFrame = 0; this._list = []; this.InitData(); //设置选择点,开启活跃 this.select(0); this.activate(); this.visible = false; }; Window_ZzySCFYuanShen.prototype.InitData = function() { //设置透明度和出现 this.opacity = $gameSystem._ZzySCFYWindowOp; this.visible = true; this.froceClose = false; } Window_ZzySCFYuanShen.prototype.getWidth = function() { return $gameSystem._ZzySCFYWindowWidth; } Window_ZzySCFYuanShen.prototype.getHeight = function() { var num = $gameSystem._ZzySCFYMaxList; num = num ? num : 1; return this.fittingHeight(num); } Window_ZzySCFYuanShen.prototype.update = function() { if($gameSystem.GetZzySCFShowMode() !== 2)return; Window_ZzySCFChestBase.prototype.update.call(this); this.updateAutoSelect();//刷新自动选择目标 this.updatePosition();//刷新窗口位置 this.updateDyn();//刷新动态 } Window_ZzySCFYuanShen.prototype.updateAutoSelect = function() { if(!$gameSystem._ZzySCFYIsAutoOpen)return; if(this.visible)return; var mapId = $gameMap.mapId(); var aList = $gameSystem.GetZzySCFYunChestFlag(mapId); for(var i=0;i 0) {this.CfadeFrame--;} else { this.CfadeFrame = 0; this.visible = false; //关闭后此处需要进行空白检测 if(this.emptyClear) { this.emptyClear = false; var isEmpty = true; //进行检测 var info = $gameSystem.GetZzySCFStorage(Zzy.SCF.TempCallInfo.mapId,Zzy.SCF.TempCallInfo.evId); for(var i=0;i Graphics.boxWidth) {this.x -= (tw-Graphics.boxWidth);} else if(this.x < 0) {this.x = 0;} if(th > Graphics.boxHeight) {this.y -= (th-Graphics.boxHeight);} else if(this.y < 0) {this.y = 0;} } } } Window_ZzySCFYuanShen.prototype.CheckChestRange = function(info)//检测范围 { var tempInfo = undefined; if(!info) {tempInfo = Zzy.SCF.TempCallInfo;} else {tempInfo = info;} if(!tempInfo)return false; if($gameMap.mapId() !== tempInfo.mapId)return false; var ev = $gameMap.event(tempInfo.evId); if(!ev)return false; if(Math.abs(ev.x - $gamePlayer.x) <= $gameSystem._ZzySCFYTakeRange && Math.abs(ev.y - $gamePlayer.y) <= $gameSystem._ZzySCFYTakeRange) { //判断宝箱内道具成品数 var storage = $gameSystem.GetZzySCFStorage(tempInfo.mapId,tempInfo.evId); if(!storage || !storage.length)return false; return true; } return false; } Window_ZzySCFYuanShen.prototype.itemTextAlign = function() { return 'center'; }; Window_ZzySCFYuanShen.prototype.drawAllItems = function() { var topIndex = this.topIndex(); for (var i = 0; i < this.maxPageItems(); i++) { var index = topIndex + i; if (index < this.maxItems()) { this.drawItem(index); } } }; Window_ZzySCFYuanShen.prototype.drawItem = function(index) { var info = this._list[index]; if(info) { var rect = this.itemRectForText(index); var align = this.itemTextAlign(); this.changePaintOpacity(true); var item = undefined; this.resetTextColor(); switch(info.typeId) { case 1://金币 item = {}; item.iconIndex = $gameSystem._ZzySCFCoinIcon; item.name = this.currencyUnit(); item.isCoin = true; this.changeTextColor($gameSystem.GetZzySCFCoinColor()); break; case 2:item = $dataItems[info.itemId]; this.setZzySCFItemColor(item); break; case 3:item = $dataWeapons[info.itemId]; this.setZzySCFItemColor(item); break; case 4:item = $dataArmors[info.itemId]; this.setZzySCFItemColor(item); break; } if(item) { //透明度 this.drawItemBk(rect,index);//绘制底色框 var numberWidth = 0; if(item.isCoin) { numberWidth = this.coinWidth(); } else { numberWidth = this.numberWidth(); } this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth); this.drawItemNumber(info, rect.x, rect.y, rect.width); } } } Window_ZzySCFYuanShen.prototype.setZzySCFItemColor = function(item) { if(!item.zzySCF || !item.zzySCF.color) {this.resetTextColor();} else {this.changeTextColor(item.zzySCF.color);} } Window_ZzySCFYuanShen.prototype.drawItemName = function(item, x, y, width) { width = width || 312; if (item) { var iconBoxWidth = Window_Base._iconWidth + 4; this.drawIcon(item.iconIndex, x + 2, y + 2); this.drawText(item.name, x + iconBoxWidth, y, width - iconBoxWidth); } }; Window_ZzySCFYuanShen.prototype.drawItemBk = function(rect,index) { var dis = $gameSystem._ZzySCFYDistance; var nRect = {x:rect.x+dis,y:rect.y+dis,width:rect.width-dis*2,height:rect.height-dis*2}; var Rect1 = {}; var Rect2 = {}; var c1 = $gameSystem._ZzySCFYColor1; var c2 = $gameSystem._ZzySCFYColor2; var isVer = $gameSystem._ZzySCFYIsHorShow ? false : true; if(isVer) { Rect1 = {x:nRect.x,y:nRect.y,width:nRect.width,height:nRect.height/2}; Rect2 = {x:nRect.x,y:nRect.y+nRect.height/2,width:nRect.width,height:nRect.height/2}; } else { Rect1 = {x:nRect.x,y:nRect.y,width:nRect.width/2,height:nRect.height}; Rect2 = {x:nRect.x+nRect.width/2,y:nRect.y,width:nRect.width/2,height:nRect.height}; } this.contents.gradientFillRect(Rect1.x,Rect1.y,Rect1.width,Rect1.height,c2,c1,isVer); this.contents.gradientFillRect(Rect2.x,Rect2.y,Rect2.width,Rect2.height,c1,c2,isVer); } Window_ZzySCFYuanShen.prototype.maxItems = function() //最大数值 { return this._list ? this._list.length : 0; }; Window_ZzySCFYuanShen.prototype.reClick = function() { this.froceClose = false; this.select(0); } Window_ZzySCFYuanShen.prototype.refreshList = function()//刷新List { this.evId = Zzy.SCF.TempCallInfo.evId; this.mapId = Zzy.SCF.TempCallInfo.mapId; //获取list this._list = $gameSystem.GetZzySCFStorage(this.mapId,this.evId); } Window_ZzySCFYuanShen.prototype.drawItemNumber = function(info, x, y, width) { if (this.needsNumber()) { this.drawText(String(info.value), x, y, width, 'right'); } }; Window_ZzySCFYuanShen.prototype.needsNumber = function() { return true; }; Window_ZzySCFYuanShen.prototype.numberWidth = function() { return this.textWidth(Zzy.Param.SCFCountNumWidth); }; Window_ZzySCFYuanShen.prototype.coinWidth = function() { return this.textWidth(Zzy.Param.SCFCountCoinWidth); } Window_ZzySCFYuanShen.prototype.currencyUnit = function() { return TextManager.currencyUnit; }; Window_ZzySCFYuanShen.prototype.processCursorMove = function() { if (this.isCursorMovable()) { var lastIndex = this.index(); if (this.index() !== lastIndex) { this.playSelectSound(); } } }; Window_ZzySCFYuanShen.prototype.onTouch = function(triggered) { var lastIndex = this.index(); var x = this.canvasToLocalX(TouchInput.x); var y = this.canvasToLocalY(TouchInput.y); var hitIndex = this.hitTest(x, y); if (hitIndex >= 0) { if (hitIndex === this.index()) { if (triggered && this.isTouchOkEnabled()) { this.processOk(); } } else if (this.isCursorMovable()) { this.select(hitIndex); } } else if (this._stayCount >= 10) { if (y < this.padding) { this.cursorUp(); } else if (y >= this.height - this.padding) { this.cursorDown(); } } if (this.index() !== lastIndex) { this.playSelectSound(); } }; Window_ZzySCFYuanShen.prototype.playSelectSound = function() { if(!Zzy.SCF.PlaySE(5)) {SoundManager.playCursor();} } Window_ZzySCFYuanShen.prototype.processTouch = function() { if(!this.visible)return; if (this.isOpenAndActive()) { if (TouchInput.isTriggered() && this.isTouchedInsideFrame()) { this._touching = true; this.onTouch(true); } else if (TouchInput.isCancelled()) { if (this.isCancelEnabled()) { this.processCancel(); } } if (this._touching) { if (TouchInput.isPressed()) { this.onTouch(false); } else { this._touching = false; } } } else { this._touching = false; } }; Window_ZzySCFYuanShen.prototype.itemCan = function() { return !!this._list[this.index()]; } Window_ZzySCFYuanShen.prototype.processOk = function() { if(!this.visible)return; if (this.itemCan()) { this.playOkSound(); this.updateInputData(); this.callOkHandler(); } else { this.playBuzzerSound(); } }; Window_ZzySCFYuanShen.prototype.processCancel = function() { this.playCancelSound(); this.updateInputData(); this.callCancelHandler(); }; Window_ZzySCFYuanShen.prototype.playCancelSound = function() { SoundManager.playCancel(); } Window_ZzySCFYuanShen.prototype.playOkSound = function() { if(!Zzy.SCF.PlaySE(1)) {SoundManager.playOk();} }; Window_ZzySCFYuanShen.prototype.playBuzzerSound = function() { if(!Zzy.SCF.PlaySE(2)) {SoundManager.playBuzzer();} }; Window_ZzySCFYuanShen.prototype.OnProcessOk = function() { //双击取出道具 var index = this.index(); var info = this._list[index]; if(info) { this.GetListInfo(index); var value = info.value;//数量 var id = info.itemId; if($gameSystem._ZzySCFIsCAutoLine) { //向前遍历 var tList = $gameSystem.GetZzySCFStorage(this.mapId,this.evId); var len = tList.length; for(var i=index;i/i))//显示颜色 { var color = String(RegExp.$1); obj.zzySCF['color'] = color; } } } } //================================================================ //Game_Interpreter //================================================================ Zzy.SCF.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { Zzy.SCF.Game_Interpreter_pluginCommand.call(this,command,args); if(command === 'ZzySCF') { this.ZzySCFCommand(args); } } Game_Interpreter.prototype.ZzySCFCommand = function(args) { var command = String(args[0]); switch(command) { case 'OverlapMode': var mode = Zzy.SCF.OverlapModeToID(String(args[1])); Zzy.SCF.OverlapMode(mode); //$gameSystem._ZzySCFOverlapMode = mode; break; case 'ShowMode': var mode = Zzy.SCF.ShowModeToID(String(args[1])); Zzy.SCF.ShowMode(mode); //$gameSystem._ZzySCFShowMode = mode; break; case 'IsFilterText': var enable = eval(String(args[1])); Zzy.SCF.IsFilterText(enable); //$gameSystem._ZzySCFIsFilterText = enable; break; case 'CoinIcon': var iconIndex = parseInt(args[1]); Zzy.SCF.CoinIcon(iconIndex); //$gameSystem._ZzySCFCoinIcon = iconIndex; break; case 'CMaxCols': var cols = parseInt(args[1]); Zzy.SCF.CMaxCols(cols); //$gameSystem._ZzySCFCMaxCols = cols; break; case 'IsCAllTake': var enable = eval(String(args[1])); Zzy.SCF.IsCAllTake(enable); //$gameSystem._ZzySCFIsCAllTake = enable; break; case 'CAllTakeText': var tText = String(args[1]); Zzy.SCF.CAllTakeText(tText); //$gameSystem._ZzySCFCAllTakeText = tText; break; case 'IsCClose': var enable = eval(String(args[1])); Zzy.SCF.IsCClose(enable); //$gameSystem._ZzySCFIsCClose = enable; break; case 'CCloseText': var tText = String(args[1]); Zzy.SCF.CCloseText(tText); //$gameSystem._ZzySCFCCloseText = tText; break; case 'IsCAutoLine': var enable = eval(String(args[1])); Zzy.SCF.IsCAutoLine(enable); //$gameSystem._ZzySCFIsCAutoLine = enable; break; case 'YMaxCols': var cols = parseInt(args[1]); Zzy.SCF.YMaxCols(cols); //$gameSystem._ZzySCFYMaxCols = cols; break; case 'YMaxList': var list = parseInt(args[1]); Zzy.SCF.YMaxList(list); //$gameSystem._ZzySCFYMaxList = list; break; case 'YWindowWidth': var width = parseInt(args[1]); Zzy.SCF.YWindowWidth(width); //$gameSystem._ZzySCFYWindowWidth = width; break; case 'YWindowOp': var op = parseInt(args[1]); Zzy.SCF.YWindowOp(op); //$gameSystem._ZzySCFYWindowOp = op; break; case 'YTakeRange': var range = parseInt(args[1]); Zzy.SCF.YTakeRange(range); //$gameSystem._ZzySCFYTakeRange = range; break; case 'YColor1': var color = String(args[1]); Zzy.SCF.YColor1(color); //$gameSystem._ZzySCFYColor1 = color; break; case 'YColor2': var color = String(args[1]); Zzy.SCF.YColor2(color); //$gameSystem._ZzySCFYColor2 = color; break; case 'YOffsetX': var ofx = Number(args[1]); Zzy.SCF.YOffsetX(ofx); //$gameSystem._ZzySCFYOffsetX = ofx; break; case 'YOffsetY': var ofy = Number(args[1]); Zzy.SCF.YOffsetY(ofy); //$gameSystem._ZzySCFYOffsetY = ofy; break; case 'YFadeFrame': var fFrame = parseInt(args[1]); Zzy.SCF.YFadeFrame(fFrame); //$gameSystem._ZzySCFYFadeFrame = fFrame; break; case 'YDistance': var dis = parseInt(args[1]); Zzy.SCF.YDistance(dis); //$gameSystem._ZzySCFYDistance = dis; break; case 'YIsHorShow': var enable = eval(String(args[1])); Zzy.SCF.YIsHorShow(enable); //$gameSystem._ZzySCFYIsHorShow = enable; break; case 'YIsAutoOpen': var enable = eval(String(args[1])); Zzy.SCF.YIsAutoOpen(enable); //$gameSystem._ZzySCFYIsAutoOpen = enable; break; case 'YIsLimitWindow': var enable = eval(String(args[1])); Zzy.SCF.YIsLimitWindow(enable); //$gameSystem._ZzySCFYIsLimitWindow = enable; break; case 'CoinColor': var color = String(args[1]); Zzy.SCF.CoinColor(color); //$gameSystem._ZzySCFCoinColor = color; break; } } Zzy.SCF.Game_Interpreter_update = Game_Interpreter.prototype.update; Game_Interpreter.prototype.update = function() { if(this.eventId()) { var ev = $gameMap.event(this.eventId()); if(ev && ev.ZzySCFIsChest())//代表是箱子 { this._ZzySCFIsChestMode = true;//开启箱子模式 this._ZzySCFWaitCall = true; } } Zzy.SCF.Game_Interpreter_update.call(this); var isFirst = false; if(this._ZzySCFWaitCall && !this.isRunning())//做呼叫准备 { this._ZzySCFWaitCall = false; $gameSystem.ZzySCFSetWaitCall(this.ZzySCFCallStorageInfo()); isFirst = true; } this._ZzySCFIsChestMode = false;//关闭宝箱收集模式 if(!isFirst) { if($gameSystem._ZzySCFWaitOfChest && !this.isRunning()) { $gameSystem.ZzySCFSetWaitCall($gameSystem._ZzySCFWaitOfChest); $gameSystem._ZzySCFWaitOfChest = undefined; } } }; Game_Interpreter.prototype.ZzySCFCallStorageInfo = function()//制作呼叫仓库数据信息 { var info = {}; info.evId = this.eventId(); info.mapId = $gameMap.mapId(); return info; } //呼叫金币函数 Zzy.SCF.Game_Interpreter_command125 = Game_Interpreter.prototype.command125; Game_Interpreter.prototype.command125 = function() { if(this._ZzySCFIsChestMode) { var value = this.operateValue(this._params[0], this._params[1], this._params[2]); if(value >= 0) { $gameSystem.ZzySCFRecordInfo(this.eventId(),value,0,1); return true; } } return Zzy.SCF.Game_Interpreter_command125.call(this); }; //呼叫道具函数 Zzy.SCF.Game_Interpreter_command126 = Game_Interpreter.prototype.command126; Game_Interpreter.prototype.command126 = function() { if(this._ZzySCFIsChestMode) { var value = this.operateValue(this._params[1], this._params[2], this._params[3]); if(value >= 0) { $gameSystem.ZzySCFRecordInfo(this.eventId(),value,this._params[0],2); return true; } } return Zzy.SCF.Game_Interpreter_command126.call(this); }; //呼叫武器函数 Zzy.SCF.Game_Interpreter_command127 = Game_Interpreter.prototype.command127; Game_Interpreter.prototype.command127 = function() { if(this._ZzySCFIsChestMode) { var value = this.operateValue(this._params[1], this._params[2], this._params[3]); if(value >= 0) { $gameSystem.ZzySCFRecordInfo(this.eventId(),value,this._params[0],3); return true; } } return Zzy.SCF.Game_Interpreter_command127.call(this); }; //呼叫护甲函数 Zzy.SCF.Game_Interpreter_command128 = Game_Interpreter.prototype.command128; Game_Interpreter.prototype.command128 = function() { if(this._ZzySCFIsChestMode) { var value = this.operateValue(this._params[1], this._params[2], this._params[3]); if(value >= 0) { $gameSystem.ZzySCFRecordInfo(this.eventId(),value,this._params[0],4); return true; } } return Zzy.SCF.Game_Interpreter_command128.call(this); }; //呼叫文本函数 Zzy.SCF.Game_Interpreter_command101 = Game_Interpreter.prototype.command101; Game_Interpreter.prototype.command101 = function() { if($gameSystem._ZzySCFIsFilterText && this._ZzySCFIsChestMode)//是否忽略脚本 { return true; } return Zzy.SCF.Game_Interpreter_command101.call(this); } //============================================================================================ //Game_Event //============================================================================================ Zzy.SCF.Game_Event_setupPage = Game_Event.prototype.setupPage; Game_Event.prototype.setupPage = function() //加载事件信息 { Zzy.SCF.Game_Event_setupPage.call(this); this.ZzySCFInitData();//调用初始化数据 } Game_Event.prototype.ZzySCFInitData = function() { if (!this.page()) return; var list = this.list(); var len = list.length; this.zzySCF = {}; for (var i = 0; i < len; ++i) { var ev = list[i]; if ([108, 408].contains(ev.code)) { if(ev.parameters[0].match(//i))//设置为箱子 { this.zzySCF.IsChest = true; } } } } Zzy.SCF.Game_Event_initialize = Game_Event.prototype.initialize; Game_Event.prototype.initialize = function(mapId, eventId) { Zzy.SCF.Game_Event_initialize.call(this,mapId,eventId); this._ZzySCFNotRepeat = 0; }; Zzy.SCF.Game_Event_start = Game_Event.prototype.start; Game_Event.prototype.start = function()//玩家产生触碰时 { Zzy.SCF.Game_Event_start.call(this); if($gameSystem.IsZzySCFStorage($gameMap.mapId(),this.eventId()) && this._ZzySCFNotRepeat <= 0) { $gameSystem._ZzySCFWaitOfChest = {mapId:$gameMap.mapId(),evId:this.eventId()}; this._ZzySCFNotRepeat = Zzy.SCF.TempNotRepeatFrame;//忽略三帧 } } Zzy.SCF.Game_Event_update = Game_Event.prototype.update; Game_Event.prototype.update = function() { Zzy.SCF.Game_Event_update.call(this); this.updateZzySCFNotRepeat(); } Game_Event.prototype.updateZzySCFNotRepeat = function() { if(!this._ZzySCFNotRepeat)return; if(this._ZzySCFNotRepeat > 0){this._ZzySCFNotRepeat--;} else{this._ZzySCFNotRepeat = 0;} } Game_Event.prototype.MakeZzySCFInfo = function() { var info = {}; info.mapId = $gameMap.mapId(); info.evId = this.eventId(); return info; } Game_Event.prototype.ZzySCFIsChest = function() { if(!this.zzySCF || !this.zzySCF.IsChest)return false; return true; } Game_Event.prototype.ZzySCFExeChestCommand = function() { } //============================================================================================ //Game_Interpreter //============================================================================================ Zzy.SCF.Game_Interpreter_initialize = Game_Interpreter.prototype.initialize; Game_Interpreter.prototype.initialize = function(depth) { Zzy.SCF.Game_Interpreter_initialize.call(this,depth); this._ZzySCFEventId = 0;//使用事件ID }; //------------------------------Zzy.SCF.Function------------------------------- Zzy.SCF.OverlapModeToID = function(str) { switch(str) { case 'Single':return 1; case 'Overlap':return 2; case 'Event':return 3; } console.log('Error:来自LiuYue_SeniorChest,检查叠加模式填写是否正确');return; return 1; } Zzy.SCF.ShowModeToID = function(str) { switch(str) { case 'Chest':return 1; case 'YuanShen':return 2; } console.log('Error:来自LiuYue_SeniorChest,检查显示模式填写是否正确');return; return 1; } Zzy.SCF.PlaySE = function(soundID)//播放声音 { var se = Zzy.Param.SCFAllSE[soundID]; if(se && se.name) { AudioManager.playSe(se); return true; } return false; } Zzy.SCF.OverlapMode = function(mode) { $gameSystem._ZzySCFOverlapMode = mode; } Zzy.SCF.ShowMode = function(mode) { $gameSystem._ZzySCFShowMode = mode; } Zzy.SCF.IsFilterText = function(enable) { $gameSystem._ZzySCFIsFilterText = enable; } Zzy.SCF.CoinIcon = function(iconIndex) { $gameSystem._ZzySCFCoinIcon = iconIndex; } Zzy.SCF.CMaxCols = function(cols) { $gameSystem._ZzySCFCMaxCols = cols; } Zzy.SCF.IsCAllTake = function(enable) { $gameSystem._ZzySCFIsCAllTake = enable; } Zzy.SCF.CAllTakeText = function(tText) { $gameSystem._ZzySCFCAllTakeText = tText; } Zzy.SCF.IsCClose = function(enable) { $gameSystem._ZzySCFIsCClose = enable; } Zzy.SCF.CCloseText = function(tText) { $gameSystem._ZzySCFCCloseText = tText; } Zzy.SCF.IsCAutoLine = function(enable) { $gameSystem._ZzySCFIsCAutoLine = enable; } Zzy.SCF.YMaxCols = function(cols) { $gameSystem._ZzySCFYMaxCols = cols; } Zzy.SCF.YMaxList = function(list) { $gameSystem._ZzySCFYMaxList = list; } Zzy.SCF.YWindowWidth = function(width) { $gameSystem._ZzySCFYWindowWidth = width; } Zzy.SCF.YWindowOp = function(op) { $gameSystem._ZzySCFYWindowOp = op; } Zzy.SCF.YTakeRange = function(range) { $gameSystem._ZzySCFYTakeRange = range; } Zzy.SCF.YColor1 = function(color) { $gameSystem._ZzySCFYColor1 = color; } Zzy.SCF.YColor2 = function(color) { $gameSystem._ZzySCFYColor2 = color; } Zzy.SCF.YOffsetX = function(ofx) { $gameSystem._ZzySCFYOffsetX = ofx; } Zzy.SCF.YOffsetY = function(ofy) { $gameSystem._ZzySCFYOffsetY = ofy; } Zzy.SCF.YFadeFrame = function(fFrame) { $gameSystem._ZzySCFYFadeFrame = fFrame; } Zzy.SCF.YDistance = function(dis) { $gameSystem._ZzySCFYDistance = dis; } Zzy.SCF.YIsHorShow = function(enable) { $gameSystem._ZzySCFYIsHorShow = enable; } Zzy.SCF.YIsAutoOpen = function(enable) { $gameSystem._ZzySCFYIsAutoOpen = enable; } Zzy.SCF.YIsLimitWindow = function(enable) { $gameSystem._ZzySCFYIsLimitWindow = enable; } Zzy.SCF.CoinColor = function(color) { $gameSystem._ZzySCFCoinColor = color; }