테스트

aion-server 4.8

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

import com.aionemu.gameserver.controllers.observer.ActionObserver;
import com.aionemu.gameserver.controllers.observer.ObserverType;
import com.aionemu.gameserver.model.gameobjects.Creature;
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.services.item.ItemPacketService;
import com.aionemu.gameserver.skillengine.model.Effect;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.world.World;

/**
 * @author ATracer
 */
public class ChargeInfo extends ActionObserver {

	public static final int LEVEL2 = 1000000;
	public static final int LEVEL1 = 500000;
	private final int attackBurn;
	private final int defendBurn;
	private final Item item;
	private int chargePoints;
	private int playerId;

	public ChargeInfo(int chargePoints, Item item) {
		super(ObserverType.DOT_ATTACK_DEFEND);
		this.chargePoints = chargePoints;
		this.item = item;
		if (item.getImprovement() != null) {
			this.attackBurn = item.getImprovement().getBurnAttack();
			this.defendBurn = item.getImprovement().getBurnDefend();
		} else {
			this.attackBurn = 0;
			this.defendBurn = 0;
		}
	}

	public int getChargePoints() {
		return chargePoints;
	}

	private Player getPlayer() {
		return playerId == 0 ? null : World.getInstance().getPlayer(playerId);
	}

	public void setPlayer(Player player) {
		this.playerId = player == null ? 0 : player.getObjectId();
	}

	/**
	 * Updates the chargePoints of the item.
	 * 
	 * @param pointsToAdd
	 *          chargePoints to add to the current charge points
	 * @return boolean indicating whether the visual charge bar has changed or not
	 */
	public synchronized boolean updateChargePoints(int pointsToAdd) {
		int newChargePoints = chargePoints + pointsToAdd;
		newChargePoints = Math.max(0, Math.min(newChargePoints, LEVEL2));
		int currentChargeBarStep = chargePoints / 50000;
		int newChargeBarStep = newChargePoints / 50000;
		chargePoints = newChargePoints;
		Player player;
		if (item.isEquipped() && (player = getPlayer()) != null)
			player.getEquipment().setPersistentState(PersistentState.UPDATE_REQUIRED);
		item.setPersistentState(PersistentState.UPDATE_REQUIRED);
		return currentChargeBarStep != newChargeBarStep;
	}

	@Override
	public void dotattacked(Creature creature, Effect dotEffect) {
		if (updateChargePoints(-defendBurn))
			sendItemUpdate();
	}

	@Override
	public void attacked(Creature creature, int skillId) {
		if (skillId == 0 && updateChargePoints(-defendBurn))
			sendItemUpdate();
	}

	@Override
	public void attack(Creature creature, int skillId) {
		if (skillId == 0 && updateChargePoints(-attackBurn))
			sendItemUpdate();
	}

	private void sendItemUpdate() {
		Player player = getPlayer();
		if (player != null)
			PacketSendUtility.sendPacket(player, new SM_INVENTORY_UPDATE_ITEM(player, item, ItemPacketService.ItemUpdateType.CHARGE));
	}

}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 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,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0