/*
* This program 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. This program 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 silentium.scripts.handlers.item;
import silentium.gameserver.handler.IItemHandler;
import silentium.gameserver.instancemanager.CastleManager;
import silentium.gameserver.model.L2ItemInstance;
import silentium.gameserver.model.actor.L2Character;
import silentium.gameserver.model.actor.L2Playable;
import silentium.gameserver.model.actor.instance.L2PcInstance;
import silentium.gameserver.model.actor.instance.L2PetInstance;
import silentium.gameserver.model.entity.Castle;
import silentium.gameserver.model.entity.TvTEvent;
import silentium.gameserver.network.SystemMessageId;
import silentium.gameserver.network.serverpackets.ActionFailed;
import silentium.gameserver.network.serverpackets.SystemMessage;
import silentium.gameserver.tables.SkillTable;
public class ScrollOfResurrection implements IItemHandler {
@Override
public void useItem(final L2Playable playable, final L2ItemInstance item, final boolean forceUse) {
if (!(playable instanceof L2PcInstance))
return;
if (!TvTEvent.onScrollUse(playable.getObjectId())) {
playable.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
final L2PcInstance activeChar = (L2PcInstance) playable;
if (activeChar.isSitting()) {
activeChar.sendPacket(SystemMessageId.CANT_MOVE_SITTING);
return;
}
if (activeChar.isMovementDisabled())
return;
final L2Character target = (L2Character) activeChar.getTarget();
if (target != null && target.isDead()) {
final int itemId = item.getItemId();
boolean allIsOk = false;
if (target instanceof L2PcInstance) {
final L2PcInstance targetPlayer = (L2PcInstance) target;
// Check if target isn't in a active siege zone.
final Castle castle = CastleManager.getInstance().getCastle(targetPlayer.getX(), targetPlayer.getY(), targetPlayer.getZ());
if (castle != null && castle.getSiege().getIsInProgress()) {
activeChar.sendPacket(SystemMessageId.CANNOT_BE_RESURRECTED_DURING_SIEGE);
return;
}
// Check if the target is in a festival.
if (targetPlayer.isFestivalParticipant()) {
activeChar.sendMessage("You may not resurrect participants in a festival.");
return;
}
if (targetPlayer.isReviveRequested()) {
if (targetPlayer.isRevivingPet())
activeChar.sendPacket(SystemMessageId.MASTER_CANNOT_RES); // While a pet is attempting to resurrect, it
// cannot help in resurrecting its master.
else
activeChar.sendPacket(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED); // Resurrection is already been
// proposed.
return;
} else if (itemId == 6387) // Pet scrolls to ress a player.
{
activeChar.sendMessage("You do not have the correct scroll");
return;
}
allIsOk = true;
} else if (target instanceof L2PetInstance) {
final L2PetInstance targetPet = (L2PetInstance) target;
// check target is not in a active siege zone
final Castle castle = CastleManager.getInstance().getCastle(targetPet.getOwner().getX(), targetPet.getOwner().getY(), targetPet.getOwner().getZ());
if (castle != null && castle.getSiege().getIsInProgress()) {
activeChar.sendPacket(SystemMessageId.CANNOT_BE_RESURRECTED_DURING_SIEGE);
return;
}
if (targetPet.getOwner() != activeChar) {
if (targetPet.getOwner().isReviveRequested()) {
if (targetPet.getOwner().isRevivingPet())
activeChar.sendPacket(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED); // Resurrection is already been
// proposed.
else
activeChar.sendPacket(SystemMessageId.CANNOT_RES_PET2); // A pet cannot be resurrected while it's
// owner is in the process of resurrecting.
return;
}
}
allIsOk = true;
}
if (allIsOk) {
if (!activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false))
return;
int skillId = 0;
switch (itemId) {
case 737:
skillId = 2014;
break; // Scroll of Resurrection
case 3936:
skillId = 2049;
break; // Blessed Scroll of Resurrection
case 3959:
skillId = 2062;
break; // L2Day - Blessed Scroll of Resurrection
case 6387:
skillId = 2179;
break; // Blessed Scroll of Resurrection: For Pets
case 9157:
skillId = 2321;
break; // Blessed Scroll of Resurrection Event
}
if (skillId != 0) {
activeChar.useMagic(SkillTable.getInstance().getInfo(skillId, 1), true, true);
activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED).addItemName(itemId));
}
} else
activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
} else
activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
}
}