| 
 
					
UID1005閱讀權限100主題158帖子287精華0A幣652 在線時間185 小時最後登錄2025-9-22 
 
區域版主   
 
	主題158帖子287精華0綜合社群主題發文量9 電玩社群主題發文量10 娛樂社群主題發文量0 技術社群主題發文量114 閱讀權限100註冊時間2016-5-17 
 	
 TA的每日心情|  | 怒 2022-4-29 14:36
 | 
|---|
 簽到天數: 5 天 連續簽到: 1 天 [LV.2]偶爾看看I | 
 
|   
 【介紹】
 團隊近期收到滿多希望自己端能有破攻石可以玩的需求,
 於是乎,我被派來把破攻石的寫法做一做,如果自己端有源碼能改
 並且也是領我們的免費商用登入器或單機登入器,就可以參考本篇教學~~
 
 免費單人登入器 ( 點我 )
 免費外連登入器 ( 點我 ) ← 查看 DC 公告
 
 【教學開始】
 
 找到 MapleCharacter.JAVA 在上方新增
 
 
 複製代碼 private short max_Damage_Count = 0;//破攻石
 找到 MapleCharacter getDefault 在下方新增
 
 
 複製代碼ret.max_Damage_Count = 0;//破攻石
 新增方法
 
 
 複製代碼public short getMax_Damage_Count() {
    return this.max_Damage_Count;
    }
   
    public void setMax_Damage_Count(int count) {
    this.max_Damage_Count = (short)count;
    }
 
 找到 MapleCharacter ReconstructChr 在下方新增
 
 
 複製代碼ret.max_Damage_Count = ct.max_Damage_Count;//破攻石
 找到 MapleCharacter loadCharFromDB  並在 if (channelserver) 裡新增
 
 
 複製代碼 /* 破攻石 */
                ps = con.prepareStatement("SELECT maxDamage_Count FROM characters WHERE id = ?");
                ps.setInt(1, ret.id);
                rs = ps.executeQuery();
                if (rs.next()) {
    ret.max_Damage_Count = rs.getShort("maxDamage_Count");
                } 
                rs.close(); rs = null;
                ps.close(); ps = null;
 
 找到 public int saveToDB  並找到 DELETE FROM inventoryslot 區域,在空白區新增
 
 
 
 複製代碼ps = con.prepareStatement("UPDATE characters SET `maxDamage_Count` = ? WHERE id = ?");
            ps.setShort(1, this.max_Damage_Count);
            ps.setInt(2, this.id);
            ps.execute();
            ps.close();
 找到 InterServerHandler.JAVA 並找到 LoggedIn 方法,在最後新增
 
 
 複製代碼c.sendPacket(MaplePacketCreator.max_Damage(player.getId(), 30000,  player.getMax_Damage_Count()));
 
 找到 InventoryHandler.JAVA 並找到 UseItem 方法,新增一個指定消耗物品方法,在下方新增
 
 
 複製代碼 if (itemId == 2000005) {//請填寫你要的消耗物品代碼
   int baseDamage = 1999999 ;//預設頂傷,請與登入器後台設定相同
            short count = chr.getMax_Damage_Count();
            short now_Max_Damage_Count =  (short)(count + 1);
            int newDamage = baseDamage + (now_Max_Damage_Count * 30000);//30000 每顆會增加多少頂傷
            if(newDamage >= 2000000000){
 chr.dropMessage("破攻石所加傷害已到官方設定頂傷,無法再使用");
 c.sendPacket(MaplePacketCreator.enableActions());
 return;
            }else{
  chr.setMax_Damage_Count(now_Max_Damage_Count);
  c.sendPacket(MaplePacketCreator.max_Damage(chr.getId(), 30000, chr.getMax_Damage_Count()));// 請與上方的 30000 數字相同
                
  MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false);     
  chr.dropMessage("破攻石使用數量:"+ now_Max_Damage_Count + "  基礎頂傷:" + baseDamage + " 最新動態頂傷:" + newDamage );
  c.sendPacket(MaplePacketCreator.enableActions());
  chr.saveToDB(false, false);
  return;
 }                    
        }
 
 找到 CharacterTransfer.JAVA 在下方新增
 
 
 複製代碼public short max_Damage_Count;
 
 找到 CharacterTransfer 方法,在下方新增
 
 
 複製代碼this.max_Damage_Count = chr.getMax_Damage_Count();
 找到 MaplePacketCreator.JAVA ,在下方新增方法
 
 
 複製代碼public static byte[] max_Damage(int cid, int ItemDamarg, int count) {
 MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
 mplew.writeShort(1393);
 mplew.writeInt(cid);
 mplew.writeInt(ItemDamarg);
 mplew.writeInt(count);
 return mplew.getPacket();
   }
 
 接著,請找到您端口封包發配的資料區,有些是在端口中有,有些是端口資料夾有,請自行尋找,
 這邊以在端口有類別的為主。
 
 找到 SendPacketOpcode.JAVA 在下方新增
 
 
 
 在您端口的 send.ini 中新增
 
 
 
 
 到此,整套破攻系統就完成了,使用方法就是依照 UseItem 所指定的消耗道具,
 當在遊戲中使用這個道具,就可以觸發囉~~~
 
 
 
 
 
 
 | 
 |