/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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.itemhandlers;
import java.util.logging.Level;
import com.l2jserver.gameserver.enums.ShotType;
import com.l2jserver.gameserver.handler.IItemHandler;
import com.l2jserver.gameserver.model.actor.L2Playable;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.SkillHolder;
import com.l2jserver.gameserver.model.items.L2Weapon;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.items.type.ActionType;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jserver.gameserver.util.Broadcast;
import com.l2jserver.util.Rnd;
public class SoulShots implements IItemHandler
{
@Override
public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
{
if (!playable.isPlayer())
{
playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
return false;
}
final L2PcInstance activeChar = playable.getActingPlayer();
final L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
final L2Weapon weaponItem = activeChar.getActiveWeaponItem();
final SkillHolder[] skills = item.getItem().getSkills();
int itemId = item.getId();
if (skills == null)
{
_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
return false;
}
// Check if Soul shot can be used
if ((weaponInst == null) || (weaponItem.getSoulShotCount() == 0))
{
if (!activeChar.getAutoSoulShot().contains(itemId))
{
activeChar.sendPacket(SystemMessageId.CANNOT_USE_SOULSHOTS);
}
return false;
}
boolean gradeCheck = item.isEtcItem() && (item.getEtcItem().getDefaultAction() == ActionType.SOULSHOT) && (weaponInst.getItem().getItemGradeSPlus() == item.getItem().getItemGradeSPlus());
if (!gradeCheck)
{
if (!activeChar.getAutoSoulShot().contains(itemId))
{
activeChar.sendPacket(SystemMessageId.SOULSHOTS_GRADE_MISMATCH);
}
return false;
}
activeChar.soulShotLock.lock();
try
{
// Check if Soul shot is already active
if (activeChar.isChargedShot(ShotType.SOULSHOTS))
{
return false;
}
// Consume Soul shots if player has enough of them
int SSCount = weaponItem.getSoulShotCount();
if ((weaponItem.getReducedSoulShot() > 0) && (Rnd.get(100) < weaponItem.getReducedSoulShotChance()))
{
SSCount = weaponItem.getReducedSoulShot();
}
if (!activeChar.destroyItemWithoutTrace("Consume", item.getObjectId(), SSCount, null, false))
{
if (!activeChar.disableAutoShot(itemId))
{
activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_SOULSHOTS);
}
return false;
}
// Charge soul shot
weaponInst.setChargedShot(ShotType.SOULSHOTS, true);
}
finally
{
activeChar.soulShotLock.unlock();
}
// Send message to client
activeChar.sendPacket(SystemMessageId.ENABLED_SOULSHOT);
Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 600);
return true;
}
}
I've been tracking the GameServer console to where it tells me "AutoSoulShot: <1467>" (S Grade soulshots from retail).
It tells me absolutely nothing on my custom ones, but it shows me that there is no ItemHandler registered for Wooden Arrows (ID 17) when I click on them.
I've seen methods to make them work on click (like the autopots thing I have found here on the forum) but I want to solve it to be activated by right-click.
Get the maximum opportunities, income, and profit with our verification.
We help you pass verification on the services and applications you need, opening access to full functionality and scaling.
Fast. Reliable. Secure.
Minimal risks — predictable results.
Bonus for new clients:
Pay for the first verification and get a 10% discount on the next one.
Learn more — Go to
Get the maximum opportunities, income, and profit with our verification.
We help you pass verification on the services and applications you need, opening access to full functionality and scaling.
Fast. Reliable. Secure.
Minimal risks — predictable results.
Bonus for new clients:
Pay for the first verification and get a 10% discount on the next one.
Learn more — Go to
Virtual numbers for full control and flexibility.
We offer long-term number rental (days, months) and one-time SMS receiving — all in one service.
Long-term rental is suitable for stable access to accounts, repeated verifications, and number retention.
One-time numbers are for quick registrations and single-use operations.
Reliable SMS delivery, predictable results, and convenience that even many large SMS services do not offer.
Go to the SMS service
Telegram gifts are once again showing growth.
This is associated with a possible pause in the gift release pipeline by Pavel Durov, as well as the approaching New Year, when demand traditionally increases.
Against this backdrop, Telegram Stars, the platform’s internal currency, are once again coming to the forefront. With their help, users send gifts, subscribe to Telegram Premium, and use paid features within the Telegram ecosystem.
Buy Telegram Stars with maximum benefit in our bot
Telegram gifts are once again showing growth.
This is associated with a possible pause in the gift release pipeline by Pavel Durov, as well as the approaching New Year, when demand traditionally increases.
Against this backdrop, Telegram Stars, the platform’s internal currency, are once again coming to the forefront. With their help, users send gifts, subscribe to Telegram Premium, and use paid features within the Telegram ecosystem.
Buy Telegram Stars with maximum benefit in our bot
Question
break
Hello there!
I'm trying to add another pair of soulshots (besides the retail ones no to S grade).
They seem to be registered as soulshots and they do work, but they do not allow getting toggled (for some reason)
I copied the original soulshot lines from etcitemgrp.dat and the xml of it but it still doesnt let me toggle it.
After hours of searching trough the core and the scripts folder I've decided to ask you for help.
Here's my XML:
and here is my SoulShots.java file:
I've been tracking the GameServer console to where it tells me "AutoSoulShot: <1467>" (S Grade soulshots from retail).
It tells me absolutely nothing on my custom ones, but it shows me that there is no ItemHandler registered for Wooden Arrows (ID 17) when I click on them.
I've seen methods to make them work on click (like the autopots thing I have found here on the forum) but I want to solve it to be activated by right-click.
Best regards,
break
1 answer to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now