📄 l1attack.java
字号:
if (_arrow != null) {
int add_dmg = _arrow.getItem().getDmgSmall();
if (add_dmg == 0) {
add_dmg = 1;
}
dmg = dmg + _random.nextInt(add_dmg) + 1;
} else if (_weaponId == 190) { // サイハの弓
dmg = dmg + _random.nextInt(15) + 1;
}
} else if (_weaponType == 62) { // ガントトレット
int add_dmg = _sting.getItem().getDmgSmall();
if (add_dmg == 0) {
add_dmg = 1;
}
dmg = dmg + _random.nextInt(add_dmg) + 1;
}
dmg = calcBuffDamage(dmg);
//屬性強化捲軸
dmg = calcAttrWeaponDamage(weapon, dmg);
//~屬性強化捲軸
if (_weaponId == 124) { // バフォメットスタッフ
dmg += L1WeaponSkill.getBaphometStaffDamage(_pc, _target);
} else if (_weaponId == 2 || _weaponId == 200002) { // ダイスダガー
dmg = L1WeaponSkill.getDiceDaggerDamage(_pc, _targetPc, weapon);
} else if (_weaponId == 204 || _weaponId == 100204) { // 真紅のクロスボウ
L1WeaponSkill.giveFettersEffect(_pc, _targetPc);
} else if (_weaponId == 264) { // ライトニングエッジ
dmg += L1WeaponSkill.getLightningEdgeDamage(_pc, _target);
} else if (_weaponId == 260 || _weaponId == 263) { // レイジングウィンド、フリージングランサー
dmg += L1WeaponSkill.getAreaSkillWeaponDamage(_pc, _target,
_weaponId);
} else if (_weaponId == 261) { // アークメイジスタッフ
L1WeaponSkill.giveArkMageDiseaseEffect(_pc, _target);
} else {
dmg += L1WeaponSkill.getWeaponSkillDamage(_pc, _target, _weaponId);
}
if (_weaponType == 0) { // 素手
dmg = (_random.nextInt(5) + 4) / 4;
}
if (_weaponType2 == 17) { // キーリンク
dmg = L1WeaponSkill.getKiringkuDamage(_pc, _target);
}
if (_weaponType != 20 && _weaponType != 62) { // 防具による追加ダメージ
dmg += _pc.getDmgModifierByArmor();
} else {
dmg += _pc.getBowDmgModifierByArmor();
}
if (_weaponType != 20 && _weaponType != 62) {
Object[] dollList = _pc.getDollList().values().toArray(); // マジックドールによる追加ダメージ
for (Object dollObject : dollList) {
L1DollInstance doll = (L1DollInstance) dollObject;
dmg += doll.getDamageByDoll();
}
}
if (_pc.hasSkillEffect(COOKING_2_0_N) // 料理による追加ダメージ
|| _pc.hasSkillEffect(COOKING_2_0_S)
|| _pc.hasSkillEffect(COOKING_3_2_N)
|| _pc.hasSkillEffect(COOKING_3_2_S)) {
if (_weaponType != 20 && _weaponType != 62) {
dmg += 1;
}
}
if (_pc.hasSkillEffect(COOKING_2_3_N) // 料理による追加ダメージ
|| _pc.hasSkillEffect(COOKING_2_3_S)
|| _pc.hasSkillEffect(COOKING_3_0_N)
|| _pc.hasSkillEffect(COOKING_3_0_S)) {
if (_weaponType == 20 || _weaponType == 62) {
dmg += 1;
}
}
dmg -= _targetPc.getDamageReductionByArmor(); // 防具によるダメージ軽減
Object[] targetDollList = _targetPc.getDollList().values().toArray(); // マジックドールによるダメージ軽減
for (Object dollObject : targetDollList) {
L1DollInstance doll = (L1DollInstance) dollObject;
dmg -= doll.getDamageReductionByDoll();
}
if (_targetPc.hasSkillEffect(COOKING_1_0_S) // 料理によるダメージ軽減
|| _targetPc.hasSkillEffect(COOKING_1_1_S)
|| _targetPc.hasSkillEffect(COOKING_1_2_S)
|| _targetPc.hasSkillEffect(COOKING_1_3_S)
|| _targetPc.hasSkillEffect(COOKING_1_4_S)
|| _targetPc.hasSkillEffect(COOKING_1_5_S)
|| _targetPc.hasSkillEffect(COOKING_1_6_S)
|| _targetPc.hasSkillEffect(COOKING_2_0_S)
|| _targetPc.hasSkillEffect(COOKING_2_1_S)
|| _targetPc.hasSkillEffect(COOKING_2_2_S)
|| _targetPc.hasSkillEffect(COOKING_2_3_S)
|| _targetPc.hasSkillEffect(COOKING_2_4_S)
|| _targetPc.hasSkillEffect(COOKING_2_5_S)
|| _targetPc.hasSkillEffect(COOKING_2_6_S)
|| _targetPc.hasSkillEffect(COOKING_3_0_S)
|| _targetPc.hasSkillEffect(COOKING_3_1_S)
|| _targetPc.hasSkillEffect(COOKING_3_2_S)
|| _targetPc.hasSkillEffect(COOKING_3_3_S)
|| _targetPc.hasSkillEffect(COOKING_3_4_S)
|| _targetPc.hasSkillEffect(COOKING_3_5_S)
|| _targetPc.hasSkillEffect(COOKING_3_6_S)) {
dmg -= 5;
}
if (_targetPc.hasSkillEffect(COOKING_1_7_S) // デザートによるダメージ軽減
|| _targetPc.hasSkillEffect(COOKING_2_7_S)
|| _targetPc.hasSkillEffect(COOKING_3_7_S)) {
dmg -= 5;
}
if (_targetPc.hasSkillEffect(REDUCTION_ARMOR)) {
int targetPcLvl = _targetPc.getLevel();
if (targetPcLvl < 50) {
targetPcLvl = 50;
}
dmg -= (targetPcLvl - 50) / 5 + 1;
}
if (_targetPc.hasSkillEffect(DRAGON_SKIN)) {
dmg -= 2;
}
if (_targetPc.hasSkillEffect(IMMUNE_TO_HARM)) {
dmg /= 2;
}
if (_targetPc.hasSkillEffect(ABSOLUTE_BARRIER)) {
dmg = 0;
}
if (_targetPc.hasSkillEffect(ICE_LANCE)) {
dmg = 0;
}
if (_targetPc.hasSkillEffect(FREEZING_BLIZZARD)) {
dmg = 0;
}
if (_targetPc.hasSkillEffect(EARTH_BIND)) {
dmg = 0;
}
if (dmg <= 0) {
_isHit = false;
_drainHp = 0; // ダメージ無しの場合は吸収による回復はしない
}
//增加吸血吸魔武器設定 by eric1300460
calcStaffOfHp(dmg);
//~增加吸血吸魔武器設定 by eric1300460
return (int) dmg;
}
// ●●●● プレイヤー から NPC へのダメージ算出 ●●●●
private int calcPcNpcDamage() {
int weaponMaxDamage = 0;
if (_targetNpc.getNpcTemplate().get_size().equalsIgnoreCase("small")
&& _weaponSmall > 0) {
weaponMaxDamage = _weaponSmall;
} else if (_targetNpc.getNpcTemplate().get_size().equalsIgnoreCase(
"large")
&& _weaponLarge > 0) {
weaponMaxDamage = _weaponLarge;
}
int weaponDamage = 0;
if (_weaponType == 58 && (_random.nextInt(100) + 1) <=
_weaponDoubleDmgChance) { // クリティカルヒット
weaponDamage = weaponMaxDamage;
_pc.sendPackets(new S_SkillSound(_pc.getId(), 3671));
_pc.broadcastPacket(new S_SkillSound(_pc.getId(), 3671));
} else if (_weaponType == 0 || _weaponType == 20 || _weaponType == 62) { // 素手、弓、ガントトレット
weaponDamage = 0;
} else {
weaponDamage = _random.nextInt(weaponMaxDamage) + 1;
}
if (_pc.hasSkillEffect(SOUL_OF_FLAME)) {
if (_weaponType != 20 && _weaponType != 62) {
weaponDamage = weaponMaxDamage;
}
}
int weaponTotalDamage = weaponDamage + _weaponAddDmg + _weaponEnchant;
if (_pc.hasSkillEffect(DOUBLE_BRAKE)
&& (_weaponType == 54 || _weaponType == 58)) {
if ((_random.nextInt(100) + 1) <= 33) {
weaponTotalDamage *= 2;
}
}
weaponTotalDamage += calcMaterialBlessDmg(); // 銀祝福ダメージボーナス
if (_weaponType == 54 && (_random.nextInt(100) + 1) <=
_weaponDoubleDmgChance) { // ダブルヒット
weaponTotalDamage *= 2;
_pc.sendPackets(new S_SkillSound(_pc.getId(), 3398));
_pc.broadcastPacket(new S_SkillSound(_pc.getId(), 3398));
}
if (_weaponId == 262 && _random.nextInt(100) + 1 <= 75) { // ディストラクション装備かつ成功確率(暫定)75%
weaponTotalDamage += calcDestruction(weaponTotalDamage);
}
double dmg;
if (_weaponType != 20 && _weaponType != 62) {
dmg = weaponTotalDamage + _statusDamage + _pc.getDmgup()
+ _pc.getOriginalDmgup();
} else {
dmg = weaponTotalDamage + _statusDamage + _pc.getBowDmgup()
+ _pc.getOriginalBowDmgup();
}
if (_weaponType == 20) { // 弓
if (_arrow != null) {
int add_dmg = 0;
if (_targetNpc.getNpcTemplate().get_size().
equalsIgnoreCase("large")) {
add_dmg = _arrow.getItem().getDmgLarge();
} else {
add_dmg = _arrow.getItem().getDmgSmall();
}
if (add_dmg == 0) {
add_dmg = 1;
}
if (_targetNpc.getNpcTemplate().is_hard()) {
add_dmg /= 2;
}
dmg = dmg + _random.nextInt(add_dmg) + 1;
} else if (_weaponId == 190) { // サイハの弓
dmg = dmg + _random.nextInt(15) + 1;
}
} else if (_weaponType == 62) { // ガントトレット
int add_dmg = 0;
if (_targetNpc.getNpcTemplate().get_size().
equalsIgnoreCase("large")) {
add_dmg = _sting.getItem().getDmgLarge();
} else {
add_dmg = _sting.getItem().getDmgSmall();
}
if (add_dmg == 0) {
add_dmg = 1;
}
dmg = dmg + _random.nextInt(add_dmg) + 1;
}
dmg = calcBuffDamage(dmg);
//屬性強化捲軸
dmg = calcAttrWeaponDamage(weapon, dmg);
//~屬性強化捲軸
if (_weaponId == 124) { // バフォメットスタッフ
dmg += L1WeaponSkill.getBaphometStaffDamage(_pc, _target);
} else if (_weaponId == 204 || _weaponId == 100204) { // 真紅のクロスボウ
L1WeaponSkill.giveFettersEffect(_pc, _targetNpc);
} else if (_weaponId == 264) { // ライトニングエッジ
dmg += L1WeaponSkill.getLightningEdgeDamage(_pc, _target);
} else if (_weaponId == 260 || _weaponId == 263) { // レイジングウィンド、フリージングランサー
dmg += L1WeaponSkill.getAreaSkillWeaponDamage(_pc, _target,
_weaponId);
} else if (_weaponId == 261) { // アークメイジスタッフ
L1WeaponSkill.giveArkMageDiseaseEffect(_pc, _target);
} else {
dmg += L1WeaponSkill.getWeaponSkillDamage(_pc, _target, _weaponId);
}
if (_weaponType == 0) { // 素手
dmg = (_random.nextInt(5) + 4) / 4;
}
if (_weaponType2 == 17) { // キーリンク
dmg = L1WeaponSkill.getKiringkuDamage(_pc, _target);
}
if (_weaponType != 20 && _weaponType != 62) { // 防具による追加ダメージ
dmg += _pc.getDmgModifierByArmor();
} else {
dmg += _pc.getBowDmgModifierByArmor();
}
if (_weaponType != 20 && _weaponType != 62) {
Object[] dollList = _pc.getDollList().values().toArray(); // マジックドールによる追加ダメージ
for (Object dollObject : dollList) {
L1DollInstance doll = (L1DollInstance) dollObject;
dmg += doll.getDamageByDoll();
}
}
if (_pc.hasSkillEffect(COOKING_2_0_N) // 料理による追加ダメージ
|| _pc.hasSkillEffect(COOKING_2_0_S)
|| _pc.hasSkillEffect(COOKING_3_2_N)
|| _pc.hasSkillEffect(COOKING_3_2_S)) {
if (_weaponType != 20 && _weaponType != 62) {
dmg += 1;
}
}
if (_pc.hasSkillEffect(COOKING_2_3_N) // 料理による追加ダメージ
|| _pc.hasSkillEffect(COOKING_2_3_S)
|| _pc.hasSkillEffect(COOKING_3_0_N)
|| _pc.hasSkillEffect(COOKING_3_0_S)) {
if (_weaponType == 20 || _weaponType == 62) {
dmg += 1;
}
}
dmg -= calcNpcDamageReduction();
// プレイヤーからペット、サモンに攻撃
boolean isNowWar = false;
int castleId = L1CastleLocation.getCastleIdByArea(_targetNpc);
if (castleId > 0) {
isNowWar = WarTimeController.getInstance().isNowWar(castleId);
}
if (!isNowWar) {
if (_targetNpc instanceof L1PetInstance) {
dmg /= 8;
}
if (_targetNpc instanceof L1SummonInstance) {
L1SummonInstance summon = (L1SummonInstance) _targetNpc;
if (summon.isExsistMaster()) {
dmg /= 8;
}
}
}
if (_targetNpc.hasSkillEffect(ICE_LANCE)) {
dmg = 0;
}
if (_targetNpc.hasSkillEffect(FREEZING_BLIZZARD)) {
dmg = 0;
}
if (_targetNpc.hasSkillEffect(EARTH_BIND)) {
dmg = 0;
}
if (dmg <= 0) {
_isHit = false;
_drainHp = 0; // ダメージ無しの場合は吸収による回復はしない
}
//增加吸血吸魔武器設定 by eric1300460
calcStaffOfHp(dmg);
//~增加吸血吸魔武器設定 by eric1300460
return (int) dmg;
}
//屬性強化捲軸
private double calcAttrWeaponDamage(L1ItemInstance weapon, double dmg) {
int attr = weapon.getAttribute();
int attrlvl = weapon.getAttributeLevel();
double attrdmg = 0;
double targetAttrDefence = 0;
double mrResist = _target.getMr();
double attrResist = 1.0;
if(attr != 0 && attrlvl > 0){ // 屬性の武器
// ①和受攻擊者的屬性無關,會增加傷害。
switch(attrlvl){
case 1:
attrdmg += 3;
break;
case 2:
attrdmg += 5;
break;
case 3:
attrdmg += 7;
break;
}
// ②強化的屬性若是對方所懼怕的屬性,則能提升更高的傷害。
// ③受攻擊者若提升相同屬性的抗性,則相對減少屬性傷害。
if (weapon.getAttribute() == L1Skills.ATTR_EARTH) {
targetAttrDefence = _target.getEarth();
} else if (weapon.getAttribute() == L1Skills.ATTR_FIRE) {
targetAttrDefence = _target.getFire();
} else if (weapon.getAttribute() == L1Skills.ATTR_WATER) {
targetAttrDefence = _target.getWater();
} else if (weapon.getAttribute() == L1Skills.ATTR_WIND) {
targetAttrDefence = _target.getWind();
}
attrResist -= targetAttrDefence / 100;
if(attrResist < 0){
attrResist = 0;
}
attrdmg *= attrResist;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -