【介紹】
團隊近期收到滿多希望自己端能有破攻石可以玩的需求,
於是乎,我被派來把破攻石的寫法做一做,如果自己端有源碼能改
並且也是領我們的免費商用登入器或單機登入器,就可以參考本篇教學~~
免費單人登入器 ( 點我 )
免費外連登入器 ( 點我 ) ← 查看 DC 公告
【教學開始】
找到 MapleCharacter.JAVA 在上方新增
1
private short max_Damage_Count = 0;//破攻石
複製代碼
找到 MapleCharacter getDefault 在下方新增
1
ret.max_Damage_Count = 0;//破攻石
複製代碼
新增方法
1
2
3
4
5
6
7
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 在下方新增
1
ret.max_Damage_Count = ct.max_Damage_Count;//破攻石
複製代碼
找到 MapleCharacter loadCharFromDB 並在 if (channelserver) 裡新增
1
2
3
4
5
6
7
8
9
/* 破攻石 */
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 區域,在空白區新增
1
2
3
4
5
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 方法,在最後新增
1
c.sendPacket(MaplePacketCreator.max_Damage(player.getId(), 30000, player.getMax_Damage_Count()));
複製代碼
找到 InventoryHandler.JAVA 並找到 UseItem 方法,新增一個指定消耗物品方法,在下方新增
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 在下方新增
1
public short max_Damage_Count;
複製代碼
找到 CharacterTransfer 方法,在下方新增
1
this.max_Damage_Count = chr.getMax_Damage_Count();
複製代碼
找到 MaplePacketCreator.JAVA ,在下方新增方法
1
2
3
4
5
6
7
8
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 所指定的消耗道具,
當在遊戲中使用這個道具,就可以觸發囉~~~
|