當前位置:天堂私服123>天堂私服架設> 武器傷害能力值加成及負面效果

武器傷害能力值加成及負面效果

    發表時間:2011-4-19

資料庫WEAPON_SKILL新增欄位
`gfx_id` int(11) unsigned NOT NULL DEFAULT '0',
`gfx_id_target` int(1) unsigned NOT NULL DEFAULT '1',
`ref_str` int(6) NOT NULL DEFAULT '0',
`ref_int` int(6) NOT NULL DEFAULT '0',
`ref_wis` int(6) NOT NULL DEFAULT '0',
`ref_dex` int(6) NOT NULL DEFAULT '0',
`ref_con` int(6) NOT NULL DEFAULT '0',
`ref_cha` int(6) NOT NULL DEFAULT '0',
WeaponSkillTable.java
  1. private void fillWeaponSkillTable(ResultSet rs) throws SQLException {
  2.       while (rs.next()) {
  3.          int weaponId = rs.getInt("weapon_id");
  4.          int probability = rs.getInt("probability");
  5.          int fixDamage = rs.getInt("fix_damage");
  6.          int randomDamage = rs.getInt("random_damage");
  7.          int area = rs.getInt("area");
  8.          int skillId = rs.getInt("skill_id");
  9.          int skillTime = rs.getInt("skill_time");
  10.          int effectId = rs.getInt("effect_id");
  11.          int effectTarget = rs.getInt("effect_target");
  12.          boolean isArrowType = rs.getBoolean("arrow_type");
  13.          int attr = rs.getInt("attr");
複製代碼
下面新增
  1.          int attr = rs.getInt("attr");
  2.          int gfxId = rs.getInt("gfx_id");
  3.          boolean gfxIdTarget = rs.getBoolean("gfx_id_target");
  4.          int refStr = rs.getInt("ref_str");
  5.          int refInt = rs.getInt("ref_int");
  6.          int refWis = rs.getInt("ref_wis");
  7.          int refCon = rs.getInt("ref_con");
  8.          int refDex = rs.getInt("ref_dex");
  9.          int refCha = rs.getInt("ref_cha");
  10.          
  11.          
  12.          
  13.          L1WeaponSkill weaponSkill = new L1WeaponSkill(weaponId, probability,
  14.                fixDamage, randomDamage, area, skillId, skillTime, effectId,
  15.                effectTarget, isArrowType, attr,
  16.                gfxId,gfxIdTarget,refStr,refInt,refWis,refDex,refCon,
  17.                refCha);
  18.          _weaponIdIndex.put(weaponId, weaponSkill);
  19.       }
  20.       _log.config("武器技能名單 " + _weaponIdIndex.size() + "件");
  21.    }
  22.    public L1WeaponSkill getTemplate(int weaponId) {
  23.       return _weaponIdIndex.get(weaponId);
  24.    }
  25. }
複製代碼
L1Weapon.java
一.能力值加成
  1. /*
  2. * This program is free software; you can redistribute it and/or modify
  3. * it under the terms of the GNU General Public License as published by
  4. * the Free Software Foundation; either version 2, or (at your option)
  5. * any later version.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10. * GNU General Public License for more details.
  11. *
  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15. * 02111-1307, USA.
  16. *
  17. * http://www.gnu.org/copyleft/gpl.html
  18. */
  19. package l1j.server.server.model;
  20. import java.util.Random;
  21. import java.util.logging.Logger;
  22. import l1j.server.server.model.L1Poison2;
  23. import l1j.server.server.ActionCodes;
  24. import l1j.server.server.datatables.SkillsTable;
  25. import l1j.server.server.datatables.WeaponSkillTable;
  26. import l1j.server.server.model.L1Character;
  27. import l1j.server.server.model.Instance.L1ItemInstance;
  28. import l1j.server.server.model.Instance.L1MonsterInstance;
  29. import l1j.server.server.model.Instance.L1NpcInstance;
  30. import l1j.server.server.model.Instance.L1PcInstance;
  31. import l1j.server.server.model.Instance.L1PetInstance;
  32. import l1j.server.server.model.Instance.L1SummonInstance;
  33. import l1j.server.server.model.poison.L1DamagePoison;
  34. import l1j.server.server.model.skill.L1SkillUse;
  35. import l1j.server.server.serverpackets.S_CurseBlind;
  36. import l1j.server.server.serverpackets.S_DoActionGFX;
  37. import l1j.server.server.serverpackets.S_EffectLocation;
  38. import l1j.server.server.serverpackets.S_Paralysis;
  39. import l1j.server.server.serverpackets.S_ServerMessage;
  40. import l1j.server.server.serverpackets.S_SkillHaste;
  41. import l1j.server.server.serverpackets.S_SkillSound;
  42. import l1j.server.server.serverpackets.S_UseAttackSkill;
  43. import l1j.server.server.templates.L1Skills;
  44. import static l1j.server.server.model.skill.L1SkillId.*;
  45. // Referenced classes of package l1j.server.server.model:
  46. // L1PcInstance
  47. public class L1WeaponSkill {
  48.    private static Logger _log = Logger
  49.          .getLogger(L1WeaponSkill.class.getName());
  50.    private static Random _random = new Random();
  51.    private int _weaponId;
  52.    private int _probability;
  53.    private int _fixDamage;
  54.    private int _randomDamage;
  55.    private int _area;
  56.    private int _skillId;
  57.    private int _skillTime;
  58.    private int _effectId;
  59.    private int _effectTarget; // エフェクトの対象 0:相手 1:自分
  60.    private boolean _isArrowType;
  61.    private int _attr;
  62.    
  63.    //修改weapon_skill table 增加顯示圖案
  64.    private int _gfxId;
  65.    private boolean _gfxIdTarget;
  66.    public int getGfxId() {
  67.       return _gfxId;
  68.    }
  69.    
  70.    public boolean getGfxIdTarget() {
  71.       return _gfxIdTarget;
  72.    }
  73.    
  74.    //增加武器技能欄位新增 by eric1300460
  75.    private int _refStr = 0;
  76.    private int _refInt = 0;
  77.    private int _refWis = 0;
  78.    private int _refDex = 0;
  79.    private int _refCon = 0;
  80.    private int _refCha = 0;
  81.    
  82.    public void setRefStr(int int1) {
  83.       _refStr=int1;
  84.    }
  85.    public int getRefStr() {
  86.       return _refStr;
  87.    }
  88.    
  89.    public void setRefInt(int int1) {
  90.       _refInt=int1;
  91.    }
  92.    public int getRefInt() {
  93.       return _refInt;
  94.    }
  95.    public void setRefWis(int int1) {
  96.       _refWis=int1;
  97.    }
  98.    public int getRefWis() {
  99.       return _refWis;
  100.    }
  101.    public void setRefDex(int int1) {
  102.       _refDex=int1;
  103.    }
  104.    public int getRefDex() {
  105.       return _refDex;
  106.    }
  107.    public void setRefCon(int int1) {
  108.       _refCon=int1;
  109.    }
  110.    public int getRefCon() {
  111.       return _refCon;
  112.    }
  113.    public void setRefCha(int int1) {
  114.       _refCha=int1;
  115.    }
  116.    public int getRefCha() {
  117.       return _refCha;
  118.    }
  119.    
  120.    
  121.    }
  122.    //~增加武器技能欄位新增  by eric1300460
  123.    
  124.    public L1WeaponSkill(int weaponId, int probability, int fixDamage,
  125.          int randomDamage, int area, int skillId, int skillTime,
  126.          int effectId, int effectTarget, boolean isArrowType, int attr,
  127.          int gfxId,boolean gfxIdTarget,int refStr,int refInt,
  128.          int refWis, int refDex,int refCon,int refCha,
  129.          ) {
  130.       
  131.       _gfxId=gfxId;
  132.       _gfxIdTarget=gfxIdTarget;
  133.       //~修改weapon_skill table 增加顯示圖案
  134.       //增加武器技能欄位新增  by eric1300460
  135.       _refStr = refStr;
  136.       _refInt = refInt;
  137.       _refWis = refWis;
  138.       _refDex = refDex;
  139.       _refCon = refCon;
  140.       _refCha = refCha;
  141.    
  142.       //~增加武器技能欄位新增  by eric1300460
  143.       _weaponId = weaponId;
  144.       _probability = probability;
  145.       _fixDamage = fixDamage;
  146.       _randomDamage = randomDamage;
  147.       _area = area;
  148.       _skillId = skillId;
  149.       _skillTime = skillTime;
  150.       _effectId = effectId;
  151.       _effectTarget = effectTarget;
  152.       _isArrowType = isArrowType;
  153.       _attr = attr;
  154.    }
  155.    public int getWeaponId() {
  156.       return _weaponId;
  157.    }
  158.    public int getProbability() {
  159.       return _probability;
  160.    }
  161.    public int getFixDamage() {
  162.       return _fixDamage;
  163.    }
  164.    public int getRandomDamage() {
  165.       return _randomDamage;
  166.    }
  167.    public int getArea() {
  168.       return _area;
  169.    }
  170.    public int getSkillId() {
  171.       return _skillId;
  172.    }
  173.    public int getSkillTime() {
  174.       return _skillTime;
  175.    }
  176.    public int getEffectId() {
  177.       return _effectId;
  178.    }
  179.    public int getEffectTarget() {
  180.       return _effectTarget;
  181.    }
  182.    public boolean isArrowType() {
  183.       return _isArrowType;
  184.    }
  185.    public int getAttr() {
  186.       return _attr;
  187.    }
  188.    public static double getWeaponSkillDamage(L1PcInstance pc, L1Character cha,
  189.          int weaponId) {
  190.       L1WeaponSkill weaponSkill = WeaponSkillTable.getInstance().getTemplate(
  191.             weaponId);
  192.       if (pc == null || cha == null || weaponSkill == null) {
  193.          return 0;
  194.       }
  195.       int chance = _random.nextInt(100) + 1;
  196.       if (weaponSkill.getProbability() < chance) {
  197.          return 0;
  198.       }
  199.       int skillId = weaponSkill.getSkillId();
  200.       if (skillId != 0) {
  201.          L1Skills skill = SkillsTable.getInstance().getTemplate(skillId);
  202.          if (skill != null && skill.getTarget().equals("buff")) {
  203.             if (!isFreeze(cha)) { // 凍結状態orカウンターマジック中
  204.                cha.setSkillEffect(skillId, weaponSkill
  205.                      .getSkillTime() * 1000);
  206.             }
  207.          }
  208.       }
  209.       int effectId = weaponSkill.getEffectId();
  210.       if (effectId != 0) {
  211.          int chaId = 0;
  212.          if (weaponSkill.getEffectTarget() == 0) {
  213.             chaId = cha.getId();
  214.          } else {
  215.             chaId = pc.getId();
  216.          }
  217.          boolean isArrowType = weaponSkill.isArrowType();
  218.          if (!isArrowType) {
  219.             pc.sendPackets(new S_SkillSound(chaId, effectId));
  220.             pc.broadcastPacket(new S_SkillSound(chaId, effectId));
  221.          } else {
  222.             S_UseAttackSkill packet = new S_UseAttackSkill(pc, cha.getId(),
  223.                   effectId, cha.getX(), cha.getY(), ActionCodes
  224.                   .ACTION_Attack, false);
  225.             pc.sendPackets(packet);
  226.             pc.broadcastPacket(packet);
  227.          }
  228.       }
  229.       double damage = 0;
  230.       int randomDamage = weaponSkill.getRandomDamage();
  231.       if (randomDamage != 0) {
  232.          damage = _random.nextInt(randomDamage);
  233.       }
  234.       damage += weaponSkill.getFixDamage();
  235.       int area = weaponSkill.getArea();
  236.       if (area > 0 || area == -1) { // 範囲の場合
  237.          for (L1Object object : L1World.getInstance()
  238.                .getVisibleObjects(cha, area)) {
  239.             if (object == null) {
  240.                continue;
  241.             }
  242.             if (!(object instanceof L1Character)) {
  243.                continue;
  244.             }
  245.             if (object.getId() == pc.getId()) {
  246.                continue;
  247.             }
  248.             if (object.getId() == cha.getId()) { // 攻撃対象はL1Attackで処理するため除外
  249.                continue;
  250.             }
  251.             // 攻撃対象がMOBの場合は、範囲内のMOBにのみ当たる
  252.             // 攻撃対象がPC,Summon,Petの場合は、範囲内のPC,Summon,Pet,MOBに当たる
  253.             if (cha instanceof L1MonsterInstance) {
  254.                if (!(object instanceof L1MonsterInstance)) {
  255.                   continue;
  256.                }
  257.             }
  258.             if (cha instanceof L1PcInstance
  259.                   || cha instanceof L1SummonInstance
  260.                   || cha instanceof L1PetInstance) {
  261.                if (!(object instanceof L1PcInstance
  262.                      || object instanceof L1SummonInstance
  263.                      || object instanceof L1PetInstance
  264.                      || object instanceof L1MonsterInstance)) {
  265.                   continue;
  266.                }
  267.             }
  268.             damage = calcDamageReduction(pc, (L1Character) object, damage,
  269.                   weaponSkill.getAttr());
  270.             if (damage <= 0) {
  271.                continue;
  272.             }
  273.             if (object instanceof L1PcInstance) {
  274.                L1PcInstance targetPc = (L1PcInstance) object;
  275.                targetPc.sendPackets(new S_DoActionGFX(targetPc.getId(),
  276.                      ActionCodes.ACTION_Damage));
  277.                targetPc.broadcastPacket(new S_DoActionGFX(targetPc.getId(),
  278.                      ActionCodes.ACTION_Damage));
  279.                targetPc.receiveDamage(pc, (int) damage, false);
  280.             } else if (object instanceof L1SummonInstance
  281.                   || object instanceof L1PetInstance
  282.                   || object instanceof L1MonsterInstance) {
  283.                L1NpcInstance targetNpc = (L1NpcInstance) object;
  284.                targetNpc.broadcastPacket(new S_DoActionGFX(targetNpc
  285.                      .getId(), ActionCodes.ACTION_Damage));
  286.                targetNpc.receiveDamage(pc, (int) damage);
  287.             }
  288.          }
  289.       }
  290.       
  291.       //修改weapon_skill table 增加顯示圖案
  292.       if (weaponSkill.getGfxId() != 0) {
  293.          if (weaponSkill.getGfxIdTarget()) {// 目標顯示
  294.             pc.sendPackets(new S_SkillSound(cha.getId(), weaponSkill
  295.                   .getGfxId()));
  296.             pc.broadcastPacket(new S_SkillSound(cha.getId(), weaponSkill
  297.                   .getGfxId()));
  298.          } else {// 自己身上顯示
  299.             pc.sendPackets(new S_SkillSound(pc.getId(), weaponSkill
  300.                   .getGfxId()));
  301.             pc.broadcastPacket(new S_SkillSound(pc.getId(), weaponSkill
  302.                   .getGfxId()));
  303.          }
  304.       }
  305.       //~修改weapon_skill table 增加顯示圖案
複製代碼
下面新增
  1. if (randomDamage != 0) { // 隨機傷害
  2.          damage =_random.nextInt(randomDamage);
  3.          }
  4.          if (weaponSkill.getRefStr() != 0) { // 力量加成
  5.          byte Str = (byte) pc.getStr();
  6.          damage += Str * weaponSkill.getRefStr();
  7.          }
  8.          if (weaponSkill.getRefDex() != 0) { // 敏捷加成
  9.          byte Dex = (byte) pc.getDex();
  10.          damage += Dex * weaponSkill.getRefDex();
  11.          }
  12.          if (weaponSkill.getRefInt() != 0) { // 智力加成
  13.          byte Int = (byte) pc.getInt();
  14.          damage += Int * weaponSkill.getRefInt();
  15.          }
  16.          if (weaponSkill.getRefWis() != 0) { // 精神加成
  17.          byte Wis = (byte) pc.getWis();
  18.          damage += Wis * weaponSkill.getRefWis();
  19.          }
  20.          int skillTime = weaponSkill.getSkillTime();
  21.          if (skillTime > 0) {
  22.          skillTime = skillTime * 1000;
  23.          }      
複製代碼
二.負面效果
能力值加成的程式碼下面,新增
  1. switch(weaponSkill.getSkillId())
  2.          {
  3.             case 1: {//衝暈效果
  4.                //int fettersTime = 8000;
  5.                /*if (isFreeze(cha)) { // 凍結状態orカウンターマジック中
  6.                   return;
  7.                }
  8.                if ((random.nextInt(100) + 1) <= 5) {*/
  9.                   L1EffectSpawn.getInstance().spawnEffect(81162, skillTime,
  10.                         cha.getX(), cha.getY(), cha.getMapId());
  11.                   if (cha instanceof L1PcInstance) {
  12.                      L1PcInstance targetPc = (L1PcInstance) cha;
  13.                      targetPc.setSkillEffect(SHOCK_STUN, skillTime);
  14.                      targetPc.sendPackets(new S_SkillSound(targetPc.getId(), 4184));
  15.                      targetPc.broadcastPacket(new S_SkillSound(targetPc.getId(),
  16.                            4184));
  17.                      targetPc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_STUN,
  18.                            true));
  19.                   } else if (cha instanceof L1MonsterInstance
  20.                         || cha instanceof L1SummonInstance
  21.                         || cha instanceof L1PetInstance) {
  22.                      L1NpcInstance npc = (L1NpcInstance) cha;
  23.                      npc.setSkillEffect(SHOCK_STUN, skillTime);
  24.                      npc.broadcastPacket(new S_SkillSound(npc.getId(), 4184));
  25.                      npc.setParalyzed(true);
  26.                   }
  27.                }            
  28.             break;
  29.             case 2: {//束縛效果
  30.                L1EffectSpawn.getInstance().spawnEffect(81182, skillTime,
  31.                      cha.getX(), cha.getY(), cha.getMapId());
  32.                if (cha instanceof L1PcInstance) {
  33.                   L1PcInstance targetPc = (L1PcInstance) cha;
  34.                   targetPc.setSkillEffect(STATUS_FREEZE, skillTime);
  35.                   targetPc.sendPackets(new S_SkillSound(targetPc.getId(), 4184));
  36.                   targetPc.broadcastPacket(new S_SkillSound(targetPc.getId(),
  37.                         4184));
  38.                   targetPc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_BIND,
  39.                         true));
  40.                } else if (cha instanceof L1MonsterInstance
  41.                      || cha instanceof L1SummonInstance
  42.                      || cha instanceof L1PetInstance) {
  43.                   L1NpcInstance npc = (L1NpcInstance) cha;
  44.                   npc.setSkillEffect(STATUS_FREEZE, skillTime);
  45.                   npc.broadcastPacket(new S_SkillSound(npc.getId(), 4184));
  46.                   npc.setParalyzed(true);
  47.                }
  48.             }            
  49.             break;
  50.             case 3: {//冰凍效果
  51.                L1EffectSpawn.getInstance().spawnEffect(81168, skillTime,
  52.                      cha.getX(), cha.getY(), cha.getMapId());
  53.                if (cha instanceof L1PcInstance) {
  54.                   L1PcInstance targetPc = (L1PcInstance) cha;
  55.                   targetPc.setSkillEffect(ICE_LANCE, skillTime);
  56.                   targetPc.sendPackets(new S_SkillSound(targetPc.getId(), 4184));
  57.                   targetPc.broadcastPacket(new S_SkillSound(targetPc.getId(),
  58.                         4184));
  59.                   targetPc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_FREEZE,
  60.                         true));
  61.                } else if (cha instanceof L1MonsterInstance
  62.                      || cha instanceof L1SummonInstance
  63.                      || cha instanceof L1PetInstance) {
  64.                   L1NpcInstance npc = (L1NpcInstance) cha;
  65.                   npc.setSkillEffect(ICE_LANCE, skillTime);
  66.                   npc.broadcastPacket(new S_SkillSound(npc.getId(), 4184));
  67.                   npc.setParalyzed(true);
  68.                }
  69.             }            
  70.             break;
  71.             case 4: {//沉默效果
  72.                cha.setSkillEffect(64, skillTime);
  73.                pc.sendPackets(new S_SkillSound(cha.getId(), 2177));
  74.                pc.broadcastPacket(new S_SkillSound(cha.getId(), 2177));
  75.             }
  76.             break;
  77.             case 5: {//藥霜效果
  78.                cha.setSkillEffect(71, skillTime);
  79.                pc.sendPackets(new S_SkillSound(cha.getId(), 2232));
  80.                pc.broadcastPacket(new S_SkillSound(cha.getId(), 2232));
  81.             }
  82.             break;
  83.             case 6: {//緩速效果
  84.                if (cha instanceof L1PcInstance) {
  85.                   L1PcInstance player = (L1PcInstance) cha;
  86.                   if (player.getHasteItemEquipped() > 0) {
  87.                      return weaponSkill.getFixDamage() + damage;
  88.                   }
  89.                }
  90.                if (cha.getMoveSpeed() == 0) {
  91.                   if (cha instanceof L1PcInstance) {
  92.                      L1PcInstance player = (L1PcInstance) cha;
  93.                      player.sendPackets(new S_SkillHaste(player.getId(), 2, skillTime));
  94.                   }
  95.                   cha.broadcastPacket(new S_SkillHaste(cha.getId(), 2, skillTime));
  96.                   cha.setMoveSpeed(2);
  97.                   cha.setSkillEffect(29, skillTime);
  98.                } else if (cha.getMoveSpeed() == 1) {
  99.                   int skillNum = 0;
  100.                   if (cha.hasSkillEffect(43)) {
  101.                      skillNum = 43;
  102.                   } else if (cha.hasSkillEffect(54)) {
  103.                      skillNum = 54;
  104.                   } else if (cha.hasSkillEffect(1001)) {
  105.                      skillNum = 1001;
  106.                   }
  107.                   if (skillNum != 0) {
  108.                      cha.removeSkillEffect(skillNum);
  109.                      cha.removeSkillEffect(29);
  110.                      cha.setMoveSpeed(0);
  111.                      return weaponSkill.getFixDamage() + damage;
  112.                   }
  113.                } else if (cha.getMoveSpeed() == 2) {
  114.                   cha.setSkillEffect(29, skillTime);
  115.                }
  116.                //pc.sendPackets(new S_SkillSound(cha.getId(), 752));
  117.                //pc.broadcastPacket(new S_SkillSound(cha.getId(), 752));
  118.             }
  119.             break;
  120.             case 7: {//毒咒效果
  121.                L1DamagePoison.doInfection(pc, cha, 2000, 30); // 2秒30點傷害
  122.                //pc.sendPackets(new S_SkillSound(cha.getId(), 745));
  123.                //pc.broadcastPacket(new S_SkillSound(cha.getId(), 745));
  124.             }
  125.             break;
  126.             case 8: {//黑暗之影
  127.                if (cha instanceof L1PcInstance) {
  128.                   L1PcInstance player = (L1PcInstance) cha;
  129.                   if (player.hasSkillEffect(1012)) {
  130.                      player.sendPackets(new S_CurseBlind(2));
  131.                   } else {
  132.                      player.sendPackets(new S_CurseBlind(1));
  133.                   }
  134.                }
  135.                cha.setSkillEffect(40, skillTime);
  136.                //pc.sendPackets(new S_SkillSound(cha.getId(), 2175));
  137.                //pc.broadcastPacket(new S_SkillSound(cha.getId(), 2175));
  138.             }
  139.             break;
  140.             case 9: {//壞物術
  141.                if (cha instanceof L1PcInstance) {
  142.                   L1PcInstance player = (L1PcInstance) cha;
  143.                   L1ItemInstance weapon = player.getWeapon();
  144.                   if (weapon != null) {
  145.                      int weaponDamage = _random.nextInt(pc
  146.                            .getInt() / 3) + 1;
  147.                      // \f1????%0?損傷????。
  148.                      player.sendPackets(new S_ServerMessage(268, weapon.getLogName()));
  149.                      player.getInventory().receiveDamage(weapon,
  150.                            weaponDamage);
  151.                   }
  152.                } else {
  153.                   ((L1NpcInstance) cha).setWeaponBreaked(true);
  154.                }
  155.                pc.sendPackets(new S_SkillSound(cha.getId(), 172));
  156.                pc.broadcastPacket(new S_SkillSound(cha.getId(), 172));
  157.             }
  158.             break;
  159.             /*case 10: {//吸血鬼之吻
  160.                int drainHp = (weaponSkill.getFixDamage() + damage) / 2;
  161.                if (cha.getCurrentHp() < drainHp) {
  162.                   drainHp = cha.getCurrentHp();
  163.                }
  164.             
  165.                if ((pc.getCurrentHp() + drainHp) > pc.getMaxHp()) {
  166.                   pc.setCurrentHp(pc.getMaxHp());
  167.                } else {
  168.                   pc.setCurrentHp(pc.getCurrentHp() + drainHp);
  169.                }
  170.                //S_UseAttackSkill packet = new S_UseAttackSkill(pc, cha, 236, false);
  171.                //pc.sendPackets(packet);
  172.                //pc.broadcastPacket(packet);
  173.             }
  174.             break;*/
  175.             case 11: {//魔力奪取
  176.                //pc.sendPackets(new S_SkillSound(cha.getId(), 2171));
  177.                //pc.broadcastPacket(new S_SkillSound(cha.getId(), 2171));
  178.                int radMp = _random.nextInt(8) + 3;
  179.                int drainMana = radMp + (pc.getInt() / 2);
  180.                if (cha.getCurrentMp() < drainMana) {
  181.                   drainMana = cha.getCurrentMp();
  182.                   cha.setCurrentMp(0);
  183.                } else {
  184.                   cha.setCurrentMp(cha.getCurrentMp() - drainMana);
  185.                }
  186.             
  187.                if ((pc.getCurrentMp() + drainMana) > pc.getMaxMp()) {
  188.                   pc.setCurrentMp(pc.getMaxMp());
  189.                } else {
  190.                   pc.setCurrentMp(pc.getCurrentMp() + drainMana);
  191.                }
  192.             }
  193.             break;
  194.             case 12: {//弱化術
  195.                if (cha.hasSkillEffect(47)) {
  196.                   cha.setSkillEffect(47, skillTime);
  197.                } else {
  198.                   cha.addDmgup(-5);
  199.                   cha.addHitup(-1);
  200.                   cha.setSkillEffect(47, skillTime);
  201.                }
  202.                pc.sendPackets(new S_SkillSound(cha.getId(), 2228));
  203.                         pc.broadcastPacket(new S_SkillSound(cha.getId(), 2228));
  204.             }
  205.             break;
  206.             case 13: {//疾病術
  207.                if (cha.hasSkillEffect(56)) {
  208.                   cha.setSkillEffect(56, skillTime);
  209.                } else {
  210.                   cha.addHitup(-6);
  211.                   cha.addAc(12);
  212.                   cha.setSkillEffect(56, skillTime);
  213.                }
  214.                pc.sendPackets(new S_SkillSound(cha.getId(), 2230));
  215.                pc.broadcastPacket(new S_SkillSound(cha.getId(), 2230));
  216.             }
  217.             break;
  218.                      }
  219.          //負面效果判斷 end
  220.       return calcDamageReduction(pc, cha, damage, weaponSkill.getAttr());
  221.    }
複製代碼
skillId 負面效果
skillTime 負面時效

負面效果:
1 = 衝暈效果
2 = 束縛效果
3 = 冰凍效果
4 = 沉默效果
5 = 藥霜效果
6 = 緩速效果
7 = 毒咒效果
8 = 黑暗之影
9 = 壞物術
10 = 吸血鬼之吻
11 = 魔力奪取
12 = 弱化術
13 = 疾病術

前一篇:教你如何創驚喜箱與對話NPC     後一篇: 超簡單DIY增加新地圖


天堂私服 © www.lineage123.com Corporation All Rights Reserved.