更新一些插件

main
戴面具的乐子人 10 months ago
parent 3d1bf9704c
commit 9d57e3e79c

@ -22,6 +22,7 @@
## 更新记录
- **2024/3/2****乐子人**;更新一些插件;
- **2024/2/18****乐子人**数值及技能效果调整2.19 细节修改2.21 调整技能修复天赋石BUG新增精金猫神殿地图2/24 修复部分地图BUG
- **2024/2/11****乐子人**细节修改新增风之地地图2.12, 修复飞船操纵事件BUG优化莉莉狗炮机制
- **2024/2/8****枪兵**改bgm删图片

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,10 +1,10 @@
[
null,
{"id":1,"expanded":false,"name":"地球","order":48,"parentId":32,"scrollX":1092,"scrollY":632.6666666666666},
{"id":1,"expanded":true,"name":"地球","order":48,"parentId":32,"scrollX":1092,"scrollY":632.6666666666666},
{"id":2,"expanded":false,"name":"星港","order":11,"parentId":27,"scrollX":1152,"scrollY":1584},
{"id":3,"expanded":true,"name":"好人家二层","order":69,"parentId":22,"scrollX":824,"scrollY":466.5},
{"id":4,"expanded":true,"name":"好人家地下室","order":70,"parentId":22,"scrollX":1476,"scrollY":640.1999999999999},
{"id":5,"expanded":true,"name":"海滩","order":53,"parentId":31,"scrollX":1357.2,"scrollY":1167.6},
{"id":3,"expanded":true,"name":"好人家二层","order":69,"parentId":22,"scrollX":1092,"scrollY":622},
{"id":4,"expanded":true,"name":"好人家地下室","order":70,"parentId":22,"scrollX":1092,"scrollY":622},
{"id":5,"expanded":false,"name":"海滩","order":53,"parentId":31,"scrollX":1081.3333333333333,"scrollY":1167.3333333333333},
{"id":6,"expanded":true,"name":"深海及纳萨托恩外围","order":57,"parentId":10,"scrollX":1357.2,"scrollY":1239.6},
{"id":7,"expanded":true,"name":"纳萨托恩","order":58,"parentId":6,"scrollX":1357.2,"scrollY":1263.6},
{"id":8,"expanded":true,"name":"通往皇宫的管道","order":59,"parentId":7,"scrollX":1357.2,"scrollY":1594.8},
@ -19,9 +19,9 @@ null,
{"id":17,"expanded":false,"name":"艾欧同步轨道","order":4,"parentId":15,"scrollX":1092,"scrollY":632.6666666666666},
{"id":18,"expanded":true,"name":"飞船遗迹内部","order":5,"parentId":17,"scrollX":1131,"scrollY":2081},
{"id":19,"expanded":false,"name":"操作仓","order":6,"parentId":18,"scrollX":982.8,"scrollY":569.4},
{"id":20,"expanded":true,"name":"南郊(有水泵站)","order":67,"parentId":31,"scrollX":1081.3333333333333,"scrollY":1995.3333333333333},
{"id":20,"expanded":true,"name":"南郊(有水泵站)","order":67,"parentId":31,"scrollX":1081.3333333333333,"scrollY":622},
{"id":21,"expanded":true,"name":"风之草原第二层","order":40,"parentId":35,"scrollX":1081.3333333333333,"scrollY":622},
{"id":22,"expanded":false,"name":"好人家一层","order":68,"parentId":20,"scrollX":832,"scrollY":624},
{"id":22,"expanded":true,"name":"好人家一层","order":68,"parentId":20,"scrollX":1092,"scrollY":622},
{"id":23,"expanded":true,"name":"大海","order":54,"parentId":5,"scrollX":982.8,"scrollY":569.4},
{"id":24,"expanded":true,"name":"迷雾之岛","order":55,"parentId":23,"scrollX":1366.8,"scrollY":752.4},
{"id":25,"expanded":false,"name":"水塔2","order":73,"parentId":20,"scrollX":589.8181818181819,"scrollY":422.90909090909093},
@ -29,19 +29,19 @@ null,
{"id":27,"expanded":false,"name":"晶核研究站","order":9,"parentId":14,"scrollX":1081.3333333333333,"scrollY":632.6666666666666},
{"id":28,"expanded":false,"name":"实验室","order":10,"parentId":27,"scrollX":1139,"scrollY":627},
{"id":29,"expanded":false,"name":"渡鸦12345的办公室2F","order":52,"parentId":13,"scrollX":1040,"scrollY":636},
{"id":30,"expanded":true,"name":"渡鸦12345的办公室","order":50,"parentId":31,"scrollX":1174,"scrollY":1664},
{"id":30,"expanded":true,"name":"渡鸦12345的办公室","order":50,"parentId":31,"scrollX":1174.6666666666667,"scrollY":622},
{"id":31,"expanded":true,"name":"世界地图","order":49,"parentId":1,"scrollX":8284.363636363636,"scrollY":2969.4545454545455},
{"id":32,"expanded":false,"name":"表世界宇宙","order":19,"parentId":0,"scrollX":1318.6666666666667,"scrollY":1647.3333333333333},
{"id":32,"expanded":true,"name":"表世界宇宙","order":19,"parentId":0,"scrollX":1318.6666666666667,"scrollY":622},
{"id":33,"expanded":true,"name":"柯伊伯站","order":20,"parentId":32,"scrollX":1798.6666666666667,"scrollY":1922},
{"id":34,"expanded":true,"name":"豆豆星系","order":21,"parentId":32,"scrollX":1092,"scrollY":632.6666666666666},
{"id":35,"expanded":true,"name":"豆豆星","order":22,"parentId":34,"scrollX":4678,"scrollY":4782},
{"id":34,"expanded":false,"name":"豆豆星系","order":21,"parentId":32,"scrollX":1092,"scrollY":632.6666666666666},
{"id":35,"expanded":false,"name":"豆豆星","order":22,"parentId":34,"scrollX":4678.666666666667,"scrollY":4782},
{"id":36,"expanded":false,"name":"群星之城","order":23,"parentId":35,"scrollX":1318.6666666666667,"scrollY":1778},
{"id":37,"expanded":false,"name":"测试用的地图","order":83,"parentId":0,"scrollX":1092,"scrollY":632.6666666666666},
{"id":38,"expanded":false,"name":"艾瑞姆皇宫","order":24,"parentId":36,"scrollX":1357.2,"scrollY":1119.6},
{"id":39,"expanded":true,"name":"艾瑞姆皇宫1F","order":25,"parentId":38,"scrollX":1131,"scrollY":1533},
{"id":40,"expanded":false,"name":"炼金商店","order":26,"parentId":36,"scrollX":1092,"scrollY":632.6666666666666},
{"id":41,"expanded":false,"name":"世界之门","order":47,"parentId":32,"scrollX":2485.090909090909,"scrollY":1368},
{"id":42,"expanded":true,"name":"魔王城","order":31,"parentId":35,"scrollX":1081.3333333333333,"scrollY":807.3333333333334},
{"id":42,"expanded":false,"name":"魔王城","order":31,"parentId":35,"scrollX":1081.3333333333333,"scrollY":632.6666666666666},
{"id":43,"expanded":true,"name":"巨龟岩台号控制室","order":78,"parentId":1,"scrollX":1366.6666666666667,"scrollY":1368.6666666666667},
{"id":44,"expanded":true,"name":"走廊","order":79,"parentId":43,"scrollX":1366.6666666666667,"scrollY":1368.6666666666667},
{"id":45,"expanded":false,"name":"走廊","order":80,"parentId":44,"scrollX":1345.3333333333333,"scrollY":3675.3333333333335},
@ -63,7 +63,7 @@ null,
{"id":61,"expanded":false,"name":"大漩涡","order":64,"parentId":26,"scrollX":1357.2,"scrollY":1167.6},
{"id":62,"expanded":false,"name":"伊娃之战","order":7,"parentId":15,"scrollX":1092,"scrollY":632.6666666666666},
{"id":63,"expanded":true,"name":"大海(过剧情)","order":66,"parentId":23,"scrollX":2485.090909090909,"scrollY":1368},
{"id":64,"expanded":true,"name":"塔纳古斯","order":12,"parentId":14,"scrollX":1366.6666666666667,"scrollY":622},
{"id":64,"expanded":false,"name":"塔纳古斯","order":12,"parentId":14,"scrollX":1366.6666666666667,"scrollY":622},
{"id":65,"expanded":true,"name":"阿拉曼达广场","order":13,"parentId":64,"scrollX":1081.3333333333333,"scrollY":1166},
{"id":66,"expanded":true,"name":"晋升之塔外","order":14,"parentId":65,"scrollX":1092,"scrollY":632.6666666666666},
{"id":67,"expanded":true,"name":"晋升之塔","order":15,"parentId":66,"scrollX":1081.3333333333333,"scrollY":855.3333333333334},

File diff suppressed because one or more lines are too long

@ -1,5 +1,5 @@
/*:
* @plugindesc v1.04 LiuYue_GainItemTips 获取道具显示
* @plugindesc v1.05 LiuYue_GainItemTips 获取道具显示
* @author 流逝的岁月
*
* @help
@ -82,7 +82,7 @@
*----------------------------------------------------------
*
*
*
* 我叫坂本v1.05 修复进入商店界面后,购买物品也会出现提示
* 我叫坂本v1.04 添加文本宽度自适应功能
* 我叫坂本v1.03 修改结构代码,减少冲突,修复一个字体过大导致图标文本重叠的bug
* 我叫坂本v1.02 修复单独插件测试报错,修复拆卸装备出现信息的逻辑问题,添加排序显示优先级
@ -356,6 +356,24 @@
* @desc 显示数量的文本格式,%1会被替换为道具数量
* @default x %1
*
*
* @param ---高级---
* @default
*
* @param ExSceneGain
* @text 额外的记录界面
* @parent ---高级---
* @type text
* @desc 如果想让这个界面下获取的物品可以被提示记录,请通过逗号追加对应的界面名称
* @default Scene_Shop,Scene_ZzySCFChest
*
*
*
*
*
*
*
*
* @param ---音效---
* @default
*
@ -429,7 +447,7 @@ LiuYue.LiuYue_GainItemTips = true;//插件启动
var Zzy = Zzy || {};
Zzy.GIT = Zzy.GIT || {};
Zzy.GIT.version = 1.04;
Zzy.GIT.version = 1.05;
Zzy.Parameters = PluginManager.parameters('LiuYue_GainItemTips');
Zzy.Param = Zzy.Param || {};
@ -495,6 +513,27 @@ Zzy.Param.GITIsIconFlash = eval(Zzy.Parameters['IsIconFlash']);
Zzy.Param.GITIconFlashFrame = parseInt(Zzy.Parameters['IconFlashFrame']);
//---更新--- v1.05 指定场景获取道具具有提示效果
Zzy.GIT.ExSceneGain = String(Zzy.Parameters['ExSceneGain'] || 'Scene_Shop,Scene_ZzySCFChest');
Zzy.GIT.TransExSceneGain = function()
{
var strArr = Zzy.GIT.ExSceneGain.split(',');
var struct = {};
for(var i=0;i<strArr.length;i++)
{
var str = strArr[i];
struct[str] = true;
}
return struct;
}
Zzy.GIT.GainSceneStruct = Zzy.GIT.TransExSceneGain();
//--------------------------------------声音-------------------------------------
Zzy.Param.GITMakeSE = function(seName,seVolume,sePitch,sePan)
{
@ -1372,9 +1411,7 @@ Game_Interpreter.prototype.command126 = function()
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
if($gameSystem.GetZzyGITPluginEnable())
{
Zzy.GIT.GainPrompt($dataItems[this._params[0]], value);
}
{Zzy.GIT.GainPrompt($dataItems[this._params[0]], value);}
return result;
};
@ -1385,9 +1422,7 @@ Game_Interpreter.prototype.command127 = function()
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
if($gameSystem.GetZzyGITPluginEnable())
{
Zzy.GIT.GainPrompt($dataWeapons[this._params[0]], value);
}
{Zzy.GIT.GainPrompt($dataWeapons[this._params[0]], value);}
return result;
};
@ -1398,16 +1433,42 @@ Game_Interpreter.prototype.command128 = function()
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
if($gameSystem.GetZzyGITPluginEnable())
{
Zzy.GIT.GainPrompt($dataArmors[this._params[0]], value);
}
{Zzy.GIT.GainPrompt($dataArmors[this._params[0]], value);}
return result;
};
//=======================================================================
//Game_Party
//=======================================================================
Zzy.GIT.Game_Party_gainItem = Game_Party.prototype.gainItem;
Game_Party.prototype.gainItem = function(item, amount, includeEquip)
{
//此处使用获取前,获取后 消耗的方式来计算增益物品提示
var prevNum = 0;
if($gameSystem.GetZzyGITPluginEnable())
{prevNum = this.numItems(item);}
Zzy.GIT.Game_Party_gainItem.call(this,item,amount,includeEquip);
if($gameSystem.GetZzyGITPluginEnable())
{
var sName = SceneManager._scene.constructor.name;
if(Zzy.GIT.GainSceneStruct[sName])
{
var afterNum = this.numItems(item);
var realAmount = afterNum - prevNum;
if(realAmount)Zzy.GIT.GainPrompt(item, realAmount);
}
}
};
Zzy.GIT.Game_Party_gainGold = Game_Party.prototype.gainGold;
Game_Party.prototype.gainGold = function(amount)
{
@ -1418,6 +1479,9 @@ Game_Party.prototype.gainGold = function(amount)
}
}
//=======================================================================
//Sprite_ZzyGITIcon
//=======================================================================

File diff suppressed because it is too large Load Diff

@ -16,6 +16,58 @@ Yanfly.IS.version = 1.11;
* through an item synthesis system.
* @author Yanfly Engine Plugins
*
*
*
* @param ---魔改---
* @default
*
* @param BarWidth
* @text 条组宽度
* @parent ---魔改---
* @type number
* @desc 这是添加到右侧滑块的宽度值,默认值28
* @default 28
*
* @param BarPadding
* @text 条组空隙
* @parent ---魔改---
* @type number
* @desc 这是条组和文本预留的空隙,默认值为6
* @default 6
*
* @param BarBackColor
* @text 底层条背景颜色
* @parent ---魔改---
* @type text
* @desc 支持#000000 ~ #ffffff rgba(0~255,0~255,0~255,0~1) 两种颜色文本的格式
* @default rgba(0,0,0,0.5)
*
* @param BarBlockColor
* @text 滑动条颜色
* @parent ---魔改---
* @type text
* @desc 支持#000000 ~ #ffffff rgba(0~255,0~255,0~255,0~1) 两种颜色文本的格式
* @default rgba(160,160,160,0.8)
*
* @param BarTouchColor
* @text 选中滑动条颜色
* @parent ---魔改---
* @type text
* @desc 支持#000000 ~ #ffffff rgba(0~255,0~255,0~255,0~1) 两种颜色文本的格式
* @default rgba(200,200,200,1)
*
*
* @param BarBlockDis
* @text 滑动条间距
* @parent ---魔改---
* @type number
* @desc 这是滑动条和背景条之间的间距,默认值为2
* @default 2
*
*
*
*
*
* @param ---General---
* @default
*
@ -211,6 +263,16 @@ Yanfly.IS.version = 1.11;
* @default 0
*
* @help
*
*
* 魔改作者: 流逝的岁月
* 魔改版本: v1.00
*
* 魔改内容: v1.00 添加滑块滚动区域
*
*
*
*
* ============================================================================
* Introduction
* ============================================================================
@ -395,9 +457,27 @@ Yanfly.IS.version = 1.11;
// Parameter Variables
//=============================================================================
var Zzy = Zzy || {};
Zzy.XYIS = Zzy.XYIS || {};
Yanfly.Parameters = PluginManager.parameters("YEP_ItemSynthesis");
Yanfly.Param = Yanfly.Param || {};
Zzy.XYIS.BarWidth = parseInt(Yanfly.Parameters['BarWidth'] || 28);//条组宽度
Zzy.XYIS.BarPadding = parseInt(Yanfly.Parameters['BarPadding'] || 6);
Zzy.XYIS.BarBackColor = String(Yanfly.Parameters['BarBackColor'] || 'rgba(0,0,0,0.5)');//底层颜色
Zzy.XYIS.BarBlockColor = String(Yanfly.Parameters['BarBlockColor'] || 'rgba(160,160,160,0.8)');//灰色条块
Zzy.XYIS.BarTouchColor = String(Yanfly.Parameters['BarTouchColor'] || 'rgba(200,200,200,1)');//点中颜色
Zzy.XYIS.BarBlockDis = parseInt(Yanfly.Parameters['BarBlockDis'] || 2);//灰色条块间距
Yanfly.Param.ISSynthCmd = String(Yanfly.Parameters["Synthesis Command"]);
Yanfly.Param.ISShowSynth = String(Yanfly.Parameters["Show Command"]);
Yanfly.Param.ISShowSynth = eval(Yanfly.Param.ISShowSynth);
@ -432,6 +512,268 @@ Yanfly.Param.ISDefVol = Number(Yanfly.Parameters["Default Volume"]);
Yanfly.Param.ISDefPitch = Number(Yanfly.Parameters["Default Pitch"]);
Yanfly.Param.ISDefPant = Number(Yanfly.Parameters["Default Pan"]);
//================================================================
//Window_Selectable
//================================================================
//---魔改--- 添加Scroll滑块
Window_Selectable.prototype.IsZzyXYISScrollBar = function()
{return false;}
Zzy.XYIS.Window_Selectable_itemWidth = Window_Selectable.prototype.itemWidth;
Window_Selectable.prototype.itemWidth = function()
{
var iw = Zzy.XYIS.Window_Selectable_itemWidth.call(this);
if(this.IsZzyXYISScrollBar())
{
var mcs = this.maxCols();
var dis = (this.DefaultZzyXYISBarWidth()+this.DefaultZzyXYISBarPadding()*2) / mcs;
return iw - dis;
}
else return iw;
};
Window_Selectable.prototype.DefaultZzyXYISBarWidth = function()
{return Zzy.XYIS.BarWidth;}
Window_Selectable.prototype.DefaultZzyXYISBarPadding = function()
{return Zzy.XYIS.BarPadding;}
Window_Selectable.prototype.DefaultZzyXYISBarBackColor = function()
{return Zzy.XYIS.BarBackColor;}
Window_Selectable.prototype.DefaultZzyXYISBarBlockColor = function()
{return Zzy.XYIS.BarBlockColor;}
Window_Selectable.prototype.DefaultZzyXYISBarTouchColor = function()
{return Zzy.XYIS.BarTouchColor;}
Window_Selectable.prototype.DefaultZzyXYISBarBlockDis = function()
{return Zzy.XYIS.BarBlockDis;}
Zzy.XYIS.Window_Selectable_refresh = Window_Selectable.prototype.refresh;
Window_Selectable.prototype.refresh = function()//刷新-可能需要重写
{
Zzy.XYIS.Window_Selectable_refresh.call(this);
if(this.IsZzyXYISScrollBar())this.DrawZzyXYISBar();//绘制条组
}
Window_Selectable.prototype.GetZzyXYISBarRect = function()//获取空间
{
var width = this.contents.width;
var height = this.contents.height;
var rt = new Rectangle(width - this.DefaultZzyXYISBarWidth(),
0,
this.DefaultZzyXYISBarWidth(),
height);
return rt;
}
Window_Selectable.prototype.DrawZzyXYISBar = function()
{
var barRt = this.GetZzyXYISBarRect();
this.DrawZzyXYISBarBack(barRt);//绘制底层
this.DrawZzyXYISBarBlock(barRt);//绘制条块
}
Window_Selectable.prototype.DrawZzyXYISBarBack = function(barRt)
{
var color = this.DefaultZzyXYISBarBackColor();
this.contents.fillRect(barRt.x,barRt.y,barRt.width,barRt.height,color);
}
Window_Selectable.prototype.DrawZzyXYISBarBlock = function(barRt)
{
var color = this._ZzyXYISHit ? this.DefaultZzyXYISBarTouchColor() : this.DefaultZzyXYISBarBlockColor();
var rt = this.GetZzyXYISBlockBarRect();
this.contents.fillRect(rt.x,rt.y,rt.width,rt.height,color);
}
Window_Selectable.prototype.GetZzyXYISBarRectArea = function()//获取区域
{
var barRt = this.GetZzyXYISBarRect();
var dis = this.DefaultZzyXYISBarBlockDis();
var nbarRt = new Rectangle(
barRt.x + dis,
barRt.y + dis,
barRt.width - dis*2,
barRt.height - dis*2);
return nbarRt;
}
Window_Selectable.prototype.GetZzyXYISBlockBarRect = function()
{
//会计算当前滚动条的位置
var rate = this.GetZzyXYISBarRate();
var nbarRt = this.GetZzyXYISBarRectArea();
var barHieght = nbarRt.height * rate;
var rt = new Rectangle(nbarRt.x,
nbarRt.y,
nbarRt.width,
barHieght);
var tp = this.topRow();//对应位置
var mtp = this.maxTopRow();//最大顶层
var trate = mtp ? tp / mtp : 0;
rt.y += (nbarRt.height-rt.height) * trate;
return rt;
}
Window_Selectable.prototype.GetZzyXYISBarRate = function()
{
var mr = this.maxRows();
var mpr = this.maxPageRows();
var rate = mpr / mr;
return Math.min(1,rate);
}
Zzy.XYIS.Window_Selectable_processTouch = Window_Selectable.prototype.processTouch;
Window_Selectable.prototype.processTouch = function()
{
Zzy.XYIS.Window_Selectable_processTouch.call(this);
//刷新关闭Touch
if(!this._touching)
{
if(this._ZzyXYISHit)
{
this._ZzyXYISHit = false;
this.refresh();
}
}
};
Window_Selectable.prototype.IsHitZzyXYISBar = function(x,y)//点中测试
{
var rt = this.GetZzyXYISBlockBarRect();
var padding = this.standardPadding();
rt.x += padding;
rt.y += padding;
if(x >= rt.x &&
x <= rt.width+rt.x &&
y >= rt.y &&
y <= rt.height+rt.y)return true;
return false;
}
Zzy.XYIS.Window_Selectable_update = Window_Selectable.prototype.update;
Window_Selectable.prototype.update = function()
{
Zzy.XYIS.Window_Selectable_update.call(this);
if(this.IsZzyXYISScrollBar())this.UpdateZzyXYISHit();
}
Window_Selectable.prototype.UpdateZzyXYISHit = function()
{
if(!this._ZzyXYISHit)return;
this._ZzyXYISHitEX = this.canvasToLocalX(TouchInput.x);
this._ZzyXYISHitEY = this.canvasToLocalY(TouchInput.y);
var cDis = this._ZzyXYISHitCY - this._ZzyXYISHitEY;
if(Math.abs(cDis) >= this._ZzyXYISPosInfo.dis / 2)
{
this._ZzyXYISHitCY = this._ZzyXYISHitEY;
if(cDis < 0)this.scrollDown();
else this.scrollUp();
}
}
Window_Selectable.prototype.MakeZzyXYISArea = function()//制作翻页区域
{
var mtp = this.maxTopRow();//最大顶层
var rt = this.GetZzyXYISBarRectArea();
var dis = rt.height / mtp;
var posY = [];
for(var i=0;i<mtp;i++)
{
posY[i] = dis / 2 + i*dis;
}
this._ZzyXYISPosInfo = {};
this._ZzyXYISPosInfo.posYArr = posY;
this._ZzyXYISPosInfo.dis = dis;
}
Zzy.XYIS.Window_Selectable_onTouch = Window_Selectable.prototype.onTouch;
Window_Selectable.prototype.onTouch = function(triggered)
{
if(this.IsZzyXYISScrollBar())
{
if(triggered)
{
var x = this.canvasToLocalX(TouchInput.x);
var y = this.canvasToLocalY(TouchInput.y);
if(this.IsHitZzyXYISBar(x, y))
{
if(!this._ZzyXYISHit)
{
this._ZzyXYISHit = true;//点选中时
this.refresh();//执行一次刷新
}
this._ZzyXYISHit = true;//点选中时
//配置点击X和点击Y
this._ZzyXYISHitSX = x;
this._ZzyXYISHitSY = y;
this._ZzyXYISHitEX = x;
this._ZzyXYISHitEY = y;
this._ZzyXYISHitCX = x;
this._ZzyXYISHitCY = y;
}
}
}
Zzy.XYIS.Window_Selectable_onTouch.call(this,triggered);
};
Window_Selectable.prototype.RefreshZzyXYIS = function()
{
if(this.IsZzyXYISScrollBar())
{
this.MakeZzyXYISArea();//计算Area区域
this.DrawZzyXYISBar();//绘制条组
}
}
//=============================================================================
// DataManager
//=============================================================================
@ -911,6 +1253,7 @@ function Window_SynthesisStatus() {
this.initialize.apply(this, arguments);
}
Window_SynthesisStatus.prototype = Object.create(Window_Base.prototype);
Window_SynthesisStatus.prototype.constructor = Window_SynthesisStatus;
@ -919,15 +1262,28 @@ Window_SynthesisStatus.prototype.initialize = function (wx, wy, ww, wh) {
this.refresh();
};
Window_SynthesisStatus.prototype.refresh = function () {
this.contents.clear();
var dy = 0;
dy = this.drawCollectedRecipes(dy);
dy = this.drawCraftedItems(dy);
dy = this.drawCraftedWeapons(dy);
dy = this.drawCraftedArmors(dy);
};
Window_SynthesisStatus.prototype.drawCollectedRecipes = function (dy) {
if (Yanfly.Param.ISColRecipes.length <= 0) return dy;
var dw = this.contents.width;
@ -992,6 +1348,27 @@ Window_SynthesisStatus.prototype.drawCraftedArmors = function (dy) {
return dy + this.lineHeight();
};
//=============================================================================
// Window_SynthesisList
//=============================================================================
@ -1136,13 +1513,28 @@ function Window_SynthesisIngredients() {
this.initialize.apply(this, arguments);
}
//---魔改--- v1.00 修改继承对象 Window_Base 改为 Window_Selectable
Window_SynthesisIngredients.prototype = Object.create(Window_Base.prototype);
Window_SynthesisIngredients.prototype.constructor = Window_SynthesisIngredients;
Window_SynthesisIngredients.prototype.initialize = function (wx, wy, ww, wh) {
Window_Base.prototype.initialize.call(this, wx, wy, ww, wh);
this._ZzyXYISSelectWindow = new Window_SynthesisIngredientsSelect(this);
this.addChild(this._ZzyXYISSelectWindow);
};
Window_SynthesisIngredients.prototype.refresh = function (item) {
this.contents.clear();
if (!item) return;
@ -1150,17 +1542,27 @@ Window_SynthesisIngredients.prototype.refresh = function (item) {
this.resetFontSettings();
this.resetTextColor();
this.drawItemIngredients(item, this.lineHeight());
};
Window_SynthesisIngredients.prototype.drawItemIngredients = function (item, wy) {
var ww = this.contents.width;
this.changeTextColor(this.systemColor());
this.drawText(Yanfly.Param.ISIngredientsList, 0, 0, ww, "center");
this.changeTextColor(this.normalColor());
for (var i = 0; i < item.synthIngredients.length; ++i) {
wy = this.drawItemDetails(i, wy);
if (wy + this.lineheight > this.contents.height) break;
}
//---魔改--- v1.00 停止部分绘制
// this.changeTextColor(this.normalColor());
// for (var i = 0; i < item.synthIngredients.length; ++i) {
// wy = this.drawItemDetails(i, wy);
// if (wy + this.lineheight > this.contents.height) break;
// }
if(this._ZzyXYISSelectWindow)this._ZzyXYISSelectWindow.refresh();
this.drawItemSynthCost(item, wy);
};
@ -1224,6 +1626,148 @@ Window_SynthesisIngredients.prototype.drawItemSynthCost = function (item, wy) {
var ww = this.contents.width - 4;
this.drawCurrencyValue(value, TextManager.currencyUnit, 0, wy, ww);
};
//---魔改--- v1.00 拓展:用于将内容全部单独存入,实现可翻找的滚动条功能
//=============================================================================
// Window_SynthesisIngredientsSelect
//=============================================================================
function Window_SynthesisIngredientsSelect() {
this.initialize.apply(this, arguments);
}
//---魔改--- v1.00 修改继承对象 Window_Base 改为 Window_Selectable
Window_SynthesisIngredientsSelect.prototype = Object.create(Window_Selectable.prototype);
Window_SynthesisIngredientsSelect.prototype.constructor = Window_SynthesisIngredientsSelect;
Window_SynthesisIngredientsSelect.prototype.initialize = function (win)
{
var sy = win.lineHeight();
this._win = win;
Window_Selectable.prototype.initialize.call(this, 0, sy, win.width, win.height-sy);
this.opacity = 0;
};
//---魔改--- v1.00 添加识别ScrollBar对象
Window_SynthesisIngredientsSelect.prototype.IsZzyXYISScrollBar = function()
{return true;}
Window_SynthesisIngredientsSelect.prototype.refresh = function()
{
this.MakeZzyXYISData();//制作列表
Window_Selectable.prototype.refresh.call(this);
this.RefreshZzyXYIS();//绘制条
}
Window_SynthesisIngredientsSelect.prototype.MakeZzyXYISData = function()
{
this._data = [];
this._data2 = [];
var item = this._win._item;
for (var i = 0; i < item.synthIngredients.length; ++i)
{
this._data.push(DataManager.getSynthesisIngredient(item, i));
this._data2.push(DataManager.getSynthesisQuantity(item, i));
}
}
Window_SynthesisIngredientsSelect.prototype.drawItem = function(index)
{
var ingredient = this._data[index];
var quantity = this._data2[index];
var rt = this.itemRect(index);
this.resetFontSettings();
this.drawItemName.call(this, ingredient, rt.x, rt.y, rt.width);
if (Yanfly.Param.ISAmountFmt) {
this.drawItemQuantity(index,rt);
} else {
this.drawItemQuantity2(index,rt);
}
}
Window_SynthesisIngredientsSelect.prototype.maxItems = function()
{return this._data ? this._data.length : 0;}
Window_SynthesisIngredientsSelect.prototype.drawItemQuantity = function (index, rt)
{
var ingredient = this._data[index];
var quantity = this._data2[index];
var ww = rt.width;
this.contents.fontSize = Yanfly.Param.ISQuantitySize;
this.changeTextColor(this.normalColor());
var num = "/" + Yanfly.Util.toGroup($gameParty.numItems(ingredient));
this.drawText(num, rt.x, rt.y, rt.width, "right");
ww -= this.textWidth(num);
if ($gameParty.numItems(ingredient) >= quantity) {
this.changeTextColor(this.powerUpColor());
} else {
this.changeTextColor(this.powerDownColor());
}
var text = String(Yanfly.Util.toGroup(quantity));
this.drawText(text, rt.x, rt.y, ww, "right");
};
Window_SynthesisIngredientsSelect.prototype.drawItemQuantity2 = function (index, rt)
{
var ingredient = this._data[index];
var quantity = this._data2[index];
var owned = $gameParty.numItems(ingredient);
var ww = rt.width
this.contents.fontSize = Yanfly.Param.ISQuantitySize;
this.changeTextColor(this.normalColor());
var num = "/" + Yanfly.Util.toGroup(quantity);
this.drawText(num, rt.x, rt.y, rt.width, "right");
ww -= this.textWidth(num);
if ($gameParty.numItems(ingredient) >= quantity) {
this.changeTextColor(this.powerUpColor());
} else {
this.changeTextColor(this.powerDownColor());
}
var text = String(Yanfly.Util.toGroup(owned));
this.drawText(text, rt.x, rt.y, ww, "right");
};
//=============================================================================
// Window_SynthesisNumber

@ -16,6 +16,15 @@ Yanfly.Quest.version = 1.01;
* @author Yanfly Engine Plugins 汉化硕明云书
*
* @help
*
* 魔改作者: 流逝的岁月
* 魔改版本: v1.00
*
* 魔改内容: v1.00 添加滑块滚动区域
*
* 注意: 插件重写了 Window_QuestData.prototype.processTouch 这是极有可能造成不兼容的情况的!
*
*
* ============================================================================
* 指令
* ============================================================================
@ -414,6 +423,59 @@ Yanfly.Quest.version = 1.01;
* End of Help
* ============================================================================
*
* @param ---魔改---
* @default
*
* @param BarWidth
* @text 条组宽度
* @parent ---魔改---
* @type number
* @desc 这是添加到右侧滑块的宽度值,默认值28
* @default 28
*
* @param BarPadding
* @text 条组空隙
* @parent ---魔改---
* @type number
* @desc 这是条组和文本预留的空隙,默认值为6
* @default 6
*
* @param BarBackColor
* @text 底层条背景颜色
* @parent ---魔改---
* @type text
* @desc 支持#000000 ~ #ffffff rgba(0~255,0~255,0~255,0~1) 两种颜色文本的格式
* @default rgba(0,0,0,0.5)
*
* @param BarBlockColor
* @text 滑动条颜色
* @parent ---魔改---
* @type text
* @desc 支持#000000 ~ #ffffff rgba(0~255,0~255,0~255,0~1) 两种颜色文本的格式
* @default rgba(160,160,160,0.8)
*
* @param BarTouchColor
* @text 选中滑动条颜色
* @parent ---魔改---
* @type text
* @desc 支持#000000 ~ #ffffff rgba(0~255,0~255,0~255,0~1) 两种颜色文本的格式
* @default rgba(200,200,200,1)
*
*
* @param BarBlockDis
* @text 滑动条间距
* @parent ---魔改---
* @type number
* @desc 这是滑动条和背景条之间的间距,默认值为2
* @default 2
*
*
*
*
*
*
*
*
* @param ---Main Menu---
* @text 主菜单
* @default
@ -2189,8 +2251,29 @@ if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= "1.3.5") {
// Parameter Variables
//=============================================================================
var Zzy = Zzy || {};
Zzy.XTQJ = Zzy.XTQJ || {};
Yanfly.Parameters = PluginManager.parameters("YEP_QuestJournal");
Yanfly.Param = Yanfly.Param || {};
Zzy.XTQJ.BarWidth = parseInt(Yanfly.Parameters['BarWidth'] || 28);//条组宽度
Zzy.XTQJ.BarPadding = parseInt(Yanfly.Parameters['BarPadding'] || 6);
Zzy.XTQJ.BarBackColor = String(Yanfly.Parameters['BarBackColor'] || 'rgba(0,0,0,0.5)');//底层颜色
Zzy.XTQJ.BarBlockColor = String(Yanfly.Parameters['BarBlockColor'] || 'rgba(160,160,160,0.8)');//灰色条块
Zzy.XTQJ.BarTouchColor = String(Yanfly.Parameters['BarTouchColor'] || 'rgba(200,200,200,1)');//点中颜色
Zzy.XTQJ.BarBlockDis = parseInt(Yanfly.Parameters['BarBlockDis'] || 2);//灰色条块间距
Yanfly.Param.QuestCmdName = String(Yanfly.Parameters["Quest Command"]);
Yanfly.Param.QuestCmdShow = eval(Yanfly.Parameters["Show Command"]);
@ -2203,6 +2286,297 @@ if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= "1.3.5") {
Yanfly.Param.QuestDataWindow = JSON.parse(Yanfly.Parameters["Quest Data Window"]);
Yanfly.Quest.LunaticMode = JSON.parse(Yanfly.Parameters["Lunatic Mode"]);
//=============================================================================
// Window_Selectable
//=============================================================================
//---魔改--- v1.00 用于添加滚动条样式
Window_Selectable.prototype.IsZzyXTQJScrollBar = function()
{return false;}
Zzy.XTQJ.Window_Selectable_itemWidth = Window_Selectable.prototype.itemWidth;
Window_Selectable.prototype.itemWidth = function()
{
var iw = Zzy.XTQJ.Window_Selectable_itemWidth.call(this);
if(this.IsZzyXTQJScrollBar())
{
var mcs = this.maxCols();
var dis = (this.DefaultZzyXTQJBarWidth()+this.DefaultZzyXTQJBarPadding()*2) / mcs;
return iw - dis;
}
else return iw;
};
Window_Selectable.prototype.DefaultZzyXTQJBarWidth = function()
{return Zzy.XTQJ.BarWidth;}
Window_Selectable.prototype.DefaultZzyXTQJBarPadding = function()
{return Zzy.XTQJ.BarPadding;}
Window_Selectable.prototype.DefaultZzyXTQJBarBackColor = function()
{return Zzy.XTQJ.BarBackColor;}
Window_Selectable.prototype.DefaultZzyXTQJBarBlockColor = function()
{return Zzy.XTQJ.BarBlockColor;}
Window_Selectable.prototype.DefaultZzyXTQJBarTouchColor = function()
{return Zzy.XTQJ.BarTouchColor;}
Window_Selectable.prototype.DefaultZzyXTQJBarBlockDis = function()
{return Zzy.XTQJ.BarBlockDis;}
Zzy.XTQJ.Window_Selectable_refresh = Window_Selectable.prototype.refresh;
Window_Selectable.prototype.refresh = function()//刷新-可能需要重写
{
Zzy.XTQJ.Window_Selectable_refresh.call(this);
if(this.IsZzyXTQJScrollBar())this.DrawZzyXTQJBar();//绘制条组
}
Window_Selectable.prototype.GetZzyXTQJBarRect = function()//获取空间
{
// var width = this.contents.width;
// var height = this.contents.height;
var pad = this.standardPadding();
var width = this.width - pad * 2;
var height = this.height - pad * 2;
var rt = new Rectangle(width - this.DefaultZzyXTQJBarWidth(),
0,
this.DefaultZzyXTQJBarWidth(),
height);
return rt;
}
Window_Selectable.prototype.DrawZzyXTQJBar = function()
{
var barRt = this.GetZzyXTQJBarRect();
//初始化申请位图
if(!this._ZzyXTQJBarContnets)
{
var pad = this.standardPadding();
this._ZzyXTQJBarContnets = new Sprite();
this._ZzyXTQJBarContnets.bitmap = new Bitmap(barRt.width,barRt.height);
this.addChild(this._ZzyXTQJBarContnets);
this._ZzyXTQJBarContnets.x = barRt.x + pad;
this._ZzyXTQJBarContnets.y = barRt.y + pad;
}
this._ZzyXTQJBarContnets.bitmap.clear();
this.DrawZzyXTQJBarBack(barRt);//绘制底层
this.DrawZzyXTQJBarBlock(barRt);//绘制条块
}
Window_Selectable.prototype.DrawZzyXTQJBarBack = function(barRt)
{
var color = this.DefaultZzyXTQJBarBackColor();
this._ZzyXTQJBarContnets.bitmap.fillAll(color);
//this.contents.fillRect(barRt.x,barRt.y,barRt.width,barRt.height,color);
}
Window_Selectable.prototype.DrawZzyXTQJBarBlock = function(barRt)
{
var color = this._ZzyXTQJHit ? this.DefaultZzyXTQJBarTouchColor() : this.DefaultZzyXTQJBarBlockColor();
var rt = this.GetZzyXTQJBlockBarRect();
var dis = Zzy.XTQJ.BarBlockDis;
this._ZzyXTQJBarContnets.bitmap.fillRect(rt.x,rt.y,rt.width,rt.height,color);
//this.contents.fillRect(rt.x,rt.y,rt.width,rt.height,color);
}
Window_Selectable.prototype.GetZzyXTQJBarRectArea = function()//获取区域
{
var barRt = this.GetZzyXTQJBarRect();
var dis = this.DefaultZzyXTQJBarBlockDis();
var nbarRt = new Rectangle(
barRt.x + dis,
barRt.y + dis,
barRt.width - dis*2,
barRt.height - dis*2);
return nbarRt;
}
Window_Selectable.prototype.GetZzyXTQJBlockBarRect = function()
{
//会计算当前滚动条的位置
var rate = this.GetZzyXTQJBarRate();
var nbarRt = this.GetZzyXTQJBarRectArea();
var dis = Zzy.XTQJ.BarBlockDis;
var barHieght = nbarRt.height * rate;
var rt = new Rectangle(dis,
dis,
nbarRt.width,
barHieght);
var tp = this.topRow();//对应位置
var mtp = this.maxTopRow();//最大顶层
var trate = mtp ? tp / mtp : 0;
rt.y += (nbarRt.height-rt.height) * trate;
return rt;
}
Window_Selectable.prototype.GetZzyXTQJBarRate = function()
{
var mr = this.maxRows();
var mpr = this.maxPageRows();
var rate = mpr / mr;
return Math.min(1,rate);
}
// 因refresh会重置,关闭这个刷新
Zzy.XTQJ.Window_Selectable_processTouch = Window_Selectable.prototype.processTouch;
Window_Selectable.prototype.processTouch = function()
{
Zzy.XTQJ.Window_Selectable_processTouch.call(this);
//刷新关闭Touch
if(!this._touching)
{
if(this._ZzyXTQJHit)
{
this._ZzyXTQJHit = false;
//this.refresh();
this.DrawZzyXTQJBar();
}
}
};
Window_Selectable.prototype.IsHitZzyXTQJBar = function(x,y)//点中测试
{
var rt = this.GetZzyXTQJBlockBarRect();
var padding = this.standardPadding();
rt.x += padding;
rt.y += padding;
if(x >= rt.x &&
x <= rt.width+rt.x &&
y >= rt.y &&
y <= rt.height+rt.y)return true;
return false;
}
Zzy.XTQJ.Window_Selectable_update = Window_Selectable.prototype.update;
Window_Selectable.prototype.update = function()
{
Zzy.XTQJ.Window_Selectable_update.call(this);
if(this.IsZzyXTQJScrollBar())this.UpdateZzyXTQJHit();
}
Window_Selectable.prototype.UpdateZzyXTQJHit = function()
{
if(!this._ZzyXTQJHit)return;
this._ZzyXTQJHitEX = this.canvasToLocalX(TouchInput.x);
this._ZzyXTQJHitEY = this.canvasToLocalY(TouchInput.y);
var cDis = this._ZzyXTQJHitCY - this._ZzyXTQJHitEY;
if(Math.abs(cDis) >= this._ZzyXTQJPosInfo.dis / 2)
{
this._ZzyXTQJHitCY = this._ZzyXTQJHitEY;
if(cDis < 0)this.scrollDown();
else this.scrollUp();
}
}
Window_Selectable.prototype.MakeZzyXTQJArea = function()//制作翻页区域
{
var mtp = this.maxTopRow();//最大顶层
var rt = this.GetZzyXTQJBarRectArea();
var dis = rt.height / mtp;
var posY = [];
for(var i=0;i<mtp;i++)
{
posY[i] = dis / 2 + i*dis;
}
this._ZzyXTQJPosInfo = {};
this._ZzyXTQJPosInfo.posYArr = posY;
this._ZzyXTQJPosInfo.dis = dis;
}
Zzy.XTQJ.Window_Selectable_onTouch = Window_Selectable.prototype.onTouch;
Window_Selectable.prototype.onTouch = function(triggered)
{
if(this.IsZzyXTQJScrollBar())
{
if(triggered)
{
var x = this.canvasToLocalX(TouchInput.x);
var y = this.canvasToLocalY(TouchInput.y);
if(this.IsHitZzyXTQJBar(x, y))
{
if(!this._ZzyXTQJHit)
{
this._ZzyXTQJHit = true;//点选中时
//this.refresh();//执行一次刷新
this.DrawZzyXTQJBar();
}
this._ZzyXTQJHit = true;//点选中时
//配置点击X和点击Y
this._ZzyXTQJHitSX = x;
this._ZzyXTQJHitSY = y;
this._ZzyXTQJHitEX = x;
this._ZzyXTQJHitEY = y;
this._ZzyXTQJHitCX = x;
this._ZzyXTQJHitCY = y;
}
}
}
Zzy.XTQJ.Window_Selectable_onTouch.call(this,triggered);
};
Window_Selectable.prototype.RefreshZzyXTQJ = function()
{
if(this.IsZzyXTQJScrollBar())
{
this.MakeZzyXTQJArea();//计算Area区域
this.DrawZzyXTQJBar();//绘制条组
}
}
//=============================================================================
// TouchInput
//=============================================================================
@ -3434,7 +3808,118 @@ if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= "1.3.5") {
}
};
Window_QuestData.prototype.refresh = function () {
//---魔改--- v1.00 识别Window_QuestData
Window_QuestData.prototype.IsZzyXTQJScrollBar = function()
{return true;}
Window_QuestData.prototype.GetZzyXTQJBarRate = function()
{
var pad = this.standardPadding();
//var mr = this.maxRows();
//var mpr = this.maxPageRows();
var mr = this.contents.height;
var mpr = this.height - pad * 2;
var rate = mpr / mr;
return Math.min(1,rate);
}
Window_QuestData.prototype.GetZzyXTQJBlockBarRect = function()
{
//会计算当前滚动条的位置
var rate = this.GetZzyXTQJBarRate();
var nbarRt = this.GetZzyXTQJBarRectArea();
var dis = Zzy.XTQJ.BarBlockDis;
var barHieght = nbarRt.height * rate;
var rt = new Rectangle(dis,
dis,
nbarRt.width,
barHieght);
var tp = this.origin.y;
var mtp = this.contentsHeight() - this.height + this.standardPadding() * 2;
var trate = mtp ? tp / mtp : 0;
rt.y += (nbarRt.height-rt.height) * trate;
return rt;
}
//滚动重写
Window_QuestData.prototype.UpdateZzyXTQJHit = function()
{
if(!this._ZzyXTQJHit)return;
this._ZzyXTQJHitEX = this.canvasToLocalX(TouchInput.x);
this._ZzyXTQJHitEY = this.canvasToLocalY(TouchInput.y);
var cDis = this._ZzyXTQJHitCY - this._ZzyXTQJHitEY;
var dis = this.scrollSpeed() * 4;
if(Math.abs(cDis) >= dis)
{
this._ZzyXTQJHitCY = this._ZzyXTQJHitEY;
if(cDis < 0)this.scrollOriginDown(dis);
else if(cDis > 0)this.scrollOriginUp(dis);
this.DrawZzyXTQJBar();//进行刷新
}
}
//执行点击选中位置
Window_QuestData.prototype.IsHitZzyXTQJBar = function(x,y)//点中测试
{
var pad = this.standardPadding();
x -= this._ZzyXTQJBarContnets.x - pad;
y -= this._ZzyXTQJBarContnets.y - pad;
var rt = this.GetZzyXTQJBlockBarRect();
var padding = this.standardPadding();
rt.x += padding;
rt.y += padding;
if(x >= rt.x &&
x <= rt.width+rt.x &&
y >= rt.y &&
y <= rt.height+rt.y)return true;
return false;
}
Window_QuestData.prototype.refresh = function ()
{
if (this._countdown > 0) return;
this.contents.clear();
this._lastOriginY = -200;
@ -3445,7 +3930,19 @@ if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= "1.3.5") {
} else {
this.drawEmpty();
}
//---魔改--- v1.00 绘制滚动条
this.RefreshZzyXTQJ();
};
Window_QuestData._questNoDataFmt = JSON.parse(Yanfly.Param.QuestDataWindow["No Data Text"] || "");
@ -3563,6 +4060,55 @@ if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= "1.3.5") {
if (this.isOpenAndActive()) this.updateKeyScrolling();
};
//---魔改--- v1.00 重写 processTouch 此处可能会造成不兼容的情况
Window_QuestData.prototype.processTouch = function() {
if (this.isOpenAndActive() || SceneManager._scene._listWindow.active)
{
if (TouchInput.isTriggered() && this.isTouchedInsideFrame()) {
this._touching = true;
this.onTouch(true);
} else if (TouchInput.isCancelled()) {
if (this.isCancelEnabled()) {
this.processCancel();
}
}
if (this._touching) {
if (TouchInput.isPressed()) {
this.onTouch(false);
} else {
this._touching = false;
}
}
} else {
this._touching = false;
}
//刷新关闭Touch
if(!this._touching)
{
if(this._ZzyXTQJHit)
{
this._ZzyXTQJHit = false;
//this.refresh();
this.DrawZzyXTQJBar();
}
}
};
Window_QuestData.prototype.updateCountdown = function () {
if (this._countdown > 0) {
this._countdown -= 1;
@ -3625,12 +4171,37 @@ if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= "1.3.5") {
var threshold = 20;
if (TouchInput.wheelY >= threshold) {
this.scrollOriginDown(this.scrollSpeed() * 4);
if(this._ZzyXTQJBarContnets)
{
this.DrawZzyXTQJBar();//刷新
}
}
if (TouchInput.wheelY <= -threshold) {
this.scrollOriginUp(this.scrollSpeed() * 4);
if(this._ZzyXTQJBarContnets)
{
this.DrawZzyXTQJBar();//刷新
}
}
};
//=============================================================================
// Window_QuestTitle
//=============================================================================

Loading…
Cancel
Save