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_FieldBless.js

4118 lines
113 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.08 FieldBless 领域加护
* @author 流逝的岁月
*
* @help
* ============================================================================
* 介绍
* ============================================================================ *
*
*
* 这个插件赋予一个额外的卡槽,可以用于添加'加护'效果,可以在这个'加护'卡槽中,添加你想拥有的增益效果
*
*
*
*
*-------------------------------------------------------------------
*
*使用条例:本插件完全免费,随意魔改
*
*-------------------------------------------------------------------
*
*
*
*
*
* 注意:关于公式,可用以下的内容信息,当然如果对js不熟悉,也可以直接输入数字
*
* actor //角色
* a //角色,与actor相同
* target //目标(如果有,则可以使用)
* b //目标,与target相同
* variables[ID] //全局变量
* v[ID] //全局变量,与variables相同
* V[ID] //全局变量,与variables相同
* switchs[ID] //全局开关
* s[ID] //全局开关,与switchs相同
* S[ID] //全局开关,与switchs相同
* level //角色等级
* usecount //角色所使用的加护容量(并非加护数量)
* nullcount //角色剩余加护容量
*
*
*
*
*
*
*
* 比如想要实现HP通过人物等级*100点的效果,做出'成长形'的加护,那么可以在物品备注中这样写:
* <ZzyFBF HP: 100*level>
*
*
*
*
*
*
*以下是一些插件用到的插件指令
*---------------------Plugin Command--------------------
*
*
* ZzyFBF EnableMenu x(true/false) //是否激活菜单'加护'选项
* ZzyFBF InsertMenu x(true/false) //是否隐藏菜单'加护'选项
* ZzyFBF CommandName x //这会改变命令的文本内容
*
* ZzyFBF EnableSMenu x(true/false) //是否激活角色技能菜单'加护'选项
* ZzyFBF InsertSMenu x(true/false) //是否隐藏角色技能菜单'加护'选项
* ZzyFBF SCommandName x //这会改变角色技能命令的文本内容
*
*
* ZzyFBF OpenActor x //这将会打开数据库x号角色的守护窗口界面
* ZzyFBF OpenParty x //这将会打开队伍中x号角色的守护窗口面板,请注意队长代表0号
*
*
*
* ZzyFBF EnableActorFB x(true/false) //则会开启或是关闭角色拥有的领域效果,注意这不包含自定义设定
* ZzyFBF MaxCount x //角色默认的最大加护槽数量,角色的加护槽不会超过这个值,这可以是一个公式,也可以输入Infinite代表无上限
* ZzyFBF CurrentCount x //角色目前的加护槽数量,这个值可通过角色的属性进行调整,这可以是一个公式
* ZzyFBF MemoryCount x //这会设置道具的默认占用格子量
*
* ZzyFBF ForceUnInstallAll x //这会强制卸载一位角色所有的加护
* x:输入角色的ID值
*
*
*
*
*以下是一些插件用到的脚本函数
*---------------------Script Function--------------------
*
*
* Zzy.FBF.EnableMenu(enable) //是否激活菜单'加护'选项
* Zzy.FBF.InsertMenu(enable) //是否隐藏菜单'加护'选项
* Zzy.FBF.CommandName(commandText) //这会改变命令的文本内容
* Zzy.FBF.EnableSMenu(enable) //是否激活角色技能菜单'加护'选项
* Zzy.FBF.InsertSMenu(enable) //是否隐藏角色技能菜单'加护'选项
* Zzy.FBF.SCommandName(commandText) //这会改变角色技能命令的文本内容
* Zzy.FBF.OpenActor(actorId) //这将会打开数据库x号角色的守护窗口界面
* Zzy.FBF.OpenParty(index) //这将会打开队伍中x号角色的守护窗口面板,请注意队长代表0号
* Zzy.FBF.EnableActorFB(enable) //则会开启或是关闭角色拥有的领域效果,注意这不包含自定义设定
* Zzy.FBF.MaxCount(formula) //角色默认的最大加护槽数量,角色的加护槽不会超过这个值,这可以是一个公式,也可以输入Infinite代表无上限
* Zzy.FBF.CurrentCount(formula) //角色目前的加护槽数量,这个值可通过角色的属性进行调整,这可以是一个公式
* Zzy.FBF.MemoryCount(count) //这会设置道具的默认占用格子量
* Zzy.FBF.ForceUnInstallAll(actorId) //这会强制卸载一位角色所有的加护
*
*
*
*
*以下是一些插件用到的便签信息
*---------------------Data Case--------------------
*可以在 数据库 物品 备注 中添加以下内容:
* <ZzyFBF Enable> //将此道具视为拥有'加护'效果,使用以下指令必须先为物品添加这条备注信息
* <ZzyFBF TextColor: x> --文字颜色-- //这将会修改显示加护文字的色彩,填写#000000~#ffffff 或是 rpga(0~255,0~255,0~255,0~1)
* <ZzyFBF BorderWidth: x> --文字边框宽度-- //这将会修改显示文字边框的宽度,请填写整数
* <ZzyFBF BorderColor: x> --文字边框颜色-- //这将会修改显示文字边框的颜色,填写#000000~#ffffff 或是 rpga(0~255,0~255,0~255,0~1)
* <ZzyFBF TextSize: x> --文字字体大小-- //这将会修改显示文字的字体大小,请填写整数
*
*
* //注意标签中公式不可以存在空格
*
*
* <ZzyFBF HP: x> ----生命---- //装备加护时增加HP,这可以是一个公式
* <ZzyFBF HPPer: x> //装备加护时增加HP百分比,这可以是一个公式
*
* <ZzyFBF MP: x> ----魔法---- //装备加护时增加MP,这可以是一个公式
* <ZzyFBF MPPer: x> //装备加护时增加MP百分比,这可以是一个公式
*
* <ZzyFBF ATK: x> ----攻击---- //装备加护时增加ATK,这可以是一个公式
* <ZzyFBF ATKPer: x> //装备加护时增加ATK百分比,这可以是一个公式
*
* <ZzyFBF DEF: x> ----防御---- //装备加护时增加DEF,这可以是一个公式
* <ZzyFBF DEFPer: x> //装备加护时增加DEF百分比,这可以是一个公式
*
* <ZzyFBF MAT: x> ----魔攻---- //装备加护时增加MAT,这可以是一个公式
* <ZzyFBF MATPer: x> //装备加护时增加MAT百分比,这可以是一个公式
*
* <ZzyFBF MDF: x> ----魔抗---- //装备加护时增加MDF,这可以是一个公式
* <ZzyFBF MDFPer: x> //装备加护时增加MDF百分比,这可以是一个公式
*
* <ZzyFBF AGI: x> ----速度---- //装备加护时增加AGI,这可以是一个公式
* <ZzyFBF AGIPer: x> //装备加护时增加AGI百分比,这可以是一个公式
*
* <ZzyFBF LUK: x> ----幸运---- //装备加护时增加LUK,这可以是一个公式
* <ZzyFBF LUKPer: x> //装备加护时增加LUK百分比,这可以是一个公式
*
* <ZzyFBF HIT: x> --命中-- //装备加护时增加HIT,这可以是一个公式
* <ZzyFBF HITPer: x> --命中-- //装备加护时增加HIT百分比,这可以是一个公式
*
* <ZzyFBF EVA: x> --闪避-- //装备加护时增加EVA,这可以是一个公式
* <ZzyFBF EVAPer: x> --闪避-- //装备加护时增加EVA百分比,这可以是一个公式
*
* <ZzyFBF CRI: x> --暴击-- //装备加护时增加CRI,这可以是一个公式
* <ZzyFBF CRIPer: x> --暴击-- //装备加护时增加CRI百分比,这可以是一个公式
*
* <ZzyFBF CEV: x> --暴击回避-- //装备加护时增加CEV,这可以是一个公式
* <ZzyFBF CEVPer: x> --暴击回避-- //装备加护时增加CEV百分比,这可以是一个公式
*
* <ZzyFBF MEV: x> --魔法回避-- //装备加护时增加MEV,这可以是一个公式
* <ZzyFBF MEVPer: x> --魔法回避-- //装备加护时增加MEV百分比,这可以是一个公式
*
* <ZzyFBF MRF: x> --魔法反射-- //装备加护时增加MRF,这可以是一个公式
* <ZzyFBF MRFPer: x> --魔法反射-- //装备加护时增加MRF百分比,这可以是一个公式
*
* <ZzyFBF CNT: x> --反击-- //装备加护时增加CNT,这可以是一个公式
* <ZzyFBF CNTPer: x> --反击-- //装备加护时增加CNT百分比,这可以是一个公式
*
* <ZzyFBF HRG: x> --HP自动恢复-- //装备加护时增加HRG,这可以是一个公式
* <ZzyFBF HRGPer: x> --HP自动恢复-- //装备加护时增加HRG百分比,这可以是一个公式
*
* <ZzyFBF MRG: x> --MP自动恢复-- //装备加护时增加MRG,这可以是一个公式
* <ZzyFBF MRGPer: x> --MP自动恢复-- //装备加护时增加MRG百分比,这可以是一个公式
*
* <ZzyFBF TRG: x> --TP自动恢复-- //装备加护时增加TRG,这可以是一个公式
* <ZzyFBF TRGPer: x> --TP自动恢复-- //装备加护时增加TRG百分比,这可以是一个公式
*
* <ZzyFBF TGR: x> --受到攻击几率-- //装备加护时增加TGR,这可以是一个公式
* <ZzyFBF TGRPer: x> --受到攻击几率-- //装备加护时增加TGR百分比,这可以是一个公式
*
* <ZzyFBF GRD: x> --防御效果-- //装备加护时增加GRD,这可以是一个公式
* <ZzyFBF GRDPer: x> --防御效果-- //装备加护时增加GRD百分比,这可以是一个公式
*
* <ZzyFBF REC: x> --恢复效果-- //装备加护时增加REC,这可以是一个公式
* <ZzyFBF RECPer: x> --恢复效果-- //装备加护时增加REC百分比,这可以是一个公式
*
* <ZzyFBF PHA: x> --药理知识-- //装备加护时增加PHA,这可以是一个公式
* <ZzyFBF PHAPer: x> --药理知识-- //装备加护时增加PHA百分比,这可以是一个公式
*
* <ZzyFBF MCR: x> --MP消耗率-- //装备加护时增加MCR,这可以是一个公式
* <ZzyFBF MCRPer: x> --MP消耗率-- //装备加护时增加MCR百分比,这可以是一个公式
*
* <ZzyFBF TCR: x> --TP消耗率-- //装备加护时增加TCR,这可以是一个公式
* <ZzyFBF TCRPer: x> --TP消耗率-- //装备加护时增加TCR百分比,这可以是一个公式
*
* <ZzyFBF PDR: x> --物理伤害-- //装备加护时增加PDR,这可以是一个公式
* <ZzyFBF PDRPer: x> --物理伤害-- //装备加护时增加PDR百分比,这可以是一个公式
*
* <ZzyFBF MDR: x> --魔法伤害-- //装备加护时增加MDR,这可以是一个公式
* <ZzyFBF MDRPer: x> --魔法伤害-- //装备加护时增加MDR百分比,这可以是一个公式
*
*
* <ZzyFBF FDR: x> --地板伤害-- //装备加护时增加FDR,这可以是一个公式
* <ZzyFBF FDRPer: x> --地板伤害-- //装备加护时增加FDR百分比,这可以是一个公式
*
* <ZzyFBF EXP: x> --经验值-- //装备加护时增加战斗结算EXP,这可以是一个公式
* <ZzyFBF EXPPer: x> --经验值-- //装备加护时增加战斗结算EXP百分比,这可以是一个公式
*
* <ZzyFBF GOLD: x> --金币-- //装备加护时增加战斗结算GOLD,这可以是一个公式
* <ZzyFBF GOLDPer: x> --金币-- //装备加护时增加战斗结算GOLD百分比,这可以是一个公式
*
* <ZzyFBF DAR: x> --伤害减免-- //装备加护时战斗受到伤害DAR,这可以是一个公式
* <ZzyFBF DARPer: x> --伤害减免-- //装备加护时战斗受到伤害DAR百分比,这可以是一个公式
*
* <ZzyFBF Element: x1 x2> --元素伤害-- //拥有战斗时技能元素造成伤害额外值,x1是元素ID,x2是伤害值,这可以是一个公式
* <ZzyFBF ElementPer: x1 x2> --元素伤害-- //增加元素的百分比,x1是元素ID,x2是伤害值,这可以是一个公式
*
* <ZzyFBF ESCPer: x> --逃跑概率-- //装备加护时增加或者减少逃跑的概率,x填写20就代表增加20%,这可以是一个公式
* <ZzyFBF SNAKPer: x> --偷袭概率-- //装备加护时遭遇战斗增加或减少先发制人的概率,x填写20就代表增加20%,这可以是一个公式
* <ZzyFBF BSAKPer: x> --被偷袭概率-- //装备加护时遭遇战斗增加或减少被偷袭的的概率,x填写20就代表增加20%,这可以是一个公式
*
*
* <ZzyFBF ENCT: x> --遇敌步数-- //装备加护时遭遇敌人所需要的倍数增加或减少,x填写10就代表额外10步后才有概率遭遇敌人
* <ZzyFBF ENCTPer: x> --遇敌步数-- //装备加护时遭遇敌人所需要的倍数增加或减少,x填写10就代表额外10%步后才有概率遭遇敌人
*
*
* <ZzyFBF Memory: x> //修改加护的占用量
* <ZzyFBF NoInstall> //这会使安装的加护无法通过界面方式进行拆卸
*
* <ZzyFBF Class: x> //限定可以使用这个加护的职业ID,设置后则会限制在这个范围中
* <ZzyFBF Class: x1,x2,x3...> //限定可以使用这个加护的职业ID,可输入多个ID值
* <ZzyFBF Actor: x> //限定可以使用这个加护的角色ID,设置后则会限制在这个范围中,此优先级高于职业设置
* <ZzyFBF Actor: x1,x2,x3...> //限定可以使用这个加护的角色ID,可输入多个ID值
* <ZzyFBF NoClass: x> //限定不可以使用这个加护的职业ID
* <ZzyFBF NoClass: x1,x2,x3...> //限定不可以使用这个加护的职业ID,可输入多个ID值
* <ZzyFBF NoActor: x> //限定不可以使用这个加护的角色ID,此优先级高于职业设置
* <ZzyFBF NoActor: x1,x2,x3...> //限定不可以使用这个加护的角色ID,可输入多个ID值
*
* <ZzyFBF Condition: x> //限定是否可以使用这个加护的公式,返回值为true代表可以使用,返回值为false不可使用,此优先级最高
*
*
*
*
*
*可以在 数据库 角色 备注 中添加以下内容:
* <ZzyFBF FieldBless: x(true/false)> //这将控制这个角色是否拥有加护的能力,优先级高于插件参数设置
* <ZzyFBF MaxCount: x> //这将设置角色的加护槽最多为x,x可以是一个公式,也可以输入Infinite代表无上限
* <ZzyFBF CurrentCount: x> //通过目前的角色属性,来获得当前的加护槽,这可以是一个公式
*
*
*
*
*可以在 数据库 护甲 武器 技能 职业 角色 添加以下内容:
* <ZzyFBF Count: x> //这将对相关这个角色的当前加护槽开放更多,注意x可以是一个公式
* <ZzyFBF MCount: x> //这将对相关这个角色的最大加护槽开放的上限,注意x可以是一个公式
*
*
*
*
*----------------------------------------------------------
*
*
* 我叫坂本v1.08 拓展脚本函数
* 我叫坂本v1.07 修复一个bug导致了与YEP独立物品以及部分插件无法兼容的问题
* 我叫坂本v1.06 添加与旧存档兼容
* 我叫坂本v1.05 优化,减少不必要的指令
* 我叫坂本v1.04 添加呼叫界面的插件指令,添加技能界面出现加护选项
* 我叫坂本v1.03 修复读档时,拆卸领域异常的bug,添加额外便签设置
* 我叫坂本v1.02 修复无法增加经验值bug,添加额外便签设置
* 我叫坂本v1.01 更新了元素相关的便签信息,更新了对于公式中更多的变量
* 我叫坂本v1.00 完成插件功能
*
*----------------------------------------------------------
*
*
* @param ---菜单---
* @default
* @param EnableMenu
* @text 激活菜单项
* @parent ---菜单---
* @type boolean
* @on YES
* @off NO
* @desc 在菜单栏中'加护'是否是激活状态
* YES - true NO - false
* @default true
* @param InsertMenu
* @text 添加菜单项
* @parent ---菜单---
* @type boolean
* @on YES
* @off NO
* @desc 在菜单栏中是否添加'加护'
* YES - true NO - false
* @default true
* @param MenuCommandName
* @text 主菜单显示名称
* @parent ---菜单---
* @type text
* @desc 在主菜单上显示选项的名称,默认名称'加护'
* @default 加护
*
*
* @param ---技能菜单---
* @default
*
* @param EnableSMenu
* @text 激活角色技能菜单项
* @parent ---技能菜单---
* @type boolean
* @on YES
* @off NO
* @desc 在技能菜单栏中'加护'是否是激活状态
* YES - true NO - false
* @default false
* @param InsertSMenu
* @text 添加角色技能菜单项
* @parent ---技能菜单---
* @type boolean
* @on YES
* @off NO
* @desc 在角色技能菜单栏中是否添加'加护'选项
* YES - true NO - false
* @default false
* @param SMenuCommandName
* @text 角色技能菜单显示名称
* @parent ---技能菜单---
* @type text
* @desc 在角色技能菜单上显示选项的名称,默认名称'加护'
* @default 加护
*
* @param ---帮助窗口---
* @default
*
*
* @param HelpWindowX
* @text 帮助窗口x位置
* @parent ---帮助窗口---
* @type text
* @desc 出现帮助窗口x的位置,这可以是一段代码
* @default 0
*
* @param HelpWindowY
* @text 帮助窗口y位置
* @parent ---帮助窗口---
* @type text
* @desc 出现帮助窗口y的位置,这可以是一段代码
* @default 0
*
* @param HelpWindowW
* @text 帮助窗口宽度
* @parent ---帮助窗口---
* @type text
* @desc 出现帮助窗口宽度,这可以是一段代码
* @default Graphics.boxWidth
*
* @param HelpWindowH
* @text 帮助窗口行数
* @parent ---帮助窗口---
* @type number
* @desc 出现帮助窗口行数,这决定出现帮助窗口的高度
* @default 2
*
*
*
* @param ---加护窗口---
* @default
*
*
* @param FieldWindowX
* @text 加护窗口x位置
* @parent ---加护窗口---
* @type text
* @desc 出现加护窗口x的位置,这可以是一段代码
* @default 0
*
* @param FieldWindowY
* @text 加护窗口y位置
* @parent ---加护窗口---
* @type text
* @desc 出现加护窗口y的位置,这可以是一段代码
* @default this._helpWindow.height
*
* @param FieldWindowW
* @text 加护窗口宽度
* @parent ---加护窗口---
* @type text
* @desc 出现加护窗口宽度,这可以是一段代码
* @default Graphics.boxWidth / 3
*
* @param FieldWindowH
* @text 加护窗口高度
* @parent ---加护窗口---
* @type text
* @desc 出现加护窗口行数,这决定出现加护窗口的高度
* @default Graphics.boxHeight - this._helpWindow.height
*
*
* @param UnlockText
* @text 未解锁文字
* @parent ---加护窗口---
* @type text
* @desc 未解锁是出现的文字内容
* @default ---未解锁---
*
*
* @param MemoryText
* @text 占用文字
* @parent ---加护窗口---
* @type text
* @desc 未解锁是出现的文字内容
* @default ---占用---
*
*
*
* @param UnlockTextColor
* @text 未解锁文字颜色
* @parent ---加护窗口---
* @type text
* @desc 未解锁是出现的文字颜色
* @default #cc2222
*
*
* @param MemoryTextColor
* @text 占用文字颜色
* @parent ---加护窗口---
* @type text
* @desc 加护占用超过1格时,显示的占用文字的颜色
* @default #888888
*
*
*
* @param NoUnInstallColor
* @text 不可拆卸顔色
* @parent ---加护窗口---
* @type text
* @desc 不可拆卸的领域的文字颜色
* @default #999999
*
* @param UnlockHelpText
* @text 未解锁帮助文字
* @parent ---加护窗口---
* @type text
* @desc 选中未解锁文字时出现的帮助文本
* @default 封印中暂未解锁
*
* @param LockHelpText
* @text 解锁帮助文字
* @parent ---加护窗口---
* @type text
* @desc 选中解锁文字时出现的帮助文本
* @default 可添加加护
*
* @param FieldRectColor
* @text 底矩形框颜色
* @parent ---加护窗口---
* @type text
* @desc 底色框的颜色可以用rgba(x,x,x,x)或是#xxxxxx的方式来设置颜色
* @default rgba(30,30,90,0.4)
*
*
*
*
*
*
*
* @param ---加护道具窗口---
* @default
*
*
* @param FieldItemWindowX
* @text 加护道具窗口x位置
* @parent ---加护道具窗口---
* @type text
* @desc 出现加护道具窗口x的位置,这可以是一段代码
* @default Graphics.boxWidth / 3
*
* @param FieldItemWindowY
* @text 加护道具窗口y位置
* @parent ---加护道具窗口---
* @type text
* @desc 出现加护道具窗口y的位置,这可以是一段代码
* @default this._helpWindow.height
*
* @param FieldItemWindowW
* @text 加护道具窗口宽度
* @parent ---加护道具窗口---
* @type text
* @desc 出现加护道具窗口宽度,这可以是一段代码
* @default Graphics.boxWidth * 2 / 3
*
* @param FieldItemWindowH
* @text 加护道具窗口高度
* @parent ---加护道具窗口---
* @type text
* @desc 出现加护道具窗口行数,这决定出现加护道具窗口的高度
* @default Graphics.boxHeight - this._helpWindow.height
*
*
*
*
* @param ---数据信息---
* @default
*
*
* @param EnableActorFB
* @text 角色是否具备加护
* @parent ---数据信息---
* @type boolean
* @on YES
* @off NO
* @desc 设置角色是否默认具有加护能力
* YES - true NO - false
* @default true
*
*
* @param MaxFieldCount
* @text 最大加护槽数量
* @parent ---数据信息---
* @type text
* @desc 默认拥有的最大槽数量,请输入公式或是Infinite(无限),默认值为Infinite
* @default Infinite
*
* @param CurrentFieldCount
* @text 目前加护槽数量
* @parent ---数据信息---
* @type text
* @desc 角色通过自身属性,获取的目前加护槽的数量,这可以是一个公式
* @default Math.max(1,Math.min(Math.round(level/2),30));
*
* @param MemoryCount
* @text 占用量
* @parent ---数据信息---
* @type number
* @desc 这是加护道具占用的卡槽数量,输入整数,默认值为1
* @default 1
*
*
*
*
*
*
* @param ---音效---
* @default
*
*
* @param NoFieldSound
* @text 不存在加护音效
* @parent ---音效---
* @dir audio/se
* @type file
* @desc 不存在加护产生的声音,请填写audio/se文件夹中的文件名,不包含m4a.ogg的后缀名
* @default Cancel2
*
* @param NoFieldVolume
* @text 不存在加护音量
* @parent ---音效---
* @type number
* @min 0
* @desc 不存在加护产生的音量,默认值100
* @default 100
*
* @param NoFieldPitch
* @text 不存在加护音调
* @parent ---音效---
* @type number
* @min 0
* @desc 不存在加护产生的音调,默认值100
* @default 100
*
* @param NoFieldPan
* @text 不存在加护声道
* @parent ---音效---
* @type number
* @desc 不存在加护产生的声道,默认值0
* @default 0
*
*
* @param UnableSound
* @text 无法卸载加护音效
* @parent ---音效---
* @dir audio/se
* @type file
* @desc 无法卸载加护产生的声音,请填写audio/se文件夹中的文件名,不包含m4a.ogg的后缀名
* @default Knock
*
* @param UnableVolume
* @text 无法卸载加护音量
* @parent ---音效---
* @type number
* @min 0
* @desc 无法卸载加护产生的音量,默认值100
* @default 100
*
* @param UnablePitch
* @text 无法卸载加护音调
* @parent ---音效---
* @type number
* @min 0
* @desc 无法卸载加护产生的音调,默认值100
* @default 100
*
* @param UnablePan
* @text 无法卸载加护声道
* @parent ---音效---
* @type number
* @desc 无法卸载加护产生的声道,默认值0
* @default 0
*
*
*
* @param NoInstallSound
* @text 无法安装加护音效
* @parent ---音效---
* @dir audio/se
* @type file
* @desc 无法安装加护产生的声音,请填写audio/se文件夹中的文件名,不包含m4a.ogg的后缀名
* @default Buzzer1
*
* @param NoInstallVolume
* @text 无法安装加护音量
* @parent ---音效---
* @type number
* @min 0
* @desc 无法安装加护产生的音量,默认值100
* @default 100
*
* @param NoInstallPitch
* @text 无法安装加护音调
* @parent ---音效---
* @type number
* @min 0
* @desc 无法安装加护产生的音调,默认值100
* @default 100
*
* @param NoInstallPan
* @text 无法安装加护声道
* @parent ---音效---
* @type number
* @desc 无法安装加护产生的声道,默认值0
* @default 0
*
*
* @param InSuccessSound
* @text 安装成功加护音效
* @parent ---音效---
* @dir audio/se
* @type file
* @desc 安装成功加护产生的声音,请填写audio/se文件夹中的文件名,不包含m4a.ogg的后缀名
* @default Equip1
*
* @param InSuccessVolume
* @text 安装成功加护音量
* @parent ---音效---
* @type number
* @min 0
* @desc 安装成功加护产生的音量,默认值100
* @default 100
*
* @param InSuccessPitch
* @text 安装成功加护音调
* @parent ---音效---
* @type number
* @min 0
* @desc 安装成功加护产生的音调,默认值100
* @default 100
*
* @param InSuccessPan
* @text 安装成功加护声道
* @parent ---音效---
* @type number
* @desc 安装成功加护产生的声道,默认值0
* @default 0
*
*
* @param UnSuccessSound
* @text 卸载成功加护音效
* @parent ---音效---
* @dir audio/se
* @type file
* @desc 卸载成功加护产生的声音,请填写audio/se文件夹中的文件名,不包含m4a.ogg的后缀名
* @default Equip2
*
* @param UnSuccessVolume
* @text 卸载成功加护音量
* @parent ---音效---
* @type number
* @min 0
* @desc 卸载成功加护产生的音量,默认值100
* @default 100
*
* @param UnSuccessPitch
* @text 卸载成功加护音调
* @parent ---音效---
* @type number
* @min 0
* @desc 卸载成功加护产生的音调,默认值100
* @default 100
*
* @param UnSuccessPan
* @text 卸载成功加护声道
* @parent ---音效---
* @type number
* @desc 卸载成功加护产生的声道,默认值0
* @default 0
*
*/
var LiuYue = LiuYue || {};
LiuYue.LiuYue_FieldBless = true;//插件启动
var Zzy = Zzy || {};
Zzy.FBF = Zzy.FBF || {};
Zzy.FBF.version = 1.08;
Zzy.Parameters = PluginManager.parameters('LiuYue_FieldBless');
Zzy.Param = Zzy.Param || {};
Zzy.Param.FBFEnableMenu = eval(String(Zzy.Parameters['EnableMenu']));
Zzy.Param.FBFInsertMenu = eval(String(Zzy.Parameters['InsertMenu']));
Zzy.Param.FBFMenuCommandName = String(Zzy.Parameters['MenuCommandName']);
Zzy.Param.FBFEnableSMenu = eval(String(Zzy.Parameters['EnableSMenu']));
Zzy.Param.FBFInsertSMenu = eval(String(Zzy.Parameters['InsertSMenu']));
Zzy.Param.FBFSMenuCommandName = String(Zzy.Parameters['SMenuCommandName']);
Zzy.Param.FBFHelpWindowX = String(Zzy.Parameters['HelpWindowX']);//帮助窗口x位置
Zzy.Param.FBFHelpWindowY = String(Zzy.Parameters['HelpWindowY']);//帮助窗口y位置
Zzy.Param.FBFHelpWindowW = String(Zzy.Parameters['HelpWindowW']);//帮助窗口宽度
Zzy.Param.FBFHelpWindowH = parseInt(Zzy.Parameters['HelpWindowH']);//帮助窗口行数
Zzy.Param.FBFFieldWindowX = String(Zzy.Parameters['FieldWindowX']);//加护窗口x位置
Zzy.Param.FBFFieldWindowY = String(Zzy.Parameters['FieldWindowY']);//加护窗口y位置
Zzy.Param.FBFFieldWindowW = String(Zzy.Parameters['FieldWindowW']);//加护窗口宽度
Zzy.Param.FBFFieldWindowH = String(Zzy.Parameters['FieldWindowH']);//加护窗口高度
Zzy.Param.FBFFieldItemWindowX = String(Zzy.Parameters['FieldItemWindowX']);//加护道具窗口x位置
Zzy.Param.FBFFieldItemWindowY = String(Zzy.Parameters['FieldItemWindowY']);//加护道具窗口y位置
Zzy.Param.FBFFieldItemWindowW = String(Zzy.Parameters['FieldItemWindowW']);//加护道具窗口宽度
Zzy.Param.FBFFieldItemWindowH = String(Zzy.Parameters['FieldItemWindowH']);//加护道具窗口高度
Zzy.Param.FBFUnlockText = String(Zzy.Parameters['UnlockText']);//未解锁文字
Zzy.Param.FBFUnlockTextColor = String(Zzy.Parameters['UnlockTextColor']);//未解锁文字颜色
Zzy.Param.FBFMemoryText = String(Zzy.Parameters['MemoryText']);//占用文字
Zzy.Param.FBFMemoryTextColor = String(Zzy.Parameters['MemoryTextColor']);//占用文字颜色
Zzy.Param.FBFNoUnInstallColor = String(Zzy.Parameters['NoUnInstallColor']);//不可拆卸的领域的文字颜色
Zzy.Param.FBFUnlockHelpText = String(Zzy.Parameters['UnlockHelpText']);//未解锁帮助文字
Zzy.Param.FBFLockHelpText = String(Zzy.Parameters['LockHelpText']);//解锁帮助文字
Zzy.Param.FBFFieldRectColor = String(Zzy.Parameters['FieldRectColor']);//底矩形框颜色
Zzy.Param.FBFEnableActorFB = eval(String((Zzy.Parameters['EnableActorFB'])));//角色是否具备加护
Zzy.Param.FBFMaxFieldCount = String(Zzy.Parameters['MaxFieldCount']);//最大加护槽数量
Zzy.Param.FBFCurrentFieldCount = String(Zzy.Parameters['CurrentFieldCount']);//目前加护槽数量
Zzy.Param.FBFMemoryCount = parseInt(Zzy.Parameters['MemoryCount']);//帮助窗口行数
//----------------------------------------------------声音----------------------------------------------------------
Zzy.FBF.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;
}
//SE
Zzy.Param.FBFNoFieldSound = String(Zzy.Parameters['NoFieldSound']);//FBF音效
Zzy.Param.FBFNoFieldVolume = parseInt(Zzy.Parameters['NoFieldVolume']);//FBF音量
Zzy.Param.FBFNoFieldPitch = parseInt(Zzy.Parameters['NoFieldPitch']);//FBF音调
Zzy.Param.FBFNoFieldPan = parseInt(Zzy.Parameters['NoFieldPan']);//FBF声道
Zzy.Param.FBFNoFieldSE = Zzy.FBF.MakeSE(Zzy.Param.FBFNoFieldSound,Zzy.Param.FBFNoFieldVolume,Zzy.Param.FBFNoFieldPitch,Zzy.Param.FBFNoFieldPan);
Zzy.Param.FBFUnableSound = String(Zzy.Parameters['UnableSound']);//FBF音效
Zzy.Param.FBFUnableVolume = parseInt(Zzy.Parameters['UnableVolume']);//FBF音量
Zzy.Param.FBFUnablePitch = parseInt(Zzy.Parameters['UnablePitch']);//FBF音调
Zzy.Param.FBFUnablePan = parseInt(Zzy.Parameters['UnablePan']);//FBF声道
Zzy.Param.FBFUnableSE = Zzy.FBF.MakeSE(Zzy.Param.FBFUnableSound,Zzy.Param.FBFUnableVolume,Zzy.Param.FBFUnablePitch,Zzy.Param.FBFUnablePan);
Zzy.Param.FBFNoInstallSound = String(Zzy.Parameters['NoInstallSound']);//FBF音效
Zzy.Param.FBFNoInstallVolume = parseInt(Zzy.Parameters['NoInstallVolume']);//FBF音量
Zzy.Param.FBFNoInstallPitch = parseInt(Zzy.Parameters['NoInstallPitch']);//FBF音调
Zzy.Param.FBFNoInstallPan = parseInt(Zzy.Parameters['NoInstallPan']);//FBF声道
Zzy.Param.FBFNoInstallSE = Zzy.FBF.MakeSE(Zzy.Param.FBFNoInstallSound,Zzy.Param.FBFNoInstallVolume,Zzy.Param.FBFNoInstallPitch,Zzy.Param.FBFNoInstallPan);
Zzy.Param.FBFInSuccessSound = String(Zzy.Parameters['InSuccessSound']);//FBF音效
Zzy.Param.FBFInSuccessVolume = parseInt(Zzy.Parameters['InSuccessVolume']);//FBF音量
Zzy.Param.FBFInSuccessPitch = parseInt(Zzy.Parameters['InSuccessPitch']);//FBF音调
Zzy.Param.FBFInSuccessPan = parseInt(Zzy.Parameters['InSuccessPan']);//FBF声道
Zzy.Param.FBFInSuccessSE = Zzy.FBF.MakeSE(Zzy.Param.FBFInSuccessSound,Zzy.Param.FBFInSuccessVolume,Zzy.Param.FBFInSuccessPitch,Zzy.Param.FBFInSuccessPan);
Zzy.Param.FBFUnSuccessSound = String(Zzy.Parameters['UnSuccessSound']);//FBF音效
Zzy.Param.FBFUnSuccessVolume = parseInt(Zzy.Parameters['UnSuccessVolume']);//FBF音量
Zzy.Param.FBFUnSuccessPitch = parseInt(Zzy.Parameters['UnSuccessPitch']);//FBF音调
Zzy.Param.FBFUnSuccessPan = parseInt(Zzy.Parameters['UnSuccessPan']);//FBF声道
Zzy.Param.FBFUnSuccessSE = Zzy.FBF.MakeSE(Zzy.Param.FBFUnSuccessSound,Zzy.Param.FBFUnSuccessVolume,Zzy.Param.FBFUnSuccessPitch,Zzy.Param.FBFUnSuccessPan);
Zzy.Param.FBFAllSE = [];
Zzy.Param.FBFAllSE = [undefined,
Zzy.Param.FBFNoFieldSE,Zzy.Param.FBFUnableSE,Zzy.Param.FBFNoInstallSE,
Zzy.Param.FBFInSuccessSE,Zzy.Param.FBFUnSuccessSE
];
//=============================================================================
//Game_System_initialize
//=============================================================================
Zzy.FBF.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function()
{
Zzy.FBF.Game_System_initialize.call(this);
this.ZzyFBFInitData();//初始化数据
this.ZzyFBFSetData();//设置数据
};
Game_System.prototype.ZzyFBFInitData = function()
{
this._ZzyFBFEnableMenu = Zzy.Param.FBFEnableMenu;
this._ZzyFBFInsertMenu = Zzy.Param.FBFInsertMenu;
this._ZzyFBFMenuCommandName = Zzy.Param.FBFMenuCommandName;
this._ZzyFBFEnableSMenu = Zzy.Param.FBFEnableSMenu;
this._ZzyFBFInsertSMenu = Zzy.Param.FBFInsertSMenu;
this._ZzyFBFSMenuCommandName = Zzy.Param.FBFSMenuCommandName;
this._ZzyFBFEnableActorFB = Zzy.Param.FBFEnableActorFB; //角色是否具备加护
this._ZzyFBFMaxFieldCount = Zzy.Param.FBFMaxFieldCount;//最大加护槽数量
this._ZzyFBFCurrentFieldCount = Zzy.Param.FBFCurrentFieldCount;//目前加护槽数量
this._ZzyFBFMemoryCount = Zzy.Param.FBFMemoryCount;//占用量
this._ZzyFBFFieldItemIdArr = [];//存在的加护
this._ZzyFBFActorsUseArr = [];//使用中的加护
this._ZzyFBFSelectActorIndex = 0;//选择角色的下标
this._ZzyFBFActorsMaxCountArr = [];//角色未使用容量计数
}
Game_System.prototype.GetZzyFBFEnableMenu = function()
{
if(this._ZzyFBFEnableMenu === undefined)
{this._ZzyFBFEnableMenu = Zzy.Param.FBFEnableMenu;}
return this._ZzyFBFEnableMenu;
}
Game_System.prototype.SetZzyFBFEnableMenu = function(value)
{
this._ZzyFBFEnableMenu = value;
}
Game_System.prototype.GetZzyFBFInsertMenu = function()
{
if(this._ZzyFBFInsertMenu === undefined)
{this._ZzyFBFInsertMenu = Zzy.Param.FBFInsertMenu;}
return this._ZzyFBFInsertMenu;
}
Game_System.prototype.SetZzyFBFInsertMenu = function(value)
{
this._ZzyFBFInsertMenu = value;
}
Game_System.prototype.GetZzyFBFMenuCommandName = function()
{
if(this._ZzyFBFMenuCommandName === undefined)
{this._ZzyFBFMenuCommandName = Zzy.Param.FBFMenuCommandName;}
return this._ZzyFBFMenuCommandName;
}
Game_System.prototype.SetZzyFBFMenuCommandName = function(value)
{
this._ZzyFBFMenuCommandName = value;
}
Game_System.prototype.GetZzyFBFEnableSMenu = function()
{
if(this._ZzyFBFEnableSMenu === undefined)
{this._ZzyFBFEnableSMenu = Zzy.Param.FBFEnableSMenu;}
return this._ZzyFBFEnableSMenu;
}
Game_System.prototype.SetZzyFBFEnableSMenu = function(value)
{
this._ZzyFBFEnableSMenu = value;
}
Game_System.prototype.GetZzyFBFInsertSMenu = function()
{
if(this._ZzyFBFInsertSMenu === undefined)
{this._ZzyFBFInsertSMenu = Zzy.Param.FBFInsertSMenu;}
return this._ZzyFBFInsertSMenu;
}
Game_System.prototype.SetZzyFBFInsertSMenu = function(value)
{
this._ZzyFBFInsertSMenu = value;
}
Game_System.prototype.GetZzyFBFSMenuCommandName = function()
{
if(this._ZzyFBFSMenuCommandName === undefined)
{this._ZzyFBFSMenuCommandName = Zzy.Param.FBFSMenuCommandName;}
return this._ZzyFBFSMenuCommandName;
}
Game_System.prototype.SetZzyFBFSMenuCommandName = function(value)
{
this._ZzyFBFSMenuCommandName = value;
}
Game_System.prototype.GetZzyFBFEnableActorFB = function()
{
if(this._ZzyFBFEnableActorFB === undefined)
{this._ZzyFBFEnableActorFB = Zzy.Param.FBFEnableActorFB;}
return this._ZzyFBFEnableActorFB;
}
Game_System.prototype.SetZzyFBFEnableActorFB = function(value)
{
this._ZzyFBFEnableActorFB = value;
}
Game_System.prototype.GetZzyFBFMaxFieldCount = function()
{
if(this._ZzyFBFMaxFieldCount === undefined)
{this._ZzyFBFMaxFieldCount = Zzy.Param.FBFMaxFieldCount;}
return this._ZzyFBFMaxFieldCount;
}
Game_System.prototype.SetZzyFBFMaxFieldCount = function(value)
{
this._ZzyFBFMaxFieldCount = value;
}
Game_System.prototype.GetZzyFBFCurrentFieldCount = function()
{
if(this._ZzyFBFCurrentFieldCount === undefined)
{this._ZzyFBFCurrentFieldCount = Zzy.Param.FBFCurrentFieldCount;}
return this._ZzyFBFCurrentFieldCount;
}
Game_System.prototype.SetZzyFBFCurrentFieldCount = function(value)
{
this._ZzyFBFCurrentFieldCount = value;
}
Game_System.prototype.GetZzyFBFMemoryCount = function()
{
if(this._ZzyFBFMemoryCount === undefined)
{this._ZzyFBFMemoryCount = Zzy.Param.FBFMemoryCount;}
return this._ZzyFBFMemoryCount;
}
Game_System.prototype.SetZzyFBFMemoryCount = function(value)
{
this._ZzyFBFMemoryCount = value;
}
Game_System.prototype.GetZzyFBFFieldItemIdArr = function()
{
if(this._ZzyFBFFieldItemIdArr === undefined)
{
this._ZzyFBFFieldItemIdArr = [];
this.ZzyFBFSetData();//设置初始化的数据信息
}
return this._ZzyFBFFieldItemIdArr;
}
Game_System.prototype.GetZzyFBFActorsUseArr = function()
{
if(this._ZzyFBFActorsUseArr === undefined)
{this._ZzyFBFActorsUseArr = [];}
return this._ZzyFBFActorsUseArr;
}
Game_System.prototype.GetZzyFBFSelectActorIndex = function()
{
if(this._ZzyFBFSelectActorIndex === undefined)
{this._ZzyFBFSelectActorIndex = 0;}
return this._ZzyFBFSelectActorIndex;
}
Game_System.prototype.SetZzyFBFSelectActorIndex = function(value)
{
this._ZzyFBFSelectActorIndex = value;
}
Game_System.prototype.GetZzyFBFActorsMaxCountArr = function()
{
if(this._ZzyFBFActorsMaxCountArr === undefined)
{this._ZzyFBFActorsMaxCountArr = [];}
return this._ZzyFBFActorsMaxCountArr;
}
Game_System.prototype.SetZzyFBFActorsMaxCountArr = function(actorId,count)
{
this.GetZzyFBFActorsMaxCountArr()[actorId] = count;
}
Game_System.prototype.getZzyFBFActorsMaxCountArr = function(actorId)
{
var arr = this.GetZzyFBFActorsMaxCountArr();
return arr[actorId];
}
Game_System.prototype.GetZzyFBFActorUseArr = function(actorId)//角色的加护
{
if(!this.GetZzyFBFActorsUseArr()[actorId])
{this._ZzyFBFActorsUseArr[actorId] = [];}
return this._ZzyFBFActorsUseArr[actorId];
}
Game_System.prototype.GetZzyFBFActorFieldUseArr = function(actorId)//返回包括卡牌在内的存在值
{
var arr = this.GetZzyFBFActorUseArr(actorId);
var reArr = [];
for(var i=0;i<arr.length;i++)
{
if(arr[i])
{
var item = $dataItems[arr[i]];
reArr.push(item);
}
}
return reArr;
}
Game_System.prototype.UpdateZzyFBFActorUseArr = function(actorId)//更新角色的加护
{
var surplusArr = [];
surplusArr = this.KeepZzyFBFCurrentMax(actorId);//超标卸载
//重新放回背包中
if(surplusArr && surplusArr.length)
{
for(var i=0;i<surplusArr.length;i++)
{
$gameParty.gainItem(surplusArr[i],1);//存储
}
}
}
Game_System.prototype.UpdateAllZzyFBFActorUseArr = function()//更新全部的角色加护
{
var arr = $gameParty._actors;
for(var i=0;i<arr.length;i++)
{
this.UpdateZzyFBFActorUseArr(arr[i]);
}
}
Game_System.prototype.KeepZzyFBFCurrentMax = function(actorId)//保持小于最大长度
{
var tMax = this.GetZzyFBFActorFinalMaxCount(actorId);
if(tMax === -1)return undefined;
//计算目前卡片是否有超越
var surplusArr = [];
var fArr = this.GetZzyFBFActorUseArr(actorId);
var len = fArr.length;
if(len > tMax)//超过位数
{
//在位数位置向前遍历并t掉内容
var len2 = tMax-1;
for(var i=len2;i>=0;i--)
{
if(fArr[i])//并非undefined null false
{
var item = $dataItems[fArr[i]];
var count = this.GetZzyFBFFieldBlessMemory(item);//获取占用量
if(count > tMax - i)//超过了占用量
{
surplusArr.push(this.UninstallZzyFBFField(fArr,i))//卸载
}
}
}
}
for(var i=tMax;i<=len-1;i++)
{
if(fArr[i])
{
surplusArr.push(this.UninstallZzyFBFField(fArr,i))//卸载
}
}
return surplusArr;
}
Game_System.prototype.UninstallZzyFBFField = function(arr,index)//卸载指定下标
{
if(arr[index] === undefined || arr[index] === null || arr[index] === false || arr[index] === 0){return;}
var item = $dataItems[arr[index]];
var count = this.GetZzyFBFFieldBlessMemory(item);
for(var i=0;i<count;i++)
{
arr[i+index] = undefined;
}
return item;
}
Game_System.prototype.ZzyFBFSetData = function()
{
var len = $dataItems.length;
for(var i=0;i<len;i++)
{
var item = $dataItems[i];
if(item && item.zzyFBF && item.zzyFBF.enable)
{
this.PushZzyFBFFieldArr(item.id);
}
}
}
Game_System.prototype.PushZzyFBFFieldArr = function(itemId)
{
this.GetZzyFBFFieldItemIdArr().push(itemId);
}
Game_System.prototype.IsZzyFBFActorHaveFieldBless = function(actorId)//通过角色ID返回角色是否具备加护能力
{
//判断角色是否拥有加护能力
var data = $dataActors[actorId];
if(data && data.zzyFBF)
{
if(data.zzyFBF.enable === true)
{return true;}
else if(data.zzyFBF.enable === false)
{return false;}
}
return this.GetZzyFBFEnableActorFB();
}
Game_System.prototype.GetZzyFBFActorMaxCount = function(actorId)//通过角色ID返回角色最大领域数量
{
var data = $dataActors[actorId];
var maxCount = 0;
if(data && data.zzyFBF)
{
if(data.zzyFBF.maxCount)
{
if(data.zzyFBF.maxCount === 'Infinite')return -1;
var actor = $gameActors.actor(actorId);
maxCount = this.EvalZzyFBFFormula1(data.zzyFBF.maxCount,actor);
maxCount = Zzy.FBF.KeepNumber(maxCount);
return maxCount;
}
}
var fieldCount = this.GetZzyFBFMaxFieldCount();
if(fieldCount === 'Infinite')
{return -1;}//无限标记
maxCount = this.EvalZzyFBFFormula1(fieldCount,undefined);
maxCount = Zzy.FBF.KeepNumber(maxCount);
return maxCount;
}
Game_System.prototype.GetZzyFBFActorFinalMaxCount = function(actorId)//计算最终值-最大加护槽
{
var tempMaxCount = this.GetZzyFBFActorMaxCount(actorId);
if(tempMaxCount === -1)return tempMaxCount;
var actorData = $dataActors[actorId];
var actor = $gameActors.actor(actorId);
var actors = actorData;//角色加层
var classs = $dataClasses[actors.classId];//职业加层
var equipsArr = actor.equips();//武器,护甲加层
var skillsArr = actor.skills();//技能加层
var tArr = [[actors],[classs],equipsArr,skillsArr];
var totalMax = 0;
for(var i=0;i<tArr.length;i++)
{
totalMax += this.ZzyFBFCalculationMaxCount(tArr[i],actorId);
}
var result = Math.max(0,totalMax+tempMaxCount);//防止小于0
return result;
}
Game_System.prototype.GetZzyFBFActorFinalCurrentCount = function(actorId)//计算最终值-开启的加护槽
{
var tempCurrentCount = this.GetZzyFBFActorCurrentCount(actorId);//本身
var maxCount = this.GetZzyFBFActorFinalMaxCount(actorId);
var actorData = $dataActors[actorId];
var actor = $gameActors.actor(actorId);
var actors = actorData;//角色加层
var classs = $dataClasses[actors.classId];//职业加层
var equipsArr = actor.equips();//武器,护甲加层
var skillsArr = actor.skills();//技能加层
var tArr = [[actors],[classs],equipsArr,skillsArr];
var extraCount = 0;
for(var i=0;i<tArr.length;i++)
{
extraCount += this.ZzyFBFCalculationCurrentCount(tArr[i],actorId);
}
var result = 0;
if(maxCount === -1)
{
result = Math.max(0,tempCurrentCount+extraCount);
this.SetZzyFBFActorsMaxCountArr(actorId,result);
return result;
}
result = Math.min(maxCount,Math.max(0,tempCurrentCount+extraCount));
this.SetZzyFBFActorsMaxCountArr(actorId,result);
return result;
}
Game_System.prototype.ZzyFBFCalculationCurrentCount = function(arr,actorId)
{
var len = arr.length;
var totalValue = 0;
var actor = $gameActors.actor(actorId);
var count = 0;
for(var i=0;i<len;i++)
{
if(arr[i] && arr[i].zzyFBF)
{
if(arr[i].zzyFBF.eCount)
{
count = this.EvalZzyFBFFormula1(arr[i].zzyFBF.eCount,actor);
totalValue += Zzy.FBF.KeepNumber(count);
}
}
}
return totalValue;
}
Game_System.prototype.ZzyFBFCalculationMaxCount = function(arr,actorId)
{
var len = arr.length;
var totalValue = 0;
var actor = $gameActors.actor(actorId);
var count = 0;
for(var i=0;i<len;i++)
{
if(arr[i] && arr[i].zzyFBF)
{
if(arr[i].zzyFBF.emCount)
{
count = this.EvalZzyFBFFormula1(arr[i].zzyFBF.emCount,actor);
totalValue += Zzy.FBF.KeepNumber(count);
}
}
}
return totalValue;
}
Game_System.prototype.GetZzyFBFActorCurrentCount = function(actorId)//通过角色ID返回角色目前领域数量
{
var data = $dataActors[actorId];
var actor = $gameActors.actor(actorId);
//首先获取最大领域
var maxCount = this.GetZzyFBFActorFinalMaxCount(actorId);
var count = 0;
if(data && data.zzyFBF)
{
if(data.zzyFBF.currentCount)
{
count = this.EvalZzyFBFFormula1(data.zzyFBF.maxCount,actor);
count = Zzy.FBF.KeepNumber(count);
if(maxCount !== 1)
{count = count > maxCount ? maxCount : count;}
return count;
}
}
count = this.EvalZzyFBFFormula1(this.GetZzyFBFCurrentFieldCount(),actor);
count = Zzy.FBF.KeepNumber(count);
if(maxCount !== -1)
{count = count > maxCount ? maxCount : count;}
return count;
}
Game_System.prototype.EvalZzyFBFFormula1 = function(formula,infor,infor2)//转换
{
var actor = infor;//角色
var a = actor;
var target = infor2 ? infor2 : undefined;//目标
var b = target;
var variables = $gameVariables._data;//全局变量
var switchs = $gameSwitches._data;//全局开关
var v = variables;
var V = variables;
var s = switchs;
var S = switchs;
var level = actor ? actor.level : undefined;//等级
var usecount = actor ? this.ZzyFBFUseFieldCount(actor.actorId()) : undefined;
var nullcount = actor ? this.ZzyFBFNullFieldCount(actor.actorId()) : undefined;
return eval(formula);
}
Game_System.prototype.GetZzyFBFFieldBlessMemory = function(item)//返回对应的占用量
{
if(item && item.zzyFBF)
{
if(item.zzyFBF.memory !== undefined)
{
return item.zzyFBF.memory;
}
}
return this.GetZzyFBFMemoryCount();
}
Game_System.prototype.GetZzyFBFFieldBlessNoInstall = function(item)
{
if(item && item.zzyFBF)
{
if(item.zzyFBF.noInstall)
{return true;}
}
return false;
}
Game_System.prototype.EnableZzyFBFFieldOfActor = function(actorId,item)//判断是否对这个角色有效
{
if(item && item.zzyFBF)
{
var actor = $gameActors.actor(actorId);
var classId = actor._classId
if(item.zzyFBF.canUseEval)
{
return this.EvalZzyFBFFormula1(item.zzyFBF.canUseEval,actor);
}
//判断角色包含名单
if(item.zzyFBF.canUseA)
{
if(item.zzyFBF.canUseA.contains(actorId)){return true;}
else{return false;}
}
if(item.zzyFBF.noCanUseA)
{
if(item.zzyFBF.noCanUseA.contains(actorId)){return false;}
else{return true;}
}
//判断职业包含名单
if(item.zzyFBF.canUseC)
{
if(item.zzyFBF.canUseC.contains(classId)){return true;}
else{return false;}
}
if(item.zzyFBF.noCanUseC)
{
if(item.zzyFBF.noCanUseC.contains(classId)){return false;}
else{return true;}
}
return true;
}
return false;
}
Game_System.prototype.InstallZzyFBFField = function(actorId,index,item)//安装加护
{
var actArr = this.GetZzyFBFActorUseArr(actorId);
var memory = this.GetZzyFBFFieldBlessMemory(item);
actArr[index] = item.id;
if(memory > 1)
{
for(var i=1;i<memory;i++)
{
actArr[index+i] = false;
}
}
}
Game_System.prototype.UnInstallZzyFBFField = function(actorId,index)//卸载加护
{
var actArr = this.GetZzyFBFActorUseArr(actorId);
var item = $dataItems[actArr[index]];
var memory = this.GetZzyFBFFieldBlessMemory(item);
actArr[index] = undefined;
if(memory > 1)
{
for(var i=1;i<memory;i++)
{
actArr[index+i] = undefined;
}
}
}
Game_System.prototype.ZzyFBFForceUnInstallAll = function(actorId)//强制卸载所有加护
{
var items = this.GetZzyFBFActorFieldUseArr(actorId);
for(var i=0;i<items.length;i++)
{
var item = items[i];
$gameParty.gainItem(item,1);
}
var sarr = this.GetZzyFBFActorUseArr(actorId);
for(var i=0;i<sarr.length;i++)
{
if(sarr[i] || sarr[i] === false)
{
sarr[i] = undefined;
}
}
}
Game_System.prototype.ZzyFBFUseFieldCount = function(actorId)//使用中槽数量
{
var items = this.GetZzyFBFActorFieldUseArr(actorId);
var len = items.length;
var count = 0;
for(var i=0;i<len;i++)
{
if(items[i])
{
var memory = this.GetZzyFBFFieldBlessMemory(items[i]);
count += memory;
}
}
return count;
}
Game_System.prototype.ZzyFBFNullFieldCount = function(actorId)//未使用中槽数量
{
var useCount = this.ZzyFBFUseFieldCount(actorId);
var maxCount = this.getZzyFBFActorsMaxCountArr(actorId);
maxCount = maxCount ? maxCount : 0;
var count = maxCount - useCount;
count = count > 0 ? count : 0;
return count;
}
//=============================================================================
//Game_Interpreter
//=============================================================================
Zzy.FBF.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args)//插件命令
{
Zzy.FBF.Game_Interpreter_pluginCommand.call(this,command,args);
if(command === 'ZzyFBF')
{
this.ZzyFBFCommand(args);
}
}
Game_Interpreter.prototype.ZzyFBFCommand = function(args)//命令大全
{
var command = String(args[0]);
switch(command)
{
case 'EnableMenu':
var enable = eval(String(args[1]));
Zzy.FBF.EnableMenu(enable);
//$gameSystem.SetZzyFBFEnableMenu(enable);
break;
case 'InsertMenu':
var enable = eval(String(args[1]));
Zzy.FBF.InsertMenu(enable);
//$gameSystem.SetZzyFBFInsertMenu(enable);
break;
case 'CommandName':
var commandText = String(args[1]);
Zzy.FBF.CommandName(commandText);
//$gameSystem.SetZzyFBFMenuCommandName(commandText);
break;
case 'EnableSMenu':
var enable = eval(String(args[1]));
Zzy.FBF.EnableSMenu(enable);
//$gameSystem.SetZzyFBFEnableSMenu(enable);
break;
case 'InsertSMenu':
var enable = eval(String(args[1]));
Zzy.FBF.InsertSMenu(enable);
//$gameSystem.SetZzyFBFInsertSMenu(enable);
break;
case 'SCommandName':
var commandText = String(args[1]);
Zzy.FBF.SCommandName(commandText);
//$gameSystem.SetZzyFBFSMenuCommandName(commandText);
break;
case 'OpenActor':
var actorId = parseInt(args[1]);
Zzy.FBF.OpenActor(actorId);
//Zzy.FBF.OpenFieldOfActor(actorId);
break;
case 'OpenParty':
var index = parseInt(args[1]);
Zzy.FBF.OpenParty(index);
//Zzy.FBF.OpenFieldOfParty(index);
break;
case 'EnableActorFB':
var enable = eval(String(args[1]));
Zzy.FBF.EnableActorFB(enable);
//$gameSystem.SetZzyFBFEnableActorFB(enable);
break;
case 'MaxCount':
var formula = String(args[1]);
Zzy.FBF.MaxCount(formula);
//$gameSystem.SetZzyFBFMaxFieldCount(formula);
break;
case 'CurrentCount':
var formula = String(args[1]);
Zzy.FBF.CurrentCount(formula);
//$gameSystem.SetZzyFBFCurrentFieldCount(formula);
break;
case 'MemoryCount':
var count = parseInt(args[1]);
Zzy.FBF.MemoryCount(count);
//$gameSystem.SetZzyFBFMemoryCount(count);
break;
case 'ForceUnInstallAll':
var actorId = parseInt(args[1]);
Zzy.FBF.ForceUnInstallAll(actorId);
//$gameSystem.ZzyFBFForceUnInstallAll(actorId);
break;
}
}
//=================================================================
//Window_MenuCommand
//=================================================================
Zzy.FBF.Window_MenuCommand_addOriginalCommands = Window_MenuCommand.prototype.addOriginalCommands;
Window_MenuCommand.prototype.addOriginalCommands = function()
{
Zzy.FBF.Window_MenuCommand_addOriginalCommands.call(this);
var isEnable = $gameSystem.GetZzyFBFEnableMenu();
var isInsert = $gameSystem.GetZzyFBFInsertMenu();
if(isInsert)
{
this.addCommand($gameSystem.GetZzyFBFMenuCommandName(), 'ZzyFBFBless', isEnable);
}
};
//=================================================================
//Window_SkillType
//=================================================================
Zzy.FBF.Window_SkillType_makeCommandList = Window_SkillType.prototype.makeCommandList;
Window_SkillType.prototype.makeCommandList = function()
{
Zzy.FBF.Window_SkillType_makeCommandList.call(this);
if(this._actor)
{
if(!!$gameSystem.GetZzyFBFInsertSMenu())
{
var isEnable = $gameSystem.GetZzyFBFEnableSMenu();
this.addCommand($gameSystem.GetZzyFBFSMenuCommandName(), 'ZzyFBFBless',isEnable);
}
}
};
//=================================================================
//Scene_Skill
//=================================================================
Zzy.FBF.Scene_Skill_createSkillTypeWindow = Scene_Skill.prototype.createSkillTypeWindow;
Scene_Skill.prototype.createSkillTypeWindow = function()
{
Zzy.FBF.Scene_Skill_createSkillTypeWindow.call(this);
this._skillTypeWindow.setHandler('ZzyFBFBless', this.ZzyFBFCallField.bind(this));
};
Scene_Skill.prototype.ZzyFBFCallField = function()
{
if(this.JudgZzyFBFHaveFieldBless())//判断角色是否具备领域
{
this.setZzyFBFSelectActorId();//选择中ID
SceneManager.push(Scene_ZzyFBF);return;//压入场景
}
else
{
this.ReturnZzyFBFSkillWindow();//返回技能场景
}
}
Scene_Skill.prototype.JudgZzyFBFHaveFieldBless = function()
{
return $gameSystem.IsZzyFBFActorHaveFieldBless(this._actor.actorId());
}
Scene_Skill.prototype.ReturnZzyFBFSkillWindow = function()
{
this._skillTypeWindow.activate();
}
Scene_Skill.prototype.setZzyFBFSelectActorId = function()
{
$gameSystem.SetZzyFBFSelectActorIndex(this._actor.actorId());
}
//=================================================================
//Scene_Menu
//=================================================================
Zzy.FBF.Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
Scene_Menu.prototype.createCommandWindow = function()
{
Zzy.FBF.Scene_Menu_createCommandWindow.call(this);
this._commandWindow.setHandler('ZzyFBFBless', this.commandPersonal.bind(this));
};
Zzy.FBF.Scene_Menu_onPersonalOk = Scene_Menu.prototype.onPersonalOk;
Scene_Menu.prototype.onPersonalOk = function()
{
if(this._commandWindow.currentSymbol() === 'ZzyFBFBless')
{
if(this.JudgZzyFBFHaveFieldBless())
{
this.setZzyFBFSelectIndex();
SceneManager.push(Scene_ZzyFBF);return;//压入场景
}
else
{
this.ReturnZzyFBFStatusWindow();
}
}
Zzy.FBF.Scene_Menu_onPersonalOk.call(this);
};
Scene_Menu.prototype.setZzyFBFSelectIndex = function()
{
var index = this._statusWindow.index();
$gameSystem.SetZzyFBFSelectActorIndex($gameParty._actors[index]);
}
Scene_Menu.prototype.JudgZzyFBFHaveFieldBless = function()
{
var index = this._statusWindow.index();
var actorId = $gameParty._actors[index];
return $gameSystem.IsZzyFBFActorHaveFieldBless(actorId);
}
Scene_Menu.prototype.ReturnZzyFBFStatusWindow = function()
{
this._statusWindow.activate();
}
//=================================================================
//Window_MenuStatus
//=================================================================
Zzy.FBF.Window_MenuStatus_processOk = Window_MenuStatus.prototype.processOk;
Window_MenuStatus.prototype.processOk = function()
{
if (this.isCurrentItemEnabled())
{
if(SceneManager._scene instanceof Scene_Menu)
{
var pointer = SceneManager._scene._commandWindow;
var index = SceneManager._scene._commandWindow._index;
if(pointer.commandName(index) === $gameSystem.GetZzyFBFMenuCommandName())//处于加护内容
{
if(!this.JudgZzyFBFHaveFieldBless())//判断角色是否拥有加护能力
{
Zzy.FBF.PlaySE(1);
return;
}
}
}
}
Zzy.FBF.Window_MenuStatus_processOk.call(this);
};
Window_MenuStatus.prototype.JudgZzyFBFHaveFieldBless = function()
{
var index = this.index();
var actorId = $gameParty._actors[index];
return $gameSystem.IsZzyFBFActorHaveFieldBless(actorId);
}
//=================================================================
//Scene_ZzyFBF
//=================================================================
//Scene_ZzyFBF场景用于承载加护相关的窗口
function Scene_ZzyFBF()
{
this.initialize.apply(this, arguments);
}
Scene_ZzyFBF.prototype = Object.create(Scene_MenuBase.prototype);
Scene_ZzyFBF.prototype.constructor = Scene_ZzyFBF;
Scene_ZzyFBF.prototype.initialize = function()
{
Scene_MenuBase.prototype.initialize.call(this);
};
Scene_ZzyFBF.prototype.create = function() //创造窗口
{
Scene_MenuBase.prototype.create.call(this);
this.createHelpWindow();
this.CreateFieldWindow();
this.CreateFieldItemWindow();
this._fieldWindow.setFieldItemWindow(this._fieldItemWindow);
this._fieldItemWindow.setFieldWindow(this._fieldWindow);
};
Scene_ZzyFBF.prototype.createHelpWindow = function()
{
this._helpWindow = new Window_ZzyFBFHelp(2);
this._helpWindow.setText('');
this.addWindow(this._helpWindow);
};
Scene_ZzyFBF.prototype.CreateFieldWindow = function()
{
this._fieldWindow = new Window_ZzyFBFField();
this._fieldWindow.setHelpWindow(this._helpWindow);
this._fieldWindow.InitPosition();
this._fieldWindow.deactivate();
this._fieldWindow.deselect();
this._fieldWindow.setHandler('cancel',this.ZzyFBFPopField.bind(this));
this._fieldWindow.setHandler('ok',this.OnZzyFBFSelectFieldBless.bind(this));
this.addWindow(this._fieldWindow);
}
Scene_ZzyFBF.prototype.CreateFieldItemWindow = function()
{
this._fieldItemWindow = new Window_ZzyFBFItemField();
this._fieldItemWindow.setHelpWindow(this._helpWindow);
this._fieldItemWindow.InitPosition();
this._fieldItemWindow.activate();
this._fieldItemWindow.select(0);
this._fieldItemWindow.setHandler('cancel', this.popScene.bind(this));
this._fieldItemWindow.setHandler('ok',this.OnZzyFBFAddFieldBless.bind(this));
this.addWindow(this._fieldItemWindow);
}
Scene_ZzyFBF.prototype.ZzyFBFPopField = function()
{
this._fieldWindow.deactivate();
this._fieldWindow.deselect();
this._fieldItemWindow.activate();
}
Scene_ZzyFBF.prototype.OnZzyFBFAddFieldBless = function()
{
var pointer = this._fieldItemWindow;
if(pointer.active)//保持活跃
{pointer.OnSelectField();}//触发选择
this._fieldItemWindow.activate();//保持活跃
this._fieldWindow.deactivate();//失去活跃
}
Scene_ZzyFBF.prototype.OnZzyFBFSelectFieldBless = function()
{
var pointer = this._fieldWindow;
if(pointer.active)//保持活跃
{pointer.OnSelectField();}//触发选择
this._fieldWindow.activate();//保持活跃
this._fieldItemWindow.deactivate();//失去活跃
}
//=================================================================
//Window_ZzyFBFField
//=================================================================
function Window_ZzyFBFField() {
this.initialize.apply(this, arguments);
}
Window_ZzyFBFField.prototype = Object.create(Window_Selectable.prototype);
Window_ZzyFBFField.prototype.constructor = Window_ZzyFBFField;
Window_ZzyFBFField.prototype.initialize = function()
{
Window_Selectable.prototype.initialize.call(this, 0, 0);
this._list = [];//列表
this._fieldItemWindow = undefined;
};
Window_ZzyFBFField.prototype.InitPosition = function()
{
this.x = eval(Zzy.Param.FBFFieldWindowX);
this.y = eval(Zzy.Param.FBFFieldWindowY);
this.width = eval(Zzy.Param.FBFFieldWindowW)
this.height = eval(Zzy.Param.FBFFieldWindowH);
this.RefreshActorField();//刷新角色加护
this.refresh();
}
Window_ZzyFBFField.prototype.maxCols = function() {
return 1;
};
Window_ZzyFBFField.prototype.drawItem = function(index)
{
var item = this._list[index];
var rect = this.itemRect(index);
this.drawDeepFillRect(rect,2);
var srcInfo = {};
this.SaveZzyFBFContents(srcInfo);
if (item)//存在道具
{
rect.width -= this.textPadding();
if($gameSystem.GetZzyFBFFieldBlessNoInstall(item))//未安装
{
this.changeTextColor(Zzy.Param.FBFNoUnInstallColor);
}
else
{
if(item.zzyFBF)
{
if(item.zzyFBF.textColor)//存在设置的文字
{this.changeTextColor(item.zzyFBF.textColor);}
if(item.zzyFBF.borderColor)
{this.contents.outlineColor = item.zzyFBF.borderColor;}
if(item.zzyFBF.borderWidth)
{this.contents.outlineWidth = item.zzyFBF.borderWidth;}
if(item.zzyFBF.textSize)//字体大小
{this.contents.fontSize = item.zzyFBF.textSize;}
}
}
this.drawItemName(item, rect.x, rect.y, rect.width);
}
else if(item === null)//不存在
{
this.changeTextColor(Zzy.Param.FBFUnlockTextColor);
this.drawText(Zzy.Param.FBFUnlockText,rect.x,rect.y,rect.width,'center');
}
else if(item === false)
{
this.changeTextColor(Zzy.Param.FBFMemoryTextColor);
this.drawText(Zzy.Param.FBFMemoryText,rect.x,rect.y,rect.width,'center');
}
this.LoadZzyFBFContents(srcInfo);
};
Window_ZzyFBFField.prototype.SaveZzyFBFContents = function(srcInfo)
{
srcInfo.textColor = this.contents.textColor;
srcInfo.outlineColor = this.contents.outlineColor;
srcInfo.outlineWidth = this.contents.outlineWidth;
srcInfo.fontSize = this.contents.fontSize;
}
Window_ZzyFBFField.prototype.LoadZzyFBFContents = function(srcInfo)
{
this.contents.textColor = srcInfo.textColor;
this.contents.outlineColor = srcInfo.outlineColor;
this.contents.outlineWidth = srcInfo.outlineWidth;
this.contents.fontSize = srcInfo.fontSize;
}
Window_ZzyFBFField.prototype.drawItemName = function(item, x, y, width)
{
width = width || 312;
if (item) {
var iconBoxWidth = Window_Base._iconWidth + 4;
//this.resetTextColor();
this.drawIcon(item.iconIndex, x + 2, y + 2);
this.drawText(item.name, x + iconBoxWidth, y, width - iconBoxWidth);
}
};
Window_ZzyFBFField.prototype.drawDeepFillRect = function(rect,dis)
{
this.contents.fillRect(rect.x+dis, rect.y+dis, rect.width-dis*2, rect.height-dis*2, this.deepColor());
}
Window_ZzyFBFField.prototype.deepColor = function()
{
return Zzy.Param.FBFFieldRectColor;
}
Window_ZzyFBFField.prototype.processTouch = function()
{
if(!this.active && this.checkActive())
{
this.activate();//设置为活跃
this._fieldItemWindow.deactivate();
return;
}
Window_Selectable.prototype.processTouch.call(this);
};
Window_ZzyFBFField.prototype.checkActive = function()
{
if(TouchInput.isTriggered() && this.isTouchedInsideFrame())
{
return true;
}
return false;
}
Window_ZzyFBFField.prototype.setFieldItemWindow = function(pointer)
{
this._fieldItemWindow = pointer;
}
Window_ZzyFBFField.prototype.refresh = function()
{
this.createContents();
this.drawAllItems();
};
Window_ZzyFBFField.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_ZzyFBFField.prototype.item = function()
{
var index = this.index();
return this._list && index >= 0 ? this._list[index] : false;
};
Window_ZzyFBFField.prototype.updateHelp = function()
{
this.setHelpWindowItem(this.item());
};
Window_ZzyFBFField.prototype.maxItems = function()
{
return this._list ? this._list.length : 0;
};
Window_ZzyFBFField.prototype.RefreshActorField = function()//刷新槽
{
//判断角色领域是否为无限
var actorId = $gameSystem.GetZzyFBFSelectActorIndex();
$gameSystem.UpdateZzyFBFActorUseArr(actorId);//更新角色的加护
var tMax = $gameSystem.GetZzyFBFActorFinalMaxCount(actorId);//最大格子数
var currentCount = $gameSystem.GetZzyFBFActorFinalCurrentCount(actorId);
if(tMax !== -1)
{
currentCount = currentCount > tMax ? tMax : currentCount;
}
for(var i=0;i<currentCount;i++)//拷贝
{
this._list[i] = undefined;
}
//计算拥有的加护格子数
var arr = $gameSystem.GetZzyFBFActorUseArr(actorId);
var arrLen = arr.length;
arrLen = arrLen > currentCount ? currentCount : arrLen;
for(var i=0;i<arrLen;i++)//拷贝
{
this._list[i] = $dataItems[arr[i]];
}
var addLen = 0;
if(tMax === -1)
{addLen = this.maxPageRows();}
else
{addLen = tMax - currentCount;}
//添加额外
var last = this._list.length;
for(var i=0;i<addLen;i++)//添加到_list列表中
{
this._list[last+i] = null;
}
//赋予内容
var useArr = $gameSystem.GetZzyFBFActorUseArr(actorId);
for(var i=0;i<useArr.length;i++)
{
if(this._list[i] === null)continue;
if(useArr[i] === false)
{
this._list[i] = false;
}
else
{
this._list[i] = $dataItems[useArr[i]];
}
}
}
Window_ZzyFBFField.prototype.maxPageRows = function()
{
var pageHeight = this.height - this.padding * 2;
return Math.floor(pageHeight / this.itemHeight());
};
Window_ZzyFBFField.prototype.IsCanInstall = function(index,installItem)
{
var max = this._list.length-1;
if(index > max)return false;
if(this._list[index] === false || this._list[index] === null){return false;}
if($gameSystem.GetZzyFBFFieldBlessNoInstall(this._list[index])){return false;}
var count = $gameSystem.GetZzyFBFFieldBlessMemory(this._list[index]);//检测容量是否超标
var iCount = $gameSystem.GetZzyFBFFieldBlessMemory(installItem);
if(this._list[index])
{
if(iCount > count)
{
for(var i=count;i<iCount;i++)
{
if(this._list[index+i] !== undefined)
{return false;}
}
}
}
if(this._list[index] === undefined)
{
for(var i=1;i<iCount;i++)
{
if(this._list[index+i] || this._list[index+i] === false || this._list[index+i] === null)
{return false;}
}
}
return true;
}
Window_ZzyFBFField.prototype.IsCanUnInstall = function(index,installItem)
{
var max = this._list.length-1;
if(index > max)return true;
if(this._list[index] === false || this._list[index] === null){return true;}
if($gameSystem.GetZzyFBFFieldBlessNoInstall(this._list[index])){return true;}//不可卸载
var count = $gameSystem.GetZzyFBFFieldBlessMemory(this._list[index]);//检测容量是否超标
var iCount = $gameSystem.GetZzyFBFFieldBlessMemory(installItem);
if(this._list[index])
{
if(iCount > count)
{
for(var i=count;i<iCount;i++)
{
if(this._list[index+i] !== undefined)
{return true;}
}
}
}
if(this._list[index] === undefined)
{
for(var i=1;i<iCount;i++)
{
if(this._list[index+i] || this._list[index+i] === false || this._list[index+i] === null)
{return true;}
}
}
return false;
}
Window_ZzyFBFField.prototype.processOk = function()
{
if (this.isCurrentItemEnabled())
{
//this.playOkSound();
this.updateInputData();
//this.deactivate();
this.callOkHandler();
}
else
{
this.playBuzzerSound();
}
};
Window_ZzyFBFField.prototype.OnSelectField = function()
{
if(this.IsSatisfyUnInstall(this.index()))//满足拆卸
{
this.ExecuteUnInstallField();
}
else
{
//不满足拆卸
Zzy.FBF.PlaySE(2);
}
}
Window_ZzyFBFField.prototype.ExecuteUnInstallField = function()//卸载领域
{
this._fieldItemWindow.ProcessGainItem(this.item());
this._fieldItemWindow.refresh();
var actorId = $gameSystem.GetZzyFBFSelectActorIndex();
var fArr = $gameSystem.GetZzyFBFActorUseArr(actorId);
var item = $dataItems[fArr[this.index()]];
var memory = $gameSystem.GetZzyFBFFieldBlessMemory(item);
for(var i=0;i<memory;i++)
{
var index = this.index()+i;
fArr[index] = undefined;
this._list[index] = undefined;
}
Zzy.FBF.PlaySE(5);
this.refresh();
}
Window_ZzyFBFField.prototype.IsSatisfyUnInstall = function(index)
{
var max = this._list.length-1;
if(index > max)return false;
if(this._list[index] === false || this._list[index] === null || this._list[index] === undefined){return false;}
if($gameSystem.GetZzyFBFFieldBlessNoInstall(this._list[index])){return false;}
if(this._list[index]){return true;}
return false;
}
Window_ZzyFBFField.prototype.ExecuteInstallItem = function(index,item)
{
//首先拆卸原来
var memory = $gameSystem.GetZzyFBFFieldBlessMemory(item);
if(this._list[index])//存在内容
{
var oldItem = this._list[index];//卸载旧的
var oldMemory = $gameSystem.GetZzyFBFFieldBlessMemory(oldItem);
for(var i=0;i<oldMemory;i++)
{
this._list[index+i] = undefined;
}
this._list[index] = item;//安装新的
for(var i=1;i<memory;i++)
{
this._list[index+i] = false;//占位
}
this.refresh();
return oldItem;
}
else
{
this._list[index] = item;
for(var i=1;i<memory;i++)
{
this._list[index+i] = false;//占位
}
this.refresh();
return undefined;
}
}
//=================================================================
//Window_ZzyFBFItemField
//=================================================================
function Window_ZzyFBFItemField()
{
this.initialize.apply(this, arguments);
}
Window_ZzyFBFItemField.prototype = Object.create(Window_Selectable.prototype);
Window_ZzyFBFItemField.prototype.constructor = Window_ZzyFBFItemField;
Window_ZzyFBFItemField.prototype.initialize = function()
{
Window_Selectable.prototype.initialize.call(this, 0, 0);
//创建完成后,读取有效的内容
this._list = [];
this._fieldWindow = undefined;
this.EarnFieldItemList();
this.refresh();
};
Window_ZzyFBFItemField.prototype.EarnFieldItemList = function()
{
var items = $gameParty.items();
var enableArr = $gameSystem.GetZzyFBFFieldItemIdArr();
var len = items.length;
for(var i=0;i<len;i++)
{
var item = items[i];
if(enableArr.contains(item.id))
{
this._list.push(item);
}
}
//asd
}
Window_ZzyFBFItemField.prototype.InitPosition = function()
{
this.x = eval(Zzy.Param.FBFFieldItemWindowX);
this.y = eval(Zzy.Param.FBFFieldItemWindowY);
this.width = eval(Zzy.Param.FBFFieldItemWindowW);
this.height = eval(Zzy.Param.FBFFieldItemWindowH);
this.refresh();
}
Window_ZzyFBFItemField.prototype.maxCols = function()
{
return 2;
};
Window_ZzyFBFItemField.prototype.drawItem = function(index)
{
var item = this._list[index];
if (item)
{
var numberWidth = this.numberWidth();
var rect = this.itemRect(index);
rect.width -= this.textPadding();
if(this.IsEnable(item))
{
var srcInfo = {};
this.SaveZzyFBFContents(srcInfo);
if(item.zzyFBF)
{
if(item.zzyFBF.textColor)//存在设置的文字
{this.changeTextColor(item.zzyFBF.textColor);}
if(item.zzyFBF.borderColor)
{this.contents.outlineColor = item.zzyFBF.borderColor;}
if(item.zzyFBF.borderWidth)
{this.contents.outlineWidth = item.zzyFBF.borderWidth;}
if(item.zzyFBF.textSize)//字体大小
{this.contents.fontSize = item.zzyFBF.textSize;}
}
this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
this.drawItemNumber(item, rect.x, rect.y, rect.width);
this.LoadZzyFBFContents(srcInfo);
}
else
{
this.changePaintOpacity(false);
this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
this.drawItemNumber(item, rect.x, rect.y, rect.width);
}
this.changePaintOpacity(1);
}
};
Window_ZzyFBFItemField.prototype.drawItemName = function(item, x, y, width)
{
width = width || 312;
var iconBoxWidth = Window_Base._iconWidth + 4;
this.drawIcon(item.iconIndex, x + 2, y + 2);
this.drawText(item.name, x + iconBoxWidth, y, width - iconBoxWidth);
};
Window_ZzyFBFItemField.prototype.drawItemNumber = function(item, x, y, width)
{
this.drawText(':', x, y, width - this.textWidth('00'), 'right');
this.drawText($gameParty.numItems(item), x, y, width, 'right');
};
Window_ZzyFBFItemField.prototype.SaveZzyFBFContents = function(srcInfo)
{
srcInfo.textColor = this.contents.textColor;
srcInfo.outlineColor = this.contents.outlineColor;
srcInfo.outlineWidth = this.contents.outlineWidth;
srcInfo.fontSize = this.contents.fontSize;
}
Window_ZzyFBFItemField.prototype.LoadZzyFBFContents = function(srcInfo)
{
this.contents.textColor = srcInfo.textColor;
this.contents.outlineColor = srcInfo.outlineColor;
this.contents.outlineWidth = srcInfo.outlineWidth;
this.contents.fontSize = srcInfo.fontSize;
}
Window_ZzyFBFItemField.prototype.IsEnable = function(item)
{
var actorId = $gameSystem.GetZzyFBFSelectActorIndex();
var enable = $gameSystem.EnableZzyFBFFieldOfActor(actorId,item);
return enable;
}
Window_ZzyFBFItemField.prototype.IsEnableOfIndex = function(index)
{
var item = this.item();
return this.IsEnable(item);
}
Window_ZzyFBFItemField.prototype.numberWidth = function()
{
return this.textWidth('000');
};
Window_ZzyFBFItemField.prototype.maxItems = function()
{
return this._list ? this._list.length : 0;
};
Window_ZzyFBFItemField.prototype.refresh = function()
{
this.createContents();
this.drawAllItems();
};
Window_ZzyFBFItemField.prototype.item = function()
{
var index = this.index();
return this._list && index >= 0 ? this._list[index] : null;
};
Window_ZzyFBFItemField.prototype.updateHelp = function()
{
this.setHelpWindowItem(this.item());
};
Window_ZzyFBFItemField.prototype.setFieldWindow = function(pointer)
{
this._fieldWindow = pointer;
}
Window_ZzyFBFItemField.prototype.processTouch = function()
{
if(!this.active && this.checkActive())
{
this.activate();//设置为活跃
this._fieldWindow.deactivate();
return;
}
Window_Selectable.prototype.processTouch.call(this);
};
Window_ZzyFBFItemField.prototype.checkActive = function()
{
if(TouchInput.isTriggered() && this.isTouchedInsideFrame())
{
return true;
}
return false;
}
Window_ZzyFBFItemField.prototype.processOk = function()
{
if (this.isCurrentItemEnabled())
{
//this.playOkSound();
this.updateInputData();
//this.deactivate();
this.callOkHandler();
}
else
{
this.playBuzzerSound();
}
};
Window_ZzyFBFItemField.prototype.OnSelectField = function()
{
//激活
var index = this.index();
var isValid = this.IsEnableOfIndex(index);
if(isValid)
{
this.ExecuteInstallField();
}
else
{
Zzy.FBF.PlaySE(3);
}
}
Window_ZzyFBFItemField.prototype.ExecuteInstallField = function()//执行安装加护
{
var installItem = this.item();
var index = this._fieldWindow.index();
var tList = this._fieldWindow._list;
if(index >= 0)//防止-1
{
if(this._fieldWindow.IsCanUnInstall(index,installItem))
{
Zzy.FBF.PlaySE(3);
return false;
}
}
else//遍历
{
var len = tList.length;
var isCan = false;
for(var i=0;i<len;i++)
{
if(this._fieldWindow.IsCanInstall(i,installItem))//可以安装
{
index = i;
isCan = true;
break;
}
}
if(!isCan)
{
Zzy.FBF.PlaySE(3);
return false;
}
}
var oldItem = this._fieldWindow.ExecuteInstallItem(index,installItem);//执行安装
//目标向后跳跃
var memory = $gameSystem.GetZzyFBFFieldBlessMemory(installItem);//获取内存大小
this._fieldWindow.select(index+memory);
//减少道具
this.ProcessLoseItem(installItem);
this.ProcessGainItem(oldItem);
var actorId = $gameSystem.GetZzyFBFSelectActorIndex();
if(oldItem)
{
$gameSystem.UnInstallZzyFBFField(actorId,index);
}
$gameSystem.InstallZzyFBFField(actorId,index,installItem);
Zzy.FBF.PlaySE(4);
this.refresh();
return true;
}
Window_ZzyFBFItemField.prototype.ProcessGainItem = function(item)
{
if(!item)return;//获取道具
//item = $dataItems[6];
$gameParty.gainItem(item,1);
//判断卸下来的是否拥有
if(!this.IsListHaveOfItem(item))
{
this._list.push(item);
}
}
Window_ZzyFBFItemField.prototype.ProcessLoseItem = function(item)
{
if(!item)return;
$gameParty.loseItem(item,1);//减少道具
for(var i=0;i<this._list.length;i++)
{
if(this._list[i].id === item.id)
{
var count = $gameParty._items[item.id];
if(!count)//不存在数量,需要移除这个内容
{
this.DeleteListOfIndex(i);//移除元素
return;
}
}
}
}
Window_ZzyFBFItemField.prototype.DeleteListOfIndex = function(index)
{
var len = this._list.length;
for(var i=index;i<len;i++)
{
this._list[i] = this._list[i+1];
}
this._list[len-1] = undefined;
this._list.length--;
}
Window_ZzyFBFItemField.prototype.IsListHaveOfItem = function(item)
{
for(var i=0;i<this._list.length;i++)
{
if(this._list[i].id === item.id)
{
return true;
}
}
return false;
}
//=================================================================
//Window_ZzyFBFHelp
//=================================================================
function Window_ZzyFBFHelp()
{
this.initialize.apply(this, arguments);
}
Window_ZzyFBFHelp.prototype = Object.create(Window_Help.prototype);
Window_ZzyFBFHelp.prototype.constructor = Window_ZzyFBFHelp;
Window_ZzyFBFHelp.prototype.initialize = function(numLines)
{
numLines = this.DefaultNumLines();
Window_Help.prototype.initialize.call(this,numLines);
this.x = eval(Zzy.Param.FBFHelpWindowX);
this.y = eval(Zzy.Param.FBFHelpWindowY);
this.width = eval(Zzy.Param.FBFHelpWindowW);
};
Window_ZzyFBFHelp.prototype.DefaultNumLines = function()
{
return Zzy.Param.FBFHelpWindowH;
}
Window_ZzyFBFHelp.prototype.setText = function(text)
{
if (this._text !== text)
{
this._text = text;
this.refresh();
}
};
Window_ZzyFBFHelp.prototype.clear = function()
{
this.setText('');
};
Window_ZzyFBFHelp.prototype.setItem = function(item)
{
if(item === null)
{
this.setText(Zzy.Param.FBFUnlockHelpText);
}
else if(item === undefined)
{
this.setText(Zzy.Param.FBFLockHelpText);
}
else
{
this.setText(item ? item.description : '');
}
};
Window_ZzyFBFHelp.prototype.refresh = function()
{
this.contents.clear();
this.drawTextEx(this._text, this.textPadding(), 0);
};
//================================================================
//DataManager
//================================================================
Zzy.FBF.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function()
{
if (!Zzy.FBF.DataManager_isDatabaseLoaded.call(this)) return false;
//添加标签内容
this.ZzyFBFLoadNoteCase1($dataItems);//物品
this.ZzyFBFLoadNoteCase2($dataActors);//角色
this.ZzyFBFLoadNoteCase3($dataArmors);//护甲
this.ZzyFBFLoadNoteCase3($dataWeapons);//武器
this.ZzyFBFLoadNoteCase3($dataSkills);//技能
this.ZzyFBFLoadNoteCase3($dataClasses);//职业
this.ZzyFBFLoadNoteCase3($dataActors);//角色
return true;
}
DataManager.ZzyFBFLoadNoteCase3 = function(objArr)
{
for (var i = 1; i < objArr.length; i++)
{
var obj = objArr[i];
var noteData = obj.note.split(/[\r\n]+/);
obj.zzyFBF = obj.zzyFBF || {};
for(var j=0;j<noteData.length;j++)
{
var lineStr = noteData[j];
if(lineStr.match(/<ZZYFBF COUNT:[ ](.*)>/i))//增添卡槽
{
var count = String(RegExp.$1);
obj.zzyFBF['eCount'] = count;
}
else if(lineStr.match(/<ZZYFBF MCOUNT:[ ](.*)>/i))//增添最大卡槽
{
var count = String(RegExp.$1);
obj.zzyFBF['emCount'] = count;
}
}
}
}
DataManager.ZzyFBFLoadNoteCase2 = function(objArr)//加载标签
{
for (var i = 1; i < objArr.length; i++)
{
var obj = objArr[i];
var noteData = obj.note.split(/[\r\n]+/);
obj.zzyFBF = obj.zzyFBF || {};
for(var j=0;j<noteData.length;j++)
{
var lineStr = noteData[j];
if(lineStr.match(/<ZZYFBF FIELDBLESS:[ ](.*)>/i))//作为卡片
{
var enable = eval(String(RegExp.$1));
obj.zzyFBF['enable'] = enable;
}
else if(lineStr.match(/<ZZYFBF MAXCOUNT:[ ](.*)>/i))
{
var count = String(RegExp.$1);
obj.zzyFBF['maxCount'] = count;
}
else if(lineStr.match(/<ZZYFBF CURRENTCOUNT:[ ](.*)>/i))
{
var count = String(RegExp.$1);
obj.zzyFBF['currentCount'] = count;
}
}
}
}
DataManager.ZzyFBFLoadNoteCase1 = function(objArr)//加载标签
{
for (var i = 1; i < objArr.length; i++)
{
var obj = objArr[i];
var noteData = obj.note.split(/[\r\n]+/);
obj.zzyFBF = obj.zzyFBF || {};
//基本参数
obj.zzyFBF['param'] = [];
obj.zzyFBF['paramPer'] = [];
//额外参数
obj.zzyFBF['exParam'] = [];
obj.zzyFBF['exParamPer'] = [];
//特殊参数
obj.zzyFBF['spParam'] = [];
obj.zzyFBF['spParamPer'] = [];
//元素参数
obj.zzyFBF['elParam'] = [];
obj.zzyFBF['elParamPer'] = [];
//0生命 1魔法 2攻击 3防御 4魔攻 5魔抗 6速度 7幸运
//0命中 1闪避 2暴击 3暴击回避 4魔法回避 5魔法反射
//6反击 7HP自动回复 8MP自动回复 9TP自动恢复
//1受击几率 2防御效果 3恢复效果 4药理知识 5MP消耗率 6TP消耗率
//7物理伤害 8魔法伤害 9地形伤害 10经验值 11金币概率 12伤害减免
//13逃跑概率 14先发制人概率 15被偷袭概率 16遇敌步数
for(var j=0;j<noteData.length;j++)
{
var lineStr = noteData[j];
if(lineStr.match(/<ZZYFBF ENABLE>/i))//作为卡片
{
obj.zzyFBF['enable'] = true;
}
else if(lineStr.match(/<ZZYFBF TEXTCOLOR:[ ](.*)>/i))
{
obj.zzyFBF['textColor'] = String(RegExp.$1);
}
else if(lineStr.match(/<ZZYFBF BORDERWIDTH:[ ](.*)>/i))
{
obj.zzyFBF['borderWidth'] = parseInt(RegExp.$1);
}
else if(lineStr.match(/<ZZYFBF BORDERCOLOR:[ ](.*)>/i))
{
obj.zzyFBF['borderColor'] = String(RegExp.$1);
}
else if(lineStr.match(/<ZZYFBF TEXTSIZE:[ ](.*)>/i))
{
obj.zzyFBF['textSize'] = parseInt(RegExp.$1);
}
else if(lineStr.match(/<ZZYFBF HP:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['param'][0] = value;
}
else if(lineStr.match(/<ZZYFBF HPPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['paramPer'][0] = per;
}
else if(lineStr.match(/<ZZYFBF MP:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['param'][1] = value;
}
else if(lineStr.match(/<ZZYFBF MPPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['paramPer'][1] = per;
}
else if(lineStr.match(/<ZZYFBF ATK:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['param'][2] = value;
}
else if(lineStr.match(/<ZZYFBF ATKPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['paramPer'][2] = per;
}
else if(lineStr.match(/<ZZYFBF DEF:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['param'][3] = value;
}
else if(lineStr.match(/<ZZYFBF DEFPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['paramPer'][3] = per;
}
else if(lineStr.match(/<ZZYFBF MAT:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['param'][4] = value;
}
else if(lineStr.match(/<ZZYFBF MATPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['paramPer'][4] = per;
}
else if(lineStr.match(/<ZZYFBF MDF:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['param'][5] = value;
}
else if(lineStr.match(/<ZZYFBF MDFPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['paramPer'][5] = per;
}
else if(lineStr.match(/<ZZYFBF AGI:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['param'][6] = value;
}
else if(lineStr.match(/<ZZYFBF AGIPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['paramPer'][6] = per;
}
else if(lineStr.match(/<ZZYFBF LUK:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['param'][7] = value;
}
else if(lineStr.match(/<ZZYFBF LUKPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['paramPer'][7] = per;
}
else if(lineStr.match(/<ZZYFBF HIT:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][0] = value;
}
else if(lineStr.match(/<ZZYFBF HITPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][0] = value;
}
else if(lineStr.match(/<ZZYFBF EVA:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][1] = value;
}
else if(lineStr.match(/<ZZYFBF EVAPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][1] = value;
}
else if(lineStr.match(/<ZZYFBF CRI:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][2] = value;
}
else if(lineStr.match(/<ZZYFBF CRIPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][2] = value;
}
else if(lineStr.match(/<ZZYFBF CEV:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][3] = value;
}
else if(lineStr.match(/<ZZYFBF CEVPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][3] = value;
}
else if(lineStr.match(/<ZZYFBF MEV:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][4] = value;
}
else if(lineStr.match(/<ZZYFBF MEVPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][4] = value;
}
else if(lineStr.match(/<ZZYFBF MRF:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][5] = value;
}
else if(lineStr.match(/<ZZYFBF MRFPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][5] = value;
}
else if(lineStr.match(/<ZZYFBF CNT:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][6] = value;
}
else if(lineStr.match(/<ZZYFBF CNTPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][6] = value;
}
else if(lineStr.match(/<ZZYFBF HRG:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][7] = value;
}
else if(lineStr.match(/<ZZYFBF HRGPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][7] = value;
}
else if(lineStr.match(/<ZZYFBF MRG:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][8] = value;
}
else if(lineStr.match(/<ZZYFBF MRGPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][8] = value;
}
else if(lineStr.match(/<ZZYFBF TRG:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParam'][9] = value;
}
else if(lineStr.match(/<ZZYFBF TRGPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['exParamPer'][9] = value;
}
else if(lineStr.match(/<ZZYFBF MEMORY:[ ](\d+)>/i))
{
var memory = parseInt(RegExp.$1);
obj.zzyFBF['memory'] = memory;
}
else if(lineStr.match(/<ZZYFBF NOINSTALL>/i))
{
obj.zzyFBF['noInstall'] = true;
}
else if(lineStr.match(/<ZZYFBF CLASS:[ ](.*)>/i))
{
var str = String(RegExp.$1);
var intArr = Zzy.FBF.StringToIntArr(str);
obj.zzyFBF['canUseC'] = intArr;
}
else if(lineStr.match(/<ZZYFBF ACTOR:[ ](.*)>/i))
{
var str = String(RegExp.$1);
var intArr = Zzy.FBF.StringToIntArr(str);
obj.zzyFBF['canUseA'] = intArr;
}
else if(lineStr.match(/<ZZYFBF NOCLASS:[ ](.*)>/i))
{
var str = String(RegExp.$1);
var intArr = Zzy.FBF.StringToIntArr(str);
obj.zzyFBF['noCanUseC'] = intArr;
}
else if(lineStr.match(/<ZZYFBF NOACTOR:[ ](.*)>/i))
{
var str = String(RegExp.$1);
var intArr = Zzy.FBF.StringToIntArr(str);
obj.zzyFBF['noCanUseA'] = intArr;
}
else if(lineStr.match(/<ZZYFBF CONDITION:[ ](.*)>/i))
{
var evalStr = String(RegExp.$1);
obj.zzyFBF['canUseEval'] = evalStr;
}
else if(lineStr.match(/<ZZYFBF TGR:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][1] = value;
}
else if(lineStr.match(/<ZZYFBF TGRPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][1] = value;
}
else if(lineStr.match(/<ZZYFBF GRD:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][2] = value;
}
else if(lineStr.match(/<ZZYFBF GRDPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][2] = value;
}
else if(lineStr.match(/<ZZYFBF REC:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][3] = value;
}
else if(lineStr.match(/<ZZYFBF RECPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][3] = value;
}
else if(lineStr.match(/<ZZYFBF PHA:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][4] = value;
}
else if(lineStr.match(/<ZZYFBF PHAPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][4] = value;
}
else if(lineStr.match(/<ZZYFBF MCR:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][5] = value;
}
else if(lineStr.match(/<ZZYFBF MCRPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][5] = value;
}
else if(lineStr.match(/<ZZYFBF TCR:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][6] = value;
}
else if(lineStr.match(/<ZZYFBF TCRPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][6] = value;
}
else if(lineStr.match(/<ZZYFBF PDR:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][7] = value;
}
else if(lineStr.match(/<ZZYFBF PDRPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][7] = value;
}
else if(lineStr.match(/<ZZYFBF MDR:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][8] = value;
}
else if(lineStr.match(/<ZZYFBF MDRPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][8] = value;
}
else if(lineStr.match(/<ZZYFBF FDR:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][9] = value;
}
else if(lineStr.match(/<ZZYFBF FDRPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][9] = value;
}
else if(lineStr.match(/<ZZYFBF EXP:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][10] = value;
}
else if(lineStr.match(/<ZZYFBF EXPPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][10] = value;
}
else if(lineStr.match(/<ZZYFBF GOLD:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][11] = value;
}
else if(lineStr.match(/<ZZYFBF GOLDPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][11] = value;
}
else if(lineStr.match(/<ZZYFBF DAR:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][12] = value;
}
else if(lineStr.match(/<ZZYFBF DARPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][12] = value;
}
else if(lineStr.match(/<ZZYFBF ELEMENT:[ ](.*)[ ](.*)>/i))
{
var elId = parseInt(RegExp.$1);
var value = String(RegExp.$2);
obj.zzyFBF['elParam'][elId] = value;
}
else if(lineStr.match(/<ZZYFBF ELEMENTPER:[ ](.*)[ ](.*)>/i))
{
var elId = parseInt(RegExp.$1);
var value = String(RegExp.$2);
obj.zzyFBF['elParamPer'][elId] = value;
}
else if(lineStr.match(/<ZZYFBF ESCPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['spParam'][13] = per;
}
else if(lineStr.match(/<ZZYFBF SNAKPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['spParam'][14] = per;
}
else if(lineStr.match(/<ZZYFBF BSAKPER:[ ](.*)>/i))
{
var per = String(RegExp.$1);
obj.zzyFBF['spParam'][15] = per;
}
else if(lineStr.match(/<ZZYFBF ENCT:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParam'][16] = value;
}
else if(lineStr.match(/<ZZYFBF ENCTPER:[ ](.*)>/i))
{
var value = String(RegExp.$1);
obj.zzyFBF['spParamPer'][16] = value;
}
}
}
}
//=============================================================================
//Game_Actor
//=============================================================================
Zzy.FBF.Game_Actor_paramPlus = Game_Actor.prototype.paramPlus;
Game_Actor.prototype.paramPlus = function(paramId)
{
var value = Zzy.FBF.Game_Actor_paramPlus.call(this,paramId);
var useArr = $gameSystem.GetZzyFBFActorFieldUseArr(this.actorId());
value += this.ZzyFBFCalculationValue(useArr,paramId);//计算增益数值
return Math.floor(value);
};
Game_Actor.prototype.ZzyFBFCalculationValue = function(itemArr,paramId)//增益
{
var formula = undefined;
var value = 0;
var valuePer = 0;
var srcValue = this.paramBase(paramId);
for(var i=0;i<itemArr.length;i++)//计算拥有的实量和百分比
{
var item = itemArr[i];
if(item.zzyFBF.param[paramId] !== undefined)
{
formula = item.zzyFBF.param[paramId];
value += $gameSystem.EvalZzyFBFFormula1(formula,this);
value = value ? value : 0;
}
if(item.zzyFBF.paramPer[paramId] !== undefined)
{
formula = item.zzyFBF.paramPer[paramId];
valuePer += $gameSystem.EvalZzyFBFFormula1(formula,this);
valuePer = valuePer ? valuePer : 0;
}
}
return (value + (srcValue*valuePer*0.01));
}
//经验值
Zzy.FBF.Game_Actor_finalExpRate = Game_Actor.prototype.finalExpRate;
Game_Actor.prototype.finalExpRate = function()
{
var expRate = Zzy.FBF.Game_Actor_finalExpRate.call(this);
var exExpRate = Zzy.FBF.SpParamPerValueOfActor(this,10,expRate);
return expRate+exExpRate;
};
Zzy.FBF.Game_Actor_gainExp = Game_Actor.prototype.gainExp;
Game_Actor.prototype.gainExp = function(exp)
{
var exExp = Zzy.FBF.SpParamValueOfActor(this,10);
exp += exExp;//添加额外经验值
Zzy.FBF.Game_Actor_gainExp.call(this,exp);
};
//地板伤害
Zzy.FBF.Game_Actor_basicFloorDamage = Game_Actor.prototype.basicFloorDamage;
Game_Actor.prototype.basicFloorDamage = function()
{
var damage = Zzy.FBF.Game_Actor_basicFloorDamage.call(this);
var exDamage = Zzy.FBF.SpParamPerValueOfActor(this,9,damage);
return Math.floor(damage+exDamage);
};
Zzy.FBF.Game_Actor_executeFloorDamage = Game_Actor.prototype.executeFloorDamage;
Game_Actor.prototype.executeFloorDamage = function()
{
Zzy.FBF.Game_Actor_executeFloorDamage.call(this);
var exDamage = Zzy.FBF.SpParamValueOfActor(this,9);//地板额外伤害
exDamage = Math.min(exDamage, this.maxFloorDamage());
this.gainHp(-exDamage);
if (exDamage > 0)
{
this.performMapDamage();
}
};
//===========================================================================
//Game_Action
//===========================================================================
Zzy.FBF.Game_Action_calcElementRate = Game_Action.prototype.calcElementRate;
Game_Action.prototype.calcElementRate = function(target)//元素概率
{
var srcRate = Zzy.FBF.Game_Action_calcElementRate.call(this,target);
var exRate = 0;
if(target.isEnemy())
{
var actor = this.subject();
if(actor && actor.isActor())
{
var elementId = this.item().damage.elementId;
exRate = BattleManager.ZzyFBFElParamPerValueOfActor(elementId,actor,target);
}
}
return srcRate+exRate;
};
Zzy.FBF.Game_Action_itemHit = Game_Action.prototype.itemHit;
Game_Action.prototype.itemHit = function(target)
{
var value = Zzy.FBF.Game_Action_itemHit.call(this,target);
var exValue = 0;
if(this.isPhysical() && this.subject() && this.subject().isActor())//物理命中
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(0,this.subject(),value,target);
}
return value+exValue;
};
Zzy.FBF.Game_Action_itemEva = Game_Action.prototype.itemEva;
Game_Action.prototype.itemEva = function(target)
{
var value = Zzy.FBF.Game_Action_itemEva.call(this,target);
var exValue = 0;
if(target && target.isActor())
{
if (this.isPhysical())//物理闪避
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(1,target,value,this.subject());
}
else if(this.isMagical())//魔法闪避
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(4,target,value,this.subject());
}
}
return value+exValue;
};
Zzy.FBF.Game_Action_itemCri = Game_Action.prototype.itemCri;
Game_Action.prototype.itemCri = function(target)
{
var value = Zzy.FBF.Game_Action_itemCri.call(this,target);
var exValue = 0;
if(this.item().damage.critical)//存在暴击
{
if(this.subject() && this.subject().isActor())//攻击者
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(2,this.subject(),value,target);
return value+exValue;
}
else if(target && target.isActor())//防御者
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(3,target,value,target);
return Math.max(0,value-exValue);
}
}
else
{
return value;
}
return value;
};
Zzy.FBF.Game_Action_itemMrf = Game_Action.prototype.itemMrf;
Game_Action.prototype.itemMrf = function(target)
{
var value = Zzy.FBF.Game_Action_itemMrf.call(this,target);
var exValue = 0;
if(this.isMagical() && target && target.isActor())
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(5,target,value,this.subject());
}
return value+exValue;
};
Zzy.FBF.Game_Action_itemCnt = Game_Action.prototype.itemCnt;
Game_Action.prototype.itemCnt = function(target)
{
var value = Zzy.FBF.Game_Action_itemCnt.call(this,target);
var exValue = 0;
if(this.isPhysical() && target.canMove() && target && target.isActor())
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(6,target,value,this.subject());
}
return value+exValue;
};
//恢复效果 物理伤害 魔法伤害
Zzy.FBF.Game_Action_makeDamageValue = Game_Action.prototype.makeDamageValue;
Game_Action.prototype.makeDamageValue = function(target, critical)
{
var value = Zzy.FBF.Game_Action_makeDamageValue.call(this,target,critical);
var item = this.item();
var isRecover = false;
if(target.isActor())
{
var baseValue = this.evalDamageFormula(target);
if (this.isPhysical())
{
var exValue1 = Zzy.FBF.SpParamValueOfActor(target,7,this.subject());
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(target,7,value,this.subject());
value += (exValue1+exValue2);
}
if (this.isMagical())
{
var exValue1 = Zzy.FBF.SpParamValueOfActor(target,8,this.subject());
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(target,8,value,this.subject());
value += (exValue1+exValue2);
}
if (baseValue < 0)
{
isRecover = true;
var exValue1 = Zzy.FBF.SpParamValueOfActor(target,3,this.subject());
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(target,3,value,this.subject());
value -= (exValue1+exValue2);
}
if(!isRecover)
{
//计算伤害减免
var exValue1 = Zzy.FBF.SpParamValueOfActor(target,12,this.subject());
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(target,12,value,this.subject());
value -= (exValue1+exValue2);
value = value > 0 ? value : 0;
}
//value = this.applyVariance(value, item.damage.variance);
//value = this.applyGuard(value, target);
}
else if(target.isEnemy())
{
var actor = this.subject();
if(actor && actor.isActor())
{
//插入元素直接伤害
var baseValue = this.evalDamageFormula(actor);
var elementId = this.item().damage.elementId;
var exValue = BattleManager.ZzyFBFElParamValueOfActor(elementId,actor);
if (baseValue < 0)
{
value -= exValue;
value = value < 0 ? value : 0;
}
else
{
value += exValue;
value = value > 0 ? value : 0;
}
}
}
value = Math.round(value);
return value;
};
//TP补充率
Zzy.FBF.Game_Action_applyItemUserEffect = Game_Action.prototype.applyItemUserEffect;
Game_Action.prototype.applyItemUserEffect = function(target)
{
Zzy.FBF.Game_Action_applyItemUserEffect.call(this,target);
if(target.isActor())
{
var value = Math.floor(this.item().tpGain * this.subject().tcr);
var exValue1 = Zzy.FBF.SpParamValueOfActor(target,6,this.subject());
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(target,6,value,this.subject());
this.subject().gainSilentTp(exValue1+exValue2);
}
};
Zzy.FBF.Game_Action_itemEffectRecoverHp = Game_Action.prototype.itemEffectRecoverHp;
Game_Action.prototype.itemEffectRecoverHp = function(target, effect)
{
Zzy.FBF.Game_Action_itemEffectRecoverHp.call(this,target,effect);
if(target.isActor() && this.isItem())
{
var value = (target.mhp * effect.value1 + effect.value2) * target.rec;
var exValue1 = Zzy.FBF.SpParamValueOfActor(target,4,this.subject());
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(target,4,value,this.subject());
value += (exValue1+exValue2);
}
value = Math.floor(value);
if (value !== 0)
{
target.gainHp(value);
this.makeSuccess(target);
}
};
Zzy.FBF.Game_Action_itemEffectRecoverMp = Game_Action.prototype.itemEffectRecoverMp;
Game_Action.prototype.itemEffectRecoverMp = function(target, effect)
{
Zzy.FBF.Game_Action_itemEffectRecoverMp.call(this,target,effect);
if(target.isActor() && this.isItem())
{
var value = (target.mmp * effect.value1 + effect.value2) * target.rec;
var exValue1 = Zzy.FBF.SpParamValueOfActor(target,4,this.subject());
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(target,4,value,this.subject());
value += (exValue1+exValue2);
}
value = Math.floor(value);
if (value !== 0)
{
target.gainMp(value);
this.makeSuccess(target);
}
};
Zzy.FBF.Game_Action_applyGuard = Game_Action.prototype.applyGuard;
Game_Action.prototype.applyGuard = function(damage, target)
{
if(target.isActor())
{
var exValue1 = Zzy.FBF.SpParamValueOfActor(target,2,this.subject());
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(target,2,target.grd,this.subject());
var result = exValue1 + exValue2 + target.grd;
return damage / (damage > 0 && target.isGuard() ? 2 * result : 1);
}
return Zzy.FBF.Game_Action_applyGuard.call(this,damage,target);
};
//=============================================================================
//Game_Unit
//=============================================================================
Game_Unit.prototype.tgrSum = function()
{
return this.aliveMembers().reduce(function(r, member)
{
var exValue1 = Zzy.FBF.SpParamValueOfActor(member,1);
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(member,1,member.tgr);
return r + member.tgr + exValue1 + exValue2;
}, 0);
};
Game_Unit.prototype.randomTarget = function()
{
var tgrRand = Math.random() * this.tgrSum();
var target = null;
this.aliveMembers().forEach(function(member)
{
var exValue1 = Zzy.FBF.SpParamValueOfActor(member,1);
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(member,1,member.tgr);
tgrRand -= (member.tgr + exValue1 + exValue2);
if (tgrRand <= 0 && !target) {
target = member;
}
});
return target;
};
//=============================================================================
//Game_Player
//=============================================================================
Zzy.FBF.Game_Player_makeEncounterCount = Game_Player.prototype.makeEncounterCount;
Game_Player.prototype.makeEncounterCount = function()//遇敌人步数
{
Zzy.FBF.Game_Player_makeEncounterCount.call(this);
var totalV1 = 0;
var totalV2 = 0;
for(var i=0;i<$gameParty._actors.length;i++)
{
var actorId = $gameParty._actors[i];
var actor = $gameActors.actor(actorId);
totalV1 += Zzy.FBF.SpParamValueOfActor(actor,16);
totalV2 += Zzy.FBF.SpParamPerValueOfActor(actor,16,this._encounterCount);
}
this._encounterCount += totalV1;
this._encounterCount += totalV2;
};
//=============================================================================
//BattleManager
//=============================================================================
BattleManager.ZzyFBFElParamPerValueOfActor = function(elementId,target,enemy)
{
var actor = target;
//遍历所有领域
var formula = undefined;
var useArr = $gameSystem.GetZzyFBFActorFieldUseArr(actor.actorId());
var exPer = 0;
for(var i=0;i<useArr.length;i++)
{
var item = useArr[i];
if(item.zzyFBF.elParamPer[elementId] !== undefined)
{
formula = item.zzyFBF.elParamPer[elementId];
exPer += $gameSystem.EvalZzyFBFFormula1(formula,actor,enemy);
exPer = exPer ? exPer : 0;
}
}
return exPer * 0.01;
}
BattleManager.ZzyFBFElParamValueOfActor = function(elementId,target)
{
var actor = target;
//遍历所有领域
var formula = undefined;
var useArr = $gameSystem.GetZzyFBFActorFieldUseArr(actor.actorId());
var exValue = 0;
for(var i=0;i<useArr.length;i++)
{
var item = useArr[i];
if(item.zzyFBF.elParam[elementId] !== undefined)
{
formula = item.zzyFBF.elParam[elementId];
exValue += $gameSystem.EvalZzyFBFFormula1(formula,actor);
exValue = exValue ? exValue : 0;
}
}
return exValue;
}
//增加金币
Zzy.FBF.BattleManager_gainGold = BattleManager.gainGold;
BattleManager.gainGold = function()
{
Zzy.FBF.BattleManager_gainGold.call(this);
var gold = this._rewards.gold;//原始金币
var totalV1 = 0;
var totalV2 = 0;
for(var i=0;i<$gameParty._actors.length;i++)
{
var actorId = $gameParty._actors[i];
var actor = $gameActors.actor(actorId);
totalV1 += Zzy.FBF.SpParamValueOfActor(actor,11);
totalV2 += Zzy.FBF.SpParamPerValueOfActor(actor,11,gold);
}
$gameParty.gainGold(totalV1+totalV2);
};
BattleManager.ZzyFBFSetExParamValueOfActor = function(exParamId,target,exSrcValue,enemy)
{
exSrcValue = exSrcValue ? exSrcValue : 0;
var actor = target;
//遍历所有领域
var formula = undefined;
var useArr = $gameSystem.GetZzyFBFActorFieldUseArr(actor.actorId());
var exValue = 0;
var exValuePer = 0;
for(var i=0;i<useArr.length;i++)
{
var item = useArr[i];
if(item.zzyFBF.exParam[exParamId] !== undefined)
{
formula = item.zzyFBF.exParam[exParamId];
exValue += $gameSystem.EvalZzyFBFFormula1(formula,actor,enemy);
exValue = exValue ? exValue : 0;
}
if(item.zzyFBF.exParamPer[exParamId] !== undefined)
{
formula = item.zzyFBF.exParamPer[exParamId];
exValuePer += $gameSystem.EvalZzyFBFFormula1(formula,actor,enemy);
exValuePer = exValuePer ? exValuePer : 0;
}
}
return (exValue + (exSrcValue*exValuePer*0.01));
}
//逃跑
Zzy.FBF.BattleManager_BattleManager = BattleManager.makeEscapeRatio;
BattleManager.makeEscapeRatio = function()
{
Zzy.FBF.BattleManager_BattleManager.call(this);
//改变逃跑概率
var actorArr = $gameParty.battleMembers();
for(var i=0;i<actorArr.length;i++)
{
var value = Zzy.FBF.SpParamValueOfActor(actorArr[i],13);
this._escapeRatio += value * 0.01;
}
};
//先发制人
Zzy.FBF.BattleManager_ratePreemptive = BattleManager.ratePreemptive;
BattleManager.ratePreemptive = function() //先发制人概率
{
var rate = Zzy.FBF.BattleManager_ratePreemptive.call(this);
var exRate = 0;
var actorArr = $gameParty.battleMembers();
for(var i=0;i<actorArr.length;i++)
{
var value = Zzy.FBF.SpParamValueOfActor(actorArr[i],14);
exRate += value * 0.01;
}
return rate+exRate;
};
//被偷袭
Zzy.FBF.BattleManager_rateSurprise = BattleManager.rateSurprise;
BattleManager.rateSurprise = function()
{
var rate = Zzy.FBF.BattleManager_rateSurprise.call(this);
var exRate = 0;
var actorArr = $gameParty.battleMembers();
for(var i=0;i<actorArr.length;i++)
{
var value = Zzy.FBF.SpParamValueOfActor(actorArr[i],15);
exRate += value * 0.01;
}
return rate+exRate;
};
//=============================================================================
//Game_BattlerBase
//=============================================================================
Zzy.FBF.Game_BattlerBase_skillMpCost = Game_BattlerBase.prototype.skillMpCost;
Game_BattlerBase.prototype.skillMpCost = function(skill)
{
var value = Zzy.FBF.Game_BattlerBase_skillMpCost.call(this,skill);
if(this.isActor() && skill.id !== 1 && skill.id !== 2)//排除攻击和防御
{
var exValue1 = Zzy.FBF.SpParamValueOfActor(this,5);
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(this,5,value);
return Math.floor(value+exValue1+exValue2);
}
return value;
};
//=============================================================================
//Game_Battler
//=============================================================================
//TP补充率
Zzy.FBF.Game_Battler_chargeTpByDamage = Game_Battler.prototype.chargeTpByDamage;
Game_Battler.prototype.chargeTpByDamage = function(damageRate)
{
Zzy.FBF.Game_Battler_chargeTpByDamage.call(this,damageRate);
if(this.isActor())
{
var value = Math.floor(50 * damageRate * this.tcr);
var exValue1 = Zzy.FBF.SpParamValueOfActor(this,6);
var exValue2 = Zzy.FBF.SpParamPerValueOfActor(this,6,value);
this.gainSilentTp(exValue1+exValue2);
}
};
Zzy.FBF.Game_Battler_regenerateHp = Game_Battler.prototype.regenerateHp;//HP自动恢复
Game_Battler.prototype.regenerateHp = function()
{
Zzy.FBF.Game_Battler_regenerateHp.call(this);
var exValue = 0;
var exSrcValue = Math.floor(this.mhp);
if(this.isActor())
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(7,this,exSrcValue);
if (exValue !== 0)
{this.gainHp(exValue);}
}
};
Zzy.FBF.Game_Battler_regenerateMp = Game_Battler.prototype.regenerateMp;//MP自动恢复
Game_Battler.prototype.regenerateMp = function()
{
Zzy.FBF.Game_Battler_regenerateMp.call(this);
var exValue = 0;
var exSrcValue = Math.floor(this.mmp);
if(this.isActor())
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(8,this,exSrcValue);
if (exValue !== 0)
{this.gainMp(exValue);}
}
};
Zzy.FBF.Game_Battler_regenerateTp = Game_Battler.prototype.regenerateTp;//TP自动恢复
Game_Battler.prototype.regenerateTp = function()
{
Zzy.FBF.Game_Battler_regenerateTp.call(this);
var exValue = 0;
var exSrcValue = Math.floor(100);
if(this.isActor())
{
exValue = BattleManager.ZzyFBFSetExParamValueOfActor(9,this,exSrcValue);
if (exValue !== 0)
{this.gainSilentTp(exValue);}
}
};
//-----------------------------------------------Zzy.FBF.Function------------------------------------------
Zzy.FBF.OpenFieldOfActor = function(actorId)//调用打开一个角色的领域
{
if(!$gameActors.actor(actorId))
{
console.log('Error:来自LiuYue_FileBless,检查Open指令填写角色ID是否正确');return;
}
if(!(SceneManager._scene instanceof Scene_Map))
{
console.log('Error:来自LiuYue_FileBless,请在地图界面使用Open指令');return;
}
$gameSystem.SetZzyFBFSelectActorIndex(actorId);
SceneManager.push(Scene_ZzyFBF);//压入场景
}
Zzy.FBF.OpenFieldOfParty = function(index)
{
var actorId = $gameParty._actors[index];
if(!actorId)
{
console.log('Error:来自LiuYue_FileBless,检查Open指令填写队伍队员ID是否正确');return;
}
Zzy.FBF.OpenFieldOfActor(actorId);
}
Zzy.FBF.PlaySE = function(soundID)//播放声音
{
var se = Zzy.Param.FBFAllSE[soundID];
if(se && se.name)
{
AudioManager.playSe(se);
}
}
Zzy.FBF.KeepNumber = function(num)
{
if(num === undefined || num === NaN)
{return 0;}
return num;
}
Zzy.FBF.StringToIntArr = function(str)
{
var strArr = str.split('str');
var len = strArr.length;
var intArr = [];
for(var i=0;i<len;i++)
{
intArr[i] = parseInt(strArr[i]);
}
return intArr;
}
Zzy.FBF.SpParamValueOfActor = function(actor,spParamId,target)
{
var formula = undefined;
var useArr = $gameSystem.GetZzyFBFActorFieldUseArr(actor.actorId());
var spValue = 0;
for(var i=0;i<useArr.length;i++)
{
var item = useArr[i];
if(item.zzyFBF.spParam[spParamId] !== undefined)
{
formula = item.zzyFBF.spParam[spParamId];
spValue += $gameSystem.EvalZzyFBFFormula1(formula,actor,target);
spValue = spValue ? spValue : 0;
}
}
return spValue;
}
Zzy.FBF.SpParamPerValueOfActor = function(actor,spParamId,srcParam,target)
{
srcParam = srcParam ? srcParam : 0;
var formula = undefined;
var useArr = $gameSystem.GetZzyFBFActorFieldUseArr(actor.actorId());
var spValuePer = 0;
for(var i=0;i<useArr.length;i++)
{
var item = useArr[i];
if(item.zzyFBF.spParamPer[spParamId] !== undefined)
{
formula = item.zzyFBF.spParamPer[spParamId];
spValuePer += $gameSystem.EvalZzyFBFFormula1(formula,actor,target);
spValuePer = spValuePer ? spValuePer : 0;
}
}
return srcParam*spValuePer*0.01;
}
//-----------------------------------------------Zzy.FBF.Function------------------------------------------
Zzy.FBF.EnableMenu = function(enable)
{
$gameSystem.SetZzyFBFEnableMenu(enable);
}
Zzy.FBF.InsertMenu = function(enable)
{
$gameSystem.SetZzyFBFInsertMenu(enable);
}
Zzy.FBF.CommandName = function(commandText)
{
$gameSystem.SetZzyFBFMenuCommandName(commandText);
}
Zzy.FBF.EnableSMenu = function(enable)
{
$gameSystem.SetZzyFBFEnableSMenu(enable);
}
Zzy.FBF.InsertSMenu = function(enable)
{
$gameSystem.SetZzyFBFInsertSMenu(enable);
}
Zzy.FBF.SCommandName = function(commandText)
{
$gameSystem.SetZzyFBFSMenuCommandName(commandText);
}
Zzy.FBF.OpenActor = function(actorId)
{
Zzy.FBF.OpenFieldOfActor(actorId);
}
Zzy.FBF.OpenParty = function(index)
{
Zzy.FBF.OpenFieldOfParty(index);
}
Zzy.FBF.EnableActorFB = function(enable)
{
$gameSystem.SetZzyFBFEnableActorFB(enable);
}
Zzy.FBF.MaxCount = function(formula)
{
$gameSystem.SetZzyFBFMaxFieldCount(formula);
}
Zzy.FBF.CurrentCount = function(formula)
{
$gameSystem.SetZzyFBFCurrentFieldCount(formula);
}
Zzy.FBF.MemoryCount = function(count)
{
$gameSystem.SetZzyFBFMemoryCount(count);
}
Zzy.FBF.ForceUnInstallAll = function(actorId)
{
$gameSystem.ZzyFBFForceUnInstallAll(actorId);
}