// ==UserScript== // @name TW Gold Jobs Finder (More Languages) // @namespace TomRobert // @author Macabre2077 (updated by Tom Robert) // @author tw81 (Italian translation) // @author Jakovlev (Hungarian translation) // @author realfan2002 (Romanian translation) // @author Vebuus (Polish translation) // @author Ilja Iljic (Czech translation) // @author pepe100 (Spanish translation) // @author Tom Robert (German translation) // @description Shows a list of all silver and gold jobs! // @include http*://*.the-west.*/game.php* // @version 1.01 // @grant none // @downloadURL none // ==/UserScript== (function (fn) { var script = document.createElement('script'); script.setAttribute('type', 'application/javascript'); script.textContent = '(' + fn + ')();'; document.body.appendChild(script); // run the script document.body.removeChild(script); // clean up }) (function () { GoldJobs = { version: '1.01', name: 'TW Gold Jobs Finder', author: 'Macabre2077 (updated by Tom Robert)', minGame: '2.05', maxGame: Game.version.toString(), website: 'https://greasyfork.org/scripts/7226', updateUrl: 'http://pastebin.com/raw.php?i=1NHRGWVx', toLoad: 0, loaded: 0, xMax: 181, yMax: 79, blockMaxLength: 300, dataLoaded: false, silverJobBbColor: '#708090', goldJobBbColor: '#f4c430', preferences: { jobName: '', showSilver: true, showGold: true, sortByName: 0, sortByDistance: 1 }, hiddenImageOpacity: 0.35, shownImageOpacity: 1, bestJobTime: 0 }; langs = { en_US: { language: 'None (English)', ApiGui: 'This script adds a button on the right side, where you can load all the silver and gold jobs.
So they can be easily found on the map.', contact: 'Contact', jobIcon: 'Icon', jobName: 'Job name', distanceTime: 'Travel time', showJob: 'Show', title: 'Gold And Silver Jobs', loading: 'Loading...', exportButtonTitle: 'Share', generatedBy: 'Generated by TW Gold Jobs Finder', generatedByBb: '[i][url=' + GoldJobs.website + ']Generated by TW Gold Jobs Finder[/url][/i]', plainText: 'Plain Text', bbCode: 'BB code', enqueue: 'Enqueue', openWindowTitle: 'Open window', refreshTitle: 'Refresh', feedbackTitle: 'Send feedback', feedbackWindowTitle: 'Gold Jobs Feedback', feedbackDescription: 'If you have encountered any bugs or have ideas how to improve this script, describe them..in English, German or French please..', update: 'Update', updateAvailable: 'A new version of the script is available', cancel: 'Cancel', }, ru_RU: { language: 'Russian (ру́сский)', ApiGui: 'This script adds a button on the right side, where you can load all the silver and gold jobs.
So they can be easily found on the map.', contact: 'контакт', jobIcon: 'Иконка', jobName: 'Название работы', distanceTime: 'Время', showJob: 'Показать', title: 'Золотые и серебряные работы', loading: 'Загрузка...', exportButtonTitle: 'Поделиться', generatedBy: 'Получено с помощью TW Gold Jobs Finder', generatedByBb: '[i][url=' + GoldJobs.website + ']Получено с помощью TW Gold Jobs Finder[/url][/i]', plainText: 'Без BB-кода', bbCode: 'С BB-кодом', enqueue: 'Начать', openWindowTitle: 'Открыть', refreshTitle: 'Обновить данные', feedbackTitle: 'Обратная связь', feedbackWindowTitle: 'Golden Jobs, обратная связь', feedbackDescription: 'Если нашли баги, или есть идеи, как улучшить скрипт, отправить мне сообщение', update: 'обновление', updateAvailable: 'Доступно обновление скрипта', cancel: 'отменить', }, it_IT: { language: 'Italian (italiano)', ApiGui: 'This script adds a button on the right side, where you can load all the silver and gold jobs.
So they can be easily found on the map.', contact: 'Contatto', jobIcon: 'Icona', jobName: 'Nome lavoro', distanceTime: 'Tempo di viaggio', showJob: 'Mostra', title: 'Lavoro Oro e Argento', loading: 'Caricamento in corso ... Ci vorrà un po \'', exportButtonTitle: 'Cita', generatedBy: 'Generato da TW Gold Jobs Finder', generatedByBb: '[i][url=' + GoldJobs.website + ']Generato da TW Gold Jobs Finder[/url][/i]', plainText: 'Testo normale', bbCode: 'BB code', enqueue: 'Inizia', openWindowTitle: 'Aperto', refreshTitle: 'Aggiornare dati', feedbackTitle: 'Invia feedback', feedbackWindowTitle: 'Gold Jobs Feedback', feedbackDescription: 'Se avete riscontrato qualche bug o avete idee su come migliorare questo script, vi prego di descriverle .. in inglese, tedesco o francese per favore.', update: 'Atualizar', updateAvailable: 'Script aggiornamento disponibile', cancel: 'Cancelar', }, hu_HU: { language: 'Hungarian (Magyar)', ApiGui: 'This script adds a button on the right side, where you can load all the silver and gold jobs.
So they can be easily found on the map.', contact: 'Érintkezés', jobIcon: 'Ikon', jobName: 'Munka neve', distanceTime: 'Menetidő', showJob: 'Mutatás', title: 'Arany és ezüst munkák', loading: 'Kis türelmet, töltés alatt...', exportButtonTitle: 'Megosztás', generatedBy: 'TW Gold Jobs Finder által létrehozva', generatedByBb: '[i][url=' + GoldJobs.website + ']TW Gold Jobs Finder által létrehozva[/url][/i]', plainText: 'Szövegként', bbCode: 'BB kód', enqueue: 'Kezdés', openWindowTitle: 'Megnyitás', refreshTitle: 'Frissítés', feedbackTitle: 'Visszajelzés küldése', feedbackWindowTitle: 'Gold Jobs visszajelzés', feedbackDescription: 'Ha találkoztál hibákkal (bug), vagy javaslatod lenne a szkript bővítéséhez írd le őket. Értek angolul, németül és franciául.', update: 'Frissítés', updateAvailable: 'Egy új változata a script elérhető', cancel: 'Érvénytelenít', }, ro_RO: { language: 'Romanian (român)', ApiGui: 'This script adds a button on the right side, where you can load all the silver and gold jobs.
So they can be easily found on the map.', contact: 'Contact', jobIcon: 'Imagine', jobName: 'Denumirea muncii', distanceTime: 'Distanţa', showJob: 'Arată', title: 'Munci aurii şi argintii', loading: 'Se încarcă... Poate dura ceva timp!', exportButtonTitle: 'Distribuiţi', generatedBy: 'Generat cu TW Gold Jobs Finder', generatedByBb: '[i][url=' + GoldJobs.website + ']Generat cu TW Gold Jobs Finder[/url][/i]', plainText: 'Text simplu', bbCode: 'BB code', enqueue: 'Start', openWindowTitle: 'Deschide', refreshTitle: 'Reîmprospăta', feedbackTitle: 'Trimite feedback', feedbackWindowTitle: 'Gold Jobs Feedback', feedbackDescription: 'If you have encountered any bugs or have ideas how to improve this script, describe them..in English, German or French please..', update: 'Actualizare', updateAvailable: 'O nouă versiune este disponibilă', cancel: 'Anula', }, pl_PL: { language: 'Polish (polski)', ApiGui: 'This script adds a button on the right side, where you can load all the silver and gold jobs.
So they can be easily found on the map.', contact: 'Kontakt', jobIcob: 'Ikona', jobName: 'Nazwa pracy', distanceTime: 'Dystans', showJob: 'Pokaż', title: 'Złote i srebrne prace', loading: 'Ładowanie... To zajmie moment', exportButtonTitle: 'Eksport', generatedBy: 'Stworzone przez TW Gold Jobs Finder', generatedByBb: '[i][url=' + GoldJobs.website + ']Stworzone przez TW Gold Jobs Finder[/url][/i]', plainText: 'Zwykły tekst', bbCode: 'BB code', enqueue: 'Startuj', openWindowTitle: 'Otwierać', refreshTitle: 'Odświeżanie danych', feedbackTitle: 'Wysłać opinię', feedbackWindowTitle: 'Gold Jobs Opinię', feedbackDescription: 'If you have encountered any bugs or have ideas how to improve this script, describe them..in English, German or French please..', update: 'Aktualizacja', updateAvailable: 'Nowa wersja skryptu jest dostępny', cancel: 'Anuluj', }, cs_CZ: { language: 'Czech (čeština)', ApiGui: 'This script adds a button on the right side, where you can load all the silver and gold jobs.
So they can be easily found on the map.', contact: 'Kontakt', jobIcon: 'Ikonka', jobName: 'Práce', distanceTime: 'Vzdálenost', showJob: 'Ukaž', title: 'Zlaté a stříbrné práce', loading: 'Nahrávám...', exportButtonTitle: 'Sdílet', generatedBy: 'Generated by TW Gold Jobs Finder', generatedByBb: '[i][url=' + GoldJobs.website + ']Generated by TW Gold Jobs Finder[/url][/i]', plainText: 'Prostý Text', bbCode: 'BB code', enqueue: 'Zadat', openWindowTitle: 'Otevřít okno', refreshTitle: 'Obnovit', feedbackTitle: 'Pošli zpětnou vazbu', feedbackWindowTitle: 'Gold Jobs Feedback', feedbackDescription: 'Pokud jste nalezli bug nebo máte nápad na zlepšení skriptu, napište je..v angličtině, němčině nebo francouzštině prosím..', update: 'Aktualizovat', updateAvailable: 'Nová verze skriptu je k dispozici', cancel: 'Zrušit', }, es_ES: { language: 'Spanish (español)', ApiGui: 'This script adds a button on the right side, where you can load all the silver and gold jobs.
So they can be easily found on the map.', contact: 'Contacto', jobIcon: 'Icono', jobName: 'Nombre Trabajo', distanceTime: 'Tiempo viaje', showJob: 'Mostrar', title: 'Trabajos con Bonus Oro y Plata', loading: 'Cargando...', exportButtonTitle: 'Compartir', generatedBy: 'Generado por TW Gold Jobs Finder', generatedByBb: '[i][url=' + GoldJobs.website + ']Generado por TW Gold Jobs Finder[/url][/i]', plainText: 'Texto plano', bbCode: 'BB code', enqueue: 'Poner en cola', openWindowTitle: 'Abrir ventana', refreshTitle: 'Refrescar', feedbackTitle: 'Enviar comentarios', feedbackWindowTitle: 'Gold Jobs comentarios', feedbackDescription: 'Si ha encontrado algún error o tiene ideas de cómo mejorar este script, descríbalos.. por favor en inglés, alemán o francés..', update: 'Actualización', updateAvailable: 'Una nueva versión está disponible', cancel: 'Cancelar', }, de_DE: { language: 'German (Deutsch)', ApiGui: 'Das Script fügt am rechten Rand einen Button hinzu, wo man alle Gold- und Silber-Arbeiten laden kann.
So findet man sie ganz einfach auf der Karte.', contact: 'Kontakt', jobIcon: 'Bild', jobName: 'Arbeit', distanceTime: 'Distanz', showJob: 'Zeigen', title: 'Gold und Silber Arbeiten', loading: 'Laden...', exportButtonTitle: 'Teilen', generatedBy: 'Gefunden mit TW Gold Jobs Finder', generatedByBb: '[i][url=' + GoldJobs.website + ']Gefunden mit TW Gold Jobs Finder[/url][/i]', plainText: 'Klartext', bbCode: 'BB Code', enqueue: 'Einstellen', openWindowTitle: 'Fenster öffnen', refreshTitle: 'Aktualisieren', feedbackTitle: 'Feedback', feedbackWindowTitle: 'Gold Jobs Feedback', feedbackDescription: 'Falls du auf Fehler gestossen bist oder Ideen hast, das Script zu verbesseren, beschreibe diese.. auf Deutsch, Englisch oder Französisch bitte..', update: 'Update', updateAvailable: 'Für das Script ist eine neue Version erhältlich', cancel: 'Abbrechen', }, }; lang = langs.hasOwnProperty(Game.locale) ? langs[Game.locale] : langs.en_US; var GoldJobsApi = TheWestApi.register('GoldJobs', GoldJobs.name, GoldJobs.minGame, GoldJobs.maxGame, GoldJobs.author, GoldJobs.website); GoldJobsApi.setGui('
Language detected: ' + lang.language + '

' + lang.ApiGui + '

' + GoldJobs.name + ' v' + GoldJobs.version + ''); GoldJobs.parseWholeMap = function (tiles, onLoad) { this.loaded = 0; var x, y; var arr = [ ]; var currentBlock = 0; var currentBlockLength = 0; for (x in tiles) { for (y in tiles[x]) { if (isNaN(x) || isNaN(y)) { continue; } if (currentBlockLength == 0) { arr[currentBlock] = [ ]; } arr[currentBlock].push([parseInt(x), parseInt(y)]); if (++currentBlockLength == this.blockMaxLength) { currentBlock++; currentBlockLength = 0; } } } var i, to = arr.length; this.toLoad = to; for (i = 0; i < to; i++) { Map.Data.Loader.load(arr[i], function () { GoldJobs.loaded++; if (GoldJobs.loaded == GoldJobs.toLoad) { onLoad(); } }); } }; GoldJobs.getJobIcon = function (jobId, x, y, shortname, gold) { var pos = { 'x': x, 'y': y }; var t = gold ? 'gold' : 'silver'; return '
' + this.getGotoIcon(x, y) + '
'; }; GoldJobs.getGotoIcon = function (x, y) { return '
'; }; GoldJobs.getBestJobTime = function () { var list = JobList.getDurations(); var maxTime = 0; for (name in list) { if (list[name].requirement <= Character.level && list[name].duration > maxTime) { maxTime = list[name].duration; } } GoldJobs.bestJobTime = maxTime; }; GoldJobs.getEnqueueButton = function (jobId, x, y) { var job = JobList.getJobById(jobId); var canDo = job.canDo(); if (GoldJobs.bestJobTime == 0) { GoldJobs.getBestJobTime(); } var duration = GoldJobs.bestJobTime; var b = this.gui.makeButton(lang.enqueue, function () { TaskQueue.add(new TaskJob(jobId, x, y, duration)); }); b.setWidth(100); if (!canDo) b.disable(); return b.getMainDiv(); }; GoldJobs.addColumnsCss = function () { $('.goldenJobs .jobIcon').css('width', '60px'); $('.goldenJobs .jobName').css('width', '140px'); $('.goldenJobs .startJob').css('width', '100px'); $('.goldenJobs .distanceTime').css('width', '60px'); $('.goldenJobs .row').css('height', '56px'); $('.goldenJobs .row').css('background', 'none'); $('.goldenJobs .row_head .jobName').css('width', '135px'); $('.goldenJobs .row_head .distanceTime').css('width', '95px'); $('.goldenJobs .row_head .startJob').css('width', '0px'); $('.goldenJobs .tfoot .jobIcon').css('width', '100%'); $('.goldenJobs .tfoot').css('height', '35px'); $('.goldenJobs').find('.tw2gui_scrollpane').css('height', '280px'); }; GoldJobs.calculateDistance = function (jobX, jobY) { var to = { x: jobX, y: jobY }; return Map.calcWayTime(Character.position, to); }; GoldJobs.addEventListener = function (event, callback) { if (EventHandler.hasOwnProperty('add')) { EventHandler.add(event, callback); } else { EventHandler.listen(event, callback); } }; GoldJobs.openWindow = function () { var content = $('
'); var table = this.makeJobsTable(this.preferences.jobName, this.preferences.showSilver, this.preferences.showGold, this.preferences.sortByName, this.preferences.sortByDistance); var win = wman.open('goldenJobs').setResizeable(true).setMinSize(450, 475).setSize(450, 475).setMiniTitle(lang.title); content.append(table.getMainDiv()); win.appendToContentPane(content); this.addColumnsCss(); this.addFilterEvent(); this.addHeaderEvents(); this.addEventListener('position_change', GoldJobs.refreshWindow); }; GoldJobs.buildFooter = function (chosenJobName) { var footer = $('
'); var exportButton = this.gui.makeButton(lang.exportButtonTitle, function () { var jobName = $('#gj_job_search_textfield').val(); var jobs = GoldJobs.jobsDataToBbString(jobName); GoldJobs.showExportWindow(jobs + lang.generatedByBb, true); }).setWidth(100); var textfield = this.gui.makeTextfield('gj_job_search_textfield').setSize(18).setWidth(137); var clearImage = $('', { src: '../images/chat/servicegrade_traitor.png', click: function () { $('#gj_job_search_textfield').val(''); $('#gj_job_search_textfield').change(); }, css: { filter: 'grayscale(100%)', '-webkit-filter': 'grayscale(100%)', '-moz-filter': 'grayscale(100%)', '-o-filter': 'grayscale(100%)', position: 'absolute', top: '-1px', left: '130px' } }); $('#gj_job_search', footer).append(textfield.getMainDiv()); $('#gj_share', footer).append(exportButton.getMainDiv()); $('#gj_job_search span.tw2gui_textfield span', footer).append('' + lang.jobName + ''); var placeholder = $('#gj_job_search .placeholder', footer); placeholder.after(clearImage); placeholder.click(function () { $('#gj_job_search_textfield', footer).focus(); }); $('#gj_job_search_textfield', footer).focus(function () { placeholder.hide(); }); $('#gj_job_search_textfield', footer).focusout(function () { if ($('#gj_job_search_textfield').val() == '') { placeholder.show(); } }); if (chosenJobName != undefined && chosenJobName != '') { $('#gj_job_search_textfield', footer).val(chosenJobName); $('#gj_job_search_textfield', footer).focus(); } return footer; }; GoldJobs.getJobIconHeaderCell = function (showGold, showSilver) { var hiddenImageOpacity = this.hiddenImageOpacity; var shownImageOpacity = this.shownImageOpacity; return '+\t\t\t\t' }; GoldJobs.onJobIconFilterClick = function (type, element) { var hiddenImageOpacity = this.hiddenImageOpacity; var shownImageOpacity = this.shownImageOpacity; var disabled = ($(element).css('opacity') != shownImageOpacity); if (type == 'gold') { this.preferences.showGold = disabled; } else { this.preferences.showSilver = disabled; } $(element).css('opacity', (disabled ? hiddenImageOpacity : shownImageOpacity)); this.refreshWindow(); }; GoldJobs.getAllTiles = function (callback) { Ajax.get('map', 'get_minimap', { }, function (r) { if (r.error) { console.log(r.error); return; } var result = [ ]; var jobGroups = r.job_groups, i, j; for (i in jobGroups) { for (j in jobGroups[i]) { var coords = jobGroups[i][j]; var xTile = Math.floor(coords[0] / Map.tileSize); var yTile = Math.floor(coords[1] / Map.tileSize); if (!result.hasOwnProperty(xTile)) { result[xTile] = { }; } result[xTile][yTile] = 1; } } GoldJobs.tilesWithJobs = result; callback(); }); }; GoldJobs.getFilteredData = function (chosenJobName, showSilver, showGold, sortByName, sortByDistance) { chosenJobName = chosenJobName.toLowerCase(); var jobs = Map.JobHandler.Featured; var k, jobId, job, t, j; var result = [ ]; for (k in jobs) { var jobPlace = jobs[k]; for (jobId in jobPlace) { job = JobList.getJobById(jobId); j = jobPlace[jobId]; if ((j.silver && !showSilver) || (j.gold && !showGold)) { continue; } if (chosenJobName != '' && job.name.toLowerCase().indexOf(chosenJobName) < 0) { continue; } result.push({ jobId: jobId, x: j.x, y: j.y, name: job.name, shortname: job.shortname, gold: j.gold, distance: this.calculateDistance(j.x, j.y) }); } } var nameSortFunctionReversed = function (o1, o2) { var t1 = o1.name.toUpperCase(); var t2 = o2.name.toUpperCase(); return (t1 > t2) ? - 1 : (t1 < t2) ? 1 : 0; }; var distanceSortFunctionReversed = function (o1, o2) { var t1 = parseInt(o1.distance); var t2 = parseInt(o2.distance); return (t1 > t2) ? - 1 : (t1 < t2) ? 1 : 0; }; var nameSortFunction = function (o1, o2) { var t1 = o1.name.toUpperCase(); var t2 = o2.name.toUpperCase(); return (t1 < t2) ? - 1 : (t1 > t2) ? 1 : 0; }; var distanceSortFunction = function (o1, o2) { var t1 = o1.distance; var t2 = o2.distance; return (t1 < t2) ? - 1 : (t1 > t2) ? 1 : 0; }; if (sortByName != 0) { if (sortByName == 1) { result.sort(nameSortFunction); } else { result.sort(nameSortFunctionReversed); } } else if (sortByDistance != 0) { if (sortByDistance == 1) { result.sort(distanceSortFunction); } else { result.sort(distanceSortFunctionReversed); } } return result; }; GoldJobs.makeJobsTable = function (chosenJobName, showSilver, showGold, sortByName, sortByDistance) { chosenJobName = chosenJobName || ''; var arrow_desc = ' '; var arrow_asc = ' '; var footer = this.buildFooter(chosenJobName); var table = this.gui.makeTable(); var data = this.getFilteredData(chosenJobName, showSilver, showGold, sortByName, sortByDistance); var k, j; table.addColumn('jobIcon', 'jobIcon').addColumn('jobName', 'jobName').addColumn('distanceTime', 'distanceTime').addColumn('startJob', 'startJob').appendToCell('head', 'jobIcon', this.getJobIconHeaderCell(showGold, showSilver)).appendToCell('head', 'jobName', lang.jobName + (sortByName == 1 ? arrow_asc : sortByName == - 1 ? arrow_desc : '')).appendToCell('head', 'distanceTime', lang.distanceTime + (sortByDistance == 1 ? arrow_asc : sortByDistance == - 1 ? arrow_desc : '')).appendToCell('head', 'startJob', ''); $.each(data, function (k, j) { table.appendRow().appendToCell( - 1, 'jobIcon', GoldJobs.getJobIcon(j.jobId, j.x, j.y, j.shortname, j.gold)).appendToCell( - 1, 'jobName', j.name).appendToCell( - 1, 'distanceTime', j.distance.formatDuration()).appendToCell( - 1, 'startJob', GoldJobs.getEnqueueButton(j.jobId, j.x, j.y)); }); table.appendToFooter('jobIcon', footer); return table; }; GoldJobs.refreshWindow = function () { GoldJobs.preferences.jobName = $('#gj_job_search_textfield').val(); var newTable = GoldJobs.makeJobsTable(GoldJobs.preferences.jobName, GoldJobs.preferences.showSilver, GoldJobs.preferences.showGold, GoldJobs.preferences.sortByName, GoldJobs.preferences.sortByDistance); $('.goldenJobs .fancytable').remove(); $('.jobwindow').prepend(newTable.getMainDiv()); GoldJobs.addColumnsCss(); GoldJobs.addFilterEvent(); GoldJobs.addHeaderEvents(); $('#gj_job_search_textfield').focus(); var val = $('#gj_job_search_textfield').val(); $('#gj_job_search_textfield').val(''); $('#gj_job_search_textfield').val(val); }; GoldJobs.addFilterEvent = function () { var f = function () { if (GoldJobs.filterTimeout != undefined) { clearTimeout(GoldJobs.filterTimeout); } GoldJobs.filterTimeout = setTimeout(function () { GoldJobs.refreshWindow(); }, 500); }; $('#gj_job_search_textfield').keypress(f); $('#gj_job_search_textfield').change(f); }; GoldJobs.addHeaderEvents = function () { $('.goldenJobs .row_head .jobName').click(function () { GoldJobs.preferences.sortByName = GoldJobs.preferences.sortByName == 1 ? - 1 : 1; GoldJobs.preferences.sortByDistance = 0; GoldJobs.refreshWindow(); }); $('.goldenJobs .row_head .distanceTime').click(function () { GoldJobs.preferences.sortByName = 0; GoldJobs.preferences.sortByDistance = GoldJobs.preferences.sortByDistance == 1 ? - 1 : 1; GoldJobs.refreshWindow(); }); }; GoldJobs.getMessageDialog = function (text, type, title) { title = title || ''; if (type == 'warning') { type = west.gui.Dialog.SYS_WARNING; } if (type == 'question') { type = west.gui.Dialog.SYS_QUESTION; } return new west.gui.Dialog(text, title, type); }; GoldJobs.getSelectBox = function () { var onLoad = function () { GoldJobs.openWindow(); GoldJobs.dataLoaded = true; }; var listener = function (k) { switch (k) { case 'feedback': GoldJobs.openFeedbackWindow(); break; case 'open': if (!GoldJobs.hasOwnProperty('tilesWithJobs')) { new UserMessage(lang.loading, UserMessage.TYPE_SUCCESS).show(); GoldJobs.getAllTiles(function () { GoldJobs.parseWholeMap(GoldJobs.tilesWithJobs, onLoad); }); } else { onLoad(); } break; case 'refresh': new UserMessage(lang.loading, UserMessage.TYPE_SUCCESS).show(); if (!GoldJobs.hasOwnProperty('tilesWithJobs')) { GoldJobs.getAllTiles(function () { GoldJobs.parseWholeMap(GoldJobs.tilesWithJobs, onLoad); }); } else { GoldJobs.parseWholeMap(GoldJobs.tilesWithJobs, onLoad); } break; } }; this.selectBox = this.gui.makeSelectbox().setWidth(150).addListener(listener).addItem('open', lang.openWindowTitle).addItem('refresh', lang.refreshTitle).addItem('feedback', lang.feedbackTitle); return this.selectBox; }; GoldJobs.toggleSelectbox = function () { var wrapPosition = GoldJobs.selectBox.divWrap.position(); var isShown = (wrapPosition.left != 0 && wrapPosition.top != 0); if (isShown) { GoldJobs.selectBox.hide(); } else { GoldJobs.selectBox.show(); } }; GoldJobs.init = function () { var selectbox = this.getSelectBox(); var div = $('
/'); var link = $(''); link.click(function () { GoldJobs.toggleSelectbox(); }); div.append(link); div.append('
'); $('#ui_menubar').append(div); this.setSelectboxPosition(div); }; GoldJobs.setSelectboxPosition = function (nextTo) { var p = $(nextTo).offset(); p.left -= GoldJobs.selectBox.divMain.width() + 150 + 15; GoldJobs.selectBox.divWrap.offset(p); GoldJobs.selectBox.divWrap.css('position', 'absolute'); }; GoldJobs.jobsDataToString = function (chosenJobName) { chosenJobName = chosenJobName.toLowerCase(); var str = ''; var jobs = Map.JobHandler.Featured; var k, jobId, job, t, j; for (k in jobs) { var jobPlace = jobs[k]; for (jobId in jobPlace) { job = JobList.getJobById(jobId); if (chosenJobName != '' && job.name.toLowerCase().indexOf(chosenJobName) < 0) continue; j = jobPlace[jobId]; t = j.gold ? 'gold' : 'silver'; str += job.name + '; ' + t + '; x: ' + j.x + '; y: ' + j.y + '\n'; } } return str; }; GoldJobs.jobsDataToBbString = function (chosenJobName) { chosenJobName = chosenJobName.toLowerCase(); var str = ''; var jobs = Map.JobHandler.Featured; var k, jobId, job, color, j; for (k in jobs) { var jobPlace = jobs[k]; for (jobId in jobPlace) { job = JobList.getJobById(jobId); if (chosenJobName != '' && job.name.toLowerCase().indexOf(chosenJobName) < 0) continue; j = jobPlace[jobId]; color = j.gold ? GoldJobs.goldJobBbColor : GoldJobs.silverJobBbColor; str += '[img]http://www.the-west.ru/images/jobs/' + job.shortname + '.png[/img][b][color=' + color + ']' + job.name + '[/color][/b] (' + j.x + '; ' + j.y + ')' + '\n'; } } return str; }; GoldJobs.showExportWindow = function (jobs, isBb) { var textarea = ''; var md = GoldJobs.getMessageDialog(lang.exportButtonTitle, '', textarea); var jobName = $('#gj_job_search_textfield').val(); if (isBb) { md.addButton(lang.plainText, function () { var jobs = GoldJobs.jobsDataToString(jobName); GoldJobs.showExportWindow(jobs + lang.generatedBy, false); }); } else { md.addButton(lang.bbCode, function () { var jobs = GoldJobs.jobsDataToBbString(jobName); GoldJobs.showExportWindow(jobs + lang.generatedByBb, true); }); } md.addButton('ok').show(); }; GoldJobs.openFeedbackWindow = function () { var content = $('
'); var win = wman.open('goldenJobsFeedback').setSize(550, 350).setMiniTitle(lang.feedbackWindowTitle).setTitle(lang.feedbackWindowTitle); content.append('
' + lang.feedbackDescription + '


' + lang.contact + ':'); win.appendToContentPane(content); }; GoldJobs.addNotification = function (title, jobId, jobX, jobY) { var n = new OnGoingEntry(); n.init('', function () { Map.JobHandler.openJob(jobId, { x: jobX, y: jobY }); }, 1); n.setTooltip('' + title + '', true); WestUi.NotiBar.add(n); var icon = JobList.getJobById(jobId).shortname; $(n.getMainDiv()).find('.image').css({ 'background-image': 'url(../images/jobs/' + icon + '.png)', 'background-position': '-11px -9px' }); }; GoldJobs.getGameVersion = function () { return TheWestApi.version; }; GoldJobs.isGameVersionSupported = function () { var gameVersion = this.getGameVersion(); return (gameVersion >= this.minGame) && (gameVersion <= this.maxGame); }; GoldJobs.gui = { }; GoldJobs.gui.init = function () { GoldJobs.gui.makeButton = function (caption, callback) { return new west.gui.Button(caption, callback); }; GoldJobs.gui.makeTextfield = function (id) { return new west.gui.Textfield(id); }; GoldJobs.gui.makeTable = function () { return new west.gui.Table(); }; GoldJobs.gui.makeSelectbox = function () { return new west.gui.Selectbox(); }; }; GoldJobs.Updater = function () { $.getScript(GoldJobs.updateUrl); }; GoldJobs.compareVersions = function (actualVersion) { if (actualVersion > GoldJobs.version) { var updateMessage = new west.gui.Dialog(lang.update + ': ' + GoldJobs.name, lang.updateAvailable + ': v' + actualVersion, west.gui.Dialog.SYS_WARNING).addButton(lang.update, function () { updateMessage.hide(); location.href = GoldJobs.website + '/code.user.js'; }).addButton(lang.cancel, function () { }).show(); } }; $(document).ready(function () { try { GoldJobs.gui.init(); GoldJobs.init(); GoldJobs.Updater(); } catch (e) { console.log(e.stack); } }); });