U3Games
Games | Desarrollo & Soporte => L2 | Sección de Servidores => Lineage => L2 | Implementaciones => Mensaje iniciado por: Swarlog en Jul 29, 2025, 12:04 AM
CitarCORE:
### Eclipse Workspace Patch 1.0
#P Clean_Core
Index: java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java
===================================================================
--- java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java (revision 3067)
+++ java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java (working copy)
@@ -177,7 +177,9 @@
COREDONE,
// unimplemented
- NOTDONE, BALLISTA;
+ NOTDONE,
+ BALLISTA,
+ PETFUSION;
private final Class<? extends L2Skill> _class;
Index: java/net/sf/l2j/gameserver/model/actor/L2Character.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/L2Character.java (revision 3067)
+++ java/net/sf/l2j/gameserver/model/actor/L2Character.java (working copy)
@@ -1819,6 +1819,15 @@
sendPacket(ActionFailed.STATIC_PACKET);
return false;
}
+
+ // Pet validation for petfusion skill
+ if(skill.getSkillType() == L2SkillType.PETFUSION && getPet() == null)
+ {
+ SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
+ sm.addSkillName(skill);
+ sendPacket(sm);
+ return false;
+ }
// Check if the caster has enough HP
if (getCurrentHp() <= skill.getHpConsume())
Index: java/net/sf/l2j/gameserver/model/L2Skill.java
===================================================================
--- java/net/sf/l2j/gameserver/model/L2Skill.java (revision 3067)
+++ java/net/sf/l2j/gameserver/model/L2Skill.java (working copy)
@@ -294,6 +294,7 @@
private final boolean _isSuicideAttack;
private final boolean _canBeReflected;
+ private boolean _isFusionSkill;
protected L2Skill(StatsSet set)
{
@@ -473,10 +474,17 @@
_flyRadius = set.getInteger("flyRadius", 200);
_flyCourse = set.getFloat("flyCourse", 0);
_canBeReflected = set.getBool("canBeReflected", true);
+
+ _isFusionSkill = set.getBool("isPetFusionSkill", false);
}
public abstract void useSkill(L2Character caster, L2Object[] targets);
+ public final boolean isPetFusion()
+ {
+ return _isFusionSkill;
+ }
+
public final boolean isPotion()
{
return _ispotion;
CitarDATA:
### Eclipse Workspace Patch 1.0
#P Clean_DP
Index: data/stats/skills/0900-0999.xml
===================================================================
--- data/stats/skills/0900-0999.xml (revision 6130)
+++ data/stats/skills/0900-0999.xml (working copy)
@@ -321,22 +321,49 @@
<set name="operateType" val="OP_PASSIVE"/>
</skill>
<skill id="929" levels="1" name="Spirit of the Cat">
- <set name="target" val="TARGET_NONE"/>
- <set name="skillType" val="NOTDONE"/>
- <set name="operateType" val="OP_PASSIVE"/>
- <set name="reuseDelay" val="360000"/>
+ <!-- Done by Blacko -->
+ <set name="mpConsume" val="73"/>
+ <set name="hitTime" val="2500"/>
+ <set name="reuseDelay" val="1200000"/> <!-- Guessing -->
+ <set name="target" val="TARGET_SELF"/>
+ <set name="skillType" val="PETFUSION"/>
+ <set name="operateType" val="OP_ACTIVE"/>
+ <set name="isMagic" val="true"/>
+ <set name="transformId" val="219"/>
+ <set name="isFusionSkill" val="true"/>
+ <for>
+ <effect name="Transformation" time="300" val="0"/>
+ </for>
</skill>
<skill id="930" levels="1" name="Spirit of the Demon">
- <set name="target" val="TARGET_NONE"/>
- <set name="skillType" val="NOTDONE"/>
- <set name="operateType" val="OP_PASSIVE"/>
- <set name="reuseDelay" val="360000"/>
+ <!-- Done by Blacko -->
+ <set name="mpConsume" val="73"/>
+ <set name="hitTime" val="2500"/>
+ <set name="reuseDelay" val="1200000"/> <!-- Guessing -->
+ <set name="target" val="TARGET_SELF"/>
+ <set name="skillType" val="PETFUSION"/>
+ <set name="operateType" val="OP_ACTIVE"/>
+ <set name="isMagic" val="true"/>
+ <set name="transformId" val="221"/>
+ <set name="isFusionSkill" val="true"/>
+ <for>
+ <effect name="Transformation" time="300" val="0"/>
+ </for>
</skill>
<skill id="931" levels="1" name="Spirit of the Unicorn">
- <set name="target" val="TARGET_NONE"/>
- <set name="skillType" val="NOTDONE"/>
- <set name="operateType" val="OP_PASSIVE"/>
- <set name="reuseDelay" val="360000"/>
+ <!-- Done by Blacko -->
+ <set name="mpConsume" val="73"/>
+ <set name="hitTime" val="2500"/>
+ <set name="reuseDelay" val="1200000"/> <!-- Guessing -->
+ <set name="target" val="TARGET_SELF"/>
+ <set name="skillType" val="PETFUSION"/>
+ <set name="operateType" val="OP_ACTIVE"/>
+ <set name="isMagic" val="true"/>
+ <set name="transformId" val="220"/>
+ <set name="isFusionSkill" val="true"/>
+ <for>
+ <effect name="Transformation" time="300" val="0"/>
+ </for>
</skill>
<skill id="932" levels="9" name="Star Stone Gathering">
<set name="target" val="TARGET_NONE"/>
Index: data/scripts/transformations/SummonerUnicorn.java
===================================================================
--- data/scripts/transformations/SummonerUnicorn.java (revision 0)
+++ data/scripts/transformations/SummonerUnicorn.java (revision 0)
@@ -0,0 +1,66 @@
+package transformations;
+
+import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.instancemanager.TransformationManager;
+import net.sf.l2j.gameserver.model.L2Transformation;
+
+/**
+ * Description: <br>
+ * This will handle the transformation, giving the skills, and removing them, when the player logs out and is transformed these skills
+ * do not save.
+ * When the player logs back in, there will be a call from the enterworld packet that will add all their skills.
+ * The enterworld packet will transform a player.
+ *
+ * @author Ahmed
+ *
+ */
+public class SummonerUnicorn extends L2Transformation
+{
+ public SummonerUnicorn()
+ {
+ // id, duration (secs), colRadius, colHeight
+ super(221, 300, 12.0, 30.0);
+ }
+
+ public void onTransform()
+ {
+ if (getPlayer().getTransformationId() != 221 || getPlayer().isCursedWeaponEquipped())
+ return;
+
+ // give transformation skills
+ transformedSkills();
+ }
+
+ public void transformedSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{619,5491});
+ }
+
+ public void onUntransform()
+ {
+ // remove transformation skills
+ removeSkills();
+ }
+
+ public void removeSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{});
+ }
+
+ public static void main(String[] args)
+ {
+ TransformationManager.getInstance().registerTransformation(new SummonerUnicorn());
+ }
+}
Index: data/scripts/transformations/SummonerSpectral.java
===================================================================
--- data/scripts/transformations/SummonerSpectral.java (revision 0)
+++ data/scripts/transformations/SummonerSpectral.java (revision 0)
@@ -0,0 +1,66 @@
+package transformations;
+
+import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.instancemanager.TransformationManager;
+import net.sf.l2j.gameserver.model.L2Transformation;
+
+/**
+ * Description: <br>
+ * This will handle the transformation, giving the skills, and removing them, when the player logs out and is transformed these skills
+ * do not save.
+ * When the player logs back in, there will be a call from the enterworld packet that will add all their skills.
+ * The enterworld packet will transform a player.
+ *
+ * @author Ahmed
+ *
+ */
+public class SummonerSpectral extends L2Transformation
+{
+ public SummonerSpectral()
+ {
+ // id, duration (secs), colRadius, colHeight
+ super(220, 300, 12.0, 30.0);
+ }
+
+ public void onTransform()
+ {
+ if (getPlayer().getTransformationId() != 220 || getPlayer().isCursedWeaponEquipped())
+ return;
+
+ // give transformation skills
+ transformedSkills();
+ }
+
+ public void transformedSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{619,5491});
+ }
+
+ public void onUntransform()
+ {
+ // remove transformation skills
+ removeSkills();
+ }
+
+ public void removeSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{});
+ }
+
+ public static void main(String[] args)
+ {
+ TransformationManager.getInstance().registerTransformation(new SummonerSpectral());
+ }
+}
Index: data/scripts/handlers/MasterHandler.java
===================================================================
--- data/scripts/handlers/MasterHandler.java (revision 6130)
+++ data/scripts/handlers/MasterHandler.java (working copy)
@@ -205,6 +205,7 @@
SkillHandler.getInstance().registerSkillHandler(new InstantJump());
SkillHandler.getInstance().registerSkillHandler(new Dummy());
SkillHandler.getInstance().registerSkillHandler(new Extractable());
+ SkillHandler.getInstance().registerSkillHandler(new PetFusion());
_log.config("Loaded " + SkillHandler.getInstance().size() + " SkillHandlers");
}
Index: data/scripts.cfg
===================================================================
--- data/scripts.cfg (revision 6130)
+++ data/scripts.cfg (working copy)
@@ -87,6 +87,9 @@
transformations/Rabbit.java
transformations/Ranku.java
transformations/SaberToothTiger.java
+transformations/SummonerCat.java
+transformations/SummonerSpectral.java
+transformations/SummonerUnicorn.java
transformations/Teleporter.java
transformations/Teleporter2.java
transformations/Timitran.java
Index: data/scripts/handlers/skillhandlers/PetFusion.java
===================================================================
--- data/scripts/handlers/skillhandlers/PetFusion.java (revision 0)
+++ data/scripts/handlers/skillhandlers/PetFusion.java (revision 0)
@@ -0,0 +1,76 @@
+/*
+ * This program 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.
+ *
+ * This program 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 handlers.skillhandlers;
+
+import net.sf.l2j.gameserver.handler.ISkillHandler;
+import net.sf.l2j.gameserver.instancemanager.TransformationManager;
+import net.sf.l2j.gameserver.model.L2Object;
+import net.sf.l2j.gameserver.model.L2Skill;
+import net.sf.l2j.gameserver.model.actor.L2Character;
+import net.sf.l2j.gameserver.model.actor.L2Summon;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.templates.skills.L2SkillType;
+
+/**
+ * @author Blacko
+ */
+
+public class PetFusion implements ISkillHandler
+{
+ private static final L2SkillType[] SKILL_IDS =
+ {
+ L2SkillType.PETFUSION
+ };
+
+ /**
+ *
+ * @see net.sf.l2j.gameserver.handler.ISkillHandler#useSkill(net.sf.l2j.gameserver.model.actor.L2Character, net.sf.l2j.gameserver.model.L2Skill, net.sf.l2j.gameserver.model.L2Object[])
+ */
+ public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
+ {
+ for (L2Object obj : targets)
+ {
+ L2Character target = (L2Character) obj;
+ if (target != null)
+ {
+ if (activeChar.isAlikeDead())
+ return;
+
+ if (!(activeChar instanceof L2PcInstance))
+ return;
+
+ if(activeChar.isTransformed())
+ return;
+ // here just make the transform, pet validation must be BEFORE the skill casts...
+ int transformId = skill.getTransformId();
+ L2PcInstance player = (L2PcInstance)activeChar;
+ L2Summon pet = player.getPet();
+ pet.unSummon(player);
+ TransformationManager.getInstance().transformPlayer(transformId, player, Long.MAX_VALUE);
+ skill.getEffectsSelf(activeChar);
+ }
+ }
+ }
+
+ /**
+ *
+ * @see net.sf.l2j.gameserver.handler.ISkillHandler#getSkillIds()
+ */
+ public L2SkillType[] getSkillIds()
+ {
+ return SKILL_IDS;
+ }
+}
\ No newline at end of file
Index: data/scripts/transformations/SummonerCat.java
===================================================================
--- data/scripts/transformations/SummonerCat.java (revision 0)
+++ data/scripts/transformations/SummonerCat.java (revision 0)
@@ -0,0 +1,66 @@
+package transformations;
+
+import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.instancemanager.TransformationManager;
+import net.sf.l2j.gameserver.model.L2Transformation;
+
+/**
+ * Description: <br>
+ * This will handle the transformation, giving the skills, and removing them, when the player logs out and is transformed these skills
+ * do not save.
+ * When the player logs back in, there will be a call from the enterworld packet that will add all their skills.
+ * The enterworld packet will transform a player.
+ *
+ * @author Ahmed
+ *
+ */
+public class SummonerCat extends L2Transformation
+{
+ public SummonerCat()
+ {
+ // id, duration (secs), colRadius, colHeight
+ super(219, 300, 12.0, 23.0);
+ }
+
+ public void onTransform()
+ {
+ if (getPlayer().getTransformationId() != 219 || getPlayer().isCursedWeaponEquipped())
+ return;
+
+ // give transformation skills
+ transformedSkills();
+ }
+
+ public void transformedSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{619,5491});
+ }
+
+ public void onUntransform()
+ {
+ // remove transformation skills
+ removeSkills();
+ }
+
+ public void removeSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{});
+ }
+
+ public static void main(String[] args)
+ {
+ TransformationManager.getInstance().registerTransformation(new SummonerCat());
+ }
+}