random support
This commit is contained in:
parent
bf9a9675ed
commit
920fc35769
@ -1690,6 +1690,7 @@ actions.prototype.clickSyncSave = function (x,y) {
|
||||
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify({
|
||||
'name': core.firstData.name,
|
||||
'hard': core.status.hard,
|
||||
'seed': core.getFlag('seed'),
|
||||
'route': core.encodeRoute(core.status.route)
|
||||
}));
|
||||
break;
|
||||
@ -1922,8 +1923,11 @@ actions.prototype.clickReplay = function (x, y) {
|
||||
{
|
||||
core.ui.closePanel();
|
||||
var hard=core.status.hard, route=core.clone(core.status.route);
|
||||
var seed = core.getFlag('seed');
|
||||
core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps);
|
||||
core.events.setInitData(hard);
|
||||
core.setFlag('seed', seed);
|
||||
core.setFlag('rand', seed);
|
||||
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
|
||||
core.startReplay(route);
|
||||
}, true);
|
||||
|
||||
@ -1845,8 +1845,11 @@ control.prototype.doSL = function (id, type) {
|
||||
// core.drawTip("存档版本不匹配");
|
||||
if (confirm("存档版本不匹配!\n你想回放此存档的录像吗?")) {
|
||||
core.dom.startPanel.style.display = 'none';
|
||||
var seed = data.hero.flags.seed;
|
||||
core.resetStatus(core.firstData.hero, data.hard, core.firstData.floorId, null, core.initStatus.maps);
|
||||
core.events.setInitData(data.hard);
|
||||
core.setFlag('seed', seed);
|
||||
core.setFlag('rand', seed);
|
||||
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
|
||||
core.startReplay(core.decodeRoute(data.route));
|
||||
}, true);
|
||||
@ -1878,7 +1881,7 @@ control.prototype.doSL = function (id, type) {
|
||||
return;
|
||||
}
|
||||
var route = core.subarray(core.status.route, core.decodeRoute(data.route));
|
||||
if (!core.isset(route)) {
|
||||
if (!core.isset(route) || data.hero.flags.seed!=core.getFlag('seed')) {
|
||||
core.drawTip("无法从此存档回放录像");
|
||||
return;
|
||||
}
|
||||
|
||||
10
libs/core.js
10
libs/core.js
@ -1085,6 +1085,16 @@ core.prototype.subarray = function (a, b) {
|
||||
return core.utils.subarray(a, b);
|
||||
}
|
||||
|
||||
////// 生成随机数(seed方法) //////
|
||||
core.prototype.rand = function (num) {
|
||||
return core.utils.rand(num);
|
||||
}
|
||||
|
||||
////// 生成随机数(录像方法) //////
|
||||
core.prototype.rand2 = function (num) {
|
||||
return core.utils.rand2(num);
|
||||
}
|
||||
|
||||
////// 读取一个本地文件内容 //////
|
||||
core.prototype.readFile = function (success, error, readType) {
|
||||
core.utils.readFile(success, error, readType);
|
||||
|
||||
@ -88,16 +88,19 @@ events.prototype.startGame = function (hard) {
|
||||
core.flags.battleAnimate = true;
|
||||
core.setLocalStorage('battleAnimate', true);
|
||||
core.startGame(hard);
|
||||
core.utils.__init_seed();
|
||||
core.events.setInitData(hard);
|
||||
}, function () {
|
||||
core.flags.battleAnimate = false;
|
||||
core.setLocalStorage('battleAnimate', false);
|
||||
core.startGame(hard);
|
||||
core.utils.__init_seed();
|
||||
core.events.setInitData(hard);
|
||||
});
|
||||
}
|
||||
else {
|
||||
core.startGame(hard);
|
||||
core.utils.__init_seed();
|
||||
core.events.setInitData(hard);
|
||||
}
|
||||
});
|
||||
@ -141,6 +144,7 @@ events.prototype.gameOver = function (ending, fromReplay) {
|
||||
'name': core.firstData.name,
|
||||
'version': core.firstData.version,
|
||||
'hard': core.status.hard,
|
||||
'seed': core.getFlag('seed'),
|
||||
'route': core.encodeRoute(core.status.route)
|
||||
}
|
||||
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify(obj));
|
||||
@ -181,6 +185,7 @@ events.prototype.gameOver = function (ending, fromReplay) {
|
||||
formData.append('money', core.status.hero.money);
|
||||
formData.append('experience', core.status.hero.experience);
|
||||
formData.append('steps', core.status.hero.steps);
|
||||
formData.append('seed', core.getFlag('seed'));
|
||||
formData.append('route', core.encodeRoute(core.status.route));
|
||||
|
||||
core.http("POST", "/games/upload.php", formData);
|
||||
|
||||
@ -241,8 +241,10 @@ utils.prototype.encodeRoute = function (route) {
|
||||
ans+='N';
|
||||
else if (t.indexOf('move:')==0)
|
||||
ans+="M"+t.substring(5);
|
||||
else if (t=='key:')
|
||||
else if (t.indexOf('key:')==0)
|
||||
ans+='K'+t.substring(4);
|
||||
else if (t.indexOf('random:')==0)
|
||||
ans+='X'+t.substring(7);
|
||||
}
|
||||
});
|
||||
if (cnt>0) {
|
||||
@ -295,6 +297,7 @@ utils.prototype.decodeRoute = function (route) {
|
||||
case "N": ans.push("no"); break;
|
||||
case "M": ++index; ans.push("move:"+nxt+":"+getNumber()); break;
|
||||
case "K": ans.push("key:"+nxt); break;
|
||||
case "X": ans.push("random:"+nxt); break;
|
||||
}
|
||||
}
|
||||
return ans;
|
||||
@ -319,6 +322,54 @@ utils.prototype.subarray = function (a, b) {
|
||||
return na;
|
||||
}
|
||||
|
||||
utils.prototype.__init_seed = function () {
|
||||
var rand = new Date().getTime()%34834795 + 3534;
|
||||
rand = this.__next_rand(rand);
|
||||
rand = this.__next_rand(rand);
|
||||
rand = this.__next_rand(rand);
|
||||
core.setFlag('seed', rand);
|
||||
core.setFlag('rand', rand);
|
||||
}
|
||||
|
||||
utils.prototype.__next_rand = function (_rand) {
|
||||
_rand=(_rand%127773)*16807-~~(_rand/127773)*2836;
|
||||
_rand+=_rand<0?2147483647:0;
|
||||
return _rand;
|
||||
}
|
||||
|
||||
utils.prototype.rand = function (num) {
|
||||
var rand = core.getFlag('rand');
|
||||
rand = this.__next_rand(rand);
|
||||
core.setFlag('rand', rand);
|
||||
var ans = rand/2147483647;
|
||||
if (core.isset(num) && num>0)
|
||||
return Math.floor(ans*num);
|
||||
return ans;
|
||||
}
|
||||
|
||||
////// 生成随机数(录像方法) //////
|
||||
utils.prototype.rand2 = function (num) {
|
||||
num = num||2147483648;
|
||||
|
||||
var value;
|
||||
if (core.status.replay.replaying) {
|
||||
var action = core.status.replay.toReplay.shift();
|
||||
if (action.indexOf("input:")==0 ) {
|
||||
value=parseInt(action.substring(6));
|
||||
}
|
||||
else {
|
||||
core.stopReplay();
|
||||
core.drawTip("录像文件出错");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
value = Math.floor(Math.random()*num);
|
||||
}
|
||||
core.status.route.push("random:"+value);
|
||||
return value;
|
||||
}
|
||||
|
||||
////// 读取一个本地文件内容 //////
|
||||
utils.prototype.readFile = function (success, error, readType) {
|
||||
|
||||
|
||||
2
main.js
2
main.js
@ -487,6 +487,8 @@ main.dom.replayGame.onclick = function () {
|
||||
core.dom.startPanel.style.display = 'none';
|
||||
core.resetStatus(core.firstData.hero, obj.hard, core.firstData.floorId, null, core.initStatus.maps);
|
||||
core.events.setInitData(obj.hard);
|
||||
core.setFlag('seed', obj.seed);
|
||||
core.setFlag('rand', obj.seed);
|
||||
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
|
||||
core.startReplay(core.decodeRoute(obj.route));
|
||||
}, true);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user