forked from MagicBane/Server
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.
316 lines
8.9 KiB
316 lines
8.9 KiB
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . |
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· |
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ |
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ |
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ |
|
// Magicbane Emulator Project © 2013 - 2022 |
|
// www.magicbane.com |
|
|
|
|
|
package engine.objects; |
|
|
|
import engine.Enum; |
|
import engine.Enum.ItemType; |
|
import engine.gameManager.DbManager; |
|
import org.pmw.tinylog.Logger; |
|
|
|
import java.sql.ResultSet; |
|
import java.sql.SQLException; |
|
import java.util.ArrayList; |
|
import java.util.HashMap; |
|
|
|
public class ItemBase { |
|
|
|
public static ItemBase GOLD_ITEM_BASE = null; |
|
public static int GOLD_BASE_ID = 7; |
|
public static ArrayList<Integer> AnniversaryGifts = new ArrayList<>(); |
|
public static HashMap<Integer, ItemBase> _itemBaseByUUID = new HashMap<>(); |
|
private static final HashMap<Integer, Integer> itemHashIDMap = new HashMap<>(); |
|
private static final HashMap<String, Integer> _IDsByNames = new HashMap<>(); |
|
private static final ArrayList<ItemBase> _resourceList = new ArrayList<>(); |
|
public final int uuid; |
|
|
|
//requirements/restrictions |
|
private final ItemType type; |
|
private final int modTable; |
|
private final int useID; |
|
private int hashID; |
|
private final byte useAmount; |
|
|
|
// Armor and weapon related values |
|
private final String skillRequired; |
|
private final short percentRequired; |
|
private final short defense; |
|
private final float dexPenalty; |
|
private final float speed; |
|
private final float range; |
|
private final short minDamage; |
|
private final short maxDamage; |
|
private final String mastery; |
|
private final engine.Enum.SourceType damageType; |
|
private final boolean twoHanded; |
|
private boolean isConsumable; |
|
|
|
// Item stat modifiers |
|
private final HashMap<Integer, Integer> bakedInStats = new HashMap<>(); |
|
private final HashMap<Integer, Integer> usedStats = new HashMap<>(); |
|
private final boolean isStrBased; |
|
private ArrayList<Integer> animations = new ArrayList<>(); |
|
private ArrayList<Integer> offHandAnimations = new ArrayList<>(); |
|
|
|
public ItemBase(ResultSet rs) throws SQLException { |
|
|
|
this.uuid = rs.getInt("ID"); |
|
|
|
this.type = ItemType.valueOf(rs.getString("Type")); |
|
this.useID = rs.getInt("useID"); |
|
this.useAmount = rs.getByte("useAmount"); |
|
this.modTable = rs.getInt("modTable"); |
|
this.hashID = rs.getInt("itemHashID"); |
|
|
|
this.isConsumable = false; |
|
this.skillRequired = rs.getString("skillRequired"); |
|
this.percentRequired = rs.getShort("percentRequired"); |
|
this.defense = rs.getShort("defense"); |
|
this.dexPenalty = rs.getFloat("dexPenalty"); |
|
this.isStrBased = (rs.getInt("isStrBased") == 1); |
|
this.speed = rs.getFloat("speed"); |
|
this.range = rs.getFloat("range"); |
|
this.minDamage = rs.getShort("minDamage"); |
|
this.maxDamage = rs.getShort("maxDamage"); |
|
|
|
this.mastery = rs.getString("mastery"); |
|
damageType = Enum.SourceType.valueOf(rs.getString("damageType").toUpperCase()); |
|
|
|
this.twoHanded = (rs.getInt("twoHanded") == 1); |
|
|
|
switch (this.type) { |
|
case RUNE: |
|
case SCROLL: |
|
case COMMANDROD: |
|
case POTION: |
|
case TEARS: |
|
case GUILDCHARTER: |
|
case DEED: |
|
case CONTRACT: |
|
case WATERBUCKET: |
|
case REALMCHARTER: |
|
case GIFT: |
|
this.isConsumable = true; |
|
break; |
|
case OFFERING: |
|
this.isConsumable = true; |
|
Boon.HandleBoonListsForItemBase(uuid); |
|
break; |
|
} |
|
|
|
try { |
|
DbManager.ItemBaseQueries.LOAD_ANIMATIONS(this); |
|
} catch (Exception e) { |
|
Logger.error(e.getMessage()); |
|
} |
|
initBakedInStats(); |
|
initializeHashes(); |
|
|
|
} |
|
|
|
public static void addToCache(ItemBase itemBase) { |
|
|
|
_itemBaseByUUID.put(itemBase.uuid, itemBase); |
|
|
|
if (itemBase.type.equals(ItemType.RESOURCE)) |
|
_resourceList.add(itemBase); |
|
|
|
ItemTemplate template = ItemTemplate.itemTemplates.get(itemBase.uuid); |
|
|
|
if (template == null) |
|
Logger.error("Null template for: " + itemBase.uuid); |
|
else |
|
_IDsByNames.put(template.item_base_name.toLowerCase().replace(" ", "_"), itemBase.uuid); |
|
} |
|
|
|
public static HashMap<Integer, Integer> getItemHashIDMap() { |
|
return itemHashIDMap; |
|
} |
|
|
|
public static ItemBase getItemBase(int uuid) { |
|
|
|
return _itemBaseByUUID.get(uuid); |
|
} |
|
|
|
public static ItemBase getGoldItemBase() { |
|
if (ItemBase.GOLD_ITEM_BASE == null) |
|
ItemBase.GOLD_ITEM_BASE = getItemBase(7); |
|
return ItemBase.GOLD_ITEM_BASE; |
|
} |
|
|
|
public static int getIDByName(String name) { |
|
if (ItemBase._IDsByNames.containsKey(name)) |
|
return ItemBase._IDsByNames.get(name); |
|
return 0; |
|
} |
|
|
|
public static HashMap<Integer, ItemBase> getUUIDCache() { |
|
return _itemBaseByUUID; |
|
} |
|
|
|
public static ArrayList<ItemBase> getResourceList() { |
|
return _resourceList; |
|
} |
|
|
|
public static void loadAllItemBases() { |
|
DbManager.ItemBaseQueries.LOAD_ALL_ITEMBASES(); |
|
|
|
AnniversaryGifts.add(971000); |
|
AnniversaryGifts.add(971001); |
|
AnniversaryGifts.add(971002); |
|
AnniversaryGifts.add(971003); |
|
AnniversaryGifts.add(971004); |
|
AnniversaryGifts.add(971005); |
|
AnniversaryGifts.add(971006); |
|
AnniversaryGifts.add(971007); |
|
AnniversaryGifts.add(971008); |
|
AnniversaryGifts.add(971009); |
|
AnniversaryGifts.add(971010); |
|
AnniversaryGifts.add(5101000); |
|
AnniversaryGifts.add(5101020); |
|
AnniversaryGifts.add(5101100); |
|
AnniversaryGifts.add(5101120); |
|
AnniversaryGifts.add(5101040); |
|
AnniversaryGifts.add(5101140); |
|
AnniversaryGifts.add(5101060); |
|
AnniversaryGifts.add(5101080); |
|
|
|
} |
|
|
|
private void initBakedInStats() { |
|
DbManager.ItemBaseQueries.LOAD_BAKEDINSTATS(this); |
|
} |
|
|
|
public boolean isConsumable() { |
|
return this.isConsumable; |
|
} |
|
|
|
public boolean isRune() { |
|
int ID = uuid; |
|
if (ID > 2499 && ID < 3050) //class, discipline runes |
|
return true; |
|
else |
|
return ID > 249999 && ID < 252137; |
|
} |
|
|
|
public boolean isDiscRune() { |
|
int ID = uuid; |
|
//class, discipline runes |
|
return ID > 2499 && ID < 3050; |
|
} |
|
|
|
public boolean isGlass() { |
|
int ID = uuid; |
|
return ID > 7000099 && ID < 7000281; |
|
} |
|
|
|
//returns powers tokens baked in to item |
|
public HashMap<Integer, Integer> getBakedInStats() { |
|
return this.bakedInStats; |
|
} |
|
|
|
//returns power tokens granted when using item, such as scrolls and potions |
|
public HashMap<Integer, Integer> getUsedStats() { |
|
return this.usedStats; |
|
} |
|
|
|
public final void initializeHashes() { |
|
itemHashIDMap.put(this.hashID, uuid); |
|
|
|
} |
|
|
|
public ItemType getType() { |
|
return this.type; |
|
} |
|
|
|
public int getUseID() { |
|
return this.useID; |
|
} |
|
|
|
public byte getUseAmount() { |
|
return this.useAmount; |
|
} |
|
|
|
public int getModTable() { |
|
return modTable; |
|
} |
|
|
|
public int getHashID() { |
|
return hashID; |
|
} |
|
|
|
public final int getUUID() { |
|
return uuid; |
|
} |
|
|
|
public boolean isTwoHanded() { |
|
return this.twoHanded; |
|
} |
|
|
|
public String getSkillRequired() { |
|
return skillRequired; |
|
} |
|
|
|
public String getMastery() { |
|
return mastery; |
|
} |
|
|
|
public short getDefense() { |
|
return defense; |
|
} |
|
|
|
public float getDexPenalty() { |
|
return dexPenalty; |
|
} |
|
|
|
public float getSpeed() { |
|
return speed; |
|
} |
|
|
|
public float getRange() { |
|
return range; |
|
} |
|
|
|
public boolean isStrBased() { |
|
return isStrBased; |
|
} |
|
|
|
public short getMaxDamage() { |
|
return maxDamage; |
|
} |
|
|
|
public short getMinDamage() { |
|
return minDamage; |
|
} |
|
|
|
public Enum.SourceType getDamageType() { |
|
return damageType; |
|
} |
|
|
|
public short getPercentRequired() { |
|
return percentRequired; |
|
} |
|
|
|
public ArrayList<Integer> getAnimations() { |
|
return animations; |
|
} |
|
|
|
public void setAnimations(ArrayList<Integer> animations) { |
|
this.animations = animations; |
|
} |
|
|
|
public ArrayList<Integer> getOffHandAnimations() { |
|
return offHandAnimations; |
|
} |
|
|
|
public void setOffHandAnimations(ArrayList<Integer> offHandAnimations) { |
|
this.offHandAnimations = offHandAnimations; |
|
} |
|
|
|
}
|
|
|