您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
adds a few options when displaying the atribute values, with or with out items, also displayes ALG values
// ==UserScript== // @name GLB Player Page Enhancements Warrior General // @namespace nikkoum // @version 4.0.6 // @include http://goallineblitz.com/game/player.pl?player_id=* // @include http://glb.warriorgeneral.com/game/player.pl?player_id=* // @include https://goallineblitz.com/game/player.pl?player_id=* // @include https://glb.warriorgeneral.com/game/player.pl?player_id=* // @require https://greasyfork.org/scripts/12092-jquery-javascript-library-v1-4-2/code/jQuery%20JavaScript%20Library%20v142.js?version=71384 // @description adds a few options when displaying the atribute values, with or with out items, also displayes ALG values // ==/UserScript== /* added https version of site to includes * copied over from userscripts.org so as to be used in the future by nikkoum only change the posting of the rlevant * required Jquery language in Greasy fork and changing of said line 2015.08.31 * * modified by briansimoneau work with the new warriorgeneral.com * modified ever so slightly by mandyross 22 Sep 2011 * rewritten by Bogleg from Highlight Attributes Archetype Fix: * written by forestmb @userscripts.org * modified by peteb @userscripts.org * modified by raiderdav @userscripts.org * modified by pabst 12/23/08+ * modified by Tical2k * modified by txrulz * modified by numone * modified by Bogleg 10.06.04 and passed back to numone * modified by Bogleg 10.06.08 */ // add the following line, as we assume a browser option to predefine the standard global properties that are supplied by web browsers, such as document and addEventListener /*jslint browser: true*/ //add the following so JSLint checker doesn't complain when we use variables defined in other scripts ( in our case jQuery) /*global $, jQuery, alert*/ var bonus = { 'Strength': 0, 'Speed': 0, 'Agility': 0, 'Jumping': 0, 'Stamina': 0, 'Vision': 0, 'Confidence': 0, 'Blocking': 0, 'Tackling': 0, 'Throwing': 0, 'Catching': 0, 'Carrying': 0, 'Kicking': 0, 'Punting': 0 }; var colorMajor = '#a03c19'; var colorMinor = '#a000a0'; var colorOther = '#606060'; var attColor = [ // attr name, attr val, attr val boosted (w/eq) [colorOther, colorOther, '#6060ff'], [colorMinor, colorMinor, '#2020ff'], [colorMajor, colorMajor, 0] ]; var allBuilds = {}; var position; var buildTypes; var archetype; // this function formats and presents the legend where the ALGs for the next level // and the ALGs till the player gets to lvl 79 are presented function createLegend() { // insert the color key $('.player_stats_table').eq(0).css('margin-bottom', '4px').after( '<div id="colorKeyDiv" style="font-weight: bold; text-align: center; margin-bottom: 4px;">Next Auto Level Gain' + ' = <span id="keyMajor" style="color: ' + attColor[2][0] + '">Major</span>' + ' / <span id="keyMinor" style="color: ' + attColor[1][0] + '">Minor</span>' + ' / <span id="keyOther" style="color: ' + attColor[0][0] + '">Zero</span>' + '<div id="colorKeyDiv_79" style="font-weight: bold; text-align: center; margin-bottom: 4px;">ALGs to Lv79' + ' = <span id="keyMajor_79" style="color: ' + attColor[2][0] + '">Major</span>' + ' / <span id="keyMinor_79" style="color: ' + attColor[1][0] + '">Minor</span>' ); } //This function creates the drop down menu that chooses the different archetypes. it then colours the SAs that get bonuses or maluses function createDropDown(buildTypes, archetype) { var selectBuild = '<select id="selectBuild" style="float: right; font-weight: normal; font-size: 9px;">'; $.each(buildTypes, function () { selectBuild += '<option value="' + this[0] + '"'; if (archetype === this[0]) { selectBuild += ' style="font-weight: bold; color: #a03c19;" selected="selected"'; } selectBuild += '>' + this[0] + '</option>'; }); selectBuild += '</select>'; $('#player_stats div.medium_head').eq(0).prepend(selectBuild).change(function(e) { e.preventDefault(); highlightAttributes(buildTypes, $(this).find(':selected').val()); }); } // This functions does multiple things, it first of all highlights (with colors ) the text of the attributes on the table , // separating the primary , secondary , tertiary ones // it also somehow feeds ( indirectly? ) the values for the ALGs in the legend area. function highlightAttributes(buildTypes, selectedName) { if(!selectedName) selectedName = $('#selectBuild').find(':selected').val(); if(!selectedName) return; var b = allBuilds[selectedName]; if (!b) { $.each(buildTypes, function () { if (this[0] === selectedName) { allBuilds[selectedName] = b = new build(this); return false; } }); } // SAs $('#player_skill_trees .skill_button').each(function () { var sa; try { sa = this.style.backgroundImage.match(/\/skills\/(.+?)\.(?:bonus\.|penalty\.)?gif\b/)[1]; } catch(e) { console.error('this = ', this); console.error('this.style.backgroundImage = ', this.style.backgroundImage); return true; } if (sa in b.affectedSAs) { $(this).css('background-image', $(this).css('background-image').replace(/(?:\.bonus|\.penalty)?\.gif\b/, '.' + b.affectedSAs[sa] + '.gif')); } else { $(this).css('background-image', $(this).css('background-image').replace(/(?:\.bonus|\.penalty)?\.gif\b/, '.gif')); } }); // atts $('div.stat_head_tall').each(function(i, attName) { var a = $(attName).text().slice(0, 3); var majmin = b.affectedAtts[a] || 0; $(attName).css('color', attColor[majmin][0]).next('div').each(function(j, attVal) { if ($(attVal).hasClass('stat_value_tall_boosted')) { if (attColor[majmin][2]) $(attVal).css('color', attColor[majmin][2]); } else { if (attColor[majmin][1]) $(attVal).css('color', attColor[majmin][1]); } }); }); // Update key var level = parseInt($('#player_current_stats_table .current_stats_value').eq(0).text().split('/')[0], 10); function ALG(l, mm, tgtLv) { if (!parseInt(tgtLv, 10) || tgtLv <= l) tgtLv = l + 1; var out = 0; while (l < tgtLv) { // here the ALG modifier (depended on level ) is calculated var gain = mm * ((l <= 20) ? 1 : (l <= 28) ? 0.75 : (l <= 36) ? 0.5625 : 0.421875) / b.affectedAtts[mm]; out += gain; out = Math.floor(out * 1000) / 1000; ++l; } return out; } $('#keyMajor').html(ALG(level, 2)); $('#keyMajor_79').html(ALG(level, 2, 79)); $('#keyMinor').html(ALG(level, 1)); $('#keyMinor_79').html(ALG(level, 1, 79)); } function getBuilds(position) { switch(position) { case 'FB': return [ ['No Archetype', 'Str,Agi,Blo,Car', 'Sta,Vis,Con,Tac,Cat'], ['Rusher', 'Agi,Car,Con,Str', 'Blo,Spe,Sta,Vis', 'power_through,cut', 'lead_block,pancake'], ['Blocker', 'Agi,Blo,Str,Vis', 'Car,Con,Spe,Sta', 'lead_block,pancake', 'power_through,cut'], ['Combo Back', 'Agi,Blo,Car,Str,Vis', 'Cat,Con,Jum,Spe'], ['Scat Back', 'Agi,Cat,Spe,Vis', 'Blo,Car,Con,Jum', 'sticky_hands,cut', 'lead_block,pancake'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'QB': return [ ['No Archetype', 'Str,Sta,Vis,Con,Thr', 'Spe,Agi,Jum,Cat,Car'], ['Pocket Passer', 'Con,Thr,Vis', 'Agi,Sta,Str,Car', 'pump_fake,tight_spiral', 'on_the_run,dump_pass'], ['Deep Passer', 'Str,Thr,Vis', 'Agi,Con,Sta,Car', 'pump_fake,turn_the_shoulder', 'on_the_run,dump_pass'], ['Scrambler', 'Agi,Thr,Vis', 'Con,Spe,Str,Car', 'on_the_run,dump_pass', 'pump_fake,tight_spiral'] ]; // break; case 'HB': return [ ['No Archetype', 'Str,Spe,Agi,Vis,Con,Car', 'Jum,Sta,Blo,Thr,Cat'], ['Power Back', 'Agi,Car,Con,Str', 'Jum,Spe,Sta,Vis', 'lower_the_shoulder,power_through', 'first_step,spin'], ['Elusive Back', 'Agi,Car,Spe,Vis', 'Cat,Con,Str', 'head_fake,juke', 'lower_the_shoulder,power_through'], ['Scat Back', 'Agi,Car,Cat,Spe', 'Con,Jum,Sta,Vis', 'cut,first_step', 'lower_the_shoulder,power_through'], ['Combo Back', 'Car,Con,Spe,Str,Vis', 'Agi,Cat,Jum,Sta'], ['Returner', 'Agi,Car,Spe,Sta,Vis', 'Con,Jum,Str', 'first_step,cut', 'stiff_arm,power_through'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'WR': return [ ['No Archetype', 'Spe,Agi,Jum,Sta,Vis', 'Con,Car'], ['Speedster', 'Agi,Cat,Con,Spe,Vis', 'Car,Jum,Sta', 'first_step,cut', 'route_running,sticky_hands'], ['Possession Rec', 'Agi,Car,Cat,Jum,Vis', 'Con,Spe,Sta', 'route_running,sticky_hands', 'first_step,cut'], ['Power Rec', 'Agi,Car,Cat,Str,Vis', 'Con,Spe,Sta'], ['Returner', 'Agi,Car,Spe,Sta,Vis', 'Con,Jum,Str', 'first_step,cut', 'route_running,sticky_hands'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'TE': return [ ['No Archetype', 'Str,Vis,Blo,Cat', 'Spe,Agi,Sta,Con,Tac,Car'], ['Blocker', 'Agi,Blo,Con,Str,Vis', 'Cat,Spe,Sta', 'get_low,pancake', 'route_running,cut'], ['Power Rec', 'Agi,Car,Con,Cat,Str', 'Blo,Spe,Sta', 'cover_up,lower_the_shoulder', 'get_low,pancake'], ['Receiver', 'Agi,Car,Cat,Spe,Vis', 'Blo,Sta,Str', 'route_running,cut', 'get_low,pancake'], ['Dual Threat', 'Agi,Blo,Cat,Str,Vis', 'Con,Jum,Spe'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'C': return [ ['No Archetype', 'Str,Blo', 'Agi,Sta,Vis,Con,Tac'], ['Pass Blocker', 'Agi,Blo,Con,Vis', 'Spe,Sta,Str', 'pass_block,foundation', 'get_low,pancake'], ['Run Blocker', 'Blo,Con,Str,Vis', 'Agi,Spe,Sta', 'get_low,pancake', 'pass_block,foundation'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'G': return [ ['No Archetype', 'Str,Con,Blo', 'Agi,Sta,Vis,Tac'], ['Pass Blocker', 'Agi,Blo,Con,Vis', 'Spe,Sta,Str', 'pass_block,foundation', 'get_low,pancake'], ['Run Blocker', 'Blo,Con,Str,Vis', 'Agi,Spe,Sta', 'get_low,pancake', 'pass_block,foundation'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'OT': return [ ['No Archetype', 'Str,Agi,Vis,Con,Blo', 'Sta,Tac'], ['Pass Blocker', 'Agi,Blo,Con,Vis', 'Spe,Sta,Str', 'pass_block,protector', 'get_low,pancake'], ['Run Blocker', 'Blo,Con,Str,Vis', 'Agi,Spe,Sta', 'get_low,pancake', 'pass_block,protector'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'DT': return [ ['No Archetype', 'Str,Agi,Tac', 'Spe,Sta,Vis,Con,Blo'], ['Run Stuffer', 'Agi,Str,Tac,Vis', 'Con,Spe,Sta', 'wall,break_through', 'shed_block,swat_ball'], ['Pass Rusher', 'Agi,Spe,Tac,Vis', 'Con,Sta,Str', 'shed_block,swat_ball', 'wall,break_through'], ['Combo Tackle', 'Spe,Str,Tac,Vis', 'Agi,Con,Sta'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'DE': return [ ['No Archetype', 'Str,Spe,Agi,Tac', 'Jum,Sta,Vis,Con,Blo'], ['Run Stuffer', 'Agi,Str,Tac,Vis', 'Con,Spe,Sta', 'wall,strong_base', 'first_step,tunnel_vision'], ['Pass Rusher', 'Agi,Spe,Tac,Vis', 'Con,Sta,Str', 'first_step,tunnel_vision', 'wall,strong_base'], ['Combo End', 'Spe,Str,Tac,Vis', 'Agi,Con,Sta'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'LB': return [ ['No Archetype', 'Str,Agi,Sta,Vis,Con,Tac', 'Spe,Jum,Blo,Cat'], ['Coverage LB', 'Agi,Jum,Spe,Vis', 'Con,Sta,Str,Tac', 'diving_tackle,swat_ball', 'monster_hit,shed_block'], ['Blitzer', 'Agi,Jum,Spe,Tac', 'Con,Sta,Str,Vis', 'shed_block,big_sack', 'aura_of_intimidation,diving_tackle'], ['Hard Hitter', 'Agi,Str,Tac,Vis', 'Con,Jum,Spe,Sta', 'snarl,monster_hit', 'swat_ball,big_sack'], ['Combo LB', 'Agi,Con,Spe,Tac,Vis', 'Jum,Sta,Str'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'CB': return [ ['No Archetype', 'Spe,Agi,Jum,Sta,Vis,Cat', 'Str,Con,Tac,Car'], ['Man Specialist', 'Agi,Jum,Spe,Vis', 'Cat,Con,Sta,Tac', 'shutdown_coverage', 'closing_speed'], ['Zone Specialist', 'Agi,Spe,Tac,Vis', 'Cat,Con,Jum,Sta', 'superior_vision', 'shutdown_coverage'], ['Hard Hitter', 'Spe,Str,Tac,Vis', 'Agi,Con,Jum,Sta', 'closing_speed', 'change_direction'], ['Combo Corner', 'Agi,Spe,Str,Tac', 'Con,Jum,Sta,Vis'], ['Returner', 'Agi,Car,Spe,Sta,Vis', 'Con,Jum,Str', 'change_direction,return_specialist', 'superior_vision,shutdown_coverage'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'SS': return [ ['No Archetype', 'Str,Spe,Sta,Vis,Tac', 'Agi,Jum,Con,Blo,Cat,Car'], ['Man Specialist', 'Agi,Jum,Spe,Vis', 'Cat,Con,Sta,Tac', 'change_direction', 'big_hit'], ['Zone Specialist', 'Agi,Spe,Tac,Vis', 'Cat,Con,Jum,Sta', 'superior_vision', 'wrap_up_tackle'], ['Hard Hitter', 'Spe,Str,Tac,Vis', 'Agi,Con,Jum,Sta', 'big_hit', 'change_direction'], ['Combo Safety', 'Agi,Spe,Str,Tac', 'Con,Jum,Sta,Vis'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'FS': return [ ['No Archetype', 'Spe,Sta,Vis,Tac,Cat', 'Str,Agi,Jum,Con,Blo,Car'], ['Man Specialist', 'Agi,Jum,Spe,Vis', 'Cat,Con,Sta,Tac', 'shutdown_coverage', 'big_hit'], ['Zone Specialist', 'Agi,Spe,Tac,Vis', 'Cat,Con,Jum,Sta', 'superior_vision', 'shutdown_coverage'], ['Hard Hitter', 'Spe,Str,Tac,Vis', 'Agi,Con,Jum,Sta', 'big_hit', 'change_direction'], ['Combo Safety', 'Agi,Spe,Str,Tac', 'Con,Jum,Sta,Vis'], ['Special Teamer', 'Agi,Blo,Spe,Sta,Tac', 'Con,Str,Vis'] ]; // break; case 'K': return [ ['No Archetype', 'Con,Kic', 'Str,Spe,Agi,Jum,Vis,Thr'], ['Boomer', 'Con,Kic,Str', 'Agi,Jum,Vis'], ['Technician', 'Con,Kic,Vis', 'Agi,Jum,Str'] ]; // break; case 'P': return [ ['No Archetype', 'Con,Pun', 'Str,Spe,Agi,Jum,Vis,Thr'], ['Boomer', 'Con,Pun,Str', 'Agi,Jum,Vis'], ['Technician', 'Con,Pun,Vis', 'Agi,Jum,Str'] ]; // break; } } function build(args) { this.name = args[0]; this.affectedAtts = {0: 14, 1: 0, 2: 0}; var me = this; var att; if (args[1]) $.each(args[1].split(','), function () { me.affectedAtts[this] = 2; ++me.affectedAtts[2]; --me.affectedAtts[0]; }); if (args[2]) $.each(args[2].split(','), function () { me.affectedAtts[this] = 1; ++me.affectedAtts[1]; --me.affectedAtts[0]; }); this.affectedSAs = {}; var sa; if (args[3]) $.each(args[3].split(','), function () { me.affectedSAs[this] = 'bonus'; }); if (args[4]) $.each(args[4].split(','), function () { me.affectedSAs[this] = 'penalty'; }); } // this function gets the player's archetype function getArchetype() { var atImg = $('#player img[src^="/images/game/archetypes/"]'); return (atImg.length === 1 ? atImg.parent().html().split("'")[1] : 'No Archetype') .replace('Linebacker', 'LB').replace(' Receiver', ' Rec'); } // This function adds the tabbed view with the different views of the players' stats, with or without item bonuses // the thing is something changed in the glb site since when this was written and two of the options do not work properly. // specifically +/- shows naked values and naked +/- shows normal values function setupOtherViews() { $('#player_stats > table.player_stats_table').before('<div id="statsDivs"><div id="statsTabBar" class="subhead_link_bar" style="width: 320px; position: static;"><div id="tab_normalStats" class="tab_off"><a href="javascript:;">Normal</a></div><div id="tab_nakedStats" class="tab_off"><a href="javascript:;">Naked</a></div><div id="tab_bonusStats" class="tab_on"><a href="javascript:;">+/-</a></div><div id="tab_nakedBonusStats" class="tab_off"><a href="javascript:;">Naked & +/-</a></div></div><div id="statsTables"><div id="normalStats"></div><div id="nakedStats"></div><div id="bonusStats"></div><div id="nakedBonusStats"></div></div></div>'); $('#normalStats').hide().append($('#player_stats > table.player_stats_table')); $('#nakedStats').hide().append($('#normalStats table.player_stats_table').clone()); $('#bonusStats').append($('#normalStats table.player_stats_table').clone()); $('#nakedStats div.stat_value_tall_boosted').each(function () { $(this).text(eval($(this).text().replace('(', '').replace('+', '-').replace(')', ''))); }); $('#nakedBonusStats').hide().append($('#nakedStats table.player_stats_table').clone()); $('#player_stats table.column_320').find('tr.alternating_color1, tr.alternating_color2').each(function () { if (bonus[$(this).find('td').eq(0).text()] === undefined) return; bonus[$(this).find('td').eq(0).text()] = parseFloat($(this).find('td').eq(1).text()); }); $('#bonusStats, #nakedBonusStats').find('div.stat_head_tall').each(function () { var a = $(this).text().replace(':', ''); if (!bonus[a]) return; $(this).next().text($(this).next().text().replace(/([0-9.]+)/, function(m, base) { var newVal = parseFloat(base) + bonus[a]; return Math.round(newVal * 100) / 100; })); }); $('#player_stats table.column_320').find('tr.alternating_color1, tr.alternating_color2').each(function () { if (bonus[$(this).find('td').eq(0).text()] !== undefined) $(this).hide(); }); function clickStatsTab(tab) { $('#statsTables > div').hide(); $('#' + tab).show(); $('#statsTabBar > div').addClass('tab_off').removeClass('tab_on'); $('#tab_' + tab).addClass('tab_on').removeClass('tab_off'); var hideBnP = 0; if (tab.indexOf('onus') != -1) hideBnP = 1; $('#player_stats table.column_320').find('tr.alternating_color1, tr.alternating_color2').each(function () { if (hideBnP) { if (bonus[$(this).find('td').eq(0).text()] !== undefined) $(this).hide(); } else { if (bonus[$(this).find('td').eq(0).text()] !== undefined) $(this).show(); } }); GM_setValue('statsView', tab); } $('#tab_normalStats').click(function () { clickStatsTab('normalStats'); }); $('#tab_nakedStats').click(function () { clickStatsTab('nakedStats'); }); $('#tab_bonusStats').click(function () { clickStatsTab('bonusStats'); }); $('#tab_nakedBonusStats').click(function () { clickStatsTab('nakedBonusStats'); }); clickStatsTab(GM_getValue('statsView', 'bonusStats')); } position = $('.position').eq(0).text(); buildTypes = getBuilds(position); archetype = getArchetype(); createLegend(); createDropDown(buildTypes, archetype); highlightAttributes(buildTypes, archetype); setupOtherViews();