테스트

aion-server 4.8

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

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;

import com.aionemu.gameserver.model.gameobjects.HouseObject;
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_HOUSE_EDIT;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.network.aion.serverpackets.SM_UPDATE_PLAYER_APPEARANCE;
import com.aionemu.gameserver.services.item.ItemPacketService;
import com.aionemu.gameserver.utils.PacketSendUtility;

/**
 * @author IceReaper, Neon
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DyeAction")
public class DyeAction extends AbstractItemAction {

	@XmlAttribute(name = "color")
	protected String color;
	@XmlAttribute
	private Integer minutes;

	@Override
	public boolean canAct(Player player, Item parentItem, Item targetItem, Object... params) {
		HouseObject<?> targetHouseObject = (HouseObject<?>) params[0];
		if (targetHouseObject == null && targetItem == null) { // nothing to dye
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_ITEM_COLOR_ERROR());
			return false;
		}
		if (targetHouseObject != null) {
			if (color.equals("no") && targetHouseObject.getColor() == null) {
				PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_ITEM_PAINT_ERROR_CANNOTREMOVE());
				return false;
			}
			if (!targetHouseObject.getObjectTemplate().getCanDye()) {
				PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_ITEM_PAINT_ERROR_CANNOTPAINT());
				return false;
			}
		}
		return true;
	}

	@Override
	public void act(Player player, Item parentItem, Item targetItem, Object... params) {
		HouseObject<?> targetHouseObject = (HouseObject<?>) params[0];
		if (targetHouseObject == null)
			dyeItem(player, parentItem, targetItem);
		else
			dyeHouseObject(player, parentItem, targetHouseObject);
	}

	private void dyeItem(Player player, Item parentItem, Item targetItem) {
		if (!targetItem.getItemSkinTemplate().isItemDyePermitted())
			return;
		if (!player.getInventory().decreaseByObjectId(parentItem.getObjectId(), 1))
			return;
		targetItem.setItemColor(getColor());
		if (minutes != null)
			targetItem.setColorExpireTime((int) (System.currentTimeMillis() / 1000 + minutes * 60));
		else
			targetItem.setColorExpireTime(0);
		if (targetItem.getItemColor() == null) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_ITEM_COLOR_REMOVE_SUCCEED(targetItem.getL10n()));
		} else {
			PacketSendUtility.sendPacket(player,
				SM_SYSTEM_MESSAGE.STR_ITEM_COLOR_CHANGE_SUCCEED(targetItem.getL10n(), parentItem.getL10n()));
		}

		// item is equipped, so need broadcast packet
		if (player.getEquipment().getEquippedItemByObjId(targetItem.getObjectId()) != null) {
			PacketSendUtility.broadcastPacket(player,
				new SM_UPDATE_PLAYER_APPEARANCE(player.getObjectId(), player.getEquipment().getEquippedForAppearance()), true);
			player.getEquipment().setPersistentState(PersistentState.UPDATE_REQUIRED);
		} else { // item is not equipped
			player.getInventory().setPersistentState(PersistentState.UPDATE_REQUIRED);
		}

		ItemPacketService.updateItemAfterInfoChange(player, targetItem);
	}

	public Integer getColor() {
		return color.equals("no") ? null : Integer.parseInt(color, 16);
	}

	private void dyeHouseObject(Player player, Item dyeItem, HouseObject<?> houseObject) {
		if (!player.getInventory().decreaseByObjectId(dyeItem.getObjectId(), 1))
			return;
		houseObject.setColor(getColor());
		float x = houseObject.getX();
		float y = houseObject.getY();
		float z = houseObject.getZ();
		int rotation = houseObject.getRotation();
		PacketSendUtility.sendPacket(player, new SM_HOUSE_EDIT(7, 0, houseObject.getObjectId()));
		PacketSendUtility.sendPacket(player, new SM_HOUSE_EDIT(5, houseObject.getObjectId(), x, y, z, rotation));
		houseObject.spawn();
		String objectName = houseObject.getObjectTemplate().getL10n();
		if (houseObject.getColor() == null) {
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_ITEM_PAINT_REMOVE_SUCCEED(objectName));
		} else {
			String paintName = dyeItem.getItemTemplate().getL10n();
			PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_ITEM_PAINT_SUCCEED(objectName, paintName));
		}
	}

}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 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