Autor Tema: [Subclass Acumulativas] Modificación de skills dependiendo de la clase base  (Leído 44 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Lipcot

  • No Grade
  • *
  • Topic Author
  • Mensajes: 1
  • Agradecimientos: 0
  • Cronica: : High Five
  • Revision: 1
  • S.O: otro
  • Serverpack : l2j
gracias
Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Hola, estoy pensando en empezar el development de un servidor, todavia no me decidi a que datapack usar, si l2jsunrise o l2jdevs o simplemente l2jserver.

    Estoy comenzando a aprender la dinamica de como los cambios se efectuan a un servidor y que tipo de cambios se pueden o no hacer y desde donde. No se Java, pero planeo aprender de a poco. Lo unico que se de code es Lape, un lenguaje basado en pascalscript que se usa para hacer bots en un MMORPG llamado Runescape. Por lo tanto entiendo la idea de variables, constantes, clases, arrays, etc y tengo alguna idea de lo que es el codigo en si.

    Mi pregunta es la siguiente:

    En un server SUB ACUMULATIVA, Si yo quisiera editar un skill para que cuando este sea usado y obtenido desde la main class (por ejemplo, SoS en el SK) funcione de una manera, pero si es obtenido en la subclass, funcione de otra (% reducido, o que directamente no funcione), este cambio de que manera se deberia hacer, a traves de donde y como?

    Estuve leyendo bastante el foro pero no logro comprender, si pudieran guiarme hacia donde leer/aprender les agradeceria.

    Desde ya, Muchas gracias

    Conectado Fissban

    • AdminSite
    • *
    • Mensajes: 5530
    • ar
    • Agradecimientos: 1618
      • Mis Proyectos
    • Cronica: : Scions of Destiny
    • Revision: Last
    • S.O: Windows 10
    • Serverpack : L2jAdmins
    A tutankamon le gusta este post.

    Re:[Subclass Acumulativas] Modificación de skills dependiendo de la clase base
    « Respuesta #1 en: Enero 11, 2019, 01:35:43 pm »
    gracias
    Este post tiene 1 agradecimientos
  • Añade a tus favoritos
    no se que pack usas pero son todos muy similares, lo que deberiamos hacer es buscar dentro de L2PcInstance el metodo "restoreSkills()" que alli se leen los skills de la clase.

    digamos que tendras algo asi...es solo un ejemplo basado en mi pack que es C4.


    Código: [Seleccionar]
    	private void restoreSkills()
    {
    try (var con = L2DatabaseFactory.getInstance().getConnection();
    var statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR))
    {
    statement.setInt(1, getObjectId());
    statement.setInt(2, getClassIndex());

    try (var rset = statement.executeQuery())
    {
    // Go though the recordset of this SQL query
    while (rset.next())
    {
    final int id = rset.getInt("skill_id");
    final int level = rset.getInt("skill_level");

    if (id > 9000)
    {
    continue; // fake skills for base stats
    }

    // Create a Skill object for each record
    var skill = SkillData.getInstance().getSkill(id, level);

    // Add the Skill object to the L2Character skills and its Func objects to the calculator set of the L2Character
    super.addSkill(skill);
    }
    }
    }
    catch (final Exception e)
    {
    LOG.warning("Could not restore character skills: " + e);
    e.printStackTrace();
    }
    }

    Si miras la variable "RESTORE_SKILLS_FOR_CHAR" es solo un texto que hace referencia a un query a la db alli deberiamos modificar para que lea el classindex asi sabemos si leemos una subclass o no....por ejemplo

    original
    Citar
    "SELECT skill_id,skill_level FROM character_skills WHERE char_obj_id=? AND class_index=?"
    modificado
    Citar
    "SELECT skill_id,skill_level,class_index FROM character_skills WHERE char_obj_id=? AND class_index=?"

    asi nosotros debajo de
    Citar
                   int id = rs.getInt("skill_id");
                   int level = rs.getInt("skill_level");
    podemos agregar
    Citar
                   int classIndex = rs.getInt("class_index");

    y asi luego de
    Citar
    L2Skil skill = SkillData.getInstance().getSkill(id, level);

    podemos poner algo como
    Citar
    if (ph.getInstance().getClassIndex() == classIndex)
    {

    }

    dedntro de ese if es donde sucedera nuestra magia que alli es donde editaremos la variable "skill" que es la que contiene la informacion basica del skill, si quieres ver el contenido de la clase podes hacer F3 sobre L2Skill y te llevara al contenido del mismo.