2014年5月31日 星期六

【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);//這是使用卷軸方式扣一      
                                    }
  二.搜尋:

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

  一.搜尋:

  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

  四.編譯L1DollInstance.java




對話檔部分:

<html>
<body>
<font fg=ffffff><p align=left><var src="#0">:</p></font>
<br>
目前魔力: <var src="#1"> / <var src="#2">
<br>
目前狀態: <var src="#3">
<br>
切換狀態: <a action="Hierarch_3">輔助</a> / <a action="Hierarch_4">跟隨</a>
<br>
<br>
治療設定: <a action="Hierarch_1">&nbsp;&nbsp;-&nbsp;</a> <var src="#4">% <a action="Hierarch_2">&nbsp;&nbsp;+&nbsp;</a>
<br>
<br>
<br>
<br>
</body>
</html>

---------------------------------------------------
修改技能、新增..教學

if (!player.hasSkillEffect(168) &&  168魔法編號
                        (getNpcTemplate().get_npcId()== 200047 200047祭師編號
                         )) {//鋼鐵防護  魔法名稱
                        player.addAc((byte) -10);  魔法功能(目前是防+10)
                        player.setSkillEffect(168, 960 * 1000);  168魔法編號 960魔法秒數 1000是?(代表1秒?)
                        player.broadcastPacket(new S_SkillSound(player.getId(), 2252));  魔法圖檔
                                                    player.sendPackets(new S_SkillSound(player.getId(), 2252)); 魔法圖檔
                        player.sendPackets(new S_SystemMessage("大地之氣圍繞你。"));  對話欄出現訊息
                        setCurrentMp(getCurrentMp() - 30); 祭師耗魔量
                       }

沒有留言:

張貼留言