Autor Tema: [Resuelto] como crear un skill que mate para el npc PVP/PK Protector L2Jfrozen  (Leído 147 veces)

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

Desconectado Unstoppable

  • Grado A
  • *
  • Topic Author
  • Mensajes: 405
  • st
  • Agradecimientos: 120
  • Cronica: : pija
  • Revision: concha atr 360
  • S.O: Windows 10
  • Serverpack : forro no uso
gracias
Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    buenas gente , una ves mas aqui molestando jaja.

    e querido crear algun skill que funcione para este npc protector pero no lo e logrado , probe con los skills normales como por ejemplo lethal , prominence etc... , tambien skills de raid boss que bajan vida pero no funcionan , supongo que es porque no es lo mismo un npc que un mob enfin,
    como puedo crear un skill para este npc y que cause un daño instantaneo y te mate.

    el npc funciona bien , por default se usa con el skill Anchor , pero no me gusta de esa forma ya que mi idea es que un npc protector tiene que matarte de 1 solo golpe.

    ¿ porque no modifico y uso un guardia normal ?.
    porque este npc sirve para pvp y pk , osea si un personaje se Flagea este npc tambien lo va a matar.

    se podra hacer desde la parte de java?

    L2ProtectorInstance.java


    Código: [Seleccionar]
    package net.l2jpx.gameserver.model.actor.instance;

    import java.util.Map;
    import java.util.concurrent.ScheduledFuture;
    import net.l2jpx.Config;
    import net.l2jpx.gameserver.datatables.SkillTable;
    import net.l2jpx.gameserver.model.L2Character;
    import net.l2jpx.gameserver.model.L2Skill;
    import net.l2jpx.gameserver.model.L2Summon;
    import net.l2jpx.gameserver.model.actor.knownlist.NpcKnownList;
    import net.l2jpx.gameserver.network.serverpackets.CreatureSay;
    import net.l2jpx.gameserver.network.serverpackets.MagicSkillUser;
    import net.l2jpx.gameserver.templates.L2NpcTemplate;
    import net.l2jpx.gameserver.thread.ThreadPoolManager;
    import org.apache.log4j.Logger;

    public class L2ProtectorInstance
      extends L2NpcInstance
    {
      private ScheduledFuture<?> _aiTask;
     
      private class ProtectorAI
        implements Runnable
      {
        private final L2ProtectorInstance _caster;
       
        protected ProtectorAI(L2ProtectorInstance caster)
        {
          this._caster = caster;
        }
       
        public void run()
        {
          for (L2PcInstance player : L2ProtectorInstance.this.getKnownList().getKnownPlayers().values())
          {
            if (((player.getKarma() > 0) && (Config.PROTECTOR_PLAYER_PK)) || ((player.getPvpFlag() != 0) && (Config.PROTECTOR_PLAYER_PVP)))
            {
              L2ProtectorInstance.LOGGER.warn("player: " + player);
              handleCast(player, Config.PROTECTOR_SKILLID, Config.PROTECTOR_SKILLLEVEL);
            }
            L2Summon activePet = player.getPet();
            if (activePet != null) {
              if (((activePet.getKarma() > 0) && (Config.PROTECTOR_PLAYER_PK)) || ((activePet.getPvpFlag() != 0) && (Config.PROTECTOR_PLAYER_PVP)))
              {
                L2ProtectorInstance.LOGGER.warn("activePet: " + activePet);
                handleCastonPet(activePet, Config.PROTECTOR_SKILLID, Config.PROTECTOR_SKILLLEVEL);
              }
            }
          }
        }
       
        private boolean handleCast(L2PcInstance player, int skillId, int skillLevel)
        {
          if ((player.isGM()) || (player.isDead()) || (!player.isVisible()) || (!L2ProtectorInstance.this.isInsideRadius(player, Config.PROTECTOR_RADIUS_ACTION, false, false))) {
            return false;
          }
          L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
          if (player.getFirstEffect(skill) == null)
          {
            int objId = this._caster.getObjectId();
            skill.getEffects(this._caster, player, false, false, false);
            L2ProtectorInstance.this.broadcastPacket(new MagicSkillUser(this._caster, player, skillId, skillLevel, Config.PROTECTOR_SKILLTIME, 0));
            L2ProtectorInstance.this.broadcastPacket(new CreatureSay(objId, 0, String.valueOf(L2ProtectorInstance.this.getName()), Config.PROTECTOR_MESSAGE));
           
            skill = null;
            return true;
          }
          return false;
        }
       
        private boolean handleCastonPet(L2Summon player, int skillId, int skillLevel)
        {
          if ((player.isDead()) || (!player.isVisible()) || (!L2ProtectorInstance.this.isInsideRadius(player, Config.PROTECTOR_RADIUS_ACTION, false, false))) {
            return false;
          }
          L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
          if (player.getFirstEffect(skill) == null)
          {
            int objId = this._caster.getObjectId();
            skill.getEffects(this._caster, player, false, false, false);
            L2ProtectorInstance.this.broadcastPacket(new MagicSkillUser(this._caster, player, skillId, skillLevel, Config.PROTECTOR_SKILLTIME, 0));
            L2ProtectorInstance.this.broadcastPacket(new CreatureSay(objId, 0, String.valueOf(L2ProtectorInstance.this.getName()), Config.PROTECTOR_MESSAGE));
           
            skill = null;
            return true;
          }
          return false;
        }
      }
     
      public L2ProtectorInstance(int objectId, L2NpcTemplate template)
      {
        super(objectId, template);
        if (this._aiTask != null) {
          this._aiTask.cancel(true);
        }
        this._aiTask = ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new ProtectorAI(this), 3000L, 3000L);
      }
     
      public void deleteMe()
      {
        if (this._aiTask != null)
        {
          this._aiTask.cancel(true);
          this._aiTask = null;
        }
        super.deleteMe();
      }
     
      public boolean isAutoAttackable(L2Character attacker)
      {
        return false;
      }
    }

    gracias !!  :rock: :rock:
    « Última modificación: Julio 11, 2018, 06:37:10 pm por Unstoppable »

    Conectado GoldenDarkness

    • Vip
    • *
    • Mensajes: 253
    • ar
    • Agradecimientos: 84
    • Lineage por religión, no por hobbye o moda \^.^/
    • Cronica: : C6/H5
    • Revision: 370,1118,010
    • S.O: Windows 7
    • Serverpack : aCis,Frozen,Master
    Re:como crear un skill que mate para el npc PVP/PK Protector ( L2Jfrozen )
    « Respuesta #1 en: Julio 10, 2018, 10:34:00 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Para modificar stats de los guardias no necesitas java
    Hace un passive custom como si fuera el de balance pero mucho mas basico
    Si es fisico: patk,pdef,mdef,patkrange(si lo vas a hacer arquero),patkspeed,hp
    Si es magico: que tenga matk, cast speed, magic reuse skill.


    Código: [Seleccionar]
    	<skill id="3600" levels="1" name="Anti Pk Skill">
    <set name="magicLvl" val="1" />
    <set name="target" val="TARGET_SELF"/>
    <set name="skillType" val="BUFF"/>
    <set name="operateType" val="OP_PASSIVE"/>
    <for>
    <mul order="0x30" stat="maxHp" val="5.0" /> <!-- Cuanto equivale 5? = 400% -->
    <mul order="0x30" stat="regHp" val="20.0" />
    <mul order="0x30" stat="pDef" val="5.0" />
    <mul order="0x30" stat="mDef" val="4.0" />
    <mul order="0x30" stat="pAtk" val="2000.0" />
    <mul order="0x30" stat="pAtkSpd" val="3.0" />
    <mul order="0x30" stat="runSpd" val="3.0" />
    <add order="0x40" stat="pAtkRange" val="600">
    </for>
    </skill>

    Con eso aumentas los stats basicos que viene por default el guardia hasta donde se te cante

    Despues le agregas este skill al anti pk con un simple sql
    *Tamb podes hacerlo a mano en las tablas
    *Tamb ingame con shift+click en la seccion skills


    Código: [Seleccionar]
    -- 5555 id npc anti pk (depende q npc tengas)
    -- 3600 id skill
    -- 1 nivel del skill
    INSERT INTO npcskills VALUES ('5555', '3600', '1');
    Haces un //reload npc
    y lo volves respawnear hasta q veas que stats qda mejor

    Eso seria si es que queres q el npc sea fulminante

    Si le pones nc Solar Flare skill al passive custom mandale 100000000000000000% de matk algo de casteo y un recovery magic skill suficiente por si no muere a la primera.
    « Última modificación: Julio 10, 2018, 10:53:10 am por GoldenDarkness »

    La primera si es sencillo y no sos pesado es gratis :D

    Desconectado Unstoppable

    • Grado A
    • *
    • Topic Author
    • Mensajes: 405
    • st
    • Agradecimientos: 120
    • Cronica: : pija
    • Revision: concha atr 360
    • S.O: Windows 10
    • Serverpack : forro no uso
    Re:como crear un skill que mate para el npc PVP/PK Protector ( L2Jfrozen )
    « Respuesta #2 en: Julio 11, 2018, 04:17:44 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Para modificar stats de los guardias no necesitas java
    Hace un passive custom como si fuera el de balance pero mucho mas basico
    Si es fisico: patk,pdef,mdef,patkrange(si lo vas a hacer arquero),patkspeed,hp
    Si es magico: que tenga matk, cast speed, magic reuse skill.


    Código: [Seleccionar]
    	<skill id="3600" levels="1" name="Anti Pk Skill">
    <set name="magicLvl" val="1" />
    <set name="target" val="TARGET_SELF"/>
    <set name="skillType" val="BUFF"/>
    <set name="operateType" val="OP_PASSIVE"/>
    <for>
    <mul order="0x30" stat="maxHp" val="5.0" /> <!-- Cuanto equivale 5? = 400% -->
    <mul order="0x30" stat="regHp" val="20.0" />
    <mul order="0x30" stat="pDef" val="5.0" />
    <mul order="0x30" stat="mDef" val="4.0" />
    <mul order="0x30" stat="pAtk" val="2000.0" />
    <mul order="0x30" stat="pAtkSpd" val="3.0" />
    <mul order="0x30" stat="runSpd" val="3.0" />
    <add order="0x40" stat="pAtkRange" val="600">
    </for>
    </skill>

    Con eso aumentas los stats basicos que viene por default el guardia hasta donde se te cante

    Despues le agregas este skill al anti pk con un simple sql
    *Tamb podes hacerlo a mano en las tablas
    *Tamb ingame con shift+click en la seccion skills


    Código: [Seleccionar]
    -- 5555 id npc anti pk (depende q npc tengas)
    -- 3600 id skill
    -- 1 nivel del skill
    INSERT INTO npcskills VALUES ('5555', '3600', '1');
    Haces un //reload npc
    y lo volves respawnear hasta q veas que stats qda mejor

    Eso seria si es que queres q el npc sea fulminante

    Si le pones nc Solar Flare skill al passive custom mandale 100000000000000000% de matk algo de casteo y un recovery magic skill suficiente por si no muere a la primera.

    mm creo que no me has entendido , no trato de agregarle stat al npc , trato de crear un skill para este npc , ya que no es igual a un guardia normal , no importa si le agrego o no stat a este npc va a ser lo mismo

    estas son las configuraciones que trae , creo que olvide poner esto para que me entendieran mejor


    Código: [Seleccionar]
    # -----------------------------------------
    # Protector System Config  -
    # -----------------------------------------
    # Protector activate when a player this PK
    ProtectorPlayerPK = True
    # Protector activate when a player is flaged
    ProtectorPlayerPVP = False
    # Radius of action
    ProtectorRadiusAction = 5000
    # Skill ID used for the npc
    ProtectorSkillId = 1170
    # Skill Level used for npc
    ProtectorSkillLevel = 13
    ProtectorSkillTime = 600
    # Npc Protector Message
    ProtectorMessage = Hey You!, Never Kill On This Area, Go Read The Rules!

    Conectado GoldenDarkness

    • Vip
    • *
    • Mensajes: 253
    • ar
    • Agradecimientos: 84
    • Lineage por religión, no por hobbye o moda \^.^/
    • Cronica: : C6/H5
    • Revision: 370,1118,010
    • S.O: Windows 7
    • Serverpack : aCis,Frozen,Master
    A Homer Simpson le gusta este post.

    Re:como crear un skill que mate para el npc PVP/PK Protector ( L2Jfrozen )
    « Respuesta #3 en: Julio 11, 2018, 01:16:57 pm »
    gracias
    Este post tiene 1 agradecimientos
    Ayudó a la solución.
  • Añade a tus favoritos

    Código: [Seleccionar]
    // Cast for Player
    private boolean handleCast(final L2PcInstance player, final int skillId, final int skillLevel)
    {
    if (player.isGM() || player.isDead() || !player.isVisible() || !isInsideRadius(player, Config.PROTECTOR_RADIUS_ACTION, false, false))
    return false;

    L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);

    if (player.getFirstEffect(skill) == null)
    {
    final int objId = _caster.getObjectId();
    skill.getEffects(_caster, player, false, false, false);
    broadcastPacket(new MagicSkillUser(_caster, player, skillId, skillLevel, Config.PROTECTOR_SKILLTIME, 0));
    broadcastPacket(new CreatureSay(objId, 0, String.valueOf(getName()), Config.PROTECTOR_MESSAGE));
    + player.reduceCurrentHp(player.getMaxHp() + 1, _caster);

    skill = null;
    return true;
    }

    return false;
    }

    Código: [Seleccionar]
    // Cast for pet
    private boolean handleCastonPet(final L2Summon player, final int skillId, final int skillLevel)
    {
    if (player.isDead() || !player.isVisible() || !isInsideRadius(player, Config.PROTECTOR_RADIUS_ACTION, false, false))
    return false;

    L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
    if (player.getFirstEffect(skill) == null)
    {
    final int objId = _caster.getObjectId();
    skill.getEffects(_caster, player, false, false, false);
    broadcastPacket(new MagicSkillUser(_caster, player, skillId, skillLevel, Config.PROTECTOR_SKILLTIME, 0));
    broadcastPacket(new CreatureSay(objId, 0, String.valueOf(getName()), Config.PROTECTOR_MESSAGE));
    + player.reduceCurrentHp(player.getMaxHp() + 1, _caster);

    skill = null;
    return true;
    }

    return false;
    }
    « Última modificación: Julio 11, 2018, 01:19:22 pm por GoldenDarkness »

    La primera si es sencillo y no sos pesado es gratis :D

    Desconectado Unstoppable

    • Grado A
    • *
    • Topic Author
    • Mensajes: 405
    • st
    • Agradecimientos: 120
    • Cronica: : pija
    • Revision: concha atr 360
    • S.O: Windows 10
    • Serverpack : forro no uso
    Re:como crear un skill que mate para el npc PVP/PK Protector ( L2Jfrozen )
    « Respuesta #4 en: Julio 11, 2018, 06:36:30 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos

    Código: [Seleccionar]
    // Cast for Player
    private boolean handleCast(final L2PcInstance player, final int skillId, final int skillLevel)
    {
    if (player.isGM() || player.isDead() || !player.isVisible() || !isInsideRadius(player, Config.PROTECTOR_RADIUS_ACTION, false, false))
    return false;

    L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);

    if (player.getFirstEffect(skill) == null)
    {
    final int objId = _caster.getObjectId();
    skill.getEffects(_caster, player, false, false, false);
    broadcastPacket(new MagicSkillUser(_caster, player, skillId, skillLevel, Config.PROTECTOR_SKILLTIME, 0));
    broadcastPacket(new CreatureSay(objId, 0, String.valueOf(getName()), Config.PROTECTOR_MESSAGE));
    + player.reduceCurrentHp(player.getMaxHp() + 1, _caster);

    skill = null;
    return true;
    }

    return false;
    }

    Código: [Seleccionar]
    // Cast for pet
    private boolean handleCastonPet(final L2Summon player, final int skillId, final int skillLevel)
    {
    if (player.isDead() || !player.isVisible() || !isInsideRadius(player, Config.PROTECTOR_RADIUS_ACTION, false, false))
    return false;

    L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
    if (player.getFirstEffect(skill) == null)
    {
    final int objId = _caster.getObjectId();
    skill.getEffects(_caster, player, false, false, false);
    broadcastPacket(new MagicSkillUser(_caster, player, skillId, skillLevel, Config.PROTECTOR_SKILLTIME, 0));
    broadcastPacket(new CreatureSay(objId, 0, String.valueOf(getName()), Config.PROTECTOR_MESSAGE));
    + player.reduceCurrentHp(player.getMaxHp() + 1, _caster);

    skill = null;
    return true;
    }

    return false;
    }

    mil gracias amigo , un crack

    P E R F E C T O

    funcionando y testiado !