hartmannのゲームあれこれ

適当にやってるゲームのあれこれを偶に書きます

WoT CWE管理シート自動化の旅々 7.『戦闘が刻む倍率』/『現在時刻の表示』

 まだCWE前だけど、書ける内容があったのでとりあえず3話分書こうと思っています。  大体のCWEルールは理解しているという前提で書きます。

ts-hartmann.hatenablog.com これの続き

はじめに

こっち側の役人「味気ないとは思わんかね?GM殿」
GM「味気ないとはどういうことですか?」
こっち側の役人「表のこっち側とあっち側は本当に仲が悪いし、顔も合わせたくない。だが、この表はあまりに味気ない」
GM「はぁ…」
こっち側の役人「我々は向こう側に負けたくないのだよ。この味気ない表もこっち側の方が優れていると自慢したいのだが、何かいい案はないものかねGM殿」
GM「んー?まあないこともないわ。お役人さん、キーボードを持ってない?」
こっち側の役人「ん!?ああ…あるが… それでどうするつもりだね」
GM「こうするのよ」

やりたいこと

 戦闘予定表の@とかとか(それぞれの戦闘を表すマーク)が何倍戦闘を表すのかシートで見れるようにしたい。そんなの「各自で判断しろよ」とかいう突っ込みはなしですよ。それを言ったら全ての自動化に刺さってしまいますので。

f:id:TS_hartmann:20201218132728p:plain
こんな感じ

 戦闘倍率の表示自体はスプレッドシートの関数のみで動いているため、先に述べている「この連載におけるシート自動化の定義」には当てはまりません。それなのになぜこの内容を入れるかと言うと、この次の記事で書くコードに関わってくるのです。

 正直この処理もGASで出来そうですが、プログラミングを学び始める前にスプレッドシート内の関数で全て終わらせてしまっていたのです(情報を保存する必要もないし)。

戦闘倍率を表示させる手順

手順1. GAS側の記述

 今回はスプレッドシート内の関数のみで仕上げるのでGAS側の記述は必要ありません。

手順2. スプレッドシート側の記述

 シートの内容が欲張りすぎる……というか私が作ったシートな筈なのにどこがどうなっているのかわかりません。終わりです。いいや、やっちゃえ○産!!

docs.google.com

 2021/01/03追記: 順次、この連載で紹介したシートを、ここに纏めておくつもりです(そのままでは使えませんので各自で改変よろしくお願いいたします)。

 これの「名声獲得倍率」というシートを前回までのスプレッドシートにコピーしてください(説明放棄)。参照しているシートがないというエラーは、参照シートを作っても関数を再計算させないとエラーが直りません。

 一応説明すると、表の右側に(最初の画像でx5.5とか)書いてある場所は戦線名と戦闘形式を判定して、何倍戦闘か表示させるようになっています。
 5行目~7行目とA列~B列は、時間判別で今戦闘を行っているプロヴィンスの行・時間の列に色付けを行うものです。後述する現在時間を表示するスクリプトを仕込んでおかないと動作しません。

 次の記事では戦闘予定表に@?を書く作業を自動化していきますので、このシートの「最大参加クラン数」の列が次回必要になるのです。

現在時刻の表示

 さっき述べた現在時間を表示するスクリプトを書いていきます。スプレッドシート内にはnow関数があってこの関数で現在時間を表示させることが出来ますが、now関数を使うとスプレッドシートが非常に重たくなるのです。なので動作を早くするために、ここはGAS使って書いてしまおうというわけです。
 他の所でも書かれているコードですが、一応ここでも貼っておきます。

手順1. GAS側の記述
function getDateTime() {
  
//現在時刻を取得
  var now = new Date();
  
//「スクリプトデータ」内のA2セルに時刻を入力
  var ssA = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('スクリプトデータ');
  ssA.getRange('A2').setValue(now);
  
//書式設定
  ssA.getRange("A2").setNumberFormat("mm/dd hh:mm");
  
}

 トリガーを1分おきにしてこのコードを動かせばOKです。

手順2. スプレッドシート側の記述

 白紙のシート「スクリプトデータ」を作るだけです。A2セルに現在時刻が表示されるので、A1セルにわかりやすいような説明を書いておくと良いと思います。

いつもの

元こっち側の役人「みんな表の向こう側よりも自分たちが優れていると思い込んでいたが……」
元あっち側の役人「戦闘が刻んだ5倍の名声倍率によって、それを否定されたということだ」
元こっち側の役人「結局、このシートは必要不可欠だったんだよ。何から何まで同じだったのだ」
元あっち側の役人「これからは1つのシートとして平穏にやっていくだろう」
私「はあ」
元こっち側の役人「じゃあGM殿失礼するよ」
私「あのっ、統一する前のシートってどっちの方に倍率が多く刻まれていたんですか?(目をキラキラさせながら)」
元こっち側の役人「決まっているだろう」
元あっち側の役人「どっちも同じだよ」
私「同じ……?」
元こっち側の役人「もともと1つのシートだし」
元あっち側の役人「どっちも表の向こうに負けまいと思って発展してきたからなあ」
私「どうして誰も相手側が同じような発展を遂げていることに気づかなかったのですか?」
元あっち側の役人「自分たちが優れていると思い込むため、表の向こうをみたくなかったんだよ。なあ」
元こっち側の役人「お互いにな」


 きっとこれでよかったのですねえ……
 表は一般兵や指揮官のためだけにあるのではなく、GMをやる人たちのものなのですから。まっ、1倍戦闘を見られなかったのは残念ですけど……
 GMは将来シートが一つになると思ってこれを作ったのでしょうか?いえ、まさかですね。

続き

ts-hartmann.hatenablog.com