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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
189
在线时间
82 小时
注册时间
2016-5-13
帖子
35
跳转到指定楼层
1
发表于 2020-6-2 19:55:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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



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

Torigoya_Achievement.zip

8.15 KB, 下载次数: 50

Lv3.寻梦者

梦石
0
星屑
1502
在线时间
115 小时
注册时间
2020-5-10
帖子
82
2
发表于 2020-6-3 00:03:21 | 只看该作者
我有用过这个插件
但还真的没用过这个功能
好奇是什么情况需要用到这个功能
"明るい夜"のために
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1420
在线时间
159 小时
注册时间
2020-4-26
帖子
152
4
发表于 2020-6-3 07:26:36 | 只看该作者
你是不是看錯指令了

点评

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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7595
在线时间
665 小时
注册时间
2012-7-29
帖子
174
5
发表于 2020-6-3 07:59:22 | 只看该作者
本帖最后由 开关关 于 2020-6-3 08:41 编辑

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


在大约428行的地方,有这样一段代码。它的作用是写入存档。
JAVASCRIPT 代码复制
  1. AchievementManager.prototype.save = function () {
  2.             if (!Achievement.settings.useGlobalSave) return;
  3.  
  4.             // [多重起動対応] 旧データとの差異があったら吸収する
  5.             var oldData = this._loadAchievements();
  6.             for (var i = 0; i < this._items.length; ++i) {
  7.                 this._achievements[i] = (oldData[i] || this._achievements[i]); // Kgg:这里逻辑有问题
  8.             }
  9.             StorageManager.save(Achievement.saveSlotID, JSON.stringify({
  10.                 achievements: this._achievements
  11.             }));
  12.         };
这段代码标注出的那一行逻辑有问题,它的意思是,当原存档中i号成就已解锁时,就保留原存档的成就,否则写入新存档的成就。但是这个逻辑存在缺陷,如果原存档中i号成就已解锁而新存档的i号成就是未解锁,它依然会保留原存档。
改进后的代码如下。其实就改了一行。
JAVASCRIPT 代码复制
  1. AchievementManager.prototype.save = function () {
  2.             if (!Achievement.settings.useGlobalSave) return;
  3.  
  4.             // [多重起動対応] 旧データとの差異があったら吸収する
  5.             var oldData = this._loadAchievements();
  6.             for (var i = 0; i < this._items.length; ++i) {
  7.                 // this._achievements[i] = (oldData[i] || this._achievements[i]); // Kgg:这里逻辑有问题
  8.                 // this._achievements[i] = (oldData[i] ? oldData[i] && this._achievements[i] : this._achievements[i]);
  9.                 this._achievements[i] = (this._achievements[i]);//Kgg:这行与上面被注释掉的那行效果相同,可以选一个使用。作者之所以搞出这个错误,似乎是为了兼容另一个插件“多重起動”,因此上面那行保留了oldData(虽然不知道意义何在)。但是仍然可能有不可预知的bug。
  10.             }
  11.             StorageManager.save(Achievement.saveSlotID, JSON.stringify({
  12.                 achievements: this._achievements
  13.             }));
  14.         };
现在逻辑变成了,无论如何写入新存档。简单粗暴地解决了问题。

点评

谢谢!  发表于 2020-6-3 10:32
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
189
在线时间
82 小时
注册时间
2016-5-13
帖子
35
6
 楼主| 发表于 2020-6-3 10:42:19 | 只看该作者
谢谢大家!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 22:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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