📄 l1iteminstance.java
字号:
public int getMpr() {
return _Mpr;
}
public void setMpr(int i) {
_Mpr = i;
}
private int _Hpr = 0;
public int getHpr() {
return _Hpr;
}
public void setHpr(int i) {
_Hpr = i;
}
private int _addHp = 0;
public int getaddHp() {
return _addHp;
}
public void setaddHp(int i) {
_addHp = i;
}
private int _addMp = 0;
public int getaddMp() {
return _addMp;
}
public void setaddMp(int i) {
_addMp = i;
}
private int _addSp = 0;
public int getaddSp() {
return _addSp;
}
public void setaddSp(int i) {
_addSp = i;
}
//飾品強化卷軸
//裝備保護卷軸 by missu0524
private boolean proctect = false;
public boolean getproctect() {
return proctect;
}
public void setproctect(boolean i) {
proctect = i;
}
//~裝備保護卷軸 by missu0524
//屬性強化捲軸
/**
* @return
* 0:無, <br>1:地, <br>2:火, <br>4:水, <br>8:風
*/
public int getAttribute() {
return _attribute;
}
public void setAttribute(int attribute) {
_attribute = attribute;
}
public int getAttributeLevel() {
return _attributeLevel;
}
public void setAttributeLevel(int attributeLevel) {
_attributeLevel = attributeLevel;
}
public String weaponAttrName(){
String name = "";
int lvl = getAttributeLevel();
switch(getAttribute()){
case 1:
if(lvl == 1){
name = "地";
}else if(lvl == 2){
name = "崩裂";
}else if(lvl == 3){
name = "地靈";
}
break;
case 2:
if(lvl == 1){
name = "火";
}else if(lvl == 2){
name = "爆炎";
}else if(lvl == 3){
name = "火靈";
}
break;
case 4:
if(lvl == 1){
name = "水";
}else if(lvl == 2){
name = "海嘯";
}else if(lvl == 3){
name = "水靈";
}
break;
case 8:
if(lvl == 1){
name = "風";
}else if(lvl == 2){
name = "暴風";
}else if(lvl == 3){
name = "風靈";
}
break;
default:
break;
}
return name;
}
//~屬性強化捲軸
/**
* アイテムの状態からサーバーパケットで利用する形式のバイト列を生成し、返す。
*/
public byte[] getStatusBytes() {
int itemType2 = getItem().getType2();
int itemId = getItemId();
BinaryOutputStream os = new BinaryOutputStream();
if (itemType2 == 0) { // etcitem
switch (getItem().getType()) {
case 2: // light
os.writeC(22); // 明るさ
os.writeH(getItem().getLightRange());
break;
case 7: // food
os.writeC(21);
// 栄養
os.writeH(getItem().getFoodVolume());
break;
case 0: // arrow
case 15: // sting
os.writeC(1); // 打撃値
os.writeC(getItem().getDmgSmall());
os.writeC(getItem().getDmgLarge());
break;
default:
os.writeC(23); // 材質
break;
}
os.writeC(getItem().getMaterial());
os.writeD(getWeight());
} else if (itemType2 == 1 || itemType2 == 2) { // weapon | armor
if (itemType2 == 1) { // weapon
// 打撃値
os.writeC(1);
os.writeC(getItem().getDmgSmall());
os.writeC(getItem().getDmgLarge());
os.writeC(getItem().getMaterial());
os.writeD(getWeight());
} else if (itemType2 == 2) { // armor
// AC
os.writeC(19);
int ac = ((L1Armor) getItem()).get_ac();
if (ac < 0) {
ac = ac - ac - ac;
}
os.writeC(ac);
os.writeC(getItem().getMaterial());
os.writeD(getWeight());
}
// 強化数
//飾品強化卷軸
if (getEnchantLevel() != 0) {
os.writeC(2);
if (getItem().getType2() !=2){
os.writeC(getEnchantLevel());
} else if (getItem().getType2() == 2
&&getItem().getType() == 8
||getItem().getType() == 9
||getItem().getType() == 10
||getItem().getType() == 12){
os.writeC(0);
} else {
os.writeC(getEnchantLevel());
}
}
//飾品強化卷軸
// 損傷度
if (get_durability() != 0) {
os.writeC(3);
os.writeC(get_durability());
}
// 両手武器
if (getItem().isTwohandedWeapon()) {
os.writeC(4);
}
// 攻撃成功
if (itemType2 == 1) { // weapon
if (getItem().getHitModifier() != 0) {
os.writeC(5);
os.writeC(getItem().getHitModifier());
}
} else if (itemType2 == 2) { // armor
if (getItem().getHitModifierByArmor() != 0) {
os.writeC(5);
os.writeC(getItem().getHitModifierByArmor());
}
}
// 追加打撃
if (itemType2 == 1) { // weapon
if (getItem().getDmgModifier() != 0) {
os.writeC(6);
os.writeC(getItem().getDmgModifier());
}
} else if (itemType2 == 2) { // armor
if (getItem().getDmgModifierByArmor() != 0) {
os.writeC(6);
os.writeC(getItem().getDmgModifierByArmor());
}
}
// 使用可能
int bit = 0;
bit |= getItem().isUseRoyal() ? 1 : 0;
bit |= getItem().isUseKnight() ? 2 : 0;
bit |= getItem().isUseElf() ? 4 : 0;
bit |= getItem().isUseMage() ? 8 : 0;
bit |= getItem().isUseDarkelf() ? 16 : 0;
bit |= getItem().isUseDragonknight() ? 32 : 0;
bit |= getItem().isUseIllusionist() ? 64 : 0;
// bit |= getItem().isUseHiPet() ? 64 : 0; // ハイペット
os.writeC(7);
os.writeC(bit);
// 弓の命中率補正
if (getItem().getBowHitModifierByArmor() != 0) {
os.writeC(24);
os.writeC(getItem().getBowHitModifierByArmor());
}
// 弓のダメージ補正
if (getItem().getBowDmgModifierByArmor() != 0) {
os.writeC(35);
os.writeC(getItem().getBowDmgModifierByArmor());
}
// MP吸収 //eric1300460
if (itemId == 126 || itemId == 127 || getItem().get_getMp()>0) { // マナスタッフ、鋼鉄のマナスタッフ
os.writeC(16);
}
// HP吸収 //eric1300460
if (itemId == 262 || getItem().get_getHp()>0) { // ディストラクション
os.writeC(34);
}
// STR~CHA
if (getItem().get_addstr() != 0) {
os.writeC(8);
os.writeC(getItem().get_addstr());
}
if (getItem().get_adddex() != 0) {
os.writeC(9);
os.writeC(getItem().get_adddex());
}
if (getItem().get_addcon() != 0) {
os.writeC(10);
os.writeC(getItem().get_addcon());
}
if (getItem().get_addwis() != 0) {
os.writeC(11);
os.writeC(getItem().get_addwis());
}
if (getItem().get_addint() != 0) {
os.writeC(12);
os.writeC(getItem().get_addint());
}
if (getItem().get_addcha() != 0) {
os.writeC(13);
os.writeC(getItem().get_addcha());
}
/*
// HP, MP
if (getItem().get_addhp() != 0) {
os.writeC(14);
os.writeH(getItem().get_addhp());
}
if (getItem().get_addmp() != 0) {
os.writeC(32);
os.writeC(getItem().get_addmp());
}
*/
// MR
if (getMr() != 0) {
os.writeC(15);
os.writeH(getMr());
}
/*
// SP(魔力)
if (getItem().get_addsp() != 0) {
os.writeC(17);
os.writeC(getItem().get_addsp());
}
*/
// ヘイスト
if (getItem().isHasteItem()) {
os.writeC(18);
}
/*
// 火の属性
if (getItem().get_defense_fire() != 0) {
os.writeC(27);
os.writeC(getItem().get_defense_fire());
}
// 水の属性
if (getItem().get_defense_water() != 0) {
os.writeC(28);
os.writeC(getItem().get_defense_water());
}
// 風の属性
if (getItem().get_defense_wind() != 0) {
os.writeC(29);
os.writeC(getItem().get_defense_wind());
}
// 地の属性
if (getItem().get_defense_earth() != 0) {
os.writeC(30);
os.writeC(getItem().get_defense_earth());
}
*/
//屬性強化捲軸
// 武器屬性
if(itemType2 == 1){
if(getAttribute() == 1){
os.writeC(30);
os.writeC(getAttributeLevel());
}else if(getAttribute() == 2){
os.writeC(27);
os.writeC(getAttributeLevel());
}else if(getAttribute() == 4){
os.writeC(28);
os.writeC(getAttributeLevel());
}else if(getAttribute() == 8){
os.writeC(29);
os.writeC(getAttributeLevel());
}
}
//~屬性強化捲軸
//飾品強化卷軸
if (getItem().get_addhp() != 0 || getaddHp() != 0) {
os.writeC(14);
os.writeH(getItem().get_addhp() + getaddHp());
}
if (getItem().get_addmp() != 0 || getaddMp() != 0) {
os.writeC(32);
os.writeC(getItem().get_addmp() + getaddMp());
}
//飾品強化卷軸
//飾品強化卷軸
if (getItem().get_addsp() != 0 || getaddSp() != 0) {
os.writeC(17);
os.writeC(getItem().get_addsp() + getaddSp());
}
//飾品強化卷軸
//飾品強化卷軸
if (getItem().get_defense_fire() != 0 || getFireMr() != 0) {
os.writeC(27);
os.writeC(getItem().get_defense_fire() + getFireMr());
}
if (getItem().get_defense_water() != 0 || getWaterMr() != 0) {
os.writeC(28);
os.writeC(getItem().get_defense_water() + getWaterMr());
}
if (getItem().get_defense_wind() != 0 || getWindMr() != 0) {
os.writeC(29);
os.writeC(getItem().get_defense_wind() + getWindMr());
}
if (getItem().get_defense_earth() != 0 || getEarthMr() != 0) {
os.writeC(30);
os.writeC(getItem().get_defense_earth() + getEarthMr());
}
//飾品強化卷軸
// 凍結耐性
if (getItem().get_regist_freeze() != 0) {
os.writeC(15);
os.writeH(getItem().get_regist_freeze());
os.writeC(33);
os.writeC(1);
}
// 石化耐性
if (getItem().get_regist_stone() != 0) {
os.writeC(15);
os.writeH(getItem().get_regist_stone());
os.writeC(33);
os.writeC(2);
}
// 睡眠耐性
if (getItem().get_regist_sleep() != 0) {
os.writeC(15);
os.writeH(getItem().get_regist_sleep());
os.writeC(33);
os.writeC(3);
}
// 暗闇耐性
if (getItem().get_regist_blind() != 0) {
os.writeC(15);
os.writeH(getItem().get_regist_blind());
os.writeC(33);
os.writeC(4);
}
// スタン耐性
if (getItem().get_regist_stun() != 0) {
os.writeC(15);
os.writeH(getItem().get_regist_stun());
os.writeC(33);
os.writeC(5);
}
// ホールド耐性
if (getItem().get_regist_sustain() != 0) {
os.writeC(15);
os.writeH(getItem().get_regist_sustain());
os.writeC(33);
os.writeC(6);
}
// 幸運
// if (getItem.getLuck() != 0) {
// os.writeC(20);
// os.writeC(val);
// }
// 種類
// if (getItem.getDesc() != 0) {
// os.writeC(25);
// os.writeH(val); // desc.tbl ID
// }
// レベル
// if (getItem.getLevel() != 0) {
// os.writeC(26);
// os.writeH(val);
// }
}
return os.getBytes();
}
class EnchantTimer extends TimerTask {
public EnchantTimer() {
}
@Override
public void run() {
try {
int type = getItem().getType();
int type2 = getItem().getType2();
int itemId = getItem().getItemId();
if (_pc != null && _pc.getInventory().checkItem(itemId)) {
if (type == 2 && type2 == 2 && isEquipped()) {
_pc.addAc(3);
_pc.sendPackets(new S_OwnCharStatus(_pc));
}
}
setAcByMagic(0);
setDmgByMagic(0);
setHolyDmgByMagic(0);
setHitByMagic(0);
_pc.sendPackets(new S_ServerMessage(308, getLogName()));
_isRunning = false;
_timer = null;
} catch (Exception e) {
}
}
}
private int _acByMagic = 0;
public int getAcByMagic() {
return _acByMagic;
}
public void setAcByMagic(int i) {
_acByMagic = i;
}
private int _dmgByMagic = 0;
public int getDmgByMagic() {
return _dmgByMagic;
}
public void setDmgByMagic(int i) {
_dmgByMagic = i;
}
private int _holyDmgByMagic = 0;
public int getHolyDmgByMagic() {
return _holyDmgByMagic;
}
public void setHolyDmgByMagic(int i) {
_holyDmgByMagic = i;
}
private int _hitByMagic = 0;
public int getHitByMagic() {
return _hitByMagic;
}
public void setHitByMagic(int i) {
_hitByMagic = i;
}
public void setSkillArmorEnchant(L1PcInstance pc, int skillId, int skillTime) {
int type = getItem().getType();
int type2 = getItem().getType2();
if (_isRunning) {
_timer.cancel();
int itemId = getItem().getItemId();
if (pc != null && pc.getInventory().checkItem(itemId)) {
if (type == 2 && type2 == 2 && isEquipped()) {
pc.addAc(3);
pc.sendPackets(new S_OwnCharStatus(pc));
}
}
setAcByMagic(0);
_isRunning = false;
_timer = null;
}
if (type == 2 && type2 == 2 && isEquipped()) {
pc.addAc(-3);
pc.sendPackets(new S_OwnCharStatus(pc));
}
setAcByMagic(3);
_pc = pc;
_timer = new EnchantTimer();
(new Timer()).schedule(_timer, skillTime);
_isRunning = true;
}
public void setSkillWeaponEnchant(L1PcInstance pc, int skillId,
int skillTime) {
if (getItem().getType2() != 1) {
return;
}
if (_isRunning) {
_timer.cancel();
setDmgByMagic(0);
setHolyDmgByMagic(0);
setHitByMagic(0);
_isRunning = false;
_timer = null;
}
switch(skillId) {
case L1SkillId.HOLY_WEAPON:
setHolyDmgByMagic(1);
setHitByMagic(1);
break;
case L1SkillId.ENCHANT_WEAPON:
setDmgByMagic(2);
break;
case L1SkillId.BLESS_WEAPON:
setDmgByMagic(2);
setHitByMagic(2);
break;
case L1SkillId.SHADOW_FANG:
setDmgByMagic(5);
break;
default:
break;
}
_pc = pc;
_timer = new EnchantTimer();
(new Timer()).schedule(_timer, skillTime);
_isRunning = true;
}
private int _itemOwnerId = 0;
public int getItemOwnerId() {
return _itemOwnerId;
}
public void setItemOwnerId(int i) {
_itemOwnerId = i;
}
public void startItemOwnerTimer(L1PcInstance pc) {
setItemOwnerId(pc.getId());
L1ItemOwnerTimer timer = new L1ItemOwnerTimer(this, 10000);
timer.begin();
}
private L1EquipmentTimer _equipmentTimer;
public void startEquipmentTimer(L1PcInstance pc) {
if (getRemainingTime() > 0) {
_equipmentTimer = new L1EquipmentTimer(pc, this);
Timer timer = new Timer(true);
timer.scheduleAtFixedRate(_equipmentTimer, 1000, 1000);
}
}
public void stopEquipmentTimer(L1PcInstance pc) {
if (getRemainingTime() > 0) {
_equipmentTimer.cancel();
_equipmentTimer = null;
}
}
private boolean _isNowLighting = false;
public boolean isNowLighting() {
return _isNowLighting;
}
public void setNowLighting(boolean flag) {
_isNowLighting = flag;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -