Capsuled.java

Ancient

Заблокирован
Заблокирован
Сообщения
341
Розыгрыши
0
Репутация
-12
Реакции
77
Баллы
0
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Код:
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 - это когда мы не даем другим объектам изменять внутренние состояния объекта...
 
Последнее редактирование:

Боюсь представить что прототип скажет про полиморфизм, это наверное отполированные переменные и классы :D
Пф, gameserver.network.serverpackets.NpcPoly - по-любому полиморфизм!
 
Назад
Сверху Снизу