Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Код:
package handler.items;
import java.util.List;
import jts.commons.util.Rnd;
import jts.gameserver.data.xml.holder.ItemHolder;
import jts.gameserver.model.Playable;
import jts.gameserver.model.Player;
import jts.gameserver.model.items.ItemInstance;
import jts.gameserver.network.l2.components.SystemMsg;
import jts.gameserver.network.l2.s2c.SystemMessage;
import jts.gameserver.templates.item.support.CapsuledItemsContainer;
import jts.gameserver.utils.ItemFunctions;
/**
*
* @author KillRoy
*
*/
public class Capsuled extends ScriptItemHandler
{
@Override
public final int[] getItemIds()
{
return ItemHolder.getInstance().getCapsuledItemIds();
}
@Override
public boolean useItem(Playable playable, ItemInstance item, boolean ctrl)
{
if(playable == null || !playable.isPlayer())
return false;
Player player = (Player) playable;
boolean isCapsuled = item.getTemplate().isCapsuled();
if (!canBeExtracted(player, item))
return false;
if (!useItem(player, item, 1))
return false;
List<CapsuledItemsContainer> extracted_items = item.getTemplate().getCapsuledItems();
boolean random = true;
int sizer = 0;
int maxSize = extracted_items.size();
int preItemId = 0;
int perMinCount = 0;
int perMaxCount = 0;
for(CapsuledItemsContainer extracted : extracted_items)
{
if(extracted.getChance() < 100.0)
{
if(isCapsuled && Rnd.chance(50) && preItemId == 0)
{
preItemId = extracted.getItemId();
perMinCount = extracted.getMinCount();
perMaxCount = extracted.getMaxCount();
}
if(Rnd.chance(extracted.getChance()) && random)
{
ItemFunctions.addItem(player, extracted.getItemId(), Rnd.get(extracted.getMinCount(), extracted.getMaxCount()));
random = false;
}
if(isCapsuled)
{
sizer++;
if(sizer == maxSize && random)
{
ItemFunctions.addItem(player, preItemId, Rnd.get(perMinCount, perMaxCount));
random = false;
}
}
}
else if(extracted.getChance() == 100.0)
ItemFunctions.addItem(player, extracted.getItemId(), Rnd.get(extracted.getMinCount(), extracted.getMaxCount()));
}
return true;
}
private static boolean canBeExtracted(Player player, ItemInstance item)
{
if(player.getWeightPenalty() >= 3 || player.getInventory().getSize() > player.getInventoryLimit() - 10)
{
player.sendPacket(SystemMsg.YOUR_INVENTORY_IS_FULL, new SystemMessage(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS).addItemName(item.getItemId()));
return false;
}
if(player.isActionsDisabled())
{
player.sendPacket(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS);
return false;
}
if(player.isInTrade())
{
player.sendPacket(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS);
return false;
}
if(player.isInStoreMode())
{
player.sendPacket(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS);
return false;
}
return true;
}
public static boolean useItem(Player player, ItemInstance item, long count)
{
if(player.getInventory().destroyItem(item, count))
{
player.sendPacket(new SystemMessage(SystemMsg.YOU_USE_S1).addItemName(item.getItemId()));
return true;
}
player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT);
return false;
}
}
это упаковка данных.
другими словами Capsuled - это когда мы не даем другим объектам изменять внутренние состояния объекта...
Последнее редактирование: