// ==UserScript==
// @name The West Script Suite [ES]
// @description Una colección de mejoras para el juego de navegador The West
// @namespace https://gf.qytechs.cn/users/4051
// @author KaZaC
// @include http://*.the-west.*/game.php*
// @version 1.4
// @grant none
// @icon http://i.imgur.com/8qJTYUy.png
// @license http://creativecommons.org/licenses/by-nc-sa/3.0/
// ==/UserScript==
function runScript(source) {
if ('function' == typeof source) {
source = '(' + source + ')();';
}
var script = document.createElement('script');
script.setAttribute("type", "application/javascript");
script.textContent = source;
document.body.appendChild(script);
document.body.removeChild(script);
}
runScript(function() {
SlySuite = {
preferences: {
KOTimer: true,
RiverColours: "default",
Experience: false,
Achievements: true,
CraftingWindow: false
},
possibleRiverColours: {
default: 'Por defecto',
halloween: 'Rojo',
paddy: 'Verde',
valentine: 'Rosado',
blue: 'Azul',
norivers: 'Ocultar ríos'
},
getPreference: function(pref) {
return this.preferences[pref];
},
setPreference: function(pref, val) {
if (pref == 'RiverColours')
SlySuite.RiverColours.changeColour();
this.preferences[pref] = val;
localStorage.setObject('SlySuite', this.preferences);
},
images: {
achievements: 'http://i300.photobucket.com/albums/nn22/qwexrty/achievs_zps4c5d9ee3.jpg',
settings: 'http://i300.photobucket.com/albums/nn22/qwexrty/settings_zpsa8c2f112.jpg',
achievement_icon: 'http://i300.photobucket.com/albums/nn22/qwexrty/questbook2_zpsf9bfe431.png'
},
init: function() {
Storage.prototype.setObject = function(key, value) {
this.setItem(key, JSON.stringify(value));
};
Storage.prototype.getObject = function(key) {
var value = this.getItem(key);
return value && JSON.parse(value);
};
localStorage.getObject('SlySuite') == null ? localStorage.setObject('SlySuite', this.preferences) : $.extend(this.preferences, localStorage.getObject('SlySuite'));
SlySuite.createSettingsButton();
if (SlySuite.getPreference('KOTimer'))
SlySuite.KOTimer.firstrun();
$(setTimeout(function() {
SlySuite.RiverColours.init();
if (SlySuite.getPreference('RiverColours') != 'default')
SlySuite.RiverColours.changeColour();
}, 5000));
if (SlySuite.getPreference('Achievements'))
SlySuite.Achievements.init();
if (SlySuite.getPreference('CraftingWindow'))
SlySuite.CraftingWindow.init();
},
createSettingsButton: function() {
var bottom = $('<div></div>').attr({
'class': 'menucontainer_bottom'
});
var icon = $('<div></div>').attr({
'class': 'menulink',
'title': "Opciones de la Suite"
}).css({
'background-image': 'url(' + this.images.settings + ')',
'background-position': '0px 0px'
}).mouseleave(function() {
$(this).css("background-position", "0px 0px");
}).mouseenter(function(e) {
$(this).css("background-position", "-25px 0px");
}).click(function() {
SlySuite.openSettings();
});
$('#ui_menubar .ui_menucontainer :last').after($('<div></div>').attr({
'class': 'ui_menucontainer',
'id': 'SlySuite_settings_icon'
}).append(icon).append(bottom));
},
createAchievementsButton: function() {
},
openSettings: function() {
content = this.generateWindowContent();
var win = wman.open("SlySuite", "Opciones de la Suite").setResizeable(true).setMinSize(450, 400).setSize(450, 400);
win.appendToContentPane(content);
},
generateWindowContent: function() {
content = "";
content += "<div style=\"margin-left:5px;\">";
this.getPreference('KOTimer') == true ? check = " checked='checked'" : check = "";
content += "<input type='checkbox' id='KOtimer_checkbox'" + check + " onchange=\"SlySuite.setPreference('KOTimer',this.checked)\"><label for='KOtimer_checkbox'>Temporizador de desmayo</label><br />";
content += "Color de los ríos ";
content += "<select onchange=\"SlySuite.setPreference('RiverColours',this.value);\">";
colours = SlySuite.possibleRiverColours;
for (var c in colours) {
if (SlySuite.getPreference('RiverColours') == c)
content += "<option selected='selected' value=\"" + c + "\">" + colours[c] + "</option>";
else
content += "<option value=\"" + c + "\">" + colours[c] + "</option>";
}
content += "</select><br />";
this.getPreference('Achievements') == true ? check = " checked='checked'" : check = "";
content += "<input type='checkbox' id='Achievements_checkbox'" + check + " onchange=\"SlySuite.setPreference('Achievements',this.checked)\"><label for='Achievements_checkbox'>Seguimiento de logros</label><br />";
this.getPreference('CraftingWindow') == true ? check = " checked='checked'" : check = "";
content += "<input type='checkbox' id='CraftingWindow_checkbox'" + check + " onchange=\"SlySuite.setPreference('CraftingWindow',this.checked)\"><label for='CraftingWindow_checkbox'>Mejora de la ventana de artesanía</label><br />";
content += "<br /><br />";
content += "Algunos ajustes pueden requerir actualizar la ventana del juego para aplicarse";
content += "</div>";
return content;
}
};
SlySuite.KOTimer = {
timeleft: 0,
aliveAgain: 0,
image: "<div style='position:relative;display:block;width:59px;height:59px;cursor:pointer;' id='knockouttimer'><div id='timer'></div></div>",
lastDied: Character.lastDied
};
SlySuite.KOTimer.firstrun = function() {
if ($('.game_notification_area').length > 0) {
$('.game_notification_area').append(this.image);
} else {
setTimeout(SlySuite.KOTimer.firstrun, 3000);
console.log('Couldn\'t find the notification area, trying again soon...');
return;
}
$('#knockouttimer').css('background-image', 'url("http://i300.photobucket.com/albums/nn22/qwexrty/knockout_sprite_zps97503234.png")');
$('#knockouttimer #timer').css({
'position': 'absolute',
'bottom': '0px',
'left': '0px',
'right': '0px',
'color': 'white',
'text-align': 'center',
'font-size': '11px',
'height': '30px',
'line-height': '30px'
});
SlySuite.KOTimer.retrieveTimeleft(true);
SlySuite.KOTimer.update();
};
SlySuite.KOTimer.retrieveTimeleft = function(forced) {
forced = forced || false;
if (forced || Character.lastDied != SlySuite.KOTimer.lastDied) {
SlySuite.KOTimer.lastDied = Character.lastDied;
} else {
setTimeout(SlySuite.KOTimer.retrieveTimeleft, 10000);
return;
}
if (Character.homeTown.town_id != 0) // Can only request the info when you're in a town
{
$.post("game.php?window=building_sheriff&mode=index", {
town_id: Character.homeTown.town_id
}, function(data) {
SlySuite.KOTimer.timeleft = data.timeleft;
SlySuite.KOTimer.aliveAgain = Math.round(new Date().getTime() / 1000) + data.timeleft;
});
} else // We'll hide the image when you're not in a town
{
SlySuite.KOTimer.aliveAgain = 0;
$('#knockouttimer').hide();
}
setTimeout(SlySuite.KOTimer.retrieveTimeleft, 10000); // And we'll do it again in 10 seconds
};
SlySuite.KOTimer.update = function() {
var unix = Math.round(new Date().getTime() / 1000);
aliveAgain = SlySuite.KOTimer.aliveAgain;
if (aliveAgain < unix) {
$('#knockouttimer').hide();
setTimeout(SlySuite.KOTimer.update, 10000);
return;
} else
$('#knockouttimer').show();
difference = aliveAgain - unix;
hours = Math.floor(difference / 60 / 60);
difference -= hours * 60 * 60;
minutes = Math.floor(difference / 60);
difference -= minutes * 60;
if (hours == 0 && minutes == 0)
$('#knockouttimer #timer').html(Math.round(difference) + 's');
else if (hours == 0)
$('#knockouttimer #timer').html(minutes + 'm');
else
$('#knockouttimer #timer').html(hours + 'h:' + minutes + 'm');
setTimeout(SlySuite.KOTimer.update, 1000);
};
SlySuite.RiverColours = {
initialized: false
};
SlySuite.RiverColours.init = function() {
if (typeof(Map.Helper) == 'undefined')
return;
SlySuite.RiverColours.initialized = true;
SlySuite.RiverColours.oldScript = Map.Helper.imgPath.lookForModification.bind({});
Map.Helper.imgPath.lookForModification = function(path, d) {
$('#river_hide_css').remove();
if (/river|deco_egg_05|quests_fluss/.test(path) && SlySuite.getPreference('RiverColours') != 'default' && SlySuite.getPreference('RiverColours') != 'norivers') {
if (SlySuite.getPreference('RiverColours') == 'blue')
return '/' + path;
else
return SlySuite.getPreference('RiverColours') + '/' + path;
} else if (SlySuite.getPreference('RiverColours') == 'norivers') {
var hidingrivers = document.createElement('style');
hidingrivers.setAttribute("id", "river_hide_css");
hidingrivers.textContent = ".image[style*='river']{display:none;}";
document.body.appendChild(hidingrivers);
return SlySuite.RiverColours.oldScript(path, d);
} else
return SlySuite.RiverColours.oldScript(path, d);
};
SlySuite.RiverColours.changeColour = function() {
Map.Helper.imgPath.clearCache();
Map.refresh(true);
};
};
SlySuite.Achievements = {
achievementsList: {},
allFolders: [],
lastUpdate: new Date(0),
nextFolderCheck: false,
init: function() {
localStorage.getObject('SlySuite_Achievements') == null ? localStorage.setObject('SlySuite_Achievements', SlySuite.Achievements.achievementsList) : $.extend(this.achievementsList, localStorage.getObject('SlySuite_Achievements'));
$(function() {
Ajax.remoteCall('achievement', '', {
playerid: Character.playerId
}, function(r) {
if (r.error) return new MessageError(r.msg).show();
for (var f in r.menu) {
if (!('id' in r.menu[f])) continue;
if (r.menu[f].id == 'overall' || r.menu[f].id == 'heroics')
continue;
SlySuite.Achievements.allFolders.push(r.menu[f].id);
for (var sub in r.menu[f].sub)
if ('id' in r.menu[f].sub[sub]) SlySuite.Achievements.allFolders.push(r.menu[f].sub[sub].id);
}
});
setTimeout(function() {
SlySuite.Achievements.createWindow();
SlySuite.Achievements.editTracker();
SlySuite.Achievements.updateAchievements();
}, 5000);
});
this.createButton();
},
createWindow: function() {
if (typeof(Map.width) == 'undefined' || Map.width == 0) {
setTimeout(SlySuite.Achievements.createWindow, 3000);
return;
}
this.scrolling = new west.gui.Scrollpane(null).appendContent(
"<div class='achievement_tracker_container' />"
);
this.window = wman.open('achievementtracker', null, 'chat questtracker noclose nofocus nocloseall dontminimize')
.setMiniTitle('Seguimiento de logros')
.setSize(350, 170)
.setMinSize(320, 140)
.addEventListener(TWE('WINDOW_MINIMIZE'), this.minimize, this)
.addEventListener(TWE('WINDOW_DESTROY'), this.minimize, this)
.addEventListener(TWE('WINDOW_RELOAD'), this.manualUpdate, this)
.setResizeable(true)
.appendToContentPane($("<div id='ui_achievementtracker'/>").append(this.scrolling.getMainDiv()));
this.window.addTab('<div class="questbook" title="Seguimiente de logros"></div> Seguimiento de logros', 'achievementtracker', function() {});
this.window.dontCloseAll = true;
this.addCss();
$(this.window.getMainDiv()).css({
left: Map.width - 425,
top: 400
});
$('._tab_id_achievementtracker .tw2gui_window_tab_text .questbook').css({
'background-image': 'url(' + SlySuite.images.achievement_icon + ')'
});
$('#windows .tw2gui_window.questtracker .tw2gui_window_tabbar_tabs').attr({
'style': 'left:2px !important;'
});
},
createButton: function() {
var bottom = $('<div></div>').attr({
'class': 'menucontainer_bottom'
});
var icon = $('<div></div>').attr({
'class': 'menulink',
'title': "Abrir seguimiento de logros"
}).css({
'background-image': 'url(' + SlySuite.images.achievements + ')',
'background-position': '0px 0px'
}).mouseleave(function() {
$(this).css("background-position", "0px 0px");
}).mouseenter(function(e) {
$(this).css("background-position", "-25px 0px");
}).click(function() {
SlySuite.Achievements.openWindow();
});
$('#ui_menubar .ui_menucontainer :last').after($('<div></div>').attr({
'class': 'ui_menucontainer',
'id': 'Achievementtracker_button'
}).css({
display: 'none'
}).append(icon).append(bottom));
},
minimize: function() {
$(this.window.divMain).hide();
$('#Achievementtracker_button').show();
wman.minimizedIds[this.window.id] = this.window;
},
openWindow: function() {
$(this.window.divMain).show();
$('#Achievementtracker_button').hide();
},
editTracker: function() {
SlySuite.Achievements.oldTracker = Character.trackAchievement;
Character.trackAchievement = function(a, b) {
SlySuite.Achievements.trackAchievement(a, b);
};
},
trackAchievement: function(progress, update) {
if (!SlySuite.preferences.Achievements) {
SlySuite.Achievements.oldTracker(progress, update);
return;
}
var params = progress.split('-');
// achievement done, track next one in group
if (!update || params[2]) {
var achvId = (params[2]) ? params[2] : params[0];
this.setAchievement(achvId);
} else {
this.setAchievement(params[1]);
}
},
setAchievement: function(achi) {
if (achi in this.achievementsList) {
delete this.achievementsList[achi];
this.removeFromTracker(achi);
localStorage.setObject('SlySuite_Achievements', SlySuite.Achievements.achievementsList);
} else {
this.achievementsList[achi] = new Object();
this.getAchievementData(achi);
SlySuite.Achievements.descriptionNeeded.push(parseInt(achi));
if (!SlySuite.Achievements.nextFolderCheck)
SlySuite.Achievements.getFolderInfo(SlySuite.Achievements.allFolders.slice());
}
},
manualUpdate: function() {
if (this.lastUpdate.getTime() < new Date().getTime() - 60000) {
this.window.showLoader();
clearTimeout(this.nextUpdate);
this.updateAchievements();
this.lastUpdate = new Date();
this.window.hideLoader();
} else {
secleft = 60 - Math.floor((new Date().getTime() - this.lastUpdate.getTime()) / 1000);
new MessageError("Actualizado hace muy poco, inténtelo de nuevo en " + secleft + "s").show();
}
},
updateTracker: function(achi) {
if (this.achievementsList[achi].current >= this.achievementsList[achi].required) {
this.setAchievement(achi);
return;
}
if (!('isTime' in this.achievementsList[achi]))
this.achievementsList[achi].isTime = false;
if ($('#ui_achievementtracker #achievementtracker_' + achi).length > 0) {
$('#ui_achievementtracker #achievementtracker_' + achi + ' .achievement_current').html(this.achievementsList[achi].isTime ? this.tcalc(this.achievementsList[achi].current) : this.achievementsList[achi].current);
$('#ui_achievementtracker #achievementtracker_' + achi + ' .achievement_required').html(this.achievementsList[achi].isTime ? this.tcalc(this.achievementsList[achi].required) : this.achievementsList[achi].required);
$('#ui_achievementtracker #achievementtracker_' + achi + ' .achievement_percentage').html(Math.floor(this.achievementsList[achi].current / this.achievementsList[achi].required * 100));
$('#ui_achievementtracker #achievementtracker_' + achi + ' .quest_requirement').attr('title', ('description' in this.achievementsList[achi] ? this.achievementsList[achi].description : ''));
} else {
$('#ui_achievementtracker .achievement_tracker_container').append('<div class="selectable" id="achievementtracker_' + achi + '">' +
'<div class="quest-list title">' + this.achievementsList[achi].title +
'<span class="quest-list remove" title="Eliminar logro del seguimiento"></span></div>' +
'<ul class="requirement_container"><li class="quest_requirement" ' + ('description' in this.achievementsList[achi] ? 'title="' + this.achievementsList[achi].description + '"=' : '') + '>- <span class="achievement_current">' + (this.achievementsList[achi].isTime ? this.tcalc(this.achievementsList[achi].current) : this.achievementsList[achi].current) +
'</span> / <span class="achievement_required">' + (this.achievementsList[achi].isTime ? this.tcalc(this.achievementsList[achi].required) : this.achievementsList[achi].required) + '</span> (<span class="achievement_percentage">' +
(Math.floor(this.achievementsList[achi].current / this.achievementsList[achi].required * 100)) + '</span>%)</li></ul></div>');
$('#ui_achievementtracker #achievementtracker_' + achi + ' .quest-list.remove').click(function() {
SlySuite.Achievements.setAchievement(achi);
});
}
},
getAchievementData: function(achi) {
Ajax.remoteCall('achievement', 'track', {
achvid: achi
}, function(resp) {
if (resp.error) return new MessageError(resp.msg).show();
$.extend(SlySuite.Achievements.achievementsList[achi], {
title: resp.title,
current: resp.current,
required: resp.required
});
SlySuite.Achievements.updateTracker(achi);
Ajax.remoteCall('achievement', 'untrack');
localStorage.setObject('SlySuite_Achievements', SlySuite.Achievements.achievementsList);
});
},
removeFromTracker: function(achi) {
$('#ui_achievementtracker #achievementtracker_' + achi).remove();
},
updateAchievements: function() {
SlySuite.Achievements.descriptionNeeded = [];
for (var a in SlySuite.Achievements.achievementsList) {
SlySuite.Achievements.getAchievementData(a);
if (!('folder' in SlySuite.Achievements.achievementsList[a]))
SlySuite.Achievements.descriptionNeeded.push(parseInt(a));
}
SlySuite.Achievements.nextUpdate = setTimeout(SlySuite.Achievements.updateAchievements, 10 * 60 * 1000);
if (SlySuite.Achievements.descriptionNeeded.length > 0)
SlySuite.Achievements.getFolderInfo(SlySuite.Achievements.allFolders.slice());
},
getFolderInfo: function(arr) {
if (arr.length == 0 || SlySuite.Achievements.descriptionNeeded.length == 0) {
SlySuite.Achievements.nextFolderCheck = false;
return;
}
Ajax.remoteCall('achievement', 'get_list', {
folder: arr[0],
playerid: Character.playerId
}, function(json) {
for (var achieve in json.achievements.progress) {
currentId = json.achievements.progress[achieve].id;
if ($.inArray(currentId, SlySuite.Achievements.descriptionNeeded) != -1) {
SlySuite.Achievements.descriptionNeeded.splice(SlySuite.Achievements.descriptionNeeded.indexOf(currentId), 1);
SlySuite.Achievements.achievementsList[currentId].description = json.achievements.progress[achieve].desc;
SlySuite.Achievements.achievementsList[currentId].folder = arr[0];
if (json.achievements.progress[achieve].meta[0].match('^js:')) {
var parts = json.achievements.progress[achieve].meta[0].split(":");
var func = eval(parts[1]);
if (func instanceof west.gui.Progressbar) {
parts[4] ? SlySuite.Achievements.achievementsList[currentId].isTime = true : SlySuite.Achievements.achievementsList[currentId].isTime = false;
}
}
SlySuite.Achievements.updateTracker(currentId);
localStorage.setObject('SlySuite_Achievements', SlySuite.Achievements.achievementsList);
}
}
arr.splice(0, 1);
SlySuite.Achievements.nextFolderCheck = setTimeout(SlySuite.Achievements.getFolderInfo, 2000, arr);
});
},
addCss: function() {
achievementCss = '';
achievementCss += "#ui_achievementtracker .quest-list.title {margin-left:5px;color: #DBA901;font-weight: bold;display:inline-block;zoom:1;}\n";
achievementCss += "#ui_achievementtracker .selectable:hover .quest-list.remove {display:inline-block;zoom:1;cursor:pointer;}\n";
achievementCss += "#ui_achievementtracker .quest-list.remove {background: url('/images/chat/windowicons.png') no-repeat -120px 0px;width: 12px; height: 12px; margin-left:5px;margin-bottom:-2px;}\n";
achievementCss += "div#ui_achievementtracker { width: 100%; height: 100%; display:block;}";
var style = document.createElement('style');
style.textContent = achievementCss;
document.body.appendChild(style);
},
tcalc: function(val) {
var h, m, s;
m = s = "00";
h = Math.floor(val / 3600);
if (0 != (val % 3600)) {
var c = val - (h * 3600);
minute = Math.floor(c / 60);
if (0 != (c % 60)) s = c % 60;
}
return (h <= 0 ? "" : h + ":") + m + ":" + s;
}
};
SlySuite.CraftingWindow = {
old: $.extend({}, Crafting),
currentlySelected: false,
knownRecipes: [],
init: function() {
Crafting.addRecipe = SlySuite.CraftingWindow.addRecipe;
Crafting.updateResources = SlySuite.CraftingWindow.updateResources;
/*Bag.updateChanges = function(changes, from) {
Bag.handleChanges(changes, from);
Crafting.updateResources();
SlySuite.CraftingWindow.updateAllCount();
};*/
SlySuite.CraftingWindow.addCss();
},
selectRecipe: function(id) {
$('#recipe' + SlySuite.CraftingWindow.currentlySelected + '.selected').removeClass('selected');
$('.recipe_content').hide();
$('#recipe' + id).addClass('selected');
$('#recipe_content_' + id).show();
SlySuite.CraftingWindow.currentlySelected = id;
if (SlySuite.CraftingWindow.craftCount(id) > 0) {
$('#crafting_requirements_display .tw2gui_button').show();
} else {
$('#crafting_requirements_display .tw2gui_button').hide();
}
},
craftCount: function(id) {
var canCraft = 10000;
for (var i in Crafting.recipes[id].resources) {
if (!Crafting.recipes[id].resources.hasOwnProperty((i))) continue;
resourceItem = ItemManager.get(Crafting.recipes[id].resources[i].item);
amountRequired = Crafting.recipes[id].resources[i].count;
var bag_count = Bag.getItemCount(resourceItem.item_id);
canCraft = Math.min(Math.floor(bag_count / amountRequired), canCraft);
}
return canCraft;
},
updateResources: function() {
for (var k in Crafting.recipes) {
var mats_available = true,
resourceItem, amountRequired;
for (var i in Crafting.recipes[k].resources) {
if (!Crafting.recipes[k].resources.hasOwnProperty((i))) continue;
resourceItem = ItemManager.get(Crafting.recipes[k].resources[i].item);
amountRequired = Crafting.recipes[k].resources[i].count;
var bag_count = Bag.getItemCount(resourceItem.item_id);
SlySuite.CraftingWindow.updateCount(k);
if (bag_count < amountRequired) mats_available = false;
window.CharacterWindow.window.$('#resources_' + k + '_' + resourceItem.item_id).html(
new tw2widget.CraftingItem(resourceItem)
.setRequired(bag_count, amountRequired)
.getMainDiv()
);
}
window.CharacterWindow.window.$('#recipe_craft_' + Crafting.recipes[k].item_id).empty();
if (Crafting.recipes[k].last_craft) {
$('#recipe_craft_' + Crafting.recipes[k].item_id).append("<span cursor:default;'>" + Crafting.recipes[k].last_craft.formatDurationBuffWay() + "</span>");
console.log('test');
}
if (mats_available)
CharacterWindow.window.$('#recipe' + Crafting.recipes[k].item_id).removeClass("not_available");
else
CharacterWindow.window.$('#recipe' + Crafting.recipes[k].item_id).addClass("not_available");
}
if (SlySuite.CraftingWindow.craftCount(SlySuite.CraftingWindow.currentlySelected) > 0) {
$('#crafting_requirements_display .tw2gui_button').show();
} else {
$('#crafting_requirements_display .tw2gui_button').hide();
}
},
updateCount: function(id) {
$('#recipe_count_' + id).html('[' + SlySuite.CraftingWindow.craftCount(id) + ']');
console.log(id);
},
addRecipe: function(recipe) {
if ($('#crafting_requirements_display').length < 1) {
$('.character-crafting.crafting').append($("<div id='crafting_requirements_display' />"));
$('#crafting_requirements_display').append(new west.gui.Button(_("Fabricar"), function() {
SlySuite.CraftingWindow.craftItem(SlySuite.CraftingWindow.currentlySelected);
}).setMinWidth(150).getMainDiv());
/*EventHandler.listen('inventory_changed',function(){
});*/
}
var time_last_craft = recipe.last_craft;
var recipe = ItemManager.get(recipe.item_id);
Crafting.recipes[recipe.item_id] = recipe;
Crafting.recipes[recipe.item_id]['last_craft'] = time_last_craft;
if (window.CharacterWindow.window != undefined && window.CharacterWindow.window.$('#crafting_recipe_list').length > 0) {
var recipe_div = $("<div class='" + Crafting.getRecipeColor(recipe) + "' id='recipe" + recipe.item_id + "' onclick='SlySuite.CraftingWindow.selectRecipe(" + recipe.item_id + ");'></div>");
var recipe_title_inner_div = $("<div class='recipe_title_inner' />");
var recipe_title_div = $("<div id='recipe_title_" + recipe.item_id + "' class='recipe_title'></div>");
var recipe_collapse_div = $("<div id='recipe_count_" + recipe.item_id + "' class='recipe_collapse'></div>");
var recipe_difficult_div = $("<div id='recipe_difficult_" + recipe.item_id + "' class='recipe_difficult " + Crafting.getRecipeColor(recipe) + "' title='" + Crafting.description.escapeHTML() + "'></div>");
var recipe_name_div = $("<div id='recipe_name" + recipe.item_id + "' class='recipe_name'>" + recipe.name + "</div>");
var recipe_craft_div = $("<div id='recipe_craft_" + recipe.item_id + "' class='recipe_craft'></div>");
var recipe_content_div = $("<div id='recipe_content_" + recipe.item_id + "' class='recipe_content'></div>").hide();
var recipe_craftitem_div = $("<div id='recipe_craftitem_" + recipe.item_id + "' class='recipe_craftitem'></div>");
var recipe_resources_content_div = $("<div id='recipe_resources_content_" + recipe.item_id + "' class='recipe_resources'></div>");
SlySuite.CraftingWindow.knownRecipes[recipe.item_id] = recipe;
recipe_title_inner_div.append(recipe_collapse_div, recipe_name_div);
recipe_title_div.append(recipe_title_inner_div, recipe_craft_div).appendTo(recipe_div);
var craftitem = $("<div id='craftitem_" + recipe.item_id + "' style='float:none;'/>")
.append((new tw2widget.CraftingItem(ItemManager.get(recipe.craftitem))).getMainDiv());
craftitem.appendTo(recipe_craftitem_div);
var available = true,
resourceItem, canCraft = 1000000;
for (var i in recipe.resources) {
if (!recipe.resources.hasOwnProperty(i)) continue;
resourceItem = ItemManager.get(recipe.resources[i].item);
var resource = $("<div id='resources_" + recipe.item_id + "_" + resourceItem.item_id + "'></div>");
var bag_count = Bag.getItemCount(resourceItem.item_id);
canCraft = Math.min(Math.floor(bag_count / recipe.resources[i].count), canCraft);
recipe_resources_content_div.append(resource.append(
new tw2widget.CraftingItem(resourceItem)
.setRequired(bag_count, recipe.resources[i].count)
.getMainDiv()
));
var hasItem = Bag.getItemByItemId(resourceItem.item_id);
if (!hasItem || hasItem.getCount() < recipe.resources[i].count)
available = false;
}
recipe_collapse_div.html('[' + canCraft + ']');
if (!available) {
recipe_div.addClass("not_available");
} else if (time_last_craft) {
recipe_craft_div.append("<span style='cursor:default;'>" + time_last_craft.formatDurationBuffWay() + "</span>");
}
recipe_content_div.append(recipe_craftitem_div, recipe_resources_content_div, $("<br />"));
recipe_content_div.appendTo($('#crafting_requirements_display'));
$('#crafting_recipe_list .tw2gui_scrollpane_clipper_contentpane').prepend(recipe_div);
SlySuite.CraftingWindow.selectRecipe(recipe.item_id);
}
},
craftItem: function(recipe_id) {
Ajax.remoteCall('crafting', 'start_craft', {
recipe_id: recipe_id
}, function(resp) {
if (resp.error) return new MessageError(resp.msg).show();
var data = resp.msg;
CharacterWindow.progressCrafting.setValue(data.profession_skill);
Character.setProfessionSkill(data.profession_skill);
CharacterWindow.window.$('#recipe' + recipe_id)
.removeClass('middle hard easy')
.addClass(Crafting.getRecipeColor(ItemManager.get(recipe_id)));
EventHandler.signal("inventory_changed");
Character.updateDailyTask('crafts', data.count);
return new MessageSuccess(data.msg).show();
});
},
addCss: function() {
var css = '';
css += '#crafting_recipe_list { height:250px; top:43px;position:relative}';
css += '.recipe_title { background:none; cursor:pointer}';
css += '.recipe_title_inner { margin-top:2px;}';
css += '.easy { background:none; color:rgb(40,40,40);}';
css += '.easy .recipe_title:hover { background:rgba(55, 55, 55, 0.75); color:white;}';
css += '.easy.selected .recipe_title { background:rgba(55, 55, 55, 0.75); color:white;}';
css += '.middle { background:none; color:rgb(0, 179, 3);}';
css += '.middle .recipe_title:hover { background:rgba(0, 118, 6, 0.75); color:white;}';
css += '.middle.selected .recipe_title { background:rgba(0, 118, 6, 0.75); color:white;}';
css += '.hard { background:none; color:rgb(255, 88, 0);}';
css += '.hard .recipe_title:hover { background:rgba(221, 92, 0, 0.75); color:white;}';
css += '.hard.selected .recipe_title { background:rgba(221, 92, 0, 0.75); color:white;}';
css += '.recipe_name {color:inherit;margin-top:0px;}';
css += '.recipe_collapse {color:inherit;font-size:inherit;}';
css += '.not_available .recipe_collapse {visibility:hidden;}';
css += '.recipe_craft {color:rgb(236, 25, 25);}';
css += '#crafting_requirements_display { position: relative; top: 43px; left: 61px;}';
css += '#crafting_requirements_display .tw2gui_button {position:absolute; left:2px; bottom:-19px;}';
$('body').append('<style>' + css + '</style>');
}
};
SlySuite.init();
});