パプポンチャンネルブログ

パプポンチャンネルのブログに新生しますた

【Cookie Clicker(クッキークリッカー)】確実に金砂糖が出現する世界線に移行するためのjavascript

スポンサーリンク

f:id:papuwak:20191103191557p:plain

ブックマークレット紹介

以下のものをブックマークレットとして使用すれば、金のSugar lumpを確実に入手することができます。
もちろんJavaScriptコンソールに直接入力しても使用することができます。

ブックマークレットのやり方はクッキークリッカーの日本語wikiを参照してください。
w.atwiki.jp

また、スクリプトの実行は自己責任でお願いします。
あらかじめセーブデータのバックアップは取っておきましょう。

javascript:
setInterval(
 function autoHarvestSugarLump(){
  let wantSugarType = 2;
  let wantMaxF = true;
  let maxLoop = 5;
  let noFreezeF = false;
  let age=Date.now()-Game.lumpT;

  /* 収穫できる時間帯なら収穫を行う */
  if (age>=Game.lumpMatureAge){

   /* 現在の砂糖の数を記録する */
   var nowLumps = Game.lumps;

   /* 処理開始時のデータを記録しておく */
   var s = Game.WriteSave(1);

   /* 現在のタイプに応じて収穫できる最大数を取得 */
   var maxGet = 1;

   /* もし最大数を求めるならばその最大数を設定する */
   if(wantMaxF){
    switch(Game.lumpCurrentType){
     case 1:maxGet = 2;break;
     case 2:maxGet = 7;break;
     case 3:maxGet = 2;break;
     case 4:maxGet = 3;break;
    }
   }
 

   var loopCount = 0;
   var harvestF = false;
   /* 指定回数分ループし、求めるシュガータイプと一致ものを収穫できる可能性があるか調べる */
   while(loopCount < maxLoop){
    Game.clickLump();
    /* 求めるシュガータイプを収穫できたかどうか判定 */
    if(Game.lumpCurrentType == wantSugarType){
     var getLumps = Game.lumps - nowLumps;
     /* 取得できた砂糖が最大数(または1)未満だった場合、セーブをロードして下のwhile文に突入する */
     if(getLumps < maxGet){
      harvestF = true;
      Game.ImportSaveCode(s);
     }
     break;
    }
    /* 求めるシュガータイプじゃなかったのでセーブを読み込んでもう一回 */
    Game.ImportSaveCode(s);
    loopCount++;
   }

   /* 
    求めるシュガータイプを収穫できるかつnoFreezeFがfalseの場合、
    最大数収穫かつ次のシュガータイプが求めるシュガータイプとなるまで粘る
   */
   while((!noFreezeF) && harvestF){
    /* 最大数収穫まで粘る */
    while(1){
     Game.clickLump();
     var getLumps = Game.lumps - nowLumps;  
     if(getLumps == maxGet){
      break;
     }
     Game.ImportSaveCode(s);
    }
    /* 
     次のシュガータイプが求めるシュガータイプなら終了
     そうでなければ繰り返す
    */
    if(Game.lumpCurrentType == wantSugarType){
     break;
    }
    Game.ImportSaveCode(s);
   }
  }
 }
,50);

コード解説

クッキークリッカーにおいて、砂糖のレア種が出るかどうかは砂糖を収穫したときの砂糖の成長具合によって変わるようです。
言い換えれば、金砂糖が出ないタイミングではいくら収穫しても金砂糖は収穫できません。

そのため、このコードでは少しずつ時間を変えながら金砂糖がドロップする世界線を探しています。
また、上記のコードは金砂糖収穫の他収穫数を最大にする処理も行っています(収穫タイミングが成熟時、すなわち収穫しても入手が0である可能性もあるため)。

以下がその処理の説明です。

  1. もし収穫できるほどSugar lumpが成長していなければ終了、そうでないなら以下の処理を実行する
  2. 現在のセーブデータを変数sに保存する
  3. 現在の砂糖の数を変数nowLumpsに保存する
  4. 以下の処理(繰り返しA)をmaxLoop(初期値は5)回繰り返す
    1. A:収穫する
    2. A:もし次がwantSugarType(初期値は金砂糖)なら以下の判定を行う
      1. A:収穫後の砂糖の数と収穫前の砂糖の数を比較し、最大数未満ならセーブデータsをロードし、harvestFをtrueにして"繰り返しA"終了
      2. A:最大数以上ならば"繰り返しA"終了(これで最大数収穫かつ次のSugar lumpがwantSugarTypeに)
      • A:ただし、wantMaxFがfalseならば最大数は1として扱う
    3. A:セーブデータsを読み込む
  5. loopFがtrueかつnoFreezeFがfalseの場合、以下の処理(繰り返しB)を繰り返す
    1. B:以下の処理(繰り返しC)を繰り返す
      1. B:C:収穫する
      2. B:C:最大数なら"繰り返しC"を終了する(これで最大数収穫かつ次のSugar lumpがwantSugarTypeに)
      3. B:C:セーブデータsを読み込む
    2. B:収穫したSugar lumpがwantSugarTypeなら"繰り返しB"終了
    3. B:セーブデータsを読み込む

要約すると、

  1. 収穫タイミングが金砂糖出現タイミングか判定
  2. もしそうなら最大数で収穫かつ次が金砂糖になるように収穫する

ということです。

コードの改変

このまま使用することもできますが、その場合"繰り返しC"のタイミングでクッキークリッカーが少しの間フリーズすることがあります。
"繰り返しC"の試行回数が増えて実行時間が非常に長くなることがあるためです。

そのため、改変しやすいようにいくつか変数を設けています。

javascript:
setInterval(
 function autoHarvestSugarLump(){
  let wantSugarType = 2;
  let wantMaxF = true;
  let maxLoop = 5;
  let noFreezeF = false;
  ...

コードのうち

  • wantSugarType
  • wantMaxF
  • maxLoop
  • noFreezeF

を変更することで、フリーズしないようにしたり、金砂糖以外を収穫することもできます。

wantSugarType

次のSugar lumpで収穫したいもののタイプを設定します。

  • 0:nomal(普通)
  • 1:bifurcated(分岐)
  • 2:golden(金色)
  • 3:meaty(肉塊)
  • 4:caramelized(キャラメル)

元々2となっている数値を以上のいずれかに書き換えることで、望むSugar lumpを収穫することができます。
ただし、ババアポカリプス状態でないと3のmeatyは出現しないことには注意が必要です。

wantMaxF

現在生っているものを収穫する際に、取得できる最大数を取得するかどうかを設定します。
trueならば最大数まで粘り、falseならば1個以上の収穫で妥協します。

maxLoop

"繰り返しA"の繰り返し回数を決定します。
この数が多いと短い時間で"繰り返しB"に突入できますが、逆に"繰り返しB"の突破率が下がると思います。
この数値は5のままで大丈夫だと思います。

noFreezeF

この数値をtrueにすると、フリーズの原因となる"繰り返しB"を飛ばすことでフリーズを防ぎます。
初期値はfalseなので、必要に応じて変更してください。

ただし、"繰り返しB"を飛ばしてしまうのでnoFreezeFをtrueにした状態でwantMaxFをtrueにしていると収穫までの時間は伸びてしまうと思います。
この辺はお好みで。
伸びてしまうとはいってもSugar lumpが実るのにかかる時間に比べれば十分短いので、どちらもtrueで大丈夫だと思います。

まとめ

このスクリプトを用いれば大体7倍のペースでシュガーランプを集めることができますね。
金砂糖の実績がどうしても取れないという方はお試しください。