Welcome to RUSaCis - эмулятор Interlude

Присоединяйтесь к нам прямо сейчас, чтобы получить доступ ко всем нашим возможностям. После регистрации и входа в систему вы сможете создавать темы, публиковать ответы в существующих темах, давать репутацию пользователям - так же приобрести исходный код. Это также быстро, так чего же вы ждете?

Forgotten Scroll - ItemHandler

Atrein

Вассал
INTERLUDE
INTERFACE
Регистрация
16 Янв 2022
Сообщения
34
Реакции
22
Баллы
8
RaCoin
5
package net.sf.l2j.gameserver.handler.itemhandlers;

import java.util.logging.Logger;

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.skills.L2Skill;
import net.sf.l2j.gameserver.network.serverpackets.SkillList;
import net.sf.l2j.gameserver.data.SkillTable;
import net.sf.l2j.gameserver.model.holder.IntIntHolder;
import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;

/**

* ForgottenScroll by Atrein
*/

public class ForgottenScroll implements IItemHandler {
private static final Logger _log = Logger.getLogger(ForgottenScroll.class.getName());

@Override
public void useItem(Playable playable, ItemInstance item, boolean forceUse) {
if (!(playable instanceof Player))
return;

Player player = (Player) playable;

IntIntHolder[] skills = item.getEtcItem().getEtcSkills();
if (skills == null || skills.length == 0) {
player.sendMessage("This item does not contain any skills.");
return;
}

boolean learned = false;

for (IntIntHolder holder : skills) {
int skillId = holder.getId();
int skillLevel = holder.getValue();

int knownLevel = player.getSkillLevel(skillId);
if (knownLevel >= skillLevel) {
player.sendMessage("You already know this skill or a higher level.");
continue;
}

L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
if (skill == null) {
player.sendMessage("This skill is not available.");
continue;
}

player.addSkill(skill, true);
player.sendMessage("You have learned the skill " + skill.getName() + " Lv." + skill.getLevel() + ".");

_log.info("[ForgottenScroll] Player " + player.getName() +
" learned skill: " + skill.getName() + " Lv." + skill.getLevel() +
" using item ID: " + item.getItemId());

learned = true;
}

if (learned) {
if (!player.destroyItem(item, 1, false)) {
player.sendMessage("Item could not be consumed.");
return;
}

player.broadcastPacket(new MagicSkillUse(player, player, 1323, 1, 1000, 0));
player.sendPacket(new SkillList(player));
} else {
player.sendMessage("You did not learn any new skills.");
}
}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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.ForgottenScroll;
+registerHandler(new ForgottenScroll());


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Файл .xml в папке items:

<item id="9300" type="EtcItem" name="Forgotten Scroll: Might lvl 3">
<set name="icon" val="icon.skill1068" />
<set name="default_action" val="skill" />
<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="false" />
<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="ForgottenScroll" />
<set name="skills" val="1068-3" />
</item>
 
Последнее редактирование:
Сверху Снизу