forked from MagicBane/Server
Initial Repository Push
This commit is contained in:
@@ -0,0 +1,396 @@
|
||||
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
||||
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
||||
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
||||
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
||||
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
||||
// Magicbane Emulator Project © 2013 - 2022
|
||||
// www.magicbane.com
|
||||
|
||||
|
||||
package engine.objects;
|
||||
|
||||
import engine.exception.SerializationException;
|
||||
import engine.gameManager.PowersManager;
|
||||
import engine.net.ByteBufferWriter;
|
||||
import engine.powers.EffectsBase;
|
||||
import engine.powers.poweractions.AbstractPowerAction;
|
||||
import org.pmw.tinylog.Logger;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class MobEquipment extends AbstractGameObject {
|
||||
|
||||
private static AtomicInteger equipCounter = new AtomicInteger(0);
|
||||
private final ItemBase itemBase;
|
||||
private int slot;
|
||||
private int parentID;
|
||||
|
||||
//effects
|
||||
private boolean enchanted;
|
||||
private boolean isID = false;
|
||||
private AbstractPowerAction prefix;
|
||||
private AbstractPowerAction suffix;
|
||||
private int pValue;
|
||||
private int sValue;
|
||||
private int magicValue;
|
||||
|
||||
private float dropChance = 0;
|
||||
|
||||
/**
|
||||
* No Id Constructor
|
||||
*/
|
||||
public MobEquipment(ItemBase itemBase, int slot, int parentID) {
|
||||
super(MobEquipment.getNewID());
|
||||
this.itemBase = itemBase;
|
||||
this.slot = slot;
|
||||
this.parentID = parentID;
|
||||
this.enchanted = false;
|
||||
this.prefix = null;
|
||||
this.suffix = null;
|
||||
this.pValue = 0;
|
||||
this.sValue = 0;
|
||||
setMagicValue();
|
||||
}
|
||||
|
||||
public MobEquipment(ItemBase itemBase, int slot, int parentID, String pIDString, String sIDString, int pValue, int sValue) {
|
||||
super(MobEquipment.getNewID());
|
||||
this.itemBase = itemBase;
|
||||
this.slot = slot;
|
||||
this.parentID = parentID;
|
||||
|
||||
//add effects
|
||||
this.prefix = PowersManager.getPowerActionByIDString(pIDString);
|
||||
this.suffix = PowersManager.getPowerActionByIDString(sIDString);
|
||||
|
||||
this.pValue = pValue;
|
||||
this.sValue = sValue;
|
||||
this.enchanted = this.prefix == null || this.suffix == null;
|
||||
setMagicValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* ResultSet Constructor
|
||||
*/
|
||||
public MobEquipment(ResultSet rs) throws SQLException {
|
||||
super(MobEquipment.getNewID());
|
||||
int itemBaseID = rs.getInt("ItemID");
|
||||
this.itemBase = ItemBase.getItemBase(itemBaseID);
|
||||
this.slot = rs.getInt("slot");
|
||||
this.parentID = rs.getInt("mobID");
|
||||
setMagicValue();
|
||||
}
|
||||
|
||||
|
||||
public MobEquipment(int itemBaseID,float dropChance) {
|
||||
super(MobEquipment.getNewID());
|
||||
this.itemBase = ItemBase.getItemBase(itemBaseID);
|
||||
|
||||
if (this.itemBase != null)
|
||||
this.slot = this.itemBase.getValidSlot();
|
||||
else{
|
||||
Logger.error("Failed to find Itembase for ID : " + itemBaseID);
|
||||
this.slot = 0;
|
||||
}
|
||||
|
||||
this.dropChance = dropChance;
|
||||
|
||||
this.parentID = 0;
|
||||
setMagicValue();
|
||||
}
|
||||
|
||||
public ItemBase getItemBase() {
|
||||
return itemBase;
|
||||
}
|
||||
|
||||
public int getSlot() {
|
||||
return this.slot;
|
||||
}
|
||||
|
||||
public void setSlot(int value) {
|
||||
this.slot = value;
|
||||
}
|
||||
|
||||
public static int getNewID() {
|
||||
return MobEquipment.equipCounter.incrementAndGet();
|
||||
}
|
||||
|
||||
public static void serializeForVendor(MobEquipment mobEquipment,ByteBufferWriter writer, float percent) throws SerializationException {
|
||||
_serializeForClientMsg(mobEquipment,writer, false);
|
||||
int baseValue = mobEquipment.itemBase.getBaseValue() + mobEquipment.itemBase.getMagicValue();
|
||||
writer.putInt(mobEquipment.magicValue);
|
||||
writer.putInt(mobEquipment.magicValue);
|
||||
}
|
||||
|
||||
|
||||
public static void serializeForClientMsg(MobEquipment mobEquipment,ByteBufferWriter writer) throws SerializationException {
|
||||
_serializeForClientMsg(mobEquipment,writer, true);
|
||||
}
|
||||
|
||||
public static void _serializeForClientMsg(MobEquipment mobEquipment,ByteBufferWriter writer, boolean useSlot) throws SerializationException {
|
||||
|
||||
if (useSlot)
|
||||
writer.putInt(mobEquipment.slot);
|
||||
writer.putInt(0); // Pad
|
||||
writer.putInt(mobEquipment.itemBase.getUUID());
|
||||
writer.putInt(mobEquipment.getObjectType().ordinal());
|
||||
writer.putInt(mobEquipment.getObjectUUID());
|
||||
|
||||
// Unknown statics
|
||||
for (int i = 0; i < 3; i++) {
|
||||
writer.putInt(0); // Pad
|
||||
}
|
||||
for (int i = 0; i < 4; i++) {
|
||||
writer.putInt(0x3F800000); // Static
|
||||
}
|
||||
for (int i = 0; i < 5; i++) {
|
||||
writer.putInt(0); // Pad
|
||||
}
|
||||
for (int i = 0; i < 2; i++) {
|
||||
writer.putInt(0xFFFFFFFF); // Static
|
||||
}
|
||||
|
||||
writer.putInt(0);
|
||||
|
||||
writer.put((byte) 1); // End Datablock byte
|
||||
writer.putInt(0); // Unknown. pad?
|
||||
writer.put((byte) 1); // End Datablock byte
|
||||
|
||||
writer.putFloat(mobEquipment.itemBase.getDurability());
|
||||
writer.putFloat(mobEquipment.itemBase.getDurability());
|
||||
|
||||
writer.put((byte) 1); // End Datablock byte
|
||||
|
||||
writer.putInt(0); // Pad
|
||||
writer.putInt(0); // Pad
|
||||
|
||||
writer.putInt(mobEquipment.itemBase.getBaseValue());
|
||||
writer.putInt(mobEquipment.magicValue);
|
||||
|
||||
serializeEffects(mobEquipment,writer);
|
||||
|
||||
writer.putInt(0x00000000);
|
||||
|
||||
//name color, think mobEquipment is where mobEquipment goes
|
||||
if (mobEquipment.enchanted)
|
||||
if (mobEquipment.isID)
|
||||
writer.putInt(36);
|
||||
else
|
||||
writer.putInt(40);
|
||||
else
|
||||
writer.putInt(4);
|
||||
|
||||
writer.putInt(0);
|
||||
writer.putInt(0); // Pad
|
||||
writer.putInt(1);
|
||||
writer.putShort((short) 0);
|
||||
writer.put((byte) 0);
|
||||
}
|
||||
|
||||
public final void setMagicValue() {
|
||||
float value = 1;
|
||||
if (itemBase != null)
|
||||
value = itemBase.getBaseValue();
|
||||
if (this.prefix != null) {
|
||||
if (this.prefix.getEffectsBase() != null)
|
||||
value += this.prefix.getEffectsBase().getValue();
|
||||
if (this.prefix.getEffectsBase2() != null)
|
||||
value += this.prefix.getEffectsBase2().getValue();
|
||||
}
|
||||
if (this.suffix != null) {
|
||||
if (this.suffix.getEffectsBase() != null)
|
||||
value += this.suffix.getEffectsBase().getValue();
|
||||
if (this.suffix.getEffectsBase2() != null)
|
||||
value += this.suffix.getEffectsBase2().getValue();
|
||||
}
|
||||
|
||||
if (itemBase != null)
|
||||
|
||||
for (Integer token : itemBase.getBakedInStats().keySet()) {
|
||||
|
||||
EffectsBase effect = PowersManager.getEffectByToken(token);
|
||||
|
||||
AbstractPowerAction apa = PowersManager.getPowerActionByIDString(effect.getIDString());
|
||||
if (apa.getEffectsBase() != null)
|
||||
if (apa.getEffectsBase().getValue() > 0){
|
||||
//System.out.println(apa.getEffectsBase().getValue());
|
||||
value += apa.getEffectsBase().getValue();
|
||||
}
|
||||
|
||||
|
||||
if (apa.getEffectsBase2() != null)
|
||||
value += apa.getEffectsBase2().getValue();
|
||||
}
|
||||
|
||||
this.magicValue = (int) value;
|
||||
}
|
||||
|
||||
public int getMagicValue() {
|
||||
|
||||
if (!this.isID) {
|
||||
return itemBase.getBaseValue();
|
||||
}
|
||||
return this.magicValue;
|
||||
}
|
||||
|
||||
|
||||
public static void serializeEffects(MobEquipment mobEquipment,ByteBufferWriter writer) {
|
||||
|
||||
//skip sending effects if not IDed
|
||||
if (!mobEquipment.isID) {
|
||||
writer.putInt(0);
|
||||
return;
|
||||
}
|
||||
|
||||
//handle effect count
|
||||
int cnt = 0;
|
||||
EffectsBase pre = null;
|
||||
EffectsBase suf = null;
|
||||
if (mobEquipment.prefix != null) {
|
||||
pre = PowersManager.getEffectByIDString(mobEquipment.prefix.getIDString());
|
||||
if (pre != null)
|
||||
cnt++;
|
||||
}
|
||||
if (mobEquipment.suffix != null) {
|
||||
suf = PowersManager.getEffectByIDString(mobEquipment.suffix.getIDString());
|
||||
if (suf != null)
|
||||
cnt++;
|
||||
}
|
||||
|
||||
writer.putInt(cnt);
|
||||
|
||||
//serialize prefix
|
||||
if (pre != null)
|
||||
serializeEffect(mobEquipment,writer, pre, mobEquipment.pValue);
|
||||
|
||||
//serialize suffix
|
||||
if (suf != null)
|
||||
serializeEffect(mobEquipment,writer, suf, mobEquipment.sValue);
|
||||
}
|
||||
|
||||
public static void serializeEffect(MobEquipment mobEquipment,ByteBufferWriter writer, EffectsBase eb, int rank) {
|
||||
String name;
|
||||
if (eb.isPrefix()) {
|
||||
if (mobEquipment.itemBase == null)
|
||||
name = eb.getName();
|
||||
else
|
||||
name = eb.getName() + ' ' + mobEquipment.itemBase.getName();
|
||||
}
|
||||
else if (eb.isSuffix()) {
|
||||
if (mobEquipment.itemBase == null)
|
||||
name = eb.getName();
|
||||
else
|
||||
name = mobEquipment.itemBase.getName() + ' ' + eb.getName();
|
||||
}
|
||||
else {
|
||||
if (mobEquipment.itemBase == null)
|
||||
name = "";
|
||||
else
|
||||
name = mobEquipment.itemBase.getName();
|
||||
}
|
||||
|
||||
writer.putInt(eb.getToken());
|
||||
writer.putInt(rank);
|
||||
writer.putInt(1);
|
||||
writer.put((byte) 1);
|
||||
writer.putInt(mobEquipment.getObjectType().ordinal());
|
||||
writer.putInt(mobEquipment.getObjectUUID());
|
||||
writer.putString(name);
|
||||
writer.putFloat(-1000f);
|
||||
}
|
||||
|
||||
public void setPrefix(String pIDString, int pValue) {
|
||||
AbstractPowerAction apa = PowersManager.getPowerActionByIDString(pIDString);
|
||||
if (apa != null) {
|
||||
this.prefix = apa;
|
||||
this.pValue = pValue;
|
||||
} else
|
||||
this.prefix = null;
|
||||
|
||||
this.enchanted = this.prefix != null || this.suffix != null;
|
||||
|
||||
setMagicValue();
|
||||
}
|
||||
|
||||
public void setSuffix(String sIDString, int sValue) {
|
||||
AbstractPowerAction apa = PowersManager.getPowerActionByIDString(sIDString);
|
||||
if (apa != null) {
|
||||
this.suffix = apa;
|
||||
this.sValue = sValue;
|
||||
} else
|
||||
this.suffix = null;
|
||||
|
||||
this.enchanted = this.prefix != null || this.suffix != null;
|
||||
|
||||
setMagicValue();
|
||||
}
|
||||
|
||||
public void setIsID(boolean value) {
|
||||
this.isID = value;
|
||||
}
|
||||
|
||||
public boolean isID() {
|
||||
return this.isID;
|
||||
}
|
||||
|
||||
public void transferEnchants(Item item) {
|
||||
if (this.prefix != null) {
|
||||
String IDString = this.prefix.getIDString();
|
||||
item.addPermanentEnchantment(IDString, this.pValue);
|
||||
}
|
||||
if (this.suffix != null) {
|
||||
String IDString = this.suffix.getIDString();
|
||||
item.addPermanentEnchantment(IDString, this.sValue);
|
||||
}
|
||||
if (this.isID)
|
||||
item.setIsID(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Database
|
||||
*/
|
||||
@Override
|
||||
public void updateDatabase() {
|
||||
}
|
||||
|
||||
|
||||
public void persistObject() {
|
||||
PreparedStatementShared ps = null;
|
||||
try {
|
||||
ps = prepareStatement("INSERT INTO static_npc_mobequipment (`mobID`, `slot`, `itemID`) VALUES (?, ?, ?)");
|
||||
ps.setInt(1, this.parentID, true);
|
||||
ps.setInt(2, this.slot);
|
||||
ps.setInt(3, this.itemBase.getUUID(), true);
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
Logger.error( e.toString());
|
||||
} finally {
|
||||
ps.release();
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeObject(int UUID, int slot) {
|
||||
PreparedStatementShared ps = null;
|
||||
try {
|
||||
ps = prepareStatement("DELETE FROM `static_npc_mobequipment` WHERE `mobID`=? AND slot=?");
|
||||
ps.setInt(1, UUID);
|
||||
ps.setInt(2, slot);
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
Logger.error( e.toString());
|
||||
} finally {
|
||||
ps.release();
|
||||
}
|
||||
}
|
||||
|
||||
public float getDropChance() {
|
||||
return dropChance;
|
||||
}
|
||||
|
||||
public void setDropChance(float dropChance) {
|
||||
this.dropChance = dropChance;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user