package org.reunionemu.jreunion.game.items.equipment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.reunionemu.jcommon.ParsedItem;
import org.reunionemu.jreunion.game.Item;
import org.reunionemu.jreunion.game.LivingObject;
import org.reunionemu.jreunion.game.Player;
import org.reunionemu.jreunion.game.Usable;
import org.reunionemu.jreunion.game.items.SpecialWeapon;
import org.reunionemu.jreunion.server.DatabaseUtils;
import org.reunionemu.jreunion.server.PacketFactory.Type;
import org.reunionemu.jreunion.server.Reference;
/**
* @author Aidamina
* @license http://reunion.googlecode.com/svn/trunk/license.txt
*/
public class WandWeapon extends SpecialWeapon implements Usable{
private float accumulatedDmg;
private int skillLevel;
public WandWeapon(int id) {
super(id);
loadFromReference(id);
}
@Override
public void loadFromReference(int id) {
super.loadFromReference(id);
ParsedItem item = Reference.getInstance().getItemReference().getItemById(id);
// we getting informations on items
if (item == null) {
// cant find Item in the reference continue to load defaults:
setAccumulatedDmg(0);
setSkillLevel(0);
} else {
if (item.checkMembers(new String[] { "AccumulatedDmg" })) {
// use member from file
setAccumulatedDmg(Float.parseFloat(item.getMemberValue("AccumulatedDmg")));
} else {
// use default
setAccumulatedDmg(0);
}
if (item.checkMembers(new String[] { "Skillevel" })) {
// use member from file
setSkillLevel(Integer.parseInt(item.getMemberValue("Skillevel")));
} else {
// use default
setSkillLevel(0);
}
}
}
public float getAccumulatedDmg() {
return accumulatedDmg;
}
public void setAccumulatedDmg(float accumulatedDmg) {
this.accumulatedDmg = accumulatedDmg;
}
public int getSkillLevel() {
return skillLevel;
}
public void setSkillLevel(int skillLevel) {
this.skillLevel = skillLevel;
}
@Override
public boolean use(Item<?> wandWeapon, LivingObject user, int quickSlotPosition, int unknown) {
if(user instanceof Player) {
Player player = (Player) user;
if (wandWeapon.getGemNumber() <= 0) {
LoggerFactory.getLogger(WandWeapon.class).warn(
"Possible cheat detected: player " + player
+ " is trying to use empty " + this.getName()
+ ".");
return false;
}
//update WandWeapon uses remain
int usesRemain = (int)wandWeapon.getGemNumber() - 1;
if(usesRemain < 0){
return false;
}
wandWeapon.setGemNumber(usesRemain);
DatabaseUtils.getDinamicInstance().saveItem(wandWeapon);
//update player mana
long manaRemain = player.getMana() - getManaUsed();
if(manaRemain < 0){
return false;
}
player.setMana(manaRemain);
/*if (player.getClient().getVersion() >= 2000)
player.getClient().sendPacket(Type.UQ_ITEM, 1,
quickSlotPosition, wandWeapon.getEntityId(), unknown);
*/
return true;
} else {
LoggerFactory.getLogger(WandWeapon.class).warn(this.getName() + " not implemented for " + user.getName());
}
return false;
}
}