Cría de caballos ¿Una perdida de tiempo y recursos?
Moderadores: SGM, Moderador, GM
He decompilado el plugin del que ha hablado db antes y he encontrado una cosa muy graciosa en el código:
Código: Seleccionar todo
private boolean pSpecial;
// [...]
this.pSpecial = false;
// [...]
Player p = (Player)e;
if ((p.getName() == "Soiyeruda") && (p.getInventory().contains(Material.DIAMOND_BLOCK))) {
this.pSpecial = true;
}
// [...]
if (this.pSpecial) {
speed.setValue(Config.maxSpeed * 2.0D);
health.setValue(Config.maxHealth * 5.0D);
}
(He omitido el código que hay entre medias porque no era relevante para la ocasión.)
Vamos, que el que lo ha programado se da trato preferente. No sé si va contra las normas de Bukkit Dev pero no informa explícitamente de ello en la página.
Por lo demás es un plugin muy simple y fácil de editar en caso de que se quiera modificar ligeramente la fórmula (o cambiar el nick "Soiyeruda" por "zant95" en lo del trato preferente). El código decompilado no he probado si da problemas a la hora de volver a compilarlo, pero dado el poco contenido que tiene no creo que sean fallos difíciles de arreglar.
- Kunio_Otani
- Superviviente
- Mensajes: 1009
- Registrado: 15 Abr 2012, 19:09
Zant escribió:He decompilado el plugin del que ha hablado db antes y he encontrado una cosa muy graciosa en el código:
Código: Seleccionar todo
private boolean pSpecial; // [...] this.pSpecial = false; // [...] Player p = (Player)e; if ((p.getName() == "Soiyeruda") && (p.getInventory().contains(Material.DIAMOND_BLOCK))) { this.pSpecial = true; } // [...] if (this.pSpecial) { speed.setValue(Config.maxSpeed * 2.0D); health.setValue(Config.maxHealth * 5.0D); }
(He omitido el código que hay entre medias porque no era relevante para la ocasión.)
Vamos, que el que lo ha programado se da trato preferente. No sé si va contra las normas de Bukkit Dev pero no informa explícitamente de ello en la página.
Por lo demás es un plugin muy simple y fácil de editar en caso de que se quiera modificar ligeramente la fórmula (o cambiar el nick "Soiyeruda" por "zant95" en lo del trato preferente). El código decompilado no he probado si da problemas a la hora de volver a compilarlo, pero dado el poco contenido que tiene no creo que sean fallos difíciles de arreglar.
Me ha molado lo de que dependa también de que lleve X item si quiere aprovecharse del trato preferente, ¿para controlar cuándo lo usa o por si le ve alguien?
redwolf562 escribió:Me ha molado lo de que dependa también de que lleve X item si quiere aprovecharse del trato preferente, ¿para controlar cuándo lo usa o por si le ve alguien?
Para hacer amigos lo he comentado en la página del plugin xD
http://dev.bukkit.org/bukkit-plugins/better-horse-breeding/#c6
- PeterLancton
- Superviviente
- Mensajes: 2347
- Registrado: 05 Sep 2012, 17:55
robertoccu escribió:Siendo que X es 0'xx puede interpretarse directamente como que puede darle la importancia de x a uno y de x-100% a otro. Pudiendo ser: 10% uno y 90% el otro o 33% uno y 77% el otro.
Al menos asi lo he entendido.
Sí, lo que pasa es que, a diferencia de la primera fórmula, no se hace una media aritmética entre las 3 stats sino que en la segunda le suma unas terceras estadísticas que por muy afectadas que estén por un coeficiente -10% siguen sumándose a las de los padres dando inevitablemente mejores caballos.
Basta con hacer un test en excell con valores aleatorios, luego vas superponiendo generaciones y en nada (tres generaciones) te encuentras con caballos de 50/60.
PeterLancton escribió:robertoccu escribió:Siendo que X es 0'xx puede interpretarse directamente como que puede darle la importancia de x a uno y de x-100% a otro. Pudiendo ser: 10% uno y 90% el otro o 33% uno y 77% el otro.
Al menos asi lo he entendido.
Sí, lo que pasa es que, a diferencia de la primera fórmula, no se hace una media aritmética entre las 3 stats sino que en la segunda le suma unas terceras estadísticas que por muy afectadas que estén por un coeficiente -10% siguen sumándose a las de los padres dando inevitablemente mejores caballos.
Basta con hacer un test en excell con valores aleatorios, luego vas superponiendo generaciones y en nada (tres generaciones) te encuentras con caballos de 50/60.
El plugin lo capa en 14.5. No puede superar ese limite
Dunham21 escribió:El plugin lo capa en 14.5. No puede superar ese limite
Pues se hace un fork de ese plugin y se cambia a gusto de todos
Fragmento del código fuente:
Código: Seleccionar todo
public static double minBonus = -0.05D;
public static double maxBonus = 0.1D;
public static double maxHealth = 30.0D;
public static double maxSpeed = 0.3375D;
public static int rareChanceStat = 200;
public static int rareChanceVariant = 200;
Zant escribió:Por lo demás es un plugin muy simple y fácil de editar en caso de que se quiera modificar ligeramente la fórmula (o cambiar el nick "Soiyeruda" por "zant95" en lo del trato preferente). El código decompilado no he probado si da problemas a la hora de volver a compilarlo, pero dado el poco contenido que tiene no creo que sean fallos difíciles de arreglar.
Si, eso ya lo había visto, muy simpatico el programador......
Tampoco es que haga gran cosa (no es un problema de seguridad), pero es un detalle bastante feo.
El Plugin es bastante sencillo, y se podría modificar la formula facilmente si fuera necesario.
Pues yo creo que no deberíamos facilitar tanto criar caballos de stats extremos, se pierde el mérito a buscar caballos excelentes. Hay gente que se tiró horas y horas pateando el mapa de extremo a extremo para buscarlos.
No necesitamos caballos que corran 13 o 14, yo uso doces y van perfecto.
La vida llega con stats medios, y de salto con 3 ya son usables .
Si fuera tan fácil conseguir un 14 30 5, ya no tendría mérito.
Yo propondría dar mas peso a los stats de los padres, pero mantener el factor aleatorio, por ejemplo
(2P1 + 2P2 + R) / 5
nxt escribió:Pues yo creo que no deberíamos facilitar tanto criar caballos de stats extremos, se pierde el mérito a buscar caballos excelentes. Hay gente que se tiró horas y horas pateando el mapa de extremo a extremo para buscarlos.
No necesitamos caballos que corran 13 o 14, yo uso doces y van perfecto.
La vida llega con stats medios, y de salto con 3 ya son usables .
Si fuera tan fácil conseguir un 14 30 5, ya no tendría mérito.
Yo propondría dar mas peso a los stats de los padres, pero mantener el factor aleatorio, por ejemplo
(2P1 + 2P2 + R) / 5
Con esa fórmula nunca vas a mejorar a los padres
- PeterLancton
- Superviviente
- Mensajes: 2347
- Registrado: 05 Sep 2012, 17:55
Se me ocurre esta:
donde alfa, beta y a son coeficientes arbitrarios, X es la media aritmética de las estadísticas de ambos padres para una característica determinada, R es un número aleatorio oscilando en torno a la media (como el default).
La idea es que esta fórmula permite hacer distribuciones ajustables, es básicamente como la de Nxt, una media aritmética con alfa y beta como coeficientes para ponderar las características de los padres y las aleatorias en torno a la media. La única diferencia es que he añadido una exponencial cuya convergencia es aumentable mediante el parámetro a. El 7 también se podría aumentar para obtener mejores caballos independientemente de las características de los padres.
Primero se hace la media de los padres tras lo cual se le suma una cantidad que varía entre 0,5 y 0,06 más o menos (para a=0,5) en función de las características de los padres, cuanto mejores sean, menos se le suma. Después se hace una simple media ponderada con R que le aporta el carácter más aleatorio.
Esto permite que sea sencillo aumentar las estadísticas de caballos malos al principio pero que sea cada vez más costoso a medida que aumentan las susodichas estadísticas y sin quitarle el factor random.
Valores de la exponencial (lo que se le suma a la media de los padres) en función de a.
Última edición por PeterLancton el 21 Ago 2014, 10:12, editado 1 vez en total.
PeterLancton escribió:Se me ocurre esta:
donde alfa, beta y a son coeficientes arbitrarios, X es la media aritmética de las estadísticas de ambos padres para una característica determinada, R es un número aleatorio oscilando en torno a la media (como el default).La idea es que esta fórmula permite hacer distribuciones ajustables, es básicamente como la de Nxt, una media aritmética con alfa y beta como coeficientes para ponderar las características de los padres y las aleatorias en torno a la media. La única diferencia es que he añadido una exponencial cuya convergencia es aumentable mediante el parámetro a. El 7 también se podría aumentar para obtener mejores caballos independientemente de las características de los padres.
Primero se hace la media de los padres tras lo cual se le suma una cantidad que varía entre 0,5 y 0,06 más o menos (para a=0,5) en función de las características de los padres, cuanto mejores sean, menos se le suma. Después se hace una simple media ponderada con R que le aporta el carácter más aleatorio.
Esto permite que sea sencillo aumentar las estadísticas de caballos malos al principio pero que sea cada vez más costoso a medida que aumentan las susodichas estadísticas y sin quitarle el factor random.Valores de la exponencial (lo que se le suma a la media de los padres) en función de a.
Esta bien pero tendrías que modificarla según la característica porque con esa fórmula acabarás teniendo caballos que salten y corran igual. Supongo que poniendo la a con un valor mayor para salto y menor para vida es suficiente.
- PeterLancton
- Superviviente
- Mensajes: 2347
- Registrado: 05 Sep 2012, 17:55
Sí, en este ejemplo es para la velocidad pero basta con modificar el 7, la a se encarga únicamente de evaluar la "velocidad" a la que decrece lo que se le aumenta a los padres en función de lo buenos que sean.
EDIT: Probando obtengo buenos resultados cambiando el 7 por un 1,2 para el salto y por un 15 con a=0,1 para la vida. Es cuestión de ir probando, cuando tenga tiempo hago una prueba simulando una granja intensiva de caballos en Excel.
Última edición por PeterLancton el 21 Ago 2014, 11:11, editado 1 vez en total.