ふかふかブログ

興味のあることについてゆる~く書きます

スプラトゥーン3のスケジュールをGoogleカレンダーに登録してみなイカ

こちらの記事の令和最新版です。 www.nohara.dev ↑上の記事にある方法では現在動きません。

前回はGoogleカレンダーの更新/インポート間隔が調整できない(1日?)問題があったためスプラトゥーンのスケジュールとは相性が合わずでした。 そこで今回は自分のカレンダーに登録する形で実装したいと思います。

2024/02/04追記

他人にカレンダーを見られたとき大変な反応をされることに気づいたので過去分を削除する処理を入れました。 一度過去分を削除したあとはoneDayBeforeを使うことで前日のものだけを削除できます。

実行環境

完成イメージ

画像では例としてXマッチのガチエリアのみ表示しています。 バンカラマッチのスケジュールを登録したい場合の方法は後述します

作成手順

  1. Googleドライブを開き、右クリック→その他→Google App Scriptを選択

  2. 今あるコードをすべて削除し、以下のコードをコピーペースト

     function getSplatoon3Schedule() {
       const headers = {
           "user-agent" : "twitter@fukafuka_ningen"
       }
       const options = {
           'headers' : headers
       }
       const response = UrlFetchApp.fetch('https://spla3.yuu26.com/api/x/schedule', options);
       const calendar = CalendarApp.getDefaultCalendar();
    
       if (response.getResponseCode() == 200) {
         const schedule = JSON.parse(response.getContentText());
         const events = Array.from(schedule.results);
    
         for (const event of events) {
           const startTime = new Date(event.start_time);
           const endTime = new Date(event.end_time);
           const rule = event.rule.name;
           const stages = event.stages;
           const stage1 = stages[0].name;
           const stage2 = stages[1].name;
           const title = `${rule} ${stage1} ${stage2}`; 
           createEvent(calendar, startTime, endTime, title, rule)
         }
       } else {
         console.log("Request failed with status code " + response.getResponseCode());
       }
       deletePastEvents(calendar)
     }
    
     function createEvent(calendar, startTime, endTime, title, rule){
           // 重複登録しない
           const registered_events = calendar.getEvents(startTime, endTime);
           for (const registerd_event of registered_events){
             if (registerd_event.getTitle() === title)
               return;
           }
    
           if (rule == "ガチエリア") {
             console.log(`${title} ${startTime} has been registerd.`);
             calendar.createEvent(title, startTime, endTime);
           } 
           // else if (rule == "ガチアサリ") {
           //   console.log(`${title} ${startTime} has been registerd.`);
           //   calendar.createEvent(title, startTime, endTime);
           // }
     }
    
     function deletePastEvents(calendar) {
       var now = new Date(); // 現在の日時
       //var events = calendar.getEvents(new Date('20023-01-01T00:00:00Z'), now); // 2023年から現在までのイベントを取得
       var oneDayBefore = new Date(now.getTime() - (24 * 60 * 60 * 1000)); // 現在時刻から24時間(1日)前
        var events = calendar.getEvents(oneDayBefore, now); // 昨日から現在までのイベントを取得
    
       for (var i = 0; i < events.length; i++) {
         var event = events[i];
         var title = event.getTitle(); // イベントのタイトルを取得
         if (event.getEndTime() < now) { // イベントの終了時刻が現在時刻より前の場合
           if (title.startsWith("ガチエリア") || title.startsWith("ガチアサリ")) {
             event.deleteEvent(); // イベントを削除
             Logger.log('Deleted: ' + event.getTitle()); // ログに削除したイベントのタイトルを記録
           }
         }
       }
     }
    
  3. Ctrl-sまたは上部アイコンからプロジェクトを保存し、実行します

  4. 権限の承認を求められるので承認します 警告が出ますが詳細から承認できます

  5. 実行ログをみて xx has been registerd. と出ていればうまくカレンダーに登録されています

  6. 続いて定期実行のために、画面左のメニューからトリガーを選択し、時間の間隔を選択(時間)を2時間に変更します

  7. 2時間以上経過後、スケジュールが自動で登録されていれば成功です

Xマッチ、エリア以外の情報が欲しい場合

  • バンカラマッチの情報が欲しい場合
    • コードの冒頭にあるURLのx部分をbankara-challengeまたはbankara-open に変更する
  • エリア以外の情報が欲しい場合
    • コード後ろのほうにあるガチエリア部分をガチヤグラ, ガチホコバトル, ガチアサリに変更する
  • 詳細は Spla3 API - スプラトゥーン3のステージ情報API を参照
  • サーモンランのスケジュールも登録できますがサーモンランの場合はそこまでリアルタイム性が求められないと思うのですでに有志の方が作られたサーモンランカレンダーを利用するのがお勧めです。

splamp.info

お前もドライブワイパー使いにならないか?

こんにちは、ふかふかです。

Splathonアドベントカレンダー8日目の記事です。

7日目は寒いのはイヤッッッさんの"めしのこと"についてでした。

おいしそうなご飯ばかりでお腹がすきましたね。

早速白ご飯.com登録しました。

この記事ではドライブワイパー使いを増やすべくドライブワイパーの基本的なことについて紹介したいと思います。

書いている人のスプラ歴

Splathonで私を知らない人も多くいると思うので簡単に自己紹介しておきます。

  • Splatoon2から始めて3も合わせると約2500時間プレイ(2022.12.8時点)
  • Splatoon2 H3リールガンで最高Xパワー2500程度
  • Splatoon3 ドライブワイパーでXパワー2200程度、H3亜種がでたらH3持つかも...
  • 中射程シューター、塗り武器、使っていて楽しいブキが好き
  • 味方にバフをかける、サポートよりの戦法が好き

ドライブワイパー基本性能wiki参考

メイン-射程

ドライブワイパーは横振り・縦振りの2種類の攻撃手段がありますがそれぞれ射程とダメージが異なります。

横振り

スプラシューターより長く、プライムシューターより短い

縦振り

プライムシューターより長く、ボトルガイザーより短い *1

メイン-ダメージ

横振り 30ダメージ
横振り(ワイパー部分) 15ダメージ
縦振り 60ダメージ
縦振り(直撃) 120ダメージ

サブ-トーピード

直撃(トピコロ含む) 60ダメージ
爆風 35ダメージ
散弾 12ダメージ

コンボ

Splatoonでのイカ(タコ)ちゃんのHP100を削るためにドライブワイパーではいくつかのコンボが考えられます。代表的なものをいくつか書いておきます。

縦振り+横振りx2

一番基本的なコンボ。60+30x2で120ダメージ。縦振りは前入力することで前にステップしながら放つことができるため後ろに下がりそうな敵には前入力して横振りで追撃。逆に詰めてきそうな相手には縦振りを当てた後、下がりながら横振り。

縦振りx2

敵の高台下からこちらに気づいていない長射程にダメージを与えるのに有効。縦に判定が広いのでローラーの縦振りに近い攻撃ができる。プライムなどのほぼ同射程シューターとは引き撃ちで対応。

横振りx4

一撃が重い相手(ブラスター等)に使う。横振り時のヒト移動速度が非常に高いため敵の攻撃を避けながら対面できる。ただしキル速度はかなり遅いので敵のカバーには注意。

縦振り(直撃)

ロマン。基本狙って使うことはない。こちらに気づいていない長射程、オブジェクト周りで混戦状態のときに使う場合がある程度。

ドライブワイパーの特徴

縦振り(直撃)ヒット音が気持ちいい

非常に重要な部分。

つまらないものは、それだけで良いブキではありえない。 某フロムゲー*2より

通常のヒット音ではなく特殊ヒット音が鳴る。気持ち良すぎて多用したくなるが、直撃だけを狙う動きはかなり弱い。外すとモデラーにすら対面負けすることがあるので注意。

横振り時のヒト移動速度が速い

横振りをしながら左右に移動することで敵の攻撃をかわすことができる。なお、射撃中にはヒト移動速度アップギアの効果は乗らない。 2022年11月30日ver2.0.0アップデートで横振りの塗りと当たり判定が強化された*3。一度使って手放したあなたも再度持ってみよう。

高い対物性能

ドライブワイパー含むワイパー種は高い対物性能を持っており、設置系スペシャルやサブに強く出れる。 いくつか例を出す。

ホップソナー

縦振り+横振りそれぞれ一発ずつ or 縦振り(直撃)

ナイスダマ

縦振り(直撃)x3でキル

スプリンクラー

横振り一発

おすすめyoutuber(動画)

文字より動画がいいという方にはこちらを

最後に

ギア構成&立ち回り編も書きたかったけどもうお昼休み終わるのでこのくらいで。

明日はfei_komeさんの"ハクスラゲー「GrimDawn」面白いぞ!という話"です。 ハクスラゲー好きなので楽しみ。

*1:画像はsplatool様より https://splatool.net/rangemanage.html

*2:Bloodborne

*3:当たり判定のほうは正確にはバグ修正

DiscordのテキストをVOICEROIDが読み上げてくれるBOTを作ってみた(続編)

f:id:nohararc:20200710033123p:plain

前回までのあらすじ

DiscordのテキストをVOICEROIDが読み上げてくれるBOTを作ってみたが、導入方法が面倒であまり評判が良くなかった nohararc.hatenablog.jp

実際に動いている様子

youtu.be 画像で利用させていただいた素材*1

想定読者

  • discordのテキスト読み上げbotを作ってみたい方
  • discordを利用しているが自分の声で話すのは恥ずかしい方
  • voiceroid買ったはいいが使い道がなくて余らせている方

環境

動作確認は以下の環境で行っています。

  • Windows10 64bit
  • Python3.9.1(32bit)
  • VOICEROID2

前回との変更点

導入方法をできるだけシンプルにすべく構成を変更し初心者でも1時間あれば導入できる(ふかふか調べ)ようにした。

前回はhttpサーバー部分の手順が若干難しくつまずく方が多かった。

今回は直接voiceroid2のdllを叩くプログラムを作成するつもりであったが既にその部分はNkyokuさんが用途に合うものを作っていたため存分に活用させて頂いております。感謝。

導入方法

  1. VOICEROID2が動いているPC上にPython3をインストールする
  2. ffmpegをインストールしパスを通しておく
  3. ここのCode -> Download ZIP からソースコードをダウンロードしzipファイルを解凍する
  4. READMEを参考に進める

うまく動かなかった、こういった機能は実装できないかなどの相談はTwitterGitHubにお願いします。

スプラコンペを雑に振り返る

スプラコンペとは

ProbSpaceで開催されたスプラトゥーンの勝敗を予測するコンペで2020/8/19~2020/10/18にわたり開催されました。 利用できるデータは、ブキ・ルール・ランクなど試合が始まる前のデータのみ(試合中のキル・デス数などは利用できない)。 prob.space

個人的な振り返り

テーブルデータを触るのがほぼ初めてだったので初めの提出に一苦労しました。予測精度55-56%当たりからほぼ精度が上がらずそこからは放置...。

自分の最終的な順位はCatboostで予測した55%で71/288位、思っていたより良かった。ちなみに1位の方は58%の予測精度でした。

スプラトゥーン2を2000時間程度やっている身からしても予測精度が60%いかないと考えていたので概ね想定通り。

時間がなくて取り組めなかったものとしては、

  • NNでの予測
  • train/testのリーク確認
  • データ水増し

がありました。

おそらく効いたであろう特徴量

興味深いトピック

今回のデータを使って気になるデータを計算してみた

※ データ数が少なく実際の統計値とは大きく外れている可能性があります。気になる人は自分で計算してみよう! 真面目に見たい場合はstat.inkさんなどのサイトをお勧めします。

ロングブラスターとL3リールガンDの勝率比較

  • ロングブラスター

    • エリアの勝率: 43.09%
    • アサリの勝率: 49.01%
    • ヤグラの勝率: 49.17%
    • ホコの勝率: 47.56%
    • ナワバリの勝率: 47.10%
  • L3リールガンD

    • エリアの勝率: 51.56%
    • アサリの勝率: 57.96%
    • ヤグラの勝率: 54.95%
    • ホコの勝率: 54.33%
    • ナワバリの勝率: 60.53%
  • ソイチューバー

    • エリアの勝率: 37.93%
    • アサリの勝率: 36.36%
    • ヤグラの勝率: 42.11%
    • ホコの勝率: 42.59%
    • ナワバリの勝率: 45.71%

こんな感じで計算

def win_rate(df, weapon_key):
  A_ = df.loc[(df["A1-weapon"] == weapon_key) |
              (df["A2-weapon"] == weapon_key) |
              (df["A3-weapon"] == weapon_key) |
              (df["A4-weapon"] == weapon_key), ["y"]]
  A_win = A_.loc[A_["y"] == 1]  # y=1のときAの勝利

  B_ = df.loc[(df["B1-weapon"] == weapon_key) |
              (df["B2-weapon"] == weapon_key) |
              (df["B3-weapon"] == weapon_key) |
              (df["B4-weapon"] == weapon_key), ["y"]]
  B_win = B_[B_["y"] == 0]  # y=0のときBの勝利

  return (len(A_win) + len(B_win)) / (len(A_) + len(B_))

LINE BOTの友だちが1万人こえました

超えました f:id:nohararc:20200907055827p:plain

所感

2018年の初め?に作った記憶があるので約2年半で1万人。

ほぼ仲間内で利用していたのを公開したところそれなりに反響がありほぼ線形に友だちが増えていった。 Splatoon2人気すごい

運用費もほぼかかっていないので任天堂公式からスケジュール共有機能でも出ない限りそのまま稼働し続ける予定。

リポジトリ

github.com

友だち追加はこちらから

t.co

ご意見ご要望は私のTwitterまで

おまけ

要望があって先ほど追加した機能 f:id:nohararc:20200907055655p:plain

Pixel4a買った

検証端末兼子どもの写真撮影用途で購入。

f:id:nohararc:20200822033807j:plain

旧端末(p20lite)からの移行も付属のケーブル一本でできた。

今のところ特に不満なし。 ジェスチャー操作をボタン操作に変更したくらい。

f:id:nohararc:20200822033922j:plain

指紋認証もp20liteと比較して、雑に通しても認証してくれる印象

なにか追加の設定あれば追記する予定 使用感等気になる人はTwitterで聞いて