TM Routine Line Sharing

Display players routine in tactics page

目前為 2017-08-29 提交的版本,檢視 最新版本

// ==UserScript==
// @name         TM Routine Line Sharing
// @namespace    https://trophymanager.com/
// @version      0.4
// @description  Display players routine in tactics page
// @iconURL      https://static.trophymanager.com/pics/icons/mini_field.png
// @author       Matteo Tomassetti (Polverigi FC)
// @include      https://trophymanager.com/tactics/*
// @grant        none
// ==/UserScript==

(function() {
	'use strict';
	// ****************************
	// *** Constants definition ***
	// ****************************
	var share_bonus = 0.25;
	var routine_cap = 40.0;
	var def_line_idx = [0, 6];   // Defensive positions are 0 to 5
	var mid_line_idx = [6, 16];  // Midfield positions are 6 to 15
	var off_line_idx = [16, 24]; // Offensive positions are 16 to 23

	// ************************
	// *** Script main code ***
	// ************************
	var players_on_field = {};

	// Attach click event handler function to the tactics field:
	// when the user clicks on the field, routine values are updated
	$("#tactics_field").click(function() {
		updatePlayersRoutine();
		displayPlayersRoutine();
	});

	// ****************************
	// *** Functions definition ***
	// ****************************

	/*
	* This function displays routine value of each player below his name
	*/
	function displayPlayersRoutine() {
		// show routine of players on field
		$("div.field_player").each(function(index, el) {
			// fix gk flag issue
			if ($(el).attr("position") === "gk") {
				var hasFlag = $(el).find("ib").length;
				var width = (hasFlag ? "130px" : "60px");
				var text_align = (hasFlag ? "left" : "center");
				$(el).find("div.field_player_name").css({
					"width": width,
					"text-align": text_align    
				});            
			}
			if ($(el).attr("player_set") === "false") {
				$(el).find("div.field_player_routine").remove();  
			} else {           
				var id = $(el).attr("player_id");
				var no = players_on_field[id]["no"];
				var routine = players_on_field[id]["routine"]; 
				var rou_div = $(el).find("div.field_player_routine");
				if (rou_div.length) {
					// div already exists
					rou_div.text(routine);
				} else {
					// create new div to display routine value
					$(this).append('<div class="field_player_routine">' + routine + '</div>');   
				}        
			}       
		}); 
		// show routine of players on bench
		$("li.bench_player").each(function(index, el) {
			var id = $(el).attr("player_id");
			var routine = players_by_id[id]["routine"];
			var rou_div = $(el).find("div.bench_player_routine");
			if (rou_div.length) {
				// div already exists
				rou_div.text(routine);
			} else {
				// create new div to display routine value
				var rec_div = $(el).find("div.rec_stars").css("line-height", "14px");
				$("<div></div>")
					.addClass("bench_player_routine")
					.css({
					"font-size": "10px",
					"text-align": "center"    
				})
					.text(routine)
					.appendTo(rec_div);
			}       
		});     
	}

	/*
	* This function updates the routine of all players on the field 
	* applying the routine bonus
	*/
	function updatePlayersRoutine() {
		updateLineRoutine(def_line_idx);
		updateLineRoutine(mid_line_idx);
		updateLineRoutine(off_line_idx);    
	}

	/*
	* This function applies the routine bonus to the player with least routine 
	* in the given line and saves the updated routine value  
	*/
	function updateLineRoutine(line_idx) {
		var players_ar = [];
		// for each position in the line
		for (var i = line_idx[0]; i < line_idx[1]; i++) {      
			var id = formation_by_pos[i];
			// check if there is a player in that position
			if (id !== "0" && id !== null) {
				// retrieve player info
				var player = players_by_id[id];
				var name = player["name"];
				var no = player["no"];
				var routine = parseFloat(player["routine"]);           
				// create new player object and add it to the array
				var p = {"id": id, "no": no, "routine": routine};
				players_ar.push(p);
			}   
		}
		// sort players array by routine in ascending order
		players_ar.sort(compareByRoutineAsc);    
		var line_size = players_ar.length; // players in the line
		// if line consist of two or more players
		if (line_size > 1) {
		    var min = players_ar[0]["routine"];
		    // player must have less than 40 routine to obtain bonus
		    if (min < routine_cap) { 
		        var min2 = players_ar[1]["routine"];
		        var max = players_ar[line_size - 1]["routine"];
		        // calculate new routine value applying routine bonus
    			var bonus = max * share_bonus;
    			var new_routine = min + bonus;
    			new_routine = (new_routine < min2 ? new_routine : min2);
    			new_routine = (new_routine < routine_cap ? new_routine : routine_cap);
    			new_routine = parseFloat(new_routine.toFixed(1));
    			// update player routine
    			players_ar[0]["routine"] = new_routine;
		    }
			// insert players into players_on_field object by id
			for (var i = 0; i < players_ar.length; i++) {
				var player = players_ar[i];
				var id = player["id"];
				var no = player["no"];
				var routine = player["routine"];
				players_on_field[id] = {"no": no, "routine": routine};
			}
		}
	}

	/*
	* Compare function to sort objects by their routine property in ascending order
	*/
	function compareByRoutineAsc(a, b) {
		return (a.routine - b.routine);
	}

	/*
	* Compare function to sort objects by their routine property in descending order
	*/
	function compareByRoutineDes(a, b) {
		return (b.routine - a.routine);
	}

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址