viernes, 10 de julio de 2009

Mechanic Skill Axe Training

Esta skill aumenta el daño y a base stats y los puntos de hit en stats

Por ejemplo

210 + 20 de Str

Por cada nivel de de la skill el jugador gana 5 puntos esto se traduce de la siguiente manera

Str  += (Skill Lvl * 5)

Por lo tanto el factor final queda de la siguiente manera:

Str Skill Lvl Factor Modificator
5 1 5
10 2 5
15 3 5
20 4 5
25 5 5
30 6 5
35 7 5
40 8 5
45 9 5
50 10 5

 

Tomado en Cuenta estas modificaciones nuestro ejemplo al Final quedará:

210 + 70 para Str.

Para el punto final de Hit es lo mismo con la diferencia de que el valor ganado es 3 multiplicado por el nivel de la skill de esta manera.

Hit += Skill Lvl * 3

Lo cual se traduce de la siguiente manera:

Hit Nivel Skill Valor Multiplicador
3 1 3
6 2 3
9 3 3
12 4 3
15 5 3
18 6 3
21 7 3
24 8 3
27 9 3
30 10 3

 

Entonces si un sujeto tiene Hit + 80 tomando en cuenta La skill en nivel 10, esto se traduce Hit + 110.

De forma que gana más Hit de acuerdo a su base.

viernes, 15 de mayo de 2009

Se revelan los primeros prototipos de Stille-RO

Stille-RO es un proyecto al que me han invitado formar parte como un core desarrollador de scripts, debugger y sobre todo la aplicación del conocimiento que tengo sobre los jobs teóricamente y gracias a Gravity Interactive que me ha dejado formar parte del Staff de Desarrollo de Sakray Server de IRO.

El día de hoy a las 05:45 de la tarde se dieron a conocer los primeros prototipos de armas publicadas bajo el archivo comparitva en el cual hacen referencia a dos servidores elementales conocidos:

    1. Rock and Ro
    2. Azteca Ro

En este archivo podemos encontrar las implementaciones que ha realizado el equipo de programación del servidor y los futuros bonos que estos tendrán, la página se actualiza automáticamente cada 5 minutos gracias a la tecnología GWT.

La inversión del tiempo y los lapsos de fechas de entregas aun se desconocen, sin embargo a mi conocer el proyecto arranca a partir del 1 de Julio del presente año, no conozco más información sobre este proyecto sin embargo hasta donde se ha evaluado se tiene un 95% de estabilidad sobre todos los jobs, usando todos los prototipos, diseños e implementaciones que he desarrollado para eAthena, confió en que todo saldrá bien.

martes, 12 de mayo de 2009

Traductor simple (Google Translator API)

Hoy desarrollaremos un traductor simple en consola de Texto, utilizando el API de Google Translator.

El entorno de desarrollo que usare esta ocasión será Blue-J (por tratarse de una aplicación de ejemplo).

Bien para ello pedimos un nuevo proyecto e iniciamos una nueva clase, yo a mi clase le he puesto saludo.java.

Ahora importamos el API del servicio de traducción de Google, para ello nos dirigimos al menú Tool –> Preferences –> dentro de la ventana preferences seleccionamos Libraries –> posteriormente ADD para agregar la librería (tendremos que buscar la ruta donde la hemos guardado).

Para facilitarme la busqueda de API’s lo que yo he hecho es una carpeta en C: con el siguiente nombre C:\JavaAPI\Google donde almaceno las api’s de Google, ya que son varias.

Bien, ahora damos en OK para finalizar la configuración, reiniciamos el IDE y continuamos editando el código.

Para incluir la libería dentro del programa lo hacemos de la siguiente manera.

import com.google.api.translate.Language;
import com.google.api.translate.Translate;

Language, es el lenguaje del texto original antes de ser traducido.
Translate: es el lenguaje al que el texto será traducido.

import com.google.api.translate.Language;
import com.google.api.translate.Translate;
import java.io.*;

public class saludo
{

public static void main (String [] args) throws IOException
{
    // variables de contexto local
    String fraseEsp, fraseFran;

    //Define el Buffer de Entrada de información.
    BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
    System.out.print ("Escribe una frase: ");
    fraseEsp = br.readLine();
     try
    {
        fraseFran = Translate.translate(fraseEsp, Language.SPANISH, Language.FRENCH);
        System.out.println (fraseFran);
    }
    catch (Exception error)
    {
        System.out.println ("No se puede completar la traducción");
    }
}

}

 

Examinando el código podemos notar la siguiente línea: fraseFran = Translate.translate(fraseEsp, Language.SPANISH, Language.FRENCH);

Básicamente lo que estamos haciendo es crear un paso de parámetros a la clase Translate la cual se encargará de traducir del idioma español al idioma francés cualquier frase que escribamos, siempre y cuando esta este correctamente escrita.

Por ejemplo: Mi grupo de música favorito es lacrimosa.

 

Como puedes ver, puedes construir aplicaciones tan sencillas usando las APi’s de Google

miércoles, 6 de mayo de 2009

Ser o no ser que dilema (eAthena element weapon is not elemental)

Bueno, no entraremos en controversias, para comenzar, después de la implementación de los Battle Grounds en el emulador, se decidió cambiar el tipo de ataque que los mobs tendrían, entiéndanse sus atribuciones en las armas dando origen a que las armas ya no fueran neutrales en los mobs si no que estas no tuvieran un elemento… ¿curioso no?, es por eso que los ataques se atribuían a un elemento ¿null?, y no te podías proteger ni por reducción, ni por cartas elementales.

Mi primera teoría: Los mobs habían cambiado el ataque de acuerdo al tipo elemento que era, teóricamente estaba equivocado eso no podía ser, puesto que después de hacer una primera prueba con 110% (una manteu) a todos los elementos aun me seguían pegando.

Entonces ¿qué rayos pasa?, siguiendo con el manteu a 110% y me seguían pegando, hasta que Eureka se me ocurre llamar a un Seyren haciendo que me persiguiera.

image

¿Por qué el Spiral Pirce del Seyren me curaba?, entonces me formule, algo ha de estar cambiado. Obvio no xD… después de 150 muertes aproximadamente.

Empecé a revisar línea a línea cada parte del código del emulador (debido a que el SVN esta caído y se me hace más fácil poder comparar ahí), y Eureka de nuevo, encontré algo que me llamo la atención.

//forced neutral for monsters

 

¿Y que sucede con lo otro?, empecé a trabajar en el archivo battle.c  buscando este pedazo de código.

 

if (!skill_num && tstatus->flee2 && rand()%1000 < tstatus->flee2)
    {    //Check for Lucky Dodge
        wd.type=0x0b;
        wd.dmg_lv=ATK_LUCKY;
        if (wd.div_ < 0) wd.div_*=-1;
        return wd;
    }

    t_class = status_get_class(target);
    s_ele = s_ele_ = skill_get_ele(skill_num, skill_lv);
    if (!skill_num || s_ele == -1) { //Take weapon's element
        s_ele = sstatus->rhw.ele;
        s_ele_ = sstatus->lhw.ele;
        if (flag.arrow && sd && sd->arrow_ele)
            s_ele = sd->arrow_ele;
        if (battle_config.attack_attr_none&src->type)
            nk|=NK_NO_ELEFIX; //Weapon's element is "not elemental"
                } else if (s_ele == -2) { //Use enchantment's element
        s_ele = s_ele_ = status_get_attack_sc_element(src,sc);
    }

Como podemos ver ahí encontramos la atribución a este post //Element is not elemental, o sea que a partir de esas implementación el ataque de las armas en mob no tiene ningún elemento. ¿Pareciera?

Bueno si tu servidor es elemental, con equipo de 4 slots y tus usuarios ya se acostumbraron a “subir de nivel” de esta forma sin que los mobs los maten, editamos la siguiente línea:

  nk|=NK_NO_ELEFIX; //Weapon's element is "not elemental"

De la siguiente manera:

nk &= ~NK_NO_ELEFIX;

 

De tal forma que la nueva versión del código es:

if (!skill_num && tstatus->flee2 && rand()%1000 < tstatus->flee2)
    {    //Check for Lucky Dodge
        wd.type=0x0b;
        wd.dmg_lv=ATK_LUCKY;
        if (wd.div_ < 0) wd.div_*=-1;
        return wd;
    }

    t_class = status_get_class(target);
    s_ele = s_ele_ = skill_get_ele(skill_num, skill_lv);
    if (!skill_num || s_ele == -1) { //Take weapon's element
        s_ele = sstatus->rhw.ele;
        s_ele_ = sstatus->lhw.ele;
        if (flag.arrow && sd && sd->arrow_ele)
            s_ele = sd->arrow_ele;
        if (battle_config.attack_attr_none&src->type)
                 // Remmi Atribution Change
            nk &= ~NK_NO_ELEFIX; // Forced neutral for monster by Remmi Change
    } else if (s_ele == -2) { //Use enchantment's element
        s_ele = s_ele_ = status_get_attack_sc_element(src,sc);
    }

Y ahora todo regresa a la normalidad, con mobs que nos curan si tenemos protección o inhumanidad a un elemento.

image

Recuerda que este es un cambio de eAthena y de Gravity, por favor considera las atribuciones a las modificaciones, una motivación o felicitación no esta de más y no te hagas del derecho del código, y si algún servidor elemental de los que actualmente conozco les dice que fue invención de ellos lo de los mobs con ataque Null no es cierto >.<.

Posdata: Gracias Geraldine por ayudarme a testear el código cambiado ^^

image

martes, 5 de mayo de 2009

Acid Demostration Gadget

 

:) Hoy mostrare el resultado de una pequeña aplicación realizada con Google Web Toolkit y Java.

Se trata de un pequeño gadget hecho para iGoogle el cual si eres jugador de Ragnarok OnLine y tienes un creator te puede servir para calcular el daño que realiazas al enemigo.

Soporta máximo int y vit 999.

El script a continuación permite agregarlo a una página web o blog :)

 

<script src="http://www.gmodules.com/ig/ifr?url=http://hldteam.comli.com/expe/acido/acid.xml&amp;synd=open&amp;w=318&amp;h=124&amp;title=Acid+Demostration+Calculator+%2F+Basica&amp;border=http%3A%2F%2Fwww.gmodules.com%2Fig%2Fimages%2F&amp;output=js"></script>

Añadir a IGoogle Add to Google

Actualmente me encuentro trabajando en mejoras para esta calculadora, si alguien se interesa en ella, o algún servidor quiere la formula customs puedo contribuir para el diseño de la misma :)

Install Fest

tux
tux,
orginalmente cargado por rdiwolf.
Festival de Instalación del Software Libre en la FCA, esto es en Mérida, Yucatán México, el día sábado 16 de mayo de 2009.

Flickr

This is a test post from flickr, a fancy photo sharing thing.

miércoles, 29 de abril de 2009

JetBrains RubyMine 1.0 - un nuevo IDE de Ruby y Rails

  PRAGA, 29 de abril /PRNewswire/ -- JetBrains, los creadores de
herramientas de desarrollo inteligentes para mejorar la productividad, han
anunciado la disponibilidad general de RubyMine 1.0, el nuevo IDE (entorno de
desarrollo integrado) de la compañía para desarrollo productivo de Ruby y
Rails.




Nota Completa

lunes, 20 de abril de 2009

Oracle Compra Sun Microsystem

Me llego la noticia a las 09:00 am centro de México, Oracle ha comprado Sun Microsystem y con ello toda la tecnología desarrollada por esta. La nota completa esta aquí: http://www.ticpymes.es/Noticias/General/200904200037/Oracle-compra-Sun-Microsystems.aspx

Ahora la pregunta es, ¿Las aplicaciones que son de licencia dual de Sun? lo seguirán siendo, ¿qué nos espera con Java?, ¿A donde ira OpenSolaris?.

Esperemos que esta compra sea un visto bueno para todos y se mantengan las  actuales políticas de la empresa de Sun, aunque todos sabemos que no será así, y abra muchos cambios.

Aunque aun falta que se apruebe dicha transacción…

domingo, 19 de abril de 2009

Introducción a Java [Elementos de un programa]

Bien ahora que estamos aprendiendo a programar en Java, necesitaremos conocer como esta constituido un programa.

En esta ocasión trabajare con el IDE BlueJ para tener una mayor comodidad, y evitar el problema de licencias.

Comenzaremos por crear un nuevo proyecto de blueJ para ello ejecutamos el programa y nos dirigimos al menú Project –> New Project.

En mi caso personal le pondré el nombre de practicas, para hacer referencia a las practicas que realizaremos durante nuestra introducción al lenguaje.

Bien ya que tenemos nuestro proyecto llamado practicas, crearemos una nueva clase, el nombre de la clase que usare es el de elementos Yo decidí poner este nombre en referencia a los elementos que veremos hoy.

Teniendo nuestra clase elementos ya lista, daremos clic sobre esta para comenzar a editarla, como notarán tenemos ya un código de ejemplo, lo que nosotros realizaremos es borrar esta parte del código.

// instance variables - replace the example below with your own
  private int x;

  /**
   * Constructor for objects of class elementos
   */
  public elementos()
  {
      // initialise instance variables
      x = 0;
  }

  /**
   * An example of a method - replace this comment with your own
   *
   * @param  y   a sample parameter for a method
   * @return     the sum of x and y
   */
  public int sampleMethod(int y)
  {
      // put your code here
      return x + y;
  }

Para crear uno nuevo método principal de la siguiente forma:

/*
     * Este es el método principal llamado main este método  básicamente esta
     * constituido por un vector cadena el cual devolverá algún parámetro introducido
     * en tiempo de ejecución.
     * Public indica que el método es publico y estatico.
     */
    public static void main (String [] args)

/*
        * System.out.println es un método que se encuentra en el paquete
        * java.io el cual sirve para desplegar en consola cualquier cadena
        * de caracteres que introduzcamos.
        */
       System.out.println ("Bienvenido a Java");

Y este es nuestro programa en sí:

/* El nombre de la clase se llama elementos, por lo tanto el archivo
* que se genere se ha de llamar elementos.java y elementos.class.
* el modificador public indica que la clase es publica y accesible.
*/

public class elementos
{
    /*
     * Este es el método principal llamado main este método  básicamente esta
     * constituido por un vector cadena el cual devolverá algún parámetro introducido
     * en tiempo de ejecución.
     * Public indica que el método es publico y estático.
     */
    public static void main (String [] args)
    {
        /*
         * System.out.println es un método que se encuentra en el paquete
         * java.io el cual sirve para desplegar en consola cualquier cadena
         * de caracteres que introduzcamos.
         */
        System.out.println ("Bienvenido a Java");
    }

}

Hacemos clic en el botón compile, para compilar nuestro programa, para ejecutarlo, solo hace falta ir a la parte principal del programa donde se encuentra la clase

image

Y dar clic en el método void main(String [] args), nos aparecerá un recuadro con unos corchetes, simplemente damos clic en Ok para continuar.

image

Y podemos obtener la salida en pantalla.

Para compilar desde la consola de MS-DOS o Shell en Unix, disponemos de los siguientes comandos javac nombre.java y java nombre para correr el archivo de clase. 

Hasta aquí hemos aprendido como mostrar mensajes en la consola de Java usando BlueJ en entregas posteriores iremos adentrándonos aún más en el lenguaje.