ConsoleCRS是一个便于在控制台输出外部JS代码的插件,全称Console Cross Regino Scripting 控制台跨域脚本。 您可以用它轻而易举的修改Screeps客户端,例如导航栏颜色、Creep的样式,你的头像等等任何您能在Screeps客户端上看到的东西。 您也可以用CRS向Screeps客户端的DOM上添加新的元素或标签,来定制你的Screeps客户端。
还有更多功能等待你的发掘,本仓库目前只提供一个基本交互的插件,它让这个过程变得更加容易。
Version 1.2
A
新增VUE支持,前往ConsoleCRS文件中,修改Setting对象下CRSCore_Support_VUE字段为trueA
新增ElementUI支持,,前往ConsoleCRS文件中,修改Setting对象下CRSCore_Support_ElementUI字段为trueU
数据交互优化,现在向外部域传递数据请使用ConsoleCRS.data,外部域读取数据使用CRSCore.data,并且该对象不会被清空A
新增使用VUE+ElementUI输出对象树的DEMOVersion 1.1
U
修复了在反序列化时,单双引号以及反斜杠造成的转义后语法错误问题。A
新增在外部域中的对象CRSCore,该对象用于挂载ConsoleCRS提供的快捷方法来操作Screeps的GUI,这样您就可以在内部域代码中直接使用。A
新增方法ConsoleCRS.reMount(),可以重新挂载在外部域下的CRSCore对象,并刷新您的ConsoleCRS配置。A
您现在可以通过复写ConsoleCRS.RunQueue.data对象来传递Screeps内部域产生的数据。A
现在您可以手动或通过修改ConsoleCRS.setting[settingName] = true/false 来配置ConsoleCRS的执行组件,以此来减少不必要的资源浪费。A
您可以打开或关闭ConsoleCRS.pushFinish的执行成功在控制台的提示。require("ConsoleCRS");
为了您更好的阅读本文档,您需要了解下面作者主张定义的一些特殊术语。
内部域
指通过您的编写在Screeps的云端保存的JS代码的上下文,例如main.js中定义的对象都在内部域
中。
外部域
指在网页或Steam客户端中,webview视图中运行的JS代码的上下文。
为了便于区分不同域的对象
ConsoleCRS
CRSCore
因此,ConsoleCRS的准确描述就是,一个能在外部域
中执行写在内部域
中代码的插件。由于外部域
能够访问到webview(浏览器)的对象,因此ConsoleCRS结合了内部域
的云端保存永久存在的特性以及外部域
广阔的访问权限,使您能够在Screeps中实现更多天马行空的功能。
描述:添加到运行队列
使用方法:
ConsoleCRS.pushCode(function(){
//TODO
})
描述:用于执行pushCode后的运行队列,和pushCode配套使用
ConsoleCRS.pushCode(function(){
//TODO First
});
//Some other code of Screeps
ConsoleCRS.pushCode(function(){
//TODO Second
})
ConsoleCRS.pushFinish();
描述:清空控制台输出
该方法简述了如何通过CRS来控制Screeps客户端的界面按钮,如下
".console-controls .md-button:eq(1)"就是清除控制台输出按钮的 选择器路径
您应该遵循这个方法体,外层使用setTimeout,内层选中您想要的按钮元素,最后使用trigger('click')触发
如果您想获取其他按钮的 选择器路径,您可以前往WEB版的Screeps并启用开发者模式,通过检查元素操作获得
使用DEMO:
//每10tick清空控制台
if (Game.time % 10 == 0) {
ConsoleCRS.cleanOutput();
}
ConsoleCRS.pushFinish();//该方法也需要使用pushFinish(),否则将不会有效果
描述:重置挂载到外部域上的CRSCore
对象,一般用于打开游戏时可能ConsoleCRS并未执行并挂载注入CRSCore
,此时在控制台使用该命令即可激活。并且在您手动配置Setting后使用该API可以刷新您的ConsoleCRS配置,使其生效。
内部域
上下文使用该方法,可能会造成不必要的性能损失。该对象在ConsoleCRS.Setting下,您可以配置该对象的字段来开启或关闭某些功能。 例如,开启CRSCore的网络API支持。 需要打开设置CRSCore_Support_Net为true(当然现在还不能支持网络请求,因为我没写)
ConsoleCRS.Setting = {
CRSCore_Support_Net: true
//其他更多的字段配置
}
PrintRunTip
是否开启命令执行提示,开启后,执行命令将在console输出执行提示
CRSCore_Support_ScreepsNet
!无效字段:还没实现!
开启后将存在一个CRSCore.Net对象来支持网络连接和访问,提供便捷的GET/POST方法来访问网络。
CRSCore_Support_ScreepsDOM
开启后将存在一个CRSCore.ScreepsDOM对象,利用其中的方法迅速拿到相应的DOM元素。
CRSCore_Support_VUE
VUE支持
CRSCore_Support_ElementUI
Element-UI支持
由于内部域和外部域的执行顺序存在不同,即在非多线程的情况下,总是内部域的代码先执行完毕,再执行外部域的代码,因此写在内部域的外部代码是不会立即执行,在进行数据交换时,也需要特别的方式。 下面将展示几个有关内部域向外部域传递数据的例子。
==错误的数据交互==
//下面是错误的例子
let a = 123;
ConsoleCRS.pushCode(function(){
console.log(a);//这里并非预期的输出123,因为此时这个变量a属于外部域,访问的是外部域.a,而不是内部域.a
});
//错误的例子2
ConsoleCRS.pushCode(function(){
a = 123;
});
console.log(a);//这里同理,即便外部域执行的代码声明的变量a是全局变量,但该变量任然无法让内部域的代码访问。
==正确的数据交互==
//使用该特殊对象进行数据传递
ConsoleCRS.RunQueue.data ={
a:123
}
ConsoleCRS.pushCode(function(){
console.log(CRSCore.data.a);//此时我们的外部域上下文中便可以访问到内部域中的数据了,您可以通过该方式将内部域的数据传出到外部域
});
//在Screeps客户端中央生成一个显示当前时间的黄色DIV
ConsoleCRS.pushCode(function(){
//判断是否存在该元素
if(!window.myElement){
//不存在创建
window.myElement=document.createElement("div");
document.body.appendChild(myElement);
}else{
let myElement = window.myElement;
myElement.style.width = "100px";
myElement.style.height = "100px";
myElement.style.background = "#ffc107";
myElement.style.position = "fixed";
myElement.style.top = "50%";
myElement.style.left = "50%";
//获取时间
let mytime=new Date().toLocaleTimeString();
myElement.innerHTML = mytime;
}
});
ConsoleCRS.pushFinish();
//使用ScreeosDom修改客户端配色
ConsoleCRS.pushCode(function(){
let mainColor = "#795548";
let secondColor = "#3e2723"
let CDOM = CRSCore.ScreepsDom;
//顶部栏元素处理
CDOM.TopContent.self.style.background = mainColor;
CDOM.TopContent.Profile.self.children[0].setAttribute('style', 'background: '+secondColor+' !important');
//左侧按钮处理
CDOM.LeftControls.self.children[0].style.background = mainColor;
CDOM.LeftControls.self.children[1].style.background = mainColor;
CDOM.LeftControls.self.children[2].style.background = mainColor;
//缩放按钮处理
CDOM.ZoomControls.self.children[0].style.background = mainColor;
CDOM.ZoomControls.self.children[1].style.background = mainColor;
//右侧栏处理
CDOM.AsideContent.self.style.background = secondColor;
CDOM.AsideContent.BottomGroup[0].children[0].style.background = mainColor;
CDOM.AsideContent.BottomGroup[1].children[0].style.background = mainColor;
CDOM.AsideContent.BottomGroup[2].children[0].style.background = mainColor;
CDOM.AsideContent.BottomGroup[3].children[0].style.background = mainColor;
//编辑栏处理
CDOM.EditorPlane.NavTab.style.background = mainColor;
});
ConsoleCRS.pushFinish();
//使用VUE+ELEMENT输出树状对象图
let mydata = [
{
la: "标题名称" + Game.time,
ch: [{
la: "二级标题",
ch: [{
la: "1-1-1"
}
]
}
]
},
];
//由于ConsoleCRS挂载后自动载入了VUE和ElementUI,因此您可以直接输出
//输出一个可以被识别为VUEAPP的DIV到Console,使用Game.time来设置不同id
console.log("Data:<div id='vueapp" + Game.time + "'><el-tree :data=\"data\" :props=\"defaultProps\"></el-tree></div>")
//内部域向外部域传递数据
ConsoleCRS.data.Gametime = Game.time;
ConsoleCRS.data.mydata = mydata;
//使用代码修改这个VUEAPP
ConsoleCRS.pushCode(function () {
new Vue({
el: "#vueapp" + CRSCore.data.Gametime,
data: function () {
return {
data: CRSCore.data.mydata,
defaultProps: { children: "ch", label: "la" }
}
}
})
});
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。