screeps 配置无需游戏客户端的开发环境

screeps 系列教程

!!!不推荐警告!!!

如果你是第一次打开这篇文章的话,我推荐使用 Screeps 使用 rollup 打包你的代码 来搭建你的本地开发环境,这篇内容包含了更完善的构建流程,并同样可以脱离游戏客户端。本篇内容虽然还可以使用,但是已经过时并不在维护。

前言

本文将介绍一下如何 在不引人注明的情况下摸鱼 在不打开游戏客户端的情况下进行游戏。请确保本地已经装好了nodejsnpm,并对npm的使用有一定的了解。如果你觉得有点懵的话可以先参考下这篇文章:screeps 使用VSCode进行开发并添加自动补全

ok,我们先来拆分下需求,想要愉快的进行游戏需要如下几点:

  • 有一个可以交互的游戏终端 就像游戏里嵌入的console那样
  • 本地代码保存后会自动提交到服务器运行

准备工作

我们先来做一些最基本的准备工作。首先新建一个文件夹,命名为headless-screeps或其他你喜欢的名字。然后npm init一路回车完成初始化,再npm install @types/screeps @types/lodash@3.10.1安装自动补全。接下来就可以安装本地终端了。

安装本地游戏终端

安装screeps-multimeter。这个是第三方模块,可以实现游戏中console一样的功能。唯一的缺点就是 不支持中文输出。git 地址在这里 github - screeps-multimeter 。打开cmd,切换到上一步新建的游戏文件夹路径,然后执行下面命令即可安装。

npm install screeps-multimeter --save-dev

安装完成后打开./package.json,在scripts字段下添加一个新属性start,如下:

...
"scripts": {
  "start": "multimeter"
},
...

然后执行如下命令即可启动游戏终端:

npm start

初始化终端

启动之后就会弹出如下页面,提示你没有找到配置文件,按任意键进行初始化,或者按Ctrl + C退出。

没有找到配置项,按任意键初始化

然后会让你输入一个api tokenscreeps-multimeter需要这个 token 来获取你的游戏运行时信息。你可以点击 screeps 官方文档 - Authentication Tokens 来查看更多信息。

输入token

这个令牌可以点击 获取 Screeps Token 来生成一个。直接点击下面的Generate token即可。将获取到的token粘贴回输入框,然后按回车下一步。

生成令牌

这一步填写你所在服务器名称即可。

填写服务器名

然后会让你选择配置项保存的文件名,默认即可。

填写配置文件名

然后你就会进入终端的主界面,游戏终端会花几秒的时间来连接服务器,当你看到上面的CPUMem字段刷新出来之后就代表连接成功了。如果过了一段时间终端报错退出,请检查你和服务器的网络连接状况。

连接成功的终端

现在你就可以像使用游戏里内嵌的终端那样使用这个本地终端了。他还提供了将代码映射成命令的功能,方便平时的使用。具体的用法可以参考 github - screeps-multimeter README.md

我想连接私有服务器该怎么做?
只需在输入api token时不填直接回车,他就会让你提供私有服务器的主机名,端口以及用户名和密码,依次填写即可。

本地自动提交代码

有了终端之后还不够,我们还需要能从本地提交代码,最好是可以保存文件后就自动提交。接下来就使用grunt-screeps包来实现本地提交代码,使用grunt-contrib-watch实现保存文件后自动提交。

要使用上面两个插件我们需要先安装grunt,直接执行下面两条命令即可:

# 全局安装 grunt 命令行工具
npm install -g grunt-cli
# 在项目中安装 grunt 及 grunt-screeps、grunt-contrib-watch 模块
npm install grunt grunt-screeps grunt-contrib-watch --save-dev

安装完成后在项目中新建一个Gruntfile.js文件,并填入如下内容,注意将其中的YOUR_EMAILYOUR_PASSWORD的值改成你的邮箱和密码,而default是提交到的分支、ptr是是否提交到测试服。

module.exports = function(grunt) {
    // 加载任务依赖
    grunt.loadNpmTasks('grunt-screeps');
    grunt.loadNpmTasks('grunt-contrib-watch');
    // 定义任务
    grunt.initConfig({
        // screeps 代码上传任务
        screeps: {
            options: {
                email: 'YOUR_EMAIL',
                password: 'YOUR_PASSWORD',
                branch: 'default',
                ptr: false
            },
            dist: {
                src: ['dist/*.{js,wasm}'],
            }
        },
        // 代码变更监听任务
        watch: {
            files: "dist/*.*",
            tasks: [ "screeps" ]
        }
    });
    // 注册默认任务
    grunt.registerTask("default", ["watch"])
}

然后我们在项目目录下新建个dist文件夹,并把我们的代码复制进去。注意!一定要确保dist文件夹中的代码存在!上传之后dist文件夹里的文件会直接覆盖你的线上文件。如果dist里什么都没有时执行了上传命令,那你的线上代码就会直接消失。当你确认完之后就可以执行如下命令启动任务了:

grunt 

执行之后你会发现控制台输出了以下内容:

Running "watch" task
Waiting...

这就代表着你的代码已经成功被监听了,这时候我们随便找个dist文件夹中的文件编辑一下然后保存,就可以看到如下输出:

>> File "dist\main.js" changed.
Running "screeps:dist" (screeps) task
Committed to Screeps account "hpgless@outlook.com" branch "default".

Done.
Completed in 5.011s at Sat Aug 17 2019 22:23:31 GMT+0800 (中国标准时间) - Waiting...

这就说明代码上传成功,这时你打开multimeter或者网页screeps或者游戏客户端都可以看到你的修改了。

关于官方示例Gruntfile.js会导致代码上传遗漏的问题说明

如果你曾经使用过 这里 提到的官方示例任务,就会发现有时上传会遗漏一部分文件,从而导致线上丢失文件从而报找不到xx模块的错误,这个问题也有其他人发现并在screeps-grunt的 github 仓库上提了 issue 以及对应的 pr,不过这个项目好像已经不再维护了,如果你感兴趣的话可以点击对应的链接进行查看。

本文中给出的代码不会导致该问题的发生,解决方案由我群大佬 @TPEZ 提出,群号565401831,欢迎前来抱团取暖。

总结

本文介绍了如何在不打开游戏客户端的情况下进行游戏,首先安装screeps-multimeter模块,经过简单的配置后就可以访问游戏终端了。然后安装grunt-screepsgrunt-contrib-watch,安装完成后就可以使用grunt screeps提交项目中dist文件夹下的文件到服务器。而grunt-contrib-watch则可以监听文件从而实现保存后直接提交代码。

如果你想在游戏中使用TypeScript的话,欢迎继续阅读 screeps 使用 TypeScript

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335