您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Useful tools for The West!
当前为
// ==UserScript== // @name TWLeoTools // @namespace TomRobert // @author Leotas (updated by Tom Robert) // @description Useful tools for The West! // @include https://*.the-west.*/game.php* // @include https://*.the-west.*/index.php?page=logout // @include https://www.the-west.* // @include https://beta.the-west.net* // @include http*://tw-db.info/*?strana=invent&x=* // @exclude https://classic.the-west.net* // @version 1.45.5 // @grant none // ==/UserScript== // translation:Tom Robert(German&English),Darius II/Wojcieszy(Polish),pepe100(Spanish),ruud99(Dutch),Creature/krcsirke(Hungarian),Timemod Herkumo(Greek),Elly Siranno/Raymond Reddington(Portuguese),Billy-AR(Italian) (function (fn) { var script = document.createElement('script'); script.setAttribute('type', 'application/javascript'); script.textContent = '(' + fn.toString() + ')();'; document.body.appendChild(script); document.body.removeChild(script); })(function () { if (location.href.includes('index.php?page=logout')) { location.href = '/'; } else { LTstart = { version: '1.45.5', langs: { en: { language: 'English', ApiGui1: 'This script contains many features to simplify your everyday life in The West.<br><br>More Informations: ', ApiGui2: 'Open script page', FeatLogout: 'Add a logout button on the right side', FeatStatusbar: 'Remove the taskbar', FeatShowAP: 'Show your actual skill points in job windows', FeatChangeCity: 'Switch title and player name in the town hall', FeatDuellMap: 'Add Duelmap tab in duel window', FeatMarkDaily: 'Highlight daily login bonus on day 5 to not miss it', FeatMarketTown: 'Show town name in market window', FeatMarketMessage: 'Get a message when there are items or money to pick up on actual market', FeatAchievHide: 'Hide completed achievements in achievements window', FeatRecipeMarket: 'Improve the purchase of recipes on market', FeatMoveJobs: 'Move the queued jobs a bit to the left', FeatBlinkEvents: 'Stop the blinking of the event, County Fair buttons on the left side', FeatFortTracker: 'Turn off fort battle reminder', FeatFriendsPop: 'Hide "Friend online" pop-ups', FeatInstantQuest: 'Complete the quest instantly if all requirements are done', FeatQuestWiki: 'Add a link in the quest window to show the quest on the wiki page', FeatCityTravel: 'Show the travel time to the towns in the blackboard', FeatBetterSheriff: 'Add a new tab in the sheriff window to see all possible bounties', FeatChatProfessions: 'Show the crafting profession of the players in the chat list', FeatQuestBookSearch: 'Search for solved quests in the quest book', FeatMarketRights: 'Show if market offers are public or only for alliance/town members', FeatEquipManagerPlus: 'Improve the equipment manager in the inventory', FeatShortPopups: 'Make the item pop-ups shorter', FeatHideNotis: 'Add a button to hide the job notifications on the left side', FeatJobProducts: 'Show in the job pop-up how many products you already have in your inventory', FeatMapDistance: ' Show the number of miles next to the travel time', FeatTraderSell: 'Sell multiple items at once to the trader', FeatTouchControl: 'Enable touch control on your mobile browser', settings1: 'Open settings', settings2: 'Open settings and information window', ghosttown1: 'Go to ghost town ', ghosttown2: 'Open ghost town', ghosttown3: 'Open ghost town and center it on map', indiantown1: 'Go to Indian village ', indiantown2: 'Open Indian village', indiantown3: 'Open Indian village and center it on map', openmarket: 'Open market', forum: 'Open town forum', newsets: 'New sets are added to the script', chooseItems: 'Choose the items', remindHover: 'You get a notification when an item can be used again. Here you can choose these items.', remindReady: 'Ready to collect', skipHover: 'Skip the confirmation and result messages when you open some bags. Here you can choose these bags', skipDone: 'You get', info: 'Info', contact: 'Contact', chooseLang: 'Choose language', features: 'Features', name: 'Name', author: 'Author', version: 'Version', gameversion: 'Gameversions', website: 'Website', weblink: 'Weblink', save: 'Save', saveMessage: 'Settings saved. Some changes need a refresh of the game window.', setbonus2: 'Informations about the set bonuses', frame2: 'Helpful web pages', choose: 'Click on the hat to get started', items: 'items', parts: 'parts', showItems: 'Show the set items in your Bag', noItems: 'No items in your inventory found. Click again with CTRL to show it on TW-Calc.', ownSets: 'Only own sets', switchWeapon: 'Switch between firearm and melee weapon', selectBonus: 'Select bonuses', resetB: 'Reset', body: 'Clothing', right_arm: 'Weapons', animal: 'Horse & Yield', rest: 'Other', buff: 'Buffs', refresh: 'Refresh', noFriends: 'No Friends', reward: 'Reward', allprofessions: 'All Professions', market1: 'Items on market', market2: 'There are items/money on this market. What do you want to pick up?', all: 'All', onlyBids: 'Only bids', nothing: 'Nothing', worldwide: 'Worldwide', alliance: 'Alliance', town: 'Town', level: 'Level', duelLevel: 'Duelling level', exp: 'Exp', distance: 'Distance', startduel: 'Start Duel', centerMap: 'Center map', popup: 'The opponent\'s skill bonus', damage: 'Damage', duelmap: 'Duelmap', duelradius: 'Duel radius', minutes: 'minutes', hour: '1 hour', hours: 'hours', searchOpp: 'Search for opponents', amount: 'Dead', not_dead_amount: 'Alive', duellevel: 'Lvl', status: 'Status', sortBy: 'Sort by', tooLow: 'Too low duelling level of opponent', tooHigh: 'Too high duelling level of opponent', ownTown: 'Member of your town', attackable: 'Show only attackable players', logout: 'Logout', accNfin: 'Accept & complete quest', onWiki: 'Show the quest on the wiki', longerName: 'Name must be longer than 2 characters', loading: 'Loading...', rename: 'Rename', newName: 'Choose a new set name', used: 'Used', renameWarning: 'When you rename a set, you will wear it and undress it again.<br>You may loose health points during the process!', sellItems: 'Sell items to the trader?', removeWorkNotis: 'Hide all job notifications', compInv: 'Click on "cancel" to just show only auctionable items\n or\nEnter other inventory URL to compare', loginAll1: 'Login all worlds', loginAll2: 'Load all your active worlds with one click', custom1: 'Custom', custom2: 'Your custom login list', edit: 'Edit', saveMessage2: 'Saved successfully', }, de: { language: 'German (Deutsch)', ApiGui1: 'Das Script beinhaltet verschiedene Funktionen um den Alltag bei The West zu vereinfachen.<br><br>Weitere Informationen: ', ApiGui2: 'Skriptfenster öffnen', FeatLogout: 'Erstellt einen Logout-Button rechts in der Menüleiste', FeatStatusbar: 'Entfernt die Fensterleiste mit den verschiedenen Tabs im unteren Teil', FeatShowAP: 'Zeige die Arbeitspunkte im Job-Fenster', FeatChangeCity: 'Tausche Titel und Spielername in der Stadthalle', FeatDuellMap: 'Füge im Duellfenster einen Tab hinzu, der eine Duellkarte zeigt', FeatMarkDaily: 'Markiere Täglicher Loginbonus am Tag 5 besonders, um ihn nicht zu übersehen', FeatMarketTown: 'Zeige im Marktfenster, zu welcher Stadt es gehört', FeatMarketMessage: 'Wenn du an einem Markt stehst, wo etwas abgeholt werden kann, erscheint eine Meldung', FeatAchievHide: 'Verstecke alle abgeschlossenen Erfolge im Erfolgsfenster für eine bessere Übersicht', FeatRecipeMarket: 'Verbessert den Kauf von Rezepten im Markt', FeatMoveJobs: 'Verschiebe eingestellte Arbeiten ein wenig nach links', FeatBlinkEvents: 'Das Blinken der Event-, Wanderzirkus-Buttons usw. am linken Rand entfernen', FeatFortTracker: 'Fortkampftracker abschalten', FeatFriendsPop: '"Freund online" Pop-ups deaktivieren', FeatInstantQuest: 'Schliesse die Quest sofort ab, wenn die Voraussetzungen bereits erfüllt sind', FeatQuestWiki: 'Füge im Questfenster einen Link hinzu, der die Quest im Wiki zeigt', FeatCityTravel: 'Zeige die Reisezeit zu den Städten im Blackboard-Fenster', FeatBetterSheriff: 'Erweitere den Sheriff um einen Tab, welcher alle Kopfgelder auflistet', FeatChatProfessions: 'Zeige den Handwerksberuf der Spieler in der Chatliste', FeatQuestBookSearch: 'Suche im Questbuch nach abgeschlossenen Quests', FeatMarketRights: 'Zeige ob Marktangebote öffenltich oder nur für Allianz-/Stadtmitglieder sind', FeatEquipManagerPlus: 'Erweitere den Ausrüstungsmanager im Inventar', FeatShortPopups: 'Mache die Item-Popups kompakter', FeatHideNotis: 'Blende Arbeits-Benachrichtigungen am linken Rand mit einem Klick aus', FeatJobProducts: 'Zeige bei den Arbeiten, wie viele Produkte du bereits besitzt', FeatMapDistance: 'Zeige die Entfernung in Meilen neben der Reisezeit', FeatTraderSell: 'Ermöglicht dem Fahrenden Händler mehrere Gegenstände auf einmal zu verkaufen', FeatTouchControl: 'Aktiviere Touchsteuerung im mobilen Browser', settings1: 'Einstellungen öffnen', settings2: 'Öffnet das Informations- und Einstellungsfenster', ghosttown1: 'Gehe zur Geisterstadt ', ghosttown2: 'Öffne Geisterstadt', ghosttown3: 'Öffnet das Fenster der Geisterstadt und zentriert es auf der Map', indiantown1: 'Gehe zum Indianerdorf ', indiantown2: 'Öffne Indianerdorf', indiantown3: 'Öffnet das Fenster des Indianerdorfes und zentriert es auf der Map', openmarket: 'Öffne Marktfenster', forum: 'Öffne Stadtforum', newsets: 'Dem Script wurden neue Sets hinzugefügt', chooseItems: 'Wähle die Gegenstände aus', remindHover: 'Wenn die Gegenstände bereit zum Einsammeln sind, bekommst du einen Hinweis. Hier kannst du diese Items auswählen.', remindReady: 'Bereit zum Einsammeln', skipHover: 'Überspringe die Bestätigungs- und Resultatsmeldung beim Öffnen bestimmter Taschen. Hier kannst du diese Taschen auswählen.', skipDone: 'Du bekommst', info: 'Info', contact: 'Kontakt', chooseLang: 'Sprache auswählen', features: 'Features', name: 'Name', author: 'Autor', version: 'Version', gameversion: 'Gameversionen', website: 'Webseite', weblink: 'Link', save: 'Speichern', saveMessage: 'Einstellungen gespeichert. Manche Änderungen werden erst nach Neuladen des Spiels sichtbar.', setbonus2: 'Lass dir die Boni aller Sets anzeigen', frame2: 'Hilfreiche Webseiten', choose: 'Klicke auf den Hut und wähle aus', items: 'Gegenstände', parts: 'Teile', showItems: 'Zeige die Setgegenstände in deinem Inventar', noItems: 'Keine Gegenstände im Inventar gefunden. Klicke erneut mit CTRL um sie auf TW-Calc anzuzeigen.', ownSets: 'Nur eigene Sets', switchWeapon: 'Wähle Schuss- oder Schlagwaffe', selectBonus: 'Boni auswählen', resetB: 'Zurücksetzen', body: 'Kleidung', right_arm: 'Waffen', animal: 'Pferd & Produkt', rest: 'Andere', buff: 'Buffs', refresh: 'Aktualisieren', noFriends: 'Keine Freunde', reward: 'Belohnung', allprofessions: 'Alle Berufe', market1: 'Gegenstände auf dem Markt', market2: 'Es sind noch Gegenstände/Geld auf diesem Markt. Was soll abgeholt werden?', all: 'Alles', onlyBids: 'Nur Gebote', nothing: 'Nichts', worldwide: 'Weltweit', alliance: 'Allianz', town: 'Stadt', level: 'Stufe', duelLevel: 'Duellstufe', exp: 'EP', distance: 'Distanz', startduel: 'Starte Duell', centerMap: 'Zentriere Map', popup: 'Fertigkeitenbonus des Gegners', damage: 'Schaden', duelmap: 'Duellkarte', duelradius: 'Duellradius', minutes: 'Minuten', hour: '1 Stunde', hours: 'Stunden', searchOpp: 'Duellgegner suchen', amount: 'Tot', not_dead_amount: 'Lebendig', duellevel: 'Lvl', status: 'Status', sortBy: 'Sortiere nach', tooLow: 'Zu tiefe Duellstufe des Gegners', tooHigh: 'Zu hohe Duellstufe des Gegners', ownTown: 'Mitbürger deiner Stadt', attackable: 'Zeige nur duellierbare Spieler', logout: 'Logout', accNfin: 'Quest annehmen & abschließen', onWiki: 'Zeige die Quest im Wiki', longerName: 'Name muss länger als 2 Zeichen sein', loading: 'Lädt...', rename: 'Umbenennen', newName: 'Neuer Set-Name', used: 'Benutzt', renameWarning: 'Du ziehst das Set beim Umbenennen an und wieder aus.<br>Möglicherweise verlierst du deswegen Lebenspunkte!', sellItems: 'Items dem Händler verkaufen?', removeWorkNotis: 'Entferne die Arbeits-Benachrichtigungen', compInv: 'Klicke auf "Abbrechen, um nur auktionierbare Items anzuzeigen\n oder\nFüge andere Inventar-URL ein, um zu vergleichen', loginAll1: 'Alle einloggen', loginAll2: 'Lade all deine aktiven Welten mit einem Klick', custom1: 'Eigene', custom2: 'Deine eigene Login-Liste', edit: 'Bearbeiten', saveMessage2: 'Speichern erfolgreich', }, pl: { language: 'Polish (polski)', ApiGui1: 'Skrypt ten zawiera wiele funkcji, aby uprościć codzienne życie na Zachodzie.<br><br>Więcej informacji: ', ApiGui2: 'Otwórz w nowej karcie', FeatLogout: 'Dodanie przycisku po prawej stronie, wyloguj się.', FeatStatusbar: 'Usuwa pasek z oknami w dolnej części gry.', FeatShowAP: 'Pokazuje Punkty Pracy (PP) w oknie danej pracy.', FeatChangeCity: 'Zamienia tytuł gracza na początku, w karcie graczy w ratuszu.', FeatDuellMap: 'Dodaje dodatkową zakładkę pojedynków, w pojedynkach.', FeatMarkDaily: 'Oznacza dodatkową ramką 5 dzień logowania.', FeatMarketTown: 'Dodaje nazwę miasta w karcie targu.', FeatMarketMessage: 'Jeżeli znajdujesz się w mieście gdzie coś jest do odebrania. Pojawia się komunikat.', FeatAchievHide: 'Ukrywa zaliczone osiągnięcia.', FeatRecipeMarket: 'Dodaje dodatkowe przyciski z receptami w karcie targ.', FeatMoveJobs: 'Przenieś zadania w kolejce trochę na lewo', FeatBlinkEvents: 'Zatrzymaj pulsowanie przycisków (zdarzenie, pomoce, ostrzeżenia itp) po lewej stronie', FeatFortTracker: 'Wyłącz przypomnienie o bitwie', FeatFriendsPop: 'Ukryj "Przyjaciel on-line" pop-ups', FeatInstantQuest: 'Wykonaj zadanie natychmiast, gdyby wszystkie wymagania zostały wykonane', FeatQuestWiki: 'Add a link in the quest window to show the quest on the wiki page', FeatCityTravel: 'Show the travel time to the towns in the blackboard', FeatBetterSheriff: 'Add a new tab in the sheriff window to see all possible bounties', FeatChatProfessions: 'Show the crafting profession of the players in the chat list', FeatQuestBookSearch: 'Search for solved quests in the quest book', FeatMarketRights: 'Show if market offers are public or only for alliance/town members', FeatEquipManagerPlus: 'Improve the equipment manager in the inventory', FeatShortPopups: 'Make the item pop-ups shorter', FeatHideNotis: 'Add a button to hide the job notifications on the left side', FeatJobProducts: 'Show in the job pop-up how many products you already have in your inventory', FeatMapDistance: ' Show the number of miles next to the travel time', FeatTraderSell: 'Sell multiple items at once to the trader', FeatTouchControl: 'Enable touch control for map and scrollbar on your mobile', settings1: 'Otwórz ustawienia', settings2: 'Otwiera okno ustawień oraz informacji o skrypcie.', ghosttown1: 'Idź do Miasta Widmo, dojście ', ghosttown2: 'Otwórz zadania w Mieście Widmo', ghosttown3: 'Otwiera okno z zadaniami w Mieście Widmo', indiantown1: 'Idź do Wioski Indiańskiej, dojście ', indiantown2: 'Otwórz zadania w Wiosce Indiańskiej', indiantown3: 'Otwiera okno z zadaniami w Wiosce Indiańskiej.', openmarket: 'Otwórz targ', forum: 'Otwórz forum', newsets: 'Nowe zestawy są dodawane do skryptu', chooseItems: 'Choose the items', remindHover: 'You get a notification when an item can be used again. Here you can choose these items.', remindReady: 'Ready to collect', skipHover: 'Skip the confirmation and result messages when you open some bags. Here you can choose these bags', skipDone: 'You get', info: 'Informacja', contact: 'Kontakt', chooseLang: 'Wybierz język', features: 'Ustawienia', name: 'Nazwa', author: 'Autor', version: 'Wersja', gameversion: 'Wersja gry', website: 'Strona', weblink: 'Dyskusja', save: 'Zapisz', saveMessage: 'Ustawienia zapisane. Niektóre zmiany potrzebują odświeżenia okna gry.', setbonus2: 'Informacje o ustawionych premie', frame2: 'Pomocna stron internetowych', choose: 'Kliknij na kapelusz i wybierz', items: 'przedmioty', parts: 'parts', showItems: 'Show the set items in your Bag', noItems: 'No items in your inventory found. Click again with CTRL to show it on TW-Calc.', ownSets: 'Only own sets', switchWeapon: 'Switch between firearm and melee weapon', selectBonus: 'Select bonuses', resetB: 'Reset', body: 'Clothing', right_arm: 'Weapons', animal: 'Horse & Yield', rest: 'Other', buff: 'Buffs', refresh: 'Odświeżać', noFriends: 'Brak przyjaciół', reward: 'Nagroda', allprofessions: 'Wszystko', market1: 'Przedmioty na targu', market2: 'Na tym targu znajdują się przedmioty/kasa, odebrać?', all: 'Wszystko', onlyBids: 'Tylko oferty', nothing: 'Nic', worldwide: 'Worldwide', alliance: 'Alliance', town: 'Miasto', level: 'Poziom', duelLevel: 'Poziom pojedynków', exp: 'Exp', distance: 'Odległość', startduel: 'Akcja', centerMap: 'Wyśrodkowanie', popup: 'Bonusy umiejętności przeciwnika', damage: 'Obrażenia', duelmap: 'Mapa pojedynków', duelradius: 'Zasięg', minutes: 'Minut', hour: '1 Godzina', hours: 'Godzin', searchOpp: 'Szukaj przeciwników', amount: 'Dead', not_dead_amount: 'Alive', duellevel: 'Lvl', status: 'Status', sortBy: 'Sort by', tooLow: 'Too low duelling level of opponent', tooHigh: 'Too high duelling level of opponent', ownTown: 'Member of your town', attackable: 'Show only attackable players', logout: 'Logout', accNfin: 'Przyjmij & zakończ zadanie', onWiki: 'Show the quest on the wiki', longerName: 'Name must be longer than 2 characters', loading: 'Loading...', rename: 'Rename', newName: 'Choose a new set name', used: 'Used', renameWarning: 'When you rename a set, you will wear it and undress it again.<br>You may loose health points during the process!', sellItems: 'Sell items to the trader?', removeWorkNotis: 'Hide all job notifications', compInv: 'Click on "cancel" to just show only auctionable items\n or\nEnter other inventory URL to compare', loginAll1: 'Login all worlds', loginAll2: 'Załaduj wszystkie aktywne światów za pomocą jednego kliknięcia', custom1: 'Custom', custom2: 'Your custom login list', edit: 'Edit', saveMessage2: 'Saved successfully', }, es: { language: 'Spanish (español)', ApiGui1: 'El script incluye varias funciones que simplifican la vida cotidiana en The West.<br><br>Más información: ', ApiGui2: 'Abrir ventana del script', FeatLogout: 'Crea un botón de cierre de sesión a la derecha en la barra de menús', FeatStatusbar: 'Oculta la barra inferior de las ventanas', FeatShowAP: 'Ver los puntos de trabajo en la ventana de trabajo', FeatChangeCity: 'Cambiar título y nombre del jugador en el ayuntamiento', FeatDuellMap: 'Completar la ventana de duelos con una pestaña que muestra el mapa de duelos', FeatMarkDaily: 'Marcar el Bonus-Conexión-5 Días especialmente para que no te lo pierdas', FeatMarketTown: 'Mostrar en la ventana de mercado, la ciudad al que pertenece', FeatMarketMessage: 'Si llegas a un mercado donde tienes algo que puede ser recogido, aparece un mensaj', FeatAchievHide: 'Ocultar logros completados en la ventana de logros para una mejor visión', FeatRecipeMarket: 'Mejorar la compra de recetas en el mercado', FeatMoveJobs: 'Mover los trabajos en cola un poco a la izquierda', FeatBlinkEvents: 'Detener el parpadeo de los botones de Evento y Feria de Condado en el lado izquierdo', FeatFortTracker: 'Apagar el recordatorio de Batalla de fuerte', FeatFriendsPop: 'Esconder ventana emergente de "Amigo conectado"', FeatInstantQuest: 'Completar la misión al instante si se cumplen todos los requisitos', FeatQuestWiki: 'Agregar un enlace en la ventana de búsqueda para mostrar la búsqueda en la Wiki', FeatCityTravel: 'Mostrar el tiempo de viaje a las ciudades en la pizarra', FeatBetterSheriff: 'Añadir una nueva pestaña en la ventana del sheriff para ver todas las recompensas posibles', FeatChatProfessions: 'Mostrar el oficio de los jugadores en la lista del chat', FeatQuestBookSearch: 'Buscar misiones terminadas en libro de misiones', FeatMarketRights: 'Mostrar si las ofertas de mercado son públicas o solo para los miembros de la Alianza/Ciudad', FeatEquipManagerPlus: 'Mejorar el administrador de equipos en el inventario', FeatShortPopups: 'Hacer los pop-ups de articulos más cortos', FeatHideNotis: 'Agregar un botón para ocultar las notificaciones de trabajo en el lado izquierdo', FeatJobProducts: 'Mostrar en la ventana emergente de trabajo cuántos productos tienes en tu inventario', FeatMapDistance: 'Mostrar la cantidad de millas al lado del tiempo de viaje', FeatTraderSell: 'Vender varios artículos a la vez al comerciante', FeatTouchControl: 'Habilitar el control táctil para el mapa y la barra de desplazamiento en su dispositivo móvil', settings1: 'Abrir preferencias', settings2: 'Abrir la ventana de información y ajustes', ghosttown1: 'Ir a la Ciudad Fantasma ', ghosttown2: 'Abrir Ciudad Fantasma', ghosttown3: 'Abrir la ventana de la Ciudad Fantasma y centrarla en el mapa', indiantown1: 'Ir al Pueblo Indio Waupee ', indiantown2: 'Abrir Pueblo Indio Waupee', indiantown3: 'Abrir la ventana del Pueblo Indio Waupee y centrarla en el mapa', openmarket: 'Abrir Mercado', forum: 'Abrir el foro de la ciudad', newsets: 'Nuevos conjuntos añadidos al script', chooseItems: 'Elegir los artículos', remindHover: 'Recibir una notificación cuando un artículo puede volverse a usar. Aquí puedes elegir estos artículos.', remindReady: 'Listo para recoger', skipHover: 'Omitir los mensajes de confirmación y resultado cuando abres algunas bolsas. Aquí puedes elegir estas bolsas', skipDone: 'Obtienes', info: 'Información', contact: 'Contacto', chooseLang: 'Elige idioma', features: 'Funciones', name: 'Nombre', author: 'Autor', version: 'Versión', gameversion: 'Versión Juego', website: 'Web', weblink: 'Weblink', save: 'Guardar', saveMessage: 'Ajustes guardados. Algunos cambios necesitan una actualización de la ventana de juego.', setbonus2: 'Información acerca de los bonus de conjunto', frame2: 'Páginas web votos', choose: 'Haga clic en el sombrero y elegir', items: 'artículos', parts: 'partes', showItems: 'Mostrar los artículos del conjunto en tu bolsa', noItems: '¡No se han encontrado artículos de este conjunto!', ownSets: 'Solo conjuntos propios', switchWeapon: 'Cambiar entre arma de fuego y arma contundente', selectBonus: 'Seleccionas bonus', resetB: 'Reiniciar', body: 'Ropa', right_arm: 'Armas', animal: 'Montura y Producto', rest: 'Otros', refresh: 'Actualizar', noFriends: 'Sin Amigos', reward: 'Recompensa', allprofessions: 'Todos Oficios', market1: 'Productos en el Mercado', market2: 'Todavía hay productos/dinero en el Mercado. ¿Desea recogerlos?', all: 'Todos', onlyBids: 'Solo Ofertas', nothing: 'Ninguno', worldwide: 'Mundo', alliance: 'Alianza', town: 'Ciudad', level: 'Nivel', duelLevel: 'Nivel Duelo', exp: 'Exp', distance: 'Distancia', startduel: 'Iniciar Duelo', centerMap: 'Centrar Mapa', popup: 'El bonus de habilidad del oponente', damage: 'Daño', duelmap: 'Mapa Duelos', duelradius: 'Radio duelos', minutes: 'Minutos', hour: '1 Hora', hours: 'Horas', searchOpp: 'Buscar Duelo', amount: 'Muerto', not_dead_amount: 'Vivo', duellevel: 'Niv', status: 'Estado', sortBy: 'Ordenar por', tooLow: 'Nivel de duelo del oponente demasiado bajo', tooHigh: 'Nivel de duelo del oponente demasiado alto', ownTown: 'Miembro de tu ciudad', attackable: 'Mostrar solo jugadores atacables', logout: 'Cerrar sesión', accNfin: 'Aceptar & concluir búsqueda', onWiki: 'Mostrar la búsqueda en la Wiki', longerName: 'El nombre debe tener más de 2 caracteres', loading: 'Cargando...', rename: 'Renombrar', newName: 'Elige un nuevo nombre de conjunto', used: 'Usado', renameWarning: 'Cuando renombre un conjunto, se lo pondrá y se lo quitará de nuevo.<br>¡Puede perder puntos de vida durante el proceso!', sellItems: '¿Vender artículos al comerciante?', removeWorkNotis: 'Ocultar todas las notificaciones de trabajo', compInv: 'Haga clic en "cancelar" para mostrar solo los artículos subastables \n o \n Ingrese otra URL de inventario para comparar', loginAll1: 'Conectarse a todos los mundos', loginAll2: 'Cargar todos los mundos activos con un solo click', custom1: 'Personalizar', custom2: 'Tu lista de conexión personalizada', edit: 'Editar', saveMessage2: 'Grabado con éxito', }, nl: { language: 'Dutch (Nederlands)', ApiGui1: 'Dit script bevat veel mogelijkheden om het dagelijks leven in The West te vergemakkelijken.<br><br>Voor meer informatie: ', ApiGui2: 'Open script pagina', FeatLogout: 'Voeg een afmeldknop toe aan de rechterzijde van het scherm', FeatStatusbar: 'Verwijder het dagelijkse taken icoon', FeatShowAP: 'Toon je vaardigheidspunten in werkzaamheidsscherm windows', FeatChangeCity: 'Verwissel de titel en de spelersnaam in het stadhuis', FeatDuellMap: 'Voeg een duelkaart toe aan de duel tab', FeatMarkDaily: 'Markeer de dagelijkse inlogbonus op de 5e dag zodat je hem niet mist', FeatMarketTown: 'Toon stadsnaam in marktscherm', FeatMarketMessage: 'Krijg een bericht wanneer er voorwerpen of geld beschikbaar zijn om op te halen', FeatAchievHide: 'Verberg voltooide prestaties in prestatiescherm', FeatRecipeMarket: 'Verbeter overzicht voor recepten kopen.', FeatMoveJobs: 'Verschuif de werkzaamheden in de wachtrij een stukje naar links', FeatBlinkEvents: 'Stop het knipperen van event of circus knop aan linkerkant', FeatFortTracker: 'Schakel de fortgevecht herinnering uit', FeatFriendsPop: 'Verberg “uw vriend logt in” pop-ups', FeatInstantQuest: 'Voltooi de quest direct als aan alle vereisten is gedaan', FeatQuestWiki: 'Add a link in the quest window to show the quest on the wiki page', FeatCityTravel: 'Show the travel time to the towns in the blackboard', FeatBetterSheriff: 'Add a new tab in the sheriff window to see all possible bounties', FeatChatProfessions: 'Show the crafting profession of the players in the chat list', FeatQuestBookSearch: 'Search for solved quests in the quest book', FeatMarketRights: 'Show if market offers are public or only for alliance/town members', FeatEquipManagerPlus: 'Improve the equipment manager in the inventory', FeatShortPopups: 'Make the item pop-ups shorter', FeatHideNotis: 'Add a button to hide the job notifications on the left side', FeatJobProducts: 'Show in the job pop-up how many products you already have in your inventory', FeatMapDistance: ' Show the number of miles next to the travel time', FeatTraderSell: 'Sell multiple items at once to the trader', FeatTouchControl: 'Enable touch control for map and scrollbar on your mobile', settings1: 'Instellingen openen', settings2: 'Instellingen en informatiescherm openen', ghosttown1: 'Ga naar de Spookstad ', ghosttown2: 'Open Spookstad', ghosttown3: 'Open Spookstad en centreer het op de kaart', indiantown1: 'Ga naar Waupees indianendorp ', indiantown2: 'Open Waupees indianendorp', indiantown3: 'Open Waupees indianendorp en centreer het op de kaart', openmarket: 'Open markt', forum: 'Open stadsforum', newsets: 'Nieuwe sets worden toegevoegd aan het script', chooseItems: 'Choose the items', remindHover: 'You get a notification when an item can be used again. Here you can choose these items.', remindReady: 'Ready to collect', skipHover: 'Skip the confirmation and result messages when you open some bags. Here you can choose these bags', skipDone: 'You get', info: 'Informatie', contact: 'Contact', chooseLang: 'Kies een taal', features: 'Features', name: 'Naam', author: 'Auteur', version: 'Versie', gameversion: 'Spelversies', website: 'Website', weblink: 'Link', save: 'Opslaan', saveMessage: 'Instellingen toegevoegd. Sommige veranderingen hebben behoefte aan een refresh van het spel venster.', setbonus2: 'Informatie over de set bonusen', frame2: 'Nuttige websites', choose: 'Klik op de hoed en kies', items: 'Voorwerpen', parts: 'parts', showItems: 'Show the set items in your Bag', noItems: 'No items in your inventory found. Click again with CTRL to show it on TW-Calc.', ownSets: 'Only own sets', switchWeapon: 'Switch between firearm and melee weapon', selectBonus: 'Select bonuses', resetB: 'Reset', body: 'Clothing', right_arm: 'Weapons', animal: 'Horse & Yield', rest: 'Other', buff: 'Buffs', refresh: 'Verversen', noFriends: 'Geen vrienden', reward: 'Beloning', allprofessions: 'Alle Beroepen', market1: 'Voorwerpen op de markt', market2: 'Er zijn voorpen/geld op de markt. Wat wil je eraf halen?', all: 'Alles', onlyBids: 'Alleen biedingen', nothing: 'Niets', worldwide: 'Worldwide', alliance: 'Alliance', town: 'Stad', level: 'Level', duelLevel: 'Duel level', exp: 'Ervaring', distance: 'Afstand', startduel: 'Duelleren', centerMap: 'Centreer kaart', popup: 'Vaardigheden-Bonus van de tegenstander', damage: 'Schade', duelmap: 'Duelkaart', duelradius: 'Duel radius', minutes: 'minuten', hour: '1 uur', hours: 'uren', searchOpp: 'Zoek naar tegenstanders', amount: 'Dead', not_dead_amount: 'Alive', duellevel: 'Lvl', status: 'Status', sortBy: 'Sort by', tooLow: 'Too low duelling level of opponent', tooHigh: 'Too high duelling level of opponent', ownTown: 'Member of your town', attackable: 'Show only attackable players', logout: 'Afmelden', accNfin: 'Opdracht aannemen & afsluiten', onWiki: 'Show the quest on the wiki', longerName: 'Name must be longer than 2 characters', loading: 'Loading...', rename: 'Rename', newName: 'Choose a new set name', used: 'Used', renameWarning: 'When you rename a set, you will wear it and undress it again.<br>You may loose health points during the process!', sellItems: 'Sell items to the trader?', removeWorkNotis: 'Hide all job notifications', compInv: 'Click on "cancel" to just show only auctionable items\n or\nEnter other inventory URL to compare', loginAll1: 'Login all worlds', loginAll2: 'Laad al uw actieve werelden met één klik', custom1: 'Custom', custom2: 'Your custom login list', edit: 'Edit', saveMessage2: 'Saved successfully', }, hu: { language: 'Hungarian (Magyar)', ApiGui1: 'Ez a szkript több olyan funkciót tartalmaz ami megkönnyíti a mindennapjaidat a vadnyugaton.<br><br>Több információ: ', ApiGui2: 'Szkript oldalának megnyitása', FeatLogout: 'Kilépés gomb a jobb oldalra', FeatStatusbar: 'Tálca eltüntetése', FeatShowAP: 'Valódi képességpontok a munkaablakokban', FeatChangeCity: 'Cím és játékosnév felcserélése a városházánál', FeatDuellMap: 'Párbajtérkép a párbaj ablakban', FeatMarkDaily: 'Az 5. napi belépés bónusz bekeretezése, hogy nehogy kihagyd', FeatMarketTown: 'Városnév megjelenítése a piac ablakban', FeatMarketMessage: 'Felugró ablak amikor tárgyak vagy pénz felvétele lehetséges az aktuális piacnál', FeatAchievHide: 'Befejezett események elrejtése az esemény ablakban', FeatRecipeMarket: 'Receptvásárlás megkönnyítése, rendezése a piacon', FeatMoveJobs: 'Mozgassa el a munka várólistát kissé balra hogy elférjenek az ikonok', FeatBlinkEvents: 'Események, eladás és piaci vásár gomb villogás kikapcsolása', FeatFortTracker: 'Kapcsolja ki az erődharc emlékeztetőt', FeatFriendsPop: 'Rejtse el a "barátod bejelentkezett" felugró ablakokat', FeatInstantQuest: 'Befejezni a küldetést, azonnal, ha minden feltétel kész', FeatQuestWiki: 'Link hozzáadása a kalandablakban, amin elérhető a kaland wikioldala', FeatCityTravel: 'Távolság a várostól mutatása a hirdetőtáblán', FeatBetterSheriff: 'Új lap hozzáadása a Seriff ablakban, láthatóvá téve az összes körözöttet', FeatChatProfessions: 'Mesterségek mutatása a játékosoknál a chat partnerlistánál', FeatQuestBookSearch: 'Keresés a befejezett kalandoknál a kalandkönyvben', FeatMarketRights: 'Piaci ajánlatoknál mutatása, hogy bárki számára elérhető vagy csak szövetség/város tagok számára', FeatEquipManagerPlus: 'Felszerelés kezelő ablak fejlesztése', FeatShortPopups: 'Tárgy felugró menüjének rövidítése', FeatHideNotis: 'Bal oldalon lévő munkaértesítéseket eltüntető gomb hozzáadása', FeatJobProducts: 'Munkáknál felugró menüben mutassa, mennyi terméked van már a felszerelésedben, ami az adott munkánál található', FeatMapDistance: ' Show the number of miles next to the travel time', FeatTraderSell: 'Sell multiple items at once to the trader', FeatTouchControl: 'Enable touch control for map and scrollbar on your mobile', settings1: 'Beállítások megnyitása', settings2: 'Beállítások és információk', ghosttown1: 'Menj el a Szellemvárosba ', ghosttown2: 'Szellemváros megnyitása', ghosttown3: 'Szellemváros megnyitása és ráközelítés térképen', indiantown1: 'Menj Waupee Indián falujába ', indiantown2: 'Indián falu megnyitása', indiantown3: 'Indián falu megnyitása és ráközelítés térképen', openmarket: 'Piac megnyitása', forum: 'Városfórum megnyitása', newsets: 'Új szett(ek) lettek hozzáadva a szkripthez', chooseItems: 'Válasz tárgyat', remindHover: 'Értesítést kapsz, amint egy tárgy ismét használható. Itt tudod kiválasztani melyik tárgyakról szeretnél értesítést kapni.', remindReady: 'Begyűjtésre készen áll', skipHover: 'Táskák nyitásánál megerősítő és jutalom üzenet figyelem kívül hagyása. Itt tudod kiválasztani melyik táska nyitásról ne kapj üzenetet.', skipDone: 'Ezt kapod', info: 'Információk', contact: 'Elérhetőségek', chooseLang: 'Válasszon nyelvet', features: 'Funkciók', name: 'Név', author: 'Szerző', version: 'Verzió', gameversion: 'Játékverzió', website: 'Weboldal', weblink: 'Webcím', save: 'Mentés', saveMessage: 'Beállítások elmentve. Néhány változás életbe lépéséhez frissítse a játék ablakát.', setbonus2: 'Információk a szettbónuszokról', frame2: 'Hasznos weboldalak', choose: 'Kattints a kalapra a kezdéshez, választáshoz', items: 'tárgyak', parts: 'darabok', showItems: 'Mutassa a szett tárgyakat a felszerelésedben', noItems: 'Nem található tárgy(ak) a felszerelésedben', ownSets: 'Csak a megszerzett szettek', switchWeapon: 'Váltás lőfegyver és ütőfegyver közt', selectBonus: 'Válasz bónuszt', resetB: 'Visszaállítás', body: 'Ruházat', right_arm: 'Párbajfegyver', animal: 'Állat', rest: 'Egyéb', buff: 'Buffs', refresh: 'Újratöltés', noFriends: 'Nincsenek barátok', reward: 'Díjak', allprofessions: 'Minden szakma', market1: 'Áruk a piacon', market2: 'Vannak Áruk/Pénz ezen a piacon. Mit szeretnél átvenni? ', all: 'Mindent', onlyBids: 'Árukat', nothing: 'Semmit', worldwide: 'Világ', alliance: 'Szövetség', town: 'Város', level: 'Szint', duelLevel: 'Párbajszint', exp: 'Tp', distance: 'Távolság', startduel: 'Párbaj kezdése', centerMap: 'Térkép közepére', popup: 'Az ellenfél bónusza', damage: 'Sebzés', duelmap: 'Párbajtérkép', duelradius: 'Párbaj sugár', minutes: 'perc', hour: '1 óra', hours: 'óra', searchOpp: 'Ellenfél keresése', amount: 'Halva', not_dead_amount: 'Élve', duellevel: 'Szint', status: 'Státusz', sortBy: 'Rendezés', tooLow: 'Túl alacsony a párbajszintje az ellenfélnek', tooHigh: 'Túl magas a párbajszintje az ellenfélnek', ownTown: 'Városod tagja', attackable: 'Csak a kihívható ellenfeleket mutassa', logout: 'Kijelentkezés', accNfin: 'Kaland elfogadása & lezárása', onWiki: 'Kaland mutatása a wikin', longerName: 'Névnek két karakternél hosszabbnak kell lennie', loading: 'Töltés...', rename: 'Átnevezés', newName: 'Válasz új nevet a szettnek', used: 'Használt', renameWarning: 'When you rename a set, you will wear it and undress it again.<br>You may loose health points during the process!', sellItems: 'Sell items to the trader?', removeWorkNotis: 'Összes munkaértesítés elrejtése', compInv: 'Kattints a "mégse" gombra hogy csak az árverezhető tárgyakat mutassa\n vagy\nHozzáadd egy másik táska URL címét összehasonlításként', loginAll1: 'Összes világba bejelentkezés', loginAll2: 'Betölti az összes aktív világok egyetlen kattintással', custom1: 'Egyedi', custom2: 'Egyedi bejelentkezési listád', edit: 'Szerkesztés', saveMessage2: 'Sikeres mentés', }, el: { language: 'Greek (ελληνικά)', ApiGui1: 'Αυτό το script περιέχει πολλά χαρακτηριστικά για να απλοποιήσετε την ζωή σας στο The West.<br><br>Περισσότερες πληροφορίες: ', ApiGui2: 'Ρυθμίσεις του script', FeatLogout: 'Προσθέστε ένα κουμπί αποσύνδεσης στη δεξιά πλευρά', FeatStatusbar: 'Αφαιρέστε τη γραμμή εργασιών', FeatShowAP: 'Εμφάνιση των συνολικών πόντων εργασίας στα παράθυρα εργασίας', FeatChangeCity: 'Βάλτε τον τίτλο πριν από το όνομα του παίκτη στην καρτέλα του Δημαρχείου', FeatDuellMap: 'Προσθήκη καρτέλας Duelmap στην καρτέλα μονομαχιών', FeatMarkDaily: 'Επισημάνετε το καθημερινό μπόνους σύνδεσης την 5η ημέρα για να μην το χάσετε', FeatMarketTown: 'Εμφάνιση ονόματος πόλης στο παράθυρο της αγοράς', FeatMarketMessage: 'Εμφάνιση μηνύματος όταν υπάρχουν αντικείμενα ή χρήματα στην αγορά της πόλης που μόλις ταξιδέψατε', FeatAchievHide: 'Απόκρυψη ολοκληρωμένων επιτευγμάτων στο παράθυρο επιτευγμάτων', FeatRecipeMarket: 'Βελτιώστε την αγορά συνταγών στην αγορά', FeatMoveJobs: 'Μετακινήστε την καρτέλα των τρέχουσων εργασιών λίγο προς τα αριστερά', FeatBlinkEvents: 'Σταματήστε την αναλαμπή των Εκδηλώσεων και του Λούνα Παρκ στην αριστερή πλευρά', FeatFortTracker: 'Απενεργοποιήστε την υπενθύμιση μάχης οχυρού', FeatFriendsPop: 'Απόκρυψη αναδυόμενων παραθύρων "Συνδεδεμένοι φίλοι"', FeatInstantQuest: 'Ολοκληρώστε μια αποστολή αμέσως αν πληρούνται όλες οι απαιτήσεις', FeatQuestWiki: 'Προσθήκη ενός κουμπιού στις αποστολές για την εμφάνισή τους στην σελίδα "Βοήθειας"', FeatCityTravel: 'Εμφάνιση του χρόνου ταξιδιού στις πόλεις του μαυροπίνακα', FeatBetterSheriff: 'Προσθήκη μιας νέας καρτέλας στο παράθυρο του "Σερίφη" για να δείτε όλες τις πιθανές επικυρήξεις', FeatChatProfessions: 'Προσθήκη του εικονιδίου επαγγέλματος των παικτών στη λίστα συνομιλίας (τσατ)', FeatQuestBookSearch: 'Αναζήτηση για επιλυμένες αποστολές στο βιβλίο αποστολών', FeatMarketRights: 'Προσθήκη εικονιδίου για το εάν οι προσφορές της αγοράς είναι δημόσιες ή μόνο για μέλη της συμμαχίας / πόλης', FeatEquipManagerPlus: 'Βελτιώστε τον υπεύθυνο εξοπλισμού στα αποθέματα', FeatShortPopups: 'Εμφάνιση μικρότερης περιγραφής αντικειμένων στα αποθέματα', FeatHideNotis: 'Προσθήκη ενός κουμπιού για την απόκρυψη των ειδοποιήσεων εργασίας στην αριστερή πλευρά', FeatJobProducts: 'Εμφανίστε στο αναδυόμενο παράθυρο εργασίας πόσα προϊόντα έχετε ήδη στα αποθέματά σας', FeatMapDistance: 'Εμφάνιση της απόστασης του ταξιδιού σας σε Μίλια', FeatTraderSell: 'Πώληση πολλαπλών αντικειμένων στον Έμπορο', FeatTouchControl: 'Enable touch control for map and scrollbar on your mobile', settings1: 'Ρυθμίσεις', settings2: 'Ανοίξτε τις ρυθμίσεις και το παράθυρο πληροφοριών', ghosttown1: 'Προς την Πόλη Φάντασμα ➔ ', ghosttown2: 'Άνοιγμα της Πόλης Φάντασμα', ghosttown3: 'Άνοιγμα και κεντράρισμα του χάρτη στην Πόλη Φάντασμα', indiantown1: 'Προς το Ινδιάνικο χωριό ➔ ', indiantown2: 'Άνοιγμα του Ινδιάνικου χωριού', indiantown3: 'Άνοιγμα και κεντράρισμα του χάρτη στο Ινδιάνικο χωριό', openmarket: 'Άνοιγμα της Αγοράς', forum: 'Άνοιγμα του Φόρουμ Πόλης', newsets: 'Νέα Σετ προσθέθηκαν στο script', chooseItems: 'Επιλέξτε τα αντικείμενα', remindHover: 'Λαμβάνετε μια ειδοποίηση όταν ένα αντικείμενο μπορεί να χρησιμοποιηθεί ξανά. Εδώ μπορείτε να επιλέξετε αυτά τα αντικείμενα.', remindReady: 'Έτοιμο για συλλογή', skipHover: 'Απενεργοποιήστε τα μηνύματα επιβεβαίωσης και τα αποτελέσματα όταν ανοίγετε κάποιες τσάντες. Εδώ μπορείτε να επιλέξετε αυτές τις τσάντες', skipDone: 'Παίρνετε', info: 'Πληροφορίες', contact: 'Επικοινωνία', chooseLang: 'Επιλογή γλώσσας', features: 'Χαρακτηριστικά', name: ' Όνομα παίκτη', author: 'Συντάκτης', version: 'Έκδοση', gameversion: 'Έκδοση παιχνιδιού', website: 'Ιστοσελίδα', weblink: 'Σύνδεσμος', save: 'Αποθήκευση', saveMessage: 'Οι ρυθμίσεις αποθηκεύτηκαν. Ορισμένες αλλαγές χρειάζονται μια ανανέωση του παραθύρου του παιχνιδιού.', setbonus2: 'Πληροφορίες σχετικά με τα μπόνους των Σετ', frame2: 'Χρήσιμες ιστοσελίδες', choose: 'Κάντε κλικ στο καπέλο για να ξεκινήσετε', items: 'Αντικείμενα', parts: 'Τεμάχια', showItems: 'Εμφάνιση των αντικειμένων που υπάρχουν στα αποθέματά σας', noItems: 'Δεν βρέθηκαν αντικείμενα στα αποθέματά σας!', ownSets: 'Δικά σου Σετ', switchWeapon: 'Εναλλαγή μεταξύ πυροβόλου όπλου και ξίφους όπλου', selectBonus: 'Επιλέξτε Μπόνους', resetB: 'Επαναφορά', body: 'Ένδυση', right_arm: 'Όπλο μονομαχίας', animal: 'Άλογο & σέλα', rest: 'Άλλο', buff: 'Buffs', refresh: 'Ανανέωση', noFriends: 'Δεν υπάρχουν φίλοι', reward: 'Ανταμοιβή', allprofessions: 'Όλα τα επαγγέλματα', market1: 'Αντικείμενα στην Αγορά', market2: 'Υπάρχουν αντικείμενα / χρήματα σε αυτήν την αγορά. Τι θέλετε να σηκώσετε;', all: 'Όλα', onlyBids: 'Μόνο προσφορές', nothing: 'Τίποτα', worldwide: 'Οποιονδήποτε', alliance: 'Συμμαχία', town: 'Πόλη', level: 'Επίπεδο', duelLevel: ' Επίπεδο μονομαχίας ', exp: ' Εμπειρία ', distance: ' Απόσταση ', startduel: ' Μονομαχήστε ', centerMap: 'Κεντράρισμα στον χάρτη', popup: 'Το μπόνους δεξιοτήτων των αντιπάλων', damage: 'Ζημιά', duelmap: 'Χάρτης μονομαχιών', duelradius: 'Ακτίνα μονομαχιών', minutes: 'λεπτά', hour: '1 ώρα', hours: 'ώρες', searchOpp: 'Αναζήτηση για αντιπάλους', amount: 'Νεκρός/ή', not_dead_amount: 'Ζωντανός/ή', duellevel: 'Επίπεδο', status: 'Κατάσταση', sortBy: 'Ταξινόμηση κατά', tooLow: 'Χαμηλό επίπεδο μονομαχίας του αντιπάλου', tooHigh: 'Υψηλό επίπεδο μονομαχίας του αντιπάλου', ownTown: 'Μέλος της πόλης σου', attackable: 'Εμφάνιση μόνο παίκτες που μπορείτε να μονομαχήσετε', logout: 'Αποσύνδεση', accNfin: 'Αποδοχή & Ολοκλήρωση αποστολής', onWiki: 'Εμφάνισε την αποστολή στο Wiki', longerName: 'Το όνομα πρέπει να είναι μεγαλύτερο από 2 χαρακτήρες', loading: 'Φόρτωση...', rename: 'Μετονομασία', newName: 'Επιλέξτε ένα νέο όνομα Σετ', used: 'Χρησιμοποιείται', renameWarning: 'Όταν μετονομάζετε ένα Σετ, θα το φορέσετε και θα το ξαναβγάλετε.<br>Μπορεί να χάσετε κάποιους πόντους υγείας κατά τη διάρκεια της διαδικασίας!', sellItems: 'Πώληση αντικειμένων στον Έμπορο;', removeWorkNotis: 'Απόκρυψη όλων των ειδοποιήσεων εργασιών', compInv: 'Κάντε κλικ στην επιλογή "ακύρωση" για να προβάλλετε μόνο αντικείμενα που μπορούν να πουληθούν με πλειστηριασμό\n ή\nΠροσθέστε άλλη διεύθυνση URL αποθέματος για σύγκριση', loginAll1: 'Είσοδος σε όλους', loginAll2: 'Φορτώστε όλους τους ενεργούς κόσμους σας με ένα κλικ', custom1: 'Προσαρμοσμένο', custom2: 'Η προσαρμοσμένη λίστα σας σύνδεσης', edit: 'Επεξεργασία', saveMessage2: 'Αποθηκεύτηκε με επιτυχία', }, pt: { language: 'Portuguese (português)', ApiGui1: 'Esse script foi feito para facilitar sua vida no Velho Oeste: ', ApiGui2: 'Abrir página do Script', FeatLogout: 'Adicionar botão de sair no fim dos scripts', FeatStatusbar: 'Remover a barra de tarefas', FeatShowAP: 'Mostrar seus pontos de habilidade na janela de trabalho.', FeatChangeCity: 'Mude o título e nome do jogador na cidade.', FeatDuellMap: 'Adicionar mapa de duelos na janela duelos.', FeatMarkDaily: 'Destacar bônus de login diário.', FeatMarketTown: 'Mostrar nome da cidade no mercado.', FeatMarketMessage: 'Receber notificação de itens comprados ou vendidos no mercado atual.', FeatAchievHide: 'Ocultar conquistas realizadas na janela de conquistas.', FeatRecipeMarket: 'Melhorar a compra de receitas no mercado.', FeatMoveJobs: 'Mover os trabalhos enfileirados a esquerda.', FeatBlinkEvents: 'Não piscar botões de evento ao lado esquerdo.', FeatFortTracker: 'Ocultar botão da batalha de forte.', FeatFriendsPop: 'Ocultar janela de amigos online.', FeatInstantQuest: 'Completar aventura instantâneamente quando tiver os requisitos.', FeatQuestWiki: 'Adicionar link para abrir a aventura no wiki.', FeatCityTravel: 'MOstrar o tempo de distância nas cidades do quadro.', FeatBetterSheriff: 'Adicionar aba no Xerife para ver todas as recompensas possíveis.', FeatChatProfessions: 'MOstrar a profissão dos jogadores na lista do chat.', FeatQuestBookSearch: 'Pesquisar por aventuras resolvidas no livro de aventuras', FeatMarketRights: 'Diferenciar itens no mercado entre cidade, aliança, e público.', FeatEquipManagerPlus: 'Mostre o gerenciamento de equipamento no inventário.', FeatShortPopups: 'Tornar janelas pop-up mais curtas.', FeatHideNotis: 'Adicionar botão para ocultar as notificações do trabalho ao lado esquerdo.', FeatJobProducts: 'Mostrar na janela de trabalho quantos produtos você já tem no inventário.', FeatMapDistance: ' Mostrar o número de milhas ao lado do tempo de viagem.', FeatTraderSell: 'Vender vários itens de uma só vez ao comerciante.', FeatTouchControl: 'Enable touch control for map and scrollbar on your mobile', settings1: 'Configurações', settings2: 'Configurações e Janela de Informações', ghosttown1: 'Ir para Cidade Fantasma ', ghosttown2: 'Abrir Cidade Fantasma', ghosttown3: 'Abrir Cidade Fantasma e Centralizar no Mapa', indiantown1: 'Ir para Vila Indígena ', indiantown2: 'Abrir Vila Ingígena', indiantown3: 'Abrir Vila Indígena e Centralizar no Mapa', openmarket: 'Mercado', forum: 'Fórum da Cidade', newsets: 'Novos Sets Adicionados ao Script', chooseItems: 'Escolha os Itens', remindHover: 'Receber notificação quando um item puder ser usado novamente.', remindReady: 'Pronto para recolher.', skipHover: 'Pular janelas de confirmação ao abrir algumas caixas e itens.', skipDone: 'Você ganhou:', info: 'Informação', contact: 'Contato:', chooseLang: 'Escolher Idioma', features: 'Características', name: 'Nome', author: 'Autor', version: 'Versão', gameversion: 'Versão do Game', website: 'Website', weblink: 'Weblink', save: 'Salvar', saveMessage: 'Configurações salvas. Algumas mudanças só apareceram quando atualizar a janela.', setbonus2: 'Informações sobre o bônus do set', frame2: 'Páginas da Web Úteis', choose: 'Clique no Chapéu para começar.', items: 'Itens', parts: 'Partes', showItems: 'Mostrar os itens definidos no seu saco.', noItems: 'Nenhum item no seu inventário foi encontrado. Clique novamente com a tecla CTRL para mostrar no TW-Calc.', ownSets: 'Apenas possui conjuntos.', switchWeapon: 'Alternar entre arma de fogo e arma de vigor.', selectBonus: 'Selecionar bônus', resetB: 'Resetar', body: 'Roupas', right_arm: 'Armas', animal: 'Cavalo & Sela', rest: 'Outros', buff: 'Buffs', refresh: 'Atualizar', noFriends: 'Sem Amigos', reward: 'Recompensa', allprofessions: 'Todas as Profissões', market1: 'Itens no Mercado', market2: 'Há itens e dinheiro no mercado, o que você quer recolher?', all: 'Os dois', onlyBids: 'Apenas Lance', nothing: 'Nada', worldwide: 'No mundo todo', alliance: 'Aliança', town: 'Cidade', level: 'Nível', duelLevel: 'Nivel de Duelo', exp: 'Experiência', distance: 'Distância', startduel: 'Desafiar num Duelo', centerMap: 'Centralizar Mapa', popup: 'Bônus de Habilidade do Oponente', damage: 'Danificar', duelmap: 'Mapa de Duelo', duelradius: 'Raio de Duelo', minutes: 'Minutos', hour: '1 hora', hours: 'horas', searchOpp: 'Pesquisar Oponentes', amount: 'Morto', not_dead_amount: 'Vivo', duellevel: 'Nível', status: 'Status', sortBy: 'Ordenar por:', tooLow: 'Nível de duelo muito baixo.', tooHigh: 'Nível de duelo muito alto', ownTown: 'Membro da sua Cidade', attackable: 'Mostrar apenas jogadores atacáveis', logout: 'Sair', accNfin: 'Aceitar e completar quest.', onWiki: 'Abrir quest na janela wi-ki', longerName: 'O nome deve ter mais de 2 caracteres.', loading: 'Carregando...', rename: 'Renomear', newName: 'Escolha um novo nome de conjunto', used: 'Usado', renameWarning: 'Quando você renomeia um conjunto, você vai usá-lo e despir-lo novamente.<br>Você pode perder pontos de saúde durante o processo!', sellItems: 'Vender itens para o comerciante?', removeWorkNotis: 'Ocultar todas as notificações de Jobs', compInv: 'Clique em "cancelar" para mostrar apenas itens leiloáveis\n ou\nIntroduza outro URL de inventário para comparar', loginAll1: 'Login em todos os mundos', loginAll2: 'Carregue todos os seus mundos ativos em um clique', custom1: 'Personalizado', custom2: 'Sua lista de login persnalizada', edit: 'Editar', saveMessage2: 'Salvo com sucesso!', }, it: { language: 'Italian (italiano)', ApiGui1: 'Questo script raccoglie molte funzionalità utili a semplificarti la vita in The West.<br><br>Ulteriori informazioni: ', ApiGui2: 'Apri la pagina dello script', FeatLogout: 'Aggiungi sul lato destro dello schermo un pulsante disconnetti', FeatStatusbar: 'Nascondi la barra degli incarichi', FeatShowAP: 'Mostra i tuoi attuali punti abilità nelle finestre dei lavori', FeatChangeCity: 'Nel municipio, inverti il titolo e il nome del giocatore', FeatDuellMap: 'Aggiungi la scheda Mappa duelli nella finestra Duelli', FeatMarkDaily: 'Evidenzia il bonus login del 5° giorno per non dimenticarlo', FeatMarketTown: 'Mostra il nome della città nella finestra del mercato', FeatMarketMessage: 'Ricevi una notifica quando ci sono oggetti o soldi da ritirare al mercato della città dove ti trovi in quel momento', FeatAchievHide: 'Nascondi i Successi completati nella rispettiva finestra di gioco', FeatRecipeMarket: 'Migliora l\'organizzazione delle ricette al mercato', FeatMoveJobs: 'Sposta la coda dei lavori leggermente più a sinistra', FeatBlinkEvents: 'Termina il lampeggiamento delle icone degli eventi e della fiera nella barra delle notifiche', FeatFortTracker: 'Disattiva l\'icona di notifica della battaglia al forte', FeatFriendsPop: 'Nascondi i pop-up "Amico online"', FeatInstantQuest: 'Se tutti i requisiti sono soddisfatti, permetti di concludere le missioni istantaneamente', FeatQuestWiki: 'Aggiungi un link alla wiki italiana (ove disponibile) nelle finestre delle missioni', FeatCityTravel: 'Mostra la distanza verso le città nella lavagna', FeatBetterSheriff: 'Aggiungi una nuova scheda nella finestra dello sceriffo per vedere tutte le possibili taglie', FeatChatProfessions: 'Mostra la professione a fianco del nome dei giocatori nella lista della chat', FeatQuestBookSearch: 'Aggiungi una casella di ricerca nella scheda "Completate" del libro missioni', FeatMarketRights: 'Mostra se le offerte del mercato sono pubbliche oppure per alleati\concittadini', FeatEquipManagerPlus: 'Migliora la finestra "Gestione equipaggiamento" nell\'inventario', FeatShortPopups: 'Rendi i tooltip degli oggetti più corti', FeatHideNotis: 'Aggiungi un pulsante per nascondere le notifiche dei lavori nella relativa barra', FeatJobProducts: 'Nel tooltip dei prodotti mostra quanti se ne possiede in inventario', FeatMapDistance: 'Mostra la distanza in miglia accanto al tempo di viaggio', FeatTraderSell: 'Consenti di vendere oggetti in quantità multipla ai negozi\mercante ambulante', FeatTouchControl: 'Abilità il controllo touch nel browser mobile', settings1: 'Apri le impostazioni', settings2: 'Apri le impostazioni e la finestra di informazioni', ghosttown1: 'Vai alla Città fantasma', ghosttown2: 'Apri la Città Fantasma', ghosttown3: 'Apri la Città Fantasma e centra la mappa', indiantown1: 'Vai al Villaggio Indiano', indiantown2: 'Apri il Villaggio Indiano', indiantown3: 'Apri il Villaggio Indiano e centra la mappa', openmarket: 'Apri il mercato', forum: 'Apri il forum città', newsets: 'Nuovi set sono stati aggiunti allo script', chooseItems: 'Scegli gli oggetti', remindHover: 'Ricevi una notifica quando un oggetto può essere di nuovo utilizzato. Scegli qui gli oggetti di interesse.', remindReady: 'Pronto per essere collezionato', skipHover: 'Salta i messaggi di conferma e risultato quando apri alcuni oggetti. Scegli qui gli oggetti di interesse', skipDone: 'Ottieni', info: 'Informazioni', contact: 'Contatti', chooseLang: 'Scegli lingua', features: 'Caratteristiche', name: 'Nome', author: 'Autore', version: 'Versione', gameversion: 'Versione di gioco', website: 'Sito internet', weblink: 'Link al sito', save: 'Salva', saveMessage: 'Impostazioni salvate. Aggiorna la pagina per renderle effettive.', setbonus2: 'Informazioni sui bonus set', frame2: 'Pagine internet di aiuto', choose: 'Clicca sul cappello per iniziare', items: 'oggetti', parts: 'parti', showItems: 'Mostra i set oggetti nel tuo inventario', noItems: 'Nessun oggetto trovato nel tuo inventario. Cliccaci nuovamente tenendo premuto CTRL per mostrarlo su TW-Calc.', ownSets: 'Solo propri set', switchWeapon: 'Inverti armi da fuoco e da contusione', selectBonus: 'Scegli i bonus', resetB: 'Reset', body: 'Abiti', right_arm: 'Armi', animal: 'Cavallo e oggetto', rest: 'Altro', buff: 'Buffs', refresh: 'Aggiorna', noFriends: 'Nessun amico', reward: 'Ricompensa', allprofessions: 'Tutte le professioni', market1: 'Oggetti al mercato', market2: 'Ci sono oggetti/soldi da ritirare in questo mercato. Vuoi farlo?', all: 'Tutto', onlyBids: 'Solo aste', nothing: 'Niente', worldwide: 'Mondiale', alliance: 'Alleanza', town: 'Città', level: 'Livello', duelLevel: 'Livello duello', exp: 'Esperienza', distance: 'Distanza', startduel: 'Inizia duello', centerMap: 'Centra mappa', popup: 'Abilità bonus dell\'avversario', damage: 'Danno', duelmap: 'Mappa duelli', duelradius: 'Raggio duelli', minutes: 'minuti', hour: '1 ora', hours: 'ore', searchOpp: 'Cerca avversari', amount: 'Morto', not_dead_amount: 'Vivo', duellevel: 'Liv', status: 'Stato', sortBy: 'Ordina per', tooLow: 'Livello duello avversario troppo basso', tooHigh: 'Livello duello avversario troppo alto', ownTown: 'Membro della tua città', attackable: 'Mostra solo i giocatori duellabili', logout: 'Disconneti', accNfin: 'Accetta e completa missione', onWiki: 'Mostra la missione nella Wiki', longerName: 'Il nome deve essere più lungo di 2 caratteri', loading: 'Caricamento...', rename: 'Rinomina', newName: 'Scegli un nuovo nome set', used: 'Usato', renameWarning: 'Quando rinomini un set lo indosserai e svestirai di nuovo.<br>In questo processo potresti perdere dei punti vita!', sellItems: 'Vuoi vendere questi oggetti?', removeWorkNotis: 'Nascondi tutte le notifiche dei lavori', compInv: 'Clicca su "cancella" per mostrare solo gli oggetti vendibili all\'asta\n oppure\nInserisci altro URL di inventari per confrontare', loginAll1: 'Fai login in tutti i mondi', loginAll2: 'Carica tutti i mondi in cui sei attivo con un clic', custom1: 'Personalizza', custom2: 'La tua lista login personalizzata', edit: 'Modifica', saveMessage2: 'Salvato con successo', }, }, Images: function (img, file) { return 'https://tomrobert.safe-ws.de/' + img + (file ? '.jpg' : '.png'); }, }; if (location.href.includes('game.php')) { LT = { name: 'TWLeoTools', author: 'Leotas (updated by Tom Robert)', minGame: '2.04', maxGame: Game.version.toString(), website: 'https://greatest.deepsurf.us/scripts/7238', updateUrl: 'https://tomrobert.safe-ws.de/sUp.js', updateAd: 'http://adf.ly/1OMM8P', SPEC: [ 'speed', 'luck', 'dollar', 'experience', 'regen', 'drop', ], list: null, currSetBonus: 0, currBonusSearch: '', lvlToggle: 0, setAbc: false, onlyOwnSets: false, chooseBonus: { subWeapon: 'hand' }, Data: {}, loaded: [], Features: { Logout: false, Statusbar: false, ShowAP: false, ChangeCity: false, DuellMap: true, MarkDaily: true, MarketMessage: true, MarketTown: true, AchievHide: true, RecipeMarket: true, MoveJobs: true, BlinkEvents: false, FortTracker: false, FriendsPop: false, InstantQuest: true, QuestWiki: true, CityTravel: true, BetterSheriff: true, ChatProfessions: true, QuestBookSearch: true, MarketRights: true, EquipManagerPlus: true, ShortPopups: true, HideNotis: true, JobProducts: true, MapDistance: true, TraderSell: true, TouchControl: true, }, cooldown: { 2482: 1, 2484: 1, 2485: 1, 2557: 1, 2558: 1, 2665: 1, 2666: 1, 2698: 1, 50691: 1, 51482: 1, 51483: 1, }, cooldownTimer: {}, cooldownSetTime: function (y, res, sec) { LT.cooldownTimer[y] = setTimeout(function () { var imgs = $('<span></span>'); for (var z = 0; z < res.length; z++) { var itemDiv = new tw2widget.JobItem(res[z].obj).getMainDiv(); imgs.append(itemDiv); } var cooldownMsg = new west.gui.Dialog(LTlang.remindReady, imgs, 'ok').addButton('ok', function () { Wear.open(); Inventory.showSearchResult(res); cooldownMsg.hide(); LT.cooldownTimer[y] = 0; }).addButton('cancel').show(); }, sec); }, skipOpen: { 1975: 1, 2561: 0.5, 2562: 0.5, 2675: 0.5, }, addStyle: function (css) { var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; document.body.appendChild(style); }, updateLang: function () { var lg = LTstart.langs; LT.lang = lg[localStorage.getItem('scriptsLang')] ? localStorage.getItem('scriptsLang') : lg[Game.locale.substr(0, 2)] ? Game.locale.substr(0, 2) : 'en'; LTlang = lg[LT.lang]; }, }; LT.updateLang(); LT.Skript = { init: function () { TheWestApi.register('LeoTools', LT.name, LT.minGame, LT.maxGame, LT.author, LT.website).setGui('<br>' + LTlang.ApiGui1 + '<a href="javascript:LT.GUI.open(\'openKontakt\');LT.GUI.makeList();" title="' + LTlang.ApiGui2 + '">' + LTlang.ApiGui2 + '</a><br><br><i>' + LT.name + ' v' + LTstart.version + '</i>'); var menuContainer = $('<div id="LT-menu" class="menulink" onclick="LT.GUI.openSelectbox();" title="' + LT.name + '" />').css('background-image', 'url(' + LTstart.Images('LT_settings') + ')').css('background-position', '0px 0px').mouseenter(function () { $(this).css('background-position', '-25px 0px'); }).mouseleave(function () { $(this).css('background-position', '0px 0px'); }); $('#ui_menubar').append($('<div class="ui_menucontainer" />').append(menuContainer).append('<div class="menucontainer_bottom" />')); LT.Skript.updateFeat(); LT.SkipOpen(); }, updateFeat: function () { var saved = localStorage.getItem('TWLT'); LT.Data = saved && saved.indexOf('{') === 0 && JSON.parse(saved) || {}; for (var k in LT.Features) { if (LT.Skript.getFeature(k) && !LT.loaded.includes(k)) { try { LT.loaded.push(k); LT[k].init(); } catch (e) {} } } LT.CollectReminder(); }, getFeature: function (name) { return (LT.Data[name] !== undefined) ? LT.Data[name] : LT.Features[name]; }, }; Map.getLastQueuePosition = function () { var posx = Character.position.x; var posy = Character.position.y; if (TaskQueue.queue.length >= 1) { var data = TaskQueue.queue[TaskQueue.queue.length - 1].wayData; if (data.x) { posx = data.x; posy = data.y; } } return { x: posx, y: posy }; }; var EvName = Object.keys(Game.sesData)[0], set1 = west.storage.ItemSetManager._setList; if (EvName) var sendGift = Game.sesData[EvName].friendsbar; LT.GUI = { openSelectbox: function () { LT.GUI.makeList(); var selectbox = new west.gui.Selectbox(); $(selectbox.getMainDiv()).append('<div class="LTselbox"/>'); selectbox.setHeader(LT.name); selectbox.setWidth(300); selectbox.addItem(0, LTlang.settings1, LTlang.settings2); selectbox.addItem(1, 'SetBonus', LTlang.setbonus2); selectbox.addItem(2, 'BonusSearch', LTlang.setbonus2); selectbox.addItem(3, 'WebCenter', LTlang.frame2); selectbox.addItem(4, LTlang.ghosttown1 + Map.calcWayTime(Map.getLastQueuePosition(), { x: 1728, y: 2081 }).formatDuration(), LTlang.ghosttown1); selectbox.addItem(5, LTlang.ghosttown2, LTlang.ghosttown3); selectbox.addItem(6, LTlang.indiantown1 + Map.calcWayTime(Map.getLastQueuePosition(), { x: 28002, y: 16658 }).formatDuration(), LTlang.indiantown1); selectbox.addItem(7, LTlang.indiantown2, LTlang.indiantown3); selectbox.addItem(8, LTlang.openmarket, LTlang.openmarket); selectbox.addItem(9, LTlang.forum, LTlang.forum); if (EvName) { selectbox.addItem(10, '<div style="text-overflow:ellipsis; white-space:nowrap; overflow:hidden;"><b>' + sendGift.label + '</b></div>', sendGift.label); } selectbox.addListener(function (e) { switch (e) { case 0: LT.GUI.open('openFeatures'); break; case 1: LT.GUI.open('openSetsWindow', 0, 'SetBonus'); break; case 2: LT.GUI.open('openSetsWindow', 0, 'BonusSearch'); break; case 3: LT.GUI.open('openFrame'); break; case 4: QuestEmployerWindow.startWalk({ key: 'ghosttown', x: '1728', y: '2081' }); break; case 5: Map.center(1728, 2081); QuestEmployerWindow.showEmployer('ghosttown', '1728', '2081'); break; case 6: QuestEmployerWindow.startWalk({ key: 'indianvillage', x: '28002', y: '16658' }); break; case 7: Map.center(28002, 16658); QuestEmployerWindow.showEmployer('indianvillage', '28002', '16658'); break; case 8: MarketWindow.open(Character.homeTown.town_id); break; case 9: ForumWindow.open(); break; case 10: LT.GUI.open('openSender'); break; } }); var pos = $('div#LT-menu').offset(); pos = { clientX: pos.left, clientY: pos.top }; selectbox.show(pos); }, window: {}, checkbox: {}, open: function (tab, data, id) { LT.GUI.window = wman.open('LT', 'TheWest - LeoTools', 'noreload').setMiniTitle(LT.name).setMaxSize(1268, 838).addTab(LTlang.info + ' & ' + LTlang.contact, 'LTContact', LT.GUI.openKontakt).addTab(LTlang.features, 'LTFeatures', LT.GUI.openFeatures).addTab('SetBonus', 'SetBonus', LT.GUI.openSetsWindow).addTab('BonusSearch', 'BonusSearch', LT.GUI.openSetsWindow).addTab('WebCenter', 'LTFrame', LT.GUI.openFrame); if (EvName) LT.GUI.window.addTab('Event', 'LTSender', LT.GUI.openSender); LT.GUI[tab](data, id); $('.tw2gui_window_inset', LT.GUI.window.getMainDiv()).css('background-image', 'url(' + LTstart.Images('LT_backGr', 1) + ')'); }, getDefault: function (tab) { LT.GUI.window.setResizeable(false).setSize(748, 471).clearContentPane().removeClass('nocloseall').setTitle('TheWest - LeoTools'); LT.GUI.window.dontCloseAll = false; $(LT.GUI.window.getContentPane()).css('margin-top', '0px'); var wnd = LT.GUI.window.getMainDiv(); $('.textart_title', wnd).css('display', ''); LT.GUI.window.activateTab(tab); }, openKontakt: function () { LT.GUI.getDefault('LTContact'); var fmfb = function (l) { return 'https://forum.the-west.' + l + '/index.php?conversations/add&to=Tom Robert'; }, content = $('<br><h1>' + LTlang.info + '</h1><ul style="list-style-type:none;line-height:18px;margin-left:5px;"><li><b>' + LTlang.name + ': </b>' + LT.name + '</li><li><b>' + LTlang.author + ': </b>' + LT.author + '</li><li><b>' + LTlang.version + ': </b>' + LTstart.version + '</li><li><b>' + LTlang.gameversion + ': </b>' + LT.minGame + ' - ' + LT.maxGame + '</li><li><b>' + LTlang.website + ': </b>' + '<a href="' + LT.website + '" target="_blank">' + LTlang.weblink + '</a></li></ul>' + '<br><h1>' + LTlang.contact + '</h1><ul style="margin-left:15px;line-height:18px;"><li>Send a message to <a target=\'_blanck\' href="http://om.the-west.de/west/de/player/?ref=west_invite_linkrl&player_id=647936&world_id=13&hash=7dda">Tom Robert on German world Arizona</a></li>' + '<li>Contact me on <a target=\'_blanck\' href="https://greatest.deepsurf.us/forum/messages/add/Tom Robert">Greasy Fork</a></li>' + '<li>Message me on one of these The West Forum:<br>/ <a target=\'_blanck\' href="' + fmfb('de') + '">deutsches Forum</a> / ' + '<a target=\'_blanck\' href="' + fmfb('net') + '">English forum</a> / <a target=\'_blanck\' href="' + fmfb('pl') + '">forum polski</a> / ' + '<a target=\'_blanck\' href="' + fmfb('es') + '">foro español</a> /<br>/ <a target=\'_blanck\' href="' + fmfb('ru') + '">Русский форум</a> / ' + '<a target=\'_blanck\' href="' + fmfb('fr') + '">forum français</a> / <a target=\'_blanck\' href="' + fmfb('it') + '">forum italiano</a> / ' + '<a target=\'_blanck\' href="https://forum.beta.the-west.net/index.php?conversations/add&to=Tom Robert">beta forum</a> /<br>I will get an e-mail when you sent me the message <img src="images/chat/emoticons/smile.png"></li></ul>'); LT.GUI.window.appendToContentPane(content); }, openFeatures: function () { LT.GUI.getDefault('LTFeatures'); var featScroll = new west.gui.Scrollpane().appendContent('<h2>' + LTlang.chooseLang + '</h2>'), langBox = new west.gui.Combobox().appendTo(featScroll.getContentPane()); for (var j in LTstart.langs) langBox.addItem(j, LTstart.langs[j].language); langBox.select(LT.lang); LT.cdTemp = LT.Data.cooldown ? $.extend({}, LT.Data.cooldown) : $.extend({}, LT.cooldown); $('<span title="' + LTlang.remindHover + '" style="background-image: url(images/items/yield/low_heart_container.png); cursor: pointer; position: absolute; height: 73px; width: 73px; right: 0px; top: 0px;"/>').appendTo(featScroll.getContentPane()).click(function () { var cont = $('<span>'); for (var x in LT.cooldown) { var productDiv = new tw2widget.JobItem(ItemManager.getByBaseId(x)).getMainDiv(); $(productDiv).css('opacity', LT.cdTemp[x] || LT.cooldown[x]).attr('onclick', 'LT.cdTemp[' + x + ']=$(this).css("opacity")==1?0.5:1;$(this).css("opacity",LT.cdTemp[' + x + ']);'); cont.append(productDiv); } new west.gui.Dialog(LTlang.chooseItems, cont).addButton('ok').show(); }); LT.skipTemp = LT.Data.skipOpen ? $.extend({}, LT.Data.skipOpen) : $.extend({}, LT.skipOpen); var openSkipList = function () { var cont2 = $('<span></span>'); for (var x in LT.skipTemp) { var productDiv2 = new tw2widget.JobItem(ItemManager.getByBaseId(x)).getMainDiv(), productDel = new west.gui.Icon('abort ' + x).getMainDiv().click(function (e) { e.stopPropagation(); e.target.parentElement.remove(); delete LT.skipTemp[e.target.classList[2]]; }); $(productDel).css({ 'display': 'inline-block', 'position': 'absolute', 'right': '0px' }); $(productDiv2).css('opacity', LT.skipTemp[x]).attr('onclick', 'LT.skipTemp[' + x + ']=$(this).css("opacity")==1?0.5:1;$(this).css("opacity",LT.skipTemp[' + x + ']);').append(productDel); cont2.append(productDiv2); } var itemPrew = $('<div id="LT_add_chest_prew" style="height:73px;width:73px;border:1px solid;border-radius:10px;float:left"/><br>'); var textFP = new west.gui.Textfield('add_skipOpen_chest').maxlength(6).setPlaceholder('item_base_id').addKeyUpListener(function (e) { $('#LT_add_chest_prew').empty(); iconP.disable(); var val = e.target.value; if (!isNaN(val) && val < forbid.maxID) { var item = ItemManager.getByBaseId(val); if (item) { $('#LT_add_chest_prew').append(new tw2widget.JobItem(item).getMainDiv()); if (item.usebonus && item.usebonus.length == 1 && item.action.split(',')[2] == "'yield');" && !LT.skipTemp[val]) iconP.enable(); } } }), iconP = new west.gui.Iconbutton(new west.gui.Icon('plus'), function () { LT.skipTemp[textFP.getValue()] = 1; skipList.hide(); openSkipList(); }).disable(), iconA = new west.gui.Icon('abort').getMainDiv().click(function () { textFP.setValue(''); $('#LT_add_chest_prew').empty(); iconP.disable(); }); cont2.append(itemPrew, textFP.getMainDiv(), iconP.getMainDiv(), iconA); var skipList = new west.gui.Dialog(LTlang.chooseItems, cont2).setBlockGame(false).setDraggable(true).addButton('ok').show(); }; $('<span title="' + LTlang.skipHover + '" style="background-image: url(images/items/yield/productchest_1.png); cursor: pointer; position: absolute; height: 73px; width: 73px; right: 0px; top: 73px;"/>').appendTo(featScroll.getContentPane()).click(openSkipList); featScroll.appendContent('<br><br><h2>' + LTlang.features + '</h2>'); for (var k in LT.Features) { LT.GUI.checkbox[k] = new west.gui.Checkbox().setLabel(LTlang['Feat' + k]).setSelected(LT.Skript.getFeature(k)).appendTo(featScroll.getContentPane()); featScroll.appendContent('<br><div style="height:5px;" />'); } featScroll.appendContent('<br>'); $(featScroll.getMainDiv()).css({ 'height': '330px', 'margin-top': '10px' }); var button = new west.gui.Button(LTlang.save, function () { localStorage.setItem('scriptsLang', langBox.getValue()); LT.updateLang(); for (var k in LT.GUI.checkbox) LT.Data[k] = LT.GUI.checkbox[k].isSelected(); LT.Data.cooldown = LT.cdTemp; LT.Data.skipOpen = LT.skipTemp; localStorage.setItem('TWLT', JSON.stringify(LT.Data)); LT.Skript.updateFeat(); new UserMessage(LTlang.saveMessage, 'success').show(); }); $(LT.GUI.window.getContentPane()).append(featScroll.getMainDiv()).append(button.getMainDiv()); }, makeList: function () { if (!LT.list) $.getScript('https://tomrobert.safe-ws.de/forbidN.js').done(function () { LT.list = west.storage.ItemSetManager._setArray.slice(0); LT.setListAll = {}; LT.setListOwn = {}; LT.itemListAll = {}; LT.itemListOwn = {}; var slot = { 2: ['animal', 'yield'], 3: ['right_arm', 'left_arm'], 6: ['body', 'pants', 'neck', 'head', 'foot', 'belt'] }; var i = LT.list.length; while (i--) { var si = LT.list[i]; if (!forbid.sets.includes(si.key) && si.items[0] && !ItemManager.getByBaseId(si.items[0]).short.includes('friendset_') && !si.key.includes('friendship_set_')) LT.setListAll[si.key] = si; else LT.list.splice(i, 1); } LT.setLength = Object.keys(LT.setListAll).length; for (var j in LT.setListAll) { var sa = LT.setListAll[j]; //sa.items.sort((a, b) => a - b); var sil = sa.items.length; sa.slots = slot[sil] && slot[sil].includes(ItemManager.getByBaseId(sa.items[1]).type) ? slot[sil][0] : 'rest'; var items = sa.getAvailableItems(); if (items.length) { var bon = {}, oneType = []; for (var o = 0; o < items.length; o++) { var igt = ItemManager.get(items[o]); items[o] = igt.item_base_id; if (sa.bonus[o + 1] && !oneType.includes(igt.type)) bon[o + 1] = sa.bonus[o + 1]; oneType.push(igt.type); } LT.setListOwn[j] = { items: items.reverse(), bonus: bon, name: sa.name, slots: sa.slots, }; } } var replUml = function (str) { return str.toUpperCase().replace(/"/g, '').replace(/Á/g, 'A').replace(/É/g, 'E').replace(/Ő/g, 'O').replace(/Ú|Ü|Ű/g, 'U').replace(/Ś/g, 'S'); }; LT.list.sort(function (a, b) { var a1 = replUml(a.name), b1 = replUml(b.name); return (a1 == b1) ? 0 : (a1 > b1) ? 1 : -1; }); var buffDesc = function (umt) { return umt.match(/[^%-:]+/)[0].trim(); }, useboni = {}, ammobelt = 2741, ghostmusic = 2732, lantern = 2734, moneyboost = 2468, ratatou = 51127, cocktail = 51579, getBuff = function (itm, num) { return buffDesc(ItemManager.getByBaseId(itm).usebonus[num]); }; useboni[getBuff(ammobelt, 2)] = 'offense'; useboni[getBuff(ammobelt, 1)] = 'defense'; useboni[getBuff(ghostmusic, 0)] = 'experience'; useboni[getBuff(moneyboost, 0)] = 'dollar'; useboni[getBuff(ratatou, 0)] = 'luck'; useboni[getBuff(ratatou, 1)] = 'drop'; useboni[getBuff(ghostmusic, 1)] = 'joball'; useboni[getBuff(lantern, 0)] = 'speed'; useboni[getBuff(cocktail, 0)] = 'regen'; for (var kn in CharacterSkills.keyNames) useboni[CharacterSkills.keyNames[kn]] = kn; var addItems = function (obj, state) { var ob = obj.bonus, boni = { 1: ob.item.slice() }, slot = 'item'; if (obj.usebonus) { slot = 'buff'; for (var oub of obj.usebonus) { if (!oub) continue; var desc = buffDesc(oub); if (useboni[desc]) boni[1].push({ name: useboni[desc], value: oub.match(/\d+/)[0], }); } } else for (var cat in ob) { if (cat == 'item') continue; for (var type in ob[cat]) { var ct = ob[cat][type]; if (ct > 0) { boni[1].push({ name: type, value: ct, isSector: cat == 'fortbattlesector', leveled: obj.item_level > 0 }); } } } LT['itemList' + state][obj.item_base_id] = { bonus: boni, name: obj.name, slots: slot, pos: obj.type, item_level: obj.item_level, }; }; var allItems = ItemManager.getAll(); for (var k in allItems) if (k > 9 && k < forbid.maxID && !forbid.IDs.includes(k) && !(allItems[k].set && !LT.setListAll[allItems[k].set])) addItems(allItems[k], 'All'); for (var l in Bag.items_by_id) if (!forbid.IDs.includes(k)) addItems(Bag.items_by_id[l].obj, 'Own'); for (var m in Wear.wear) addItems(Wear.wear[m].obj, 'Own'); var collect = set1.collector_set.bonus[9], //pray pilg = set1.set_pilgrim_male.bonus[2], //build lee = set1.set_oktoberfest_2016_1.bonus[6], //offenstrue hero = set1.independance_event_set7.bonus[2], //drop delChar = function (list) { return list.desc.replace(/[0-9]|\+|\.|\%/g, '').substring(1); }; LT.searchObj = { offense: [delChar(collect[5]), 'fort/battle/button_attack'], offensetrue: [delChar(lee[4]), 'fort/battle/help01'], defense: [delChar(hero[13]), 'fort/battle/button_defend'], defensetrue: [delChar(collect[6]), 'fort/battle/help02'], resistance: [delChar(hero[15]), 'fort/battle/resistance'], //damage: ['weapon damage', 'items/left_arm/golden_rifle'], damagetrue: [delChar(collect[7]), 'items/left_arm/golden_rifle'], experience: [delChar(hero[10]), 'items/yield/xp_boost', '<br>'], dollar: [delChar(hero[11]), 'items/yield/dollar_boost'], luck: [delChar(collect[2]), 'items/yield/luck_boost'], drop: [delChar(hero[9]), 'items/yield/product_boost'], joball: [delChar(collect[0]), 'window/job/jobstar_small_gold'], speed: [delChar(collect[1]), 'jobs/walk'], regen: [delChar(collect[3]), 'jobs/sleep'], pray: [delChar(collect[4]), 'jobs/pray'], job1000: [delChar(pilg[0]), 'jobs/build'], }; for (var ca = 0; ca < CharacterSkills.allSkillKeys.length; ca++) { if (ca % 5 === 0) { var attr = CharacterSkills.allAttrKeys[ca / 5]; LT.searchObj[attr] = [CharacterSkills.keyNames[attr], 'window/skills/circle_' + attr, ca % 10 === 0 ? '<br>' : '']; } var skill = CharacterSkills.allSkillKeys[ca]; LT.searchObj[skill] = [CharacterSkills.keyNames[skill], 'window/skills/skillicon_' + skill]; } if (!localStorage.getItem('TWLTdate') || Date.parse(forbid.date) > Date.parse(localStorage.getItem('TWLTdate'))) { var setNames = '', nSets = forbid.unlock; for (var h of nSets) setNames += LT.GUI.getSetOrItem(h, set1[h]) + '<br>'; new west.gui.Dialog(LT.name, '<span><b>' + forbid.date.toDateString() + '</b><br>' + LTlang.newsets + ':<br><br>' + setNames + '</span>', west.gui.Dialog.SYS_OK).setBlockGame(false).setDraggable(true).addButton('ok').show(); localStorage.setItem('TWLTdate', forbid.date); } }); }, itemsInInv: function (id) { var upgrade = isNaN(id) ? LT.currList[id].items : [id], items = []; for (var g of upgrade) { for (var h = 0; h <= 5; h++) { items.push(g * 1000 + h); } } var invItems = Bag.getItemsByItemIds(items); if (invItems.length > 0) { Wear.open(); Inventory.showCustomItems(invItems); } else new UserMessage(LTlang.noItems, 'hint').show(); }, getSetOrItem: function (id, obj, nolink) { if (!obj) return id; var isItem = !isNaN(id), nNew = window.forbid && (isItem && id >= forbid.unlockID || !isItem && forbid.unlock.includes(id)) ? '<img src="' + LTstart.Images('new') + '">' : '', nLvl = obj.item_level ? '<img src="images/items/item_level.png"><span style="font-size: 11px;color:#ffffff;text-shadow:black -1px 0 1px,black 0 1px 1px,black 1px 0 1px,black 0 -1px 1px;">' + obj.item_level + '</span>' : '', options = { show_alreadyown: true }; if (LT.lvlToggle) options.character = { level: LT.lvlToggle }; var nPopup = 'data-setkey="' + id + '"', click = 'onclick="LT.GUI.itemsInInv(\'' + id + '\')"', img = ''; if (isItem) { var itemId = id + '00' + obj.item_level, item = ItemManager.get(itemId); nPopup = 'data-itemid="' + itemId + '" title="' + (new ItemPopup(item, options).getXHTML().escapeHTML()) + '"'; img = '<img src="' + item.image + '" width="25">'; } else if (LT.GUI.window.currentActiveTabId == 'SetBonus') nPopup += 'title="' + LTlang.showItems + '" style="color:#FFE7B1;"'; else click = 'onclick="LT.GUI.open(\'openSetsWindow\',\'' + id + '\',\'SetBonus\')"'; if (nolink) click = ''; return '<b><span class="linklike" ' + nPopup + click + '>' + nNew + img + nLvl + obj.name + '</span></b>'; }, newState: '', html: {}, openSetsWindow: function (st, tab) { LT.GUI.getDefault(tab); LT.GUI.window.setTitle(tab); var newSet = false; if (typeof st === 'string') { newSet = true; LT['curr' + tab] = st; } var scrollpane = new west.gui.Scrollpane('LTSetsWindow'); $(scrollpane.getMainDiv()).css({ 'margin-left': '120px', 'margin-top': '10px', 'width': '578px' }); var lvlUp = function (level, value) { var ret = !level ? 0 : value < 1 ? Math.round(Math.max(1, value * 1000 * level)) / 10000 : Math.round(Math.max(1, value * 0.1 * level)); return value + ret; }, charLvl = Character.level, getBonImg = function (n, w) { var son = LT.searchObj[n] || JobList.getJobById(n.slice(3)); return '<img src="images/' + (son[1] || 'jobs/' + son.shortname) + '.png" width="' + w + '" title="' + (son[0] || son.name) + '">'; }, types = {}, perL = set1.instance_set_1.bonus[2][0].desc.match(/\(.*?\)/)[0], compare = function (sets, id) { for (var i in sets) { var si = sets[i]; for (var k in si.bonus) for (var ID of si.bonus[k]) { var ib = ID.bonus || ID; var NAM = (ib.name || ib.type) + (ib.job || ib.isSector || ''); if (id[NAM]) { if (!types[i]) { types[i] = { desc: (LT.SPEC.includes(NAM) ? '% ' : ' ') + (ID.key && !LT.lvlToggle ? perL : ''), value: {}, values: {}, compVal: { sum: 0 }, slots: si.slots, name: si.name, item_level: si.item_level, items: si.items, }; } if (!types[i].value[NAM]) types[i].value[NAM] = 0; types[i].value[NAM] += ib.value; var NUM = types[i].value[NAM] * (LT.SPEC.includes(NAM) && types[i].slots != 'buff' ? 100 : 1); var VAL = LT.lvlToggle && ID.key ? Math.ceil(NUM * LT.lvlToggle) : NUM; var lvl = ib.leveled ? 0 : si.item_level; var LVL = lvlUp(lvl, VAL) * id[NAM]; if (!types[i].values[k]) types[i].values[k] = $.extend({ sum: 0 }, types[i].values[k - 1]); types[i].values[k][NAM] = Math.round(LVL * 1000) / 1000; types[i].compVal[NAM] = !LT.lvlToggle && ID.key ? lvlUp(lvl, Math.ceil(NUM * Character.level)) * id[NAM] : LVL; types[i].parts = k; } } if (types[i]) { for (var cv in types[i].compVal) { types[i].compVal.sum += types[i].compVal[cv]; for (var nv in types[i].values) types[i].values[nv].sum += types[i].values[nv][cv] || 0; } if (si.items) { for (var is of si.items) if (ItemManager.getByBaseId(is).sub_type != id.subWeapon) types[i].compVal.sum += types[is] ? types[is].compVal.sum : 0; } } } }, reloadLvl = 0, showbonus = { 'SetBonus': function (id) { LT.currSetBonus = id; scrollpane.contentPane.empty(); var types = {}, sets = LT.currList[id]; if (!sets) return; LT.GUI.window.setTitle(LT.GUI.getSetOrItem(id, sets)); var spCont = '<span style="width:60%;position:absolute;">'; for (var k in sets.bonus) { spCont += '<b>' + k + ' ' + LTlang.items + ':</b><br>'; for (var ID of sets.bonus[k]) { var ib = ID.bonus || ID; var NAM = (ib.name || ib.type) + (ib.job || ib.isSector || ''); if (!types[NAM]) { var DESC = ID.desc && (LT.lvlToggle && ID.key && ID.desc.replace(/[0-9]|\+|\.|\([^)]+\)$/g, '') || ID.desc.replace(/[0-9]|\+|\./g, '')) || CharacterSkills.keyNames[NAM]; types[NAM] = { key: (ID.key || 0), desc: DESC, value: 0 }; } types[NAM].value += ib.value; } for (var m in types) { var n = types[m]; var NUM = n.value * (LT.SPEC.includes(m) ? 100 : 1); var VAL = LT.lvlToggle && n.key ? Math.ceil(NUM * LT.lvlToggle) : Math.round(NUM * 100) / 100; spCont += getBonImg(m, 23) + ' + ' + VAL + ' ' + n.desc + '<br>'; } } spCont += '</span><span style="width:40%;left:60%;position:absolute;">'; for (var o of LT.currList[id].items) spCont += LT.GUI.getSetOrItem(o, LT['itemList' + LT.currState][o]) + '<br>'; scrollpane.appendContent(spCont); setTimeout(function () { var cont = $('div.LTSetsWindow div.tw2gui_scrollpane_clipper_contentpane > span'); cont.parent().height(cont.height() + 10); }, 100); }, 'BonusSearch': function (idString) { var id = JSON.parse(idString); if (Object.keys(id).length > 2 && !LT.lvlToggle) { if (!LT.currBonusSearch) { LT.currBonusSearch = idString; reloadLvl = 1; } return lvlBox.select(charLvl); } scrollpane.contentPane.empty(); types = {}; var title = ''; for (var oi in LT.searchObj) if (id[oi]) title += getBonImg(oi, 35) + ' '; LT.GUI.window.setTitle(title); var ns = '' + LT.lvlToggle + LT.onlyOwnSets; if (idString != LT.currBonusSearch || ns != LT.GUI.newState || reloadLvl) { LT.currBonusSearch = idString; LT.GUI.newState = ns; reloadLvl = 0; compare(LT['itemList' + LT.currState], id); compare(LT.currList, id); var types2 = Object.keys(types).sort(function (a, b) { return types[b].compVal.sum / types[b].parts - types[a].compVal.sum / types[a].parts; }), ic = 0; LT.GUI.html = { body: '', right_arm: '', animal: '', rest: '', item: '', buff: '', }; for (var type of types2) { var n = types[type], nsi = ['item'].includes(n.slots); if (nsi && ic++ > 200) continue; var setval = 0; LT.GUI.html[n.slots] += '<br>' + LT.GUI.getSetOrItem(type, n) + '<br>'; for (var o in n.values) { if (o == 'sum') continue; var pre = (nsi ? '' : o + ' ' + LTlang.parts + ':'); LT.GUI.html[n.slots] += pre + ' +' + n.values[o].sum + n.desc + '<br>'; setval = n.values[o].sum; } if (n.items) { var ibs = 0; for (var ib of n.items) if (ItemManager.getByBaseId(ib).sub_type != id.subWeapon) ibs += types[ib] ? types[ib].values[1].sum : 0; LT.GUI.html[n.slots] += '& ' + LTlang.items + ': +' + (ibs + setval) + '<br>'; } } } scrollpane.appendContent('<span class="LTBonusS body" style="width:16%;position:absolute;"><h4>' + LTlang.body + '</h4></span><span class="LTBonusS right_arm" style="width:16%;left:17%;position:absolute;"><h4>' + LTlang.right_arm + '</h4></span><span class="LTBonusS animal" style="width:16%;left:34%;position:absolute;"><h4>' + LTlang.animal + '</h4></span><span class="LTBonusS rest" style="width:16%;left:51%;position:absolute;"><h4>' + LTlang.rest + '</h4></span><span class="LTBonusS item" style="width:16%;left:68%;position:absolute;"><h4>' + LTlang.items + '</h4></span><span class="LTBonusS buff" style="width:16%;right:0;position:absolute;"><h4>' + LTlang.buff + '</h4></span>'); for (var hs in LT.GUI.html) $('.LTBonusS.' + hs).append(LT.GUI.html[hs]); setTimeout(function () { var maxHeight = 0; for (var h of $('div.LTSetsWindow span.LTBonusS')) if (h.clientHeight > maxHeight) maxHeight = h.clientHeight; $('div.LTSetsWindow div.tw2gui_scrollpane_clipper_contentpane').height(maxHeight + 10); }, 200); }, }, loadResult = function () { if (LT.setLength <= forbid.max || LT.onlyOwnSets || newSet) { if (LT['curr' + tab]) showbonus[tab](LT['curr' + tab]); newSet = false; } }, selbox, loadSelbox = function () { LT.currState = LT.onlyOwnSets ? 'Own' : 'All'; LT.currList = LT['setList' + LT.currState]; selbox = new west.gui.Selectbox().setWidth(250); LT.GUI.window.setTitle(tab); scrollpane.contentPane.empty(); if (LT.setLength <= forbid.max || LT.onlyOwnSets) { if (tab == 'SetBonus') { selbox.addListener(showbonus.SetBonus); var sbaI = function (j) { var sj = LT.currList[j]; selbox.addItem(j, '<img src=' + (forbid.unlock.includes(j) ? LTstart.Images('new') : ItemManager.getByBaseId(sj.items[0]).image) + ' height="20" width="20">' + '<div style="padding-right: 20px; text-overflow:ellipsis; white-space:nowrap; overflow:hidden;">' + sj.name + '</div>', sj.name); }; if (LT.setAbc) { for (var h of LT.list) if (LT.currList[h.key]) sbaI(h.key); } else for (var i in LT.currList) sbaI(i); } scrollpane.appendContent('<h1>' + LTlang.choose + '!</h1>'); } else scrollpane.appendContent('<p style="color: #a31919;">ERROR: There are new sets added to the game.<br>Please <a href="javascript:LT.GUI.open(\'openKontakt\');" title="Open contact tab">contact me</a> so I can add the sets to the script.</p>'); }, img = { SetBonus: 'dayofthedead_2014_hat3', BonusSearch: 'st_patrick_head', shot: 'goldensable', hand: 'golden_gun', }, buttonLogic = function (ev, d, b) { var butObj = b || ev.data.obj, id = butObj.id, val = 1; if ($(ev.currentTarget).hasClass('butPlus') || d > 0) { if (butObj.current_value + 1 > butObj.max_value) return false; } else { if (butObj.current_value - 1 < butObj.min_value) return false; val = -1; } butObj.current_value += val; if (CharacterSkills.skills[id]) { var attr = CharacterSkills.skills[id].attr_key; if (!LT.chooseBonus[attr]) LT.chooseBonus[attr] = 0; LT.chooseBonus[attr] += val; $('.chooseBonus #' + attr + ' span.displayValue').text(LT.chooseBonus[attr]); if (LT.chooseBonus[attr] === 0) delete LT.chooseBonus[attr]; } if (butObj.current_value === 0) delete LT.chooseBonus[id]; else LT.chooseBonus[id] = butObj.current_value; $('.chooseBonus #' + id + ' span.displayValue').text(butObj.current_value); return true; }, cont, getCB = function (id) { if (LT.searchObj[id][2]) cont.append(LT.searchObj[id][2]); var div = $('<div class="chooseBonus" style="display:inline-block;">' + getBonImg(id, 45)).appendTo(cont); new west.gui.Plusminusfield(id, LT.chooseBonus[id] || 0, -100, 100, 0, buttonLogic, buttonLogic, buttonLogic).setWidth(45).appendTo(div); }, chooseWindow = function () { cont = $('<span>').append('<div style="width:92px;display:inline-block;vertical-align:top;background-color:#A47F5B;border-radius:5px;">' + '<img id="switchWeapon" style="cursor:pointer;" src="https://wiki.the-west.de/images/1/1a/Switch_weapons_icon.png" title="' + LTlang.switchWeapon + '" width="45">' + '<img id="subWeapon" src="images/items/right_arm/' + img[LT.chooseBonus.subWeapon] + '.png" width="45"></div>'); for (var so in LT.searchObj) { getCB(so); } new west.gui.Dialog(LTlang.selectBonus, cont).setBlockGame(false).setDraggable(true).addButton('ok', function () { if (Object.keys(LT.chooseBonus).length > 1) showbonus.BonusSearch(JSON.stringify(LT.chooseBonus)); else { LT.currBonusSearch = ''; loadSelbox(); } }).addButton(LTlang.resetB, function () { LT.chooseBonus = { subWeapon: 'hand' }; chooseWindow(); }).addButton('cancel').show(); $('#switchWeapon').click(function () { LT.chooseBonus.subWeapon = LT.chooseBonus.subWeapon == 'shot' ? 'hand' : 'shot'; $("#subWeapon").attr('src', 'images/items/right_arm/' + img[LT.chooseBonus.subWeapon] + '.png'); }); $('div.chooseBonus .tw2gui_plusminus').width('auto'); $('div.chooseBonus').css('margin-left', '2px'); }; setbutton = $('<span title="' + LTlang.choose + '" style="background-image:url(images/items/head/' + img[tab] + '.png); cursor:pointer; position:absolute; height:73px; width:73px; margin:4px;" />'); setbutton.click(function () { if (tab == 'SetBonus') { var pos = $(setbutton).offset(); selbox.setPosition(pos.left + 35, pos.top + 50); selbox.show(); } else if (tab == 'BonusSearch' && (LT.setLength <= forbid.max || LT.onlyOwnSets)) chooseWindow(); }); var content = $('<div>'); content.css({ 'margin-top': '90px', 'width': '110px', 'position': 'absolute', }); $(LT.GUI.window.getContentPane()).append(setbutton, content, scrollpane.getMainDiv()); var maxLvl = 150, setsSort = tab == 'SetBonus' ? new west.gui.Checkbox('ABC', null, function (state) { LT.setAbc = state; loadSelbox(); }).setSelected(LT.setAbc, true).getMainDiv() : '', lvlBox = new west.gui.Combobox().setWidth(77).addItem(0, '0').addItem(charLvl, '' + charLvl), onlyOwn = new west.gui.Checkbox(LTlang.ownSets, null, function (state) { LT.onlyOwnSets = state; loadSelbox(); loadResult(); }).setSelected(LT.onlyOwnSets); if (charLvl != maxLvl) lvlBox.addItem(maxLvl, '' + maxLvl); lvlBox.select(LT.lvlToggle).addListener(function (lvl) { LT.lvlToggle = lvl; loadResult(); }); content.append(setsSort, '<br><br><b>' + LTlang.level + ':</b>', lvlBox.getMainDiv(), onlyOwn.getMainDiv()); $('div.tw2gui_window.LT.active_tab_id_BonusSearch').width(1060); $('div.tw2gui_window.LT.active_tab_id_BonusSearch div.tw2gui_scrollpane.LTSetsWindow').width(900); }, openFrame: function (iframe, size) { LT.GUI.window.setResizeable(true).addClass('nocloseall').clearContentPane().activateTab('LTFrame'); LT.GUI.window.dontCloseAll = true; if (Array.isArray(size)) LT.GUI.window.setSize(size[0], size[1]); var wnd = LT.GUI.window.getMainDiv(); $('.tw2gui_window_inset', wnd).css('background-image', 'url(' + LTstart.Images('LT_backGr', 1) + ')'); $('.textart_title', wnd).css('display', 'none'); var contPan = $(LT.GUI.window.getContentPane()); contPan.css('margin-top', '-30px'); new west.gui.Button('QuakeNet Webchat').appendTo(contPan).click(function () { var iframe = 'https://webchat.quakenet.org'; LT.GUI.openFrame(iframe); }); new west.gui.Button('Wiki The-West').appendTo(contPan).click(function () { var iframe = Game.helpURL.replace('http:', 'https:'); LT.GUI.openFrame(iframe); }); new west.gui.Button('TW-DB.info').appendTo(contPan).click(function () { var iframe = 'https://tw-db.info'; LT.GUI.openFrame(iframe); }); if (typeof iframe === 'string') contPan.append($('<iframe src="' + iframe + '" style="width:100%; height:94%; border:0; margin-bottom:1px; ">')); }, openSender: function () { LT.GUI.getDefault('LTSender'); var EvImg = EvName == 'Octoberfest' ? 'window/events/octoberfest/pretzels_icon' : 'interface/friendsbar/events/' + EvName; LT.GUI.window.setTitle(sendGift.label + ' <img src="images/' + EvImg + '.png">'); if (!isDefined(WestUi.FriendsBar.friendsBarUi)) { WestUi.FriendsBar.toggle(); } setTimeout((function () { var e = [], t = Chat.Friendslist.getFriends(), r = WestUi.FriendsBar.friendsBarUi.friendsBar.eventActivations, i, s, u, a; for (s = 0; s < t.length; s++) { i = typeof r[t[s].playerId] !== 'undefined' && r[t[s].playerId][EvName] !== 'undefined' ? r[t[s].playerId][EvName] : 0; e.push({ n: t[s].pname, i: t[s].playerId, t: i }); } e.sort(Sort.create('asc', function (e) { return e.t; })); i = $('<table align="center" border="1" cellpadding="2px" border="1">'); for (s = 0; s < e.length; s++) { u = e[s].t + parseInt(sendGift.cooldown, 10) - new ServerDate().getTime() / 1000; if (u > 0) { a = $('<td>(' + u.formatDurationBuffWay() + ')</td>'); } else { a = $('<td><a href="#">' + sendGift.label + '</a></td>').click(e[s].i, function (e) { $(this).parent().remove(); Ajax.remoteCall('friendsbar', 'event', { player_id: e.handleObj.data, event: EvName }, function (t) { if (t.error) return MessageError(t.msg).show(); MessageSuccess(t.msg).show(); var n = e.handleObj.data; r[n] = r[n] || {}; r[n][EvName] = t.activationTime; }); }); } i.append($('<tr>)').append($('<td>' + e[s].n + '</td>'), a)); } var scrollpane = new west.gui.Scrollpane(); $(scrollpane.getMainDiv()).css({ 'margin-top': '10px', 'width': '340px', 'position': 'absolute', }); scrollpane.appendContent(i); if (t.length === 0) scrollpane.appendContent('<h2 style="text-align: center; color: #a31919; margin-top: 50px;">' + LTlang.noFriends + '</h2>'); var scrollP = new west.gui.Scrollpane(); $(scrollP.getMainDiv()).css({ 'margin-top': '10px', 'margin-left': '345px', 'width': '353px', //698-345 }); if (EvName == 'Hearts' || EvName == 'DayOfDead') { var name = '', weMmd = west.events.Manager.model._data.events; if (EvName == 'Hearts') name = weMmd.valentine.model._data.name; else name = weMmd.DayOfDead.model._l10n.ui.mouseover + ' ' + new Date().getFullYear(); scrollP.appendContent('<h3>' + name + '</h3>'); //west.events.Manager.getRunningEvents() var rew = Game.sesData[EvName].rewards; for (var r in rew) { var div = $('<div />'); div.append('<img src="images/' + EvImg + '.png"> <b>' + r + '</b><br>' + rew[r].desc + '<br>'); var id = rew[r].id; if (isNaN(id)) { div.append('<i>' + LTlang.reward + ': ' + id + '</i><br><br>'); } else { var invItem = new tw2widget.JobItem(ItemManager.get(id)); div.append(invItem.getMainDiv()).append('<br><br><br><br><br>'); } scrollP.appendContent(div); } } $(LT.GUI.window.getContentPane()).append(scrollpane.getMainDiv()).append(scrollP.getMainDiv()); }), 500); }, }; LT.RecipeMarket = { init: function () { var inject = function (category, data) { $('.LTFind').remove(); var gLS4P = Game.InfoHandler.getLocalString4ProfessionId; var buttons_recipe = $('<div class="LTFind"><a href=\'javascript:LT.RecipeMarket.filterRecipe(0);\'><img title="' + LTlang.allprofessions + '" alt="allprofessions" src="' + LTstart.Images('LT_recipes') + '" /></a><a href=\'javascript:LT.RecipeMarket.filterRecipe(1);\'><img title="' + gLS4P(1) + '" alt="fieldcook" style="width: 30px;" src="images/items/recipe/recipe_cook.png" /></a><a href=\'javascript:LT.RecipeMarket.filterRecipe(2);\'><img title="' + gLS4P(2) + '" alt="tonicpeddler" style="width: 30px;" src="images/items/recipe/recipe_quack.png" /></a><a href=\'javascript:LT.RecipeMarket.filterRecipe(3);\'><img title="' + gLS4P(3) + '" alt="blacksmith" style="width: 30px;" src="images/items/recipe/recipe_smith.png" /></a><a href=\'javascript:LT.RecipeMarket.filterRecipe(4);\'><img title="' + gLS4P(4) + '" alt="mastersaddler" style="width: 30px;" src="images/items/recipe/recipe_sattle.png" /></a></div>'); if (category == 'recipe') { $('.searchbox').before(buttons_recipe); $('.searchbox').css('margin-bottom', '0'); var items = []; for (var i = 0; i < data.length; i++) items[i] = ItemManager.get(data[i]); items.sort(function (a, b) { return a.min_level - b.min_level; }); LT.RecipeMarket.Recipe = items; for (var h = 0; h < items.length; h++) data[h] = items[h].item_id; return data; } $('.searchbox').css('margin-bottom', '18px'); return data; }; MarketWindow.Buy.twlt_updateCategory = MarketWindow.Buy.updateCategory; MarketWindow.Buy.updateCategory = function (category, data) { data = inject(category, data); MarketWindow.Buy.twlt_updateCategory.call(this, category, data); }; MarketWindow.getClearName = function (obj) { if (obj.type == 'recipe') { var name = ItemManager.get(obj.craftitem).name; return isDefined(name) ? name : obj.name; } return obj.name; }; }, filterRecipe: function (profession_id) { var data = $('#mpb_recipe_content p'); data.show(); if (profession_id === 0) return; for (var i = 0; i < LT.RecipeMarket.Recipe.length; i++) if (profession_id != LT.RecipeMarket.Recipe[i].profession_id) $(data[i]).hide(); } }; LT.AchievHide = { init: function () { var hideUnErfolge = function () { $('.playerachievement-' + Character.playerId + ' .achievement').hide(); $('.playerachievement-' + Character.playerId + ' .achievement .achievement_unachieved').parent().show(); }; AchievementExplorer.prototype.twlt_updateContent = AchievementExplorer.prototype.updateContent; AchievementExplorer.prototype.updateContent = function (data) { var tmp = AchievementExplorer.prototype.twlt_updateContent.call(this, data); if (data.folder.id != 'overall' && data.folder.id != 'heroics') hideUnErfolge(); return tmp; }; } }; LT.MarketMessage = { Towns: {}, init: function () { Ajax.get('map', 'get_minimap', {}, function (json) { if (json.error) return new UserMessage(json.msg).show(); LT.MarketMessage.Towns = json.towns; EventHandler.listen('position_change', function () { LT.MarketMessage.check(); }); var setVal2 = setInterval(function () { if (Character.position.x) { clearInterval(setVal2); LT.MarketMessage.check(); } }, 1000); }); }, check: function () { var town_id, offers, bids, fetch = function (action) { Ajax.remoteCall('building_market', action, {}, function (resp) { if (resp.error) return new UserMessage(resp.msg).show(); Character.setDeposit(resp.deposit); Character.setMoney(resp.cash); return new MessageSuccess(resp.msg).show(); }); }; var fetchAll = function (what) { if (what == 1) fetch('fetch_town_offers'); fetch('fetch_town_bids'); EventHandler.signal('inventory_changed'); }; var showDialog = function () { new west.gui.Dialog(LTlang.market1, LTlang.market2, west.gui.Dialog.SYS_QUESTION).addButton(LTlang.all, function () { fetchAll(1); }).addButton(LTlang.onlyBids, function () { fetchAll(0); }).addButton(LTlang.nothing).show(); }; var checkItems = function () { for (var g = 0; g < bids.length; g++) { var bgs = bids[g]; if (bgs.market_town_id == town_id && (bgs.auction_ends_in < 0 || bgs.current_bid == bgs.max_price)) { showDialog(); return; } } for (var f = 0; f < offers.length; f++) { var ofs = offers[f]; if (ofs.market_town_id == town_id && (ofs.auction_ends_in < 0 || ofs.current_bid == ofs.max_price)) { showDialog(); return; } } }; var get_offers = function () { Ajax.remoteCall('building_market', 'fetch_offers', { page: 0 }, function (json) { offers = json.msg.search_result; checkItems(); }); }; var get_bids = function () { Ajax.remoteCall('building_market', 'fetch_bids', {}, function (json) { bids = json.msg.search_result; get_offers(); }); }; var towns = LT.MarketMessage.Towns; for (var k in towns) if (towns[k].x == Character.position.x && towns[k].y == Character.position.y) { town_id = towns[k].town_id; var wait = Character.health < 6 ? Character.playerId.toString().substr(-4) : 1; setTimeout(function () { get_bids(); }, wait); } } }; LT.MarketTown = { init: function () { if (!LT.Skript.getFeature('MarketMessage')) Ajax.get('map', 'get_minimap', {}, function (json) { if (json.error) return new UserMessage(json.msg).show(); LT.MarketMessage.Towns = json.towns; }); MarketWindow.twlt_showTab = MarketWindow.showTab; MarketWindow.showTab = function () { MarketWindow.twlt_showTab.apply(this, arguments); if (MarketWindow.townId > -1) MarketWindow.window.setTitle(MarketWindow.window.titler.text + " - " + LT.MarketMessage.Towns[MarketWindow.townId].name); }; } }; LT.MarkDaily = { init: function () { var addBorder = function () { var rows = $('.reward-row'); var row = $(rows[4]); if (row.hasClass('today')) row.css('border', '20px solid red'); }; west.player.LoginBonus.prototype.twlt_show = west.player.LoginBonus.prototype.show; west.player.LoginBonus.prototype.show = function () { var tmp = west.player.LoginBonus.prototype.twlt_show.call(this); if (tmp !== undefined) return tmp; addBorder(); }; } }; LT.DuellMap = { init: function () { var generateNpcPopup = function (data) { var weapon = ItemManager.get(data.weaponId), damage = weapon.getDamage(data), npcData = data.bonus; return '<table class="dln_npcskill_popup"><tr><td colspan="5" class="text_bold">' + LTlang.popup + '<br> </td></tr><tr><td><img src="/images/window/duels/npcskill_shot.jpg" /></td><td><img src="/images/window/duels/npcskill_punch.jpg" /></td><td><img src="/images/window/duels/npcskill_aim.jpg" /></td><td><img src="/images/window/duels/npcskill_appearance.jpg" /></td><td></td></tr><tr><td class="text_bold">' + (npcData.shot || 0) + '</td><td class="text_bold">' + (npcData.punch || 0) + '</td>' + '<td class="text_bold">' + (npcData.aim || 0) + '</td><td class="text_bold">' + (npcData.appearance || 0) + '</td><td></td></tr>' + '<tr><td><img src="/images/window/duels/npcskill_tactic.jpg" /></td><td><img src="/images/window/duels/npcskill_reflex.jpg" /></td><td><img src="/images/window/duels/npcskill_dodge.jpg" /></td><td><img src="/images/window/duels/npcskill_tough.jpg" /></td><td><img src="/images/window/duels/npcskill_health.jpg" /></td></tr><tr><td class="text_bold">' + (npcData.tactic || 0) + '</td><td class="text_bold">' + (npcData.reflex || 0) + '</td><td class="text_bold">' + (npcData.dodge || 0) + '</td><td class="text_bold">' + (npcData.tough || 0) + '</td><td class="text_bold">' + (npcData.health || 0) + '</td></tr><tr><td colspan="2" class="text_bold"><img src="' + weapon.image + '" /></td><td colspan="3" class="text_bold"><br>' + weapon.name + '<br>(' + LTlang.damage + ': ' + damage.min + ' - ' + damage.max + ')</td></tr></table>'; }; Ajax.remoteCallMode('character', 'get_info', {}, function (resp) { Character.setDuelLevel(resp.duelLevel); }); var progB = new west.gui.Progressbar(0, 100); progB.setTextOnly(true); $(progB.getMainDiv()).css('width', '772px'); var fillPage = function () { $('#LTDuellMapTable').empty(); $('#LTDuellMapPlayers').empty(); $('#LTDuellMapTable').append('<tr><th>' + LTlang.name + '</th><th>' + LTlang.town + '</th><th>' + LTlang.level + '</th><th>' + LTlang.duelLevel + '</th><th>' + LTlang.exp + '</th><th>' + LTlang.distance + '</th><th>' + LTlang.startduel + '</th><th>' + LTlang.centerMap + '</th></tr>'); for (var k in LT.DuellMap.Player) { var data = LT.DuellMap.Player[k]; var content = $('<tr></tr>'); content.append('<td><a href="javascript:void(PlayerProfileWindow.open(' + data.player_id + '));" title="' + (Character.charClass == 'duelist' ? generateNpcPopup(data).escapeHTML() : '') + '">' + data.player_name + '</a></td>', '<td><a href="javascript:void(TownWindow.open(' + data.town_x + ',' + data.town_y + '));">' + data.town_name + '</a></td>', '<td>' + data.level + '</td>', '<td>' + data.duellevel + '</td>', '<td>' + Math.round((7 * data.duellevel - 5 * Character.duelLevel + 5) * Character.duelMotivation * 3) + '</td>', '<td>' + window.Map.calcWayTime(Map.getLastQueuePosition(), { x: data.character_x, y: data.character_y }).formatDuration() + '</td>', '<td><a href="#" onclick="SaloonWindow.startDuel(' + data.player_id + ', ' + data.alliance_id + ', false, DuelsWindow);">' + LTlang.startduel + '</a></td>', '<td><a href="#" onclick="Map.center(' + data.character_x + ', ' + data.character_y + ');">' + LTlang.centerMap + '</a></td>'); $('#LTDuellMapTable').append(content); content = $('<div style="position:absolute;border:1px solid black;background:#FF0000;width:4px;height:4px;left:' + (data.character_x / 46592 * 770 - 2) + 'px;top:' + (data.character_y / 20480 * 338 - 2) + 'px;" />'); eval('content.click(function () { SaloonWindow.startDuel(' + data.player_id + ', ' + data.alliance_id + ', false, DuelsWindow); });'); content.addMousePopup('<b>' + data.player_name + '</b> ' + window.Map.calcWayTime(Map.getLastQueuePosition(), { x: data.character_x, y: data.character_y }).formatDuration()); $('#LTDuellMapPlayers').append(content); } $('<div style="position:absolute;border:1px solid black;background:#00CCFF;width:4px;height:4px;left:' + (Character.position.x / 46592 * 770 - 2) + 'px;top:' + (Character.position.y / 20480 * 338 - 2) + 'px;" />').addMousePopup('Deine Position').appendTo('#LTDuellMapPlayers'); }; var getPlayer = function (i, distance) { if (i == -1) { progB.setValue(0); LT.DuellMap.Player = {}; i++; } Ajax.remoteCall('duel', 'search_op', { next: true, order_by: 'ASC', sort: 'range', page: i, distance: distance * 60 }, function (json) { var l = json.oplist.pclist.length; for (var j = 0; j < l; j++) { var plyr = json.oplist.pclist[j].player_name; if (!LT.DuellMap.Player[plyr]) { LT.DuellMap.Player[plyr] = json.oplist.pclist[j]; progB.increase(1); } } if (json.oplist.next && i < 40) { getPlayer(++i, distance); return; } LT.DuellMap.progBVal = progB.getValue(); fillPage(); }); }; var showTab = function (win, id) { DuelsWindow.window.setSize(840, 655).addClass('premium-buy'); DuelsWindow.window.activateTab(id).$('div.tw2gui_window_content_pane > *').each(function (i, e) { if ($(e).hasClass('duels-' + id)) { $(e).children().fadeIn(); $(e).show(); } else { $(e).children().fadeOut(); $(e).hide(); } }); DuelsWindow.window.setTitle(LTlang.duelmap); if (Object.keys(LT.DuellMap.Player).length === 0) { LT.DuellMap.progBVal = 0; getPlayer(-1, 15); } else progB.setValue(LT.DuellMap.progBVal); }; var initDuellmap = function () { DuelsWindow.window.addTab(LTlang.duelmap, 'LTDuellmap', showTab); LT.DuellMap.Player = {}; var area = $('<div class="duels-LTDuellmap" style="display:none;"></div>').appendTo(DuelsWindow.window.getContentPane()), content = $('<div style="height:350px;top:10px;position:relative"></div>'), left = 0, top = 0; for (var i = 1; i <= 15; i++) { var img = $('<img style="position:absolute;border:1px solid #000;width:110px;height:169px;left:' + left + 'px;top:' + top + 'px;" src="images/map/minimap/county_' + i + '.jpg" />'); left += 110; if (i === 7) { left = 0; top = 169; } if (i === 4 || i === 11) { img.css('height', '114px'); } if (i === 11) { img.css('top', top + 55 + 'px'); } if (i === 15) { img.css({ height: '110px', left: '330px', top: '114px' }); } content.append(img); } content.append('<div id="LTDuellMapPlayers"></div>'); content.appendTo(area); area.append(progB.getMainDiv()); var scrollpane = new west.gui.Scrollpane().appendTo(area); $(scrollpane.getMainDiv()).css('height', '185px'); scrollpane.appendContent(LTlang.duelradius + ' '); var combobox = new west.gui.Combobox().setWidth(120).addItem('15', '15 ' + LTlang.minutes).addItem('30', '30 ' + LTlang.minutes).addItem('60', LTlang.hour).addItem('120', '2 ' + LTlang.hours).addItem('240', '4 ' + LTlang.hours).addItem('360', '6 ' + LTlang.hours).select('15').appendTo(scrollpane.getContentPane()); new west.gui.Button(LTlang.searchOpp).appendTo(scrollpane.getContentPane()).click(function () { getPlayer(-1, combobox.getValue()); }); scrollpane.appendContent('<table border="1" id="LTDuellMapTable"></table>'); }; DuelsWindow.twlt_open = DuelsWindow.open; DuelsWindow.open = function () { var tmp = DuelsWindow.twlt_open.call(this); if (tmp !== undefined) return tmp; initDuellmap(); }; DuelsWindow.twlt_showTab = DuelsWindow.showTab; DuelsWindow.showTab = function (id) { var tmp = DuelsWindow.twlt_showTab.call(this, id); if (tmp !== undefined) return tmp; DuelsWindow.window.removeClass('premium-buy').setSize(748, 472); }; } }; LT.ChangeCity = { init: function () { var swap = function (that) { var rows = $('.' + that.window.id + ' .row .cell.cell_2.name,.' + that.window.id + ' .row .cell.cell_2.name_foreign'); rows.empty(); for (var i = 0; i <= that.data.length; i++) { var player = that.data[i]; $(rows[i]).append('<span> ' + (player.title !== undefined ? player.title : '') + '</span><a href="#" onClick="PlayerProfileWindow.open(' + player.player_id + ')">' + player.name + '</a>'); } }; CityhallWindow.Residents.twlt_fillContent = CityhallWindow.Residents.fillContent; CityhallWindow.Residents.fillContent = function () { var tmp = CityhallWindow.Residents.twlt_fillContent.call(this); if (tmp !== undefined) return tmp; swap(this); }; } }; LT.ShowAP = { init: function () { var addAP = function (that) { var job = that.job; var getJobFeaturedCls = function () { if (LinearQuestHandler.hasTutorialQuest()) return ''; if (job.is_gold) return 'gold'; if (job.is_silver) return 'silver'; return ''; }; var aps = that.currSkillpoints - that.job.workpoints; var jobicon = '<div class="job" title="' + job.get('description').escapeHTML().cutIt(150) + '"><div class="featured ' + getJobFeaturedCls() + '"></div>' + '<img src="images/jobs/' + job.get('shortname') + '.png" class="job_icon" /></div>'; that.window.setTitle(jobicon + ' ' + job.get('name').escapeHTML() + ' (' + aps + ' AP)'); }; JobWindow.twlt_initView = JobWindow.initView; JobWindow.initView = function () { var tmp = JobWindow.twlt_initView.call(this); if (tmp !== undefined) return tmp; addAP(this); }; } }; LT.Statusbar = { init: function () { $('div#ui_windowbar').hide(); $('div#ui_windowbar_state').hide(); } }; LT.Logout = { init: function () { var menu = $('<div class="menulink" onclick="LT.Logout.logout();" title="' + LTlang.logout + '" />').css('background-image', 'url(' + LTstart.Images('logout') + ')').css('background-position', '0px 0px').mouseenter(function () { $(this).css('background-position', '-25px 0px'); }).mouseleave(function () { $(this).css('background-position', '0px 0px'); }); $('#LT-menu').after(menu); }, logout: function () { location.href = 'game.php?window=logout&action=logout&h=' + Player.h; }, }; LT.MoveJobs = { init: function () { var st = $('.menulink.lscript')[0].title; $('div#ui_bottomright').css('right', '35px'); $('div.ui_menucontainer').css('margin-bottom', '7px'); $('div#ui_scripts').remove(); EscapeWindow.twlt_open = EscapeWindow.twlt_open || EscapeWindow.open; EscapeWindow.open = function () { EscapeWindow.twlt_open.apply(this, arguments); wman.getById('escape').setSize(240, 326); $('div.tw2gui_win2.escape div.content div.tw2gui_button')[3].after(new west.gui.Button(st, function () { TheWestApi.open(); wman.getById('escape').destroy(); }).setMinWidth(175).getMainDiv()); }; } }; LT.BlinkEvents = { init: function () { var setVal7 = setInterval(function () { if ($('.border.highlight').length) { clearInterval(setVal7); $('.border.highlight').remove(); LT.addStyle('.border.highlight {display:none;}'); } }, 3000); } }; LT.FortTracker = { init: function () { LT.addStyle('.fort_battle_notification {display:none!important;}'); } }; LT.FriendsPop = { init: function () { west.notification.ToastOnlineNotification.prototype.show = function () {}; } }; LT.InstantQuest = { init: function () { var setVal1 = setInterval(function () { if (QuestEmployerView.showQuest) { clearInterval(setVal1); QuestEmployerView.twlt_showQuest = QuestEmployerView.showQuest; QuestEmployerView.showQuest = function (e) { QuestEmployerView.twlt_showQuest(e); if (e.accepted === false) { var req = e.requirements, solvCnt = 0; for (var f = 0; f < req.length; f++) if (req[f].solved === true) solvCnt += 1; if (req.length == solvCnt) $('div.quest_button_area_' + e.id + '').empty().append(new west.gui.Button(LTlang.accNfin, function () { QuestWindow.acceptQuest(e.id); var siVal = setInterval(function () { if (QuestLog.quests[e.id]) { clearInterval(siVal); QuestWindow.finishQuest(e.id); } }, 200); }).getMainDiv()); } }; } }, 2000); } }; LT.QuestWiki = { init: function () { $.getScript('https://tomrobert.safe-ws.de/repGroups.js').done(function () { QuestLog.solvedGroups = {}; Ajax.remoteCallMode('building_quest', 'get_solved_groups', {}, function (json) { for (var sg in json.solved) QuestLog.solvedGroups[sg] = json.solved[sg].title; QuestLog.twlt_addSolvedQuestGroup = QuestLog.addSolvedQuestGroup; QuestLog.addSolvedQuestGroup = function (groupId, questGroup) { QuestLog.twlt_addSolvedQuestGroup.apply(this, arguments); QuestLog.solvedGroups[groupId] = questGroup.title; }; var lang = Game.locale.substr(0, 2), repText = { de: ' (Wiederholbare Feiertagsquestreihe)', hu: ' (Ismételhető)', it: ' (Ripetibile)', pt: ' repetível', ru: ' - Снова праздник', }; Quest.twlt_render = Quest.render; Quest.render = function () { Quest.twlt_render.apply(this, arguments); var wiki = 'https://wiki.the' + Game.masterURL.match(/the(.*)/)[1] + '/wiki/', gid = LT.repGroups[this.id], qGroup = QuestLog.solvedGroups[gid] || lang == 'de' && isNaN(gid) && gid, groupName = [69, 34].includes(this.group) && qGroup ? qGroup + repText[lang] || '' : this.groupTitle, questName = encodeURIComponent((lang == 'pl' ? 'Zadania: ' : '') + groupName + '#' + (lang == 'de' ? this.id : this.soloTitle)); this.el.find('.quest_description_container .strong').append('<a class="questWiki" style="float:right;" title="' + LTlang.onWiki + '" href="' + wiki + questName + '" target="_blank"><img src="' + LTstart.Images('wiki') + '"/></a>'); }; }); }); } }; LT.CityTravel = { init: function () { var setVal3 = setInterval(function () { if (west.window.Blackboard.cities.show) { clearInterval(setVal3); var wwBc = west.window.Blackboard.cities; wwBc.twlt_show = wwBc.show; wwBc.show = function () { for (var c = 0; c < this.cities_.length; c++) this.cities_[c].member += '<br>' + Map.calcWayTime(Map.getLastQueuePosition(), { x: this.cities_[c].x, y: this.cities_[c].y }).formatDuration(); wwBc.twlt_show.apply(this, arguments); $('.cities .city.inlineblock .popup-title').css('margin-top', '-10px'); }; } }, 2000); } }; LT.BetterSheriff = { onlyAttackable: false, init: function () { var columns = [ 'name" style="width:100px;', 'distance" style="width:70px;', 'amount" style="width:70px;', 'not_dead_amount" style="width:70px;', 'duellevel" style="width:50px;', 'status" style="width:192px;' ], //max 552px wanted = [ 'Gesucht', 'Wanted', 'Poszukiwany', 'Gezocht', 'Efterlyst', 'Căutat', 'Procurado', 'Hledán', 'Buscado', 'В розыске', 'Aranıyor', 'Körözött', 'Καταζητείται', 'Eftersøgt', 'Odmena za ulovenie', 'Recherché', 'Ricercato', ], sortByObj, myPos, lvl, players, loadedIDs, counter, maxCount, updateTable = function (data) { LT.BetterSheriff.table.clearBody(); var tmpCells = {}; for (var i = 0; i < data.length; i++) { var rd = data[i]; if (LT.BetterSheriff.onlyAttackable && !rd.status.includes('.startDuel')) continue; tmpCells[columns[0]] = '<a title="' + SheriffWindow.createWantedTooltip(rd).escapeHTML() + '" href="javascript:void(PlayerProfileWindow.open(' + rd.player_id + '));"> ' + rd.name + '</a>'; tmpCells[columns[1]] = rd.distance.formatDuration(); tmpCells[columns[2]] = format_number(rd.amount); tmpCells[columns[3]] = format_number(rd.not_dead_amount); tmpCells[columns[4]] = rd.duellevel; tmpCells[columns[5]] = '<span title=\'' + rd.status + '\'>' + rd.status + '</span>'; LT.BetterSheriff.table.buildRow('" style="padding-left:5px;', tmpCells); } }, startSortDispatcher = function (ev) { var sortBy = ev && (ev.target.tagName == 'SPAN' && ev.target.parentElement.classList[2] || ev.target.classList[2]) || 'distance'; if (sortByObj == sortBy) players.reverse(); else { sortByObj = sortBy; switch (sortBy) { case 'name': case 'status': players.sort(function (a, b) { return a[sortBy].toUpperCase().replace(/^Ä/, 'A').replace(/^Ö/, 'O').replace(/^Ü/, 'U').replace(/^É/, 'E').replace(/\(.*?\)/, '') > b[sortBy].toUpperCase().replace(/^Ä/, 'A').replace(/^Ö/, 'O').replace(/^Ü/, 'U').replace(/^É/, 'E').replace(/\(.*?\)/, '') ? 1 : -1; }); break; case 'distance': players.sort(function (a, b) { return a[sortBy] - b[sortBy]; }); break; default: players.sort(function (a, b) { return b[sortBy] - a[sortBy]; }); break; } } updateTable(players); }, setStatus = function (player, string) { if (player) { player.status = string; players.push(player); } counter++; LT.BetterSheriff.progB.increase(1); if (counter == maxCount) { startSortDispatcher(); $('div.sheriff-LTSheriff .fancytable .row_head').css('cursor', 'pointer').click(startSortDispatcher); $('div.sheriff-LTSheriff', SheriffWindow.DOM).append(LT.BetterSheriff.checkB.getMainDiv()); } }, loadPlayer = function (arr) { if (loadedIDs[arr.player_id]) setStatus(arr, SaloonWindow.playerStat(loadedIDs[arr.player_id])); else Ajax.remoteCallMode('profile', 'init', { playerId: arr.player_id }, function (resp) { if (resp.error) return new UserMessage(resp.message).show(); if (!wanted.includes(resp.status)) setStatus(arr, resp.status); else if (resp.town) { if (resp.town.town_id == Character.homeTown.town_id) setStatus(arr, LTlang.ownTown); else Ajax.remoteCallMode('building_saloon', 'get_data', { town_id: resp.town.town_id }, function (data) { if (data.error) return new UserMessage(data.msg).show(); for (var l = 0; l < data.players.length; l++) loadedIDs[data.players[l].player_id] = data.players[l]; setStatus(arr, SaloonWindow.playerStat(loadedIDs[arr.player_id])); }); } else Ajax.remoteCall('task', 'add', { 'tasks': { '0': { 'player_id': arr.player_id, 'taskType': 'duel' } } }, function (data) { if (data.tasks[0].error) setStatus(arr, data.tasks[0].msg); else { setStatus(arr, SaloonWindow.playerStat({ player_id: arr.player_id, holiday_duel: true, })); Ajax.remoteCall('task', 'cancel', { 'tasks': { '0': { 'queueId': data.tasks[0].task.queue_id, 'type': 'duel' } } }); } }); }); }, initData = function (pg) { Ajax.remoteCall('building_sheriff', 'load_page', { page: pg, }, function (json) { if (json.error) { new UserMessage(json.msg).show(); return null; } if (pg === 0) { maxCount = json.count * 10; LT.BetterSheriff.progB.setMaxValue(maxCount); } for (var j = 0; j < 10; j++) { if (json.result[j]) { var res = json.result[j]; res.distance = Map.calcWayTime(myPos, { x: res.x, y: res.y }); res.not_dead_amount = res.not_dead_amount || 0; if (lvl.min > res.duellevel) setStatus(res, LTlang.tooLow); else if (lvl.max < res.duellevel) setStatus(res, LTlang.tooHigh); else loadPlayer(res); } else { setStatus(); } } if (pg < json.count - 1) initData(++pg); }); }, tabclick = function (win, id) { if (!SheriffWindow.window) return; SheriffWindow.window.activateTab(id).setTitle('BetterSheriff').$('div.tw2gui_window_content_pane > *', SheriffWindow.DOM).each(function (i, e) { if ($(e).hasClass('sheriff-' + id)) { $(e).children().fadeIn(); $(e).show(); } else { $(e).children().fadeOut(); $(e).hide(); } }); if (LT.loadedSheriff) return; LT.loadedSheriff = true; myPos = Map.getLastQueuePosition(); lvl = { min: Math.ceil(Character.duelLevel / 1.4), max: Math.floor(Character.duelLevel * 1.4 - 0.01) }; players = []; loadedIDs = {}; counter = 0; sortByObj = ''; initData(0); }, initBetterSheriff = function () { LT.loadedSheriff = false; SheriffWindow.window.addTab('BetterSheriff', 'LTSheriff', tabclick).appendToContentPane($('<div class="sheriff-LTSheriff" style="display:none;width:590px;position:relative;left:50px;"/>')); LT.BetterSheriff.table = new west.gui.Table().removeFooter(); for (var k = 0; k < columns.length; k++) LT.BetterSheriff.table.addColumn(columns[k]).appendToThCell('head', columns[k], LTlang.sortBy + ' ' + LTlang[columns[k].split('"')[0]], LTlang[columns[k].split('"')[0]]); LT.BetterSheriff.progB = new west.gui.Progressbar(0, null); $(LT.BetterSheriff.progB.getMainDiv()).css('width', '587px'); LT.BetterSheriff.checkB = new west.gui.Checkbox().setLabel('<img src="/images/window/dailyactivity/tasks_icon.png">').setTooltip(LTlang.attackable).setCallback(function (state) { LT.BetterSheriff.onlyAttackable = state; updateTable(players); }).setSelected(LT.BetterSheriff.onlyAttackable, true); $(LT.BetterSheriff.checkB.getMainDiv()).css({ 'position': 'absolute', 'top': '35px', 'right': '-65px' }); $('div.sheriff-LTSheriff', SheriffWindow.DOM).empty().append(LT.BetterSheriff.table.getMainDiv()).append(LT.BetterSheriff.progB.getMainDiv()); $('div.sheriff-LTSheriff .fancytable .tw2gui_scrollpane').css('height', '293px'); Ajax.remoteCallMode('building_saloon', 'get_data', { town_id: Character.homeTown.town_id }, function (data) { if (data.error) return new UserMessage(data.msg).show(); SaloonWindow.self = data.self; }); }; SheriffWindow.twlt_open = SheriffWindow.open; SheriffWindow.open = function (townId, tabId, wanted) { SheriffWindow.twlt_open.call(this, townId, tabId, wanted); if (townId === Character.homeTown.town_id) { initBetterSheriff(); } }; } }; LT.ChatProfessions = { init: function () { Chat.Formatter.twlt_formatContactClient = Chat.Formatter.formatContactClient; Chat.Formatter.formatContactClient = function (client, room) { var cClient = Chat.Formatter.twlt_formatContactClient.call(this, client, room); if (client.professionId > -1) $(cClient[0].lastChild).prepend($(Chat.Formatter.getProfessionImage(client.professionId)).css('background-color', '#D5C6A2')[0]); return cClient; }; } }; LT.QuestBookSearch = { init: function () { QuestWindowView.clearSearch = function () { $('.window-quest_solved .employer_description .questlog_entrie').show(); $('.window-quest_solved .solved_container .tw2gui_scrollpane_clipper_contentpane').empty(); }; QuestWindowView.searchQuest = function (txt) { if (txt) { txt = txt.toLowerCase(); var questGroup = new QuestGroup('searchResult', {}); for (var q in QuestLog.solved_group) { var Qq = QuestLog.solved_group[q]; if (Qq.title.toLowerCase().includes(txt)) $('#solved_questgroup_' + q).show(); else $('#solved_questgroup_' + q).hide(); for (var r in Qq.quests) if (Qq.quests.hasOwnProperty(r)) { var Qr = Qq.quests[r], idMatch = r == txt; if (Qr.toLowerCase().includes(txt) || idMatch) questGroup.el.append($('<div>').prop({ id: 'solved_questgroup_quest_' + r, className: 'questlog_entrie finish' }).append($('<a>').attr({ href: '#', className: 'shorten', onclick: s('QuestGroupWindow.open(%1, %2);', q, r) }).text((idMatch ? '#ID ' : '') + Qr))); } } QuestWindowView.showSolvedGroup(questGroup); } else QuestWindowView.clearSearch(); }; QuestWindowView.twlt_renderGroupSolved = QuestWindowView.renderGroupSolved; QuestWindowView.renderGroupSolved = function () { QuestWindowView.twlt_renderGroupSolved.apply(this, arguments); var textF = new west.gui.Textfield('questbook_search').addListener(QuestWindowView.searchQuest), iconB = new west.gui.Iconbutton(new west.gui.Icon('search'), function () { QuestWindowView.searchQuest(textF.getValue()); }), icon = new west.gui.Icon('abort').getMainDiv().click(function () { textF.setValue(''); QuestWindowView.clearSearch(); }); $('.window-quest_solved .employer_description .quest_splitter').after($('<div id=QuestBookSearch>').append(textF.getMainDiv(), iconB.getMainDiv(), icon)); }; } }; LT.MarketRights = { init: function () { MarketWindow.sellRights = [{ i: 'town_new', t: LTlang.town }, { i: 'friends', t: LTlang.alliance }, { i: 'welt', t: LTlang.worldwide } ]; MarketWindow.Sell.twlt_updateTable = MarketWindow.Sell.updateTable; MarketWindow.Sell.updateTable = function () { MarketWindow.Sell.twlt_updateTable.apply(this, arguments); if (Character.homeTown.town_id) Ajax.remoteCall('building_market', 'search', { visibility: 0 }, function (json) { for (var i = 0; i < json.msg.search_result.length; i++) { var jsr = json.msg.search_result[i]; if (jsr.seller_name == Character.name) $('.marketSellsData_' + jsr.market_offer_id + ' .mps_pickup').prepend('<img src="images/icons/' + MarketWindow.sellRights[jsr.sell_rights].i + '.png" title="' + MarketWindow.sellRights[jsr.sell_rights].t + '">'); } }); }; MarketWindow.Buy.twlt_updateTable = MarketWindow.Buy.updateTable; MarketWindow.Buy.updateTable = function (data) { MarketWindow.Buy.twlt_updateTable.call(this, data); if (Character.homeTown.town_id) for (var i = 0; i < data.length; i++) $('#mpb_vendor_' + data[i].market_offer_id).before('<img src="images/icons/' + MarketWindow.sellRights[data[i].sell_rights].i + '.png" title="' + MarketWindow.sellRights[data[i].sell_rights].t + '">'); }; } }; LT.EquipManagerPlus = { init: function () { var current = {}; var changeSlot = function (slot) { var ws = Wear.slots; if (slot == ws.length) { $('#equip_manager_list').html(EquipManager.buildEquipList()); new UserMessage(LTlang.saveMessage2, 'success').show(); } else if (current[ws[slot]]) Ajax.remoteCall('inventory', 'carry', { item_id: current[ws[slot]].obj.item_id, last_inv_id: Bag.getLastInvId() }, function () { changeSlot(++slot); }); else Ajax.remoteCall('inventory', 'uncarry', { last_inv_id: Bag.getLastInvId(), type: ws[slot] }, function () { changeSlot(++slot); }); }; var rename = function (equipId, nr, name) { if (name.length < 3) return new UserMessage(LTlang.longerName).show(); new UserMessage(LTlang.loading, 'hint').show(); current = $.extend({}, Wear.wear); Ajax.remoteCall('inventory', 'switch_equip', { id: equipId, last_inv_id: Bag.getLastInvId() }, function () { Ajax.remoteCall('inventory', 'delete_equip', { id: equipId }, function () { EquipManager.list.splice(nr, 1); Ajax.remoteCall('inventory', 'save_equip', { name: name }, function (data) { if (data.error) new UserMessage(data.msg).show(); else EquipManager.list.unshift(data.data); changeSlot(0); }); }); }); }; EquipManager.renameEquip = function (equipId, nr) { var cont = $('<span>'); var textF = new west.gui.Textfield('equip_rename').maxlength(25).setValue(EquipManager.list[nr].name).getMainDiv(); cont.append(LTlang.newName + ': ', textF, '<p style="margin-top:10px;color:red;">' + LTlang.renameWarning + '</p>'); new west.gui.Dialog(LTlang.rename + ': ' + EquipManager.list[nr].name, cont).addButton('ok', function () { rename(equipId, nr, $('#equip_rename').val()); }).addButton('cancel').show(); }; EquipManager.twlt_showPopup = EquipManager.showPopup; EquipManager.showPopup = function () { EquipManager.twlt_showPopup.apply(this, arguments); setTimeout(function () { $('#max_equip_count').append(' | ' + LTlang.used + ': <span id="equip_used">' + EquipManager.list.length); }, 100); }; EquipManager.twlt_buildEquipList = EquipManager.buildEquipList; EquipManager.buildEquipList = function () { if ($('#equip_used').length > 0) $('#equip_used')[0].innerHTML = EquipManager.list.length; EquipManager.list.sort(function (a, b) { var a1 = a.name.toUpperCase(), b1 = b.name.toUpperCase(); return (a1 == b1) ? 0 : (a1 > b1) ? 1 : -1; }); var html = EquipManager.twlt_buildEquipList().replace(/60%/g, '40%').replace(/20%/g, '15%'); for (var i = 0; EquipManager.list.length > i; i++) { var id = EquipManager.list[i].equip_manager_id; html = html.replace('deleteEquip(' + id, 'renameEquip(' + id + ',' + i + ');\'>' + LTlang.rename + ' </a></td><td width=\'15%\'><a href=\'javascript:EquipManager.deleteEquip(' + id); } return html; }; } }; LT.ShortPopups = { init: function () { ItemPopup.twlt_getXHTML = ItemPopup.twlt_getXHTML || ItemPopup.getXHTML; ItemPopup.getXHTML = function () { var end = ''; var html = ItemPopup.twlt_getXHTML.call(this).replace(/<br><span class="inventory_popup_requirement_text(.*?)>$/, function (str) { end = str; return ''; }).replace('<div class="invPopup_body">', '').replace('inventory_popup"', 'invPopup_body $& style="max-width:385px;"><table><td').replace(/bonus_attr tw_green"/g, '$& style="white-space:nowrap;"').replace('<br><br><div class="item_set_bonus">', end + '</td><td style="padding-left:5px;">'); if (!html.includes(end)) html += end; return html; }; } }; LT.HideNotis = { init: function () { var setVal5 = setInterval(function () { var WNw = WestUi.NotiBar.work; if (WNw) { clearInterval(setVal5); WNw.setMaxSize(999); $('<div class="tw2gui_window_buttons_close" style="position:absolute;left:40px;z-index:2;" title="' + LTlang.removeWorkNotis + '" />').prependTo(WNw.element).click(function () { var l = WNw.list.length; while (l--) if (WNw.list[l].tooltip.includes('job/danger.png')) WNw.removeEntry(WNw.list[l]); }); } }, 1000); } }; LT.JobProducts = { init: function () { Map.PopupHandler.twlt_getJobPopup = Map.PopupHandler.twlt_getJobPopup || Map.PopupHandler.getJobPopup; Map.PopupHandler.getJobPopup = function (d) { var html = Map.PopupHandler.twlt_getJobPopup.apply(this, arguments); for (var i in d.yields) { var m = ItemManager.get(i); html = html.replace('<img src="' + Game.cdnURL + '/images/items/yield/' + m['short'] + '.', '<div class="item"><span class="count" style="display:block;top:29px;left:0px">' + Bag.getItemCount(i) + '</span></div>$&'); } return html; }; } }; LT.MapDistance = { init: function () { LT.addStyle('div.job_way {left:61px;width:170px;}\n .mpb_distance, .wih_distance, .mpo_distance, .mpw_distance, .mps_distance {width:45px;}\n div.tw2gui_window.marketplace div.fancytable .row > div {text-overflow:unset;}'); Map.twlt_calcWayTime = Map.twlt_calcWayTime || Map.calcWayTime; Map.calcWayTime = function () { var time = Map.twlt_calcWayTime.apply(this, arguments); this.newDist = time / Game.travelSpeed / Character.speed; return time; }; Number.prototype.twlt_formatDuration = Number.prototype.twlt_formatDuration || Number.prototype.formatDuration; Number.prototype.formatDuration = function () { var dist = ''; if (Map.newDist) dist = ' <small>' + (Math.floor(Map.newDist) / 1000).toFixed(3) + 'mi</small>'; Map.newDist = 0; return Number.prototype.twlt_formatDuration.apply(this, arguments) + dist; }; String.prototype.replaceAll = function () { return this.replace(/\D/g, ''); }; } }; LT.TraderSell = { init: function () { var setVal8 = setInterval(function () { var wws = west.window.shop; if (wws) { clearInterval(setVal8); LT.addStyle('.focused_new_item_shop .sellIt, .focused_marketplace .auctIt {filter: grayscale(90%)}\n .focused_tailor .not_sellable::after, .focused_gunsmith .not_sellable::after, .focused_general .not_sellable::after, .focused_marketplace .not_auctionable::after {content:"";position:absolute;width:28px;height:28px;right:0;background:url("images/window/shop/shop_icons_sprite.png")no-repeat -167px 0;} .focused_tailor .not_sellable, .focused_gunsmith .not_sellable, .focused_general .not_sellable, .focused_marketplace .not_auctionable {opacity:0.5}'); var mt = -1, itemsToSell = [null, null], attr = ['sellable', 'auctionable'], className = ['sellIt', 'auctIt'], sellItem = function (item) { if (!item.obj[attr[mt]]) return this; var inv_id = item.inv_id; if (!itemsToSell[mt][inv_id]) { itemsToSell[mt][inv_id] = item.count; item.divMain[0].classList.add(className[mt]); } else { delete itemsToSell[mt][inv_id]; item.divMain[0].classList.remove(className[mt]); } }, setClickH = function () { Inventory.setClickHandler({ callback: mt ? MarketWindow.onInventoryClick : wws.handleInventoryClick, context: mt ? MarketWindow : wws, window: mt ? MarketWindow.window : wws.getWindow() }); }, exitSell = function (destroy) { if (mt) MarketWindow.onInventoryClick = MarketWindow.twlt_onInventoryClick || MarketWindow.onInventoryClick; else wws.handleInventoryClick = wws.twlt_handleInventoryClick || wws.handleInventoryClick; $.each(itemsToSell[mt], function (invId) { var bgbi = Bag.getItemIdByInvId(invId); if (!bgbi) return delete itemsToSell[mt][invId]; Bag.getItemByItemId(bgbi).divMain[0].classList.remove(className[mt]); }); itemsToSell[mt] = null; if (destroy) return; setClickH(); $(sellButton[mt]).css('filter', 'grayscale(90%)'); }, repItems = [ 3, 201, 302, 325, 603, 802, 10003, 11003, ], initSell = function () { if (!itemsToSell[mt]) { if (mt) { MarketWindow.twlt_onInventoryClick = MarketWindow.twlt_onInventoryClick || MarketWindow.onInventoryClick; MarketWindow.onInventoryClick = function (item) { if (this.window.currentActiveTabId != 'sell') return false; sellItem(item); return true; }; } else { wws.twlt_handleInventoryClick = wws.twlt_handleInventoryClick || wws.handleInventoryClick; wws.handleInventoryClick = function (item) { sellItem(item); return true; }; } setClickH(); $(sellButton[mt]).css('filter', 'grayscale(0%)'); itemsToSell[mt] = {}; } else { if (Object.keys(itemsToSell[mt]).length) { var cont = '<div>', money = 0; $.each(itemsToSell[mt], function (invId, count) { var bgbi = Bag.getItemIdByInvId(invId); if (!bgbi) return delete itemsToSell[mt][invId]; var bgo = Bag.getItemByItemId(bgbi).obj, bi = bgo.item_base_id; cont += count + 'x ' + LT.GUI.getSetOrItem(bi, bgo, true) + (repItems.includes(bi) ? ' (repeatable quest!)' : '') + '<br>'; money += bgo.sell_price * count; }); cont += '<br><span class="invPopup_sellicon"/> $' + money + '</span></div>'; new west.gui.Dialog(LTlang.sellItems, cont).setDraggable(true).addButton('yes', function () { $.each(itemsToSell[mt], function (inv_id, amount) { if (mt) { var item = Bag.getItemByInvId(inv_id).obj; var params = MarketWindow.Offer.getOfferObject(item.item_id, 0, (item.sell_price || Math.round(item.price / 2)) * amount, amount, 1, 0, 3, ''); Ajax.remoteCall('building_market', 'putup', params, function (resp) { if (resp.error) return new UserMessage(resp.msg).show(); Character.setMoney(resp.msg.money); Character.setDeposit(resp.msg.deposit); new UserMessage(s('Die Ware wird zum Kauf angeboten, die Gebühr beträgt $ %1', resp.msg.costs), 'success').show(); }, MarketWindow); } else wws.requestSell({ inv_id: inv_id, count: amount }); }); itemsToSell[mt] = {}; if (mt) { EventHandler.signal('inventory_changed'); MarketWindow.Sell.initData(); } exitSell(); }).addButton('cancel').show(); } else exitSell(); } }, sellButton = [null, null], icon = ['dollar', 'box'], addMtButton = function (winmt) { mt = winmt; if (!$('.LT_' + attr[mt] + '_button').length) { sellButton[mt] = new west.gui.Iconbutton(new west.gui.Icon(icon[mt]), initSell).addClass('LT_' + attr[mt] + '_button').getMainDiv(); $(sellButton[mt]).css({ 'position': 'absolute', 'left': 0, 'z-index': 1, 'filter': 'grayscale(90%)' }); Inventory.DOM.children('.actions').prepend(sellButton[mt]); } }; wws.twlt_openSellInventory = wws.twlt_openSellInventory || wws.openSellInventory; wws.openSellInventory = function () { exitSell(true); wws.twlt_openSellInventory.apply(this, arguments); addMtButton(0); }; /*MarketWindow.twlt_open = MarketWindow.twlt_open || MarketWindow.open; MarketWindow.open = function () { exitSell(true); MarketWindow.twlt_open.apply(this, arguments); addMtButton(1); };*/ Inventory.twlt_setClickHandler = Inventory.twlt_setClickHandler || Inventory.setClickHandler; Inventory.setClickHandler = function (h) { if (sellButton[mt]) $(sellButton[mt]).hide(); var win = h && h.window.id, winmt = ['new_item_shop', 'marketplace'].indexOf(win); if (winmt > -1) { mt = winmt; h.callback = mt ? MarketWindow.onInventoryClick : wws.handleInventoryClick; if (sellButton[mt]) $(sellButton[mt]).show(); } Inventory.twlt_setClickHandler.apply(this, arguments); }; Inventory.twlt_undock = Inventory.twlt_undock || Inventory.undock; Inventory.undock = function () { if (itemsToSell[mt]) exitSell(true); if (sellButton[mt]) sellButton[mt].remove(); return Inventory.twlt_undock.apply(this, arguments); }; var tIp = tw2widget.InventoryItem.prototype; tIp.twlt_initDisplay = tIp.twlt_initDisplay || tIp.initDisplay; tIp.initDisplay = function () { this.twlt_initDisplay.apply(this, arguments); if (!this.obj.auctionable) this.addClass('not_auctionable'); }; west.window.shop.trackBuyItem = function () {}; } }, 1000); } }; LT.TouchControl = { init: function () { var fingers = 0, wgSbp = west.gui.Scrollbar.prototype; wgSbp.twlt_init = wgSbp.twlt_init || wgSbp.init; wgSbp.init = function () { this.twlt_init.apply(this, arguments); var start, that = this; $(this.divMain).on('touchstart', function (e) { start = e.originalEvent.touches[0].clientY; }).on('touchmove', function (e) { e.stopPropagation(); e.preventDefault(); var move = e.originalEvent.changedTouches[0].clientY; that.move(move - start); start = move; }); }; var wgSpp = west.gui.Scrollpane.prototype; wgSpp.twlt_init = wgSpp.twlt_init || wgSpp.init; wgSpp.init = function () { this.twlt_init.apply(this, arguments); var start, coP = this.contentPane, clP = this.clipPane, vB = this.verticalBar, ratio; $(this.divMain).on('touchstart', function (e) { fingers++; start = e.originalEvent.touches[0].clientY; ratio = (vB._divPullArea.height() - vB._divPulley.height()) / (clP.height() - coP.height()); }).on('touchmove', function (e) { if (fingers != 1) return; e.preventDefault(); var move = e.originalEvent.changedTouches[0].clientY, topPos = move - start; vB.move(ratio * topPos); start = move; }).on('touchend', function (e) { fingers = 0; }); }; var start, currZoom = 1; $('#ui_minimap').on('touchstart', function (e) { fingers++; start = e.originalEvent.touches[0].clientY; }).on('touchmove', function (e) { if (fingers != 1) return; e.preventDefault(); var move = e.originalEvent.changedTouches[0].clientY, cZmb = currZoom + (move - start) / 100; if (cZmb >= 0.65 && cZmb <= 5) document.getElementById('map').style.zoom = cZmb; }).on('touchend', function (e) { fingers = 0; currZoom = $('#map').css('zoom') * 1; Map.resize(); }); Map.twlt_getCurrentMid = Map.twlt_getCurrentMid || Map.getCurrentMid; Map.getCurrentMid = function () { var xy = this.twlt_getCurrentMid.apply(this, arguments); return { x: xy.x / currZoom, y: xy.y / currZoom }; }; Map.twlt_resize = Map.twlt_resize || Map.resize; Map.resize = function () { if (!Map.initialized) return; this.twlt_resize.apply(this, arguments); this.width /= currZoom; this.height /= currZoom; }; var start2; $('#map').on('touchstart', function (e) { fingers++; var eoEt = e.originalEvent.touches[0]; start2 = [eoEt.clientX, eoEt.clientY]; }).on('touchmove', function (e) { if (fingers != 1) return; e.preventDefault(); var eoEcT = e.originalEvent.changedTouches[0], move = [eoEcT.clientX, eoEcT.clientY]; Map.Drag.scrollby((start2[0] - move[0]) / currZoom, (start2[1] - move[1]) / currZoom); start2 = move; }).on('touchend', function (e) { fingers = 0; }); var wgWp = west.gui.Window.prototype; wgWp.twlt_init = wgWp.twlt_init || wgWp.init; wgWp.init = function () { this.twlt_init.apply(this, arguments); var start, that = this, tdM = that.divMain, currPos; $('div.tw2gui_inner_window_title', tdM).on('touchstart', function (e) { fingers++; var eoEt = e.originalEvent.touches[0]; start = [eoEt.clientX, eoEt.clientY]; that.bringToTop(); }).on('touchmove', function (e) { if (fingers != 1) return; e.preventDefault(); currPos = [tdM.offsetLeft, tdM.offsetTop]; var eoEcT = e.originalEvent.changedTouches[0], move = [eoEcT.clientX, eoEcT.clientY], res = [currPos[0] + move[0] - start[0], currPos[1] + move[1] - start[1]]; if (res[0] > -1) { tdM.style.left = res[0] + 'px'; currPos[0] = res[0]; } if (res[1] > -1) { tdM.style.top = res[1] + 'px'; currPos[1] = res[1]; } start = move; }).on('touchend', function (e) { fingers = 0; }); }; LT.addStyle('img {-webkit-touch-callout:none;}'); var timer, timer2, wph = west.popup.handler; $(document).on('touchstart', function (e) { timer = setTimeout(function () { wph.handleMouseMove.call(wph, e); }, 500); timer2 = setTimeout(function () { e.ctrlKey = 1; LT.CalcTwdb.show(e); }, 2000); }).on('touchend', function (e) { clearTimeout(timer); clearTimeout(timer2); }); } }; LT.CalcTwdb = { show: function (e) { if (!e.ctrlKey && !e.altKey) return; var t = $(e.target).data(); var tdi = t.itemId || t.itemid || t.setkey; if (!tdi) return; var add; if (e.altKey) { add = isNaN(tdi) ? 'supravy&set=' : 'item&id='; LT.GUI.open('openFrame', 'https://tw-db.info/?strana=' + add + tdi, [1000, 630]); LT.GUI.makeList(); } else { add = isNaN(tdi) ? 'sets/' : 'item/'; window.open('https://tw-calc.net/' + add + tdi); } }, init: function () { $(document).click(function (e) { LT.CalcTwdb.show(e); }); Inventory.clickHandler = function (item_id, e) { var item = Bag.getItemByItemId(item_id); if (e.shiftKey || e.ctrlKey || e.altKey) return; if (this.click && this.click.callback.apply(this.click.context, [item])) return; if (item.obj.action) { $.globalEval(item.obj.action); return; } if (wman.getById(Wear.uid)) { Wear.carry(item); return; } return; }; } (), }; LT.CollectReminder = function () { var setVal4 = setInterval(function () { if (window.Bag && Bag.loaded) { clearInterval(setVal4); var nulls = []; for (var y in LT.cooldown) { var cdwn = LT.Data.cooldown && LT.Data.cooldown[y] || LT.cooldown[y]; var item = Bag.getItemsByBaseItemId(y)[0]; if (cdwn == 1 && item) { var coold = BuffList.cooldowns[item.obj.item_id] && BuffList.cooldowns[item.obj.item_id].time || item.cooldown; var sec = coold * 1000 - new ServerDate().getTime(); if (!(sec > 0)) nulls.push(item); else if (!LT.cooldownTimer[y]) LT.cooldownSetTime(y, [item], sec); } else if (cdwn == 0.5 && LT.cooldownTimer[y]) { clearTimeout(LT.cooldownTimer[y]); LT.cooldownTimer[y] = 0; } } if (nulls.length) LT.cooldownSetTime(0, nulls, 0); } }, 2000); }; LT.SkipOpen = function () { ItemUse.twlt_use = ItemUse.use; ItemUse.use = function (itemId) { var baseId = itemId / 1000, skips = LT.Data.skipOpen && LT.Data.skipOpen[baseId] || LT.skipOpen[baseId]; if (skips == 1) Ajax.remoteCall('itemuse', 'use_item', { item_id: itemId, lastInvId: Bag.getLastInvId() }, function (res) { if (res.error) return new UserMessage(res.msg).show(); var m = res.msg.effects[0], widget; switch (m.type) { case 'lottery': case 'content': var mi = m.items[0], cont = {}; cont[mi.item_id] = mi.count; widget = new tw2widget.Item(ItemManager.get(mi.item_id)).setCount(mi.count).getMainDiv(); $.get('https://tw-calc.net/service/chest-export', { chest: itemId, count: 1, content: cont, version: Game.version }, function () {}, 'jsonp'); if (ItemUse.twdb) ItemUse.twdb(itemId, res); break; case 'ses': widget = ' <img src="images/icons/' + m.event + '.png" title="' + m.name.escapeHTML() + '" /> ' + m.amount; break; } var mess = $('<div>' + LTlang.skipDone + ':<br></div>').append(widget); new UserMessage(mess, 'success').show(); Bag.updateChanges(res.msg.changes); EventHandler.signal('item_used', [itemId]); }); else ItemUse.twlt_use.apply(this, arguments); }; }; (LT.Updater = function () { if (!window.scriptRequest) { scriptRequest = true; $.getScript(LT.updateUrl); } var intVal = setInterval(function () { if (window.scriptUp) { scriptUp.c('LT', LTstart.version, LT.name, LT.updateAd, LT.website, LT.lang); clearInterval(intVal); } }, 2000); })(); LT.Skript.init(); } else if (location.href.includes('?strana=invent&x=')) { var lg = LTstart.langs, lang = /lang=([a-z]+)/.exec(document.cookie), LTlang = lang && lg.hasOwnProperty(lang[1]) ? lg[lang[1]] : lg.en, done = false, i = document.getElementsByClassName('bag_empty'), wrld = document.getElementById('char_server').textContent, saveCounts = {}, sameWorld = false, hide = function (it) { saveCounts = {}; var sameItem = false; for (var j of i) { var m = j.children[1].innerHTML.match(/,\d,\d,\d,(\d),\d/), auct = m ? m[1] == 1 : true, id = j.id.slice(1), level = id.slice(-1) > 0; if (it) sameItem = sameWorld ? it[id] : !it[id]; if (!auct || level || sameItem) j.style.display = 'none'; else if (it && it[id]) { var count = j.firstChild.firstChild; if (count.textContent > it[id]) { saveCounts[j.id] = count.textContent; count.textContent = it[id]; } } } $('.inputV2')[0].style.display = 'none'; }; LTstart.compInv = function () { if (done) { done = false; for (var h of i) { h.style.display = 'inline-block'; if (saveCounts[h.id]) h.firstChild.firstChild.textContent = saveCounts[h.id]; } $('.inputV2')[0].style.display = 'inline-block'; } else { done = true; var url = prompt(LTlang.compInv + ': '); if (url && url.includes('?strana=invent&x=')) $.ajax({ url: url }).done(function (data) { var regex = /<div id='i(\d+)' class='bag_empty'><span class="pocetx"><span class="pocet_cislox">(\d+)<\/span>/g, t, items = {}, world = /id="char_server">(.*?)</.exec(data); if (!world) { alert('invalid inventory'); done = false; } sameWorld = wrld == world[1]; while (t = regex.exec(data)) { var u = sameWorld ? t[1].slice(0, -3) + '000' : t[1]; items[u] = t[2]; } hide(items); }).fail(function () { alert(arguments[1] + arguments[2]); done = false; }); else { sameWorld = false; hide(); } } }; $('.inputV2').after('<img src="https://westzz.innogamescdn.com/images/items/yield/pick.png" width="25" style="position:absolute;right:0px;cursor:pointer;" onclick="LTstart.compInv();"/>'); } else { window.onload = function () { var lg = LTstart.langs, LTlang = lg.hasOwnProperty(location.href.substr(21, 2)) ? lg[location.href.substr(21, 2)] : lg.en; Worlds.show = (function () { Worlds.twlt_show = Worlds.show; return function () { Worlds.twlt_show.apply(this, arguments); var first = true; var plyWrl = Worlds.playerWorlds, state = (JSON.parse(localStorage.getItem('TWLTcustom1')) || {}), t1 = [], t2 = []; for (var a in plyWrl) { if (plyWrl[a][1] !== null) { t1.push(a); if (!state[a]) state[a] = false; else if (state[a] == true) t2.push(a); } } var loginNow = function (t) { for (var x = 0; x < t.length; x++) { if (first) Auth.login(plyWrl[t[x]]); else window.open(location.origin + '#loginWorld' + t[x], '_blank'); first = false; } }; $('#worldsWrapper').append('<div id="loginMore" />'); $('#loginMore').append('<a id="loginAll" title="' + LTlang.loginAll2 + '" href="#" >' + LTlang.loginAll1 + '</a>').append('<a id="custom" title="' + LTlang.custom2 + '" href="#" >' + LTlang.custom1 + '</a>').append('<img id="cust1" title="' + LTlang.edit + '" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuOWwzfk4AAAFOSURBVDhPY6A6KKnL4j60a2Xf1jWz/6PjQ5unbIUqww3WLpr0Hx0/vXXq/9e39/5fPL4VzAdZAlVOGFw6s9t49sQGsAF/f30GGwLiQ6UJA5Dio7tW/X/z6AIYgwxaNKPr7/1rh6ShSnADkJ/banPB/r9z+QDYIBAfRE9oKf7f2Vz8BKoUE+ydEfj/5Orm/88vb/1fVxwHdjZI88p5zc0gevemRWBxqHJUANP86+Wu/9f3TPu/Y1Yh2NbCskQWkPyiOTmiIM0gw8AakAFI88FFVWCbQYasn5iBVeG0SWWeUCYCLKl1B9sG0gwyZFl73P+99d79UGn8AKQZZBtIM8iQ2XXh2J2IDYA0g2x7cGwZ2JDJpf7E2zwnwwxsG0gzyJCuXC/iNYMAsubGFDvSNIMAyEaQFxoiDf93Vgb3QIWJBwtb3NJANoNoqBAJgIEBAEbiFXTTZGcSAAAAAElFTkSuQmCC"/>'); $('#selectWorldText').css('margin-bottom', '20px'); $('#loginAll').css({ 'background-image': 'url("' + LTstart.Images('LT_login') + '")', 'height': '45px', 'width': '180px', 'line-height': '40px', 'font-weight': 'bold', 'font-size': '12px', 'margin-left': '10px', 'top': '35px', 'z-index': '1', 'position': 'absolute', 'cursor': 'pointer', }).mouseenter(function () { $(this).css('background-position', '0px -45px'); }).mouseleave(function () { $(this).css('background-position', '0px 0px'); }).click(function () { loginNow(t1); }); $('#custom').css({ 'background-image': 'url("' + LTstart.Images('LT_loginC') + '")', 'background-repeat': 'no-repeat', 'height': '36px', 'width': '144px', 'text-align': 'left', 'padding-left': '15px', 'line-height': '32px', 'font-weight': 'bold', 'font-size': '11px', 'margin-left': '45px', 'top': '70px', 'z-index': '1', 'position': 'absolute', 'cursor': 'pointer', }).mouseenter(function () { $(this).css('background-position', '0px -36px'); }).mouseleave(function () { $(this).css('background-position', '0px 0px'); }).click(function () { loginNow(t2); }); $('#cust1').css({ 'margin-left': '160px', 'top': '78px', 'z-index': '2', 'position': 'absolute', 'cursor': 'pointer', }).click(function () { var checkB = {}, checkD = {}; $('#loginMore').hide(); $('#allWorlds').empty(); $('#allWorlds').css('text-align', 'left'); for (var k = 0; k < t1.length; k++) { checkB[t1[k]] = new west.gui.Checkbox().setLabel(Worlds.data[t1[k]].name).setSelected(state[t1[k]]).appendTo($('#allWorlds')); $('#allWorlds').append('<br><div style="height:5px;" />'); } var butB = new west.gui.Button(LTlang.save, function () { for (var l in checkB) { checkD[l] = checkB[l].isSelected(); localStorage.setItem('TWLTcustom1', JSON.stringify(checkD)); } new UserMessage(LTlang.saveMessage2, 'success').show(); }); butB.appendTo($('#allWorlds')); }); }; })(); }; if (location.hash.includes('loginWorld')) { setTimeout(function () { $('#loginButton').click(); var val = setInterval(function () { var u = Worlds.playerWorlds; if (Object.keys(u).length !== 0) { clearInterval(val); Auth.login(u[parseFloat(location.hash.replace(/\D/g, ''))]); } }, 500); }, 1000); } } } });