<skill id="461" levels="3" name="Break Duress">
<!--
Description:
Lvl 1 - Use your spirit to escape from an immobile state. Level 2 Focused Force charge required.
Lvl 2 - Use your spirit to escape from a slow or immobile state. Level 3 Focused Force charge required.
-->
<table name="#num_charges">2 3</table>
<table name="#magicLevel">60 66</table>
<table name="#dispel_sd_max_abnormal_lvl">0 3</table>
<table name="#mp_consume">29 33 37</table>
<table name="#reuseDelay">600000 420000 300000</table>
<set name="icon" value="icon.skill0461"/>
<set name="reuseDelay" value="#reuseDelay"/>
<set name="hitTime" value="3000"/>
<set name="mp_consume" value="#mp_consume"/>
<set name="ride_state" value="NONE"/>
<set name="magicLevel" value="#magicLevel"/>
<set name="hitCancelTime" value="500"/>
<set name="target" value="TARGET_SELF"/>
<set name="operate_type" value="A2"/>
<set name="num_charges" value="#num_charges"/>
<set name="skillType" value="BUFF"/>
<for>
<effect name="i_dispel_by_slot">
<def name="abnormal_type" value="speed_down"/>
<def name="max_abnormal_level" value="#dispel_sd_max_abnormal_lvl"/>
</effect>
<effect name="i_dispel_by_slot">
<def name="abnormal_type" value="root_magically"/>
<def name="max_abnormal_level" value="3"/>
</effect>
<effect name="i_dispel_by_slot">
<def name="abnormal_type" value="root_physically"/>
<def name="max_abnormal_level" value="3"/>
</effect>
</for>
</skill>
package l2s.gameserver.skills.skillclasses;
import java.util.List;
import l2s.gameserver.model.Creature;
import l2s.gameserver.model.Player;
import l2s.gameserver.model.Skill;
import l2s.gameserver.network.l2.components.SystemMsg;
import l2s.gameserver.network.l2.s2c.MagicSkillUse;
import l2s.gameserver.stats.Formulas;
import l2s.gameserver.stats.Formulas.AttackInfo;
import l2s.gameserver.templates.StatsSet;
public class Charge extends Skill
{
public static final int MAX_CHARGE = 10;
private int _charges;
private boolean _fullCharge;
public Charge(StatsSet set)
{
super(set);
_charges = set.getInteger("charges", getLevel());
_fullCharge = set.getBool("fullCharge", false);
}
@Override
public boolean checkCondition(final Creature activeChar, final Creature target, boolean forceUse, boolean dontMove, boolean first)
{
if(!super.checkCondition(activeChar, target, forceUse, dontMove, first))
return false;
if(!activeChar.isPlayer())
return false;
Player player = (Player) activeChar;
int charges = _charges == -1 ? player.getMaxIncreasedForce() : _charges;
//Камушки можно юзать даже е�ли зар�д > 7, о�тальное только е�ли зар�д < уровень �кила
if(getPower() <= 0 && getId() != 2165 && player.getIncreasedForce() >= charges)
{
activeChar.sendPacket(SystemMsg.YOUR_FORCE_HAS_REACHED_MAXIMUM_CAPACITY_);
return false;
}
else if(getId() == 2165)
player.sendPacket(new MagicSkillUse(player, player, 2165, 1, 0, 0));
return true;
}
@Override
public void onEndCast(Creature activeChar, List<Creature> targets)
{
super.onEndCast(activeChar, targets);
if(activeChar.isPlayer())
chargePlayer((Player) activeChar, getId());
}
@Override
protected void useSkill(Creature activeChar, Creature target, boolean reflected)
{
if(!activeChar.isPlayer())
return;
if(target.isDead())
return;
if(target == activeChar)
return;
if(getPower() <= 0)
return;
final Creature realTarget = reflected ? activeChar : target;
final AttackInfo info = Formulas.calcPhysDam(activeChar, realTarget, this, false, false, isSSPossible(), false);
if(info == null)
return;
realTarget.reduceCurrentHp(info.damage, activeChar, this, true, true, false, true, false, false, true, true, info.crit || info.blow, false, false);
if(!info.miss || info.damage >= 1)
{
double lethalDmg = Formulas.calcLethalDamage(activeChar, realTarget, this);
if(lethalDmg > 0)
realTarget.reduceCurrentHp(lethalDmg, activeChar, this, true, true, false, false, false, false, false);
else if(!reflected)
realTarget.doCounterAttack(this, activeChar, false);
}
}
public void chargePlayer(Player player, Integer skillId)
{
int charges = _charges == -1 ? player.getMaxIncreasedForce() : _charges;
if(player.getIncreasedForce() >= charges)
{
player.sendPacket(SystemMsg.YOUR_FORCE_HAS_REACHED_MAXIMUM_CAPACITY_);
return;
}
if(_fullCharge)
player.setIncreasedForce(charges);
else
player.setIncreasedForce(player.getIncreasedForce() + 1);
}
<cond>
<player chargesMin="3" />
</cond>
package l2s.gameserver.stats.conditions;
import l2s.gameserver.stats.Env;
public class ConditionPlayerChargesMin extends Condition
{
private final int _minCharges;
public ConditionPlayerChargesMin(int minCharges)
{
_minCharges = minCharges;
}
@Override
protected boolean testImpl(Env env)
{
if(env.character == null || !env.character.isPlayer())
return false;
return env.character.getIncreasedForce() >= _minCharges;
}
}
<!ELEMENT player (#PCDATA)>
<!ATTLIST player
residence CDATA #IMPLIED
olympiad CDATA #IMPLIED
race CDATA #IMPLIED
instance_zone CDATA #IMPLIED
is_clan_leader CDATA #IMPLIED
is_hero CDATA #IMPLIED
sex CDATA #IMPLIED
classId CDATA #IMPLIED
minLevel CDATA #IMPLIED
max_level CDATA #IMPLIED
avail_max_sp CDATA #IMPLIED
quest_state CDATA #IMPLIED
min_pledge_rank CDATA #IMPLIED
class_type CDATA #IMPLIED
summon_siege_golem CDATA #IMPLIED
running CDATA #IMPLIED
percentHP CDATA #IMPLIED
resting CDATA #IMPLIED
max_level CDATA #IMPLIED
maxPK CDATA #IMPLIED
percentMP CDATA #IMPLIED
moving CDATA #IMPLIED
standing CDATA #IMPLIED
damage CDATA #IMPLIED
percentCP CDATA #IMPLIED
direction CDATA #IMPLIED
riding CDATA #IMPLIED
flying CDATA #IMPLIED
castle_type CDATA #IMPLIED
min_clan_level CDATA #IMPLIED
has_abnormal_type CDATA #IMPLIED
has_summon_id CDATA #IMPLIED
can_transform CDATA #IMPLIED
can_untransform CDATA #IMPLIED
agathion CDATA #IMPLIED
hasBuffId CDATA #IMPLIED
flyingTransform CDATA #IMPLIED
isFlagged CDATA #IMPLIED
can_learn_skill CDATA #IMPLIED
is_chaotic CDATA #IMPLIED>
You can contact me, i fix it.this condition aren't in my skill.dtd how can i add it? because if i add manual i get error.
Add in sourceSomeone can helps me to add that condition in skill.dtd please?
hmm skill.dtd in source = skills.java? player.java? my java knowledge is begginerAdd in source
-added the condition to skill.dtd.<set name="charge_skill_id" value="50"/>
<set name="useSS" value="true"/>
<cond>
<player chargesMin="1" />
</cond>
<cond msgId="113">
is_chaotic CDATA #IMPLIED
chargesMin CDATA #IMPLIED>
You should add this else-if block in parsePlayerCondition method in gameserver/data/xml/parser/StatParser.java
Код:else if("chargesMin".equalsIgnoreCase(name)) { int val = parseNumber(value).intValue(); cond = joinAnd(cond, new ConditionPlayerChargesMin(val)); }
You're welcome! ?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?