Screeps 服務(wù)器控制臺(tái)操作

screeps 系列教程

前言

很多小伙伴對(duì)于如何有效的測(cè)試自己的游戲代碼一直很苦惱拇囊,官服 Tick 太長(zhǎng)操漠;社區(qū)服還要重新練級(jí)烹笔,時(shí)間久了又怕被打;寫了 pb depo 采集代碼結(jié)果等不到目標(biāo)澄耍,怎么辦呢噪珊?其實(shí)對(duì)于測(cè)試來(lái)說(shuō),最有效的方法就是使用本地啟動(dòng)的私服齐莲,Screeps 的 Steam 客戶端支持一鍵啟動(dòng)私服痢站,非常方便,當(dāng)然你自己搭建一個(gè)也完全不是問(wèn)題选酗。

私服測(cè)試相對(duì)于其他方法來(lái)說(shuō)最大的好處就是你可以完全自定義任何東西阵难。包括地形、等級(jí)芒填、創(chuàng)建或者銷毀任何物品等呜叫。這給我們的測(cè)試提供了非常大的便利。但是官方對(duì) CLI 的幫助文檔很不詳細(xì)殿衰,為了方便大家操作朱庆,我會(huì)介紹幾個(gè)比較常用的服務(wù)器控制臺(tái)指令。

下面的操作都是基于服務(wù)器使用默認(rèn)的 lokiStorage 作為存儲(chǔ)的闷祥,如果你的服務(wù)器使用了mongoDB的話娱颊,使用對(duì)應(yīng)的數(shù)據(jù)庫(kù)終端可以更方便的進(jìn)行查看。

啟動(dòng) CLI

如果你是用 steam 客戶端啟用的話凯砍,可以直接點(diǎn)擊下圖左側(cè)的 CLI 來(lái)進(jìn)入控制臺(tái):

而如果你是使用 docker 部署服務(wù)器的話箱硕,使用如下命令就可以進(jìn)入服務(wù)器的 CLI:

# 下面的 screeps-server 請(qǐng)?zhí)鎿Q成對(duì)應(yīng)的 docker 容器名
docker exec -it screeps-server npx screeps cli

小提示:這里也能開(kāi)本地私服 ↓

查看幫助

CLI 中有一個(gè)全局方法help()可以用來(lái)查看幫助,如果你想查看指定對(duì)象的幫助信息的話悟衩,將其作為參數(shù)傳遞給help()即可剧罩,如下:

help(storage)

查看玩家信息

玩家信息保存在storage.db中,使用異步方法findOne即可查看座泳。注意惠昔,這里findOne方法接受一個(gè)對(duì)象作為參數(shù)幕与,而你通過(guò)該方法查詢出來(lái)的所有屬性都可以作為查詢條件。

# 將下面的 hoho 替換成想查詢的玩家名
storage.db.users.findOne({ username: 'hoho' }).then(print)

查看 RoomObject 信息

注意這里要使用storage.db['rooms.objects']進(jìn)行查詢舰罚,使用storage.db.rooms.objects是查不到的。這里推薦使用_id屬性進(jìn)行查詢薛耻,其他同上营罢。

# 將下面的 _id 替換成想查詢的對(duì)象 id
storage.db['rooms.objects'].findOne({ _id: '211a0b1b1d058d1' }).then(print)

新增 RoomObject

這里我們以添加 PowerBank 為例,下面的代碼可以直接用饼齿,只需要修改中間的x饲漾,yroom的值即可(你甚至可以直接創(chuàng)建到自己房里)缕溉。

# 控制臺(tái)不支持換行考传,所以只能把命令寫在一行里
storage.env.get(storage.env.keys.GAMETIME).then(time => storage.db['rooms.objects'].insert({ type: 'powerBank', x: 19, y: 29, room: 'W0N7', store: { power: 9000 }, hits: 2000000, hitsMax: 2000000, decayTime: time + 5000 }))

這個(gè)命令有點(diǎn)長(zhǎng),所以我們簡(jiǎn)單介紹一下:

  • 由于 PowerBank 有decayTime证鸥,而這個(gè)值是要老化消失時(shí)的 tick 值僚楞。所以我們需要先獲取到storage.env.keys.GAMETIME,然后將其 +5000枉层,再賦值給最后的decayTime泉褐。如果你只是簡(jiǎn)單的賦值 5000 的話,那么它的decayTime很有可能會(huì)變成負(fù)數(shù)(如果游戲已經(jīng)運(yùn)行了 5000 tick)鸟蜡。
  • 創(chuàng)建新對(duì)象使用了storage.db['rooms.objects'].insert()方法膜赃,這個(gè)方法接受一個(gè)對(duì)象,并將其創(chuàng)建為新的 RoomObject揉忘。如果你想創(chuàng)建其他種類的游戲?qū)ο蟮脑捥彝扑]先用上面介紹的”查看 RoomObject 信息“來(lái)打印一個(gè)已有的同類型對(duì)象,然后對(duì)照著其屬性來(lái)進(jìn)行創(chuàng)建泣矛。

同理疲眷,新增 deposit 的命令如下:

storage.env.get(storage.env.keys.GAMETIME).then(time => storage.db['rooms.objects'].insert({ type: 'deposit', depositType: 'mist', x: 23, y: 12, room: 'W8N0', harvested: 0, decayTime: time + 50000 }))

修改 RoomObject

修改游戲?qū)ο蟮臓顟B(tài)需要用到update方法,這個(gè)方法接受兩個(gè)參數(shù)您朽,第一個(gè)參數(shù)是包含查詢條件的對(duì)象咪橙,第二個(gè)參數(shù)為配置項(xiàng),其中的$set屬性包含的對(duì)象就是我們要修改的內(nèi)容虚倒。下面這個(gè)是修改 Controller 等級(jí)的命令美侦。

# 注意修改 controller 的 id
storage.db['rooms.objects'].update({_id: 'ff7a07728e60965'}, {$set: { level: 8 }})

上面創(chuàng)建的 PowerBank 你也可以用這個(gè)方法修改,借此完成設(shè)置 pb 的hits屬性來(lái)快速削減其生命值之類的操作魂奥。

移除 RoomObject

沒(méi)什么好說(shuō)的菠剩,想刪誰(shuí)就填誰(shuí)的 id(僅限 RoomObject )。

# 把 _id 替換成你想要?jiǎng)h除的對(duì)象 id
storage.db['rooms.objects'].removeWhere({_id: '729c0e4e771ca95'})

修改玩家等級(jí)

這個(gè)也是用update方法實(shí)現(xiàn)的耻煤,你可以用下面這個(gè)命令快速提升自己的 GCL 和 GPL具壮。其他通過(guò)查看玩家信息能看到的屬性也都可以用這種方法修改准颓。

# 修改下面的 username,后面的 gcl 和 power 越大棺妓,你的對(duì)應(yīng)等級(jí)就越高
storage.db.users.update({ username: 'hoho' }, { $set: { gcl: 6666666, power: 66666 }})

修改存儲(chǔ)物品數(shù)量(添加戰(zhàn)備化合物)

下面這個(gè)命令用來(lái)給存儲(chǔ)建筑添加進(jìn)攻系 t3攘已。用的其實(shí)就是上面的“修改 RoomObject”的方法。這里直接貼出來(lái)方便大家使用怜跑。

# 把下面這個(gè) _id 修改為 Storage 或者 Terminal 的 id
storage.db['rooms.objects'].update({ _id: 'de191f87f95d1e1' }, {$set: { store: { XZHO2: 10000, XZH2O: 10000, XLHO2: 10000, XKHO2: 10000, XGHO2: 10000 } }})

把所有建筑工地的進(jìn)度提升至 99%

下面的命令是 .find.update 的綜合應(yīng)用样勃,不需要修改即可使用。具體流程是:獲取所有的工地 > 獲取每個(gè)工地的信息 > 把每個(gè)工地的建筑進(jìn)度設(shè)置為進(jìn)度最大值 - 1

storage.db['rooms.objects'].find({ type: 'constructionSite' }).then(resp => resp.map(cs => storage.db['rooms.objects'].findOne({ _id: cs._id }).then(csDetail => storage.db['rooms.objects'].update({_id: cs._id }, {$set: { progress: csDetail.progressTotal - 1 }}))))

Bot 添加與刪除

媽媽再也不用擔(dān)心我戰(zhàn)斗代碼沒(méi)法測(cè)試?yán)?/p>

# 添加 bot 修改后面的房間名即可
bots.spawn('simplebot', 'W3N1')

# 刪除 bot性芬,后面這個(gè)改成 bot 的用戶名
bots.removeUser('AliceBot') 

這里只提到了添加刪除已有的 bot(默認(rèn)只有官方自帶的simplebot)峡眶,如果你想添加其他 bot 的話,請(qǐng)先按照 這篇文章 末尾提到的 Mod 安裝方法來(lái)安裝一個(gè) bot植锉,然后再回來(lái)添加辫樱。

房間配置

如果想配置房間的屬性,例如地形俊庇、出口狮暑、Source、Mineral 等辉饱,就需要用到map.generateRoom()心例。注意,如果你想重新配置一個(gè)房間的話鞋囊,要先使用map.removeRoom(roomName)將該房間徹底移除止后,然后才能重新生成:

# 先移除該房間
map.removeRoom('W1N9')

# 再生成一個(gè)資源豐富的房間
map.generateRoom('W1N9', { sources: 10, mineral: 'X' })

map.generateRoom方法接收兩個(gè)參數(shù),第一個(gè)是要生成的房間名溜腐,第二個(gè)是一個(gè)配置對(duì)象译株,所有可用的屬性如下(你可以在控制臺(tái)中執(zhí)行help(map)來(lái)查看最新的配置項(xiàng)

  • exits - 一個(gè)包含出口坐標(biāo)的數(shù)組,如: { top: [20,21,23], right: [], bottom: [27,28,29,40,41]}挺益。默認(rèn)隨機(jī)生成
    • 如果你設(shè)置的出口沒(méi)辦法匹配相鄰房間的話歉糜,控制臺(tái)會(huì)返回匹配失敗錯(cuò)誤。
    • 如果你生成的房間和其他已存在房間相鄰望众,并且你也沒(méi)設(shè)置該屬性的話匪补,房間會(huì)自動(dòng)匹配生成對(duì)應(yīng)的出口。
    • 所以如果你想打通一面墻的話烂翰,就需要把墻隔開(kāi)的兩個(gè)房間都移除然后重新進(jìn)行生成夯缺。
  • terrainType - 地形生成類型,1 - 28 之間的任意數(shù)字甘耿,默認(rèn)隨機(jī)
  • swampType - 沼澤生成類型踊兜,0 - 14 之間的任意數(shù)字,默認(rèn)隨機(jī)
  • sources - 房間中 Source 的數(shù)量佳恬,默認(rèn) 1 - 2 個(gè)
  • mineral - 元素礦的類型捏境,置 false 設(shè)置為無(wú)元素礦于游,默認(rèn)隨機(jī)
  • controller - 房間是否有控制器,默認(rèn)為 true
  • keeperLairs - 是否生成 keeperLairs垫言,默認(rèn)為 false

如果在重新生成房間后你的 creep 出現(xiàn)尋路異常贰剥、不停撞墻、私服加載緩慢的問(wèn)題筷频,請(qǐng)嘗試重啟私服蚌成。

寫在最后

上面介紹這些并不是所有的 api,如果有興趣的話你可以用help()把所有的控制臺(tái)對(duì)象都查看一遍截驮,如果還不夠的話笑陈,github - backend-local 這個(gè)項(xiàng)目 lib/cli 目錄下就是私服控制臺(tái)的實(shí)現(xiàn)际度,請(qǐng)葵袭!

了解更多 Screeps 的中文教程?歡迎訪問(wèn) Screeps - 中文系列教程乖菱!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坡锡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子窒所,更是在濱河造成了極大的恐慌鹉勒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吵取,死亡現(xiàn)場(chǎng)離奇詭異禽额,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)皮官,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門脯倒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捺氢,你說(shuō)我怎么就攤上這事藻丢。” “怎么了摄乒?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵悠反,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我馍佑,道長(zhǎng)斋否,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任拭荤,我火速辦了婚禮如叼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘穷劈。我一直安慰自己笼恰,他們只是感情好踊沸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著社证,像睡著了一般逼龟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上追葡,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天腺律,我揣著相機(jī)與錄音,去河邊找鬼宜肉。 笑死匀钧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谬返。 我是一名探鬼主播之斯,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼遣铝!你這毒婦竟也來(lái)了佑刷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酿炸,失蹤者是張志新(化名)和其女友劉穎瘫絮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體填硕,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麦萤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扁眯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壮莹。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恋拍,靈堂內(nèi)的尸體忽然破棺而出垛孔,到底是詐尸還是另有隱情,我是刑警寧澤施敢,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布周荐,位于F島的核電站,受9級(jí)特大地震影響僵娃,放射性物質(zhì)發(fā)生泄漏概作。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一默怨、第九天 我趴在偏房一處隱蔽的房頂上張望讯榕。 院中可真熱鬧,春花似錦、人聲如沸愚屁。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霎槐。三九已至送浊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丘跌,已是汗流浹背袭景。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闭树,地道東北人耸棒。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像报辱,于是被迫代替她去往敵國(guó)和親与殃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容