📄 l1pcinventory.java
字号:
if (column >= COL_EARTHMR) {
storage.updateEarthMr(item);
column -= COL_EARTHMR;
}
if (column >= COL_WINDMR) {
storage.updateWindMr(item);
column -= COL_WINDMR;
}
if (column >= COL_ADDSP) {
storage.updateaddSp(item);;
column -= COL_ADDSP;
}
if (column >= COL_ADDHP) {
storage.updateaddHp(item);
column -= COL_ADDHP;
}
if (column >= COL_ADDMP) {
storage.updateaddMp(item);
column -= COL_ADDMP;
}
if (column >= COL_HPR) {
storage.updateHpr(item);
column -= COL_HPR;
}
if (column >= COL_MPR) {
storage.updateMpr(item);
column -= COL_MPR;
}
//飾品強化卷軸
if (column >= COL_REMAINING_TIME) { // 使用可能な残り時間
storage.updateItemRemainingTime(item);
column -= COL_REMAINING_TIME;
}
if (column >= COL_CHARGE_COUNT) { // チャージ数
storage.updateItemChargeCount(item);
column -= COL_CHARGE_COUNT;
}
if (column >= COL_ITEMID) { // 別のアイテムになる場合(便箋を開封したときなど)
storage.updateItemId(item);
column -= COL_ITEMID;
}
if (column >= COL_DELAY_EFFECT) { // 效果ディレイ
storage.updateItemDelayEffect(item);
column -= COL_DELAY_EFFECT;
}
if (column >= COL_COUNT) { // カウント
storage.updateItemCount(item);
column -= COL_COUNT;
}
if (column >= COL_EQUIPPED) { // 装備状態
storage.updateItemEquipped(item);
column -= COL_EQUIPPED;
}
if (column >= COL_ENCHANTLVL) { // エンチャント
storage.updateItemEnchantLevel(item);
column -= COL_ENCHANTLVL;
}
if (column >= COL_IS_ID) { // 確認状態
storage.updateItemIdentified(item);
column -= COL_IS_ID;
}
if (column >= COL_DURABILITY) { // 耐久性
storage.updateItemDurability(item);
column -= COL_DURABILITY;
}
} catch (Exception e) {
_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
}
}
// DBのcharacter_itemsから削除
@Override
public void deleteItem(L1ItemInstance item) {
try {
CharactersItemStorage storage = CharactersItemStorage.create();
storage.deleteItem(item);
} catch (Exception e) {
_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
}
if (item.isEquipped()) {
setEquipped(item, false);
}
_owner.sendPackets(new S_DeleteInventoryItem(item));
_items.remove(item);
if (item.getItem().getWeight() != 0) {
_owner.sendPackets(
new S_PacketBox(S_PacketBox.WEIGHT, getWeight240()));
}
}
// アイテムを装着脱着させる(L1ItemInstanceの変更、補正値の設定、character_itemsの更新、パケット送信まで管理)
public void setEquipped(L1ItemInstance item, boolean equipped) {
setEquipped(item, equipped, false, false);
}
public void setEquipped(L1ItemInstance item, boolean equipped,
boolean loaded, boolean changeWeapon) {
if (item.isEquipped() != equipped) { // 設定値と違う場合だけ処理
L1Item temp = item.getItem();
if (equipped) { // 装着
//TODO 判斷裝備穿著數量 by elfooxx
int count = 0 ;
if ( temp.getType2() ==2) {
for ( L1ItemInstance hasEquip : _owner.getEquipSlot().getArmors() ) {
// 如果要穿的裝備 跟已經穿上的種類一樣 計算穿上的數量
if ( temp.getType() == hasEquip.getItem().getType() )
count ++ ;
// 9為戒指 可以裝兩個
if ( ( temp.getType() == 9 && count >= 2 ) || ( temp.getType() != 9 && count >= 1 ) ) {
_owner.getNetConnection().sendPacket(new S_Disconnect()); // 裝備出異常 斷線
return;
} // if 裝備數量額滿 裝備出異常 斷線 return;
} // for 已經裝備的物品
} // if temp is an armor
// elfooxx 判斷裝備穿著數量 End
item.setEquipped(true);
_owner.getEquipSlot().set(item);
} else { // 脱着
if (!loaded) {
// インビジビリティクローク バルログブラッディクローク装備中でインビジ状態の場合はインビジ状態の解除
if (temp.getItemId() == 20077 || temp.getItemId() == 20062
|| temp.getItemId() == 120077) {
if (_owner.isInvisble()) {
_owner.delInvis();
return;
}
}
}
item.setEquipped(false);
_owner.getEquipSlot().remove(item);
}
if (!loaded) { // 最初の読込時はDBパケット関連の処理はしない
// XXX:意味のないセッター
_owner.setCurrentHp(_owner.getCurrentHp());
_owner.setCurrentMp(_owner.getCurrentMp());
updateItem(item, COL_EQUIPPED);
_owner.sendPackets(new S_OwnCharStatus(_owner));
if (temp.getType2() == 1 && changeWeapon == false) { // 武器の場合はビジュアル更新。ただし、武器の持ち替えで武器を脱着する時は更新しない
_owner.sendPackets(new S_CharVisualUpdate(_owner));
_owner.broadcastPacket(new S_CharVisualUpdate(_owner));
}
// _owner.getNetConnection().saveCharToDisk(_owner); //
// DBにキャラクター情報を書き込む
}
}
}
// 特定のアイテムを装備しているか確認
public boolean checkEquipped(int id) {
for (Object itemObject : _items) {
L1ItemInstance item = (L1ItemInstance) itemObject;
if (item.getItem().getItemId() == id && item.isEquipped()) {
return true;
}
}
return false;
}
// 特定のアイテムを全て装備しているか確認(セットボーナスがあるやつの確認用)
public boolean checkEquipped(int[] ids) {
for (int id : ids) {
if (!checkEquipped(id)) {
return false;
}
}
return true;
}
// 特定のタイプのアイテムを装備している数
public int getTypeEquipped(int type2, int type) {
int equipeCount = 0;
for (Object itemObject : _items) {
L1ItemInstance item = (L1ItemInstance) itemObject;
if (item.getItem().getType2() == type2
&& item.getItem().getType() == type && item.isEquipped()) {
equipeCount++;
}
}
return equipeCount;
}
// 装備している特定のタイプのアイテム
public L1ItemInstance getItemEquipped(int type2, int type) {
L1ItemInstance equipeitem = null;
for (Object itemObject : _items) {
L1ItemInstance item = (L1ItemInstance) itemObject;
if (item.getItem().getType2() == type2
&& item.getItem().getType() == type && item.isEquipped()) {
equipeitem = item;
break;
}
}
return equipeitem;
}
// 装備しているリング
public L1ItemInstance[] getRingEquipped() {
L1ItemInstance equipeItem[] = new L1ItemInstance[2];
int equipeCount = 0;
for (Object itemObject : _items) {
L1ItemInstance item = (L1ItemInstance) itemObject;
if (item.getItem().getType2() == 2
&& item.getItem().getType() == 9 && item.isEquipped()) {
equipeItem[equipeCount] = item;
equipeCount++;
if (equipeCount == 2) {
break;
}
}
}
return equipeItem;
}
// 変身時に装備できない装備を外す
public void takeoffEquip(int polyid) {
takeoffWeapon(polyid);
takeoffArmor(polyid);
}
// 変身時に装備できない武器を外す
private void takeoffWeapon(int polyid) {
if (_owner.getWeapon() == null) { // 素手
return;
}
boolean takeoff = false;
int weapon_type = _owner.getWeapon().getItem().getType();
// 装備出来ない武器を装備してるか?
takeoff = !L1PolyMorph.isEquipableWeapon(polyid, weapon_type);
if (takeoff) {
setEquipped(_owner.getWeapon(), false, false, false);
}
}
// 変身時に装備できない防具を外す
private void takeoffArmor(int polyid) {
L1ItemInstance armor = null;
// ヘルムからイヤリングまでチェックする
for (int type = 0; type <= 12; type++) {
// 装備していて、装備不可の場合は外す
if (getTypeEquipped(2, type) != 0
&& !L1PolyMorph.isEquipableArmor(polyid, type)) {
if (type == 9) { // リングの場合は、両手分外す
armor = getItemEquipped(2, type);
if (armor != null) {
setEquipped(armor, false, false, false);
}
armor = getItemEquipped(2, type);
if (armor != null) {
setEquipped(armor, false, false, false);
}
} else {
armor = getItemEquipped(2, type);
if (armor != null) {
setEquipped(armor, false, false, false);
}
}
}
}
}
// 使用するアローの取得
public L1ItemInstance getArrow() {
return getBullet(0);
}
// 使用するスティングの取得
public L1ItemInstance getSting() {
return getBullet(15);
}
private L1ItemInstance getBullet(int type) {
L1ItemInstance bullet;
int priorityId = 0;
if (type == 0) {
priorityId = _arrowId; // アロー
}
if (type == 15) {
priorityId = _stingId; // スティング
}
if (priorityId > 0) // 優先する弾があるか
{
bullet = findItemId(priorityId);
if (bullet != null) {
return bullet;
} else // なくなっていた場合は優先を消す
{
if (type == 0) {
_arrowId = 0;
}
if (type == 15) {
_stingId = 0;
}
}
}
for (Object itemObject : _items) // 弾を探す
{
bullet = (L1ItemInstance) itemObject;
if (bullet.getItem().getType() == type) {
if (type == 0) {
_arrowId = bullet.getItem().getItemId(); // 優先にしておく
}
if (type == 15) {
_stingId = bullet.getItem().getItemId(); // 優先にしておく
}
return bullet;
}
}
return null;
}
// 優先するアローの設定
public void setArrow(int id) {
_arrowId = id;
}
// 優先するスティングの設定
public void setSting(int id) {
_stingId = id;
}
// 装備によるHP自然回復補正
public int hpRegenPerTick() {
int hpr = 0;
for (Object itemObject : _items) {
L1ItemInstance item = (L1ItemInstance) itemObject;
if (item.isEquipped()) {
hpr += item.getItem().get_addhpr()+ item.getHpr();//飾品強化卷軸
}
}
return hpr;
}
// 装備によるMP自然回復補正
public int mpRegenPerTick() {
int mpr = 0;
for (Object itemObject : _items) {
L1ItemInstance item = (L1ItemInstance) itemObject;
if (item.isEquipped()) {
mpr += item.getItem().get_addmpr()+ item.getMpr();//飾品強化卷軸
}
}
return mpr;
}
public L1ItemInstance CaoPenalty() {
Random random = new Random();
int rnd = random.nextInt(_items.size());
L1ItemInstance penaltyItem = _items.get(rnd);
if (penaltyItem.getItem().getItemId() == L1ItemId.ADENA // アデナ、トレード不可のアイテムは落とさない
|| !penaltyItem.getItem().isTradable()) {
return null;
}
Object[] petlist = _owner.getPetList().values().toArray();
for (Object petObject : petlist) {
if (petObject instanceof L1PetInstance) {
L1PetInstance pet = (L1PetInstance) petObject;
if (penaltyItem.getId() == pet.getItemObjId()) {
return null;
}
}
}
setEquipped(penaltyItem, false);
return penaltyItem;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -