2013年5月15日 星期三

【Java教學】附魔石

****O**P**Q**L**O****【【步驟1】】****分**享**於**月**光**論**壇****

server/server/clientpackets/C_itemUSe.java

將畫面用滾輪捲動到最上面
搜尋
} else if (itemId == L1ItemId.SCROLL_OF_ENCHANT_ARMOR
               || itemId == L1ItemId.SCROLL_OF_ENCHANT_WEAPON
               || itemId == L1ItemId.SCROLL_OF_ENCHANT_QUEST_WEAPON


插入下列程式碼至 【   || itemId == L1ItemId.SCROLL_OF_ENCHANT_QUEST_WEAPON   】下方

               || itemId == 99941 //附魔強化卷軸
               || itemId == 99937    //近戰附魔
               || itemId == 99938    //遠攻附魔
               || itemId == 99939    //恢復附魔
               || itemId == 99940    //防禦附魔

****O**P**Q**L**O****【【步驟2】】****分**享**於**月**光**論**壇****
搜尋 else if (itemId == L1ItemId.POTION_OF_HEALING
在上方加入:

           //*附魔石道具使用相關
               
               }else if (itemId >= 99901 && itemId <= 99936) { // 附魔石by opqlo 分享月光論壇
                  int time = 60 * 10 *1000; //600秒
                  int i = l1iteminstance.getItemId() - 67900;        //技能狀態
                  int e = l1iteminstance.getItemId() - 90962;        //動畫特效
                    if     ( pc.hasSkillEffect(32001)||pc.hasSkillEffect(32013)||pc.hasSkillEffect(32025)
                        ||pc.hasSkillEffect(32002)||pc.hasSkillEffect(32014)||pc.hasSkillEffect(32026)
                        ||pc.hasSkillEffect(32003)||pc.hasSkillEffect(32015)||pc.hasSkillEffect(32027)
                        ||pc.hasSkillEffect(32004)||pc.hasSkillEffect(32016)||pc.hasSkillEffect(32028)
                        ||pc.hasSkillEffect(32005)||pc.hasSkillEffect(32017)||pc.hasSkillEffect(32029)
                        ||pc.hasSkillEffect(32006)||pc.hasSkillEffect(32018)||pc.hasSkillEffect(32030)
                        ||pc.hasSkillEffect(32007)||pc.hasSkillEffect(32019)||pc.hasSkillEffect(32031)
                        ||pc.hasSkillEffect(32008)||pc.hasSkillEffect(32020)||pc.hasSkillEffect(32032)
                        ||pc.hasSkillEffect(32009)||pc.hasSkillEffect(32021)||pc.hasSkillEffect(32033)
                        ||pc.hasSkillEffect(32010)||pc.hasSkillEffect(32022)||pc.hasSkillEffect(32034)
                        ||pc.hasSkillEffect(32011)||pc.hasSkillEffect(32023)||pc.hasSkillEffect(32035)
                        ||pc.hasSkillEffect(32012)||pc.hasSkillEffect(32024)||pc.hasSkillEffect(32036)
                        ){
                      pc.sendPackets(new S_SystemMessage("魔法冷卻中。"));
                      return;     
                  } 
                  if (itemId == 99901) { //1階近戰
                    pc.addMaxHp(10);
              } if (itemId == 99902) {   //2階近戰
                      pc.addMaxHp(20);
              } if (itemId == 99903) {   //3階近戰
                      pc.addMaxHp(30);
              } if (itemId == 99904) {   //4階近戰
                      pc.addMaxHp(40);
              } if (itemId == 99905) {   //5階近戰
                      pc.addMaxHp(50);
                      pc.addHpr(1);
              } if (itemId == 99906) {   //6階近戰
                      pc.addMaxHp(60);
                      pc.addHpr(2);
              } if (itemId == 99907) {   //7階近戰
                      pc.addMaxHp(70);
                      pc.addHpr(3);
              } if (itemId == 99908) {   //8階近戰
                      pc.addMaxHp(80);
                      pc.addHpr(4);
                      pc.addHitup(1);
              } if (itemId == 99909) {   //9階近戰
                      pc.addMaxHp(100);
                      pc.addHpr(5);
                      pc.addHitup(2);
                      pc.addDmgup(2);
                      pc.addStr((byte) 1);
              } if (itemId == 99910) {   //1階遠攻
                      pc.addMaxHp(5);
                      pc.addMaxMp(3);
              } if (itemId == 99911) {   //2階遠攻
                      pc.addMaxHp(10);
                      pc.addMaxMp(6);
              } if (itemId == 99912) {   //3階遠攻
                      pc.addMaxHp(15);
                      pc.addMaxMp(10);
              } if (itemId == 99913) {   //4階遠攻
                      pc.addMaxHp(20);
                      pc.addMaxMp(15);
              } if (itemId == 99914) {   //5階遠攻
                      pc.addMaxHp(25);
                      pc.addMaxMp(20);
              } if (itemId == 99915) {   //6階遠攻
                      pc.addMaxHp(30);
                      pc.addMaxMp(20);
                      pc.addHpr(1);
              } if (itemId == 99916) {   //7階遠攻
                      pc.addMaxHp(35);
                      pc.addMaxMp(20);
                      pc.addHpr(1);
                      pc.addMpr(1);
              } if (itemId == 99917) {   //8階遠攻
                      pc.addMaxHp(40);
                      pc.addMaxMp(25);
                      pc.addHpr(2);
                      pc.addMpr(1);
              } if (itemId == 99918) {   //9階遠攻
                      pc.addMaxHp(50);
                      pc.addMaxMp(30);
                      pc.addHpr(2);
                      pc.addMpr(2);
                      pc.addBowHitup(2);
                      pc.addBowDmgup(2);
                      pc.addDex((byte)1);
              } if (itemId == 99919) {   //1階恢復
                      pc.addMaxMp(5);
              } if (itemId == 99920) {   //2階恢復
                      pc.addMaxMp(10);
              } if (itemId == 99921) {   //3階恢復
                      pc.addMaxMp(15);
              } if (itemId == 99922) {   //4階恢復
                      pc.addMaxMp(20);
              } if (itemId == 99923) {   //5階恢復
                      pc.addMaxMp(25);
                      pc.addMpr(1);
              } if (itemId == 99924) {   //6階恢復
                      pc.addMaxMp(30);
                      pc.addMpr(2);
              } if (itemId == 99925) {   //7階恢復
                      pc.addMaxMp(35);
                      pc.addMpr(3);
              } if (itemId == 99926) {   //8階恢復
                      pc.addMaxMp(40);
                      pc.addMpr(4);
              } if (itemId == 99927) {   //9階恢復 
                      pc.addMaxMp(50);
                      pc.addMpr(5);
                      pc.addSp(1);
                      pc.addInt((byte)1);
              } if (itemId == 99928)   {   //1階防禦
                      pc.addMr(2); }
                  if (itemId == 99929) {   //2階防禦
                    pc.addMr(4);}
                  if (itemId == 99930) {     //3階防禦
                  pc.setSkillEffect(32030, time);
                pc.addMr(6); }
                  if (itemId == 99931) {       //4階防禦
                    pc.addMr(8);}
                  if (itemId == 99932) {       //5階防禦
                    pc.addMr(10);
                    pc.addAc(-1); }
                  if (itemId == 99933) {       //6階防禦
                    pc.addMr(10);
                    pc.addAc(-2); }
                  if (itemId == 99934) {       //7階防禦
                    pc.addMr(10);
                    pc.addAc(-3); }
                  if (itemId == 99935) {       //8階防禦
                    pc.addMr(15);
                    pc.addAc(-4);
                    pc.addDamageReductionByArmor(1);}
                  if (itemId == 99936) {       //9階防禦
                    pc.addMr(20);
                    pc.addAc(-5);
                    pc.addDamageReductionByArmor(3);
                    pc.addCon((byte)1);}
                  if (itemId >= 99901 && itemId <= 99936) {
                     pc.sendPackets(new S_SkillSound(pc.getId(), e));
                    pc.broadcastPacket(new S_SkillSound(pc.getId(), e));
                    pc.setSkillEffect(i, time);
                    pc.sendPackets(new S_OwnCharStatus(pc));
                }
                } else if (itemId >= 99937 && itemId <= 99940 ){ //附魔石轉換 by opqlo 分享月光論壇
              int i=l1iteminstance1.getItem().getItemId();
              if (i==99942){
                  if ((_random.nextInt(100) + 1)<=50){ //50%機率會失敗
                    pc.getInventory().removeItem(l1iteminstance1, 1);
                      pc.getInventory().removeItem(l1iteminstance, 1);
                      pc.sendPackets(new S_SystemMessage(l1iteminstance1.getItem().getName()+"發出神秘的光芒爆開了。"));
                      pc.sendPackets(new S_SkillSound(pc.getId(), 4630));
                      pc.broadcastPacket(new S_SkillSound(pc.getId(), 4630));
                    return;
                  }
                  if (itemId == 99937) {
                    createNewItem(pc, 99901, 1); //階附魔石(近戰)
                } if (itemId == 99938 ) {
                    createNewItem(pc, 99910, 1); //階附魔石(遠攻)
                } if (itemId == 99939) {
                    createNewItem(pc, 99919, 1); //階附魔石(恢復)
                } if (itemId == 99940 ) {
                    createNewItem(pc, 99928, 1); //階附魔石(防禦)
                }
              
                pc.getInventory().removeItem(l1iteminstance1, 1);
                pc.getInventory().removeItem(l1iteminstance, 1);
              } else {
                    pc.sendPackets(new S_ServerMessage(79));
              }

              
                } else if (itemId == 99941){ //附魔石強化 by opqlo 分享月光論壇
                    int k=99904;
                    int chance =_random.nextInt(100) + 1;
                    int i=l1iteminstance1.getItem().getItemId();
                    if (i>=99901 && i<=99936){
                       if(i==k+5 ||i==k+14 ||i==k+23 ||i==k+32){ //9階附魔石
                            pc.sendPackets(new S_SystemMessage(l1iteminstance1.getItem().getName()+"無法強化。"));
                            return; 
                       }
                       if((i>=k-3 && i<=k-1) ||(i>=k+6 && i<=k+8) || (i>=k+15 && i<=k+17) ||(i>=k+24 && i<=k+26)){ //1~3階附魔石
                            pc.getInventory().removeItem(l1iteminstance1, 1);
                        pc.getInventory().removeItem(l1iteminstance, 1);
                            createNewItem(pc, i+1, 1);
                            return; 
                       }
                    if (chance <=50&& (i==k ||i==k+1 ||i==k+9 ||i==k+10 ||i==k+18 ||i==k+19 ||i==k+27 ||i==k+28 )){ //4~5階附魔石 50%
                        pc.getInventory().removeItem(l1iteminstance1, 1);
                    pc.getInventory().removeItem(l1iteminstance, 1);
                        createNewItem(pc, i+1, 1); 
                        return; 
                        }if (chance <=30&&(i==k+2 ||i==k+3 ||i==k+11 ||i==k+12 ||i==k+20 ||i==k+21 ||i==k+29 ||i==k+30 )){//6~7階附魔石30%
                            pc.getInventory().removeItem(l1iteminstance1, 1);
                        pc.getInventory().removeItem(l1iteminstance, 1);
                            createNewItem(pc, i+1, 1); 
                            return;     
                       }if (chance <=10&&(i==k+4 ||i==k+13 ||i==k+22 ||i==k+31)){//8階附魔石 10%
                            pc.getInventory().removeItem(l1iteminstance1, 1);
                        pc.getInventory().removeItem(l1iteminstance, 1);
                           createNewItem(pc, i+1, 1); 
                           return;
                       } pc.getInventory().removeItem(l1iteminstance1, 1);
                pc.getInventory().removeItem(l1iteminstance, 1);
                pc.sendPackets(new S_SystemMessage(l1iteminstance1.getItem().getName()+"發出神秘的光芒爆開了。"));
                pc.sendPackets(new S_SkillSound(pc.getId(), 4630));
                pc.broadcastPacket(new S_SkillSound(pc.getId(), 4630));
                   }else {
                        pc.sendPackets(new S_ServerMessage(79));
                   }
                   ////*附魔石道具使用相關 by opqlo 分享月光論壇 end
                } 

****O**P**Q**L**O****【【步驟3】】****分**享**於**月**光**論**壇****

server/server/model/skill/L1SkillId.java

拉到最下面 在 } 上面加入:


   /*
    * 附魔石效果
    */
public static final int STONE_A_1 = 32001; //1階近戰
public static final int STONE_A_2 = 32002; //2階近戰
public static final int STONE_A_3 = 32003; //3階近戰
public static final int STONE_A_4 = 32004; //4階近戰
public static final int STONE_A_5 = 32005; //5階近戰
public static final int STONE_A_6 = 32006; //6階近戰
public static final int STONE_A_7 = 32007; //7階近戰
public static final int STONE_A_8 = 32008; //8階近戰
public static final int STONE_A_9 = 32009; //9階近戰
public static final int STONE_B_1 = 32010; //1階遠攻
public static final int STONE_B_2 = 32011; //2階遠攻
public static final int STONE_B_3 = 32012; //3階遠攻
public static final int STONE_B_4 = 32013; //4階遠攻
public static final int STONE_B_5 = 32014; //5階遠攻
public static final int STONE_B_6 = 32015; //6階遠攻
public static final int STONE_B_7 = 32016; //7階遠攻
public static final int STONE_B_8 = 32017; //8階遠攻
public static final int STONE_B_9 = 32018; //9階遠攻
public static final int STONE_C_1 = 32019; //1階恢復
public static final int STONE_C_2 = 32020; //2階恢復
public static final int STONE_C_3 = 32021; //3階恢復
public static final int STONE_C_4 = 32022; //4階恢復
public static final int STONE_C_5 = 32023; //5階恢復
public static final int STONE_C_6 = 32024; //6階恢復
public static final int STONE_C_7 = 32025; //7階恢復
public static final int STONE_C_8 = 32026; //8階恢復
public static final int STONE_C_9 = 32027; //9階恢復
public static final int STONE_D_1 = 32028; //1階防禦
public static final int STONE_D_2 = 32029; //2階防禦
public static final int STONE_D_3 = 32030; //3階防禦
public static final int STONE_D_4 = 32031; //4階防禦
public static final int STONE_D_5 = 32032; //5階防禦
public static final int STONE_D_6 = 32033; //6階防禦
public static final int STONE_D_7 = 32034; //7階防禦
public static final int STONE_D_8 = 32035; //8階防禦
public static final int STONE_D_9 = 32036; //9階防禦



****O**P**Q**L**O****【【步驟4】】****分**享**於**月**光**論**壇****

server/server/model/skill/L1SkillTimer.java

搜尋   } else if (skillId == ELEMENTAL_FALL_DOWN) { 
在上面加入:
   
   //附魔石系統
           else if (skillId >=32001 && skillId <= 32036 && cha instanceof L1PcInstance) {
               L1PcInstance pc = (L1PcInstance) cha;
           if (skillId == STONE_A_1) {   //1階近戰
               pc.addMaxHp(-10);
            }if (skillId == STONE_A_2) { //2階近戰
               pc.addMaxHp(-20);
            }if (skillId == STONE_A_3) { //3階近戰
               pc.addMaxHp(-30);
           }if (skillId == STONE_A_4) { //4階近戰
               pc.addMaxHp(-40);
           }if (skillId == STONE_A_5) { //5階近戰
               pc.addMaxHp(-50);
               pc.addHpr(-1);
           }if (skillId == STONE_A_6) { //6階近戰
               pc.addMaxHp(-60);
               pc.addHpr(-2);
           }if (skillId == STONE_A_7) { //7階近戰
               pc.addMaxHp(-70);
               pc.addHpr(-3);
           }if (skillId == STONE_A_8) { //8階近戰
               pc.addMaxHp(-80);
               pc.addHpr(-4);
               pc.addHitup(-1);
           }if (skillId == STONE_A_9) { //9階近戰
               pc.addMaxHp(-100);
               pc.addHpr(-5);
               pc.addHitup(-2);
               pc.addDmgup(-2);
               pc.addStr((byte) -1);
               pc.sendPackets(new S_Strup(pc, 1, 0));
           }if (skillId == STONE_B_1) { //1階遠攻
               pc.addMaxHp(-5);
               pc.addMaxMp(-3);
           }if (skillId == STONE_B_2) { //2階遠攻
               pc.addMaxHp(-10);
               pc.addMaxMp(-6);
           }if (skillId == STONE_B_3) { //3階遠攻
               pc.addMaxHp(-15);
               pc.addMaxMp(-10);
           }if (skillId == STONE_B_4) { //4階遠攻
               pc.addMaxHp(-20);
               pc.addMaxMp(-15);
           }if (skillId == STONE_B_5) { //5階遠攻
               pc.addMaxHp(-25);
               pc.addMaxMp(-20);
           }if (skillId == STONE_B_6) { //6階遠攻
               pc.addMaxHp(-30);
               pc.addMaxMp(-20);
               pc.addHpr(-1);
           }if (skillId == STONE_B_7) { //7階遠攻
               pc.addMaxHp(-35);
               pc.addMaxMp(-20);
               pc.addHpr(-1);
               pc.addMpr(-1);
           }if (skillId == STONE_B_8) { //8階遠攻
               pc.addMaxHp(-40);
               pc.addMaxMp(-25);
               pc.addHpr(-2);
               pc.addMpr(-1);
           }if (skillId == STONE_B_9) { //9階遠攻
               pc.addMaxHp(-50);
               pc.addMaxMp(-30);
               pc.addHpr(-2);
               pc.addMpr(-2);
               pc.addBowDmgup(-2);
               pc.addBowHitup(-2);
               pc.addDex((byte) -1);
               pc.sendPackets(new S_Dexup(pc, 1, 0));
           }if (skillId == STONE_C_1) { //1階恢復
               pc.addMaxMp(-5);
           }if (skillId == STONE_C_2) { //2階恢復
               pc.addMaxMp(-10);
           }if (skillId == STONE_C_3) { //3階恢復
               pc.addMaxMp(-15);
           }if (skillId == STONE_C_4) { //4階恢復
               pc.addMaxMp(-20);
           }if (skillId == STONE_C_5) { //5階恢復
               pc.addMaxMp(-25);
               pc.addMpr(-1);
           }if (skillId == STONE_C_6) { //6階恢復
               pc.addMaxMp(-30);
               pc.addMpr(-2);
           }if (skillId == STONE_C_7) { //7階恢復
               pc.addMaxMp(-35);
               pc.addMpr(-3);
           }if (skillId == STONE_C_8) { //8階恢復
               pc.addMaxMp(-40);
               pc.addMpr(-4);
           }if (skillId == STONE_C_9) { //9階恢復
               pc.addMaxMp(-50);
               pc.addMpr(-5);
               pc.addInt((byte)-1);
               pc.addSp(-1);
               pc.sendPackets(new S_OwnCharStatus(pc));
           }if (skillId == STONE_D_1) { //1階防禦
               pc.addMr(-2);
           }if (skillId == STONE_D_2) { //2階防禦
               pc.addMr(-4);
           }if (skillId == STONE_D_3) { //3階防禦
               pc.addMr(-6);
           }if (skillId == STONE_D_4) { //4階防禦
               pc.addMr(-8);
           }if (skillId == STONE_D_5) { //5階防禦
               pc.addMr(-10);
               pc.addAc(1);
           }if (skillId == STONE_D_6) { //6階防禦
               pc.addMr(-10);
               pc.addAc(2);    
           }if (skillId == STONE_D_7) { //7階防禦
               pc.addMr(-10);
               pc.addAc(3);
           }if (skillId == STONE_D_8) { //8階防禦
               pc.addMr(-15);
               pc.addAc(4);
               pc.addDamageReductionByArmor(-1);
           }if (skillId == STONE_D_9) { //9階防禦
               pc.addMr(-20);
               pc.addAc(5);
               pc.addCon((byte) -1);
               pc.addDamageReductionByArmor(-3); //更新魔防
           }if (skillId>= 32027 && skillId <= 32036){
               pc.sendPackets(new S_SPMR(pc));
           } //附魔石系統


****O**P**Q**L**O****【【步驟5】】****分**享**於**月**光**論**壇****

最後打開DB資料庫 etcitem
拉到最下面新增以下:(小弟的是沒有掉寶公告的,請自行比對一下)

etcitem參考設定
https://docs.google.com/file/d/0B4eGRNVV-6tZMzRBZy1jRTRkek0/edit

沒有留言:

張貼留言