- UID
- 1005
- 閱讀權限
- 100
- 主題
- 142
- 帖子
- 263
- 精華
- 0
- A幣
- 635
- 在線時間
- 155 小時
- 最後登錄
- 2024-11-9
區域版主
- 主題
- 142
- 帖子
- 263
- 精華
- 0
- 綜合社群主題發文量
- 9
- 電玩社群主題發文量
- 10
- 娛樂社群主題發文量
- 0
- 技術社群主題發文量
- 98
- 閱讀權限
- 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 所指定的消耗道具,
當在遊戲中使用這個道具,就可以觸發囉~~~
|
|