2013年5月15日 星期三

【Java教學】隨身補血祭師

1.在SQL裡的NPC設定:複製貼上再自行修改200047 200048 200049是NPCID
200047    銀光祭司    【銀光祭司】    另類娃娃    L1Monster    3894    60    300    400    1    1    20    1    20    20    1    0    0    small    0    0    0    400    0    0    0    0    0    0    0    0    0    0        0    -1    -1    0    0    1    0    0    5000    10
200048    黃金祭司    【黃金祭司】    另類娃娃    L1Monster    3897    75    500    500    1    1    30    1    30    30    1    0    0    small    0    0    0    300    0    0    0    0    0    0    0    0    0    0        0    -1    -1    0    0    1    0    0    4000    20
200049    白金祭司    【白金祭司】    另類娃娃    L1Monster    3900    85    700    700    1    1    40    1    40    40    1    0    0    small    0    0    0    200    0    0    0    0    0    0    0    0    0    0        0    -1    -1    0    0    1    0    0    3000    30

2.在SQL裡的etcitem設定:複製貼上再自行修改60052 60053 60054是item_id
60052    \fD銀光祭司召喚卷軸    \fD銀光祭司召喚卷軸    \fD銀光祭司召喚卷軸    other    normal    paper    12000    3072    863    0    1
60053    \fO黃金祭司召喚卷軸    \fO黃金祭司召喚卷軸    \fO黃金祭司召喚卷軸    other    normal    paper    12000    3072    863    0    1
60054    \fW白金祭司召喚卷軸    \fW白金祭司召喚卷軸    \fW白金祭司召喚卷軸    other    normal    paper    12000    3072    863    0    1

3.L1DollInstance.java
一.在一開頭會看到0,1,2....的排序,在祭司娃娃寫上數字這裡9,10,11是舉例
      public static final int DOLLTYPE_BUGBEAR = 0;
   public static final int DOLLTYPE_SUCCUBUS = 1;
   public static final int DOLLTYPE_WAREWOLF = 2;
                  .
                  .
新增   
  
   public static final int DOLLTYPE_A = 9;// 祭司娃娃:白銀祭司
   public static final int DOLLTYPE_B = 10;// 祭司娃娃:黃金祭司
   public static final int DOLLTYPE_C = 11;// 祭司娃娃:白金祭司

二.先編譯L1DollInstance.java

4.C_ItemUSe.java
一.搜尋:
                      else if (itemId == 41248 || itemId == 41249
                            || itemId == 41250 || itemId == 49037
                            || itemId == 49038 || itemId == 49039
                            || itemId == 60035 || itemId == 60036
                            || itemId == 60037) { // 
                        useMagicDoll(pc, itemId, itemObjid);
                    }

//在下面新增:

              else if (itemId == 60052 || itemId == 60053 || itemId == 60054) //祭司娃娃
                   { 
                   useMagicDoll(pc, itemId, itemObjid);
                   pc.getInventory().removeItem(l1iteminstance, 1);//這是使用卷軸方式扣一    
                  }


二.搜尋:C_ItemUSe.java


  int dollType = 0;


//在下面新增:
            else if (itemId == 60052) {//祭司娃娃:白銀祭司卷軸
               npcId = 200047;
               dollType = L1DollInstance.DOLLTYPE_A;
           } else if (itemId == 60053) {//祭司娃娃:黃金祭司卷軸
               npcId = 200048;
               dollType = L1DollInstance.DOLLTYPE_B;
           } else if (itemId == 60054) {//祭司娃娃:白金祭司卷軸
               npcId = 200049;
               dollType = L1DollInstance.DOLLTYPE_C;
           }

三.編譯C_ItemUSe.java




5.L1Character.java

一.搜尋:L1Character.java
public void setOwnLightSize(int i) {
       _ownLightSize = i;
   }


在下面新增加入:
// 祭司娃娃 
   private int _hierarch = 0;

  public int getHierarch() {
      return _hierarch;
  }

  public void setHierarch(int i) {
      _hierarch = i;
  }
  // 祭司娃娃 end

二.編譯L1Character.java



6.C_NPCAction.java

一.搜尋:這是舉例看你想加在哪
else if (s.equalsIgnoreCase("enca")) { // 防具門家 / 防具強化魔法受
           L1ItemInstance item = pc.getInventory().getItemEquipped(2, 2);
           if (item != null) {
               L1SkillUse l1skilluse = new L1SkillUse();
               l1skilluse.handleCommands(pc, BLESSED_ARMOR, item
                       .getId(), 0, 0, null, 0, L1SkillUse.TYPE_SPELLSC);
           } else {
               pc.sendPackets(new S_ServerMessage(79));
           }
           
           htmlid = ""; // 消
       }        


在下面加入:
// 祭司說話檔設定
        else if(((L1NpcInstance) obj).getNpcTemplate().get_npcId() == 200047
               || ((L1NpcInstance) obj).getNpcTemplate().get_npcId() == 200048
               || ((L1NpcInstance) obj).getNpcTemplate().get_npcId() == 200049 ){
            if (s.equalsIgnoreCase("Hierarch_1")&&((L1NpcInstance) obj).getHierarch() == 1) { // -1

           if (pc.getHierarch() > 0) {
               pc.setHierarch(pc.getHierarch() - 1);
           }

           String msg0 = "";
           String msg1 = String.valueOf(pc.getHierarch() * 10);
           if (((L1NpcInstance) obj).getHierarch() == 1) {
               msg0 = "輔助";
           } else {
               msg0 = "跟隨";
           }
           htmldata = new String[] { ((L1NpcInstance) obj).getName(), String.valueOf(((L1NpcInstance) obj).getCurrentMp()), String.valueOf(((L1NpcInstance) obj).getMaxMp()), msg0, msg1 };
           htmlid = "Hierarch";
       } else if (s.equalsIgnoreCase("Hierarch_2")&&((L1NpcInstance) obj).getHierarch() == 1) { // +1

           if (pc.getHierarch() < 10) {
               pc.setHierarch(pc.getHierarch() + 1);
           }

           String msg0 = "";
           String msg1 = String.valueOf(pc.getHierarch() * 10);
           if (((L1NpcInstance) obj).getHierarch() == 1) {
               msg0 = "輔助";
           } else {
               msg0 = "跟隨";
           }
           htmldata = new String[] { ((L1NpcInstance) obj).getName(), String.valueOf(((L1NpcInstance) obj).getCurrentMp()), String.valueOf(((L1NpcInstance) obj).getMaxMp()), msg0, msg1 };
           htmlid = "Hierarch";
       } else if (s.equalsIgnoreCase("Hierarch_3")) { // 切換狀態

           ((L1NpcInstance) obj).setHierarch(1);

           String msg0 = "";
           String msg1 = String.valueOf(pc.getHierarch() * 10);
           if (((L1NpcInstance) obj).getHierarch() == 1) {
               msg0 = "輔助";
           } else {
               msg0 = "跟隨";
           }
           htmldata = new String[] { ((L1NpcInstance) obj).getName(), String.valueOf(((L1NpcInstance) obj).getCurrentMp()), String.valueOf(((L1NpcInstance) obj).getMaxMp()), msg0, msg1 };
           htmlid = "Hierarch";
       } else if (s.equalsIgnoreCase("Hierarch_4")) { // 切換狀態

           ((L1NpcInstance) obj).setHierarch(0);

           String msg0 = "";
           String msg1 = String.valueOf(pc.getHierarch() * 10);
           if (((L1NpcInstance) obj).getHierarch() == 1) {
               msg0 = "輔助";
           } else {
               msg0 = "跟隨";
           }
           htmldata = new String[] { ((L1NpcInstance) obj).getName(), String.valueOf(((L1NpcInstance) obj).getCurrentMp()), String.valueOf(((L1NpcInstance) obj).getMaxMp()), msg0, msg1 };
           htmlid = "Hierarch";
       }
       }
       // 祭司說話檔設定 end


二.編譯C_NPCAction.java



7.L1DollInstance.java

一.加入:
import l1j.server.server.utils.Random;//祭司新增 有的版本沒有自行加上
import l1j.server.server.serverpackets.S_AttackMissPacket;//祭司新增
import l1j.server.server.serverpackets.S_ServerMessage;//祭司新增
import l1j.server.server.serverpackets.S_SystemMessage;//祭司新增
import l1j.server.server.serverpackets.S_HPUpdate;//祭司新增
import l1j.server.server.serverpackets.S_MPUpdate;//祭司新增
import l1j.server.server.serverpackets.S_Strup;//祭司新增
import l1j.server.server.serverpackets.S_Dexup;//祭司新增
import l1j.server.server.serverpackets.S_NPCTalkReturn;//祭司新增


二.搜尋:
    public boolean noTarget() {
       if (_master.isDead()) {
           deleteDoll();
           return true;
       }
    在下面新增加入:
    else if (_master != null 
       && (_master.getCurrentHp() > 0) 
       && (_master.getCurrentHp() <= ((_master.getMaxHp() * _master.getHierarch()) / 10)) 
       && (getCurrentMp() > 15) 
       && (getLocation().getTileLineDistance(_master.getLocation()) < 7) 
       && (_master.glanceCheck(_master.getX(), _master.getY()) == true) 
       && (getHierarch() == 1)&& 
               (getNpcTemplate().get_npcId()== 200047 )) { // 銀光祭司主動補血 
           if (_master instanceof L1PcInstance) {
               Random random = new Random();
               L1PcInstance player = (L1PcInstance) _master;
               broadcastPacket(new S_SkillSound(player.getId(), 830));
               broadcastPacket(new S_AttackMissPacket(this, player.getId(), 19));
               player.setCurrentHp(player.getCurrentHp() + (80 + random.nextInt(75)));
               player.sendPackets(new S_ServerMessage(77, ""));//你覺得舒服多了。
               player.sendPackets(new S_HPUpdate(player.getCurrentHp(), player.getMaxHp()));
               setCurrentMp(getCurrentMp() - 20);

               if (player.isInParty()) { 
                   player.getParty().updateMiniHP(player);
               }
           }
       }else if (_master != null 
       && (_master.getCurrentHp() > 0) 
       && (_master.getCurrentHp() <= ((_master.getMaxHp() * _master.getHierarch()) / 10)) 
       && (getCurrentMp() > 19) 
       && (getLocation().getTileLineDistance(_master.getLocation()) < 7) 
       && (_master.glanceCheck(_master.getX(), _master.getY()) == true) 
       && (getHierarch() == 1)&& 
               (getNpcTemplate().get_npcId()== 200048)) { // 黃金祭司主動補血 
           if (_master instanceof L1PcInstance) {
               Random random = new Random();
               L1PcInstance player = (L1PcInstance) _master;
               broadcastPacket(new S_SkillSound(player.getId(), 830));
               broadcastPacket(new S_AttackMissPacket(this, player.getId(), 19));
               player.setCurrentHp(player.getCurrentHp() + (105 + random.nextInt(75)));
               player.sendPackets(new S_ServerMessage(77, ""));//你覺得舒服多了。
               player.sendPackets(new S_HPUpdate(player.getCurrentHp(), player.getMaxHp()));
               setCurrentMp(getCurrentMp() - 20);

               if (player.isInParty()) { 
                   player.getParty().updateMiniHP(player);
               }
           }
       }
       else if (_master != null 
       && (_master.getCurrentHp() > 0) 
       && (_master.getCurrentHp() <= ((_master.getMaxHp() * _master.getHierarch()) / 10)) 
       && (getCurrentMp() > 19) 
       && (getLocation().getTileLineDistance(_master.getLocation()) < 7) 
       && (_master.glanceCheck(_master.getX(), _master.getY()) == true) 
       && (getHierarch() == 1)&& 
               (getNpcTemplate().get_npcId()== 200049)) { // 白金祭司主動補血 
           if (_master instanceof L1PcInstance) {
               Random random = new Random();
               L1PcInstance player = (L1PcInstance) _master;
               broadcastPacket(new S_SkillSound(player.getId(), 830));
               broadcastPacket(new S_AttackMissPacket(this, player.getId(), 19));
               player.setCurrentHp(player.getCurrentHp() + (125 + random.nextInt(75)));
               player.sendPackets(new S_ServerMessage(77, ""));//你覺得舒服多了。
               player.sendPackets(new S_HPUpdate(player.getCurrentHp(), player.getMaxHp()));
               setCurrentMp(getCurrentMp() - 20);

               if (player.isInParty()) { 
                   player.getParty().updateMiniHP(player);
               }
           }
       }
       else if (_master != null 
           && ((!_master.hasSkillEffect(68)&& getNpcTemplate().get_npcId() !=200047 && getNpcTemplate().get_npcId() !=200048) 
           || (!_master.hasSkillEffect(79) && getNpcTemplate().get_npcId() != 200047)
           || !_master.hasSkillEffect(48)
           || !_master.hasSkillEffect(26)    
           || !_master.hasSkillEffect(42))
           && (_master.getCurrentHp() > 0)
           && (getCurrentMp() > 9) 
           && (getHierarch() == 1)) {// 加輔助效果
               L1PcInstance player = (L1PcInstance) _master;
           if (!player.hasSkillEffect(26) && 
               (getNpcTemplate().get_npcId()== 200047 || 
                   getNpcTemplate().get_npcId()== 200048 ||
                   getNpcTemplate().get_npcId()== 200049)) {//通暢
               player.addDex((byte) 5);
               player.sendPackets(new S_Dexup(player, 5, 1200));
               player.setSkillEffect(26, 1200 * 1000);
               player.broadcastPacket(new S_SkillSound(player.getId(), 750));
                      player.sendPackets(new S_SkillSound(player.getId(), 750));
               player.sendPackets(new S_SystemMessage("你變得敏捷。"));
               setCurrentMp(getCurrentMp() - 50);
           }

           if (!player.hasSkillEffect(42) && 
               (getNpcTemplate().get_npcId()== 200047 || 
                   getNpcTemplate().get_npcId()== 200048 ||
                   getNpcTemplate().get_npcId()== 200049)) {//體魄強健術
               player.addStr((byte) 5);
               player.sendPackets(new S_Strup(player, 5, 1200));
               player.setSkillEffect(42, 1200 * 1000);
               player.broadcastPacket(new S_SkillSound(player.getId(), 751));
                      player.sendPackets(new S_SkillSound(player.getId(), 751));
               player.sendPackets(new S_SystemMessage("你變得強壯。"));
               setCurrentMp(getCurrentMp() - 50);
           }
           if (!player.hasSkillEffect(79) && 
               (getNpcTemplate().get_npcId()== 200048 ||
                   getNpcTemplate().get_npcId()== 200049)) {//靈魂昇華
          player.setAdvenHp(player.getBaseMaxHp() / 5);
               player.setAdvenMp(player.getBaseMaxMp() / 5);
               player.addMaxHp(player.getAdvenHp());
               player.addMaxMp(player.getAdvenMp());
               player.sendPackets(new S_HPUpdate(player.getCurrentHp(), player
                               .getMaxHp()));
                       player.setSkillEffect(79, 1200 * 1000);
                       player.sendPackets(new S_SkillSound(player.getId(), 3935));
                      player.broadcastPacket(new S_SkillSound(player.getId(), 3935));    
                      setCurrentMp(getCurrentMp() - 20);        
                       if (player.isInParty()) { // 
                           player.getParty().updateMiniHP(player);
                       }
                       player.sendPackets(new S_MPUpdate(player.getCurrentMp(), player
                               .getMaxMp()));
                   }
           if (!player.hasSkillEffect(68) && 
               getNpcTemplate().get_npcId()== 200049) {//聖結界
               int dmg = 0;
               dmg /=2;
          player.setSkillEffect(68, 32 * 1000);
               player.broadcastPacket(new S_SkillSound(player.getId(), 228));
               player.sendPackets(new S_SkillSound(player.getId(), 228));
               player.sendPackets(new S_SystemMessage("你獲得神秘的力量。"));
               setCurrentMp(getCurrentMp() - 30);
                   }        
           if (!player.hasSkillEffect(48)&& 
               (getNpcTemplate().get_npcId()== 200047 || getNpcTemplate().get_npcId()== 200048 || getNpcTemplate().get_npcId()== 200049)) {//祝福武器
               player.addDmgup(2);
               player.addHitup(2);
               player.setSkillEffect(48, 1200 * 1000);
               player.broadcastPacket(new S_SkillSound(player.getId(), 2176));
               player.sendPackets(new S_SkillSound(player.getId(), 2176));    
               setCurrentMp(getCurrentMp() - 20);                
           }
          
           broadcastPacket(new S_AttackMissPacket(this, player.getId(), 19));

       }
       //祭司娃娃END




三.搜尋:
    public void setItemObjId(int i) {
       _itemObjId = i;
   }


    在下面新增1:
    //祭司娃娃
   public void onTalkAction(L1PcInstance player) {
       if (isDead()) {
           return;
       }
       if (_master.equals(player)&&
           (getNpcTemplate().get_npcId()== 200047 || 
                   getNpcTemplate().get_npcId()== 200048 ||
                   getNpcTemplate().get_npcId()== 200049)) {
           String[] htmldata = null;
           String msg0 = "";
           String msg1 = String.valueOf(player.getHierarch() * 10);
           if (getHierarch() == 1) {
               msg0 = "輔助";
           } else {
               msg0 = "跟隨";
           }
           htmldata = new String[] { getName(), String.valueOf(getCurrentMp()), String.valueOf(getMaxMp()), msg0, msg1 };
           player.sendPackets(new S_NPCTalkReturn(getId(), "Hierarch", htmldata));
       }
   }
  //祭司娃娃END 


    在下面新增2:

      //新增祭司娃娃回魔相關
   public void onFinalAction(L1PcInstance player, String action) {
   }

   @Override
   public void setCurrentMp(int i) {
       int currentMp = i;
       if (currentMp >= getMaxMp()) {
           currentMp = getMaxMp();
       }
       setCurrentMpDirect(currentMp);
       if (getMaxMp() > getCurrentMp()) {
           startMpRegeneration();
       }
   }
   //祭司娃娃回魔相關end

沒有留言:

張貼留言