首先感谢@povsister大佬写的脚本,技术宅拯救世界,我只是在github上偶然看到了这个脚本,忍不住想安利给更多人。我是搬运工,大佬永远是大佬。
下面来介绍这个脚本的用法,实际非常简单….几句话就说完了。
首先第一步,进入网址:https://github.com/povsister/bh3_antiEntropy,点击界面右上角的“star”。
如果你没有github账号,就注册一个再点。
点好了没?
好了吗?
真的?
.
.
.
.
.
.
.
.
.
.
骗你的,这一步是不需要的,相信用过github的程序猿都懂2333。
这个脚本目前只有8个star(包括我),确实是有点少,希望各位路过的看官都能去点个star。
下面才是真实的第一步,首先从崩坏3游戏内进入逆熵视觉小说界面,然后断网(流量和wifi一个不留全关了),点击界面右上角的刷新。
这时候就会跳转出一个无法加载网页的界面,并且附带有一个链接,复制这个链接,从电脑浏览器里打开。
是的,必须是一台pc。
打开之后,进入逆浏览器的控制台界面,大部分浏览器都有开发者模式,请自行百度你的浏览器进入控制台的方式。
这里以chrome浏览器为例,在逆熵界面按下f12即可进入控制台,如果你的f12集成了功能键,请按fn+f12。
之后,复制大佬的脚本:
//8.21日:我把代码删了,请往下拉看更新,情况有变
把这些黏贴到控制台里,按回车,就会出现上面那张图上的场景。
最后等待控制台里文字停止滚动,就可以上游戏收水晶啦!
最后说一句,逆熵小说的文案极好,创作者没有强大的文理功底是没有办法写出如此具有文化内涵并且贴合科学家设定的对话的。除了成就烦了一点(注释可能有一点炫技的嫌疑,当然更可能就是给你制造麻烦吧2333),值得一读。
再次感谢大佬,别忘了去上星。
8.21更新:
有点意思….这篇的点击涨的这么快。估计是太多人用脚本了,今天帮别人刷的时候发现米忽悠启动了防脚本机制,短时间内请求过多会屏蔽ip并且更换鉴权hash(具体表现就是脚本运行之后页面提示未检测到游戏id,这就是因为鉴权hash更改了)。
那没办法…..我去修改一下脚本好了。
8.21晚更新:
卧槽,拿自己的链接做实验,结果连游戏内的视觉小说都进不去了,不知道明天会不会好,由于我现在没办法测试了(有没有刷完了成就的原意贡献一下链接配合测试?反正刷完了的玩儿坏了也没事QWQ)。这么危险,感觉药丸啊,赶紧把上面的代码删了,如果各位一定要用脚本刷,给出一个暂时安全的解决方案吧,我没链接了也测试不了,只能暴力来,下面三段代码分三段输入,每段输入前间隔一段时间(越久越好.jpg):
function my_post_achievement(str_ach, now_galgame, now_scene){
var ajax_answer = null;
var ajax_async = false;
$.ajax({
type:"POST",
url:"./utils/achievement.php" + achievementQueryString,
dataType:"json",
data:{achievement:str_ach,
chapter:now_galgame,
scene:now_scene},
async:ajax_async,
success:function(result) {
console.log("章节"+now_galgame+"场景"+now_scene+". 状态:"+result.msg+"\n code:"+result.achievement);
},
error:function(XMLHttpRequest, textStatus, errorThrown){
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
}
});
return ajax_answer;
}
function loadXmlFile(xmlFile)
{
var xmlDom = null;
if (window.ActiveXObject)
{
xmlDom = new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async="false";
xmlDom.load(xmlFile);
}
else if(document.implementation && document.implementation.createDocument)
{
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", xmlFile, false);
xmlhttp.send(null);
xmlDom = xmlhttp.responseXML;
}
else
{
xmlDom = null;
}
return xmlDom;
}
function galgame(name){
let i,j;
let now_galgame = Number(name);
let xmlDoc = loadXmlFile("./lang_CN/xml/ch"+name+".xml?sid="+Math.random());
let sceneList0 = [];
sceneList0 = xmlDoc.getElementsByTagName('scene');
let sceneList = new Array();
for(i = 0;sceneList0[i] != null;i++){
j = sceneList0[i].getAttribute("id");
sceneList[Number(j)] = sceneList0[i];
sceneList0[i] = null;
}
pa(sceneList, now_galgame)
}
function post_achievement_in_event(eventNode, now_galgame, now_scene){
if(eventNode.getAttribute("post")){
my_post_achievement(eventNode.getAttribute("post"), now_galgame, now_scene);
}
}
function systemAutoSave(now_galgame, now_scene){
setCookie(now_galgame_tag, now_galgame);
setCookie(now_scene_tag, now_scene);
}
function pa(sceneList, now_galgame) {
for (sceneIndex = 0; sceneIndex < sceneList.length; sceneIndex++) {
if (sceneList[sceneIndex]) {
let thisScene = sceneList[sceneIndex];
let now_scene = sceneIndex;
for (i = 0; i < thisScene.childNodes.length; i++) {
let thisEvent = thisScene.childNodes[i];
systemAutoSave(now_galgame, now_scene);
if (thisEvent.nodeName == "remark") {
post_achievement_in_event(thisEvent, now_galgame, now_scene);
}
let thisTag = thisEvent.tagName;
if (thisTag == "end" || thisTag == "speak" || thisTag == "text") {
post_achievement_in_event(thisEvent, now_galgame, now_scene);
}
}
}
}
}
for (let i = 1; i <= 9; i++) {
galgame(i);
}
function my_post_achievement(str_ach, now_galgame, now_scene){
var ajax_answer = null;
var ajax_async = false;
$.ajax({
type:"POST",
url:"./utils/achievement.php" + achievementQueryString,
dataType:"json",
data:{achievement:str_ach,
chapter:now_galgame,
scene:now_scene},
async:ajax_async,
success:function(result) {
console.log("章节"+now_galgame+"场景"+now_scene+". 状态:"+result.msg+"\n code:"+result.achievement);
},
error:function(XMLHttpRequest, textStatus, errorThrown){
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
}
});
return ajax_answer;
}
function loadXmlFile(xmlFile)
{
var xmlDom = null;
if (window.ActiveXObject)
{
xmlDom = new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async="false";
xmlDom.load(xmlFile);
}
else if(document.implementation && document.implementation.createDocument)
{
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", xmlFile, false);
xmlhttp.send(null);
xmlDom = xmlhttp.responseXML;
}
else
{
xmlDom = null;
}
return xmlDom;
}
function galgame(name){
let i,j;
let now_galgame = Number(name);
let xmlDoc = loadXmlFile("./lang_CN/xml/ch"+name+".xml?sid="+Math.random());
let sceneList0 = [];
sceneList0 = xmlDoc.getElementsByTagName('scene');
let sceneList = new Array();
for(i = 0;sceneList0[i] != null;i++){
j = sceneList0[i].getAttribute("id");
sceneList[Number(j)] = sceneList0[i];
sceneList0[i] = null;
}
pa(sceneList, now_galgame)
}
function post_achievement_in_event(eventNode, now_galgame, now_scene){
if(eventNode.getAttribute("post")){
my_post_achievement(eventNode.getAttribute("post"), now_galgame, now_scene);
}
}
function systemAutoSave(now_galgame, now_scene){
setCookie(now_galgame_tag, now_galgame);
setCookie(now_scene_tag, now_scene);
}
function pa(sceneList, now_galgame) {
for (sceneIndex = 0; sceneIndex < sceneList.length; sceneIndex++) {
if (sceneList[sceneIndex]) {
let thisScene = sceneList[sceneIndex];
let now_scene = sceneIndex;
for (i = 0; i < thisScene.childNodes.length; i++) {
let thisEvent = thisScene.childNodes[i];
systemAutoSave(now_galgame, now_scene);
if (thisEvent.nodeName == "remark") {
post_achievement_in_event(thisEvent, now_galgame, now_scene);
}
let thisTag = thisEvent.tagName;
if (thisTag == "end" || thisTag == "speak" || thisTag == "text") {
post_achievement_in_event(thisEvent, now_galgame, now_scene);
}
}
}
}
}
for (let i = 10; i <= 15; i++) {
galgame(i);
}
function my_post_achievement(str_ach, now_galgame, now_scene){
var ajax_answer = null;
var ajax_async = false;
$.ajax({
type:"POST",
url:"./utils/achievement.php" + achievementQueryString,
dataType:"json",
data:{achievement:str_ach,
chapter:now_galgame,
scene:now_scene},
async:ajax_async,
success:function(result) {
console.log("章节"+now_galgame+"场景"+now_scene+". 状态:"+result.msg+"\n code:"+result.achievement);
},
error:function(XMLHttpRequest, textStatus, errorThrown){
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
}
});
return ajax_answer;
}
function loadXmlFile(xmlFile)
{
var xmlDom = null;
if (window.ActiveXObject)
{
xmlDom = new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async="false";
xmlDom.load(xmlFile);
}
else if(document.implementation && document.implementation.createDocument)
{
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", xmlFile, false);
xmlhttp.send(null);
xmlDom = xmlhttp.responseXML;
}
else
{
xmlDom = null;
}
return xmlDom;
}
function galgame(name){
let i,j;
let now_galgame = Number(name);
let xmlDoc = loadXmlFile("./lang_CN/xml/ch"+name+".xml?sid="+Math.random());
let sceneList0 = [];
sceneList0 = xmlDoc.getElementsByTagName('scene');
let sceneList = new Array();
for(i = 0;sceneList0[i] != null;i++){
j = sceneList0[i].getAttribute("id");
sceneList[Number(j)] = sceneList0[i];
sceneList0[i] = null;
}
pa(sceneList, now_galgame)
}
function post_achievement_in_event(eventNode, now_galgame, now_scene){
if(eventNode.getAttribute("post")){
my_post_achievement(eventNode.getAttribute("post"), now_galgame, now_scene);
}
}
function systemAutoSave(now_galgame, now_scene){
setCookie(now_galgame_tag, now_galgame);
setCookie(now_scene_tag, now_scene);
}
function pa(sceneList, now_galgame) {
for (sceneIndex = 0; sceneIndex < sceneList.length; sceneIndex++) {
if (sceneList[sceneIndex]) {
let thisScene = sceneList[sceneIndex];
let now_scene = sceneIndex;
for (i = 0; i < thisScene.childNodes.length; i++) {
let thisEvent = thisScene.childNodes[i];
systemAutoSave(now_galgame, now_scene);
if (thisEvent.nodeName == "remark") {
post_achievement_in_event(thisEvent, now_galgame, now_scene);
}
let thisTag = thisEvent.tagName;
if (thisTag == "end" || thisTag == "speak" || thisTag == "text") {
post_achievement_in_event(thisEvent, now_galgame, now_scene);
}
}
}
}
}
for (let i = 16; i <= 26; i++) {
galgame(i);
}
一小时后又更新:
我的链接活了,看来米忽悠没有做绝。再次测试之后发现一次性发请求16章以下都是安全的….
8.22更新:
实测分段间隔一段时间输入记录成功,上面的代码有效,是安全的。
8.23更新:
脚本无关内容,夸一下米忽悠的文案。
徽章的描述,出自安妮·赖特的《夜访吸血鬼》。
餐厅的描述,出自拜伦的《热夜之梦》
高度怀疑这期活动和逆熵小说出自同一批人手上。
早上还见到贴吧婊起了这个文案…..这操作有点令人窒息