Dwarf buff, fake death, Noble Sacriface target and Shadow Evasion fixes.

Contributed by gamelike85.
This commit is contained in:
MobiusDevelopment 2019-11-10 01:09:56 +00:00
parent 88d90f55bd
commit c9a1c7f4f6
48 changed files with 606 additions and 303 deletions

View File

@ -119,6 +119,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("DeleteTopAgro", DeleteTopAgro::new);
EffectHandler.getInstance().registerHandler("DetectHiddenObjects", DetectHiddenObjects::new);
EffectHandler.getInstance().registerHandler("Detection", Detection::new);
EffectHandler.getInstance().registerHandler("DisableSkill", DisableSkill::new);
EffectHandler.getInstance().registerHandler("DisableTargeting", DisableTargeting::new);
EffectHandler.getInstance().registerHandler("Disarm", Disarm::new);
EffectHandler.getInstance().registerHandler("Disarmor", Disarmor::new);

View File

@ -0,0 +1,80 @@
/*
* This file is part of the L2J Mobius project.
*
* 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.effecthandlers;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Ofelin
*/
public class DisableSkill extends AbstractEffect
{
private final Set<Integer> disableSkills;
private Skill knownSKill;
public DisableSkill(StatsSet params)
{
String disable = params.getString("disable");
if ((disable != null) && !disable.isEmpty())
{
disableSkills = new HashSet<>();
for (String slot : disable.split(";"))
{
disableSkills.add(Integer.parseInt(slot));
}
}
else
{
disableSkills = Collections.<Integer> emptySet();
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
for (int disableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(disableSkillId);
if (knownSKill != null)
{
effected.disableSkill(knownSKill, 0);
}
}
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
for (int enableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(enableSkillId);
if (knownSKill != null)
{
effected.enableSkill(knownSKill);
}
}
}
}

View File

@ -1842,13 +1842,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>1</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -28,6 +28,18 @@
<magicType>0</magicType>
<amount>90</amount>
</effect>
<effect name="PhysicalDefence" fromLevel="1" toLevel="1" fromSubLevel="1001" toSubLevel="1030">
<amount>
<value fromLevel="1" toLevel="1" fromSubLevel="1001" toSubLevel="1030">{0.6 + 0.4 * subIndex}</value>
</amount>
<mode>PER</mode>
</effect>
<effect name="MagicalDefence" fromLevel="1" toLevel="1" fromSubLevel="2001" toSubLevel="2030">
<amount>
<value fromLevel="1" toLevel="1" fromSubLevel="2001" toSubLevel="2030">{0.6 + 0.4 * subIndex}</value>
</amount>
<mode>PER</mode>
</effect>
</effects>
</skill>
<skill id="10607" toLevel="1" name="Maximum Mortality">
@ -194,6 +206,21 @@
<effect name="CounterPhysicalSkill">
<amount>90</amount>
</effect>
<effect name="PhysicalDefence" fromLevel="1" toLevel="1" fromSubLevel="1001" toSubLevel="1030">
<amount>
<value fromLevel="1" toLevel="1" fromSubLevel="1001" toSubLevel="1030">{0.6 + 0.4 * subIndex}</value>
</amount>
<mode>PER</mode>
</effect>
<effect name="MagicalDefence" fromLevel="1" toLevel="1" fromSubLevel="2001" toSubLevel="2030">
<amount>
<value fromLevel="1" toLevel="1" fromSubLevel="2001" toSubLevel="2030">{0.6 + 0.4 * subIndex}</value>
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -89,6 +89,7 @@ DeleteHateOfMe: Has a chance to delete target's hate towards you.
DeleteTopAgro: Has a chance to delete target's most hated from the list.
DetectHiddenObjects: Finds hidden doors
Detection: Detects hidden creatures.
DisableSkill: Disables effectors known skills specified by skill ID. (l2jmobius)
DisableTargeting: Disables your target's ability to target.
Disarm: Removes the weapon of target player.
Disarmor: Removes the armor of target player.

View File

@ -451,29 +451,7 @@
<xs:element minOccurs="0" name="classIds">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="item" type="xs:string" />
<xs:element minOccurs="0" name="ARCANA_LORD" />
<xs:element minOccurs="0" name="ELEMENTAL_MASTER" />
<xs:element minOccurs="0" name="SPECTRAL_MASTER" />
<xs:element minOccurs="0" name="DUELIST" />
<xs:element minOccurs="0" name="DREADNOUGHT" />
<xs:element minOccurs="0" name="TITAN" />
<xs:element minOccurs="0" name="GRAND_KHAVATARI" />
<xs:element minOccurs="0" name="FORTUNE_SEEKER" />
<xs:element minOccurs="0" name="MAESTRO" />
<xs:element minOccurs="0" name="PHOENIX_KNIGHT" />
<xs:element minOccurs="0" name="HELL_KNIGHT" />
<xs:element minOccurs="0" name="EVA_TEMPLAR" />
<xs:element minOccurs="0" name="SHILLIEN_TEMPLAR" />
<xs:element minOccurs="0" name="ADVENTURER" />
<xs:element minOccurs="0" name="SWORD_MUSE" />
<xs:element minOccurs="0" name="WIND_RIDER" />
<xs:element minOccurs="0" name="SPECTRAL_DANCER" />
<xs:element minOccurs="0" name="GHOST_HUNTER" />
<xs:element minOccurs="0" name="MALE_SOUL_HOUND" />
<xs:element minOccurs="0" name="FEMALE_SOUL_HOUND" />
<xs:element minOccurs="0" name="DOOMBRINGER" />
<xs:element minOccurs="0" name="TRICKSTER" />
<xs:element maxOccurs="unbounded" name="item" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
@ -1961,11 +1939,27 @@
</xs:complexType>
</xs:element>
<xs:element name="allowNormalAttack" type="xs:boolean" />
<xs:element name="disable" type="xs:unsignedShort" />
<xs:element name="saveHp" type="xs:unsignedByte" />
<xs:element name="attackSkillId" type="xs:unsignedShort" />
<xs:element name="summonPoints" type="xs:unsignedByte" />
<xs:element name="abnormalType" type="xs:string" />
<xs:element name="CRITICAL_DAMAGE" type="xs:unsignedByte" />
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="templates">
<xs:complexType>
<xs:sequence>
@ -2034,21 +2028,6 @@
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="damageModifier" type="xs:decimal" />
<xs:element name="animationSpeed" type="xs:unsignedShort" />
<xs:element name="pAtkMod" type="xs:unsignedByte" />

View File

@ -119,6 +119,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("DeleteTopAgro", DeleteTopAgro::new);
EffectHandler.getInstance().registerHandler("DetectHiddenObjects", DetectHiddenObjects::new);
EffectHandler.getInstance().registerHandler("Detection", Detection::new);
EffectHandler.getInstance().registerHandler("DisableSkill", DisableSkill::new);
EffectHandler.getInstance().registerHandler("DisableTargeting", DisableTargeting::new);
EffectHandler.getInstance().registerHandler("Disarm", Disarm::new);
EffectHandler.getInstance().registerHandler("Disarmor", Disarmor::new);

View File

@ -0,0 +1,80 @@
/*
* This file is part of the L2J Mobius project.
*
* 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.effecthandlers;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Ofelin
*/
public class DisableSkill extends AbstractEffect
{
private final Set<Integer> disableSkills;
private Skill knownSKill;
public DisableSkill(StatsSet params)
{
String disable = params.getString("disable");
if ((disable != null) && !disable.isEmpty())
{
disableSkills = new HashSet<>();
for (String slot : disable.split(";"))
{
disableSkills.add(Integer.parseInt(slot));
}
}
else
{
disableSkills = Collections.<Integer> emptySet();
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
for (int disableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(disableSkillId);
if (knownSKill != null)
{
effected.disableSkill(knownSKill, 0);
}
}
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
for (int enableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(enableSkillId);
if (knownSKill != null)
{
effected.enableSkill(knownSKill);
}
}
}
}

View File

@ -1848,13 +1848,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>1</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -218,6 +218,9 @@
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -89,6 +89,7 @@ DeleteHateOfMe: Has a chance to delete target's hate towards you.
DeleteTopAgro: Has a chance to delete target's most hated from the list.
DetectHiddenObjects: Finds hidden doors
Detection: Detects hidden creatures.
DisableSkill: Disables effectors known skills specified by skill ID. (l2jmobius)
DisableTargeting: Disables your target's ability to target.
Disarm: Removes the weapon of target player.
Disarmor: Removes the armor of target player.

View File

@ -455,29 +455,7 @@
<xs:element minOccurs="0" name="classIds">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="item" type="xs:string" />
<xs:element minOccurs="0" name="ARCANA_LORD" />
<xs:element minOccurs="0" name="ELEMENTAL_MASTER" />
<xs:element minOccurs="0" name="SPECTRAL_MASTER" />
<xs:element minOccurs="0" name="DUELIST" />
<xs:element minOccurs="0" name="DREADNOUGHT" />
<xs:element minOccurs="0" name="TITAN" />
<xs:element minOccurs="0" name="GRAND_KHAVATARI" />
<xs:element minOccurs="0" name="FORTUNE_SEEKER" />
<xs:element minOccurs="0" name="MAESTRO" />
<xs:element minOccurs="0" name="PHOENIX_KNIGHT" />
<xs:element minOccurs="0" name="HELL_KNIGHT" />
<xs:element minOccurs="0" name="EVA_TEMPLAR" />
<xs:element minOccurs="0" name="SHILLIEN_TEMPLAR" />
<xs:element minOccurs="0" name="ADVENTURER" />
<xs:element minOccurs="0" name="SWORD_MUSE" />
<xs:element minOccurs="0" name="WIND_RIDER" />
<xs:element minOccurs="0" name="SPECTRAL_DANCER" />
<xs:element minOccurs="0" name="GHOST_HUNTER" />
<xs:element minOccurs="0" name="MALE_SOUL_HOUND" />
<xs:element minOccurs="0" name="FEMALE_SOUL_HOUND" />
<xs:element minOccurs="0" name="DOOMBRINGER" />
<xs:element minOccurs="0" name="TRICKSTER" />
<xs:element maxOccurs="unbounded" name="item" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
@ -2007,11 +1985,27 @@
</xs:complexType>
</xs:element>
<xs:element name="allowNormalAttack" type="xs:boolean" />
<xs:element name="disable" type="xs:unsignedShort" />
<xs:element name="saveHp" type="xs:unsignedByte" />
<xs:element name="attackSkillId" type="xs:unsignedShort" />
<xs:element name="summonPoints" type="xs:unsignedByte" />
<xs:element name="abnormalType" type="xs:string" />
<xs:element name="CRITICAL_DAMAGE" type="xs:unsignedByte" />
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="templates">
<xs:complexType>
<xs:sequence>
@ -2093,21 +2087,6 @@
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="debuffModifier" type="xs:decimal" />
<xs:element name="damageModifier" type="xs:decimal" />
<xs:element name="animationSpeed" type="xs:unsignedShort" />

View File

@ -119,6 +119,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("DeleteTopAgro", DeleteTopAgro::new);
EffectHandler.getInstance().registerHandler("DetectHiddenObjects", DetectHiddenObjects::new);
EffectHandler.getInstance().registerHandler("Detection", Detection::new);
EffectHandler.getInstance().registerHandler("DisableSkill", DisableSkill::new);
EffectHandler.getInstance().registerHandler("DisableTargeting", DisableTargeting::new);
EffectHandler.getInstance().registerHandler("Disarm", Disarm::new);
EffectHandler.getInstance().registerHandler("Disarmor", Disarmor::new);

View File

@ -0,0 +1,80 @@
/*
* This file is part of the L2J Mobius project.
*
* 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.effecthandlers;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Ofelin
*/
public class DisableSkill extends AbstractEffect
{
private final Set<Integer> disableSkills;
private Skill knownSKill;
public DisableSkill(StatsSet params)
{
String disable = params.getString("disable");
if ((disable != null) && !disable.isEmpty())
{
disableSkills = new HashSet<>();
for (String slot : disable.split(";"))
{
disableSkills.add(Integer.parseInt(slot));
}
}
else
{
disableSkills = Collections.<Integer> emptySet();
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
for (int disableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(disableSkillId);
if (knownSKill != null)
{
effected.disableSkill(knownSKill, 0);
}
}
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
for (int enableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(enableSkillId);
if (knownSKill != null)
{
effected.enableSkill(knownSKill);
}
}
}
}

View File

@ -1841,13 +1841,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>1</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -218,6 +218,9 @@
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -89,6 +89,7 @@ DeleteHateOfMe: Has a chance to delete target's hate towards you.
DeleteTopAgro: Has a chance to delete target's most hated from the list.
DetectHiddenObjects: Finds hidden doors
Detection: Detects hidden creatures.
DisableSkill: Disables effectors known skills specified by skill ID. (l2jmobius)
DisableTargeting: Disables your target's ability to target.
Disarm: Removes the weapon of target player.
Disarmor: Removes the armor of target player.

View File

@ -455,29 +455,7 @@
<xs:element minOccurs="0" name="classIds">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="item" type="xs:string" />
<xs:element minOccurs="0" name="ARCANA_LORD" />
<xs:element minOccurs="0" name="ELEMENTAL_MASTER" />
<xs:element minOccurs="0" name="SPECTRAL_MASTER" />
<xs:element minOccurs="0" name="DUELIST" />
<xs:element minOccurs="0" name="DREADNOUGHT" />
<xs:element minOccurs="0" name="TITAN" />
<xs:element minOccurs="0" name="GRAND_KHAVATARI" />
<xs:element minOccurs="0" name="FORTUNE_SEEKER" />
<xs:element minOccurs="0" name="MAESTRO" />
<xs:element minOccurs="0" name="PHOENIX_KNIGHT" />
<xs:element minOccurs="0" name="HELL_KNIGHT" />
<xs:element minOccurs="0" name="EVA_TEMPLAR" />
<xs:element minOccurs="0" name="SHILLIEN_TEMPLAR" />
<xs:element minOccurs="0" name="ADVENTURER" />
<xs:element minOccurs="0" name="SWORD_MUSE" />
<xs:element minOccurs="0" name="WIND_RIDER" />
<xs:element minOccurs="0" name="SPECTRAL_DANCER" />
<xs:element minOccurs="0" name="GHOST_HUNTER" />
<xs:element minOccurs="0" name="MALE_SOUL_HOUND" />
<xs:element minOccurs="0" name="FEMALE_SOUL_HOUND" />
<xs:element minOccurs="0" name="DOOMBRINGER" />
<xs:element minOccurs="0" name="TRICKSTER" />
<xs:element maxOccurs="unbounded" name="item" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
@ -2039,11 +2017,27 @@
</xs:complexType>
</xs:element>
<xs:element name="allowNormalAttack" type="xs:boolean" />
<xs:element name="disable" type="xs:unsignedShort" />
<xs:element name="saveHp" type="xs:unsignedByte" />
<xs:element name="attackSkillId" type="xs:unsignedShort" />
<xs:element name="summonPoints" type="xs:unsignedByte" />
<xs:element name="abnormalType" type="xs:string" />
<xs:element name="CRITICAL_DAMAGE" type="xs:unsignedByte" />
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="templates">
<xs:complexType>
<xs:sequence>
@ -2124,21 +2118,6 @@
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="debuffModifier" type="xs:decimal" />
<xs:element name="damageModifier" type="xs:decimal" />
<xs:element name="animationSpeed" type="xs:unsignedShort" />

View File

@ -123,6 +123,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("DeleteTopAgro", DeleteTopAgro::new);
EffectHandler.getInstance().registerHandler("DetectHiddenObjects", DetectHiddenObjects::new);
EffectHandler.getInstance().registerHandler("Detection", Detection::new);
EffectHandler.getInstance().registerHandler("DisableSkill", DisableSkill::new);
EffectHandler.getInstance().registerHandler("DisableTargeting", DisableTargeting::new);
EffectHandler.getInstance().registerHandler("Disarm", Disarm::new);
EffectHandler.getInstance().registerHandler("Disarmor", Disarmor::new);

View File

@ -0,0 +1,80 @@
/*
* This file is part of the L2J Mobius project.
*
* 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.effecthandlers;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Ofelin
*/
public class DisableSkill extends AbstractEffect
{
private final Set<Integer> disableSkills;
private Skill knownSKill;
public DisableSkill(StatsSet params)
{
String disable = params.getString("disable");
if ((disable != null) && !disable.isEmpty())
{
disableSkills = new HashSet<>();
for (String slot : disable.split(";"))
{
disableSkills.add(Integer.parseInt(slot));
}
}
else
{
disableSkills = Collections.<Integer> emptySet();
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
for (int disableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(disableSkillId);
if (knownSKill != null)
{
effected.disableSkill(knownSKill, 0);
}
}
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
for (int enableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(enableSkillId);
if (knownSKill != null)
{
effected.enableSkill(knownSKill);
}
}
}
}

View File

@ -1914,13 +1914,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>1</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -218,6 +218,9 @@
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -397,6 +397,7 @@
<icon>icon.skill19307</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>
<targetType>SELF</targetType>
@ -425,7 +426,7 @@
<icon>icon.skill19308</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>BIG_HEAD</abnormalType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalVisualEffect>BIG_HEAD</abnormalVisualEffect>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>

View File

@ -93,6 +93,7 @@ DeleteHateOfMe: Has a chance to delete target's hate towards you.
DeleteTopAgro: Has a chance to delete target's most hated from the list.
DetectHiddenObjects: Finds hidden doors
Detection: Detects hidden creatures.
DisableSkill: Disables effectors known skills specified by skill ID. (l2jmobius)
DisableTargeting: Disables your target's ability to target.
Disarm: Removes the weapon of target player.
Disarmor: Removes the armor of target player.

View File

@ -457,29 +457,7 @@
<xs:element minOccurs="0" name="classIds">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="item" type="xs:string" />
<xs:element minOccurs="0" name="ARCANA_LORD" />
<xs:element minOccurs="0" name="ELEMENTAL_MASTER" />
<xs:element minOccurs="0" name="SPECTRAL_MASTER" />
<xs:element minOccurs="0" name="DUELIST" />
<xs:element minOccurs="0" name="DREADNOUGHT" />
<xs:element minOccurs="0" name="TITAN" />
<xs:element minOccurs="0" name="GRAND_KHAVATARI" />
<xs:element minOccurs="0" name="FORTUNE_SEEKER" />
<xs:element minOccurs="0" name="MAESTRO" />
<xs:element minOccurs="0" name="PHOENIX_KNIGHT" />
<xs:element minOccurs="0" name="HELL_KNIGHT" />
<xs:element minOccurs="0" name="EVA_TEMPLAR" />
<xs:element minOccurs="0" name="SHILLIEN_TEMPLAR" />
<xs:element minOccurs="0" name="ADVENTURER" />
<xs:element minOccurs="0" name="SWORD_MUSE" />
<xs:element minOccurs="0" name="WIND_RIDER" />
<xs:element minOccurs="0" name="SPECTRAL_DANCER" />
<xs:element minOccurs="0" name="GHOST_HUNTER" />
<xs:element minOccurs="0" name="MALE_SOUL_HOUND" />
<xs:element minOccurs="0" name="FEMALE_SOUL_HOUND" />
<xs:element minOccurs="0" name="DOOMBRINGER" />
<xs:element minOccurs="0" name="TRICKSTER" />
<xs:element maxOccurs="unbounded" name="item" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
@ -2055,11 +2033,27 @@
</xs:complexType>
</xs:element>
<xs:element name="allowNormalAttack" type="xs:boolean" />
<xs:element name="disable" type="xs:unsignedShort" />
<xs:element name="saveHp" type="xs:unsignedByte" />
<xs:element name="attackSkillId" type="xs:unsignedShort" />
<xs:element name="summonPoints" type="xs:unsignedByte" />
<xs:element name="abnormalType" type="xs:string" />
<xs:element name="CRITICAL_DAMAGE" type="xs:unsignedByte" />
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="templates">
<xs:complexType>
<xs:sequence>
@ -2115,21 +2109,6 @@
<xs:element name="skills" type="xs:string" />
<xs:element name="isSummonSpawn" type="xs:boolean" />
<xs:element name="randomOffset" type="xs:unsignedByte" />
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="debuffModifier" type="xs:decimal" />
<xs:element name="HATE">
<xs:complexType mixed="true">
@ -2431,7 +2410,6 @@
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="mode" type="xs:string" />
<xs:element minOccurs="0" name="magicType" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="position" type="xs:string" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
@ -2568,7 +2546,6 @@
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="chance" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="skillId" type="xs:unsignedShort" />
<xs:element minOccurs="0" name="skillLevel">
<xs:complexType mixed="true">
@ -2587,7 +2564,6 @@
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="abnormalTime" type="xs:unsignedByte" use="optional" />
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
</xs:complexType>
@ -2606,21 +2582,7 @@
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element minOccurs="0" name="skillId" type="xs:unsignedShort" />
<xs:element minOccurs="0" name="skillLevel">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="skillLevel" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="fullLethal" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="halfLethal" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="amount">
@ -2705,21 +2667,7 @@
<xs:element name="staticChance" type="xs:boolean" />
<xs:element name="magicTypes" type="xs:string" />
<xs:element name="skillId" type="xs:unsignedShort" />
<xs:element name="skillLevel">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="skillLevel" type="xs:unsignedByte" />
<xs:element name="fullLethal" type="xs:unsignedByte" />
<xs:element name="halfLethal" type="xs:unsignedByte" />
<xs:element name="amount">

View File

@ -1414,13 +1414,8 @@
<basicProperty>NONE</basicProperty>
<hitCancelTime>0</hitCancelTime>
<reuseDelay>300000</reuseDelay>
<targetType>TARGET</targetType>
<targetType>SELF</targetType>
<affectScope>SINGLE</affectScope>
<conditions>
<condition name="TargetMyParty">
<includeMe>false</includeMe>
</condition>
</conditions>
<effects>
<effect name="TransferDamageToPlayer">
<amount>
@ -1435,13 +1430,11 @@
</amount>
<mode>PER</mode>
</effect>
</effects>
<endEffects>
<effect name="CallSkill">
<skillId>10022</skillId> <!-- Last Patience -->
<skillLevel>1</skillLevel>
</effect>
</endEffects>
</effects>
</skill>
<skill id="10019" toLevel="5" name="Protection of Faith">
<!-- For $s1, reduces the maximum damage received by party members to approximately $s2 in inverse proportion to your P. Def and increases Speed by $s3. Makes you immune to Hold and Stun. This effect cannot be stacked with the same effect or Nigh Aegis, and a limit applies after its duration is over. Requires a shield to be equipped. -->

View File

@ -1914,13 +1914,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>1</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -218,6 +218,9 @@
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -400,6 +400,7 @@
<icon>icon.skill19307</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>
<targetType>SELF</targetType>
@ -428,7 +429,7 @@
<icon>icon.skill19308</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>BIG_HEAD</abnormalType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalVisualEffect>BIG_HEAD</abnormalVisualEffect>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>

View File

@ -1414,13 +1414,8 @@
<basicProperty>NONE</basicProperty>
<hitCancelTime>0</hitCancelTime>
<reuseDelay>300000</reuseDelay>
<targetType>TARGET</targetType>
<targetType>SELF</targetType>
<affectScope>SINGLE</affectScope>
<conditions>
<condition name="TargetMyParty">
<includeMe>false</includeMe>
</condition>
</conditions>
<effects>
<effect name="TransferDamageToPlayer">
<amount>
@ -1435,13 +1430,11 @@
</amount>
<mode>PER</mode>
</effect>
</effects>
<endEffects>
<effect name="CallSkill">
<skillId>10022</skillId> <!-- Last Patience -->
<skillLevel>1</skillLevel>
</effect>
</endEffects>
</effects>
</skill>
<skill id="10019" toLevel="5" name="Protection of Faith">
<!-- For $s1, reduces the maximum damage received by party members to approximately $s2 in inverse proportion to your P. Def and increases Movement Speed by $s3. Makes you immune to Hold and Stun. This effect cannot be stacked with the same effect or Nigh Aegis, and a limit applies after its duration is over. Requires a shield to be equipped. -->

View File

@ -1914,13 +1914,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>1</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -218,6 +218,9 @@
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -400,6 +400,7 @@
<icon>icon.skill19307</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>
<targetType>SELF</targetType>
@ -428,7 +429,7 @@
<icon>icon.skill19308</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>BIG_HEAD</abnormalType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalVisualEffect>BIG_HEAD</abnormalVisualEffect>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>

View File

@ -1477,13 +1477,8 @@
<basicProperty>NONE</basicProperty>
<hitCancelTime>0</hitCancelTime>
<reuseDelay>300000</reuseDelay>
<targetType>TARGET</targetType>
<targetType>SELF</targetType>
<affectScope>SINGLE</affectScope>
<conditions>
<condition name="TargetMyParty">
<includeMe>false</includeMe>
</condition>
</conditions>
<effects>
<effect name="TransferDamageToPlayer">
<amount>
@ -1498,13 +1493,11 @@
</amount>
<mode>PER</mode>
</effect>
</effects>
<endEffects>
<effect name="CallSkill">
<skillId>10022</skillId> <!-- Last Patience -->
<skillLevel>1</skillLevel>
</effect>
</endEffects>
</effects>
</skill>
<skill id="10019" toLevel="7" name="Protection of Faith">
<!-- For $s1, reduces the maximum damage received by party members to approximately $s2 in inverse proportion to your P. Def. and increases Speed by $s3. Makes you immune to Hold and Stun. This effect cannot be stacked with the same effect or Nigh Aegis, and a limit applies after its duration is over. Requires a shield to be equipped. -->

View File

@ -2057,13 +2057,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>100</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -218,6 +218,9 @@
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -428,6 +428,7 @@
<icon>icon.skill19307</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>
<targetType>SELF</targetType>
@ -456,7 +457,7 @@
<icon>icon.skill19308</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>BIG_HEAD</abnormalType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalVisualEffect>BIG_HEAD</abnormalVisualEffect>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>

View File

@ -1445,7 +1445,7 @@
</effects>
</skill>
<skill id="10018" toLevel="3" name="Noble Sacrifice">
<!-- For $s1, receives $s2 of the damage received by the ally and activates the Last Patience effect during that HP does not decrease below 1. -->
<!-- For 10 sec., receives 30% of the damage received by the ally and activates the Last Patience effect during that HP does not decrease below 1. -->
<icon>icon.skill10020</icon>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>
@ -1477,13 +1477,8 @@
<basicProperty>NONE</basicProperty>
<hitCancelTime>0</hitCancelTime>
<reuseDelay>300000</reuseDelay>
<targetType>TARGET</targetType>
<targetType>SELF</targetType>
<affectScope>SINGLE</affectScope>
<conditions>
<condition name="TargetMyParty">
<includeMe>false</includeMe>
</condition>
</conditions>
<effects>
<effect name="TransferDamageToPlayer">
<amount>
@ -1498,13 +1493,11 @@
</amount>
<mode>PER</mode>
</effect>
</effects>
<endEffects>
<effect name="CallSkill">
<skillId>10022</skillId> <!-- Last Patience -->
<skillLevel>1</skillLevel>
</effect>
</endEffects>
</effects>
</skill>
<skill id="10019" toLevel="7" name="Protection of Faith">
<!-- For $s1, reduces the maximum damage received by party members to approximately $s2 depending on your P. Def. Speed +$s3. Makes you immune to obstruction and confusion. The effect cannot be stacked with the same effect or Nine Aegis. When it is over, the Limit of Sigel effect is applied. Requires a shield. -->

View File

@ -2057,13 +2057,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>100</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -218,6 +218,9 @@
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -428,6 +428,7 @@
<icon>icon.skill19307</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>
<targetType>SELF</targetType>
@ -456,7 +457,7 @@
<icon>icon.skill19308</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>BIG_HEAD</abnormalType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalVisualEffect>BIG_HEAD</abnormalVisualEffect>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>

View File

@ -119,6 +119,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("DeleteTopAgro", DeleteTopAgro::new);
EffectHandler.getInstance().registerHandler("DetectHiddenObjects", DetectHiddenObjects::new);
EffectHandler.getInstance().registerHandler("Detection", Detection::new);
EffectHandler.getInstance().registerHandler("DisableSkill", DisableSkill::new);
EffectHandler.getInstance().registerHandler("DisableTargeting", DisableTargeting::new);
EffectHandler.getInstance().registerHandler("Disarm", Disarm::new);
EffectHandler.getInstance().registerHandler("Disarmor", Disarmor::new);

View File

@ -0,0 +1,80 @@
/*
* This file is part of the L2J Mobius project.
*
* 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.effecthandlers;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Ofelin
*/
public class DisableSkill extends AbstractEffect
{
private final Set<Integer> disableSkills;
private Skill knownSKill;
public DisableSkill(StatsSet params)
{
String disable = params.getString("disable");
if ((disable != null) && !disable.isEmpty())
{
disableSkills = new HashSet<>();
for (String slot : disable.split(";"))
{
disableSkills.add(Integer.parseInt(slot));
}
}
else
{
disableSkills = Collections.<Integer> emptySet();
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
for (int disableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(disableSkillId);
if (knownSKill != null)
{
effected.disableSkill(knownSKill, 0);
}
}
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
for (int enableSkillId : disableSkills)
{
knownSKill = effected.getKnownSkill(enableSkillId);
if (knownSKill != null)
{
effected.enableSkill(knownSKill);
}
}
}
}

View File

@ -1914,13 +1914,14 @@
<magicLvl>93</magicLvl>
<operateType>T</operateType>
<magicCriticalRate>5</magicCriticalRate>
<mpInitialConsume>1</mpInitialConsume>
<mpConsume>200</mpConsume>
<mpInitialConsume>200</mpInitialConsume>
<hitTime>800</hitTime>
<targetType>NONE</targetType>
<effects>
<effect name="FakeDeath">
<power>20</power>
<ticks>5</ticks>
<power>100</power>
<ticks>1</ticks>
</effect>
<effect name="Untargetable" />
</effects>

View File

@ -218,6 +218,9 @@
</amount>
<mode>PER</mode>
</effect>
<effect name="DisableSkill">
<disable>10517</disable>
</effect>
</effects>
</skill>
<skill id="10654" toLevel="1" name="Maximum Mortality">

View File

@ -397,6 +397,7 @@
<icon>icon.skill19307</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>
<targetType>SELF</targetType>
@ -425,7 +426,7 @@
<icon>icon.skill19308</icon>
<effectPoint>669</effectPoint>
<operateType>A2</operateType>
<abnormalType>BIG_HEAD</abnormalType>
<abnormalType>DWARF_BUFF</abnormalType>
<abnormalVisualEffect>BIG_HEAD</abnormalVisualEffect>
<abnormalLvl>1</abnormalLvl>
<abnormalTime>60</abnormalTime>

View File

@ -89,6 +89,7 @@ DeleteHateOfMe: Has a chance to delete target's hate towards you.
DeleteTopAgro: Has a chance to delete target's most hated from the list.
DetectHiddenObjects: Finds hidden doors
Detection: Detects hidden creatures.
DisableSkill: Disables effectors known skills specified by skill ID. (l2jmobius)
DisableTargeting: Disables your target's ability to target.
Disarm: Removes the weapon of target player.
Disarmor: Removes the armor of target player.

View File

@ -2018,11 +2018,27 @@
</xs:complexType>
</xs:element>
<xs:element name="allowNormalAttack" type="xs:boolean" />
<xs:element name="disable" type="xs:unsignedShort" />
<xs:element name="saveHp" type="xs:unsignedByte" />
<xs:element name="attackSkillId" type="xs:unsignedShort" />
<xs:element name="summonPoints" type="xs:unsignedByte" />
<xs:element name="abnormalType" type="xs:string" />
<xs:element name="CRITICAL_DAMAGE" type="xs:unsignedByte" />
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="templates">
<xs:complexType>
<xs:sequence>
@ -2079,21 +2095,6 @@
<xs:element name="skills" type="xs:string" />
<xs:element name="isSummonSpawn" type="xs:boolean" />
<xs:element name="randomOffset" type="xs:unsignedByte" />
<xs:element name="AGGRESSION">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="debuffModifier" type="xs:decimal" />
<xs:element name="HATE">
<xs:complexType mixed="true">
@ -2395,7 +2396,6 @@
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="mode" type="xs:string" />
<xs:element minOccurs="0" name="magicType" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="position" type="xs:string" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
@ -2532,7 +2532,6 @@
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="chance" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="skillId" type="xs:unsignedShort" />
<xs:element minOccurs="0" name="skillLevel">
<xs:complexType mixed="true">
@ -2551,7 +2550,6 @@
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="abnormalTime" type="xs:unsignedByte" use="optional" />
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
</xs:complexType>
@ -2570,21 +2568,7 @@
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element minOccurs="0" name="skillId" type="xs:unsignedShort" />
<xs:element minOccurs="0" name="skillLevel">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="skillLevel" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="fullLethal" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="halfLethal" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="amount">
@ -2669,21 +2653,7 @@
<xs:element name="staticChance" type="xs:boolean" />
<xs:element name="magicTypes" type="xs:string" />
<xs:element name="skillId" type="xs:unsignedShort" />
<xs:element name="skillLevel">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="skillLevel" type="xs:unsignedByte" />
<xs:element name="fullLethal" type="xs:unsignedByte" />
<xs:element name="halfLethal" type="xs:unsignedByte" />
<xs:element name="amount">