package net.sf.l2j.gameserver.handler.itemhandlers;
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.actor.Playable;
import net.sf.l2j.gameserver.model.actor.Player;
import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
import net.sf.l2j.gameserver.model.item.kind.EtcItem;
import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
/**
* LevelUpScroll by Atrein
*/
public class LevelUpScroll implements IItemHandler {
@Override
public void useItem(Playable playable, ItemInstance item, boolean forceUse) {
if (!(playable instanceof Player))
return;
Player player = (Player) playable;
EtcItem etcItem = item.getEtcItem();
int targetLevel = etcItem.getTargetLevel();
if (targetLevel == -1) {
player.sendMessage("This scroll has no level assigned.");
return;
}
if (player.getLevel() >= targetLevel) {
player.sendMessage("Your level is already " + targetLevel + " or higher.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
long currentExp = player.getExp();
long neededExp = player.getExpToLevel(targetLevel);
long toAdd = neededExp - currentExp;
if (toAdd > 0)
player.addExpAndSp(toAdd, 0);
player.destroyItem(item, 1, true);
player.sendMessage("You have been leveled up to " + targetLevel + ".");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package net.sf.l2j.gameserver.model.item.kind;
import net.sf.l2j.commons.data.StatSet;
import net.sf.l2j.gameserver.enums.items.EtcItemType;
import net.sf.l2j.gameserver.model.itemcontainer.PcInventory;
import net.sf.l2j.gameserver.model.holder.IntIntHolder;
/**
* This class is dedicated to the management of EtcItem.
* Modified by Atrein
*/
public final class EtcItem extends Item {
private final String _handler;
private final int _sharedReuseGroup;
private EtcItemType _type;
private final int _reuseDelay;
private final IntIntHolder[] _skills;
private final int _level;
private final int _classId;
public EtcItem(StatSet set) {
super(set);
_type = set.getEnum("etcitem_type", EtcItemType.class, EtcItemType.NONE);
switch (getDefaultAction()) {
case soulshot:
case summon_soulshot:
case summon_spiritshot:
case spiritshot:
_type = EtcItemType.SHOT;
break;
}
_type1 = Item.TYPE1_ITEM_QUESTITEM_ADENA;
_type2 = Item.TYPE2_OTHER;
if (isQuestItem())
_type2 = Item.TYPE2_QUEST;
else if (getItemId() == PcInventory.ADENA_ID || getItemId() == PcInventory.ANCIENT_ADENA_ID)
_type2 = Item.TYPE2_MONEY;
_handler = set.getString("handler", null);
_sharedReuseGroup = set.getInteger("shared_reuse_group", -1);
_reuseDelay = set.getInteger("reuse_delay", 0);
_skills = set.getIntIntHolderArray("skills", null);
_level = set.getInteger("level", -1);
_classId = set.getInteger("class_id", -1);
}
@Override
public EtcItemType getItemType() {
return _type;
}
@Override
public int getItemMask() {
return getItemType().mask();
}
public String getHandlerName() {
return _handler;
}
public int getSharedReuseGroup() {
return _sharedReuseGroup;
}
public int getReuseDelay() {
return _reuseDelay;
}
public IntIntHolder[] getEtcSkills() {
return _skills;
}
public int getTargetLevel()
{
return _level;
}
public int getTargetClassId()
{
return _classId;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ItemHandler.java :
+import net.sf.l2j.gameserver.handler.itemhandlers.LevelUpScroll;
+registerHandler(new LevelUpScroll());
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Файл .xml в папке Items:
<item id="9305" type="EtcItem" name="Scroll of Level 20">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="20" />
</item>
<item id="9306" type="EtcItem" name="Scroll of Level 40">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="40" />
</item>
<item id="9307" type="EtcItem" name="Scroll of Level 52">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="52" />
</item>
<item id="9308" type="EtcItem" name="Scroll of Level 61">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="61" />
</item>
<item id="9309" type="EtcItem" name="Scroll of Level 76">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="76" />
</item>
<item id="9310" type="EtcItem" name="Scroll of Level 80">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="80" />
</item>
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.actor.Playable;
import net.sf.l2j.gameserver.model.actor.Player;
import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
import net.sf.l2j.gameserver.model.item.kind.EtcItem;
import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
/**
* LevelUpScroll by Atrein
*/
public class LevelUpScroll implements IItemHandler {
@Override
public void useItem(Playable playable, ItemInstance item, boolean forceUse) {
if (!(playable instanceof Player))
return;
Player player = (Player) playable;
EtcItem etcItem = item.getEtcItem();
int targetLevel = etcItem.getTargetLevel();
if (targetLevel == -1) {
player.sendMessage("This scroll has no level assigned.");
return;
}
if (player.getLevel() >= targetLevel) {
player.sendMessage("Your level is already " + targetLevel + " or higher.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
long currentExp = player.getExp();
long neededExp = player.getExpToLevel(targetLevel);
long toAdd = neededExp - currentExp;
if (toAdd > 0)
player.addExpAndSp(toAdd, 0);
player.destroyItem(item, 1, true);
player.sendMessage("You have been leveled up to " + targetLevel + ".");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package net.sf.l2j.gameserver.model.item.kind;
import net.sf.l2j.commons.data.StatSet;
import net.sf.l2j.gameserver.enums.items.EtcItemType;
import net.sf.l2j.gameserver.model.itemcontainer.PcInventory;
import net.sf.l2j.gameserver.model.holder.IntIntHolder;
/**
* This class is dedicated to the management of EtcItem.
* Modified by Atrein
*/
public final class EtcItem extends Item {
private final String _handler;
private final int _sharedReuseGroup;
private EtcItemType _type;
private final int _reuseDelay;
private final IntIntHolder[] _skills;
private final int _level;
private final int _classId;
public EtcItem(StatSet set) {
super(set);
_type = set.getEnum("etcitem_type", EtcItemType.class, EtcItemType.NONE);
switch (getDefaultAction()) {
case soulshot:
case summon_soulshot:
case summon_spiritshot:
case spiritshot:
_type = EtcItemType.SHOT;
break;
}
_type1 = Item.TYPE1_ITEM_QUESTITEM_ADENA;
_type2 = Item.TYPE2_OTHER;
if (isQuestItem())
_type2 = Item.TYPE2_QUEST;
else if (getItemId() == PcInventory.ADENA_ID || getItemId() == PcInventory.ANCIENT_ADENA_ID)
_type2 = Item.TYPE2_MONEY;
_handler = set.getString("handler", null);
_sharedReuseGroup = set.getInteger("shared_reuse_group", -1);
_reuseDelay = set.getInteger("reuse_delay", 0);
_skills = set.getIntIntHolderArray("skills", null);
_level = set.getInteger("level", -1);
_classId = set.getInteger("class_id", -1);
}
@Override
public EtcItemType getItemType() {
return _type;
}
@Override
public int getItemMask() {
return getItemType().mask();
}
public String getHandlerName() {
return _handler;
}
public int getSharedReuseGroup() {
return _sharedReuseGroup;
}
public int getReuseDelay() {
return _reuseDelay;
}
public IntIntHolder[] getEtcSkills() {
return _skills;
}
public int getTargetLevel()
{
return _level;
}
public int getTargetClassId()
{
return _classId;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ItemHandler.java :
+import net.sf.l2j.gameserver.handler.itemhandlers.LevelUpScroll;
+registerHandler(new LevelUpScroll());
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Файл .xml в папке Items:
<item id="9305" type="EtcItem" name="Scroll of Level 20">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="20" />
</item>
<item id="9306" type="EtcItem" name="Scroll of Level 40">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="40" />
</item>
<item id="9307" type="EtcItem" name="Scroll of Level 52">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="52" />
</item>
<item id="9308" type="EtcItem" name="Scroll of Level 61">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="61" />
</item>
<item id="9309" type="EtcItem" name="Scroll of Level 76">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="76" />
</item>
<item id="9310" type="EtcItem" name="Scroll of Level 80">
<set name="icon" val="icon.etc_paper_black_i00" />
<set name="default_action" val="skill_reduce" />
<set name="etcitem_type" val="SCROLL" />
<set name="material" val="PAPER" />
<set name="weight" val="30" />
<set name="price" val="480000" />
<set name="is_stackable" val="true" />
<set name="is_sellable" val="true"/>
<set name="is_dropable" val="true"/>
<set name="is_destroyable" val="true"/>
<set name="is_depositable" val="true" />
<set name="is_oly_restricted" val="true" />
<set name="handler" val="LevelUpScroll" />
<set name="level" val="80" />
</item>