Public Repository for the Magicbane Shadowbane Emulator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

233 lines
6.1 KiB

// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.objects;
import engine.Enum.DispatchChannel;
import engine.gameManager.PowersManager;
import engine.net.DispatchMessage;
import engine.net.client.msg.ItemProductionMsg;
import engine.powers.EffectsBase;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
public class ProducedItem {
private int ID;
private int npcUID;
private int itemBaseID;
private DateTime dateToUpgrade;
private boolean isRandom;
private String prefix;
private String suffix;
private String name;
private int amount;
private int producedItemID = 0;
private boolean inForge;
private int value;
private int playerID;
/**
* ResultSet Constructor
*/
public ProducedItem(ResultSet rs) throws SQLException {
this.ID = rs.getInt("ID");
this.npcUID = rs.getInt("npcUID");
this.itemBaseID = rs.getInt("itemBaseID");
Date sqlDateTime = rs.getTimestamp("dateToUpgrade");
if (sqlDateTime != null)
this.dateToUpgrade = new DateTime(sqlDateTime);
else
dateToUpgrade = null;
this.isRandom = rs.getBoolean("isRandom");
this.prefix = rs.getString("prefix");
this.suffix = rs.getString("suffix");
this.name = rs.getString("name");
this.inForge = rs.getBoolean("inForge");
this.value = rs.getInt("value");
this.playerID = rs.getInt("playerID");
}
public ProducedItem(int ID, int npcUID, int itemBaseID, DateTime dateToUpgrade, boolean isRandom, String prefix, String suffix, String name, int playerID) {
super();
this.ID = ID;
this.npcUID = npcUID;
this.itemBaseID = itemBaseID;
this.dateToUpgrade = dateToUpgrade;
this.isRandom = isRandom;
this.prefix = prefix;
this.suffix = suffix;
this.name = name;
this.value = 0;
this.playerID = playerID;
}
public int getNpcUID() {
return npcUID;
}
public DateTime getDateToUpgrade() {
return dateToUpgrade;
}
public int getItemBaseID() {
return itemBaseID;
}
public void setItemBaseID(int itemBaseID) {
this.itemBaseID = itemBaseID;
}
public boolean isRandom() {
return isRandom;
}
public void setRandom(boolean isRandom) {
this.isRandom = isRandom;
}
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getSuffix() {
return suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public int getProducedItemID() {
return producedItemID;
}
public void setProducedItemID(int producedItemID) {
this.producedItemID = producedItemID;
}
public boolean isInForge() {
return inForge;
}
public void setInForge(boolean inForge) {
this.inForge = inForge;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public boolean finishProduction() {
NPC npc = NPC.getFromCache(this.getNpcUID());
if (npc == null)
return false;
//update the client to ID the item in the window when item finishes rolling.
//If there is more than 1 item left to roll, complete the item and throw it in inventory
//and reproduce next item.
try {
if (this.getAmount() > 1) {
this.setAmount(this.getAmount() - 1);
npc.completeItem(this.getProducedItemID());
int pToken = 0;
int sToken = 0;
if (!this.isRandom()) {
EffectsBase eb = PowersManager.getEffectByIDString(this.getPrefix());
if (eb != null)
pToken = eb.getToken();
eb = PowersManager.getEffectByIDString(this.getSuffix());
if (eb != null)
sToken = eb.getToken();
}
Item item = npc.produceItem(0, this.getAmount(), this.isRandom(), pToken, sToken, this.getName(), this.getItemBaseID());
if (item == null)
return false;
} else {
//update item to complete
MobLoot targetItem = MobLoot.getFromCache(this.getProducedItemID());
if (targetItem == null)
return false;
ItemProductionMsg outMsg = new ItemProductionMsg(npc.getBuilding(), npc, targetItem, 8, true);
DispatchMessage.dispatchMsgToInterestArea(npc, outMsg, DispatchChannel.SECONDARY, 700, false, false);
}
} catch (Exception e) {
Logger.error(e);
return false;
}
return true;
}
public int getPlayerID() {
return playerID;
}
}