查看: 3134|回复: 8

[有事请教] 关于成就插件:実績プラグインさん脚本使用的问题 求助!

[复制链接]
梦石
0
星屑
189
在线时间
82 小时
注册时间
2016-5-13
回帖
20
发表于 2020-6-2 19:55:09 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
插件:https://torigoya.hatenadiary.jp/entry/achievement_mv

这个插件里实现了成就系统,更新公告里写了有成就删除的功能(介绍里没写)
打开看了一下,可以用指令 実績削除 来删除成就
未标题-2.jpg
未标题-3.jpg

试了一下发现一个问题,只能删除“所有成就里最后一个成就”,不知道这个情况怎么造成的,有没有高手解决一下,感谢!!!

Torigoya_Achievement.zip

8.15 KB, 下载次数: 52

梦石
0
星屑
1507
在线时间
115 小时
注册时间
2020-5-10
回帖
78
发表于 2020-6-3 00:03:21 | 显示全部楼层
我有用过这个插件
但还真的没用过这个功能
好奇是什么情况需要用到这个功能
"明るい夜"のために
回复

使用道具 举报

梦石
0
星屑
189
在线时间
82 小时
注册时间
2016-5-13
回帖
20
 楼主| 发表于 2020-6-3 00:55:39 | 显示全部楼层
shmily0725 发表于 2020-6-3 00:03
我有用过这个插件
但还真的没用过这个功能
好奇是什么情况需要用到这个功能 ...

主要是测试游戏的时候,因为是全局储存成就嘛,有什么改动之类的看能不能正常解锁,方便测试,全部重置成就也有些麻烦
回复

使用道具 举报

梦石
0
星屑
1343
在线时间
153 小时
注册时间
2020-4-26
回帖
146
发表于 2020-6-3 07:26:36 | 显示全部楼层
你是不是看錯指令了

点评

看到儲存那邊會比較舊的新的成就數據,如果舊的存在,就還原成舊的,所以才會刪不掉把?  发表于 2020-6-3 07:35
木有,是我看錯了  发表于 2020-6-3 07:31
回复 1 0

使用道具 举报

梦石
0
星屑
7801
在线时间
683 小时
注册时间
2012-7-29
回帖
172
发表于 2020-6-3 07:59:22 | 显示全部楼层
本帖最后由 开关关 于 2020-6-3 08:41 编辑

测试前把 save\achievements.rpgsave 删掉就可以了。
这个插件也提供了插件指令 実績リセット ,用于重置所有成就。


在大约428行的地方,有这样一段代码。它的作用是写入存档。
[pre lang="javascript" line="428"]        AchievementManager.prototype.save = function () {
            if (!Achievement.settings.useGlobalSave) return;

            // [多重起動対応] 旧データとの差異があったら吸収する
            var oldData = this._loadAchievements();
            for (var i = 0; i < this._items.length; ++i) {
                this._achievements = (oldData || this._achievements); // Kgg:这里逻辑有问题
            }
            StorageManager.save(Achievement.saveSlotID, JSON.stringify({
                achievements: this._achievements
            }));
        };
[/pre]这段代码标注出的那一行逻辑有问题,它的意思是,当原存档中i号成就已解锁时,就保留原存档的成就,否则写入新存档的成就。但是这个逻辑存在缺陷,如果原存档中i号成就已解锁而新存档的i号成就是未解锁,它依然会保留原存档。
改进后的代码如下。其实就改了一行。
[pre lang="javascript" line="428"]        AchievementManager.prototype.save = function () {
            if (!Achievement.settings.useGlobalSave) return;

            // [多重起動対応] 旧データとの差異があったら吸収する
            var oldData = this._loadAchievements();
            for (var i = 0; i < this._items.length; ++i) {
                // this._achievements = (oldData || this._achievements); // Kgg:这里逻辑有问题
                // this._achievements = (oldData ? oldData && this._achievements : this._achievements);
                this._achievements = (this._achievements);//Kgg:这行与上面被注释掉的那行效果相同,可以选一个使用。作者之所以搞出这个错误,似乎是为了兼容另一个插件“多重起動”,因此上面那行保留了oldData(虽然不知道意义何在)。但是仍然可能有不可预知的bug。
            }
            StorageManager.save(Achievement.saveSlotID, JSON.stringify({
                achievements: this._achievements
            }));
        };
[/pre]现在逻辑变成了,无论如何写入新存档。简单粗暴地解决了问题。

点评

谢谢!  发表于 2020-6-3 10:32
回复

使用道具 举报

梦石
0
星屑
189
在线时间
82 小时
注册时间
2016-5-13
回帖
20
 楼主| 发表于 2020-6-3 10:42:19 | 显示全部楼层
谢谢大家!!!
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部