📄 itemtable.java
字号:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package l1j.server.server.datatables;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import l1j.server.L1DatabaseFactory;
import l1j.server.server.IdFactory;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.templates.L1Armor;
import l1j.server.server.templates.L1EtcItem;
import l1j.server.server.templates.L1Item;
import l1j.server.server.templates.L1Weapon;
import l1j.server.server.utils.SQLUtil;
public class ItemTable {
private static final long serialVersionUID = 1L;
private static l1j.eric.EricLogger _log = l1j.eric.EricLogger.getLogger2(ItemTable.class.getName());
private static final Map<String, Integer> _armorTypes = new HashMap<String, Integer>();
private static final Map<String, Integer> _weaponTypes = new HashMap<String, Integer>();
private static final Map<String, Integer> _weaponId = new HashMap<String, Integer>();
private static final Map<String, Integer> _materialTypes = new HashMap<String, Integer>();
private static final Map<String, Integer> _etcItemTypes = new HashMap<String, Integer>();
private static final Map<String, Integer> _useTypes = new HashMap<String, Integer>();
private static ItemTable _instance;
private L1Item _allTemplates[];
private final Map<Integer, L1EtcItem> _etcitems;
private final Map<Integer, L1Armor> _armors;
private final Map<Integer, L1Weapon> _weapons;
static {
_etcItemTypes.put("arrow", new Integer(0));
_etcItemTypes.put("wand", new Integer(1));
_etcItemTypes.put("light", new Integer(2));
_etcItemTypes.put("gem", new Integer(3));
_etcItemTypes.put("totem", new Integer(4));
_etcItemTypes.put("firecracker", new Integer(5));
_etcItemTypes.put("potion", new Integer(6));
_etcItemTypes.put("food", new Integer(7));
_etcItemTypes.put("scroll", new Integer(8));
_etcItemTypes.put("questitem", new Integer(9));
_etcItemTypes.put("spellbook", new Integer(10));
_etcItemTypes.put("petitem", new Integer(11));
_etcItemTypes.put("other", new Integer(12));
_etcItemTypes.put("material", new Integer(13));
_etcItemTypes.put("event", new Integer(14));
_etcItemTypes.put("sting", new Integer(15));
_etcItemTypes.put("treasure_box", new Integer(16));
//商店捲軸 by eric1300460
_etcItemTypes.put("scrollshop", new Integer(17));
//~商店捲軸
_useTypes.put("none", new Integer(-1)); // 使用不可能
_useTypes.put("normal", new Integer(0));
_useTypes.put("weapon", new Integer(1));
_useTypes.put("armor", new Integer(2));
// _useTypes.put("wand1", new Integer(3));
// _useTypes.put("wand", new Integer(4));
// ワンドを振るアクションをとる(C_RequestExtraCommandが送られる)
_useTypes.put("spell_long", new Integer(5)); // 地面 / オブジェクト選択(遠距離)
_useTypes.put("ntele", new Integer(6));
_useTypes.put("identify", new Integer(7));
_useTypes.put("res", new Integer(8));
_useTypes.put("letter", new Integer(12));
_useTypes.put("letter_w", new Integer(13));
_useTypes.put("choice", new Integer(14));
_useTypes.put("instrument", new Integer(15));
_useTypes.put("sosc", new Integer(16));
_useTypes.put("spell_short", new Integer(17)); // 地面 / オブジェクト選択(近距離)
_useTypes.put("T", new Integer(18));
_useTypes.put("cloak", new Integer(19));
_useTypes.put("glove", new Integer(20));
_useTypes.put("boots", new Integer(21));
_useTypes.put("helm", new Integer(22));
_useTypes.put("ring", new Integer(23));
_useTypes.put("amulet", new Integer(24));
_useTypes.put("shield", new Integer(25));
_useTypes.put("guarder", new Integer(25));
_useTypes.put("dai", new Integer(26));
_useTypes.put("zel", new Integer(27));
_useTypes.put("blank", new Integer(28));
_useTypes.put("btele", new Integer(29));
_useTypes.put("spell_buff", new Integer(30)); // オブジェクト選択(遠距離)
// Ctrlを押さないとパケットが飛ばない?
_useTypes.put("ccard", new Integer(31));
_useTypes.put("ccard_w", new Integer(32));
_useTypes.put("vcard", new Integer(33));
_useTypes.put("vcard_w", new Integer(34));
_useTypes.put("wcard", new Integer(35));
_useTypes.put("wcard_w", new Integer(36));
_useTypes.put("belt", new Integer(37));
// _useTypes.put("spell_long2", new Integer(39)); // 地面 / オブジェクト選択(遠距離)
// 5と同じ?
_useTypes.put("earring", new Integer(40));
_useTypes.put("fishing_rod", new Integer(42));
_useTypes.put("del", new Integer(46));
_armorTypes.put("none", new Integer(0));
_armorTypes.put("helm", new Integer(1));
_armorTypes.put("armor", new Integer(2));
_armorTypes.put("T", new Integer(3));
_armorTypes.put("cloak", new Integer(4));
_armorTypes.put("glove", new Integer(5));
_armorTypes.put("boots", new Integer(6));
_armorTypes.put("shield", new Integer(7));
_armorTypes.put("amulet", new Integer(8));
_armorTypes.put("ring", new Integer(9));
_armorTypes.put("belt", new Integer(10));
_armorTypes.put("ring2", new Integer(11));
_armorTypes.put("earring", new Integer(12));
_armorTypes.put("guarder", new Integer(13));
_weaponTypes.put("sword", new Integer(1));
_weaponTypes.put("dagger", new Integer(2));
_weaponTypes.put("tohandsword", new Integer(3));
_weaponTypes.put("bow", new Integer(4));
_weaponTypes.put("spear", new Integer(5));
_weaponTypes.put("blunt", new Integer(6));
_weaponTypes.put("staff", new Integer(7));
_weaponTypes.put("throwingknife", new Integer(8));
_weaponTypes.put("arrow", new Integer(9));
_weaponTypes.put("gauntlet", new Integer(10));
_weaponTypes.put("claw", new Integer(11));
_weaponTypes.put("edoryu", new Integer(12));
_weaponTypes.put("singlebow", new Integer(13));
_weaponTypes.put("singlespear", new Integer(14));
_weaponTypes.put("tohandblunt", new Integer(15));
_weaponTypes.put("tohandstaff", new Integer(16));
_weaponTypes.put("kiringku", new Integer(17));
_weaponTypes.put("chainsword", new Integer(18));
_weaponId.put("sword", new Integer(4));
_weaponId.put("dagger", new Integer(46));
_weaponId.put("tohandsword", new Integer(50));
_weaponId.put("bow", new Integer(20));
_weaponId.put("blunt", new Integer(11));
_weaponId.put("spear", new Integer(24));
_weaponId.put("staff", new Integer(40));
_weaponId.put("throwingknife", new Integer(2922));
_weaponId.put("arrow", new Integer(66));
_weaponId.put("gauntlet", new Integer(62));
_weaponId.put("claw", new Integer(58));
_weaponId.put("edoryu", new Integer(54));
_weaponId.put("singlebow", new Integer(20));
_weaponId.put("singlespear", new Integer(24));
_weaponId.put("tohandblunt", new Integer(11));
_weaponId.put("tohandstaff", new Integer(40));
_weaponId.put("kiringku", new Integer(58));
_weaponId.put("chainsword", new Integer(24));
_materialTypes.put("none", new Integer(0));
_materialTypes.put("liquid", new Integer(1));
_materialTypes.put("web", new Integer(2));
_materialTypes.put("vegetation", new Integer(3));
_materialTypes.put("animalmatter", new Integer(4));
_materialTypes.put("paper", new Integer(5));
_materialTypes.put("cloth", new Integer(6));
_materialTypes.put("leather", new Integer(7));
_materialTypes.put("wood", new Integer(8));
_materialTypes.put("bone", new Integer(9));
_materialTypes.put("dragonscale", new Integer(10));
_materialTypes.put("iron", new Integer(11));
_materialTypes.put("steel", new Integer(12));
_materialTypes.put("copper", new Integer(13));
_materialTypes.put("silver", new Integer(14));
_materialTypes.put("gold", new Integer(15));
_materialTypes.put("platinum", new Integer(16));
_materialTypes.put("mithril", new Integer(17));
_materialTypes.put("blackmithril", new Integer(18));
_materialTypes.put("glass", new Integer(19));
_materialTypes.put("gemstone", new Integer(20));
_materialTypes.put("mineral", new Integer(21));
_materialTypes.put("oriharukon", new Integer(22));
}
public static ItemTable getInstance() {
if (_instance == null) {
_instance = new ItemTable();
}
return _instance;
}
private ItemTable() {
_etcitems = allEtcItem();
_weapons = allWeapon();
_armors = allArmor();
buildFastLookupTable();
}
private Map<Integer, L1EtcItem> allEtcItem() {
Map<Integer, L1EtcItem> result = new HashMap<Integer, L1EtcItem>();
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
L1EtcItem item = null;
try {
con = L1DatabaseFactory.getInstance().getConnection();
pstm = con.prepareStatement("select * from etcitem");
rs = pstm.executeQuery();
while (rs.next()) {
item = new L1EtcItem();
item.setItemId(rs.getInt("item_id"));
item.setName(rs.getString("name"));
item.setNameId(rs.getString("name_id"));
item.setType((_etcItemTypes
.get(rs.getString("item_type"))).intValue());
item.setUseType(_useTypes
.get(rs.getString("use_type")).intValue());
// item.setType1(0); // 使わない
item.setType2(0);
item.setMaterial((_materialTypes
.get(rs.getString("material"))).intValue());
item.setWeight(rs.getInt("weight"));
item.setGfxId(rs.getInt("invgfx"));
item.setGroundGfxId(rs.getInt("grdgfx"));
item.setItemDescId(rs.getInt("itemdesc_id"));
item.setMinLevel(rs.getInt("min_lvl"));
item.setMaxLevel(rs.getInt("max_lvl"));
item.setBless(rs.getInt("bless"));
item.setTradable(rs.getInt("trade") == 0 ? true : false);
item.setCantDelete(rs.getInt("cant_delete") == 1 ?
true : false);
item.setDmgSmall(rs.getInt("dmg_small"));
item.setDmgLarge(rs.getInt("dmg_large"));
item.set_stackable(rs.getInt("stackable") == 1 ? true : false);
item.setMaxChargeCount(rs.getInt("max_charge_count"));
item.set_locx(rs.getInt("locx"));
item.set_locy(rs.getInt("locy"));
item.set_mapid(rs.getShort("mapid"));
item.set_delayid(rs.getInt("delay_id"));
item.set_delaytime(rs.getInt("delay_time"));
item.set_delayEffect(rs.getInt("delay_effect"));
item.setFoodVolume(rs.getInt("food_volume"));
item.setToBeSavedAtOnce(
(rs.getInt("save_at_once") == 1) ? true : false);
result.put(new Integer(item.getItemId()), item);
}
} catch (NullPointerException e) {
_log.log(Level.SEVERE, new StringBuilder()
.append(item.getName())
.append("(" + item.getItemId() + ")")
.append("の読み込みに失敗しました。").toString());
} catch (SQLException e) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -