U3Games

Games | Desarrollo & Soporte => L2 | Sección de Servidores => Lineage => L2 | Implementaciones => Mensaje iniciado por: Swarlog en Jul 29, 2025, 12:04 AM

Título: Pet Fusion
Publicado 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());
+    }
+}