FANDOM


Intro

En esta entrada de blog relataré las experiencias obtenidas mientras desarrollo una aplicación que llamo mostro's botín. La aplicación tiene por objetivo servir como plataforma para ayudar a discernir cuáles monstruos en RuneScape ofrecen la mayor probabilidad de obtener ciertos ítems, aunque en un futuro podría expandirse a la obtención de ellos mediante otros métodos como robar bolsillos o abrir el cofre de los Túmulos.

Esta aplicación estará centrada exclusivamente en la versión RuneScape Nostálgico (2007 - Old School), ya que en el Gran Mercado de RuneScape 3 hay suficiente oferta como para dedicar tiempo a recolectar ítems por si mismo.

Día 1

Bien. La idea que tengo para implementar este proyecto es realizar una aplicación web utilizando django en un servidor python gratuito (Python Anywhere).

Básicamente tendrá tres pantallas visibles al usuario:

  • Ver los botines de un monstruo dado.
  • Ver los monstruos que botan un determinado botín.
  • Interfaz para el ingreso de datos.
Jjpx-concepto-01

Botines de monstruos. Concepto de ingreso de datos.

A la derecha se muestra la idea preliminar sobre la interfaz de ingreso. Dado un monstruo y un conjunto de botines posibles sólo queda por hacer clic en el botín recibido y eso añadirá un registro a la base de datos. Da la posibilidad también de deshacer algún botín recibido en caso de algún error por parte del voluntario participante. También se habilita una barra en la parte superior para el ingreso de un botín que no esté en la lista original.

El procedimiento para ingresar los datos de un nuevo monstruo sería el siguiente:

  1. Se registra un nuevo monstruo en la base de datos (nombre y quizás nivel de combate).
  2. Se asocian los botines de rareza common (según la wikia 2007) al monstruo.
  3. Se realizan unas muertes de prueba (20x) e ingresan los valores obtenidos en la interfaz de ingreso.
    1. Se asocian los botines obtenidos nuevos que no se han registrado previamente en el paso 2.
  4. Se envía el lote de datos al servidor.
  5. El servidor realiza los cálculos correspondientes y actualiza los valores de rareza en las páginas del monstruo y en las de los botines afectados.


Tablas

Para trabajar con Django lo primero que debo tener claro es el diseño de la base de datos. En este sentido ya tengo algo preparado.

item mob droptable
  • nombre
  • members_only
  • valor_alch [1]
  • apilable_siempre[1]
  • categoría[1]
  • nombre
  • members_only
  • comentario[1]
  • mobID (FK)
  • itemID (FK)
  • cantidad
  • members_only
  • hits [2]
  1. 1,0 1,1 1,2 1,3 Agregado el día 3
  2. Agregado el día 6

Día 2

Resumen día anterior

  • Creado sitio web.
  • Configurado virtualenv.
  • Descargado Django 1.8.2 (latest release).
  • Configurado Django.
  • Creados los modelos a usar (Item, Mob, DropTable)
  • Creada la base de datos inicial.

Hechos del día

Hoy he agregado la primera plantilla, formulario, vista y urlConf. Nada funcional todavía excepto que lo muestra en la pantalla.

Agregaré la funcionalidad en el siguiente orden:

  • ingresar ítem.
  • ingresar mob.
  • ingresar tabla de posibles botines de un mob.
  • crear el formulario para ingresar los botines reales. [1]
  • ingresar los botines reales con un cierto número de muertes de prueba.
  • ver botines por mob.
  • ver mobs por botín.
  1. agregado el día 5

Día 3

Mostro's botin-item01

Versión inicial y horrible visualmente del mantenedor de ítems

Hace tanto tiempo que no hacía algo similar que ya había olvidado cosas tan básicas como el csrf_token. En fin, sorteando los diversos oceános mentales pude dar con un mantenedor de ítems completamente funcional para poder continuar con el siguiente paso, el cual es el mantenedor de Monstruos.

En lo referente a los modelos de datos, había olvidado integrar un punto muy importante que daba por hecho: el atributo Categoría de los ítems. Este atributo me permitirá mostrar los botines agrupados en lindos cuadros según su tipo tal cual es la usanza en las wikias de RuneScape (hierbas, equipo, ...).

20150703-142947

mostro's botin - mantenedor de mob

OK, el mantenedor de Monstruos está listo. Fue tan fácil como copiar y pegar (lo que me hace pensar en que tal vez no era necesario duplicar algo y tan sólo agregando un par de líneas podría lograr el efecto deseado).

El siguiente paso es crear la lista inicial de botines potenciales para cada monstruo. Esto conllevará un poco más de procesamiento, pero nada muy complicado.


Día 4

Los botines potenciales me han dado más problemas de los esperados. Hasta ahora he montado un formulario simple (como los anteriores) para poder ingresar la dichosa lista, pero he querido hacerlo de forma más manual ya que hay ciertas restricciones que me gustaría verificar.


Día 5

Mostro's botin-botines posibles

mantenedor de botines posibles

Viendo las excesivas complicaciones en las que estaba incurriendo al tratar de crear un formulario manualmente, decidí volver atrás y continuar con el copiar y pegar utilizado en los modelos anteriores (monstruo e ítem) para implementar el formulario de Botines Posibles. Dicho esto, declaro como terminado (en primera iteración) el mantenedor de botines posibles.

Planificación

Según la planificación expuesta en el día 2 lo siguiente es ingresar las muertes de prueba, pero no puedo hacer eso hasta tener el formulario adecuado. Así que agregué un punto intermedio en el que figura tal acción.

Día 6

Hasta ahora tenía pensado que la tabla de botines obtenidos esté poblada cada registro representando una muerte del monstruo en cuestión. Pero éste es realmente un muy mal enfoque, desperdiciando las capacidades de Django y la base de datos. Siguiendo el enfoque original calcular las probabilidades de cada botín por cada monstruo significaría procesar una excesiva cantidad de registros sólo para obtener el número de ellos. Por el contrario, una mejor manera de almacenar estos datos para facilitar los cálculos es habilitar una nueva columna llamada hits en la que se guardarán las ocurrencias de dicho botín en particular.

Día 7

Esto de crear el formulario final se ha convertido en todo un desafío. Al menos hoy pude mostrar el formulario en pantalla, sólo resta validar los datos y hacer el guardado.

Día 8

Receso

He conseguido un trabajito. Así que inicio un breve receso en este blog.

Día 9

Tras un breve receso (más corto de lo esperado) he completado el formulario para ingresar los botines reales (obtenidos en el campo de batalla).

Día 10

Botines por monstruo

Mostro's-botin-botines-por-monstruo

Visor de botines por monstruo primera iteración.

Tras unos cuantos días en el juego subiendo niveles e interactuando con otros jugadores he dejado que se venciera mi membresía para poder continuar con este proyecto. En el entretanto aproveché de recolectar un par de muestras reales de botines de los monstruos para poder tener un poco de material que procesar mediante esta aplicación, estas muestras fueron ingresadas a la base de datos utilizando las páginas creadas en las fases anteriores. Como nota aparte, haberlo usado de esa forma me dio la oportunidad de obtener nuevas ideas sobre la versión final de las páginas que mostraré al público una vez finalizado el proyecto.

El monstruo escogido en esta ocasión fue Ogre, el cual cuenta con 3 variantes: el normal encontrado en las afueras de Yanille, al sur de la Guerra de Castillos, las Colinas de Feldip y la mazmorra de las Guerras Divinas, uno exclusivo de los terrenos de entrenamiento del Rey Lathas y finalmente otro correspondiente a la mazmorra de las Guerras Divinas del Páramo. Por ahora sólo recolecté botines de los ogros ubicados en las Colinas de Feldip realizando un total de 205 muertes.

Según la wikia inglesa dedicada a esta versión del juego los ogros botan con rareza poco común un conjunto de semillas y a modo de raro un lote de semillas más. A mi parecer ninguna de las muestras califica para entrar a la categoría de poco común ya que no superaron el 2,5% de frecuencia (1 en 40) y las considero dentro de rara o muy rara (menor a 1 en 100).

Según las muestras tomadas ya se pueden vislumbrar diferencias con la tabla de la wikia. Por ejemplo no se obtuvo un solo botín de mushroom spore, poison ivy o avantoe seed siendo que los clasifica como poco común y, sin embargo, se recibieron 3 semillas de linaria (toadflax) y 2 de tarromin ambas consideradas raras.

Hecho esta parte, sólo me falta crear el visor de monstruos por botín para descubrir cuál de ellos tiene los mejores porcentajes de acuerdo a la capacidad de combate del jugador.

¿Vale la pena matar ogros?

Considerando que los ogros son monstruos de nivel mediano tienen una tabla de botines muy mala, sólo el 12,7% de las veces botan una semilla y éstas tienen escaso valor comercial, lo cual explica su baja popularidad entre la comunidad.

Día 10 y medio

Mostro's-botin-monstruo-por-botin

Visor de monstruos por botín (ítem)

Finalmente, he completado la primera iteración de este proyecto. Todas las características que me propuse implementar en el día 2 están funcionales.

¿Qué quiero decir con iteración? Estoy siguiendo un modelo de desarrollo que predica desarrollar todas las funciones requeridas a un nivel acotado, luego repasar todas ellas para agregarles un nivel de detalle más y así se van añadiendo más y más capas de detalle para ir refinando poco a poco el producto.

Futuro

¿Qué viene ahora? Aunque como escribí anteriormente el producto ya es completamente funcional todavía queda mucho por recorrer y el proceso de desarrollo nunca acaba.

Algunas tareas pendientes que se me vienen a la cabeza en este momento son:

  • Mejorar la apariencia de cada página (Es realmente feo!)
  • Añadir funcionalidad de búsqueda
  • Añadir enlaces para unir las diferentes páginas
  • Optimizar los algoritmos para mejorar la carga de las páginas. Esto en particular para la página de ingreso de los botines reales.

Conclusiones finales

Al cabo de casi un mes desde que inicié esta entrada de blog declaro que este proyecto va por muy buen camino y, de seguir así, tendré lista una versión abierta para la comunidad en unos dos meses más. Durante este tiempo recordé muchas cosas que estaban llenándose de polvo en mi memoria junto con aprender algunos trucos nuevos, también me sirvió para aplicar mis conocimientos en el área de la informática (ingreso, procesamiento y salida de datos) tanto como en las aplicaciones utilizadas Django, Python, entre otras.

Dado que esta es sólo una primera versión tengo planeado crear otra entrada de blog para mostrar los avances que realice de ahora en adelante y dejar más o menos acotado el largo de esta entrada que ya está bastante extensa. Esta nueva entrada se referirá a la segunda iteración de la aplicación, la cual, como ya dije anteriormente contendra una serie de mejoras sustanciales en todas las áreas posibles con el objetivo de posibilitar su uso diario por parte de cualquier persona (jugador) que desee, ya sea, aportar con más datos o, simplemente, buscar los mejores monstruos según sea su necesidad particular.


Lo expuesto en esta página no expone necesariamente la pura y santa verdad. Piezas clave de información pueden omitirse intencional o accidentalmente según estime conveniente.

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.

También en FANDOM

Wiki al azar