테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
game-server/src/com/aionemu/gameserver/model/templates/item/actions/PackAction.java
package com.aionemu.gameserver.model.templates.item.actions;

import javax.xml.bind.annotation.XmlAttribute;

import com.aionemu.gameserver.configs.main.GSConfig;
import com.aionemu.gameserver.model.gameobjects.Item;
import com.aionemu.gameserver.model.gameobjects.Persistable.PersistentState;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.network.aion.serverpackets.SM_INVENTORY_UPDATE_ITEM;
import com.aionemu.gameserver.network.aion.serverpackets.SM_ITEM_USAGE_ANIMATION;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.utils.PacketSendUtility;

/**
 * @author Rolandas
 */
public class PackAction extends AbstractItemAction {

	@XmlAttribute
	protected UseTarget target;

	@Override
	public boolean canAct(Player player, Item parentItem, Item targetItem, Object... params) {
		if (targetItem == null) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_NO_TARGET_ITEM());
			return false;
		}
		if (GSConfig.ITEM_WRAP_LIMIT < 0 || GSConfig.ITEM_WRAP_LIMIT > 127 && GSConfig.ITEM_WRAP_LIMIT != 255) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_CANNOT(targetItem.getL10n()));
			return false;
		}
		if (targetItem.isEquipped()) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_WRONG_EQUIPED());
			return false;
		}
		if (targetItem.getItemTemplate().isTradeable()) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_WRONG_EXCHANGE());
			return false;
		}
		if (targetItem.isSoulBound()) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_WRONG_SEAL());
			return false;
		}
		if (targetItem.getFusionedItemId() != 0) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_WRONG_COMPOSITION());
			return false;
		}
		if (!targetItem.isIdentified()) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_NEED_IDENTIFY());
			return false;
		}
		if (targetItem.getItemTemplate().getItemQuality().getQualityId() > parentItem.getItemTemplate().getItemQuality().getQualityId()) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_WRONG_QUALITY(parentItem.getL10n(), targetItem.getL10n()));
			return false;
		}
		if (targetItem.getItemTemplate().getLevel() > parentItem.getItemTemplate().getLevel()) {
			PacketSendUtility.sendPacket(player,
				SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_WRONG_LEVEL(targetItem.getL10n(), targetItem.getItemTemplate().getLevel()));
			return false;
		}
		UseTarget type = switch (targetItem.getItemTemplate().getItemGroup()) {
			case SWORD, DAGGER, MACE, ORB, SPELLBOOK, BOW, GREATSWORD, POLEARM, STAFF, HARP, GUN, CANNON, KEYBLADE -> UseTarget.WEAPON;
			case SHIELD, RB_TORSO, RB_PANTS, RB_SHOULDER, RB_GLOVE, RB_SHOES, CL_TORSO, CL_PANTS, CL_SHOULDER, CL_GLOVE, CL_SHOES, CH_TORSO, CH_PANTS, CH_SHOULDER, CH_GLOVE, CH_SHOES, LT_TORSO, LT_PANTS, LT_SHOULDER, LT_GLOVE, LT_SHOES, PL_TORSO, PL_PANTS, PL_SHOULDER, PL_GLOVE, PL_SHOES -> UseTarget.ARMOR;
			case NECKLACE, EARRING, RING, BELT, HEAD -> UseTarget.ACCESSORY;
			default -> null;
		};
		if (type == null || target != type) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_WRONG_TARGET_ITEM_CATEGORY(parentItem.getL10n(), targetItem.getL10n()));
			return false;
		}
		int packCount = targetItem.getPackCount();
		if (packCount > 0) { // only negative unpacked
			return false;
		}
		if (GSConfig.ITEM_WRAP_LIMIT != 255) {
			if (packCount < 0) {
				packCount *= -1;
			}
			int allowedPackCount = targetItem.getItemTemplate().getPackCount();
			if (targetItem.getEnchantLevel() >= 20) {
				allowedPackCount += targetItem.getEnchantLevel() - 19;
			}
			if (packCount >= allowedPackCount) {
				PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_CANNOT(targetItem.getL10n()));
				return false;
			}
		}
		return true;
	}

	@Override
	public void act(Player player, Item parentItem, Item targetItem, Object... params) {
		final int parentItemId = parentItem.getItemId();
		final int parentObjectId = parentItem.getObjectId();
		int packCount = targetItem.getPackCount();
		PacketSendUtility.broadcastPacket(player, new SM_ITEM_USAGE_ANIMATION(player.getObjectId(), parentObjectId, parentItemId, 0, 1, 1), true);
		if (!player.getInventory().decreaseByObjectId(parentObjectId, 1)) {
			return;
		}
		if (packCount < 0) {
			packCount *= -1;
		}
		targetItem.setPackCount(++packCount);
		targetItem.setPersistentState(PersistentState.UPDATE_REQUIRED);
		PacketSendUtility.sendPacket(player, new SM_INVENTORY_UPDATE_ITEM(player, targetItem));
		PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_PACK_ITEM_SUCCEED(targetItem.getL10n()));
	}

	public UseTarget getTarget() {
		return target;
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,097
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0