Retail Servitor Share implementation.

Contributed by Sahar.
This commit is contained in:
MobiusDevelopment
2020-09-18 21:27:53 +00:00
parent c8507e2052
commit 9d1ea96db9
10 changed files with 241 additions and 81 deletions

View File

@@ -16,14 +16,16 @@
*/
package handlers.effecthandlers;
import org.l2jmobius.commons.concurrent.ThreadPool;
import java.util.HashMap;
import java.util.Map;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.skills.BuffInfo;
import org.l2jmobius.gameserver.model.stats.Stat;
/**
* Servitor Share effect implementation.<br>
@@ -33,27 +35,16 @@ import org.l2jmobius.gameserver.model.skills.BuffInfo;
*/
public class ServitorShare extends AbstractEffect
{
private static final class ScheduledEffectExitTask implements Runnable
{
private final Creature _effected;
private final int _skillId;
public ScheduledEffectExitTask(Creature effected, int skillId)
{
_effected = effected;
_skillId = skillId;
}
@Override
public void run()
{
_effected.stopSkillEffects(false, _skillId);
}
}
private final Map<Stat, Double> _stats = new HashMap<>(9);
public ServitorShare(Condition attachCond, Condition applyCond, StatSet set, StatSet params)
{
super(attachCond, applyCond, set, params);
for (String key : params.getSet().keySet())
{
_stats.put(Stat.valueOfXml(key), params.getDouble(key, 1.));
}
}
@Override
@@ -68,13 +59,34 @@ public class ServitorShare extends AbstractEffect
return EffectType.BUFF;
}
@Override
public void onStart(BuffInfo info)
{
super.onStart(info);
info.getEffected().getActingPlayer().setServitorShare(_stats);
if (info.getEffected().getActingPlayer().getSummon() != null)
{
info.getEffected().getActingPlayer().getSummon().broadcastInfo();
info.getEffected().getActingPlayer().getSummon().getStatus().startHpMpRegeneration();
}
}
@Override
public void onExit(BuffInfo info)
{
final Creature effected = info.getEffected().isPlayer() ? info.getEffected().getSummon() : info.getEffected().getActingPlayer();
if (effected != null)
info.getEffected().getActingPlayer().setServitorShare(null);
if (info.getEffected().getSummon() != null)
{
ThreadPool.schedule(new ScheduledEffectExitTask(effected, info.getSkill().getId()), 100);
if (info.getEffected().getSummon().getCurrentHp() > info.getEffected().getSummon().getMaxHp())
{
info.getEffected().getSummon().setCurrentHp(info.getEffected().getSummon().getMaxHp());
}
if (info.getEffected().getSummon().getCurrentMp() > info.getEffected().getSummon().getMaxMp())
{
info.getEffected().getSummon().setCurrentMp(info.getEffected().getSummon().getMaxMp());
}
info.getEffected().getSummon().broadcastInfo();
}
}
}

View File

@@ -1721,35 +1721,31 @@
</skill>
<skill id="1557" levels="1" name="Servitor Share">
<!-- Extends the summoner's abilities to the servitor. Using the summoner's abilities as the basis, extends to the servitor P. Atk./P. Def. by 50%, M. Atk./M. Def. by 25%, Max HP/MP by 10%, Critical Rate by 20%, Atk. Spd. by 10%, and Casting Spd. by 3%. -->
<set name="abnormalLevel" val="1" />
<set name="abnormalTime" val="1200" />
<set name="castRange" val="400" />
<set name="abnormalType" val="ABILITY_CHANGE" />
<set name="effectPoint" val="669" />
<set name="effectRange" val="900" />
<set name="hitTime" val="1000" />
<set name="icon" val="icon.skill1557" />
<set name="isMagic" val="1" /> <!-- Magic Skill -->
<set name="magicLevel" val="83" />
<set name="mpConsume" val="35" />
<set name="operateType" val="A2" />
<set name="reuseDelay" val="60000" />
<set name="targetType" val="SERVITOR" />
<set name="targetType" val="SELF" />
<set name="canBeDispeled" val="false" />
<for>
<!-- Note: 0.5 means 50% of owner's patk! -->
<effect name="ServitorShare">
<share stat="pAtk" val="0.5" />
<share stat="pDef" val="0.5" />
<share stat="mAtk" val="0.25" />
<share stat="mDef" val="0.25" />
<share stat="maxHp" val="0.1" />
<share stat="maxMp" val="0.1" />
<share stat="critRate" val="0.2" />
<share stat="pAtkSpd" val="0.1" />
<share stat="mAtkSpd" val="0.03" />
<param pAtk="1.5" />
<param mAtk="1.25" />
<param pDef="1.5" />
<param mDef="1.25" />
<param maxHp="1.1" />
<param maxMp="1.1" />
<param pAtkSpd="1.1" />
<param mAtkSpd="1.03" />
<param critRate="1.2" />
</effect>
</for>
<selfEffects>
<effect name="ServitorShare" /> <!-- This effect is used to cancel pet's effect when player's have been canceled. -->
</selfEffects>
</skill>
<skill id="1558" levels="24" name="Dimension Spiral">
<!-- Creates a tear in the dimension to inflict damage on the enemy with 57 Power added to M. Atk. Over-hit is possible. -->