Autor Tema: Ayuda como evitar cambio de weapon mientras ataca  (Leído 47 veces)

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

Desconectado sombrakan

  • No Grade
  • *
  • Topic Author
  • Mensajes: 31
  • ar
  • Agradecimientos: 4
  • Cronica: : Interlude
  • Revision: 1132, 1.5
  • S.O: Linux CentOS
  • Serverpack : JFrozen
Ayuda como evitar cambio de weapon mientras ataca
« en: Abril 11, 2019, 12:59:19 pm »
gracias
Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Muy buenas a todos!  :08:


    Estoy retomando el desarrollo de mi server! Y estoy intentando realizar una función que aún no logre hacer funcionar, y queria ver si alguno podría darme un ayudín!

    Información:
    l2jfrozen 1.5 (rev 708)

    En resumen, como lo indica el título lo que desearía poder hacer es que un personaje no pueda cambiar de arma mientras se encuentra hiteando. Estuve probando diferentes métodos, pero aún no le pegué.

    Dejo un video de youtube de "Eze Campos" que lo logró en l2jlisvus:


    A continuación dejo los últimos códigos que estoy corriendo hoy en día para INTENTAR lograr esto:

    Definición de tiempos para uso de item y ataque.


    Código: [Seleccionar]
    L2jFrozen_GameServer/head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java

    private long lastAttackPacket = 0;

    private long lastUseItemPacket = 0;



    public long getLastAttackPacket()
    {
    return lastAttackPacket;
    }

    public void setLastAttackPacket()
    {
    lastAttackPacket = System.currentTimeMillis();
    }

    public long getLastUseItemPacket()
    {
    return lastUseItemPacket;
    }

    public void setLastUseItemPacket()
    {
    lastUseItemPacket = System.currentTimeMillis();
    }

    Evitar que cambien de items si no han pasado 0.5 segundos.
    Evitar que se desequipen o equipen mientras estan en condicion especial (codigo original) O atacando (codigo que agregué)
       

    Código: [Seleccionar]
    L2jFrozen_GameServer/head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java
    if (item.isEquipable())
    {

    if (System.currentTimeMillis() - activeChar.getLastUseItemPacket() < 500)
    {
    activeChar.sendPacket(ActionFailed.STATIC_PACKET);
    return;
    }
    activeChar.setLastUseItemPacket();

    // No unequipping/equipping while the player is in special conditions (OR ATTACKING)!
    if (activeChar.isFishing() || activeChar.isStunned() || activeChar.isSleeping() || activeChar.isParalyzed() || activeChar.isAlikeDead() || activeChar.isAttackingNow())
    {
    activeChar.sendMessage("Your status does not allow you to do that.");
    return;
    }


    Evitar que esten atacando, y cambiando de arma constantemente:


    Código: [Seleccionar]
    L2jFrozen_GameServer/head-src/com.l2jfrozen/gameserver/network/clientpackets/AttackRequest.java

    protected void runImpl()
    {
    final L2PcInstance activeChar = getClient().getActiveChar();
    if (activeChar == null)
    return;

    if (System.currentTimeMillis() - activeChar.getLastAttackPacket() < 1000 )
    {
    activeChar.sendPacket(ActionFailed.STATIC_PACKET);
    return;
    }
    activeChar.setLastAttackPacket();

    if (System.currentTimeMillis() - activeChar.getLastUseItemPacket() < 500)
    {
    activeChar.sendPacket(ActionFailed.STATIC_PACKET);
    return;
    }
    activeChar.setLastUseItemPacket();


    Desde ya, agradeceria cualquier critica / comentario que puedan realizar al respecto!

    Muchas gracias por tomarse el tiempo de leerme!
    Saludos!
          
    « Última modificación: Abril 11, 2019, 02:55:35 pm por sombrakan »

    Conectado Dagger

    • Grado S84
    • *
    • Mensajes: 1648
    • ar
    • Agradecimientos: 450
    • Cronica: : Interlude
    • Revision: 374,1132,001
    • S.O: Windows 8
    • Serverpack : Acis,frozen,Ps
    Re:Ayuda como evitar cambio de weapon mientras ataca
    « Respuesta #1 en: Abril 12, 2019, 12:45:42 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Creo que falta la condición de que si esta en modo de combate o con status flag superiores a valor 0 ejecute el return con el mensaje de advertencia


    Código: [Seleccionar]
    		if   ((activeChar.isInCombat()) || (activeChar.getPvpFlag() > 0) || activeChar.isInDuel()  || (activeChar.isDead()) )
               {
    player.sendMessage("It is not possible in your current state.");
              return ;
            }

    Saludos
    « Última modificación: Abril 12, 2019, 12:47:17 am por Dagger »