Some work on skills.

Contributed by hitnar.
This commit is contained in:
MobiusDev 2016-03-10 08:29:27 +00:00
parent fcd639299b
commit 86701eb971
9 changed files with 134 additions and 13 deletions

View File

@ -109,6 +109,7 @@ final class EffectMasterHandler
HealOverTime.class, HealOverTime.class,
HealPercent.class, HealPercent.class,
Hide.class, Hide.class,
NoTarget.class,
HpByLevel.class, HpByLevel.class,
HpCpHeal.class, HpCpHeal.class,
HpDrain.class, HpDrain.class,

View File

@ -0,0 +1,76 @@
/*
* 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 com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.conditions.Condition;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
/**
* Keep enemies from targeting you.
* @author hitnar
*/
public final class NoTarget extends AbstractEffect
{
public NoTarget(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params)
{
super(attachCond, applyCond, set, params);
}
@Override
public void onExit(BuffInfo info)
{
if (info.getEffected().isPlayer())
{
final L2PcInstance activeChar = info.getEffected().getActingPlayer();
if (!activeChar.inObserverMode())
{
activeChar.setTargetable(true);
}
}
}
@Override
public void onStart(BuffInfo info)
{
if (info.getEffected().isPlayer())
{
final L2PcInstance activeChar = info.getEffected().getActingPlayer();
activeChar.setTargetable(false);
if ((activeChar.getAI().getNextIntention() != null) && (activeChar.getAI().getNextIntention().getCtrlIntention() == CtrlIntention.AI_INTENTION_ATTACK))
{
activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
}
for (L2Character target : activeChar.getKnownList().getKnownCharacters())
{
if ((target != null) && (target.getTarget() == activeChar))
{
target.setTarget(null);
target.abortAttack();
target.abortCast();
target.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
}
}
}
}
}

View File

@ -1618,13 +1618,16 @@
<set name="magicLvl" val="#magicLvl" /> <set name="magicLvl" val="#magicLvl" />
<set name="power" val="#power" /> <set name="power" val="#power" />
<set name="targetType" val="ONE" /> <set name="targetType" val="ONE" />
<set name="operateType" val="ACTIVE_CONTINUOUS" /> <set name="operateType" val="ACTIVE_INSTANT" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
<set name="effectRange" val="1100" /> <set name="effectRange" val="1100" />
<enchant1 name="mpConsume" val="#ench1MpConsume" /> <enchant1 name="mpConsume" val="#ench1MpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1MpInitialConsume" /> <enchant1 name="mpInitialConsume" val="#ench1MpInitialConsume" />
<enchant2 name="power" val="#ench2Power" /> <enchant2 name="power" val="#ench2Power" />
<for> <for>
<effect name="MagicalAttack" /> <effect name="DispelByCategory">
<param slot="buff" rate="100" max="2" />
</effect>
</for> </for>
</skill> </skill>
<skill id="11050" levels="7" name="Hell Binding"> <skill id="11050" levels="7" name="Hell Binding">

View File

@ -362,9 +362,10 @@
<set name="hitTime" val="1200" /> <set name="hitTime" val="1200" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="5000" /> <set name="reuseDelay" val="5000" />
<set name="abnormalTime" val="10" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="isDebuff" val="true" /> <set name="isDebuff" val="true" />
<set name="targetType" val="SELF" /> <set name="targetType" val="ONE" />
<for> <for>
<effect name="Buff"> <effect name="Buff">
<mul stat="mDef" val="1.3" /> <mul stat="mDef" val="1.3" />
@ -385,9 +386,10 @@
<set name="hitTime" val="1490" /> <set name="hitTime" val="1490" />
<set name="coolTime" val="300" /> <set name="coolTime" val="300" />
<set name="reuseDelay" val="5000" /> <set name="reuseDelay" val="5000" />
<set name="abnormalTime" val="10" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="isDebuff" val="true" /> <set name="isDebuff" val="true" />
<set name="targetType" val="SELF" /> <set name="targetType" val="ONE" />
</skill> </skill>
<skill id="11261" levels="9" name="Mark of Plague"> <skill id="11261" levels="9" name="Mark of Plague">
<!-- Source: https://l2wiki.com/Mark_of_Plague_-_Wynn_Arcana_Lord --> <!-- Source: https://l2wiki.com/Mark_of_Plague_-_Wynn_Arcana_Lord -->
@ -401,9 +403,10 @@
<set name="hitTime" val="1500" /> <set name="hitTime" val="1500" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="5000" /> <set name="reuseDelay" val="5000" />
<set name="abnormalTime" val="10" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="isDebuff" val="true" /> <set name="isDebuff" val="true" />
<set name="targetType" val="SELF" /> <set name="targetType" val="ONE" />
</skill> </skill>
<skill id="11262" levels="9" name="Mark of Trick"> <skill id="11262" levels="9" name="Mark of Trick">
<!-- Source: https://l2wiki.com/Mark_of_Trick_-_Wynn_Spectral_Master --> <!-- Source: https://l2wiki.com/Mark_of_Trick_-_Wynn_Spectral_Master -->
@ -417,9 +420,10 @@
<set name="hitTime" val="1500" /> <set name="hitTime" val="1500" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="5000" /> <set name="reuseDelay" val="5000" />
<set name="abnormalTime" val="10" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="isDebuff" val="true" /> <set name="isDebuff" val="true" />
<set name="targetType" val="SELF" /> <set name="targetType" val="ONE" />
</skill> </skill>
<skill id="11263" levels="10" name="Invoke"> <skill id="11263" levels="10" name="Invoke">
<!-- Source: https://l2wiki.com/Invoke_-_Wynn_Elemental_Master --> <!-- Source: https://l2wiki.com/Invoke_-_Wynn_Elemental_Master -->
@ -808,13 +812,33 @@
<table name="#mpConsume"> 78 86 94 97 </table> <table name="#mpConsume"> 78 86 94 97 </table>
<set name="icon" val="icon.skill11274" /> <set name="icon" val="icon.skill11274" />
<set name="magicLvl" val="#magicLvl" /> <set name="magicLvl" val="#magicLvl" />
<set name="abnormalTime" val="60" />
<set name="operateType" val="ACTIVE_CONTINUOUS" /> <set name="operateType" val="ACTIVE_CONTINUOUS" />
<set name="mpConsume" val="#mpConsume" /> <set name="mpConsume" val="#mpConsume" />
<set name="hitTime" val="1500" /> <set name="hitTime" val="1500" />
<set name="coolTime" val="200" /> <set name="coolTime" val="200" />
<set name="reuseDelay" val="300000" /> <set name="reuseDelay" val="300000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
<set name="targetType" val="SELF" /> <set name="targetType" val="SELF" />
<for>
<effect name="DispelByCategory">
<param slot="debuff" rate="100" max="10" />
</effect>
<effect name="BlockDamage">
<param block="HP"/>
</effect>
<effect name="BlockDamage">
<param block="MP"/>
</effect>
<effect name="BlockDebuff" />
<effect name="Buff">
<sub stat="cancelVuln" val="100" />
</effect>
<effect name="Buff">
<add stat="regHp" val="5" /> <!-- Need Verify -->
</effect>
</for>
</skill> </skill>
<skill id="11275" levels="2" name="Mark Flare"> <skill id="11275" levels="2" name="Mark Flare">
<!-- AUTO GENERATED SKILL --> <!-- AUTO GENERATED SKILL -->
@ -999,6 +1023,7 @@
<set name="coolTime" val="#coolTime" /> <set name="coolTime" val="#coolTime" />
<set name="reuseDelay" val="60000" /> <set name="reuseDelay" val="60000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="abnormalTime" val="60" />
<cond msgId="113" addName="1"> <cond msgId="113" addName="1">
<and> <and>
<player hasServitor="true" /> <player hasServitor="true" />
@ -1178,12 +1203,13 @@
<set name="icon" val="icon.skill11297" /> <set name="icon" val="icon.skill11297" />
<set name="magicLvl" val="#magicLvl" /> <set name="magicLvl" val="#magicLvl" />
<set name="operateType" val="ACTIVE_CONTINUOUS" /> <set name="operateType" val="ACTIVE_CONTINUOUS" />
<set name="abnormalTime" val="1800" />
<set name="mpConsume" val="#mpConsume" /> <set name="mpConsume" val="#mpConsume" />
<set name="effectRange" val="900" /> <set name="effectRange" val="900" />
<set name="hitTime" val="3799" /> <set name="hitTime" val="3799" />
<set name="coolTime" val="200" /> <set name="coolTime" val="200" />
<set name="reuseDelay" val="60000" /> <set name="reuseDelay" val="60000" />
<set name="targetType" val="SELF" /> <set name="targetType" val="SERVITOR" />
<for> <for>
<effect name="Buff"> <effect name="Buff">
<mul stat="pAtk" val="1.1" /> <mul stat="pAtk" val="1.1" />

View File

@ -240,14 +240,14 @@
<enchant1 name="ench1mpConsume" val="#ench1mpConsume" /> <enchant1 name="ench1mpConsume" val="#ench1mpConsume" />
<enchant2 name="abnormalTime" val="#ench2AbnormalTimes" /> <enchant2 name="abnormalTime" val="#ench2AbnormalTimes" />
<for> <for>
<effect name="ImmobilePetBuff"> <effect name="Buff">
<add stat="mDef" val="#mDef" /> <add stat="mDef" val="#mDef" />
<add stat="pDef" val="#pDef" /> <add stat="pDef" val="#pDef" />
<sub stat="cancelVuln" val="80" /> <sub stat="cancelVuln" val="80" />
</effect> </effect>
</for> </for>
<enchant3for> <enchant3for>
<effect name="ImmobilePetBuff"> <effect name="Buff">
<add stat="mDef" val="4212" /> <add stat="mDef" val="4212" />
<add stat="pDef" val="4680" /> <add stat="pDef" val="4680" />
<mul stat="runSpd" val="#ench3Spd" /> <mul stat="runSpd" val="#ench3Spd" />
@ -951,6 +951,7 @@
<set name="icon" val="icon.skill11347" /> <set name="icon" val="icon.skill11347" />
<set name="magicLvl" val="#magicLvl" /> <set name="magicLvl" val="#magicLvl" />
<set name="operateType" val="ACTIVE_CONTINUOUS" /> <set name="operateType" val="ACTIVE_CONTINUOUS" />
<set name="abnormalTime" val="1800" />
<set name="mpConsume" val="#mpConsume" /> <set name="mpConsume" val="#mpConsume" />
<set name="effectRange" val="900" /> <set name="effectRange" val="900" />
<set name="hitTime" val="3500" /> <set name="hitTime" val="3500" />
@ -1027,7 +1028,7 @@
<set name="coolTime" val="300" /> <set name="coolTime" val="300" />
<set name="reuseDelay" val="2400" /> <set name="reuseDelay" val="2400" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="targetType" val="SELF" /> <set name="targetType" val="ONE" />
</skill> </skill>
<skill id="11351" levels="5" name="Arcane Link"> <skill id="11351" levels="5" name="Arcane Link">
<!-- AUTO GENERATED SKILL --> <!-- AUTO GENERATED SKILL -->

View File

@ -1613,6 +1613,7 @@
<add stat="pDef" val="4500" /> <add stat="pDef" val="4500" />
<add stat="mDef" val="4500" /> <add stat="mDef" val="4500" />
</effect> </effect>
<effect name="NoTarget" />
</for> </for>
<enchant3for> <enchant3for>
<effect name="Transformation"> <effect name="Transformation">
@ -1621,6 +1622,7 @@
<add stat="pDef" val="4500" /> <add stat="pDef" val="4500" />
<add stat="mDef" val="4500" /> <add stat="mDef" val="4500" />
</effect> </effect>
<effect name="NoTarget" />
</enchant3for> </enchant3for>
</skill> </skill>
<skill id="11543" levels="6" name="Disperse" enchantGroup1="10" enchantGroup2="10" enchantGroup3="10" enchantGroup4="10" enchantGroup5="10"> <skill id="11543" levels="6" name="Disperse" enchantGroup1="10" enchantGroup2="10" enchantGroup3="10" enchantGroup4="10" enchantGroup5="10">

View File

@ -648,6 +648,7 @@
<xs:enumeration value="MpConsumePerLevel" /> <xs:enumeration value="MpConsumePerLevel" />
<xs:enumeration value="Mute" /> <xs:enumeration value="Mute" />
<xs:enumeration value="NoblesseBless" /> <xs:enumeration value="NoblesseBless" />
<xs:enumeration value="NoTarget" />
<xs:enumeration value="OpenChest" /> <xs:enumeration value="OpenChest" />
<xs:enumeration value="OpenCommonRecipeBook" /> <xs:enumeration value="OpenCommonRecipeBook" />
<xs:enumeration value="OpenDoor" /> <xs:enumeration value="OpenDoor" />

View File

@ -77,6 +77,7 @@ public abstract class L2Object extends ListenersContainer implements IIdentifiab
private final AtomicInteger _instanceId = new AtomicInteger(0); private final AtomicInteger _instanceId = new AtomicInteger(0);
private boolean _isVisible; private boolean _isVisible;
private boolean _isInvisible; private boolean _isInvisible;
private boolean _isTargetable = true;
private ObjectKnownList _knownList; private ObjectKnownList _knownList;
public L2Object(int objectId) public L2Object(int objectId)
@ -473,7 +474,16 @@ public abstract class L2Object extends ListenersContainer implements IIdentifiab
*/ */
public boolean isTargetable() public boolean isTargetable()
{ {
return true; return _isTargetable;
}
/**
* Set value of Targetable (isTargetable() function)
* @param value Boolean
*/
public void setTargetable(boolean value)
{
_isTargetable = value;
} }
/** /**

View File

@ -694,9 +694,10 @@ public class L2DoorInstance extends L2Character
} }
} }
public void setTargetable(boolean b) @Override
public void setTargetable(boolean value)
{ {
_isTargetable = b; _isTargetable = value;
broadcastStatusUpdate(); broadcastStatusUpdate();
} }