Autor Tema: [SA & Efectos adicionales - Armas] - Error Parte 1  (Leído 286 veces)

canonmagic

  • Jr. Member
  • **
  • Mensajes: 52
  • Karma: +0/-0
    • Ver Perfil
[SA & Efectos adicionales - Armas] - Error Parte 1
« en: Julio 06, 2018, 04:49:16 am »
Buenas, escribo para informar que anduve haciendo un par de pruebas con las habilidades SA de las armas y alguna que otra arma con efectos añadidos y me encontre problemas con varios de ellos, no los separo a todos en posts porque llenaria la pagina completa de issues pero los separare en categorias  ::). Aqui los primeros

1.- En las armas hero "Infinity"

1.1.- El Infinity Spear no aplica el efecto "Dispel" el cual deberia eliminar uno a uno los buff del objetivo con los criticos

1.4.- El Infinity Scepter y Infinity Rod no estan aplicando el heal de 100% que deberian dar con un chance de 3% "aun usando 1000 veces battle heal"

Por ahora dejo estos porque son los mas complicados de revisar para mi. Si consigo solucionar alguno de estos o los otros problemas ire dejando por aqui los fix
« Última modificación: Julio 06, 2018, 08:20:32 am por canonmagic »

canonmagic

  • Jr. Member
  • **
  • Mensajes: 52
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #1 en: Julio 06, 2018, 09:43:05 am »
Bueno, anduve moviendo un poco los stats y parece que el Infinity Spear funciona bien la skill pero no en el porcentaje que deberia, le coloque 100 en su power y afectaba cada 2 o 3 criticos que raro  ???... Pero el skill ID:3596 "Full Recover" que es el encargado de el efecto de 100% heal de las infinity scepter y rod le encontre un detalle... fue que no vi por ningun lado el chance de 3% que deberia tener el skill de castearse nose si eso tendra algo que ver...

Carlos2200

  • Newbie
  • *
  • Mensajes: 29
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #2 en: Julio 06, 2018, 11:25:39 am »
en la database >> weapons busca al final de cada arma esta.  onCast_Skill_chance
6616   Infinity Scepter   lrhand   false   1300   1   1   adamantaite   s   290   20   bigblunt   4   4   0   0   0   325   0   182   57000000   2850   false   false   false   false   3595   1   3596   1   (3)   0   0   0

                                                                                                               
« Última modificación: Julio 06, 2018, 11:33:58 am por Carlos2200 »

canonmagic

  • Jr. Member
  • **
  • Mensajes: 52
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #3 en: Julio 06, 2018, 12:45:44 pm »
Bueno, hice la modificacion de la infinity rod y scepter dejandolas en 100% de chance y aun asi no funciona la curacion de 100% HP

canonmagic

  • Jr. Member
  • **
  • Mensajes: 52
  • Karma: +0/-0
    • Ver Perfil
Re:[Infinity Scepter & Rod - Skills] - Error
« Respuesta #4 en: Julio 20, 2018, 01:35:51 pm »
Bueno, estuve un rato dandole vueltas a las armas infinity y parece que todas funcionan bien a exepcion de las Infinity Rod y Scepter. Estas al castear deberian curar 100% de la HP al target en un chance determinado, yo le deje el chance en 100% y parece no funcionar. El skill como tal lo probe por separado y no tiene ningun problema, en L2Character estuve revisando el trigger al finalizar los casting de habilidades y este llega normalmente al "getOnCast". Inclusive me fui a este mismo metodo y los calculos (chance, verificar si la habilidad es "Good magic", etc) no tienen problema alguno; el metodo llega hasta aplicar el efecto al target "Pero simplemente no aplica el skill del Heal".

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 196
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #5 en: Julio 20, 2018, 10:41:56 pm »
hice varios ajustes, probalo y me contas

Código
Index: java/net/sf/l2j/gameserver/handler/skill/SkillHeal.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/skill/SkillHeal.java (revision 1128)
+++ java/net/sf/l2j/gameserver/handler/skill/SkillHeal.java (working copy)
@@ -13,7 +13,6 @@
 import net.sf.l2j.gameserver.model.actor.instance.enums.ShotType;
 import net.sf.l2j.gameserver.model.skills.Skill;
 import net.sf.l2j.gameserver.model.skills.enums.SkillType;
-import net.sf.l2j.gameserver.model.skills.stats.enums.StatsType;
 import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
 import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate.StatusUpdateType;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
@@ -37,7 +36,7 @@
  // check for other effects
  try
  {
- ISkillHandler handler = SkillHandler.getHandler(SkillType.BUFF);
+ var handler = SkillHandler.getHandler(SkillType.BUFF);
 
  if (handler != null)
  {
@@ -49,9 +48,9 @@
  //
  }
 
- for (L2Object target2 : targets)
+ for (var target2 : targets)
  {
- L2Character target = (L2Character) target2;
+ var target = (L2Character) target2;
 
  // We should not heal if char is dead
  if ((target == null) || target.isDead())
@@ -65,34 +64,35 @@
  continue;
  }
 
- boolean sps = activeChar.isChargedShot(ShotType.SPIRITSHOTS);
- boolean bss = activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
+ var sps = activeChar.isChargedShot(ShotType.SPIRITSHOTS);
+ var bss = activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
 
- double hp = skill.getPower();
+ var hp = skill.getPower();
 
- if (skill.getSkillType() == SkillType.HEAL_PERCENT)
- {
- hp = (target.getStat().getMaxHp() * hp) / 100.0;
- }
- else
+ switch (skill.getSkillType())
  {
- if (bss)
+ case HEAL:
  {
- hp *= 1.5;
+ if (bss)
+ {
+ hp = skill.getPower() * 1.5;
+ }
+ else if (sps)
+ {
+ hp = skill.getPower() * 1.3;
+ }
+ break;
  }
- else if (sps)
+ case HEAL_PERCENT:
  {
- hp *= 1.3;
+ hp = (target.getStat().getMaxHp() * skill.getPower()) / 100.0;
+ break;
  }
- }
-
- if (skill.getSkillType() == SkillType.HEAL_STATIC)
- {
- hp = skill.getPower();
- }
- else if (skill.getSkillType() != SkillType.HEAL_PERCENT)
- {
- hp *= target.calcStat(StatsType.HEAL_HP_RATE, 100, null, null) / 100;
+ case HEAL_STATIC:
+ {
+ hp = skill.getPower();
+ break;
+ }
  }
 
  target.setCurrentHp(hp + target.getCurrentHp());

canonmagic

  • Jr. Member
  • **
  • Mensajes: 52
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #6 en: Julio 21, 2018, 01:31:08 am »
Parece que no funciono, la skill por separado agregandola de forma custom a un char y lanzandola funciona bien. Pero el arma no la activa al castear skills.  :-\

Añadido: Se me acaba de ocurrir algo... el uso de habilidades mediante el SA, mencione que se daba a traves de un effector no... no se si estare mal, pero no hace falta un EffectType independiente para realizar un heal? debido a que el heal trabaja como BUFF y este solo deja el efecto como tal sin aplicar valores de power y modificar la HP.
« Última modificación: Julio 21, 2018, 02:02:21 am por canonmagic »

canonmagic

  • Jr. Member
  • **
  • Mensajes: 52
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #7 en: Julio 27, 2018, 11:15:12 pm »
Bueno le hice un par de pruebas al skill y como dije las habilidades de las armas trabajan a traves de effects y no skills como tal, no encontre una manera de introducirle los skills al mismo; asi que decidi colocarle un effect que trabaja como un buff de 1 seg el cual hace el mismo efecto del "HEAL_PERCENT" y con esto el skill funciono correctamente con los chances que deberia ser. El unico detalle es que al ser buff podria molestar pisando otros buffs. Por aqui dejo el diff:

Código
### Eclipse Workspace Patch 1.0
#P C4_GameServer
Index: java/net/sf/l2j/gameserver/model/skills/effects/type/EffectHealPercent.java
===================================================================
--- java/net/sf/l2j/gameserver/model/skills/effects/type/EffectHealPercent.java (nonexistent)
+++ java/net/sf/l2j/gameserver/model/skills/effects/type/EffectHealPercent.java (working copy)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2014-2018 L2jAdmins
+ *
+ * This file is part of L2jAdmins.
+ *
+ * L2jAdmins is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * L2jAdmins is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.model.skills.effects.type;
+
+import net.sf.l2j.gameserver.model.skills.effects.Effect;
+import net.sf.l2j.gameserver.model.skills.effects.EffectTemplate;
+import net.sf.l2j.gameserver.model.skills.effects.enums.EffectType;
+import net.sf.l2j.gameserver.model.skills.stats.Env;
+import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
+import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate.StatusUpdateType;
+
+/**
+ * @author Noname
+ *
+ */
+public class EffectHealPercent extends Effect
+{
+
+ public EffectHealPercent(Env env, EffectTemplate template)
+ {
+ super(env, template);
+ }
+
+ @Override
+ public EffectType getEffectType()
+ {
+ return EffectType.HEAL_PERCENT;
+ }
+
+ @Override
+ public boolean onActionTime()
+ {
+ if (getEffected().isDead())
+ {
+ return false;
+ }
+
+ double percent = getSkill().getPower();
+ double hp2 = getEffected().getCurrentHp();
+ double heal = getEffected().getStat().getMaxHp()*percent/100;
+ if (hp2+heal >= getEffected().getStat().getMaxHp())
+ {
+ getEffected().setCurrentHp(getEffected().getStat().getMaxHp());
+ }
+ else
+ {
+ getEffected().setCurrentHp(getEffected().getCurrentHp()+heal);
+ }
+
+ int hp = (int) getEffected().getCurrentHp();
+ StatusUpdate suhp = new StatusUpdate(getEffected().getObjectId());
+ suhp.addAttribute(StatusUpdateType.CUR_HP, hp);
+ getEffected().sendPacket(suhp);
+ return true;
+ }
+}
\ No newline at end of file

Código
### Eclipse Workspace Patch 1.0
#P C4_GameServer
Index: java/net/sf/l2j/gameserver/model/skills/effects/enums/EffectType.java
===================================================================
--- java/net/sf/l2j/gameserver/model/skills/effects/enums/EffectType.java (revision 1100)
+++ java/net/sf/l2j/gameserver/model/skills/effects/enums/EffectType.java (working copy)
@@ -27,6 +27,7 @@
  DEBUFF,
  DMG_OVER_TIME,
  HEAL_OVER_TIME,
+ HEAL_PERCENT,
  COMBAT_POINT_HEAL_OVER_TIME,
  MANA_DMG_OVER_TIME,
  MANA_HEAL_OVER_TIME,

Código
### Eclipse Workspace Patch 1.0
#P C4_DataPack
Index: data/xml/stats/skills/3500-3599.xml
===================================================================
--- data/xml/stats/skills/3500-3599.xml (revision 1100)
+++ data/xml/stats/skills/3500-3599.xml (working copy)
@@ -1151,11 +1151,14 @@
  </skill>
  <skill id="3596" levels="1" name="Full Recover">
    <!-- Infinity Scepter Skill -->
-   <set name="target" val="TARGET_SELF"/>
+   <set name="target" val="TARGET_ONE"/>
    <set name="power" val="100"/>
-   <set name="skillType" val="HEAL_PERCENT"/>
+   <set name="skillType" val="BUFF"/>
    <set name="operateType" val="ACTIVE"/>
    <set name="aggroPoints" val="100"/>
+   <for>
+    <effect count="1" name="HealPercent" time="1" val="1" stackOrder="58" stackType="HpRecover"/>
+   </for>
  </skill>
  <skill id="3597" levels="1" name="Special Ability: Infinity Rod">
    <!-- Done by DJ MELERIX -->
@@ -1174,11 +1177,14 @@
  </skill>
  <skill id="3598" levels="1" name="Full Recover">
    <!-- Infinity Rod Skill -->
-   <set name="target" val="TARGET_SELF"/>
+   <set name="target" val="TARGET_ONE"/>
    <set name="power" val="100"/>
-   <set name="skillType" val="HEAL_PERCENT"/>
+   <set name="skillType" val="BUFF"/>
    <set name="operateType" val="ACTIVE"/>
    <set name="aggroPoints" val="100"/>
+   <for>
+    <effect count="1" name="HealPercent" time="1" val="1" stackOrder="58" stackType="HpRecover"/>
+   </for>
  </skill>
  <skill id="3599" levels="1" name="Polearm Multi-attack">
    <!-- s_polearm_multi_attack -->

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 196
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #8 en: Julio 28, 2018, 02:23:23 am »
disculpa que no te avise, aca te dejo el diff de lo que hice estos dias

https://sourceforge.net/p/l2jadminsc4/code/1130/

canonmagic

  • Jr. Member
  • **
  • Mensajes: 52
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #9 en: Julio 28, 2018, 08:00:37 am »
A bueno muchas gracias por el arreglo :), no hay problema como te dije anteriormente yo utilizo todo arreglo a modo de aprendizaje  ;D.

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 196
  • Karma: +0/-0
    • Ver Perfil
Re:[SA & Efectos adicionales - Armas] - Error Parte 1
« Respuesta #10 en: Julio 28, 2018, 12:39:07 pm »
igual esto que arme fue con miras a un futuro.

Mi idea es comenzar a trasladar muchos skillhandlers a effectos, es decir que el skill quedaria para definir la accion del lanzamiento del mismo y las acciones luego de ser lanzado que quede dependiente de los efectos pero si intento hacer todo hoy no terminaba en navidad :P