Project1

标题: 如何将所有变化了的数据都存档? [打印本页]

作者: 任小雪    时间: 2021-9-15 15:49
标题: 如何将所有变化了的数据都存档?
事情是这样的:我发现,我利用以下类似脚本,作为属性增减药剂更改角色的属性时,当时都可以调整,可是,
当我存档并关掉游戏,再重新读取后,这些属性的增减就变回了一开始的没更改前的值(我猜测是存档没有把它们存档进去,所以,要修改存档的相关脚本吗?该怎么改?),
所以,诸位大佬有没有什么好的办法(这个问题很重要很重要!)

◆脚本:var hit=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 22 && traits[i].dataId == 0) hit += traits[i].value};console.log(hit);var cri=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 22 && traits[i].dataId == 2) cri += traits[i].value};console.log(cri);var eva=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 22 && traits[i].dataId == 1) eva += traits[i].value};console.log(eva);var mev=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 22 && traits[i].dataId == 4) mev += traits[i].value};console.log(mev);var cnt=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 22 && traits[i].dataId == 6) cnt += traits[i].value};console.log(cnt);var mrf=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 22 && traits[i].dataId == 5) mrf += traits[i].value};console.log(mrf);var hrg=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 22 && traits[i].dataId == 7) hrg += traits[i].value};console.log(hrg);var mrg=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 22 && traits[i].dataId == 8) mrg += traits[i].value};console.log(mrg);var rec=1;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 23 && traits[i].dataId == 2) rec *= traits[i].value};console.log(rec);var pha=1;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 23 && traits[i].dataId == 3) pha *= traits[i].value};console.log(pha);var pgcs=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 34 && traits[i].dataId == 0) pgcs += traits[i].value};console.log(pgcs);var xdcs=0;traits=$dataActors[$gameParty._targetActorId].traits;for (var i = 0; i < traits.length; i++) {if (traits[i].code == 61 && traits[i].dataId == 0) xdcs += traits[i].value};console.log(xdcs);
:  :hit+=0;cri+=0;eva+=0;mev+=-0.001;
:  :cnt+=0;mrf+=0;hrg+=0;mrg+=0;
:  :rec+=0;pha+=0;
:  :pgcs+=0;
:  :xdcs+=0;
:  :$dataActors[$gameParty._targetActorId].traits=[{"code":22,"dataId":0,"value":hit},{"code":22,"dataId":2,"value":cri},{"code":22,"dataId":1,"value":eva},{"code":22,"dataId":4,"value":mev},{"code":22,"dataId":6,"value":cnt},{"code":22,"dataId":5,"value":mrf},{"code":22,"dataId":7,"value":hrg},{"code":22,"dataId":8,"value":mrg},{"code":23,"dataId":2,"value":rec},{"code":23,"dataId":3,"value":pha},{"code":34,"dataId":0,"value":pgcs},{"code":61,"dataId":0,"value":xdcs}];
作者: MH-Pride    时间: 2021-9-15 15:49
最近在写能力值加点 其实已经知道的是$gameActor是没有有追加和特殊能力值的只有$dataActor才有
$gameActor是能保存而$dataActor不会保存只能读取数据库的资料
我的做法是在$gameActor新增一个对应的数组

我在Game_Actor新建了能力值,追加能力值和特殊能力值对应的数组
Game_Actor_setup_UpgradeParams = Game_Actor.prototype.setup;
Game_Actor.prototype.setup = function (actorId) {


                        this._actorParam=[0,0,0,0,0,0,0,0];//能力值
                        this._actorEXParam=[0,0,0,0,0,0,0,0,0,0]//追加能力值
                        this._actorSPParam=[0,0,0,0,0,0,0,0,0,0]//特殊能力值

例如我需要增加追加能力值就加到对应的actorEXParam数组上面
$dataActors[1].traits[index].value+= actor._actorEXParam[index];

所以只需要增加在gameActor的actorEXParam数组里面就可以了
actor._actorEXParam[index]+=100;
这时候this._actorEXParam=[100,0,0,0,0,0,0,0,0,0]

每次读取完数据库的$dataActor能力值后 就会加上在Game_Actor的对应能力值

这也方便洗点 直接将对应的数组清0就可以了

山不转路转

反正很简单不知道你看不看的明




作者: 任小雪    时间: 2021-9-15 16:10
好像自己摸索出来了一点点,通过俺寻思之力
首先,存档前先运行◆变量操作:#0004 = $dataActors,再去存档,
然后,读档后,再运行◆脚本:$dataActors=$gameVariables.value(4),
其中的原理是,存档并不保存data文件,但会保存变量。
而由以上,貌似顺带意外多了个多周目的拼图了(以上就是多周目的理论基础吧)
没完全实测,好累,先睡一波了,
下面哪位大佬给的说法越完善,悬赏就给谁吧,希望能是mv的说法,并且,最好都是关于脚本而不是插件的即插即用的(俺暂时寻思的不知道对不对的想法是:插件貌似是全图运行而脚本除非设置否则应该不是全图运行)
作者: 百里_飞柳    时间: 2021-9-15 17:40
虽然没用过MV,但是看起来你改的是读取json数据库文件后的常量,所以才需要存档读档都手动修改一遍

其实推荐这样做,在 game_actor 之类的会被存档的变量里,开辟一块空间专门放置 能力 => 数值 的表
然后角色读取属性时扩写一下,先读取 dataActors 里的数据库预设值,再读取 game_system 里你增加的那个数据表里对应角色的对应属性增加值,两者加到一起作为角色读取属性方法的返回值

然后你说的属性增减药剂,也是修改你增加的数据表里,对应角色的对应属性值

另外,默认的事件指令中,是有对角色的基础属性的增减吧,VA里就是事件第一页右下角,那个就是系统默认自带的上述处理,在读取数据库属性的基础上,每个角色的实例还维护了一个 @param_plus,作为游戏过程中,这个存档下的该角色的基础能力变更数值
作者: 任小雪    时间: 2021-9-15 23:15
本帖最后由 任小雪 于 2021-9-16 00:02 编辑
百里_飞柳 发表于 2021-9-15 17:40
虽然没用过MV,但是看起来你改的是读取json数据库文件后的常量,所以才需要存档读档都手动修改一遍

其实推 ...


不明白下面是什么情况【是公共事件并行的,即全图运行】(自己莫名其妙弄的),有点鸟儿用螺旋桨而不是翅膀飞的感觉(大佬有没有什么比较好的简单方法,或者,其实下面这个“螺旋桨”是什么鬼)


◆如果:(变量)$dataSystem = 0
  ◆脚本:$gameTemp.reserveCommonEvent(327);
  ◆注释:(事件327是将data文件记录在变量里)
:否则
  ◆等待:60帧
  ◆脚本:$gameTemp.reserveCommonEvent(328);
  ◆注释:(事件328是将变量赋值到data文件里)
:结束
作者: 芯☆淡茹水    时间: 2021-9-16 08:01
难道实例角色对象数据不是用 $gameActors.actor(id) 么?
$dataActors 只是数据库角色基础数据。
作者: 任小雪    时间: 2021-9-16 09:00
芯☆淡茹水 发表于 2021-9-16 08:01
难道实例角色对象数据不是用 $gameActors.actor(id) 么?
$dataActors 只是数据库角色基础数据。 ...

我现在开局运行以下事件:
◆变量操作:#0886 存档了则为0 = 1
◆公共事件:存档补充内容

然后全图运行以下事件:
◆脚本:Scene_Save.prototype.onSavefileOk = function() {
:  :$gameVariables.setValue(886,0)
:  :    Scene_File.prototype.onSavefileOk.call(this);
:  :    $gameSystem.onBeforeSave();
:  :    if (DataManager.saveGame(this.savefileId())) {
:  :        this.onSaveSuccess();
:  :    } else {
:  :        this.onSaveFailure();
:  :    }
:  :};
◆如果:存档了则为0 = 0
  ◆公共事件:读档补充内容
  ◆变量操作:#0886 存档了则为0 = 1
  ◆
:否则
  ◆公共事件:存档补充内容
  ◆
:结束
作者: 任小雪    时间: 2021-9-16 11:31
本帖最后由 任小雪 于 2021-9-16 11:39 编辑
MH-Pride 发表于 2021-9-16 11:05
最近在写能力值加点 其实已经知道的是$gameActor是没有有追加和特殊能力值的只有$dataActor才有
$gameActor ...


我自己的绿皮法子暂时看起来貌似也可行(只是卡了点,唔,保存的时候确实很卡)(先作为备用方案吧,虽然我还真不一定能懂,主要是新法子需要学习成本,摊牌了,我懒了:其实也有我还想着把我的绿皮法子用到装备镶嵌那边的原因)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1