设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1965|回复: 16
打印 上一主题 下一主题

[有事请教] 如何将所有变化了的数据都存档?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
跳转到指定楼层
1
发表于 2021-9-15 15:49:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
500星屑
事情是这样的:我发现,我利用以下类似脚本,作为属性增减药剂更改角色的属性时,当时都可以调整,可是,
当我存档并关掉游戏,再重新读取后,这些属性的增减就变回了一开始的没更改前的值(我猜测是存档没有把它们存档进去,所以,要修改存档的相关脚本吗?该怎么改?),
所以,诸位大佬有没有什么好的办法(这个问题很重要很重要!)

◆脚本: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}];

最佳答案

查看完整内容

最近在写能力值加点 其实已经知道的是$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, ...

Lv3.寻梦者

梦石
0
星屑
2585
在线时间
297 小时
注册时间
2021-5-4
帖子
101
来自 2楼
发表于 2021-9-15 15:49:50 | 只看该作者
最近在写能力值加点 其实已经知道的是$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就可以了

山不转路转

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



评分

参与人数 1+1 收起 理由
任小雪 + 1 精品文章

查看全部评分

回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
3
 楼主| 发表于 2021-9-15 16:10:46 | 只看该作者
好像自己摸索出来了一点点,通过俺寻思之力
首先,存档前先运行◆变量操作:#0004 = $dataActors,再去存档,
然后,读档后,再运行◆脚本:$dataActors=$gameVariables.value(4),
其中的原理是,存档并不保存data文件,但会保存变量。
而由以上,貌似顺带意外多了个多周目的拼图了(以上就是多周目的理论基础吧)
没完全实测,好累,先睡一波了,
下面哪位大佬给的说法越完善,悬赏就给谁吧,希望能是mv的说法,并且,最好都是关于脚本而不是插件的即插即用的(俺暂时寻思的不知道对不对的想法是:插件貌似是全图运行而脚本除非设置否则应该不是全图运行)
回复

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
34725
在线时间
6740 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

4
发表于 2021-9-15 17:40:51 | 只看该作者
虽然没用过MV,但是看起来你改的是读取json数据库文件后的常量,所以才需要存档读档都手动修改一遍

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

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

另外,默认的事件指令中,是有对角色的基础属性的增减吧,VA里就是事件第一页右下角,那个就是系统默认自带的上述处理,在读取数据库属性的基础上,每个角色的实例还维护了一个 @param_plus,作为游戏过程中,这个存档下的该角色的基础能力变更数值

点评

有趣的回复吧(指把悬赏花出去)  发表于 2021-9-15 19:12
你说的我半懂不懂的样子(泪目),按着寻思的话,好像学习成本不是,还不一定能搞定(时间珍贵,然后,尝试过多次白做功),再看看有没有更有趣的...  发表于 2021-9-15 19:11
。。。我不懂代码的(看着不是很懂),平时全靠翻译和俺寻思之力,嗯,不过,先看看吧,看进一步的实测如何,其他方法我未必理解  发表于 2021-9-15 19:06

评分

参与人数 1+1 收起 理由
任小雪 + 1 塞糖

查看全部评分

回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
5
 楼主| 发表于 2021-9-15 23:15:40 | 只看该作者
本帖最后由 任小雪 于 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 01:38
回复

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33442
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

6
发表于 2021-9-16 08:01:31 | 只看该作者
难道实例角色对象数据不是用 $gameActors.actor(id) 么?
$dataActors 只是数据库角色基础数据。

点评

按照官方教程学着弄了一波加密(防。。防直接改data文件的作弊行为,话说,是不是仅保留一个包含save文件夹的www文件就行,如果按官方加密的话)  发表于 2021-9-16 11:29
突然发现mv的加密是不加密data文件的,艹了  发表于 2021-9-16 10:22
以下对点评说的..  发表于 2021-9-16 09:45
$gameActors是保存到存档里的...  发表于 2021-9-16 09:45
其实,关键是引擎默认不保存这些数据……不过,我的脚本好像都是改的data文件,开头都是$data这样的,不知道是不是这个关系  发表于 2021-9-16 09:05

评分

参与人数 1+1 收起 理由
任小雪 + 1 塞糖

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
7
 楼主| 发表于 2021-9-16 09:00:44 | 只看该作者
芯☆淡茹水 发表于 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
  ◆
:否则
  ◆公共事件:存档补充内容
  ◆
:结束
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
8
 楼主| 发表于 2021-9-16 11:31:15 | 只看该作者
本帖最后由 任小雪 于 2021-9-16 11:39 编辑
MH-Pride 发表于 2021-9-16 11:05
最近在写能力值加点 其实已经知道的是$gameActor是没有有追加和特殊能力值的只有$dataActor才有
$gameActor ...


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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-18 17:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表