微信扫一扫 分享朋友圈

已有 1126 人浏览分享

[服務器教學] 破攻石功能寫法教學「需登入器有功能」

[複製鏈接]

區域版主

Rank: 10Rank: 10Rank: 10

278

威望

1285

金錢

635

A幣
主題
142
帖子
263
精華
0
綜合社群主題發文量
9
電玩社群主題發文量
10
娛樂社群主題發文量
0
技術社群主題發文量
98
閱讀權限
100
註冊時間
2016-5-17
  • TA的每日心情

    2022-4-29 14:36
  • 簽到天數: 5 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    t9540513 發表於  2023-7-25 13:02:12 | 顯示全部樓層 | 閱讀模式
    000.png

    【介紹】
    團隊近期收到滿多希望自己端能有破攻石可以玩的需求,
    於是乎,我被派來把破攻石的寫法做一做,如果自己端有源碼能改
    並且也是領我們的免費商用登入器或單機登入器,就可以參考本篇教學~~

    免費單人登入器 ( 點我 )  
    免費外連登入器 ( 點我 ) ← 查看 DC 公告

    【教學開始】

    找到 MapleCharacter.JAVA 在上方新增

    1. private short max_Damage_Count = 0;//破攻石
    複製代碼


    找到 MapleCharacter getDefault 在下方新增

    1. ret.max_Damage_Count = 0;//破攻石
    複製代碼


    新增方法

    1. public short getMax_Damage_Count() {
    2.     return this.max_Damage_Count;
    3.     }
    4.    
    5.     public void setMax_Damage_Count(int count) {
    6.     this.max_Damage_Count = (short)count;
    7.     }
    複製代碼



    找到 MapleCharacter ReconstructChr 在下方新增

    1. ret.max_Damage_Count = ct.max_Damage_Count;//破攻石
    複製代碼


    找到 MapleCharacter loadCharFromDB  並在 if (channelserver) 裡新增

    1. /* 破攻石 */
    2.                 ps = con.prepareStatement("SELECT maxDamage_Count FROM characters WHERE id = ?");
    3.                 ps.setInt(1, ret.id);
    4.                 rs = ps.executeQuery();
    5.                 if (rs.next()) {
    6.     ret.max_Damage_Count = rs.getShort("maxDamage_Count");
    7.                 }
    8.                 rs.close(); rs = null;
    9.                 ps.close(); ps = null;
    複製代碼



    找到 public int saveToDB  並找到 DELETE FROM inventoryslot 區域,在空白區新增


    1. ps = con.prepareStatement("UPDATE characters SET `maxDamage_Count` = ? WHERE id = ?");
    2.             ps.setShort(1, this.max_Damage_Count);
    3.             ps.setInt(2, this.id);
    4.             ps.execute();
    5.             ps.close();
    複製代碼


    找到 InterServerHandler.JAVA 並找到 LoggedIn 方法,在最後新增

    1. c.sendPacket(MaplePacketCreator.max_Damage(player.getId(), 30000,  player.getMax_Damage_Count()));
    複製代碼



    找到 InventoryHandler.JAVA 並找到 UseItem 方法,新增一個指定消耗物品方法,在下方新增

    1. if (itemId == 2000005) {//請填寫你要的消耗物品代碼
    2.    int baseDamage = 1999999 ;//預設頂傷,請與登入器後台設定相同
    3.             short count = chr.getMax_Damage_Count();
    4.             short now_Max_Damage_Count =  (short)(count + 1);
    5.             int newDamage = baseDamage + (now_Max_Damage_Count * 30000);//30000 每顆會增加多少頂傷
    6.             if(newDamage >= 2000000000){
    7.  chr.dropMessage("破攻石所加傷害已到官方設定頂傷,無法再使用");
    8.  c.sendPacket(MaplePacketCreator.enableActions());
    9.  return;
    10.             }else{
    11.   chr.setMax_Damage_Count(now_Max_Damage_Count);
    12.   c.sendPacket(MaplePacketCreator.max_Damage(chr.getId(), 30000, chr.getMax_Damage_Count()));// 請與上方的 30000 數字相同
    13.                
    14.   MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false);     
    15.   chr.dropMessage("破攻石使用數量:"+ now_Max_Damage_Count + "  基礎頂傷:" + baseDamage + " 最新動態頂傷:" + newDamage );
    16.   c.sendPacket(MaplePacketCreator.enableActions());
    17.   chr.saveToDB(false, false);
    18.   return;
    19.  }                    
    20.         }
    複製代碼



    找到 CharacterTransfer.JAVA 在下方新增

    1. public short max_Damage_Count;
    複製代碼



    找到 CharacterTransfer 方法,在下方新增

    1. this.max_Damage_Count = chr.getMax_Damage_Count();
    複製代碼


    找到 MaplePacketCreator.JAVA ,在下方新增方法

    1. public static byte[] max_Damage(int cid, int ItemDamarg, int count) {
    2.  MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
    3.  mplew.writeShort(1393);
    4.  mplew.writeInt(cid);
    5.  mplew.writeInt(ItemDamarg);
    6.  mplew.writeInt(count);
    7.  return mplew.getPacket();
    8.    }
    複製代碼



    接著,請找到您端口封包發配的資料區,有些是在端口中有,有些是端口資料夾有,請自行尋找,
    這邊以在端口有類別的為主。

    找到 SendPacketOpcode.JAVA 在下方新增

    1. DamageItem(0x571),
    複製代碼


    在您端口的 send.ini 中新增

    1. DamageItem = 0x571
    複製代碼



    到此,整套破攻系統就完成了,使用方法就是依照 UseItem 所指定的消耗道具,
    當在遊戲中使用這個道具,就可以觸發囉~~~





    共收到 10 A幣
    打賞榜
    共打賞 10 A幣
    暫無
    暫無
    暫無
    ----
    暫無
    ----
    暫無
    ----
    暫無
    ----

    點評

    駝....峰....阿....  發表於 2023-7-26 09:33
    您需要登錄後才可以回帖 登錄 | 註冊會員

    本版積分規則

    263

    發文

    1285

    金錢

    635

    A幣

    ----------榮譽勳章----------

    熱門推薦
    圖文推薦
    • 聯繫我們

    小黑屋|AICL社群娛樂集團

    GMT+8, 2024-11-22 10:08 , 網路刷新 0.116203 秒 .

    歡迎來到 AICL網路社群

    版權AICL社群所有 2011-2021.

    Total:123 Today:213 Online:322