lineageボス時間計算のJavaScript?のコードが落ちてたのでCにしてみた。
幻牛鬼の時間がほしいのだけど...w
やはりエンド時点で手動でボタン押して15分タイマーかけるしか無いのかな。
/***************************************************************** * Lineage Boss Time Checker * http://hoge.secret.jp/lineage/js/lineage_bosstime.js * 改変OKです *****************************************************************/ /***************************************************************** * Lineage Boss Time Checker ver.2 * by AZuSk * http://hoge.secret.jp/lineage/js/lineage_bosstime.js * 改変OKです extern "C" int dkTimeCheck(__time64_t*p, __time64_t*n, __time64_t*s); extern "C" int orenTimeCheck(__time64_t*p, __time64_t*n, __time64_t*s); extern "C" int adenTimeCheck(__time64_t*p, __time64_t*n, __time64_t*s); extern "C" int bkcTimeCheck(__time64_t*p, __time64_t*n, __time64_t*s); extern "C" int dore2TimeCheck(__time64_t*p, __time64_t*n, __time64_t*s); extern "C" int dore1TimeCheck(__time64_t*p, __time64_t*n, __time64_t*s); extern "C" int casperTimeCheck(__time64_t*p, __time64_t*n, __time64_t*s); 例)午前1時を基準に、出現しない時間が1時間・する時間が1時間の2時間周期の場合 var data = new cycleTimeCheck(1,2); data.prev:最近のボスタイム開始からの秒数 data.next:次のボスタイム開始までの秒数 data.flag:ボスタイム中かどうかのtrue/false値 data.prevDate:最近のボスタイム開始時刻のDateオブジェクト data.nextDate:次のボスタイム開始時刻のDateオブジェクト *****************************************************************/ #include <time.h> #define FALSE 0 #define TRUE 1 #define IN #define OUT #if 1 typedef __time64_t TIMEVAR; #define TIME _time64 #define LOCALTIME _localtime64 #else typedef time_t TIMEVAR; #define TIME time #define LOCALTIME localtime #endif static void Oren (IN TIMEVAR today, IN struct tm *t, IN TIMEVAR offset, IN TIMEVAR interval, OUT TIMEVAR *base, OUT TIMEVAR *scope) { const TIMEVAR tOrenup = 1027350000; //オーレンアップ日2002年7月23日0:00=1027350000 const TIMEVAR t5_00 = (5 * 60 * 60); // 5:00 5時間=1000*60*60*5=18000s *base = (today-tOrenup); *base %= (*scope * 2); } static void Dk (IN TIMEVAR today, IN struct tm *t, IN TIMEVAR offset, IN TIMEVAR interval, OUT TIMEVAR *base, OUT TIMEVAR *scope) { //曜日を求める。曜日があがる毎にテーブルが+4時間ずれる //午前0時からの経過時間を7時間で割った時の余り秒数に曜日補正 *base += (4*60*60 * t->tm_wday); *base %= (*scope * 2); } int TimeCheck( IN TIMEVAR offset, IN TIMEVAR interval, IN TIMEVAR scope, OUT TIMEVAR *p, OUT TIMEVAR *n, void (*check)(IN TIMEVAR today, IN struct tm *t, IN TIMEVAR offset, IN TIMEVAR interval, OUT TIMEVAR *base, OUT TIMEVAR *scope) ) { TIMEVAR base; int flag; TIMEVAR today; TIMEVAR prev; TIMEVAR next; struct tm *t ; today = TIME( NULL ); t = LOCALTIME(&today); base = ((t->tm_hour*60*60 + t->tm_min*60 + t->tm_sec) - offset) % (scope * 2); if(check) { check(today, t, interval, offset, &base, &scope); } next = scope-base; if (next<=0){next = next +(scope*2);} prev = base-scope; if (prev<0){prev = prev +(scope*2);} flag = (base>=scope) ? TRUE : FALSE; *p= today - prev; *n= today + next; return flag; } int cycleTimeCheck(IN TIMEVAR o, IN TIMEVAR i, OUT TIMEVAR *p, OUT TIMEVAR *n, OUT TIMEVAR *s) { o *= 60 * 60; i *= 60 * 60; *s = i/2; return TimeCheck(o, i, *s, p, n, NULL); } // var bkcData = new cycleTimeCheck(2,4); int bkcTimeCheck(OUT TIMEVAR *p, OUT TIMEVAR *n, OUT TIMEVAR *s) { return cycleTimeCheck(2, 4, p, n, s); } int dore2TimeCheck(OUT TIMEVAR *p, OUT TIMEVAR *n, OUT TIMEVAR *s) { return cycleTimeCheck(0, 3, p, n, s); } int dore1TimeCheck(OUT TIMEVAR *p, OUT TIMEVAR *n, OUT TIMEVAR *s) { return cycleTimeCheck(1, 2, p, n, s); } int casperTimeCheck(OUT TIMEVAR *p, OUT TIMEVAR *n, OUT TIMEVAR *s) { return cycleTimeCheck(0, 1, p, n, s); } int adenTimeCheck(OUT TIMEVAR *p, OUT TIMEVAR *n, OUT TIMEVAR *s) { //リネージュ仕様考察サイトの記事を取り入れて4の倍数時の前後1時間ずつで計算しています。 //午前1時からの経過時間を4時間で割った時の余り秒数 return cycleTimeCheck(1, 4, p, n, s); } int orenTimeCheck(OUT TIMEVAR *p, OUT TIMEVAR *n, OUT TIMEVAR *s) { const TIMEVAR t5_00 = (5 * 60 * 60); // 5:00 5時間=1000*60*60*5=18000s *s = t5_00/2; return TimeCheck(0, t5_00, t5_00/2, p, n, Oren); } int dkTimeCheck(OUT TIMEVAR *p, OUT TIMEVAR *n, OUT TIMEVAR *s) { const TIMEVAR t7_00 = (7 * 60 * 60); // 7:00 *s = t7_00/2; return TimeCheck(0, t7_00, *s, p, n, Dk ); }
こんな感じで使えるっぽい
void tformat(CClientDC &cdc, int x, int y, LPCTSTR title, int flag, __time64_t *prev, __time64_t *next, __time64_t *sel) { CTime p(*prev); CTime n(*prev + *sel); if(!flag) { p = CTime(*next); n = CTime(*next + *sel); } CString str; str.Format(_T("%-6s %5s-%5s"), title, p.Format(_T("%H:%M")), n.Format( _T("%H:%M"))); cdc.SetBkColor(GetSysColor(COLOR_BTNFACE)); cdc.SetTextColor(flag? RGB(100, 100, 255) : RGB(255, 100, 100)); cdc.TextOut(x,y, str); } OnTimer(HWND hWnd) { CClientDC cdc( hWnd); int y= 18; int f; __time64_t p, n, s; f=dkTimeCheck(&p, &n, &s); tformat(cdc, 5, y, CString(_T("DK")), f, &p,&n,&s); y += 12; f=orenTimeCheck(&p, &n, &s); tformat(cdc, 5, y, CString(_T("Oren")), f, &p,&n,&s); y += 12; f=adenTimeCheck(&p, &n, &s); tformat(cdc, 5, y, CString(_T("Aden")), f, &p,&n,&s); y += 12; f=bkcTimeCheck(&p, &n, &s); tformat(cdc, 5, y, CString(_T("BKC")), f, &p,&n,&s); y += 12; f=dore2TimeCheck(&p, &n, &s); tformat(cdc, 5, y, CString(_T("Dore2")), f, &p,&n,&s); y += 12; f=dore1TimeCheck(&p, &n, &s); tformat(cdc, 5, y, CString(_T("Dore1")), f, &p,&n,&s); y += 12; f=casperTimeCheck(&p, &n, &s); tformat(cdc, 5, y, CString(_T("Casper")), f, &p,&n,&s); y += 12; }