You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ycrpg/js/plugins/LiuYue_GainItemTips.js

1817 lines
43 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*:
* @plugindesc v1.05 LiuYue_GainItemTips 获取道具显示
* @author 流逝的岁月
*
* @help
* ============================================================================
* 介绍
* ============================================================================ *
*
*
*
* 这款插件提供了在游戏中获取或丢失新的道具会在地图界面显示
*
*
*---------------------------------------------------------
*
*使用条例:本插件完全免费,随意魔改
*
*---------------------------------------------------------
*
*
*
* 如果装有YEP_ItemCore YEP独立物品核心 这款插件时,请将本插件位于这款插件之下,已获取更好的兼容性
*
*
*
*以下是一些插件用到的脚本函数
*---------------------Script--------------------
*
* Zzy.GIT.IsEnable(enable) //这会 开启/禁用 插件的功能
* Zzy.GIT.ClearList() //清理所有的消息表
* Zzy.GIT.SurplusCount() //获取未显示的剩余消息数量
* Zzy.GIT.GainPromptOfID(ID,type,amount) //这将会主动发送一条获取物品的消息,不过并不会实际获取物品
* -ID:替换为对应物品的ID值,如果是金币,则此参数可以输任意值
* -type:可选字符串item/weapon/armor/icon 分别代表物品/武器/防具/金币
* -amount:代表输入的数量
*
* 例: Zzy.GIT.GainPromptOfID(3,'weapon',1) //将会显示一把ID为3的武器提示文本
* 例: Zzy.GIT.GainPromptOfID(0,'coin',1000) //将会显示获得1000金币的提示文本
*
*
*以下是一些插件指令的信息
*---------------------Plugin Command--------------------
*
* ZzyGIT IsEnable x(true/false) //这会 开启/禁用 插件的功能
*
*
*
*----------------------------------------------------------
*
*
*以下是一些插件用到的备注信息
*
*---------------------Data Note--------------------
* 请将此备注信息写在 数据库 - 物品/武器/防具 下
*
* <ZzyGIT TextColor: x> //这会使得获得的道具具备颜色信息,x可替换为颜色代码 范围#000000 ~ #ffffff
*
*
* 例:<ZzyGIT TextColor: #ffffff> 获取这个道具时,其名称会显示为白色
* <ZzyGIT TextColor: #ff6666> 获取这个道具时,其名称会显示为淡红色
*
*
* <ZzyGIT SE: x1 x2 x3 x4> //这会使获取到的道具播放自定义的音效,优先级大于插件参数中的设置
* x1:填写audio/se 文件夹中的音效名称,不包含后缀名,必填参数
* x2:填写音量,范围0~100之间,这是一个选填参数,不填写时值为100
* x3:填写音调,范围0~100之间,这是一个选填参数,不填写时值为0
* x4:填写声道,范围0~100之间,这是一个选填参数,不填写时值为0
*
* 例:<ZzyGIT se: Attack1> 当显示获取这个道具时,优先播放Attack1音效,而不是插件参数中的声音配置
*
*
* <ZzyGIT SERank: x> //这会设置SE的优先级代表如果同时显示多个特殊SE道具时,将会播放优先级最高的SE声音,x需要填写一个正整数,所有SE默认优先级为0
*
* 例:<ZzyGIT SERank: 3> 设置这个SE的优先级为3级,当同时显示的道具中优先级全部低于3时,将会播放本道具设置的SE声音
*
*
* <ZzyGIT ListRank: x> //设置排列的优先级,代表再同时显示的道具信息界面中,优先级越高的道具信息将会越向上显示,x可以填写一个正负整数,默认优先级为0
*
*
*
*----------------------------------------------------------
*
*
* 我叫坂本v1.05 修复进入商店界面后,购买物品也会出现提示
* 我叫坂本v1.04 添加文本宽度自适应功能
* 我叫坂本v1.03 修改结构代码,减少冲突,修复一个字体过大导致图标文本重叠的bug
* 我叫坂本v1.02 修复单独插件测试报错,修复拆卸装备出现信息的逻辑问题,添加排序显示优先级
* 我叫坂本v1.01 增加了与YEP_ItemCore物品核心的兼容问题,修复了图标重叠问题,添加了金币显示以及图标相关功能
* 我叫坂本v1.00 完成插件功能
*
*
*
*----------------------------------------------------------
*
*
*
* @param ---插件---
* @default
*
*
*
* @param IsPluginEnable
* @text 插件是否启用
* @parent ---插件---
* @type boolean
* @on YES
* @off NO
* @desc 这会使获取道具出现窗口功能是否有效
* YES - true NO - false
* @default true
*
*
*
* @param ---功能---
* @default
*
* @param IsAdaptionWidth
* @text 提示自适应宽度
* @parent ---功能---
* @type boolean
* @on YES
* @off NO
* @desc 是否让窗口宽度每次显示都会自适应匹配显示的文本长度,开启此功能后窗口宽度参数将会失效
* YES - true NO - false
* @default false
*
*
* @param IsArrangeCount
* @text 是否合并数量
* @parent ---功能---
* @type boolean
* @on YES
* @off NO
* @desc 在获取道具时,同类型未显示的道具数量将会被自动合并
* YES - true NO - false
* @default false
*
*
*
*
*
*
*
*
*
* @param ---窗口---
* @default
*
*
* @param BasePos
* @text 窗口位置基准点
* @parent ---窗口---
* @type combo
* @option center
* @option left-top
* @option top
* @option right-top
* @option left
* @option right
* @option left-bottom
* @option bottom
* @option right-bottom
* @desc 窗口位置将会被固定在九个方向,center代表中心,left代表左,right代表右,top代表上,bottom代表下
* @default center
*
*
* @param WindowOfx
* @text 窗口偏移位置X
* @parent ---窗口---
* @type text
* @desc 窗口的偏移位置X
* @default 0
*
* @param WindowOfy
* @text 窗口偏移位置Y
* @parent ---窗口---
* @desc 窗口的偏移位置Y
* @default 0
*
* @param WindowW
* @text 窗口宽度
* @parent ---窗口---
* @type text
* @desc 窗口显示的宽度,这可以输入一个表达式,也可以是一个准确数值
* @default 440
*
* @param LineNum
* @text 窗口显示行数
* @parent ---窗口---
* @type number
* @desc 窗口显示的行数,对应的是高度值,默认值为1
* @default 1
*
*
* @param WindowShowFrame
* @text 消息显示时长
* @parent ---窗口---
* @type number
* @desc 窗口弹出消息会显示的时长,单位为帧数
* @default 60
*
* @param WindowOpacity
* @text 窗口透明度
* @parent ---窗口---
* @type number
* @min 0
* @max 255
* @desc 这是默认窗口的透明度,范围0~255,默认值为255
* @default 255
*
*
* @param WindowFontSize
* @text 窗口字体大小
* @parent ---窗口---
* @type number
* @min 1
* @desc 窗口弹出消息的文本大小,这必须是一个正整数,默认值是28
* @default 28
*
* @param WindowOpenSpeed
* @text 窗口打开速度
* @parent ---窗口---
* @type number
* @min 1
* @desc 窗口从无到完全打开的速度,同时也决定了图标和文字出现的时间,这个值越大速度越快,默认值是32
* @default 32
*
* @param WindowBkPic
* @text 窗口背景图片
* @parent ---窗口---
* @type file
* @dir img/pictures
* @desc 窗口的背景图片,图片将在窗口之下,图片需存放在img/pictures/文件夹内
* @default
*
* @param BkOpFollowOpenSpeed
* @text 图片透明度等同打开速度
* @parent ---窗口---
* @type boolean
* @on YES
* @off NO
* @desc 这会让窗口的图片的透明度跟随窗口打开的速度一同变化
* YES - true NO - false
* @default true
*
*
* @param ---金币---
* @default
*
*
* @param IsGoldShow
* @text 是否显示获取金币
* @parent ---金币---
* @type boolean
* @on YES
* @off NO
* @desc 这会让金币相关内容也添加到显示队列中,默认值为true
* YES - true NO - false
* @default true
*
* @param AddGFormat
* @text 获取金币文本格式
* @parent ---金币---
* @type text
* @desc 显示获取的文本
* @default 获得金币
*
* @param SubGFormat
* @text 失去金币文本格式
* @parent ---金币---
* @type text
* @desc 显示失去的文本
* @default 失去金币
*
* @param GTextColor
* @text 金币颜色文本
* @parent ---金币---
* @type text
* @desc 这是获取金币颜色的文本颜色
* @default #ffffff
*
* @param GIconID
* @text 金币图标
* @parent ---金币---
* @type text
* @desc 这是显示金币的图标ID值
* @default 313
*
* @param GSERank
* @text 金币SE优先级
* @parent ---金币---
* @type text
* @desc 这会设置同屏出现的所有提示中,将播放优先级最高的道具音效,这可以是一个正整数
* @default 0
*
* @param GLRank
* @text 金币列表优先级
* @parent ---金币---
* @type text
* @desc 这会设置同屏出现的所有提示中,将排列优先级最高的道具为最上方,这可以是一个正负整数
* @default 0
*
* @param ---图标---
* @default
*
* @param IconScale
* @text 图标比例
* @parent ---图标---
* @type text
* @desc 这会设置出现的默认图标的比例大小,默认值为1将会跟随文字一般大小
* @default 1
*
* @param IsIconFlash
* @text 是否图标出现时闪烁
* @parent ---图标---
* @type boolean
* @on YES
* @off NO
* @desc 图标出现后,将会进行闪白
* YES - true NO - false
* @default true
*
* @param IconFlashFrame
* @text 图标闪烁时长
* @parent ---图标---
* @type number
* @min 1
* @desc 图标进入到闪白的状态持续的帧数
* @default 10
*
*
*
*
* @param ---文本---
* @default
*
* @param AddFormat
* @text 获取文本格式
* @parent ---文本---
* @type text
* @desc 显示获取的文本格式,%1会被替换为道具名称
* @default 获得 ["%1"]
*
* @param SubFormat
* @text 失去文本格式
* @parent ---文本---
* @type text
* @desc 显示失去的文本格式,%1会被替换为道具名称
* @default 失去 ["%1"]
*
* @param NumberFormat
* @text 文本数量格式
* @parent ---文本---
* @type text
* @desc 显示数量的文本格式,%1会被替换为道具数量
* @default x %1
*
*
* @param ---高级---
* @default
*
* @param ExSceneGain
* @text 额外的记录界面
* @parent ---高级---
* @type text
* @desc 如果想让这个界面下获取的物品可以被提示记录,请通过逗号追加对应的界面名称
* @default Scene_Shop,Scene_ZzySCFChest
*
*
*
*
*
*
*
*
* @param ---音效---
* @default
*
* @param EarnSound
* @text 获取道具名称
* @parent ---音效---
* @type file
* @dir audio/se
* @desc 执行获取道具时,会播放的获取道具,BGM应放在audio/bgm文件夹中,不填写会使用默认的播放音效
* @default Sound1
*
* @param EarnVolume
* @text 获取道具音量
* @parent ---音效---
* @type Number
* @desc 音量大小,默认100
* @default 100
* @param EarnPitch
* @text 获取道具声调
* @parent ---音效---
* @type Number
* @desc 声调,默认100
* @default 100
* @param EarnBGSPan
* @text 获取道具声道
* @parent ---音效---
* @type Number
* @desc 声道,默认0
* @default 0
*
*
* @param GSound
* @text 金币道具名称
* @parent ---音效---
* @type file
* @dir audio/se
* @desc 执行获取道具时,会播放的获取道具,BGM应放在audio/bgm文件夹中,不填写会使用默认的播放音效
* @default Coin
*
* @param GVolume
* @text 金币道具音量
* @parent ---音效---
* @type Number
* @desc 音量大小,默认100
* @default 100
* @param GPitch
* @text 金币道具声调
* @parent ---音效---
* @type Number
* @desc 声调,默认100
* @default 100
* @param GBGSPan
* @text 金币道具声道
* @parent ---音效---
* @type Number
* @desc 声道,默认0
* @default 0
*
*
*
*/
var LiuYue = LiuYue || {};
LiuYue.LiuYue_GainItemTips = true;//插件启动
var Zzy = Zzy || {};
Zzy.GIT = Zzy.GIT || {};
Zzy.GIT.version = 1.05;
Zzy.Parameters = PluginManager.parameters('LiuYue_GainItemTips');
Zzy.Param = Zzy.Param || {};
Zzy.GIT.BasePosToID = function(str)
{
switch(str)
{
case 'left-top':return 1;
case 'top':return 2;
case 'right-top':return 3;
case 'left':return 4;
case 'center':return 5;
case 'right':return 6;
case 'left-bottom':return 7;
case 'bottom':return 8;
case 'right-bottom':return 9;
}
console.log('一个错误:来自LiuYue_GainItemTips(获取道具提示):检查输入窗口位置基准点参数是否正确');
return 5;
}
Zzy.Param.GITIsPluginEnable = eval(String(Zzy.Parameters['IsPluginEnable']));//插件开启状态
Zzy.Param.GITIsAdaptionWidth = eval(String(Zzy.Parameters['IsAdaptionWidth']));//自适应
Zzy.Param.GITIsArrangeCount = eval(String(Zzy.Parameters['IsArrangeCount']));//归并
Zzy.Param.GITBasePos = Zzy.GIT.BasePosToID(String(Zzy.Parameters['BasePos']));//窗口基准点
Zzy.Param.GITWindowOfx = Number(Zzy.Parameters['WindowOfx']);//位置偏移X
Zzy.Param.GITWindowOfy = Number(Zzy.Parameters['WindowOfy']);//位置偏移Y
Zzy.Param.GITWindowW = String(Zzy.Parameters['WindowW']);//强化窗口W
Zzy.Param.GITLineNum = parseInt(Zzy.Parameters['LineNum']);//强化窗口H
Zzy.Param.GITWindowShowFrame = parseInt(Zzy.Parameters['WindowShowFrame']);//消息显示时长
Zzy.Param.GITWindowFontSize = parseInt(Zzy.Parameters['WindowFontSize']);//窗口字体大小
Zzy.Param.GITWindowOpacity = parseInt(Zzy.Parameters['WindowOpacity']);//窗口透明度
Zzy.Param.GITWindowOpenSpeed = parseInt(Zzy.Parameters['WindowOpenSpeed']);//窗口速度
Zzy.Param.GITWindowBkPic = String(Zzy.Parameters['WindowBkPic']);//窗口图片
Zzy.Param.GITBkOpFollowOpenSpeed = eval(Zzy.Parameters['BkOpFollowOpenSpeed']);//透明度跟随打开速度
Zzy.Param.GITAddFormat = String(Zzy.Parameters['AddFormat']);//显示文本格式
Zzy.Param.GITSubFormat = String(Zzy.Parameters['SubFormat']);//显示文本格式
Zzy.Param.GITNumberFormat = String(Zzy.Parameters['NumberFormat']);//显示文本格式
Zzy.Param.GITIsGoldShow = eval(Zzy.Parameters['IsGoldShow']);//是否获取失去金币显示
Zzy.Param.GITAddGFormat = String(Zzy.Parameters['AddGFormat']);//获取金币文本格式
Zzy.Param.GITSubGFormat = String(Zzy.Parameters['SubGFormat']);//失去金币文本格式
Zzy.Param.GITGTextColor = String(Zzy.Parameters['GTextColor']);
Zzy.Param.GITGIconID = parseInt(Zzy.Parameters['GIconID']);
Zzy.Param.GITGSERank = parseInt(Zzy.Parameters['GSERank']);
Zzy.Param.GITGLRank = parseInt(Zzy.Parameters['GLRank']);
Zzy.Param.GITIconScale = Number(Zzy.Parameters['IconScale']);//图标大小
Zzy.Param.GITIsIconFlash = eval(Zzy.Parameters['IsIconFlash']);
Zzy.Param.GITIconFlashFrame = parseInt(Zzy.Parameters['IconFlashFrame']);
//---更新--- v1.05 指定场景获取道具具有提示效果
Zzy.GIT.ExSceneGain = String(Zzy.Parameters['ExSceneGain'] || 'Scene_Shop,Scene_ZzySCFChest');
Zzy.GIT.TransExSceneGain = function()
{
var strArr = Zzy.GIT.ExSceneGain.split(',');
var struct = {};
for(var i=0;i<strArr.length;i++)
{
var str = strArr[i];
struct[str] = true;
}
return struct;
}
Zzy.GIT.GainSceneStruct = Zzy.GIT.TransExSceneGain();
//--------------------------------------声音-------------------------------------
Zzy.Param.GITMakeSE = 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.GITEarnSound = String(Zzy.Parameters['EarnSound']);//背景BGM名称
Zzy.Param.GITEarnVolume = parseInt(Zzy.Parameters['EarnVolume']);//背景BGM音量
Zzy.Param.GITEarnPitch = parseInt(Zzy.Parameters['EarnPitch']);//背景BGM声调
Zzy.Param.GITEarnBGSPan = parseInt(Zzy.Parameters['EarnPan']);//背景BGM声道
Zzy.Param.GITEarnSE = Zzy.Param.GITMakeSE(Zzy.Param.GITEarnSound,Zzy.Param.GITEarnVolume,Zzy.Param.GITEarnPitch,Zzy.Param.GITEarnBGSPan);
Zzy.Param.GITGSound = String(Zzy.Parameters['GSound']);//金币BGM名称
Zzy.Param.GITGVolume = parseInt(Zzy.Parameters['GVolume']);//金币BGM音量
Zzy.Param.GITGPitch = parseInt(Zzy.Parameters['GPitch']);//金币BGM声调
Zzy.Param.GITGBGSPan = parseInt(Zzy.Parameters['GPan']);//金币BGM声道
Zzy.Param.GITGSE = Zzy.Param.GITMakeSE(Zzy.Param.GITGSound,Zzy.Param.GITGVolume,Zzy.Param.GITGPitch,Zzy.Param.GITGBGSPan);
Zzy.Param.GITAllSE = [];
Zzy.Param.GITAllSE = [undefined,
Zzy.Param.GITEarnSE,//获取文本
Zzy.Param.GITGSE//金币文本
];
var Imported = Imported || {};
//=================================================================
//DataManager
//=================================================================
Zzy.GIT.DataManager_loadGame = DataManager.loadGame;
DataManager.loadGame = function(savefileId) //旧存档兼容
{
var result = Zzy.GIT.DataManager_loadGame.call(this,savefileId);
this.ZzyGITInitData();
return result;
}
DataManager.ZzyGITInitData = function()//初始化参数
{
if(!$gameSystem.GetIsZzyGITLoaded())
{
//初始化
$gameSystem.ZzyGITInitData();//初始化数据
$gameSystem.SetIsZzyGITLoaded(true);
}
}
//=============================================================================
//Game_System
//=============================================================================
Zzy.GIT.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function()
{
Zzy.GIT.Game_System_initialize.call(this);
this.ZzyGITInitData();//初始化数据
this._IsZzyGITLoaded = true;//是否载入完成
};
Game_System.prototype.GetIsZzyGITLoaded = function()
{
if(this._IsZzyGITLoaded === undefined)
{this._IsZzyGITLoaded = false;}
return this._IsZzyGITLoaded;
}
Game_System.prototype.SetIsZzyGITLoaded = function(enable)
{
this._IsZzyGITLoaded = enable;
}
Game_System.prototype.ZzyGITInitData = function()//清除链表
{
this._zzyGITList = [];//显示列表
this._zzyGITIndex = 0;//显示下标
this._zzyGITPluginEnable = Zzy.Param.GITIsPluginEnable;
}
Game_System.prototype.ClearZzyGITList = function()//清除链表
{
this._zzyGITList = [];//显示列表
this._zzyGITIndex = 0;//显示下标
}
Game_System.prototype.ZzyGITSurplusCount = function()
{
if(!this._zzyGITList.length)return 0;
var len = this._zzyGITList.length;
return this._zzyGITIndex - len;
}
Game_System.prototype.PushZzyGITList = function(info)
{
//如果是开启归并功能,则压入到归并队列里
if(this.ZzyGITArrangeInfo(info))return;//自动归并
this._zzyGITList.push(info);
}
Game_System.prototype.ZzyGITArrangeInfo = function(info)
{
if(!Zzy.Param.GITIsArrangeCount)return false;
var len = this._zzyGITList.length;
if(len)
{
for(var i=this._zzyGITIndex;i<len;i++)
{
var lInfo = this._zzyGITList[i];
if(lInfo && info && lInfo.item === info.item)
{
lInfo.num += info.num;//增加数量
return true;//不再压入
}
}
}
return false;
}
Game_System.prototype.SetZzyGITPluginEnable = function(isEnable)
{
this._zzyGITPluginEnable = isEnable;
}
Game_System.prototype.GetZzyGITPluginEnable = function()
{
if(this._zzyGITPluginEnable === undefined)
{
this._zzyGITPluginEnable = Zzy.Param.GITIsPluginEnable;
}
return this._zzyGITPluginEnable;
}
//================================================================
//Game_Interpreter
//================================================================
Zzy.GIT.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args)//插件命令
{
Zzy.GIT.Game_Interpreter_pluginCommand.call(this,command,args);
if(command === 'ZzyGIT')
{
this.ZzyGITCommand(args);
}
}
Game_Interpreter.prototype.ZzyGITCommand = function(args)
{
var command = String(args[0]);
switch(command)
{
case 'IsEnable':
var isEnable = eval(args[1]);
Zzy.GIT.IsEnable(isEnable);
break;
}
}
//================================================================
//DataManager
//================================================================
Zzy.GIT.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function()
{
if (!Zzy.GIT.DataManager_isDatabaseLoaded.call(this)) return false;
this.ZzyGITLoadNoteCase1($dataItems);//道具
this.ZzyGITLoadNoteCase1($dataWeapons);//武器
this.ZzyGITLoadNoteCase1($dataArmors);//护甲
return true;
}
DataManager.ZzyGITLoadNoteCase1 = function(objArr)
{
for (var i = 1; i < objArr.length; i++)
{
var obj = objArr[i];
var noteData = obj.note.split(/[\r\n]+/);
obj.zzyGIT = {};
for(var j=0;j<noteData.length;j++)
{
var lineStr = noteData[j];
if(lineStr.match(/<ZZYGIT TEXTCOLOR:[ ](.*)>/i))
{
var color = String(RegExp.$1);
obj.zzyGIT.textColor = color;
}
else if(lineStr.match(/<ZZYGIT SE:[ ](.*)>/i))
{
var seStr = String(RegExp.$1);
var seArr = seStr.split(' ');
var name = String(seArr[0]);
var volume = parseInt(seArr[1]);
var pitch = parseInt(seArr[2]);
var pan = parseInt(seArr[3]);
var se = {
name:name,
volume:(volume ? volume : 100),
pitch:(pitch ? pitch : 100),
pan:(pan ? pan : 0)
}
obj.zzyGIT.se = se;
}
else if(lineStr.match(/<ZZYGIT SERANK:[ ](.*)>/i))
{
var seRank = parseInt(RegExp.$1);
obj.zzyGIT.seRank = seRank;//设置等级
}
else if(lineStr.match(/<ZZYGIT LISTRANK:[ ](.*)>/i))
{
var lRank = parseInt(RegExp.$1);
obj.zzyGIT.lRank = lRank;//设置排列等级
}
}
}
}
//=======================================================================
//Scene_Map
//=======================================================================
Zzy.GIT.Scene_Map_start = Scene_Map.prototype.start;
Scene_Map.prototype.start = function()
{
Zzy.GIT.Scene_Map_start.call(this);
this.CreateZzyGITTipsWindow();
};
Scene_Map.prototype.CreateZzyGITTipsWindow = function()
{
this._zzyGITWindow = new Window_ZzyGITTips();
this.addChild(this._zzyGITWindow);
}
//=======================================================================
//Window_ZzyGITTips
//=======================================================================
function Window_ZzyGITTips() {
this.initialize.apply(this, arguments);
}
Window_ZzyGITTips.prototype = Object.create(Window_Base.prototype);
Window_ZzyGITTips.prototype.constructor = Window_ZzyGITTips;
Window_ZzyGITTips.prototype.initialize = function()
{
var w = this.DefaultWidth();
var h = this.DefaultHeight();
Window_Base.prototype.initialize.call(this, 0, 0, w, h);
this.iconSprArr = [];//图标池子
this.opacity = Zzy.Param.GITWindowOpacity;
this.AutoInitPos();
this.InitData();
this.hide();//进行隐藏
this.openness = 0;
this.CreaterBkSpr();//创造背景
this.opennessRate = 0;//比率
};
Window_ZzyGITTips.prototype.CreaterBkSpr = function()
{
var picName = Zzy.Param.GITWindowBkPic;
if(picName)//存在背景图片
{
this._zzyGITBackSpr = new Sprite_ZzyGITBkPic(this,picName);//添加背景
this.addChildToBack(this._zzyGITBackSpr);
}
}
Window_ZzyGITTips.prototype.AutoInitPos = function()
{
var pos = this.SetWindowPos();
this.x = pos.x;
this.y = pos.y;
}
Window_ZzyGITTips.prototype.InitData = function()
{
this.showFrame = Zzy.Param.GITWindowShowFrame;
this.cShowFrame = 0;//计数
this._list = [];//列表
this.isCanGet = true;
}
Window_ZzyGITTips.prototype.ResetInfo = function()
{
this.showFrame = Zzy.Param.GITWindowShowFrame;
this.cShowFrame = 0;//计数
this._list = [];//列表
this.isCanGet = true;
}
Window_ZzyGITTips.prototype.update = function()
{
Window_Base.prototype.update.call(this);
if(!this.isWindowReady())return;//不满足判断
this.updateGetList();//获取队列
this.updateShowFrame();//更新显示帧数
this.updateOpennessRate();
}
Window_ZzyGITTips.prototype.updateOpennessRate = function()
{
this.opennessRate = Math.max(1,Math.min(0,this.openness/255));
}
Window_ZzyGITTips.prototype.isWindowReady = function()
{
if(this.isClosing())return false;
if(this.isOpening())return false;
return true;
}
Window_ZzyGITTips.prototype.updateGetList = function()
{
if(!$gameSystem._zzyGITList.length)return false;
if(this.isCanGet)
{
this.isCanGet = false;
this.cShowFrame = 0;
this._list = this.GetNextList();//获取下一层队列
if(this._list === undefined)//不存在下层对象
{
$gameSystem.ClearZzyGITList();//清理存储
}
else
{
this.DisVisibleAllSpr();//隐藏图标
this.Refresh();//刷新显示
this.open();//执行开启
this.AutoPlaySE();
}
}
}
Window_ZzyGITTips.prototype.AutoPlaySE = function()
{
var len = this._list.length;
var mRankIndex = -1;
for(var i=len-1;i>=0;i--)//播放最后一个压入且优先级最高的特殊音效
{
var seRank = this.GetSERankInfo(this._list[i]);
if(mRankIndex<0){mRankIndex = i;}
else
{
var prSeRank = this.GetSERankInfo(this._list[mRankIndex]);
if(seRank > prSeRank)
{
mRankIndex = i;//目前SE的下标
}
}
}
var se = undefined;
if(mRankIndex>=0)
{
se = this.GetSEInfo(this._list[mRankIndex]);
}
if(!se)
{
for(var i=len-1;i>=0;i--)//播放最后一个压入且优先级最高的特殊音效
{
se = this.GetSEInfo(this._list[i]);
if(se){break;}
}
}
if(se){AudioManager.playSe(se);return;}//播放选中的SE
//播放默认音效
Zzy.GIT.PlaySE(1);
}
Window_ZzyGITTips.prototype.GetListRankInfo = function(info)//获取排列等级
{
if(info.type === 0)
{
var item = info.item;
if(item.zzyGIT)
{
return item.zzyGIT.lRank ? item.zzyGIT.lRank : 0;
}
}
else if(info.type === 1)
{
return Zzy.Param.GITGLRank;
}
return 0;
}
Window_ZzyGITTips.prototype.GetSERankInfo = function(info)//获取SE优先级
{
if(info.type === 0)
{
var item = info.item;
if(item.zzyGIT)
{
return item.zzyGIT.seRank ? item.zzyGIT.seRank : 0;
}
}
else if(info.type === 1)
{
return Zzy.Param.GITGSERank;
}
return 0;
}
Window_ZzyGITTips.prototype.GetSEInfo = function(info)
{
if(info.type === 0)
{
var item = info.item;
if(item.zzyGIT)
{
return item.zzyGIT.se ? item.zzyGIT.se : undefined;
}
}
else if(info.type === 1)
{
return Zzy.Param.GITAllSE[2];
}
return undefined;
}
Window_ZzyGITTips.prototype.updateShowFrame = function()
{
if(this.cShowFrame < this.showFrame)
{this.cShowFrame++;}
else
{
this.isCanGet = true;
this.cShowFrame = 0;
if(this._list === undefined && this.visible)
{
this.close();//关闭
}
}
}
Window_ZzyGITTips.prototype.GetNextList = function()
{
if($gameSystem._zzyGITIndex >= $gameSystem._zzyGITList.length)return undefined;
var list = [];
var maxLen = $gameSystem._zzyGITList.length;
var maxNum = Zzy.Param.GITLineNum;//显示最大数量
var curIndex = $gameSystem._zzyGITIndex;
var limitIndex = $gameSystem._zzyGITIndex + maxNum;//限制级坐标
limitIndex = limitIndex > maxLen ? maxLen : limitIndex;
for(var i=curIndex;i<limitIndex;i++)
{
list.push($gameSystem._zzyGITList[i]);
}
list = this.SortList(list);//排列顺序
//修改位置
$gameSystem._zzyGITIndex = limitIndex;
return list;
}
Window_ZzyGITTips.prototype.SortList = function(list)//通过选择排序调整位置
{
var rList = [];
var len = list.length;
for(var i=0;i<len;i++)
{
var info = list[i];
rList[i] = this.GetListRankInfo(info);//获取等级存放到数组中
}
for(var i=0;i<len-1;i++)
{
var sRank = rList[i];//目前等级
//选择排序算法
for(var j=i+1;j<len;j++)
{
var tRank = rList[j];
if(sRank < tRank)
{
//进行交换
var rt = rList[i];
rList[i] = rList[j];
rList[j] = rt;
var rObj = list[i];
list[i] = list[j];
list[j] = rObj;
}
}
}
return list;
}
Window_ZzyGITTips.prototype.Refresh = function()
{
//重新绘制内容
if(Zzy.Param.GITIsAdaptionWidth)this.AdaptionWidth();//自适应宽度
this.contents.clear();
this.DrawList();//绘制道具内容以及数量
}
Window_ZzyGITTips.prototype.DrawList = function()
{
if(!this._list || !this._list.length)return;
var len = this._list.length;
for(var i=0;i<len;i++)
{
var info = this._list[i];
this.DrawItem(i,info);
}
}
Window_ZzyGITTips.prototype.AdaptionWidth = function()//自适应宽高-修改窗口宽高以及检测
{
var len = this._list.length;
var maxW = 0;
for(var i=0;i<len;i++)
{
var info = this._list[i];
var nameText = this.showNameText(info);
var numText = this.showNumberText(info);
//额外间隔8像素
var tw = this.textWidth(nameText+numText)+8;
maxW = Math.max(maxW,tw);
}
this.width = maxW;
}
Window_ZzyGITTips.prototype.DrawItem = function(index,info)
{
var drY = index*this.lineHeight();
var nameText = this.showNameText(info);
var numText = this.showNumberText(info);
var mw = this.width-this.standardPadding()*2
var iconID = 0;
if(this.IsGoldInfo(info))
{
iconID = Zzy.Param.GITGIconID;
}
else if(this.IsItemInfo(info))
{
iconID = info.item.iconIndex;
}
var spr = this.drawIcon(iconID, 2, drY+2);//绘制图标
var iconS = spr.GetRealSize();
this.drawTextEx(nameText,iconS+4,drY);
this.drawText(numText,iconS+4,drY,mw-(iconS+4)-2,'right');
}
Window_ZzyGITTips.prototype.drawIcon = function(ID,x,y)
{
var spr = this.RequestIconSprite();//请求图标
var info = this.makeItemInfo();
spr.ResetInfo(ID,x,y,info);
return spr;
}
Window_ZzyGITTips.prototype.makeItemInfo = function()//制作道具信息
{
var info = {};
info.fontSize = this.standardFontSize();
return info;
}
Window_ZzyGITTips.prototype.RequestIconSprite = function()//请求位图
{
var len = this.iconSprArr.length;
for(var i=0;i<len;i++)
{
if(this.iconSprArr[i].free)
{
var spr = this.iconSprArr[i];
spr.free = false;
return spr;
}
}
var newSpr = new Sprite_ZzyGITIcon(this);
this.addChild(newSpr);
this.iconSprArr.push(newSpr);
return newSpr;
}
Window_ZzyGITTips.prototype.DisVisibleAllSpr = function()
{
var len = this.iconSprArr.length;
for(var i=0;i<len;i++)
{
var spr = this.iconSprArr[i];
spr.free = true;
}
}
Zzy.GIT.Window_ZzyGITTips_processEscapeCharacter = Window_ZzyGITTips.prototype.processEscapeCharacter;
Window_ZzyGITTips.prototype.processEscapeCharacter = function(code, textState)
{
Zzy.GIT.Window_ZzyGITTips_processEscapeCharacter.call(this,code, textState);
if(code === 'ZTC')
{
var colorCode = this.obtainEscapeParam2(textState);
this.contents.textColor = colorCode;
}
};
Window_ZzyGITTips.prototype.obtainEscapeParam2 = function(textState)
{
var arr = /^\<(.*?)\>/.exec(textState.text.slice(textState.index));
if (arr) {
textState.index += arr[0].length;
return arr[1];
} else {
return '';
}
};
Window_ZzyGITTips.prototype.showNameText = function(info)//制作文本
{
var formatStr = undefined;
if(this.IsItemInfo(info))//代表道具
{
//显示格式
if(info.isGain){formatStr = Zzy.Param.GITAddFormat;}
else{formatStr = Zzy.Param.GITSubFormat;}
var nameStr = info.item.name;
nameStr = nameStr + '\\C[0]';
if(info.item.zzyGIT && info.item.zzyGIT.textColor)//存在特殊颜色
{
var colorCode = info.item.zzyGIT.textColor;
nameStr = '\\ZTC<' + colorCode + '>' + nameStr;
}
var str = formatStr.format(nameStr);
return str;
}
else if(this.IsGoldInfo(info))//代表金币
{
//显示格式
if(info.isGain){formatStr = Zzy.Param.GITAddGFormat;}
else{formatStr = Zzy.Param.GITSubGFormat;}
var str = '\\ZTC<' + Zzy.Param.GITGTextColor + '>' + formatStr;
return str;
}
return '';
}
Window_ZzyGITTips.prototype.IsItemInfo = function(info)
{
return info.type === 0;
}
Window_ZzyGITTips.prototype.IsGoldInfo = function(info)
{
return info.type === 1;
}
Window_ZzyGITTips.prototype.showNumberText = function(info)
{
var formatStr = Zzy.Param.GITNumberFormat;
var num = info.num;
var str = formatStr.format(num);
return str;
}
Window_ZzyGITTips.prototype.SetWindowPos = function()
{
var pos = {};
pos.x = 0;
pos.y = 0;
var ax = Graphics.boxWidth;
var ay = Graphics.boxHeight;
var cx = Graphics.boxWidth/2;
var cy = Graphics.boxHeight/2;
//计算位置 1~9
var line = Math.floor((Zzy.Param.GITBasePos-1)/3);
var list = (Zzy.Param.GITBasePos-1) % 3;
//计算每个位置的数值
pos.x = list * cx - (list)*this.width/2;
pos.y = line * cy - (line)*this.height/2;
pos.x += Zzy.Param.GITWindowOfx;
pos.y += Zzy.Param.GITWindowOfy
return pos;
}
Window_ZzyGITTips.prototype.DefaultWidth = function()
{
if(Zzy.Param.GITIsAdaptionWidth)return Graphics.width;//因为调整成自适应,要求画布宽度够长才可以
return eval(Zzy.Param.GITWindowW);
}
Window_ZzyGITTips.prototype.DefaultHeight = function()
{
return this.fittingHeight(Zzy.Param.GITLineNum);
}
Window_ZzyGITTips.prototype.updateOpen = function()
{
if (this._opening) {
this.openness += Zzy.Param.GITWindowOpenSpeed;
if (this.isOpen()) {
this._opening = false;
}
}
};
Window_ZzyGITTips.prototype.updateClose = function() {
if (this._closing) {
this.openness -= Zzy.Param.GITWindowOpenSpeed;
if (this.isClosed()) {
this._closing = false;
this.visible = false;
}
}
};
Window_ZzyGITTips.prototype.open = function() {
if (!this.isOpen()) {
this._opening = true;
}
this._closing = false;
this.visible = true;
};
Window_ZzyGITTips.prototype.close = function() {
if (!this.isClosed()) {
this._closing = true;
}
this._opening = false;
};
Window_ZzyGITTips.prototype.isOpening = function() {
return this._opening;
};
Window_ZzyGITTips.prototype.isClosing = function() {
return this._closing;
};
Window_ZzyGITTips.prototype.setup = function()
{
this.open();//启动
}
Window_ZzyGITTips.prototype.standardFontSize = function() //改变字体大小
{
return Zzy.Param.GITWindowFontSize;
};
Window_ZzyGITTips.prototype.lineHeight = function()
{
return this.standardFontSize()+8;
};
//=======================================================================
//Game_Interpreter
//=======================================================================
Zzy.GIT.Game_Interpreter_command126 = Game_Interpreter.prototype.command126;
Game_Interpreter.prototype.command126 = function()
{
var result = Zzy.GIT.Game_Interpreter_command126.call(this);
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
if($gameSystem.GetZzyGITPluginEnable())
{Zzy.GIT.GainPrompt($dataItems[this._params[0]], value);}
return result;
};
Zzy.GIT.Game_Interpreter_command127 = Game_Interpreter.prototype.command127;
Game_Interpreter.prototype.command127 = function()
{
var result = Zzy.GIT.Game_Interpreter_command127.call(this);
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
if($gameSystem.GetZzyGITPluginEnable())
{Zzy.GIT.GainPrompt($dataWeapons[this._params[0]], value);}
return result;
};
Zzy.GIT.Game_Interpreter_command128 = Game_Interpreter.prototype.command128;
Game_Interpreter.prototype.command128 = function()
{
var result = Zzy.GIT.Game_Interpreter_command128.call(this);
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
if($gameSystem.GetZzyGITPluginEnable())
{Zzy.GIT.GainPrompt($dataArmors[this._params[0]], value);}
return result;
};
//=======================================================================
//Game_Party
//=======================================================================
Zzy.GIT.Game_Party_gainItem = Game_Party.prototype.gainItem;
Game_Party.prototype.gainItem = function(item, amount, includeEquip)
{
//此处使用获取前,获取后 消耗的方式来计算增益物品提示
var prevNum = 0;
if($gameSystem.GetZzyGITPluginEnable())
{prevNum = this.numItems(item);}
Zzy.GIT.Game_Party_gainItem.call(this,item,amount,includeEquip);
if($gameSystem.GetZzyGITPluginEnable())
{
var sName = SceneManager._scene.constructor.name;
if(Zzy.GIT.GainSceneStruct[sName])
{
var afterNum = this.numItems(item);
var realAmount = afterNum - prevNum;
if(realAmount)Zzy.GIT.GainPrompt(item, realAmount);
}
}
};
Zzy.GIT.Game_Party_gainGold = Game_Party.prototype.gainGold;
Game_Party.prototype.gainGold = function(amount)
{
Zzy.GIT.Game_Party_gainGold.call(this,amount);
if($gameSystem.GetZzyGITPluginEnable())
{
Zzy.GIT.GainGoldPrompt(amount);
}
}
//=======================================================================
//Sprite_ZzyGITIcon
//=======================================================================
function Sprite_ZzyGITIcon()
{
this.initialize.apply(this, arguments);
}
Sprite_ZzyGITIcon.prototype = Object.create(Sprite.prototype);
Sprite_ZzyGITIcon.prototype.constructor = Sprite_ZzyGITIcon;
Sprite_ZzyGITIcon.iconWidth = 32;
Sprite_ZzyGITIcon.iconHeight = 32;
Sprite_ZzyGITIcon.StandFontSize = 28;//标准字体大小
Sprite_ZzyGITIcon.prototype.initialize = function(pointer)
{
Sprite.prototype.initialize.call(this);
this.myParent = pointer;
this.free = false;//自由属性
this.iconId = 0;
this.rx = 0;
this.ry = 0;
this.visible = false;//防止闪烁
this.cFlashFrame = 0;//闪烁
this.eFlashFrame = 0;//闪烁结束长度
this.isFlashing = false;//闪烁中
this.NewEmptyBitmap();
};
Sprite_ZzyGITIcon.prototype.NewEmptyBitmap = function()
{
var nw = Sprite_ZzyGITIcon.iconWidth;
var nh = Sprite_ZzyGITIcon.iconHeight;
this.bitmap = new Bitmap(nw,nh);
}
Sprite_ZzyGITIcon.prototype.ResetInfo = function(ID,x,y,info)//重新设置
{
this.iconId = ID;
this.bltMyIcon();//绘制图标
this.ResetPos(x,y);
this.ResetScale(info.fontSize);//缩放倍率
this.startFlash();//进行闪烁
}
Sprite_ZzyGITIcon.prototype.stopFlash = function()//停止闪烁
{
this.cFlashFrame = 0;
this.eFlashFrame = 0;
this.isFlashing = false;
this.setColorTone([0,0,0,0]);
}
Sprite_ZzyGITIcon.prototype.startFlash = function()//开始
{
if(Zzy.Param.GITIsIconFlash)//可以闪烁
{
this.cFlashFrame = 0;
this.eFlashFrame = Zzy.Param.GITIconFlashFrame;
this.isFlashing = true;
}
}
Sprite_ZzyGITIcon.prototype.ResetPos = function(x,y)//更新位置
{
this.rx = x;
this.ry = y;
this.x = this.RealX();
this.y = this.RealY();
}
Sprite_ZzyGITIcon.prototype.ResetScale = function(fSize)
{
var ds = fSize - Sprite_ZzyGITIcon.StandFontSize;
var isw = Sprite_ZzyGITIcon.iconWidth + ds;
var ish = Sprite_ZzyGITIcon.iconHeight + ds;
this.scale.x = isw * Zzy.Param.GITIconScale / Sprite_ZzyGITIcon.iconWidth;
this.scale.y = ish * Zzy.Param.GITIconScale / Sprite_ZzyGITIcon.iconHeight;
}
Sprite_ZzyGITIcon.prototype.GetRealSize = function()
{
return this.scale.x * Sprite_ZzyGITIcon.iconWidth;;
}
Sprite_ZzyGITIcon.prototype.bltMyIcon = function()
{
this.bitmap.clear();//清理
var bp = ImageManager.loadSystem('IconSet');
var pw = Sprite_ZzyGITIcon.iconWidth;
var ph = Sprite_ZzyGITIcon.iconHeight;
var sx = this.iconId % 16 * pw;
var sy = Math.floor(this.iconId / 16) * ph;
this.bitmap.blt(bp, sx, sy, pw, ph, 0, 0);
}
Sprite_ZzyGITIcon.prototype.standardPadding = function() //标准距离
{
return this.myParent.standardPadding();
};
Sprite_ZzyGITIcon.prototype.RealX = function()//应该出现的位置X
{
var posX = this.rx + this.standardPadding();
return posX;
}
Sprite_ZzyGITIcon.prototype.RealY = function()//应该出现的位置Y
{
var posY = this.ry + this.standardPadding();
return posY;
}
Sprite_ZzyGITIcon.prototype.update = function()
{
Sprite.prototype.update.call(this);
//判断自由属性
if(this.free){this.visible = false;return;}
this.updateFlash();//更新闪烁
this.updateOpenVisible();
}
Sprite_ZzyGITIcon.prototype.updateFlash = function()
{
if(!this.visible)return;//不显示则不刷新
if(this.isFlashing)
{
if(this.cFlashFrame > this.eFlashFrame)
{
this.stopFlash();
}
else
{
this.cFlashFrame++;
}
var rate = this.cFlashFrame / this.eFlashFrame;//比率
var vtone = Math.round(255 - 255*rate);
this.setColorTone([vtone,vtone,vtone,0]);
}
}
Sprite_ZzyGITIcon.prototype.updateOpenVisible = function()//更新显示情况
{
this.visible = !!this.myParent.isOpen();//完全打开时显示
}
//=======================================================================
//Sprite_ZzyGITBkPic
//=======================================================================
function Sprite_ZzyGITBkPic()
{
this.initialize.apply(this, arguments);
}
Sprite_ZzyGITBkPic.prototype = Object.create(Sprite.prototype);
Sprite_ZzyGITBkPic.prototype.constructor = Sprite_ZzyGITBkPic;
Sprite_ZzyGITBkPic.prototype.initialize = function(pointer,name)
{
Sprite.prototype.initialize.call(this);
this.myParent = pointer;
this.picName = name;
this.picBitmap = undefined;//缓存
this.isNeedAutoScale = true;
this.CreaterBitmap();//创建背景图片
};
Sprite_ZzyGITBkPic.prototype.CreaterBitmap = function()
{
this.picBitmap = ImageManager.loadPicture(this.picName);
}
Sprite_ZzyGITBkPic.prototype.update = function()
{
Sprite.prototype.update.call(this);
this.updateOpacity();
this.AutoSetScale();
}
Sprite_ZzyGITBkPic.prototype.updateOpacity = function()//更新透明度
{
if(Zzy.Param.GITBkOpFollowOpenSpeed)
{
this.opacity = this.myParent._openness;
}
}
Sprite_ZzyGITBkPic.prototype.AutoSetScale = function()
{
if(!this.isNeedAutoScale)return;//不用刷新长款比例
if(this.IsReady())
{
this.bitmap = this.picBitmap;
var bw = this.bitmap.width;
var bh = this.bitmap.height;
var pw = this.myParent.width;
var ph = this.myParent.height;
this.scale.x = pw / bw;
this.scale.y = ph / bh;
this.isNeedAutoScale = false;
}
}
Sprite_ZzyGITBkPic.prototype.IsReady = function()
{
if(this.picBitmap && this.picBitmap.width && this.picBitmap.height)
{return true;}
return false;
}
//-----------------------------Zzy.GIT.Function----------------------------
Zzy.GIT.PlaySE = function(soundID)//播放声音
{
var se = Zzy.Param.GITAllSE[soundID];
if(se && se.name)
{
AudioManager.playSe(se);
}
}
Zzy.GIT.ClearList = function()//清理所有的消息表
{
$gameSystem.ClearZzyGITList();
}
Zzy.GIT.SurplusCount = function()//获取未显示的剩余消息
{
return $gameSystem.ZzyGITSurplusCount();//剩余消息数量
}
Zzy.GIT.IsEnable = function(isEnable)
{
$gameSystem.SetZzyGITPluginEnable(isEnable);
}
Zzy.GIT.GainPrompt = function(item, amount)
{
if(item && amount)
{
var info = {};
info.isGain = amount >= 0 ? true : false;
info.item = item;
info.num = Math.abs(amount);
info.type = 0;//代表道具
$gameSystem.PushZzyGITList(info);//压入信息
}
}
Zzy.GIT.GainGoldPrompt = function(amount)
{
if(Zzy.Param.GITIsGoldShow && amount)
{
var info = {};
info.isGain = amount >= 0 ? true : false;
info.item = undefined;
info.num = Math.abs(amount);
info.type = 1;//代表金币
$gameSystem.PushZzyGITList(info);//压入信息
}
}
Zzy.GIT.GainPromptOfID = function(ID,type,amount)
{
var item = undefined;
switch(type)
{
case 'item':
item = $dataItems[ID];
Zzy.GIT.GainPrompt(item,amount);
break;
case 'weapon':
item = $dataWeapons[ID];
Zzy.GIT.GainPrompt(item,amount);
break;
case 'armor':
item = $dataArmors[ID];
Zzy.GIT.GainPrompt(item,amount);
break;
case 'coin':
Zzy.GIT.GainGoldPrompt(amount);
break;
}
}