📄 l1equipmentslot.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.model;
import java.util.ArrayList;
import l1j.server.server.datatables.SkillsTable;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.skill.L1SkillId;
import l1j.server.server.serverpackets.S_Ability;
import l1j.server.server.serverpackets.S_AddSkill;
import l1j.server.server.serverpackets.S_DelSkill;
import l1j.server.server.serverpackets.S_RemoveObject;
import l1j.server.server.serverpackets.S_Invis;
import l1j.server.server.serverpackets.S_SPMR;
import l1j.server.server.serverpackets.S_SkillBrave;
import l1j.server.server.serverpackets.S_SkillHaste;
import l1j.server.server.templates.L1Item;
import static l1j.server.server.model.skill.L1SkillId.*;
public class L1EquipmentSlot {
private L1PcInstance _owner;
/**
* 效果中のセットアイテム
*/
private ArrayList<L1ArmorSet> _currentArmorSet;
private L1ItemInstance _weapon;
private ArrayList<L1ItemInstance> _armors;
public L1EquipmentSlot(L1PcInstance owner) {
_owner = owner;
_armors = new ArrayList<L1ItemInstance>();
_currentArmorSet = new ArrayList<L1ArmorSet>();
}
private void setWeapon(L1ItemInstance weapon) {
_owner.setWeapon(weapon);
_owner.setCurrentWeapon(weapon.getItem().getType1());
weapon.startEquipmentTimer(_owner);
_weapon = weapon;
}
public L1ItemInstance getWeapon() {
return _weapon;
}
private void setArmor(L1ItemInstance armor) {
L1Item item = armor.getItem();
int itemId = armor.getItem().getItemId();
//飾品強化卷軸
_owner.addEarth(item.get_defense_earth() + armor.getEarthMr());
_owner.addWind(item.get_defense_wind() + armor.getWindMr());
_owner.addWater(item.get_defense_water() + armor.getWaterMr());
_owner.addFire(item.get_defense_fire() + armor.getFireMr());
//飾品強化卷軸
_owner.addAc(item.get_ac() - armor.getEnchantLevel() - armor
.getAcByMagic());
_owner.addDamageReductionByArmor(item.getDamageReduction());
_owner.addWeightReduction(item.getWeightReduction());
_owner.addHitModifierByArmor(item.getHitModifierByArmor());
_owner.addDmgModifierByArmor(item.getDmgModifierByArmor());
_owner.addBowHitModifierByArmor(item.getBowHitModifierByArmor());
_owner.addBowDmgModifierByArmor(item.getBowDmgModifierByArmor());
/*
_owner.addEarth(item.get_defense_earth());
_owner.addWind(item.get_defense_wind());
_owner.addWater(item.get_defense_water());
_owner.addFire(item.get_defense_fire());
*/
_owner.addRegistStun(item.get_regist_stun());
_owner.addRegistStone(item.get_regist_stone());
_owner.addRegistSleep(item.get_regist_sleep());
_owner.add_regist_freeze(item.get_regist_freeze());
_owner.addRegistSustain(item.get_regist_sustain());
_owner.addRegistBlind(item.get_regist_blind());
_armors.add(armor);
for (L1ArmorSet armorSet : L1ArmorSet.getAllSet()) {
if (armorSet.isPartOfSet(itemId) && armorSet.isValid(_owner)) {
if (armor.getItem().getType2() == 2
&& armor.getItem().getType() == 9) { // ring
if (!armorSet.isEquippedRingOfArmorSet(_owner)) {
armorSet.giveEffect(_owner);
_currentArmorSet.add(armorSet);
}
} else {
armorSet.giveEffect(_owner);
_currentArmorSet.add(armorSet);
}
}
}
if (itemId == 20077 || itemId == 20062 || itemId == 120077) {
if (!_owner.hasSkillEffect(L1SkillId.INVISIBILITY)) {
_owner.killSkillEffectTimer(L1SkillId.BLIND_HIDING);
_owner.setSkillEffect(L1SkillId.INVISIBILITY, 0);
_owner.sendPackets(new S_Invis(_owner.getId(), 1));
_owner.broadcastPacket(new S_RemoveObject(_owner));
}
}
if (itemId == 20288) { // ROTC
_owner.sendPackets(new S_Ability(1, true));
}
if (itemId == 20383) { // 騎馬用ヘルム
if (armor.getChargeCount() != 0) {
armor.setChargeCount(armor.getChargeCount() - 1);
_owner.getInventory().updateItem(armor, L1PcInventory
.COL_CHARGE_COUNT);
}
}
armor.startEquipmentTimer(_owner);
}
public ArrayList<L1ItemInstance> getArmors() {
return _armors;
}
private void removeWeapon(L1ItemInstance weapon) {
int itemId = weapon.getItem().getItemId();
_owner.setWeapon(null);
_owner.setCurrentWeapon(0);
weapon.stopEquipmentTimer(_owner);
_weapon = null;
if (_owner.hasSkillEffect(L1SkillId.COUNTER_BARRIER)) {
_owner.removeSkillEffect(L1SkillId.COUNTER_BARRIER);
}
}
private void removeArmor(L1ItemInstance armor) {
L1Item item = armor.getItem();
int itemId = armor.getItem().getItemId();
_owner.addAc(-(item.get_ac() - armor.getEnchantLevel() - armor
.getAcByMagic()));
_owner.addDamageReductionByArmor(-item.getDamageReduction());
_owner.addWeightReduction(-item.getWeightReduction());
_owner.addHitModifierByArmor(-item.getHitModifierByArmor());
_owner.addDmgModifierByArmor(-item.getDmgModifierByArmor());
_owner.addBowHitModifierByArmor(-item.getBowHitModifierByArmor());
_owner.addBowDmgModifierByArmor(-item.getBowDmgModifierByArmor());
//飾品強化卷軸
_owner.addEarth(-item.get_defense_earth() - armor.getEarthMr());
_owner.addWind(-item.get_defense_wind() - armor.getWindMr());
_owner.addWater(-item.get_defense_water() - armor.getWaterMr());
_owner.addFire(-item.get_defense_fire() - armor.getFireMr());
//飾品強化卷軸
/*
_owner.addEarth(-item.get_defense_earth());
_owner.addWind(-item.get_defense_wind());
_owner.addWater(-item.get_defense_water());
_owner.addFire(-item.get_defense_fire());
*/
_owner.addRegistStun(-item.get_regist_stun());
_owner.addRegistStone(-item.get_regist_stone());
_owner.addRegistSleep(-item.get_regist_sleep());
_owner.add_regist_freeze(-item.get_regist_freeze());
_owner.addRegistSustain(-item.get_regist_sustain());
_owner.addRegistBlind(-item.get_regist_blind());
for (L1ArmorSet armorSet : L1ArmorSet.getAllSet()) {
if (armorSet.isPartOfSet(itemId)
&& _currentArmorSet.contains(armorSet)
&& !armorSet.isValid(_owner)) {
armorSet.cancelEffect(_owner);
_currentArmorSet.remove(armorSet);
}
}
if (itemId == 20077 || itemId == 20062 || itemId == 120077) {
_owner.delInvis(); // インビジビリティ状態解除
}
if (itemId == 20288) { // ROTC
_owner.sendPackets(new S_Ability(1, false));
}
armor.stopEquipmentTimer(_owner);
_armors.remove(armor);
}
public void set(L1ItemInstance equipment) {
L1Item item = equipment.getItem();
if (item.getType2() == 0) {
return;
}
//飾品強化卷軸
_owner.addMaxHp(item.get_addhp() + equipment.getaddHp());
_owner.addMaxMp(item.get_addmp() + equipment.getaddMp());
//飾品強化卷軸
_owner.addStr(item.get_addstr());
_owner.addCon(item.get_addcon());
_owner.addDex(item.get_adddex());
_owner.addInt(item.get_addint());
_owner.addWis(item.get_addwis());
if (item.get_addwis() != 0) {
_owner.resetBaseMr();
}
_owner.addCha(item.get_addcha());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -