Run all html/js through prettifiers
This commit is contained in:
parent
5e59f3dea8
commit
654fa9ffce
3 changed files with 555 additions and 527 deletions
|
@ -1,10 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.0.0">
|
||||
<title>SIFTools</title>
|
||||
<META http-equiv="refresh" content="5;URL=sif_tools.html">
|
||||
<meta http-equiv="refresh" content="5;URL=sif_tools.html">
|
||||
</head>
|
||||
<body bgcolor="#ffffff">
|
||||
<center>This is not the web page you're looking for... <A HREF="sif_tools.html">move along, move along</a>
|
||||
<body bgcolor="#FFFFFF">
|
||||
<center>
|
||||
This is not the web page you're looking for... <a href="sif_tools.html">move along, move along</a>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -22,19 +22,28 @@
|
|||
|
||||
// TODO:
|
||||
// =====
|
||||
// * account for 1.2x bonus when feeding cards of the same attribute
|
||||
// (maybe also the super (1.5) and ultra (2.0) success bonuses too?)
|
||||
// * @sifen_trackbot update code gets "stuck" sometimes - not sure if the problem
|
||||
// * General improvements:
|
||||
// - needs a lot more error/bounds checking in general
|
||||
// * Card Level Calc:
|
||||
// - account for 1.2x bonus when feeding cards of the same attribute
|
||||
// - maybe also the super (1.5) and ultra (2.0) success bonuses too?
|
||||
// - detect "overkill" (i.e. feeding too much EXP to a card)
|
||||
// - add "max level" button to automatically fill in the max level of the given type of card
|
||||
// * Event Tracker:
|
||||
// - if time remaining < 24 don't put parenthesis around the hours/minutes/seconds display
|
||||
// - @sifen_trackbot update code gets "stuck" sometimes - not sure if the problem
|
||||
// is in the twitter fetcher or elsewhere
|
||||
// * needs a lot more error/bounds checking
|
||||
|
||||
// Set to 0 to disable debugging, 1+ to enable debugging (higher = more verbose)
|
||||
var DEBUG_LEVEL = 0;
|
||||
|
||||
// EXP tables
|
||||
var exp_table_n = [ -1, 0, 6, 18, 28, 40, 51, 61, 72, 82, 93, 104, 114, 124, 135, 145, 156, 165, 176, 187, 196, 207, 217, 226, 238, 247, 257, 268, 277, 288, 297, 308, 317, 328, 337, 348, 358, 367, 377, 388, 397 ];
|
||||
|
||||
var exp_table_r = [ -1, 0, 14, 31, 45, 55, 67, 76, 85, 94, 103, 110, 119, 125, 134, 140, 148, 155, 161, 168, 174, 181, 187, 193, 199, 206, 211, 217, 223, 228, 235, 240, 245, 251, 256, 262, 267, 272, 277, 283, 288, 292, 298, 303, 308, 313, 317, 323, 327, 332, 337, 342, 346, 351, 356, 360, 365, 370, 374, 378, 383 ];
|
||||
|
||||
var exp_table_sr = [ -1, 0, 54, 98, 127, 150, 169, 187, 203, 218, 232, 245, 257, 269, 281, 291, 302, 311, 322, 331, 340, 349, 358, 366, 374, 383, 391, 398, 406, 413, 421, 428, 435, 442, 449, 456, 462, 469, 475, 482, 488, 494, 500, 507, 512, 518, 524, 530, 536, 541, 547, 552, 558, 563, 568, 574, 579, 584, 590, 594, 600, 605, 609, 615, 619, 625, 629, 634, 639, 643, 648, 653, 657, 662, 667, 670, 676, 680, 684, 689, 693 ];
|
||||
|
||||
var exp_table_ur = [ -1, 0, 201, 294, 345, 382, 411, 438, 460, 481, 499, 517, 532, 547, 561, 574, 587, 598, 611, 621, 631, 642, 651, 661, 670, 679, 687, 696, 704, 712, 720, 727, 734, 742, 749, 755, 763, 769, 775, 782, 788, 794, 800, 806, 812, 818, 823, 829, 834, 840, 845, 850, 856, 860, 866, 870, 875, 880, 885, 890, 894, 899, 903, 908, 912, 917, 921, 925, 930, 933, 938, 942, 946, 950, 954, 959, 961, 966, 970, 974, 977, 981, 985, 988, 992, 996, 999, 1003, 1006, 1010, 1013, 1017, 1020, 1024, 1027, 1030, 1034, 1037, 1040, 1043, 1047 ];
|
||||
|
||||
// global variable to keep event state, because we need it to live between function calls.
|
||||
|
@ -43,8 +52,7 @@ var exp_table_ur = [-1, 0, 201, 294, 345, 382, 411, 438, 460, 481, 499, 517, 532
|
|||
var current_type_of_event = 1;
|
||||
|
||||
// debug logging
|
||||
function LOG(level, msg)
|
||||
{
|
||||
function LOG(level, msg) {
|
||||
if (DEBUG_LEVEL > 0 && DEBUG_LEVEL >= level) {
|
||||
console.log(msg);
|
||||
}
|
||||
|
@ -66,14 +74,42 @@ $(document).ready(function(){
|
|||
});
|
||||
|
||||
// Set up UI elements (tabs, buttons, etc.)
|
||||
function setup_ui_elements()
|
||||
{
|
||||
function setup_ui_elements() {
|
||||
LOG(1, "setup_ui_elements()");
|
||||
var default_tab = $.cookie("default_tab");
|
||||
if (isNaN(default_tab)) {
|
||||
default_tab = 0;
|
||||
var QueryString = function() {
|
||||
// http://stackoverflow.com/a/979995
|
||||
// This function is anonymous, is executed immediately and
|
||||
// the return value is assigned to QueryString!
|
||||
var query_string = {};
|
||||
var query = window.location.search.substring(1);
|
||||
var vars = query.split("&");
|
||||
for (var i = 0; i < vars.length; i++) {
|
||||
var pair = vars[i].split("=");
|
||||
// If first entry with this name
|
||||
if (typeof query_string[pair[0]] === "undefined") {
|
||||
query_string[pair[0]] = decodeURIComponent(pair[1]);
|
||||
} else if (typeof query_string[pair[0]] === "string") {
|
||||
var arr = [ query_string[pair[0]], decodeURIComponent(pair[1]) ];
|
||||
query_string[pair[0]] = arr;
|
||||
} else {
|
||||
query_string[pair[0]].push(decodeURIComponent(pair[1]));
|
||||
}
|
||||
}
|
||||
return query_string;
|
||||
}();
|
||||
var default_tab = 0;
|
||||
if (!isNaN(QueryString.tab)) {
|
||||
if (QueryString.tab >= 1 && QueryString.tab <= 4) {
|
||||
default_tab = QueryString.tab - 1;
|
||||
}
|
||||
} else {
|
||||
var default_tab_from_cookie = $.cookie("default_tab");
|
||||
if (isNaN(default_tab_from_cookie)) {
|
||||
default_tab = 0;
|
||||
} else {
|
||||
default_tab = default_tab_from_cookie;
|
||||
}
|
||||
}
|
||||
|
||||
$("#tabs").tabs({
|
||||
active: default_tab,
|
||||
create: function(event, ui) {
|
||||
|
@ -87,96 +123,101 @@ function setup_ui_elements()
|
|||
set_up_tab(theTab);
|
||||
}
|
||||
});
|
||||
|
||||
// only set up keypads on mobile browsers
|
||||
// not sure what the best way of doing this is
|
||||
var pageWidth = $(window).width();
|
||||
if (pageWidth < 1024) {
|
||||
$( "#current_rank" ).prop('readonly', true);
|
||||
$( "#current_rank" ).keypad(); // {prompt: 'Enter here'}
|
||||
$( "#current_exp" ).prop('readonly', true);
|
||||
$( "#current_exp" ).keypad(); // {prompt: 'Enter here'}
|
||||
$( "#desired_rank" ).prop('readonly', true);
|
||||
$( "#desired_rank" ).keypad(); // {prompt: 'Enter here'}
|
||||
$( "#current_gems" ).prop('readonly', true);
|
||||
$( "#current_gems" ).keypad(); // {prompt: 'Enter here'}
|
||||
$( "#gem_desired_gems" ).prop('readonly', true);
|
||||
$( "#gem_desired_gems" ).keypad(); // {prompt: 'Enter here'}
|
||||
$( "#card_current_level" ).prop('readonly', true);
|
||||
$( "#card_current_level" ).keypad(); // {prompt: 'Enter here'}
|
||||
$( "#card_current_exp" ).prop('readonly', true);
|
||||
$( "#card_current_exp" ).keypad(); // {prompt: 'Enter here'}
|
||||
$( "#card_desired_level" ).prop('readonly', true);
|
||||
$( "#card_desired_level" ).keypad(); // {prompt: 'Enter here'}
|
||||
$( "#card_feed_exp" ).prop('readonly', true);
|
||||
$( "#card_feed_exp" ).keypad(); // {prompt: 'Enter here'}
|
||||
$("#current_rank").prop("readonly", true);
|
||||
$("#current_rank").keypad();
|
||||
// {prompt: 'Enter here'}
|
||||
$("#current_exp").prop("readonly", true);
|
||||
$("#current_exp").keypad();
|
||||
// {prompt: 'Enter here'}
|
||||
$("#desired_rank").prop("readonly", true);
|
||||
$("#desired_rank").keypad();
|
||||
// {prompt: 'Enter here'}
|
||||
$("#current_gems").prop("readonly", true);
|
||||
$("#current_gems").keypad();
|
||||
// {prompt: 'Enter here'}
|
||||
$("#gem_desired_gems").prop("readonly", true);
|
||||
$("#gem_desired_gems").keypad();
|
||||
// {prompt: 'Enter here'}
|
||||
$("#card_current_level").prop("readonly", true);
|
||||
$("#card_current_level").keypad();
|
||||
// {prompt: 'Enter here'}
|
||||
$("#card_current_exp").prop("readonly", true);
|
||||
$("#card_current_exp").keypad();
|
||||
// {prompt: 'Enter here'}
|
||||
$("#card_desired_level").prop("readonly", true);
|
||||
$("#card_desired_level").keypad();
|
||||
// {prompt: 'Enter here'}
|
||||
$("#card_feed_exp").prop("readonly", true);
|
||||
$("#card_feed_exp").keypad();
|
||||
} else {
|
||||
$( "#current_rank" ).prop('readonly', false);
|
||||
$( "#current_exp" ).prop('readonly', false);
|
||||
$( "#desired_rank" ).prop('readonly', false);
|
||||
$( "#current_gems" ).prop('readonly', false);
|
||||
$( "#gem_desired_gems" ).prop('readonly', false);
|
||||
$( "#card_current_level" ).prop('readonly', false);
|
||||
$( "#card_current_exp" ).prop('readonly', false);
|
||||
$( "#card_desired_level" ).prop('readonly', false);
|
||||
$( "#card_feed_exp" ).prop('readonly', false);
|
||||
$("#current_rank").prop("readonly", false);
|
||||
$("#current_exp").prop("readonly", false);
|
||||
$("#desired_rank").prop("readonly", false);
|
||||
$("#current_gems").prop("readonly", false);
|
||||
$("#gem_desired_gems").prop("readonly", false);
|
||||
$("#card_current_level").prop("readonly", false);
|
||||
$("#card_current_exp").prop("readonly", false);
|
||||
$("#card_desired_level").prop("readonly", false);
|
||||
$("#card_feed_exp").prop("readonly", false);
|
||||
}
|
||||
|
||||
// set up date/time pickers
|
||||
$("#gem_desired_date").datepicker();
|
||||
$("#event_end_date").datepicker();
|
||||
// $( "#event_end_time" ).timepicker();
|
||||
$('#event_end_time').timepicker({ 'timeFormat': 'H:i', 'disableTextInput': true });
|
||||
|
||||
$("#event_end_time").timepicker({
|
||||
timeFormat: "H:i",
|
||||
disableTextInput: true
|
||||
});
|
||||
// set up buttons
|
||||
[ "calculate-rank", "reset-rank", "calculate-gems", "reset-gems", "calculate-card", "reset-card", "start-stop-timer", "clear-timer" ].forEach(function(entry) {
|
||||
var selector = "#button-" + entry;
|
||||
LOG(1, "setting up " + selector);
|
||||
$(selector).button();
|
||||
});
|
||||
|
||||
// hide result divs
|
||||
[ "rank-calc-result-area", "gem-calc-result-area", "card-calc-result-area" ].forEach(function(entry) {
|
||||
var selector = "#" + entry;
|
||||
LOG(1, "setting up " + selector);
|
||||
$(selector).hide();
|
||||
});
|
||||
|
||||
// set up radio button listeners
|
||||
$("input[name=gem-mode]").change(handle_gem_mode_select);
|
||||
$("input[name=card-mode]").change(handle_card_mode_select);
|
||||
|
||||
// hide non-selected option divs
|
||||
[ "gem-event-options-area", "gem-desired-gems-area", "card-exp-area", "gem_jp_daily_gems" ].forEach(function(entry) {
|
||||
var selector = "#" + entry;
|
||||
LOG(1, "setting up " + selector);
|
||||
$(selector).hide();
|
||||
});
|
||||
|
||||
// set up checkbox change event handler
|
||||
$("#gems_include_events").change(function() {
|
||||
handle_gem_event_box(this.checked);
|
||||
});
|
||||
|
||||
// set up gem event calc note dialog
|
||||
// $("#dialog").dialog({ autoOpen: false });
|
||||
$("a#gem_event_readme").click(function(e) {
|
||||
e.preventDefault();
|
||||
$("#gem_event_readme_dialog").dialog({height:300});
|
||||
$("#gem_event_readme_dialog").dialog({
|
||||
height: 300
|
||||
});
|
||||
});
|
||||
$("a#gem_quest_readme").click(function(e) {
|
||||
e.preventDefault();
|
||||
$("#gem_quest_readme_dialog").dialog({height:300});
|
||||
$("#gem_quest_readme_dialog").dialog({
|
||||
height: 300
|
||||
});
|
||||
});
|
||||
|
||||
// set up show/hide JP-only options
|
||||
$('#gem_game_version').on('change', function (e) {
|
||||
$("#gem_game_version").on("change", function(e) {
|
||||
handle_gem_game_version_change();
|
||||
});
|
||||
}
|
||||
|
||||
function handle_gem_game_version_change()
|
||||
{
|
||||
function handle_gem_game_version_change() {
|
||||
var game_version = $("#gem_game_version").val();
|
||||
if (game_version === "JP") {
|
||||
$("#gem_jp_daily_gems").show();
|
||||
|
@ -185,8 +226,7 @@ function handle_gem_game_version_change()
|
|||
}
|
||||
}
|
||||
|
||||
function handle_gem_event_box(show_it)
|
||||
{
|
||||
function handle_gem_event_box(show_it) {
|
||||
if (show_it) {
|
||||
$("#gem-event-options-area").show();
|
||||
} else {
|
||||
|
@ -194,8 +234,7 @@ function handle_gem_event_box(show_it)
|
|||
}
|
||||
}
|
||||
|
||||
function setup_button_handlers()
|
||||
{
|
||||
function setup_button_handlers() {
|
||||
$("#button-calculate-rank").click(function(evt) {
|
||||
calculate_rank();
|
||||
});
|
||||
|
@ -223,43 +262,47 @@ function setup_button_handlers()
|
|||
}
|
||||
|
||||
// tab functions
|
||||
|
||||
function set_up_tab(tab)
|
||||
{
|
||||
function set_up_tab(tab) {
|
||||
switch (tab) {
|
||||
case 0: rank_calc_tab_selected(); break;
|
||||
case 1: love_gem_calc_tab_selected(); break;
|
||||
case 2: card_level_calc_tab_selected(); break;
|
||||
case 3: event_end_calc_tab_selected(); break;
|
||||
case 0:
|
||||
rank_calc_tab_selected();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
love_gem_calc_tab_selected();
|
||||
break;
|
||||
|
||||
case 2:
|
||||
card_level_calc_tab_selected();
|
||||
break;
|
||||
|
||||
case 3:
|
||||
event_end_calc_tab_selected();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function rank_calc_tab_selected()
|
||||
{
|
||||
function rank_calc_tab_selected() {
|
||||
LOG(1, "rank_calc_tab_selected");
|
||||
$.cookie("default_tab", 0);
|
||||
}
|
||||
|
||||
function love_gem_calc_tab_selected()
|
||||
{
|
||||
function love_gem_calc_tab_selected() {
|
||||
LOG(1, "love_gem_calc_tab_selected");
|
||||
$.cookie("default_tab", 1);
|
||||
}
|
||||
|
||||
function card_level_calc_tab_selected()
|
||||
{
|
||||
function card_level_calc_tab_selected() {
|
||||
LOG(1, "card_level_calc_tab_selected");
|
||||
$.cookie("default_tab", 2);
|
||||
}
|
||||
|
||||
function event_end_calc_tab_selected()
|
||||
{
|
||||
function event_end_calc_tab_selected() {
|
||||
LOG(1, "event_end_calc_tab_selected");
|
||||
$.cookie("default_tab", 3);
|
||||
}
|
||||
|
||||
function calculate_rank()
|
||||
{
|
||||
function calculate_rank() {
|
||||
// validate data
|
||||
var current_rank = parseInt($("#current_rank").val());
|
||||
var current_exp_input = $("#current_exp").val();
|
||||
|
@ -278,17 +321,17 @@ function calculate_rank()
|
|||
} else if (desired_rank <= current_rank) {
|
||||
window.alert("Error: desired rank must be greater than current rank.");
|
||||
} else {
|
||||
var required_exp = 0
|
||||
var required_exp = 0;
|
||||
for (rank = current_rank; rank < desired_rank; rank++) {
|
||||
var required_exp_for_next_rank = Math.round(34.45 * rank - 551)
|
||||
var required_exp_for_next_rank = Math.round(34.45 * rank - 551);
|
||||
// account for half EXP on JP (only if rank < 100)
|
||||
if (game_version === "JP" && rank < 100) {
|
||||
required_exp_for_next_rank /= 2;
|
||||
}
|
||||
required_exp = required_exp + required_exp_for_next_rank
|
||||
required_exp = required_exp + required_exp_for_next_rank;
|
||||
}
|
||||
// account for exp we already have
|
||||
required_exp -= current_exp
|
||||
required_exp -= current_exp;
|
||||
// convert to integer
|
||||
required_exp = Math.round(required_exp);
|
||||
// now calc the # of songs needed
|
||||
|
@ -298,10 +341,9 @@ function calculate_rank()
|
|||
var hard_count = Math.round(required_exp / 46);
|
||||
var expert_count = Math.round(required_exp / 83);
|
||||
// calc LP and FP
|
||||
var LP = 25 + Math.floor(Math.min(desired_rank, 300) / 2) + Math.floor(Math.max(desired_rank - 300, 0) / 3)
|
||||
var LP = 25 + Math.floor(Math.min(desired_rank, 300) / 2) + Math.floor(Math.max(desired_rank - 300, 0) / 3);
|
||||
// calc friend slots
|
||||
var friend_slots = 10 + Math.floor(Math.min(desired_rank, 50) / 5) + Math.floor(Math.max(desired_rank - 50, 0) / 10)
|
||||
|
||||
var friend_slots = 10 + Math.floor(Math.min(desired_rank, 50) / 5) + Math.floor(Math.max(desired_rank - 50, 0) / 10);
|
||||
// display the results
|
||||
$("#rank-result-exp").text(required_exp);
|
||||
$("#rank-result-songs-easy").text(easy_count);
|
||||
|
@ -315,8 +357,7 @@ function calculate_rank()
|
|||
}
|
||||
}
|
||||
|
||||
function reset_rank()
|
||||
{
|
||||
function reset_rank() {
|
||||
$("#rank-calc-result-area").hide();
|
||||
$("#current_rank").val("");
|
||||
$("#current_exp").val("");
|
||||
|
@ -330,8 +371,7 @@ function reset_rank()
|
|||
$("#rank-results-fp").text("-");
|
||||
}
|
||||
|
||||
function handle_gem_mode_select()
|
||||
{
|
||||
function handle_gem_mode_select() {
|
||||
var mode = $(this).val();
|
||||
if (mode === "DATE") {
|
||||
$("#gem-date-area").show();
|
||||
|
@ -342,8 +382,7 @@ function handle_gem_mode_select()
|
|||
}
|
||||
}
|
||||
|
||||
function handle_card_mode_select()
|
||||
{
|
||||
function handle_card_mode_select() {
|
||||
var mode = $(this).val();
|
||||
if (mode === "LEVEL") {
|
||||
$("#card-level-area").show();
|
||||
|
@ -354,11 +393,9 @@ function handle_card_mode_select()
|
|||
}
|
||||
}
|
||||
|
||||
function is_muse_members_birthday(moment)
|
||||
{
|
||||
function is_muse_members_birthday(moment) {
|
||||
var the_month = month(moment);
|
||||
var the_day = day(moment);
|
||||
|
||||
var is_bday = false;
|
||||
var bday_name = "";
|
||||
if (the_month == 1 && the_day == 17) {
|
||||
|
@ -392,8 +429,7 @@ function is_muse_members_birthday(moment)
|
|||
return [ is_bday, bday_name ];
|
||||
}
|
||||
|
||||
function is_gem_day(moment)
|
||||
{
|
||||
function is_gem_day(moment) {
|
||||
var the_day = day(moment);
|
||||
// according the login bonus chart, gems are given out on days numbered 1,6,11,16,21,26,30
|
||||
if (the_day == 1 || the_day == 6 || the_day == 11 || the_day == 16 || the_day == 21 || the_day == 26 || the_day == 30) {
|
||||
|
@ -403,75 +439,69 @@ function is_gem_day(moment)
|
|||
}
|
||||
|
||||
// moment.js starts months/days/years at 0... weird...
|
||||
function month(moment)
|
||||
{
|
||||
function month(moment) {
|
||||
return moment.month() + 1;
|
||||
}
|
||||
|
||||
// moment.js uses date() not day()
|
||||
function day(moment)
|
||||
{
|
||||
function day(moment) {
|
||||
return moment.date();
|
||||
}
|
||||
|
||||
function year(moment)
|
||||
{
|
||||
function year(moment) {
|
||||
return moment.year();
|
||||
}
|
||||
|
||||
function hour(moment)
|
||||
{
|
||||
function hour(moment) {
|
||||
return moment.hour();
|
||||
}
|
||||
|
||||
function minute(moment)
|
||||
{
|
||||
function minute(moment) {
|
||||
return moment.minute();
|
||||
}
|
||||
|
||||
function second(moment)
|
||||
{
|
||||
function second(moment) {
|
||||
return moment.second();
|
||||
}
|
||||
|
||||
function is_same_day(m1, m2)
|
||||
{
|
||||
function is_same_day(m1, m2) {
|
||||
if (month(m1) == month(m2) && day(m1) == day(m2) && year(m1) == year(m2)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function handle_event(day_of_month, game_version, typical_tier)
|
||||
{
|
||||
function handle_event(day_of_month, game_version, typical_tier) {
|
||||
LOG(1, "start event type is " + current_type_of_event);
|
||||
|
||||
// format of returned tuple:
|
||||
// tuple[0] - was this an event day? (boolean, duh)
|
||||
// tuple[1] - name of event, or "" if none (string)
|
||||
// tuple[2] - amount of gems spent (int)
|
||||
// tuple[3] - amount of gems gained (int)
|
||||
var return_tuple = [];
|
||||
|
||||
return_tuple[0] = false;
|
||||
return_tuple[1] = "";
|
||||
return_tuple[2] = 0;
|
||||
return_tuple[3] = 0;
|
||||
|
||||
// ok, if it's not the 1st or 15th, then no event is going on
|
||||
if (day_of_month == 1 || day_of_month == 15) {
|
||||
return_tuple[0] = true;
|
||||
|
||||
// now we calculate!
|
||||
|
||||
// according to /u/eryncerise, current "typical" tiering gem requirements are:
|
||||
// Tier 1 = 10-15 gems, Tier 2 = 15-20 gems, no tier = (usually) no gems (assuming you play efficiently)
|
||||
switch (typical_tier) {
|
||||
case 1: return_tuple[2] = 20; break;
|
||||
case 2: return_tuple[2] = 15; break;
|
||||
case 3: return_tuple[2] = 0; break;
|
||||
}
|
||||
case 1:
|
||||
return_tuple[2] = 20;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
return_tuple[2] = 15;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
return_tuple[2] = 0;
|
||||
break;
|
||||
}
|
||||
// now handle different event types since they have different reward progressions
|
||||
// TODO: need to use different tier cutoff point values depending on EN or JP (which means I need to go on tomodachi and average both EN and JP data
|
||||
// for the past X events of each type. Fun for the whole family! :P)
|
||||
|
@ -501,6 +531,7 @@ function handle_event(day_of_month, game_version, typical_tier)
|
|||
return_tuple[3] = 6;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
LOG(1, "SM");
|
||||
// Score Match
|
||||
|
@ -511,7 +542,6 @@ function handle_event(day_of_month, game_version, typical_tier)
|
|||
// them correctly, a big assumption since I don't read Japanese :P )
|
||||
// completion rewards: gems at 500, 2000, 8000, 35000, 42500, 50000, 60000 (2), 70000 (2), 80000 (3)
|
||||
// event ranking rewards: tiers 1-2, no love gems for YOU! tier 3 gets 2 gems, tier 4 gets 2, tier 5 gets 4
|
||||
|
||||
if (typical_tier == 1) {
|
||||
// completion rewards:
|
||||
// quick check of the last 5 token events on Tomodachi gives me a ballpark 30k average for t1 cutoff
|
||||
|
@ -531,6 +561,7 @@ function handle_event(day_of_month, game_version, typical_tier)
|
|||
return_tuple[3] = 6;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
LOG(1, "MF");
|
||||
// Medley Festival
|
||||
|
@ -540,26 +571,22 @@ function handle_event(day_of_month, game_version, typical_tier)
|
|||
return_tuple[3] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
// lastly bump the event type
|
||||
current_type_of_event++;
|
||||
if ((game_version === "EN" && current_type_of_event > 2) || (game_version === "JP" && current_type_of_event > 3)) {
|
||||
if (game_version === "EN" && current_type_of_event > 2 || game_version === "JP" && current_type_of_event > 3) {
|
||||
current_type_of_event = 1;
|
||||
}
|
||||
}
|
||||
|
||||
LOG(1, "end event type is " + current_type_of_event);
|
||||
LOG(1, return_tuple);
|
||||
// now return what we got
|
||||
return return_tuple;
|
||||
}
|
||||
|
||||
function calculate_gems()
|
||||
{
|
||||
function calculate_gems() {
|
||||
// reset current event indicator (start out with a token event)
|
||||
current_type_of_event = 1;
|
||||
|
||||
var verbose = $("#gems_verbose").is(':checked');
|
||||
var verbose = $("#gems_verbose").is(":checked");
|
||||
var current_gems_text = $("#current_gems").val();
|
||||
var current_gems = 0;
|
||||
if (current_gems_text != "") {
|
||||
|
@ -569,13 +596,12 @@ function calculate_gems()
|
|||
alert("Error: invalid number of current gems. Please check your input and try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
var tier = parseInt($("#gems_tier_level").val());
|
||||
var game_version = $("#gem_game_version").val();
|
||||
var calc_daily_quest_gems = false;
|
||||
var calc_event_gems = $("#gems_include_events").is(':checked');
|
||||
var calc_event_gems = $("#gems_include_events").is(":checked");
|
||||
if (game_version === "JP") {
|
||||
calc_daily_quest_gems = $("#gems_include_daily_gems").is(':checked');
|
||||
calc_daily_quest_gems = $("#gems_include_daily_gems").is(":checked");
|
||||
}
|
||||
var mode = $("input[name=gem-mode]:checked").val();
|
||||
if (mode === "DATE") {
|
||||
|
@ -589,27 +615,24 @@ function calculate_gems()
|
|||
alert("Error: invalid date. Please check and try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
var now = moment(new Date());
|
||||
if (target_date_object.isBefore(now) || is_same_day(now, target_date_object)) {
|
||||
window.alert("Error: the date must be in the future.");
|
||||
return;
|
||||
}
|
||||
|
||||
// ready to rock
|
||||
var resultsString = sprintf("Today is %02d/%02d/%04d and you currently have %d love gems.<br />(Assuming you collected any gems you got today and already counted those.)", month(now), day(now), year(now), current_gems);
|
||||
var verboseText = "";
|
||||
if (calc_daily_quest_gems) {
|
||||
verboseText = "(Including daily 'quest' gems in the calculation. There will not be a separate daily entry for each one.)<br /><br />";
|
||||
}
|
||||
var gems = current_gems
|
||||
now = now.add(1, 'days')
|
||||
var gems = current_gems;
|
||||
now = now.add(1, "days");
|
||||
while (now.isBefore(target_date_object) || is_same_day(now, target_date_object)) {
|
||||
// is it a login bonus?
|
||||
if (is_gem_day(now)) {
|
||||
gems += 1;
|
||||
}
|
||||
|
||||
// is it a birthday?
|
||||
var birthday_tuple = is_muse_members_birthday(now);
|
||||
var is_bday = birthday_tuple[0];
|
||||
|
@ -617,12 +640,10 @@ function calculate_gems()
|
|||
if (is_bday) {
|
||||
gems += 5;
|
||||
}
|
||||
|
||||
// account for daily login quest gem
|
||||
if (calc_daily_quest_gems) {
|
||||
gems++;
|
||||
}
|
||||
|
||||
// account for event
|
||||
// format of returned tuple:
|
||||
// tuple[0] - was this an event day? (boolean, duh)
|
||||
|
@ -654,20 +675,16 @@ function calculate_gems()
|
|||
gems += won_gems;
|
||||
}
|
||||
}
|
||||
|
||||
// record verbose output if desired
|
||||
if (verbose) {
|
||||
if (is_gem_day(now) || is_bday || is_event) {
|
||||
verboseText += sprintf("<b>%02d/%02d/%04d</b><br />", month(now), day(now), year(now));
|
||||
|
||||
if (is_gem_day(now)) {
|
||||
verboseText += "Free gem as login bonus!<br />";
|
||||
}
|
||||
|
||||
if (is_bday) {
|
||||
verboseText += sprintf("It's %s's birthday! You get 5 gems!<br />", name);
|
||||
}
|
||||
|
||||
// account for events
|
||||
if (is_event) {
|
||||
verboseText += sprintf("A " + event_name + " just ended!<br />", month(now), day(now), year(now), event_name);
|
||||
|
@ -681,14 +698,12 @@ function calculate_gems()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add a newline
|
||||
verboseText += sprintf("That brings you to %d gems!<br /><br />", gems);
|
||||
}
|
||||
}
|
||||
now = now.add(1, 'days')
|
||||
now = now.add(1, "days");
|
||||
}
|
||||
|
||||
resultsString = resultsString + sprintf("<br />You will have %d love gems on %02d/%02d/%04d. Good things come to those who wait!", gems, month(target_date_object), day(target_date_object), year(target_date_object));
|
||||
$("#gem-result-summary").html(resultsString);
|
||||
if (verbose) {
|
||||
|
@ -704,29 +719,23 @@ function calculate_gems()
|
|||
window.alert("Error: you have entered an invalid (non-numeric) value. Please check your input and try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
var now = moment(new Date());
|
||||
// arbitrary limit to make sure we don't go wander off into infinity
|
||||
var cutoff = moment(now).add(5, 'years');
|
||||
var cutoff = moment(now).add(5, "years");
|
||||
var resultsString = sprintf("Today is %02d/%02d/%04d and you currently have %d love gems.<br />(Assuming you collected any gems you got today and already counted those.)", month(now), day(now), year(now), current_gems);
|
||||
var verboseText = "";
|
||||
if (calc_daily_quest_gems) {
|
||||
verboseText = "(Including daily 'quest' gems in the calculation. There will not be a separate daily entry for each one.)<br /><br />";
|
||||
}
|
||||
|
||||
// make sure we don't go off into infinity (i.e. user gives input that is impossible to calculate)
|
||||
var abort = false;
|
||||
|
||||
var gems = current_gems
|
||||
|
||||
var gems = current_gems;
|
||||
while (gems < target_gems && !abort) {
|
||||
now = now.add(1, 'days')
|
||||
|
||||
now = now.add(1, "days");
|
||||
// is it a login bonus?
|
||||
if (is_gem_day(now)) {
|
||||
gems += 1;
|
||||
}
|
||||
|
||||
// is it a birthday?
|
||||
var birthday_tuple = is_muse_members_birthday(now);
|
||||
var is_bday = birthday_tuple[0];
|
||||
|
@ -734,12 +743,10 @@ function calculate_gems()
|
|||
if (is_bday) {
|
||||
gems += 5;
|
||||
}
|
||||
|
||||
// account for daily login quest gem
|
||||
if (calc_daily_quest_gems) {
|
||||
gems++;
|
||||
}
|
||||
|
||||
// account for event
|
||||
// format of returned tuple:
|
||||
// tuple[0] - was this an event day? (boolean, duh)
|
||||
|
@ -771,20 +778,16 @@ function calculate_gems()
|
|||
gems += won_gems;
|
||||
}
|
||||
}
|
||||
|
||||
// record verbose output if desired
|
||||
if (verbose) {
|
||||
if (is_gem_day(now) || is_bday || is_event) {
|
||||
verboseText += sprintf("<b>%02d/%02d/%04d</b><br />", month(now), day(now), year(now));
|
||||
|
||||
if (is_gem_day(now)) {
|
||||
verboseText += "Free gem as login bonus!<br />";
|
||||
}
|
||||
|
||||
if (is_bday) {
|
||||
verboseText += sprintf("It's %s's birthday! You get 5 gems!<br />", name);
|
||||
}
|
||||
|
||||
// account for events
|
||||
if (is_event) {
|
||||
verboseText += sprintf("A " + event_name + " just ended!<br />", month(now), day(now), year(now), event_name);
|
||||
|
@ -798,19 +801,16 @@ function calculate_gems()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add a newline
|
||||
verboseText += sprintf("That brings you to %d gems!<br /><br />", gems);
|
||||
}
|
||||
}
|
||||
|
||||
// do we abort?
|
||||
if (now.isAfter(cutoff)) {
|
||||
verboseText += sprintf("(Cannot proceed, this appears to be an unattainable amount of gems given your constraints.)");
|
||||
abort = true;
|
||||
}
|
||||
}
|
||||
|
||||
resultsString = resultsString + sprintf("<br />You will have %d love gems on %02d/%02d/%04d. Good things come to those who wait!", gems, month(now), day(now), year(now));
|
||||
if (abort) {
|
||||
resultsString += "<br />(Note: the calculation was stopped because it appears that you will be unable to attain the desired amount of gems given your constraints.)";
|
||||
|
@ -824,27 +824,24 @@ function calculate_gems()
|
|||
$("#gem-result-textarea").hide();
|
||||
}
|
||||
}
|
||||
|
||||
$("#gem-calc-result-area").show();
|
||||
}
|
||||
|
||||
function reset_gems()
|
||||
{
|
||||
function reset_gems() {
|
||||
$("#gem-calc-result-area").hide();
|
||||
$("#gem-result-summary").text("-");
|
||||
$("#gem-desired-gems-area").hide();
|
||||
$("#gem-date-area").hide();
|
||||
$("#current_gems").val(0);
|
||||
var $radios = $('input:radio[name=gem-mode]');
|
||||
$radios.filter('[value=DATE]').prop('checked', true);
|
||||
var $radios = $("input:radio[name=gem-mode]");
|
||||
$radios.filter("[value=DATE]").prop("checked", true);
|
||||
$("#gem_desired_date").val("");
|
||||
$("#gem_desired_gems").val("");
|
||||
$('#gems_verbose').prop('checked', false);
|
||||
$("#gems_verbose").prop("checked", false);
|
||||
$("#gem-date-area").show();
|
||||
}
|
||||
|
||||
function get_level_cap(rarity)
|
||||
{
|
||||
function get_level_cap(rarity) {
|
||||
if (rarity === "N") {
|
||||
return 40;
|
||||
} else if (rarity === "R") {
|
||||
|
@ -858,32 +855,29 @@ function get_level_cap(rarity)
|
|||
return -1;
|
||||
}
|
||||
|
||||
function is_valid_level(rarity, level)
|
||||
{
|
||||
function is_valid_level(rarity, level) {
|
||||
var return_value = false;
|
||||
if (level >= 1) {
|
||||
return_value = (level <= get_level_cap(rarity));
|
||||
return_value = level <= get_level_cap(rarity);
|
||||
}
|
||||
return return_value;
|
||||
}
|
||||
|
||||
function is_valid_exp(rarity, level, exp)
|
||||
{
|
||||
function is_valid_exp(rarity, level, exp) {
|
||||
var return_value = false;
|
||||
if (rarity === "N" && is_valid_level(rarity, level)) {
|
||||
return_value = (exp >= 0 && exp < exp_table_n[level+1]);
|
||||
return_value = exp >= 0 && exp < exp_table_n[level + 1];
|
||||
} else if (rarity === "R" && is_valid_level(rarity, level)) {
|
||||
return_value = (exp >= 0 && exp < exp_table_r[level+1]);
|
||||
return_value = exp >= 0 && exp < exp_table_r[level + 1];
|
||||
} else if (rarity === "SR" && is_valid_level(rarity, level + 1)) {
|
||||
return_value = (exp >= 0 && exp < exp_table_sr[level+1]);
|
||||
return_value = exp >= 0 && exp < exp_table_sr[level + 1];
|
||||
} else if (rarity === "UR" && is_valid_level(rarity, level)) {
|
||||
return_value = (exp >= 0 && exp < exp_table_ur[level+1]);
|
||||
return_value = exp >= 0 && exp < exp_table_ur[level + 1];
|
||||
}
|
||||
return return_value
|
||||
return return_value;
|
||||
}
|
||||
|
||||
function calculate_card()
|
||||
{
|
||||
function calculate_card() {
|
||||
var current_level = parseInt($("#card_current_level").val());
|
||||
var current_exp_input = $("#card_current_exp").val();
|
||||
var current_exp = 0;
|
||||
|
@ -891,7 +885,6 @@ function calculate_card()
|
|||
current_exp = parseInt(current_exp_input);
|
||||
}
|
||||
var rarity = $("#card_rarity").val();
|
||||
|
||||
if (isNaN(current_level) || !is_valid_level(rarity, current_level)) {
|
||||
alert("Error: invalid level. Please check your input and try again.");
|
||||
return;
|
||||
|
@ -900,7 +893,6 @@ function calculate_card()
|
|||
alert("Error: invalid EXP. Please check your input and try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
var mode = $("input[name=card-mode]:checked").val();
|
||||
if (mode === "LEVEL") {
|
||||
var target_level = parseInt($("#card_desired_level").val());
|
||||
|
@ -908,7 +900,6 @@ function calculate_card()
|
|||
window.alert("Error: the desired level is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
// ready to rock
|
||||
var required_exp = 0;
|
||||
var resultsString = "";
|
||||
|
@ -923,16 +914,12 @@ function calculate_card()
|
|||
required_exp += exp_table_ur[level];
|
||||
}
|
||||
}
|
||||
|
||||
// subtract what we have
|
||||
required_exp -= current_exp;
|
||||
|
||||
var resultString = sprintf("To get a %s card from level %d (with %d EXP) to %d requires %d EXP.<br />", rarity, current_level, current_exp, target_level, required_exp);
|
||||
|
||||
// calculate equiv N cards
|
||||
var number_of_n_cards = Math.round(required_exp / 100) + 1;
|
||||
resultString += sprintf("(the equivalent of about %d level-1 N cards fed to it)", number_of_n_cards);
|
||||
|
||||
// output the result
|
||||
$("#card-result-summary").html(resultString);
|
||||
} else if (mode === "EXP") {
|
||||
|
@ -941,10 +928,8 @@ function calculate_card()
|
|||
window.alert("Error: you have entered an invalid (non-numeric) value. Please check your input and try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
// ready to rock
|
||||
var resultsString = "FOO";
|
||||
|
||||
// XXX do some calculating
|
||||
var exp_tally = current_exp;
|
||||
var level = 0;
|
||||
|
@ -962,34 +947,29 @@ function calculate_card()
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
level--;
|
||||
var resultString = sprintf("If you feed a %s card at level %d (with %d EXP) a total of %d EXP,<br />it will end up at level %d.%s", rarity, current_level, current_exp, exp_to_feed, level, (level == get_level_cap(rarity) ? " (MAX LEVEL!)" : ""));
|
||||
|
||||
var resultString = sprintf("If you feed a %s card at level %d (with %d EXP) a total of %d EXP,<br />it will end up at level %d.%s", rarity, current_level, current_exp, exp_to_feed, level, level == get_level_cap(rarity) ? " (MAX LEVEL!)" : "");
|
||||
// output the result
|
||||
$("#card-result-summary").html(resultString);
|
||||
}
|
||||
|
||||
$("#card-calc-result-area").show();
|
||||
}
|
||||
|
||||
function reset_card()
|
||||
{
|
||||
function reset_card() {
|
||||
$("#card-calc-result-area").hide();
|
||||
$("#card-result-summary").text("-");
|
||||
$("#card-level-area").hide();
|
||||
$("#card-exp-area").hide();
|
||||
$("#card_current_level").val("");
|
||||
$("#card_current_exp").val("");
|
||||
var $radios = $('input:radio[name=card-mode]');
|
||||
$radios.filter('[value=LEVEL]').prop('checked', true);
|
||||
var $radios = $("input:radio[name=card-mode]");
|
||||
$radios.filter("[value=LEVEL]").prop("checked", true);
|
||||
$("#card_desired_level").val("");
|
||||
$("#card_feed_exp").val("");
|
||||
$("#card-level-area").show();
|
||||
}
|
||||
|
||||
function start_stop_timer()
|
||||
{
|
||||
function start_stop_timer() {
|
||||
if (window.timerInterval != 0) {
|
||||
// stop it
|
||||
clearInterval(window.timerInterval);
|
||||
|
@ -999,7 +979,7 @@ function start_stop_timer()
|
|||
// 2013-02-08 09:30 # An hour and minute time part
|
||||
var dateString = $("#event_end_date").val() + " " + $("#event_end_time").val() + "Z";
|
||||
window.the_end = moment(dateString, "MM/DD/YYYY HH:mmZ");
|
||||
window.timerInterval = setInterval(run_timer, 1000);
|
||||
window.timerInterval = setInterval(run_timer, 1e3);
|
||||
$("#button-start-stop-timer span").text("Stop Timer");
|
||||
// run the first update ourselves, so that it doesn't stay blank until the timer kicks in
|
||||
window.immediately_refresh_tier_cutoffs = true;
|
||||
|
@ -1007,57 +987,52 @@ function start_stop_timer()
|
|||
}
|
||||
}
|
||||
|
||||
function run_timer()
|
||||
{
|
||||
function run_timer() {
|
||||
var now = moment(new Date());
|
||||
var end = window.the_end;
|
||||
var string = "<h1><b>CURRENT TIME</b></h1><h2>" + now.utc().format("MM/DD/YYYY HH:mm:ss") + " UTC</h2><h1>EVENT ENDS:</h1><h2>" + end.utc().format("MM/DD/YYYY HH:mm:ss") + " UTC</h2>";
|
||||
if (now.isBefore(end)) {
|
||||
var ms = end.diff(now.utc());
|
||||
var t = moment.duration(ms).asMilliseconds();
|
||||
var seconds = Math.floor( (t/1000) % 60 );
|
||||
var minutes = Math.floor( (t/1000/60) % 60 );
|
||||
var hours = Math.floor( (t/(1000*60*60)) % 24 );
|
||||
var days = Math.floor( t/(1000*60*60*24) );
|
||||
var total_hours = (days * 24) + hours;
|
||||
|
||||
var seconds = Math.floor(t / 1e3 % 60);
|
||||
var minutes = Math.floor(t / 1e3 / 60 % 60);
|
||||
var hours = Math.floor(t / (1e3 * 60 * 60) % 24);
|
||||
var days = Math.floor(t / (1e3 * 60 * 60 * 24));
|
||||
var total_hours = days * 24 + hours;
|
||||
var time_till = "<h2>";
|
||||
|
||||
if (total_hours >= 24) {
|
||||
time_till += sprintf("%d hours<br />", total_hours);
|
||||
}
|
||||
time_till += "(";
|
||||
if (days >= 1) {
|
||||
time_till += sprintf("%d day%s ", days, (days > 1 ? "s" : ""));
|
||||
time_till += sprintf("%d day%s ", days, days > 1 ? "s" : "");
|
||||
}
|
||||
if (hours >= 1) {
|
||||
time_till += sprintf("%d hour%s ", hours, (hours > 1 ? "s" : ""));
|
||||
time_till += sprintf("%d hour%s ", hours, hours > 1 ? "s" : "");
|
||||
}
|
||||
time_till += sprintf("%d minute%s %d second%s)</h2>", minutes, (minutes > 1? "s" : ""), seconds, (seconds > 1 ? "s" : ""));
|
||||
time_till += sprintf("%d minute%s %d second%s)</h2>", minutes, minutes > 1 ? "s" : "", seconds, seconds > 1 ? "s" : "");
|
||||
// d.asDays() + " days " + d.asHours() + moment.utc(ms).format(":mm:ss");
|
||||
|
||||
// var time_till = moment.utc(end.diff(now)).format("HH:mm:ss");//.format("HH:mm:ss");
|
||||
string += "<h1>TIME REMAINING:</h1><h2>" + time_till + "</H2>";
|
||||
} else {
|
||||
string += "<h1>EVENT IS OVER</h1>";
|
||||
}
|
||||
$("#timer_output_area").html(string);
|
||||
|
||||
// @sifen_trackbot updates come out at 36 minutes past the hour, fetch them at 37 minutes to allow for some slop
|
||||
if ((minute(now) == 37 && second(now) == 0) || window.immediately_refresh_tier_cutoffs) {
|
||||
if (minute(now) == 37 && second(now) == 0 || window.immediately_refresh_tier_cutoffs) {
|
||||
$("#tier_info_output_area").html("<h2>Updating tier cutoff data, please wait...</h2>");
|
||||
// dumb ass way to fetch and display @sifen_trackbot tier cutoff tweets hourly
|
||||
// using this twitter fetcher: http://jasonmayes.com/projects/twitterApi/#sthash.budgYosd.dpbs
|
||||
twitterFetcher.fetch({
|
||||
"id": '654587648904794112',
|
||||
"domId": '',
|
||||
"maxTweets": 1,
|
||||
"enableLinks": false,
|
||||
"showUser": true,
|
||||
"showTime": true,
|
||||
"dateFunction": '',
|
||||
"showRetweet": false,
|
||||
"customCallback": function(tweets) {
|
||||
id: "654587648904794112",
|
||||
domId: "",
|
||||
maxTweets: 1,
|
||||
enableLinks: false,
|
||||
showUser: true,
|
||||
showTime: true,
|
||||
dateFunction: "",
|
||||
showRetweet: false,
|
||||
customCallback: function(tweets) {
|
||||
if (tweets.length > 0) {
|
||||
// we only care about the first one
|
||||
var tweet = tweets[0];
|
||||
|
@ -1077,14 +1052,13 @@ function run_timer()
|
|||
$("#tier_info_output_area").html("<h2>Latest Tier Cutoffs as of UTC " + updateTime + ":<br />" + tier1 + "<br />" + tier2 + "</h2>");
|
||||
}
|
||||
},
|
||||
"showInteraction": false
|
||||
showInteraction: false
|
||||
});
|
||||
window.immediately_refresh_tier_cutoffs = false;
|
||||
}
|
||||
}
|
||||
|
||||
function clear_timer()
|
||||
{
|
||||
function clear_timer() {
|
||||
$("#timer_output_area").html("<h1>Timer Not Running</h1>");
|
||||
$("#tier_info_output_area").html("");
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<link rel="apple-touch-icon" href="apple-touch-icon.png" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<!-- width=320 -->
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.0.0">
|
||||
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"><!-- width=320 -->
|
||||
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0, minimal-ui">
|
||||
<meta charset="utf-8">
|
||||
<title>SIF Tools</title>
|
||||
|
@ -11,175 +11,226 @@
|
|||
<link href="css/external/jquery.timepicker.css" rel="stylesheet">
|
||||
<link href="css/external/jquery.keypad.css" rel="stylesheet">
|
||||
<link href="css/sif_tools.css" rel="stylesheet">
|
||||
<script src="js/external/jquery.js"></script>
|
||||
<script src="js/external/jquery.cookie.js"></script>
|
||||
<script src="js/external/jquery.plugin.js"></script>
|
||||
<script src="js/external/jquery.keypad.js"></script>
|
||||
<script src="js/external/jquery-ui.js"></script>
|
||||
<script src="js/external/jquery.timepicker.js"></script>
|
||||
<script src="js/external/jquery-ui-sliderAccess.js"></script>
|
||||
<script src="js/external/moment.js"></script>
|
||||
<script src="js/external/sprintf.js"></script>
|
||||
<script src="js/external/twitterFetcher.js"></script>
|
||||
<script src="js/sif_tools.js"></script>
|
||||
<script src="js/external/jquery.js">
|
||||
</script>
|
||||
<script src="js/external/jquery.cookie.js">
|
||||
</script>
|
||||
<script src="js/external/jquery.plugin.js">
|
||||
</script>
|
||||
<script src="js/external/jquery.keypad.js">
|
||||
</script>
|
||||
<script src="js/external/jquery-ui.js">
|
||||
</script>
|
||||
<script src="js/external/jquery.timepicker.js">
|
||||
</script>
|
||||
<script src="js/external/jquery-ui-sliderAccess.js">
|
||||
</script>
|
||||
<script src="js/external/moment.js">
|
||||
</script>
|
||||
<script src="js/external/sprintf.js">
|
||||
</script>
|
||||
<script src="js/external/twitterFetcher.js">
|
||||
</script>
|
||||
<script src="js/sif_tools.js">
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="header" align="center">
|
||||
<h1>SIF Tools</h1>
|
||||
</div>
|
||||
|
||||
<div id="tabs">
|
||||
<ul>
|
||||
<li><a href="#tab-rank">Rank</a></li>
|
||||
<li><a href="#tab-love-gem">Gems</a></li>
|
||||
<li><a href="#tab-card-level">Cards</a></li>
|
||||
<li><a href="#tab-event">Events</a></li>
|
||||
<li>
|
||||
<a href="#tab-rank">Rank</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#tab-love-gem">Gems</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#tab-card-level">Cards</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#tab-event">Events</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div id="tab-rank">
|
||||
<div id="the-form" align="center">
|
||||
Current Rank: <input type="text" readonly="true" size="5" id="current_rank" name="current_rank" placeholder="rank" value="" />
|
||||
<br />
|
||||
Current EXP: <input type="text" readonly="true" size="5" id="current_exp" name="current_exp" placeholder="optional" value="" />
|
||||
<br />
|
||||
Desired Rank: <input type="text" readonly="true" size="5" id="desired_rank" name="desired_rank" placeholder="rank" value="" />
|
||||
<br />
|
||||
Game Version:
|
||||
<select id="game_version" name="game_version">
|
||||
<option value="EN">EN</option>
|
||||
<option value="JP">JP</option>
|
||||
</select>
|
||||
<br /><br />
|
||||
<div id="button-calculate-rank">Calculate</div>
|
||||
<br /><br />
|
||||
Current Rank: <input type="text" readonly="true" size="5" id="current_rank" name="current_rank" placeholder="rank" value=""><br>
|
||||
Current EXP: <input type="text" readonly="true" size="5" id="current_exp" name="current_exp" placeholder="optional" value=""><br>
|
||||
Desired Rank: <input type="text" readonly="true" size="5" id="desired_rank" name="desired_rank" placeholder="rank" value=""><br>
|
||||
Game Version: <select id="game_version" name="game_version">
|
||||
<option value="EN">
|
||||
EN
|
||||
</option>
|
||||
<option value="JP">
|
||||
JP
|
||||
</option>
|
||||
</select><br>
|
||||
<br>
|
||||
<div id="button-calculate-rank">
|
||||
Calculate
|
||||
</div><br>
|
||||
<br>
|
||||
<div id="rank-calc-result-area">
|
||||
<h1>Results</h1>
|
||||
EXP required: <span id="rank-result-exp">-</span><br /><br />
|
||||
You will need to play the following number of songs in order to get this amount of EXP:<br /><br />
|
||||
EASY: <span id="rank-result-songs-easy">-</span><br />
|
||||
NORMAL: <span id="rank-result-songs-normal">-</span><br />
|
||||
HARD: <span id="rank-result-songs-hard">-</span><br />
|
||||
EXPERT: <span id="rank-result-songs-expert">-</span><br /><br/>
|
||||
At this rank you will have <span id="rank-results-lp">-</span> LP and <span id="rank-results-fp">-</span> friend slots.<br /><br />
|
||||
<div id="button-reset-rank">Reset</div>
|
||||
<h1>Results</h1>EXP required: <span id="rank-result-exp">-</span><br>
|
||||
<br>
|
||||
You will need to play the following number of songs in order to get this amount of EXP:<br>
|
||||
<br>
|
||||
EASY: <span id="rank-result-songs-easy">-</span><br>
|
||||
NORMAL: <span id="rank-result-songs-normal">-</span><br>
|
||||
HARD: <span id="rank-result-songs-hard">-</span><br>
|
||||
EXPERT: <span id="rank-result-songs-expert">-</span><br>
|
||||
<br>
|
||||
At this rank you will have <span id="rank-results-lp">-</span> LP and <span id="rank-results-fp">-</span> friend slots.<br>
|
||||
<br>
|
||||
<div id="button-reset-rank">
|
||||
Reset
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tab-love-gem">
|
||||
<div id="love-gem-form" align="center">
|
||||
Current Gems: <input type="text" readonly="true" size="5" id="current_gems" name="current_gems" placeholder="optional" value="" />
|
||||
<br />
|
||||
Game Version:
|
||||
<select id="gem_game_version" name="gem_game_version">
|
||||
<option value="EN">EN</option>
|
||||
<option value="JP">JP</option>
|
||||
</select>
|
||||
<br /><br />
|
||||
<span id="gem_jp_daily_gems"><input type="checkbox" name="gems_include_daily_gems" id="gems_include_daily_gems" value="YES" />Include daily "quest" gems?
|
||||
(<a href="#" id="gem_quest_readme">What is this?</a>)<br />
|
||||
Current Gems: <input type="text" readonly="true" size="5" id="current_gems" name="current_gems" placeholder="optional" value=""><br>
|
||||
Game Version: <select id="gem_game_version" name="gem_game_version">
|
||||
<option value="EN">
|
||||
EN
|
||||
</option>
|
||||
<option value="JP">
|
||||
JP
|
||||
</option>
|
||||
</select><br>
|
||||
<br>
|
||||
<span id="gem_jp_daily_gems"><input type="checkbox" name="gems_include_daily_gems" id="gems_include_daily_gems" value="YES">Include daily "quest" gems?
|
||||
(<a href="#" id="gem_quest_readme">What is this?</a>)<br></span>
|
||||
<div id="gem_quest_readme_dialog" title="About JP Daily 'Quest' Gems" style="display: none;">
|
||||
<p>On JP, you can now obtain a gem every day by completing the following steps, in the following order:</p>
|
||||
<span id="gem_jp_daily_gems"></span>
|
||||
<p><span id="gem_jp_daily_gems">On JP, you can now obtain a gem every day by completing the following steps, in the following order:</span></p>
|
||||
<ol>
|
||||
<li>Scout three Normal students. (The daily free scout counts.)</li>
|
||||
<li>Clear five live shows (any difficulty.)</li>
|
||||
<li>Practice ("feed") 5 cards of any kind.</li>
|
||||
<li>Play a live show (any difficulty) and get a Full Combo.</li>
|
||||
<li><span id="gem_jp_daily_gems">Scout three Normal students. (The daily free scout counts.)</span></li>
|
||||
<li><span id="gem_jp_daily_gems">Clear five live shows (any difficulty.)</span></li>
|
||||
<li><span id="gem_jp_daily_gems">Practice ("feed") 5 cards of any kind.</span></li>
|
||||
<li><span id="gem_jp_daily_gems">Play a live show (any difficulty) and get a Full Combo.</span></li>
|
||||
</ol>
|
||||
</div>
|
||||
</span>
|
||||
<input type="checkbox" name="gems_include_events" id="gems_include_events" value="YES" />Include gems from events? (<a href="#" id="gem_event_readme">Read this first</A>)<br />
|
||||
</div><input type="checkbox" name="gems_include_events" id="gems_include_events" value="YES">Include gems from events? (<a href="#" id=
|
||||
"gem_event_readme">Read this first</a>)<br>
|
||||
<div id="gem-event-options-area" align="center">
|
||||
<div id="gem_event_readme_dialog" title="About the Event Gem Calculator" style="display: none;">
|
||||
<p>Due to the variable nature of events, calculation of gems gotten through events is at best an approximation. To make the calculations simpler, it assumes that each month has 2 events, ending on the 1st and the 15th, and events alternate between token events and score matches (and medley festivals if on JP.) Also, if you are tiering, it assumes that you will spend some gems to tier, and will use an estimate based on your average tier, but this will only be an estimate.)</p>
|
||||
</div>
|
||||
Average tier:
|
||||
<select id="gems_tier_level" name="gems_tier_level">
|
||||
<option value="1">Tier 1</option>
|
||||
<option value="2">Tier 2</option>
|
||||
<option value="0">Event SR only</option>
|
||||
<p>Due to the variable nature of events, calculation of gems gotten through events is at best an approximation. To make the calculations simpler,
|
||||
it assumes that each month has 2 events, ending on the 1st and the 15th, and events alternate between token events and score matches (and medley
|
||||
festivals if on JP.) Also, if you are tiering, it assumes that you will spend some gems to tier, and will use an estimate based on your average
|
||||
tier, but this will only be an estimate.)</p>
|
||||
</div>Average tier: <select id="gems_tier_level" name="gems_tier_level">
|
||||
<option value="1">
|
||||
Tier 1
|
||||
</option>
|
||||
<option value="2">
|
||||
Tier 2
|
||||
</option>
|
||||
<option value="0">
|
||||
Event SR only
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<br />
|
||||
Mode:<br />
|
||||
<input type="radio" name="gem-mode" id="gem-mode" value="DATE" checked />Number of gems you'll have on a date?<br />
|
||||
<input type="radio" name="gem-mode" id="gem-mode" value="GEMS" />Date you will have this many gems?<br /><br />
|
||||
</div><br>
|
||||
Mode:<br>
|
||||
<input type="radio" name="gem-mode" id="gem-mode" value="DATE" checked>Number of gems you'll have on a date?<br>
|
||||
<input type="radio" name="gem-mode" id="gem-mode" value="GEMS">Date you will have this many gems?<br>
|
||||
<br>
|
||||
<div id="gem-date-area">
|
||||
Date: <input type="text" size="10" id="gem_desired_date" name="gem_desired_date" readonly="true" placeholder="MM/DD/YYYY" value="" />
|
||||
Date: <input type="text" size="10" id="gem_desired_date" name="gem_desired_date" readonly="true" placeholder="MM/DD/YYYY" value="">
|
||||
</div>
|
||||
<div id="gem-desired-gems-area">
|
||||
Desired gems: <input type="text" readonly="true" size="5" id="gem_desired_gems" name="gem_desired_gems" placeholder="gems" value="" />
|
||||
</div>
|
||||
<br /><br />
|
||||
<input type="checkbox" name="gems_verbose" id="gems_verbose" value="YES" />Verbose Mode<br />
|
||||
<br /><br />
|
||||
<div id="button-calculate-gems">Calculate</div>
|
||||
<br /><br />
|
||||
Desired gems: <input type="text" readonly="true" size="5" id="gem_desired_gems" name="gem_desired_gems" placeholder="gems" value="">
|
||||
</div><br>
|
||||
<br>
|
||||
<input type="checkbox" name="gems_verbose" id="gems_verbose" value="YES">Verbose Mode<br>
|
||||
<br>
|
||||
<br>
|
||||
<div id="button-calculate-gems">
|
||||
Calculate
|
||||
</div><br>
|
||||
<br>
|
||||
<div id="gem-calc-result-area">
|
||||
<h1>Results</h1>
|
||||
<span id="gem-result-summary">-</span><br /><br />
|
||||
<h1>Results</h1><span id="gem-result-summary">-</span><br>
|
||||
<br>
|
||||
<div id="gem-result-verbose-area">
|
||||
<div id="gem-result-textarea">-</div>
|
||||
<div id="gem-result-textarea">
|
||||
-
|
||||
</div>
|
||||
</div>
|
||||
<div id="button-reset-gems">
|
||||
Reset
|
||||
</div>
|
||||
<div id="button-reset-gems">Reset</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="tab-card-level">
|
||||
<div id="love-gem-form" align="center">
|
||||
Card Rarity:
|
||||
<select id="card_rarity" name="card_rarity">
|
||||
<option value="N">N</option>
|
||||
<option value="R">R</option>
|
||||
<option value="SR">SR</option>
|
||||
<option value="UR">UR</option>
|
||||
</select>
|
||||
<br />
|
||||
Current Level: <input type="text" readonly="true" size="5" id="card_current_level" name="card_current_level" placeholder="level" value="" />
|
||||
<br />
|
||||
Current EXP: <input type="text" readonly="true" size="5" id="card_current_exp" name="card_current_exp" placeholder="optional" value="" />
|
||||
<br /><br />
|
||||
Mode:<br />
|
||||
<input type="radio" name="card-mode" id="card-mode" value="LEVEL" checked />EXP needed to get card to a level?<br />
|
||||
<input type="radio" name="card-mode" id="card-mode" value="EXP" />Final level after feeding an amount of EXP?<br /><br />
|
||||
Card Rarity: <select id="card_rarity" name="card_rarity">
|
||||
<option value="N">
|
||||
N
|
||||
</option>
|
||||
<option value="R">
|
||||
R
|
||||
</option>
|
||||
<option value="SR">
|
||||
SR
|
||||
</option>
|
||||
<option value="UR">
|
||||
UR
|
||||
</option>
|
||||
</select><br>
|
||||
Current Level: <input type="text" readonly="true" size="5" id="card_current_level" name="card_current_level" placeholder="level"
|
||||
value=""><br>
|
||||
Current EXP: <input type="text" readonly="true" size="5" id="card_current_exp" name="card_current_exp" placeholder="optional" value=
|
||||
""><br>
|
||||
<br>
|
||||
Mode:<br>
|
||||
<input type="radio" name="card-mode" id="card-mode" value="LEVEL" checked>EXP needed to get card to a level?<br>
|
||||
<input type="radio" name="card-mode" id="card-mode" value="EXP">Final level after feeding an amount of EXP?<br>
|
||||
<br>
|
||||
<div id="card-level-area">
|
||||
Desired level: <input type="text" readonly="true" size="5" id="card_desired_level" name="card_desired_level" placeholder="level" value="" />
|
||||
Desired level: <input type="text" readonly="true" size="5" id="card_desired_level" name="card_desired_level" placeholder="level"
|
||||
value="">
|
||||
</div>
|
||||
<div id="card-exp-area">
|
||||
EXP: <input type="text" readonly="true" size="5" id="card_feed_exp" name="card_feed_exp" placeholder="exp" value="" />
|
||||
</div>
|
||||
<br /><br />
|
||||
<div id="button-calculate-card">Calculate</div>
|
||||
<br /><br />
|
||||
EXP: <input type="text" readonly="true" size="5" id="card_feed_exp" name="card_feed_exp" placeholder="exp" value="">
|
||||
</div><br>
|
||||
<br>
|
||||
<div id="button-calculate-card">
|
||||
Calculate
|
||||
</div><br>
|
||||
<br>
|
||||
<div id="card-calc-result-area">
|
||||
<h1>Results</h1>
|
||||
<span id="card-result-summary">-</span><br /><br />
|
||||
<div id="button-reset-card">Reset</div>
|
||||
<h1>Results</h1><span id="card-result-summary">-</span><br>
|
||||
<br>
|
||||
<div id="button-reset-card">
|
||||
Reset
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="tab-event">
|
||||
<div id="event-timer-form" align="center">
|
||||
<h3>Enter Event End Date/Time (in UTC):</h3><br />
|
||||
<input type="text" size="10" id="event_end_date" name="event_end_date" readonly="true" placeholder="MM/DD/YYYY" value="" />
|
||||
<input type="text" size="5" id="event_end_time" name="event_end_time" readonly="true" placeholder="HH:MM" value="" />
|
||||
<br /><br />
|
||||
<div id="button-start-stop-timer">Start Timer</div>
|
||||
<h3>Enter Event End Date/Time (in UTC):</h3><br>
|
||||
<input type="text" size="10" id="event_end_date" name="event_end_date" readonly="true" placeholder="MM/DD/YYYY" value=""> <input type="text" size="5"
|
||||
id="event_end_time" name="event_end_time" readonly="true" placeholder="HH:MM" value=""><br>
|
||||
<br>
|
||||
<div id="button-start-stop-timer">
|
||||
Start Timer
|
||||
</div>
|
||||
<div id="timer_output_area" align="center">
|
||||
<h1>Timer Not Running</h1>
|
||||
</div>
|
||||
<div id="tier_info_output_area" align="center">
|
||||
<div id="tier_info_output_area" align="center"></div>
|
||||
<div id="button-clear-timer">
|
||||
Clear Timer
|
||||
</div>
|
||||
<div id="button-clear-timer">Clear Timer</div>
|
||||
</div>
|
||||
|
||||
<div id="error-dialog" title="Error">
|
||||
<p><span id="error-text" /></p>
|
||||
<p><span id="error-text"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue