KLWPでFF11の現在の期間限定目標を表示させる

FF11のブログと迷ったんだけど、KLWP関連記事だからこっちでいいや。ということで、応用すれば何か他のにも使えそうだけど今の所思いつかない。

FF11の期間限定目標は、月曜から日曜まで、4時間毎に目標が切り替わる。

現在の時間帯を算出する

各時間帯はこんな感じで4時間毎に切り替わる。

  1. 00:00 – 03:59
  2. 04:00 – 07:59
  3. 08:00 – 11:59
  4. 12:00 – 15:59
  5. 16:00 – 19:59
  6. 20:00 – 23:59

各時間帯をどうやってコードにするかというと分換算になおして、不等号を使って何時~何時までという感じに$if()$を使って振り分ける。
現在時刻を0:00からの経過分にするには、単純に (現在の時間 x 60) + 現在の分 で算出できる。
例えば07:59であれば、 7 x 60 + 59 = 479 となる。

現在の(00:00からの)経過分が04:00(=240分) ~ 07:59(=479分)の間にあるか?の式は
$if(df(h) * 60 + df(m) > 240 & df(h) * 60 + df(m) <= 479, o, x)$で判定できる。
これを繰り返して、その時間帯であれば成、違うなら否として次条件の計算へと繰り返していく。

$if(
  df(h) * 60 + df(m) <= 239, A,
  df(h) * 60 + df(m) > 240 & df(h) * 60 + df(m) <= 479, B,
  df(h) * 60 + df(m) > 480 & df(h) * 60 + df(m) <= 719, C,
  df(h) * 60 + df(m) > 720 & df(h) * 60 + df(m) <= 959, D,
  df(h) * 60 + df(m) > 960 & df(h) * 60 + df(m) <= 1199, E, F
)$

コード内の & は「かつ」を表す。
$gv(hoge)$ = 4 のとき、
$if(2 + 2 = gv(hoge) & 2 * 2 = gv(hoge), o, x)$ = o

これをグローバル変数で$gv(xitime)$とした。

現在の曜日を算出する

KLWPには$df(f)$というコードが用意されていて、これは月曜を1、日曜を7として、現在の曜日を数値化する。 これで今日の曜日を特定する。

現在の曜日と時間帯を算出する

グローバル変数で$gv(xitext)$$df(f)$$gv(xitime)$ を設定する。 これで、例えば土曜の21:16であれば、6Fというコードで表現される。

現在の期間限定目標が何なのか表示させる

あとは力技で書いていくだけ。

$if(
  gv(xitext) = 1a | gv(xitext) = 4e | gv(xitext) = 6c, バード類を倒す,
  gv(xitext) = 1b | gv(xitext) = 4f | gv(xitext) = 6d, リザード類を倒す,
  gv(xitext) = 1c | gv(xitext) = 3a | gv(xitext) = 6e, アンデッド類を倒す,
  gv(xitext) = 1d | gv(xitext) = 3b | gv(xitext) = 6f, 戦利品(印章),
  gv(xitext) = 1e | gv(xitext) = 3c | gv(xitext) = 5a, Treasure Casketを開ける,
  gv(xitext) = 1f | gv(xitext) = 3d | gv(xitext) = 5b, アクアン類を倒す,
  gv(xitext) = 2a | gv(xitext) = 5e | gv(xitext) = 7c, アモルフ類を倒す,
  gv(xitext) = 2b | gv(xitext) = 5f | gv(xitext) = 7d, ヴァーミン類を倒す,
  gv(xitext) = 2c | gv(xitext) = 4a | gv(xitext) = 7e, アルカナ類を倒す,
  gv(xitext) = 2d | gv(xitext) = 4b | gv(xitext) = 7f, 経験値(5000exp),
  gv(xitext) = 2e | gv(xitext) = 4c | gv(xitext) = 6a, 物理ダメージで倒す,
  gv(xitext) = 2f | gv(xitext) = 4d | gv(xitext) = 6b, ビースト類を倒す,
  gv(xitext) = 3f | gv(xitext) = 5d | gv(xitext) = 7b, プラントイド類を倒す,
  gv(xitext) = 3e | gv(xitext) = 5c | gv(xitext) = 7a, 魔法ダメージで倒す, error
)$

コード内の | は「または」を表す。
$gv(hoge)$ = 4 のとき、
$if(2 + 2 = gv(hoge) | 3 * 3 = gv(hoge), o, x)$ = o