Subpage under development, new version coming soon!
Subject: »JUVENILES
En Firefox instalás y activás la extensión Greasemonkey - https://addons.mozilla.org/es/firefox/addon/greasemonkey/
Luego en el menú desplegable de la extensión elegís: Nuevo script de usuario, en la pantalla que se abre copiás el código que publicó tenuco y lo guardás (botón arriba a la izquierda).
Cerrás todas las ventanas de Firefox, y cuando entres de nuevo a Sokker debería salir en la página de juveniles.
Luego en el menú desplegable de la extensión elegís: Nuevo script de usuario, en la pantalla que se abre copiás el código que publicó tenuco y lo guardás (botón arriba a la izquierda).
Cerrás todas las ventanas de Firefox, y cuando entres de nuevo a Sokker debería salir en la página de juveniles.
Según la Youth Talent Calculator https://geston.smallhost.pl/sokker/juniors.html (el mismo que hizo la calculadora de eficiencia de entrenamiento) mi jugador da talento 7.
O sea, bastante cerca de lo que da el programa de tenuco... (todos unos amargos que te tiran abajo los juveniles :))
Lo malo de este programa es que hay que ingresar los valores a mano.
(edited)
O sea, bastante cerca de lo que da el programa de tenuco... (todos unos amargos que te tiran abajo los juveniles :))
Lo malo de este programa es que hay que ingresar los valores a mano.
(edited)
ahi va una manito para usar esa pagina, que le decia a malvin que yo la usaba pero me daba fiaca todo el proceso! je... a ver ahora
[code]
// ==UserScript==
// @name Sokker Juniors Talent Calc
// @namespace sokker.org
// @include https://sokker.org/juniors/teamID/*
// @version 1.1
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/regression/2.0.1/regression.min.js
// ==/UserScript==
let tables = document.getElementsByClassName('table');
for (let t = 0; t < tables.length; t++) {
for (let r = 0; r < tables[t].rows.length; r++) {
let row = tables[t].rows[r];
if (row.id.startsWith('juniorRow')) {
let juniorId = row.id.substr('juniorRow'.length);
let juniorName = row.cells[0].innerText;
//console.log("Table row:"+r+" id:"+row.id+" juniorId:"+juniorId+" name:"+juniorName);
//https://sokker.org/api/junior/27686135/graph
fetch("https://sokker.org/api/junior/"+juniorId+"/graph")
.then(res => res.json())
.then(resData => {
if (resData.values.length >= 5) {
//console.log(juniorName+' DATA:', resData.values);
let weeks = parseInt(row.cells[4].innerText, 10);
let age = parseInt(row.cells[1].innerText, 10);
let count = 0;
let dataG = [];
let data = [];
resData.values.forEach(entry => {
//console.log(count, entry.y);
data.push([count, entry.y]);
dataG.push(entry.y);
count++;
});
//console.log(juniorName+' DATA:'+JSON.stringify(data));
let dataFixed = regression.linear(data);
let talent = Math.round((10 / (dataFixed.equation[0] * 10)) * 100) / 100;
let spected = dataFixed.predict(count+weeks)[1]
//console.log(juniorName+' talent:'+talent+' spected:'+spected+' tw:'+(count+weeks)+' dw:'+count+' rw:'+weeks+' eq:'+JSON.stringify(dataFixed.equation));
//console.log('D:'+JSON.stringify(data));
//console.log('F:'+JSON.stringify(dataFixed.points));
//console.log('G:'+JSON.stringify(dataG));
//console.log('dst:'+row.cells[5].children[0].innerHTML);
//console.log('---------------------------------');
$(row.cells[5].children[0]).prepend('<li class="talent_fix" style="float: left;"><button class="btn btn-primary btn-xs geston_evt"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-graph-up" viewBox="0 0 16 16"> <path fill-rule="evenodd" d="M0 0h1v15h15v1H0V0Zm14.817 3.113a.5.5 0 0 1 .07.704l-4.5 5.5a.5.5 0 0 1-.74.037L7.06 6.767l-3.656 5.027a.5.5 0 0 1-.808-.588l4-5.5a.5.5 0 0 1 .758-.06l2.609 2.61 4.15-5.073a.5.5 0 0 1 .704-.07Z"/></svg></button> T: '+talent+' P: '+spected);
let gestonURL = 'https://geston.smallhost.pl/sokker/juniors.html?pops='+dataG.map( (e) => (e) ).join(',')+'&name='+juniorName+'&age='+age+'&weeks='+weeks;
$("#"+row.id+" .geston_evt").click(function() {
if ($("#juniorGestonGraphRow"+juniorId).length == 0) {
$('#juniorRow'+juniorId).after(
'<tr id="juniorGestonGraphRow'+juniorId+'"><td colspan="6"><iframe src="'+gestonURL+'" style="width:100%; height: 600px;" id="juniorGestonGraph'+juniorId+'" frameborder="0"></iframe></td></tr>'
);
} else {
$('#juniorGestonGraphRow'+juniorId).toggle();
}
});
}
})
.catch(err => { throw err });
}
}
}
[/code]
[code]
// ==UserScript==
// @name Sokker Juniors Talent Calc
// @namespace sokker.org
// @include https://sokker.org/juniors/teamID/*
// @version 1.1
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/regression/2.0.1/regression.min.js
// ==/UserScript==
let tables = document.getElementsByClassName('table');
for (let t = 0; t < tables.length; t++) {
for (let r = 0; r < tables[t].rows.length; r++) {
let row = tables[t].rows[r];
if (row.id.startsWith('juniorRow')) {
let juniorId = row.id.substr('juniorRow'.length);
let juniorName = row.cells[0].innerText;
//console.log("Table row:"+r+" id:"+row.id+" juniorId:"+juniorId+" name:"+juniorName);
//https://sokker.org/api/junior/27686135/graph
fetch("https://sokker.org/api/junior/"+juniorId+"/graph")
.then(res => res.json())
.then(resData => {
if (resData.values.length >= 5) {
//console.log(juniorName+' DATA:', resData.values);
let weeks = parseInt(row.cells[4].innerText, 10);
let age = parseInt(row.cells[1].innerText, 10);
let count = 0;
let dataG = [];
let data = [];
resData.values.forEach(entry => {
//console.log(count, entry.y);
data.push([count, entry.y]);
dataG.push(entry.y);
count++;
});
//console.log(juniorName+' DATA:'+JSON.stringify(data));
let dataFixed = regression.linear(data);
let talent = Math.round((10 / (dataFixed.equation[0] * 10)) * 100) / 100;
let spected = dataFixed.predict(count+weeks)[1]
//console.log(juniorName+' talent:'+talent+' spected:'+spected+' tw:'+(count+weeks)+' dw:'+count+' rw:'+weeks+' eq:'+JSON.stringify(dataFixed.equation));
//console.log('D:'+JSON.stringify(data));
//console.log('F:'+JSON.stringify(dataFixed.points));
//console.log('G:'+JSON.stringify(dataG));
//console.log('dst:'+row.cells[5].children[0].innerHTML);
//console.log('---------------------------------');
$(row.cells[5].children[0]).prepend('<li class="talent_fix" style="float: left;"><button class="btn btn-primary btn-xs geston_evt"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-graph-up" viewBox="0 0 16 16"> <path fill-rule="evenodd" d="M0 0h1v15h15v1H0V0Zm14.817 3.113a.5.5 0 0 1 .07.704l-4.5 5.5a.5.5 0 0 1-.74.037L7.06 6.767l-3.656 5.027a.5.5 0 0 1-.808-.588l4-5.5a.5.5 0 0 1 .758-.06l2.609 2.61 4.15-5.073a.5.5 0 0 1 .704-.07Z"/></svg></button> T: '+talent+' P: '+spected);
let gestonURL = 'https://geston.smallhost.pl/sokker/juniors.html?pops='+dataG.map( (e) => (e) ).join(',')+'&name='+juniorName+'&age='+age+'&weeks='+weeks;
$("#"+row.id+" .geston_evt").click(function() {
if ($("#juniorGestonGraphRow"+juniorId).length == 0) {
$('#juniorRow'+juniorId).after(
'<tr id="juniorGestonGraphRow'+juniorId+'"><td colspan="6"><iframe src="'+gestonURL+'" style="width:100%; height: 600px;" id="juniorGestonGraph'+juniorId+'" frameborder="0"></iframe></td></tr>'
);
} else {
$('#juniorGestonGraphRow'+juniorId).toggle();
}
});
}
})
.catch(err => { throw err });
}
}
}
[/code]
Para mi es chino básico esto jajaja, cero programación lo mío
Lujo, gracias.
Ahora tenemos las dos versiones para comparar, y lo más importante, no hay que poner los valores a mano en lo del polaco!
Eso sí, me cagaron varios juveniles :)
De los pocos que se salvaron:
(edited)
Ahora tenemos las dos versiones para comparar, y lo más importante, no hay que poner los valores a mano en lo del polaco!
Eso sí, me cagaron varios juveniles :)
De los pocos que se salvaron:
(edited)
No echen jugadores fijándose en su talento tan temprano. Me ha pasado muchas veces que los esperás, la gráfica se acomoda, y un jugador que parecía talento 7 (despido seguro) terminó teniendo talento 4 (talento correcto). Para mi hay 2 condiciones de despido seguro: a) el jugador entra en la escuela con 18 años, saldrá con 20 y tiene un nivel debajo de "débil" o "regular" (lo echo de inmediato). b) el jugador estuvo 12 semanas en la escuela y sigue mostrando un talento de mierda.
Si queremos despedir a un juvenil en menos de 12 semanas, debería ser basado en el nivel y no en el talento, porque menos de 12 semanas no es suficiente para tener seguridad sobre ese dato (ya que las priemeras 4 o 5 semanas son datos muy erróneos).
Si queremos despedir a un juvenil en menos de 12 semanas, debería ser basado en el nivel y no en el talento, porque menos de 12 semanas no es suficiente para tener seguridad sobre ese dato (ya que las priemeras 4 o 5 semanas son datos muy erróneos).
si, yo en general asumo un talento 4 como para saber segun la edad a la que va a salir, si puede estar potable o no. Siempre injusticias o errores vas a cometer, pero creo que es una buena aproximacion.
Y despues lo sigo un poco, en general los cuando salen son talentosos tienen graficas de crecimiento y los que no tienden a horizontalizarse y cabildeando mas tipo sinousoidal hasta que estabilizan un nivel nuevo y vuelven a cabildear ahi. Esos rara vez terminan siendo buenos a la larga.
Y despues lo sigo un poco, en general los cuando salen son talentosos tienen graficas de crecimiento y los que no tienden a horizontalizarse y cabildeando mas tipo sinousoidal hasta que estabilizan un nivel nuevo y vuelven a cabildear ahi. Esos rara vez terminan siendo buenos a la larga.
Cuando tenga un rato le agrego el dato de las semanas
En
W: 5/14
Para saber cuántas van y cuantas faltan
En
W: 5/14
Para saber cuántas van y cuantas faltan
Sí, claro, yo hago eso.
Incluso el de talento infinito sigue estando ahí esperando que aprenda a caminar :)
Incluso el de talento infinito sigue estando ahí esperando que aprenda a caminar :)
Otra cosa que no entiendo, es por qué en la página de juveniles no te muestran el peso, altura e IMC, que son datos que están en el xml, y que sería otra información más para ver sin necesidad de estar recurriendo a programas o bajar el xml.
me quedo habilitado el codigo de tenuco, reinicie todo pero no veo cambios.
el codigo esta grabado, alguno tiene idea de si me comi un paso?
el codigo esta grabado, alguno tiene idea de si me comi un paso?
Cuando hacés clic en la cara del monito arriba a la derecha, en el menú despelegable aparece listado el script "Sokker Junior Talent Calc"?
Copiaste y pegaste exactamente todo el código, no te faltó alguna línea, a veces al copiar podemos comernos la última línea...
Copiaste y pegaste exactamente todo el código, no te faltó alguna línea, a veces al copiar podemos comernos la última línea...
gente, ahi le agregue ese dato de las semanas transcurridas que creo que suma... Malvin, no recuerdo que envia por XML pero la nueva API es con JSON y ahi esos datos no esta (no digo que nos los tenga ya el juvenil, solo que sokker no los envia)
Para agregar se debe tener instalado:
Firefox: Greasemonkey
Chrome: Tampermonkey
Edge: Tampermonkey (asumo que si pero no lo probe)
Aqui les dejo un link para descargar el script con formato mas amigable:
https://pastebin.com/raw/55AYDx9v
Para los mas rusticos, les dejo el script aca pegado:
// ==UserScript==
// @name Sokker Juniors Talent Calc
// @namespace sokker.org
// @include https://sokker.org/juniors/teamID/*
// @version 1.1
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/regression/2.0.1/regression.min.js
// ==/UserScript==
let tables = document.getElementsByClassName('table');
for (let t = 0; t < tables.length; t++) {
for (let r = 0; r < tables[t].rows.length; r++) {
let row = tables[t].rows[r];
if (row.id.startsWith('juniorRow')) {
let juniorId = row.id.substr('juniorRow'.length);
let juniorName = row.cells[0].innerText;
//console.log("Table row:"+r+" id:"+row.id+" juniorId:"+juniorId+" name:"+juniorName);
//https://sokker.org/api/junior/27686135/graph
fetch("https://sokker.org/api/junior/" + juniorId + "/graph")
.then(res => res.json())
.then(resData => {
if (resData.values.length >= 5) {
//console.log(juniorName+' DATA:', resData.values);
let weeks = parseInt(row.cells[4].innerText, 10);
let age = parseInt(row.cells[1].innerText, 10);
let count = 0;
let dataG = [];
let data = [];
resData.values.forEach(entry => {
//console.log(count, entry.y);
data.push([count, entry.y]);
dataG.push(entry.y);
count++;
});
//console.log(juniorName+' DATA:'+JSON.stringify(data));
let dataFixed = regression.linear(data);
let talent = Math.round((10 / (dataFixed.equation[0] * 10)) * 100) / 100;
let spected = dataFixed.predict(count + weeks)[1]
let weeksTotal = weeks + count;
//console.log(juniorName+' talent:'+talent+' spected:'+spected+' tw:'+(count+weeks)+' dw:'+count+' rw:'+weeks+' eq:'+JSON.stringify(dataFixed.equation));
//console.log('D:'+JSON.stringify(data));
//console.log('F:'+JSON.stringify(dataFixed.points));
//console.log('G:'+JSON.stringify(dataG));
//console.log('dst:'+row.cells[5].children[0].innerHTML);
//console.log('---------------------------------');
$(row.cells[5].children[0]).prepend('<li class="talent_fix" style="float: left;"><button class="btn btn-primary btn-xs geston_evt">'+
'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-graph-up" viewBox="0 0 16 16">'+
'<path fill-rule="evenodd" d="M0 0h1v15h15v1H0V0Zm14.817 3.113a.5.5 0 0 1 .07.704l-4.5 5.5a.5.5 0 0 1-.74.037L7.06 6.767l-3.656 5.027a.5.5 0 0 1-.808-.588l4-5.5a.5.5 0 0 1 .758-.06l2.609 2.61 4.15-5.073a.5.5 0 0 1 .704-.07Z"/>'+
'</svg></button> T: ' + talent + ' W: '+count+'/'+weeksTotal + ' P: ' + spected);
let gestonURL = 'https://geston.smallhost.pl/sokker/juniors.html?pops=' + dataG.map((e) => (e)).join(',') + '&name=' + juniorName + '&age=' + age + '&weeks=' + weeks;
$("#" + row.id + " .geston_evt").click(function() {
if ($("#juniorGestonGraphRow" + juniorId).length == 0) {
$('#juniorRow' + juniorId).after(
'<tr id="juniorGestonGraphRow' + juniorId + '"><td colspan="6"><iframe src="' + gestonURL + '" style="width:100%; height: 600px;" id="juniorGestonGraph' + juniorId + '" frameborder="0"></iframe></td></tr>'
);
} else {
$('#juniorGestonGraphRow' + juniorId).toggle();
}
});
}
})
.catch(err => {
throw err
});
}
}
}
(edited)
Para agregar se debe tener instalado:
Firefox: Greasemonkey
Chrome: Tampermonkey
Edge: Tampermonkey (asumo que si pero no lo probe)
Aqui les dejo un link para descargar el script con formato mas amigable:
https://pastebin.com/raw/55AYDx9v
Para los mas rusticos, les dejo el script aca pegado:
// ==UserScript==
// @name Sokker Juniors Talent Calc
// @namespace sokker.org
// @include https://sokker.org/juniors/teamID/*
// @version 1.1
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/regression/2.0.1/regression.min.js
// ==/UserScript==
let tables = document.getElementsByClassName('table');
for (let t = 0; t < tables.length; t++) {
for (let r = 0; r < tables[t].rows.length; r++) {
let row = tables[t].rows[r];
if (row.id.startsWith('juniorRow')) {
let juniorId = row.id.substr('juniorRow'.length);
let juniorName = row.cells[0].innerText;
//console.log("Table row:"+r+" id:"+row.id+" juniorId:"+juniorId+" name:"+juniorName);
//https://sokker.org/api/junior/27686135/graph
fetch("https://sokker.org/api/junior/" + juniorId + "/graph")
.then(res => res.json())
.then(resData => {
if (resData.values.length >= 5) {
//console.log(juniorName+' DATA:', resData.values);
let weeks = parseInt(row.cells[4].innerText, 10);
let age = parseInt(row.cells[1].innerText, 10);
let count = 0;
let dataG = [];
let data = [];
resData.values.forEach(entry => {
//console.log(count, entry.y);
data.push([count, entry.y]);
dataG.push(entry.y);
count++;
});
//console.log(juniorName+' DATA:'+JSON.stringify(data));
let dataFixed = regression.linear(data);
let talent = Math.round((10 / (dataFixed.equation[0] * 10)) * 100) / 100;
let spected = dataFixed.predict(count + weeks)[1]
let weeksTotal = weeks + count;
//console.log(juniorName+' talent:'+talent+' spected:'+spected+' tw:'+(count+weeks)+' dw:'+count+' rw:'+weeks+' eq:'+JSON.stringify(dataFixed.equation));
//console.log('D:'+JSON.stringify(data));
//console.log('F:'+JSON.stringify(dataFixed.points));
//console.log('G:'+JSON.stringify(dataG));
//console.log('dst:'+row.cells[5].children[0].innerHTML);
//console.log('---------------------------------');
$(row.cells[5].children[0]).prepend('<li class="talent_fix" style="float: left;"><button class="btn btn-primary btn-xs geston_evt">'+
'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-graph-up" viewBox="0 0 16 16">'+
'<path fill-rule="evenodd" d="M0 0h1v15h15v1H0V0Zm14.817 3.113a.5.5 0 0 1 .07.704l-4.5 5.5a.5.5 0 0 1-.74.037L7.06 6.767l-3.656 5.027a.5.5 0 0 1-.808-.588l4-5.5a.5.5 0 0 1 .758-.06l2.609 2.61 4.15-5.073a.5.5 0 0 1 .704-.07Z"/>'+
'</svg></button> T: ' + talent + ' W: '+count+'/'+weeksTotal + ' P: ' + spected);
let gestonURL = 'https://geston.smallhost.pl/sokker/juniors.html?pops=' + dataG.map((e) => (e)).join(',') + '&name=' + juniorName + '&age=' + age + '&weeks=' + weeks;
$("#" + row.id + " .geston_evt").click(function() {
if ($("#juniorGestonGraphRow" + juniorId).length == 0) {
$('#juniorRow' + juniorId).after(
'<tr id="juniorGestonGraphRow' + juniorId + '"><td colspan="6"><iframe src="' + gestonURL + '" style="width:100%; height: 600px;" id="juniorGestonGraph' + juniorId + '" frameborder="0"></iframe></td></tr>'
);
} else {
$('#juniorGestonGraphRow' + juniorId).toggle();
}
});
}
})
.catch(err => {
throw err
});
}
}
}
(edited)
Malvin, no recuerdo que envia por XML pero la nueva API es con JSON y ahi esos datos no esta (no digo que nos los tenga ya el juvenil, solo que sokker no los envia)
No me refería a tu código, sino a la propia página de sokker.
Quizás sea olvido o que en algún momento no usen más los xml:
No me refería a tu código, sino a la propia página de sokker.
Quizás sea olvido o que en algún momento no usen más los xml: