Цитата:
Сообщение от GenCloud
А какой тип отправлять для Тяжелых Камней ветра, ибо какие не перебирал вылетает просто пустое окно.
|
проще наверное будет весь пакет показать...
package l2p.gameserver.network.clientpackets.alchemy;
import l2p.commons.util.Rnd;
import l2p.gameserver.data.holder.AlchemyDataHolder;
import l2p.gameserver.enums.Race;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.alchemy.LollyCubeData;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.model.skills.CommonSkill;
import l2p.gameserver.network.clientpackets.L2GameClientPacket;
import l2p.gameserver.network.serverpackets.MagicSkillUse;
import l2p.gameserver.network.serverpackets.alchemy.ExTryMixCube;
import l2p.gameserver.network.serverpackets.components.SystemMsg;
import l2p.gameserver.utils.ItemUtils;
import l2p.gameserver.utils.Log;
public class RequestAlchemyTryMixCube extends L2GameClientPacket
{
private static final long MAX_COUNT = 1_000_000_000;
private int[] _objectId;
private long[] _count;
@Override
protected void readImpl()
{
int count = readD();
_objectId = new int[count];
_count = new long[count];
for (int i = 0; i < count; i++)
{
_objectId[i] = readD();
_count[i] = Math.min(readQ(), MAX_COUNT);
}
}
@Override
protected void runImpl()
{
final Player player = getClient().getActiveChar();
if (player == null || player.getAppearance().getRace() != Race.ERTHEIA)
return;
if (player.getSkillLevel(CommonSkill.ALCHEMY_CUBE.getId()) < 1)
{
player.sendPacket(SystemMsg.YOU_MUST_LEARN_THE_NECESSARY_SKILLS_FIRST, ExTryMixCube.FAIL);
return;
}
if (player.isDead())
{
player.sendPacket(SystemMsg.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD, ExTryMixCube.FAIL);
return;
}
if (player.isInCombat())
{
player.sendPacket(SystemMsg.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE, ExTryMixCube.FAIL);
return;
}
if (player.isActionsDisabled())
{
player.sendPacket(SystemMsg.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE, ExTryMixCube.FAIL);
return;
}
if (player.isProcessingRequest() || player.getPrivateStoreType() != Player.STORE_PRIVATE_NONE)
{
player.sendPacket(SystemMsg.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP, ExTryMixCube.FAIL);
return;
}
LollyCubeData cube = AlchemyDataHolder.getInstance().getLollyCube(player.getSkillLevel(CommonSkill.ALCHEMY_CUBE.getId()));
if (cube == null)
{
player.sendPacket(ExTryMixCube.FAIL);
return;
}
long count = 0L;
long price = 0L;
long additionalItemCount = 0L;
for (int i = 0; i < _objectId.length; i++)
{
ItemInstance item = player.getInventory().getItemByObjectId(_objectId[i]);
if (item != null && !item.isEquipped() && item.getCount() >= _count[i])
{
count += _count[i];
price += AlchemyDataHolder.getInstance().getPrice(item.getItemId()) * _count[i];
if (item.getItemId() == cube.getAdditionalItemId())
additionalItemCount = _count[i];
}
}
if (count < 1 || price < 1)
{
player.sendPacket(ExTryMixCube.FAIL);
return;
}
for (int i = 0; i < _objectId.length; i++)
{
ItemInstance item = player.getInventory().getItemByObjectId(_objectId[i]);
if (!player.getInventory().destroyItem(item, _count[i]))
{
player.sendPacket(ExTryMixCube.FAIL);
return;
}
Log.LogItem(player, Log.LollyCubeRemove, item, _count[i]);
}
long rewardCount = cube.getRewardCount(_objectId.length, price);
if (rewardCount < 1)
{
player.sendPacket(ExTryMixCube.FAIL);
return;
}
ExTryMixCube packet = new ExTryMixCube(0);
int rewardRate = 1;
boolean randomSuccess = false;
if (additionalItemCount > 0)
{
if (Rnd.chance(cube.getExtraRewardChance()))
{
ItemUtils.addItem(player, cube.getExtraRewardId(), cube.getExtraRewardCount(), true);
Log.LogItem(player, Log.LollyCubeAdd, cube.getExtraRewardId(), cube.getExtraRewardCount());
packet.add(cube.getExtraRewardId(), cube.getExtraRewardCount(), 2);
randomSuccess = true;
}
if (additionalItemCount > 1 && Rnd.chance(cube.getDoubleRewardChance(additionalItemCount)))
{
rewardRate = 2;
rewardCount *= rewardRate;
randomSuccess = true;
}
}
ItemUtils.addItem(player, cube.getRewardId(), rewardCount, true);
Log.LogItem(player, Log.LollyCubeAdd, cube.getRewardId(), rewardCount);
if (randomSuccess)
player.sendPacket(new MagicSkillUse(player, CommonSkill.ALCHEMY_CUBE_RANDOM_SUCCESS.getSkill()));
packet.add(cube.getRewardId(), rewardCount, rewardRate > 1 ? 1 : 0);
player.sendPacket(packet);
}
}
Code: Java