游戏内控制台作用域优化
This commit is contained in:
parent
8acd060ff7
commit
a146f461f0
95
game/game.js
95
game/game.js
|
@ -51330,7 +51330,7 @@ new Promise(resolve=>{
|
||||||
node._initLink=function(){
|
node._initLink=function(){
|
||||||
node.link=page;
|
node.link=page;
|
||||||
page.classList.add('menu-sym');
|
page.classList.add('menu-sym');
|
||||||
var text=document.createElement('div');
|
const text=document.createElement('div');
|
||||||
text.style.width='194px';
|
text.style.width='194px';
|
||||||
text.style.height='124px';
|
text.style.height='124px';
|
||||||
text.style.padding='3px';
|
text.style.padding='3px';
|
||||||
|
@ -51343,7 +51343,7 @@ new Promise(resolve=>{
|
||||||
text.style.left='30px';
|
text.style.left='30px';
|
||||||
text.style.top='50px';
|
text.style.top='50px';
|
||||||
text.style.wordBreak='break-all';
|
text.style.wordBreak='break-all';
|
||||||
var pre=ui.create.node('pre.fullsize',text);
|
const pre=ui.create.node('pre.fullsize',text);
|
||||||
pre.style.margin=0;
|
pre.style.margin=0;
|
||||||
pre.style.padding=0;
|
pre.style.padding=0;
|
||||||
pre.style.position='relative';
|
pre.style.position='relative';
|
||||||
|
@ -51357,7 +51357,7 @@ new Promise(resolve=>{
|
||||||
// caption.style.width='120px';
|
// caption.style.width='120px';
|
||||||
// caption.style.top='129px';
|
// caption.style.top='129px';
|
||||||
// caption.style.left='64px';
|
// caption.style.left='64px';
|
||||||
var text2=document.createElement('input');
|
const text2=document.createElement('input');
|
||||||
text2.style.width='200px';
|
text2.style.width='200px';
|
||||||
text2.style.height='20px';
|
text2.style.height='20px';
|
||||||
text2.style.padding='0';
|
text2.style.padding='0';
|
||||||
|
@ -51368,15 +51368,85 @@ new Promise(resolve=>{
|
||||||
text2.style.border='none';
|
text2.style.border='none';
|
||||||
text2.style.borderRadius='2px';
|
text2.style.borderRadius='2px';
|
||||||
text2.style.boxShadow='rgba(0, 0, 0, 0.2) 0 0 0 1px';
|
text2.style.boxShadow='rgba(0, 0, 0, 0.2) 0 0 0 1px';
|
||||||
var g={};
|
const g={};
|
||||||
var logs=[];
|
const logs=[];
|
||||||
var logindex=-1;
|
let logindex=-1;
|
||||||
var cheat=lib.cheat;
|
let proxyWindow=Object.assign({},window,{
|
||||||
//使用正则匹配绝大多数的普通obj对象,避免解析成代码块。
|
_status:_status,
|
||||||
var reg=/^\{([^{}]+:\s*([^\s,]*|'[^']*'|"[^"]*"|\{[^}]*\}|\[[^\]]*\]|null|undefined|([a-zA-Z$_][a-zA-Z0-9$_]*\s*:\s*)?[a-zA-Z$_][a-zA-Z0-9$_]*\(\)))(?:,\s*([^{}]+:\s*(?:[^\s,]*|'[^']*'|"[^"]*"|\{[^}]*\}|\[[^\]]*\]|null|undefined|([a-zA-Z$_][a-zA-Z0-9$_]*\s*:\s*)?[a-zA-Z$_][a-zA-Z0-9$_]*\(\))))*\}$/;
|
lib:lib,
|
||||||
|
game:game,
|
||||||
|
ui:ui,
|
||||||
|
get:get,
|
||||||
|
ai:ai,
|
||||||
|
cheat:lib.cheat
|
||||||
|
});
|
||||||
|
Object.defineProperties(proxyWindow, {
|
||||||
|
'_status':{
|
||||||
|
configurable:false,
|
||||||
|
enumerable:true,
|
||||||
|
writable:false
|
||||||
|
},
|
||||||
|
'lib':{
|
||||||
|
configurable:false,
|
||||||
|
enumerable:true,
|
||||||
|
writable:false
|
||||||
|
},
|
||||||
|
'game':{
|
||||||
|
configurable:false,
|
||||||
|
enumerable:true,
|
||||||
|
writable:false
|
||||||
|
},
|
||||||
|
'ui':{
|
||||||
|
configurable:false,
|
||||||
|
enumerable:true,
|
||||||
|
writable:false
|
||||||
|
},
|
||||||
|
'get':{
|
||||||
|
configurable:false,
|
||||||
|
enumerable:true,
|
||||||
|
writable:false
|
||||||
|
},
|
||||||
|
'ai':{
|
||||||
|
configurable:false,
|
||||||
|
enumerable:true,
|
||||||
|
writable:false
|
||||||
|
},
|
||||||
|
'cheat':{
|
||||||
|
configurable:false,
|
||||||
|
enumerable:true,
|
||||||
|
writable:false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if(typeof window.Proxy=='function'){
|
||||||
|
proxyWindow=new Proxy(proxyWindow,{
|
||||||
|
set(target,prop,newValue) {
|
||||||
|
if (!['_status','lib','game','ui','get','ai','cheat'].includes(prop)){
|
||||||
|
Reflect.set(window, prop, newValue);
|
||||||
|
}
|
||||||
|
return Reflect.set(target,prop,newValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
//使用new Function隔绝作用域,避免在控制台可以直接访问到runCommand等变量
|
//使用new Function隔绝作用域,避免在控制台可以直接访问到runCommand等变量
|
||||||
var fun=(new Function('reg','value','_status','lib','game','ui','get','ai',`"use strict";\nreturn eval(reg.test(value)?('('+value+')'):value)`));
|
/**
|
||||||
var runCommand=function(e){
|
* @type { (value:string)=>any }
|
||||||
|
*/
|
||||||
|
const fun=(new Function('window',`
|
||||||
|
const _status=window._status;
|
||||||
|
const lib=window.lib;
|
||||||
|
const game=window.game;
|
||||||
|
const ui=window.ui;
|
||||||
|
const get=window.get;
|
||||||
|
const ai=window.ai;
|
||||||
|
const cheat=window.lib.cheat;
|
||||||
|
//使用正则匹配绝大多数的普通obj对象,避免解析成代码块。
|
||||||
|
const reg=/^\{([^{}]+:\s*([^\s,]*|'[^']*'|"[^"]*"|\{[^}]*\}|\[[^\]]*\]|null|undefined|([a-zA-Z$_][a-zA-Z0-9$_]*\s*:\s*)?[a-zA-Z$_][a-zA-Z0-9$_]*\(\)))(?:,\s*([^{}]+:\s*(?:[^\s,]*|'[^']*'|"[^"]*"|\{[^}]*\}|\[[^\]]*\]|null|undefined|([a-zA-Z$_][a-zA-Z0-9$_]*\s*:\s*)?[a-zA-Z$_][a-zA-Z0-9$_]*\(\))))*\}$/;
|
||||||
|
return function(value){
|
||||||
|
"use strict";
|
||||||
|
return eval(reg.test(value)?('('+value+')'):value);
|
||||||
|
}
|
||||||
|
`))(proxyWindow);
|
||||||
|
const runCommand=function(e){
|
||||||
if(text2.value&&!['up','down'].contains(text2.value)){
|
if(text2.value&&!['up','down'].contains(text2.value)){
|
||||||
logindex=-1;
|
logindex=-1;
|
||||||
logs.unshift(text2.value);
|
logs.unshift(text2.value);
|
||||||
|
@ -51417,7 +51487,7 @@ new Promise(resolve=>{
|
||||||
try{
|
try{
|
||||||
var value=text2.value.trim();
|
var value=text2.value.trim();
|
||||||
if(value.endsWith(";")) value=value.slice(0,-1).trim();
|
if(value.endsWith(";")) value=value.slice(0,-1).trim();
|
||||||
var result=fun(reg,value,_status,lib,game,ui,get,ai);
|
var result=fun(value);
|
||||||
game.print(result);
|
game.print(result);
|
||||||
}
|
}
|
||||||
catch(e){
|
catch(e){
|
||||||
|
@ -63540,6 +63610,7 @@ new Promise(resolve=>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
//我愚蠢的弟弟呦,这是最后一次兼容46内核兼容版了
|
||||||
get:get
|
get:get
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue