From 2d02b4d124b9516e54768d167b8cd006be2067d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=AA=E9=A3=8E?= <1213457484@qq.com> Date: Tue, 11 Mar 2025 17:39:50 +0800 Subject: [PATCH] =?UTF-8?q?1=20=20=20=E6=B8=B8=E6=88=8F=EF=BC=9A=20?= =?UTF-8?q?=E7=BB=99=E3=80=90=E6=80=AA=E7=89=A9=E8=A1=80=E9=87=8F=E3=80=91?= =?UTF-8?q?=E5=92=8C=E3=80=90=E6=9C=8D=E5=8A=A1=E7=AB=AF=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E4=BC=A4=E5=AE=B3=E3=80=91=E7=AA=81=E7=A0=B4long=E7=9A=84?= =?UTF-8?q?=E9=99=90=E5=88=B6=EF=BC=889223372036854775807=EF=BC=89?= =?UTF-8?q?=E7=9B=AE=E5=89=8D=E6=9C=80=E9=AB=98922=E4=BA=AC=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=94=A8=E6=B5=8B=E8=AF=95=E4=BC=A4=E5=AE=B3?= =?UTF-8?q?=E9=82=A3=E4=B8=AA=E8=84=9A=E6=9C=AC=E6=B5=8B=E8=AF=95=EF=BC=8C?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E9=87=8C=E9=9D=A2=E6=94=B9=E6=80=AA=E7=89=A9?= =?UTF-8?q?=E8=A1=80=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (万 、亿 、兆、 京 、垓、秭、穰、沟、涧、正、载、极、恒河沙、阿僧祗、那由他、不可思议、无量、大数、古戈尔、频菠萝、矜羯罗、不可说不可说转、超限数、绝对无限、绝对无量、绝对小数、绝对大数、绝对超限数) 总共28个单位,每个单位是前一个单位的1万倍 同时人物头顶的信息显示也要显示,每达到一万的倍数就显示下级,比如9999万、9999亿、9999兆、1京以此类推 怪物血量显示也改成: 怪物血量剩余:9999万(00.00%)、9999亿(00.00%)、1兆(00.00%) 以此类推 //1200 2. 游戏: 点击游戏商城旁边的【解卡】按钮,让解卡功能可以生效,屏蔽掉弹出的聊天室 然后解卡的头顶信息显示加上人物的 伤害加成:、段伤次数:、切割伤害:、鞭尸几率: 切割伤害: 以万为进制单位 9999万 1亿 9999亿 1兆 和上面的血量一个概念的显示 //显示能做 150 3. 游戏: 游戏中攻击状态或者受伤状态人物会弯腰,这导致不能换装备不能丢道具进商城等一系列的限制,而且还弹窗恶心人 直接把这些限制禁止去掉,战斗状态或受伤的情况下可以进行所有操作 //服务端无法解决 4. 控制台:游戏设置-宠吸功能,在 功能开关 这里的 特殊全宠物吸物开关下面 增加一个开关 【boss支持吸金吸物开关】 就是说打死boss宠物也可以吸金吸物,目前boss是不吸的,同时哪怕打开了这个功能,如果地图代码是在不支持吸金吸物的表中,那肯定也不能吸 //功能150 开关你来 5. 控制台:定制功能里增加:1.多倍金币爆率表 2.多倍物品爆率表 3.金币+爆物双支持表,能支持写时间段和不限制时间段触发、不同道具是否支持叠加效果,可以用0/1区分,不需要道具数量叠加效果 源码搜索:5360018 看一下,原来的是写死在源码里的,如果同时拥有多个不同倍率的,增加个开关【不同倍率是否叠加】,不叠加就取最大值生效 //功能400 6. 控制台:定制功能里增加:鞭尸功能。。 就是传奇的鞭尸功能,玩家背包拥有某道具,道具数量越多几率越高,击杀怪物后,能让他再爆一遍,支持生效多倍爆率 这个功能在订制栏里面,增加个功能开关,增加个小一点的表,填道具 数量 几率 几率就按 1/10000 算吧 10000等于100% 触发鞭尸后,聊天框全服能看到的喇叭消息提示:恭喜[玩家名]在地图名字击杀怪物后触发鞭尸,怪物二次大爆! 这个功能需要能让js调用到函数,我可以显示在NPC上面,比如: 鞭尸几率:0.01% //功能400 7. 服务端: 启动工具的cmd不要呼出来 ,关闭服务端不需要重新打开,直接可以点击启动服务端 //你来研究下看看 我之前没弄出来 8. 服务端:服务端控制台-玩家控制台-后台工具-爆物管理 这里搞得人性化一点 归类到我自己的栏目里 之前的删掉或者屏蔽掉 可以点击上方的序号 怪物 名字 id 爆率 进行升降排序 显示出怪物ID对应的是什么怪物名字、能模糊搜怪物名、道具名,全部显示出来直接进行操作 可以直接在表上选取进行操作,能全部选取或者ctrl针对选取进行批量操作 添加爆率能直接搞个编辑框,按格式导入;同时能按导入格式导出 //ui 你来把 9. 游戏: 战力后面带 转生等级 显示 目前只显示战力 需要做成: 战力:123456 [转生次数0次] 这个 转生次数*次 自己可以在后台定义 比如给他改成 筑基*层 多少次转生显示什么在后台设置 比如转生100次= 金丹0层 那101次肯定不需要设置了对吧 直接显示 金丹1层 200次= 元婴0层 后面没增加新的话 就元婴1层 2层以此类推了 功能有开关,关闭的状态下只显示战力!打开的情况下显示在战力后面,我有其他端的截图,需要的时候给你看图 ★同时给战力修一下 玩家在脱穿装备的时候就即时更新战力,目前是需要切换频道的时候才能更新战力 //不知道转生功能是否已经有了 有了的话200 切换频道不知道麻不麻烦 不麻烦的话100 11. 游戏里有个偷学NPC,学了技能要切换频道才能显示,能不能改成学了技能就能显示 //估计是没办法的 --- src/client/MapleCharacter.java | 23 ++++++++++--- src/client/inventory/Equip.java | 18 +++++----- src/client/inventory/IEquip.java | 2 +- src/client/inventory/ItemLoader.java | 4 +-- src/gui/Start.java | 9 +++++ src/gui/tw/BsConfig.java | 24 ++++++++++++++ src/gui/tw/ZLConfig.java | 33 +++++++++++++++++++ src/gui/特殊控制台.java | 17 ++++++++++ .../channel/handler/InventoryHandler.java | 9 +++++ .../channel/handler/PlayersHandler.java | 4 ++- src/server/maps/MapleMap.java | 12 ++++++- src/tools/MaplePacketCreator.java | 11 ++++++- 12 files changed, 148 insertions(+), 18 deletions(-) create mode 100644 src/gui/tw/BsConfig.java create mode 100644 src/gui/tw/ZLConfig.java diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java index 39cef58..08cb455 100644 --- a/src/client/MapleCharacter.java +++ b/src/client/MapleCharacter.java @@ -11796,6 +11796,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject implements Se this.吸怪状态 = xx; } + + public enum FameStatus { OK, NOT_TODAY, @@ -11907,7 +11909,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject implements Se boolean b = this.haveItem(Integer.parseInt(string)); if (b) { int itemNum = getItemNum(Integer.parseInt(string)); - BigInteger qgbbValue = new BigInteger(qgbb.getInteger(string).toString()); + BigInteger qgbbValue = new BigInteger(qgbb.getString(string)); BigInteger itemNumBigInt = new BigInteger(Integer.toString(itemNum)); re = re.add(qgbbValue.multiply(itemNumBigInt)); } @@ -11919,7 +11921,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject implements Se for (String string : strings) { boolean b = this.hasEquipped(Integer.parseInt(string)); if (b) { - BigInteger qgzbValue = new BigInteger(qgzb.getInteger(string).toString()); + BigInteger qgzbValue = new BigInteger(qgzb.getString(string)); re = re.add(qgzbValue); } } @@ -11927,10 +11929,23 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject implements Se List equList = this.getEquList(); for (Equip equip : equList) { - BigInteger equipQG = new BigInteger(Integer.toString(equip.getqg())); - re = re.add(equipQG); + BigInteger equipQG = new BigInteger(equip.getqg()); + re = re.add(equipQG); } return re; } + + public int getBSJL() { + int re = 0; + if (Start.bskg == 0) { + return 0; + } + boolean b = this.haveItem(Start.bsConfig.getItem_id()); + if (b) { + re = getItemNum(Start.bsConfig.getItem_id()) * Start.bsConfig.getRate(); + } + if (re >10000)re = 10000; + return re; + } } diff --git a/src/client/inventory/Equip.java b/src/client/inventory/Equip.java index edc2edf..5d2fe40 100644 --- a/src/client/inventory/Equip.java +++ b/src/client/inventory/Equip.java @@ -4,6 +4,7 @@ import server.Randomizer; import constants.GameConstants; import java.io.Serializable; +import java.math.BigInteger; public class Equip extends Item implements IEquip, Serializable { private byte upgradeSlots; @@ -37,7 +38,7 @@ public class Equip extends Item implements IEquip, Serializable { private int incSkill; private int dd; private int db; - private int qg; + private String qg; public Equip(final int id, final short position, final byte flag) { super(id, position, (short) 1, flag); @@ -72,7 +73,7 @@ public class Equip extends Item implements IEquip, Serializable { this.incSkill = -1; this.dd = 0; this.db = 0; - this.qg = 0; + this.qg = "0"; } public Equip(final int id, final short position) { @@ -108,7 +109,7 @@ public class Equip extends Item implements IEquip, Serializable { this.incSkill = -1; this.dd = 0; this.db = 0; - this.qg = 0; + this.qg = "0"; } public Equip(final int id, final short position, final int uniqueid, final byte flag) { @@ -144,7 +145,7 @@ public class Equip extends Item implements IEquip, Serializable { this.incSkill = -1; this.dd = 0; this.db = 0; - this.qg = 0; + this.qg = "0"; } @Override @@ -397,9 +398,10 @@ public class Equip extends Item implements IEquip, Serializable { this.db = db; } - public void setqg(int qg) { - if (qg < 0) { - qg = 0; + public void setqg(String qg) { + BigInteger bigInteger = new BigInteger(qg); + if (bigInteger.compareTo(BigInteger.ZERO) < 0) { + qg = "0"; } this.qg = qg; } @@ -613,7 +615,7 @@ public class Equip extends Item implements IEquip, Serializable { } @Override - public int getqg() { + public String getqg() { return this.qg; } diff --git a/src/client/inventory/IEquip.java b/src/client/inventory/IEquip.java index fa34936..dfac49f 100644 --- a/src/client/inventory/IEquip.java +++ b/src/client/inventory/IEquip.java @@ -72,7 +72,7 @@ public interface IEquip extends IItem { int getdb(); - int getqg(); + String getqg(); public enum ScrollResult { SUCCESS, diff --git a/src/client/inventory/ItemLoader.java b/src/client/inventory/ItemLoader.java index 6b30185..4250720 100644 --- a/src/client/inventory/ItemLoader.java +++ b/src/client/inventory/ItemLoader.java @@ -116,7 +116,7 @@ public enum ItemLoader { equip.setMpR(rs.getShort("mpR")); equip.setdd(rs.getInt("dd")); equip.setdb(rs.getInt("db")); - equip.setqg(rs.getInt("qg")); + equip.setqg(rs.getString("qg")); equip.setGiftFrom(rs.getString("sender")); if (equip.getUniqueId() > -1 && GameConstants.isEffectRing(rs.getInt("itemid"))) { final MapleRing ring = MapleRing.loadFromDb(equip.getUniqueId(), mit.equals(MapleInventoryType.EQUIPPED)); @@ -268,7 +268,7 @@ public enum ItemLoader { pse.setInt(27, (int) equip.getMpR()); pse.setInt(28, (int) equip.getdd()); pse.setInt(29, (int) equip.getdb()); - pse.setInt(30, (int) equip.getqg()); + pse.setString(30, equip.getqg()); pse.executeUpdate(); } } diff --git a/src/gui/Start.java b/src/gui/Start.java index 2698988..c188b44 100644 --- a/src/gui/Start.java +++ b/src/gui/Start.java @@ -11,6 +11,8 @@ import cn.hutool.core.io.file.FileReader; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import gui.tw.BlConfig; +import gui.tw.BsConfig; +import gui.tw.ZLConfig; import server.MapleInventoryManipulator; import client.inventory.Equip; import handling.world.World.Broadcast; @@ -97,10 +99,17 @@ public class Start { public static JSONObject ConfigValuesJson; public static Map> ConfigItemJson = new HashMap<>(); + public static int bossxw = 1; public static List BLlist = new ArrayList<>(); public static int blkg = 0; public static int bldj = 0; + public static int bskg = 0; + public static int bsdj = 0; + public static BsConfig bsConfig = null; + + public static List zlConfigs = new ArrayList<>(); + diff --git a/src/gui/tw/BsConfig.java b/src/gui/tw/BsConfig.java new file mode 100644 index 0000000..b1cd315 --- /dev/null +++ b/src/gui/tw/BsConfig.java @@ -0,0 +1,24 @@ +package gui.tw; + +public class BsConfig { + + int item_id; + + int rate; + + public int getItem_id() { + return item_id; + } + + public void setItem_id(int item_id) { + this.item_id = item_id; + } + + public int getRate() { + return rate; + } + + public void setRate(int rate) { + this.rate = rate; + } +} diff --git a/src/gui/tw/ZLConfig.java b/src/gui/tw/ZLConfig.java new file mode 100644 index 0000000..e7cb187 --- /dev/null +++ b/src/gui/tw/ZLConfig.java @@ -0,0 +1,33 @@ +package gui.tw; + +public class ZLConfig { + + int num; + String name; + + String name2; + + public int getNum() { + return num; + } + + public String getName2() { + return name2; + } + + public void setName2(String name2) { + this.name2 = name2; + } + + public void setNum(int num) { + this.num = num; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/gui/特殊控制台.java b/src/gui/特殊控制台.java index 2507296..cd92081 100644 --- a/src/gui/特殊控制台.java +++ b/src/gui/特殊控制台.java @@ -30,6 +30,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import gui.tw.BlConfig; +import gui.tw.BsConfig; +import gui.tw.ZLConfig; import org.netbeans.lib.awtextra.AbsoluteConstraints; import java.awt.Component; @@ -69,7 +71,9 @@ import javax.swing.JPanel; import javax.swing.JLabel; import java.lang.management.MemoryMXBean; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; import client.inventory.IItem; @@ -1032,6 +1036,19 @@ public class 特殊控制台 extends JFrame { Start.bldj = jsonObject1.getInteger("stackable"); Start.BLlist = jsonObject1.getJSONArray("gold_and_item_drop_rates").toJavaList(BlConfig.class); + Start.bskg = jsonObject1.getInteger("bskg"); + Start.bsConfig = jsonObject1.getObject("bsitem",BsConfig.class); + try { + + + fileReader = new FileReader(property + "\\配置文件\\战力显示.ini"); + String result4 = fileReader.readString(); + JSONObject jsonObject2 = JSONObject.parseObject(result4); + Start.zlConfigs = jsonObject2 .getJSONArray("zl").toJavaList(ZLConfig.class).stream().sorted(Comparator.comparing(ZLConfig::getNum)).collect(Collectors.toList()); + + }catch (Exception e){ + e.printStackTrace(); + } } diff --git a/src/handling/channel/handler/InventoryHandler.java b/src/handling/channel/handler/InventoryHandler.java index 7f62df1..c24998f 100644 --- a/src/handling/channel/handler/InventoryHandler.java +++ b/src/handling/channel/handler/InventoryHandler.java @@ -1,5 +1,6 @@ package handling.channel.handler; +import tools.packet.FamilyPacket; import tools.packet.PlayerShopPacket; import server.shops.IMaplePlayerShop; @@ -102,13 +103,21 @@ public class InventoryHandler { final short quantity = slea.readShort(); if (src < 0 && dst > 0) { MapleInventoryManipulator.unequip(c, src, dst);//脱装备时 + c.getSession().write(MaplePacketCreator.fuckGuildInfo(c.getPlayer()));//自定义的显示名字 + c.sendPacket(FamilyPacket.getFamilyInfo(c.getPlayer())); } else if (dst < 0) { MapleInventoryManipulator.equip(c, src, dst);//穿装备时 + c.getSession().write(MaplePacketCreator.fuckGuildInfo(c.getPlayer()));//自定义的显示名字 + c.sendPacket(FamilyPacket.getFamilyInfo(c.getPlayer())); } else if (dst == 0) { MapleInventoryManipulator.drop(c, type, src, quantity); } else { MapleInventoryManipulator.move(c, type, src, dst); } + + + System.out.println(1); + } public static final void ItemSort(final LittleEndianAccessor slea, final MapleClient c) { diff --git a/src/handling/channel/handler/PlayersHandler.java b/src/handling/channel/handler/PlayersHandler.java index 2c6196a..f4b3c19 100644 --- a/src/handling/channel/handler/PlayersHandler.java +++ b/src/handling/channel/handler/PlayersHandler.java @@ -138,11 +138,13 @@ public class PlayersHandler { NPCScriptManager.getInstance().dispose(c); c.getSession().write(MaplePacketCreator.enableActions()); String string = "#d解卡完毕\r\n\r\n"; + MapleCharacter player = c.getPlayer(); //string += "时间 "+ FileoutputUtil.CurrentReadable_Time() + "\r\n"; string += "#d贪玩冒险岛\r\n"; string += "经验 " + Math.round((float) 人物经验) * MapleParty.活动经验倍率 + "倍,物品 " + Math.round((float) 人物物品爆率) + "倍, 金币 " + Math.round((float) 人物金币爆率) + "倍,\r\n\r\n"; string += "#b个人倍率\r\n"; - string += "经验 " + (long) (Math.round((float) c.getPlayer().getEXPMod()) * 100) * Math.round(c.getPlayer().getStat().expBuff / 100.0) + "%, 爆率 " + (long) (Math.round((float) c.getPlayer().getDropMod()) * 100) * Math.round(c.getPlayer().getStat().dropBuff / 100.0) + "%, 金币 " +(long) (Math.round((float) c.getPlayer().getCashMod()) * 100) * Math.round(c.getPlayer().getStat().mesoBuff / 100.0) * 100L + "%\r\n\r\n"; + string += "经验 " + (long) (Math.round((float) c.getPlayer().getEXPMod()) * 100) * Math.round(c.getPlayer().getStat().expBuff / 100.0) + "%, 爆率 " + (long) (Math.round((float) c.getPlayer().getDropMod()) * 100) * Math.round(c.getPlayer().getStat().dropBuff / 100.0) + "%, 金币 " +(long) (Math.round((float) c.getPlayer().getCashMod()) * 100) * Math.round(c.getPlayer().getStat().mesoBuff / 100.0) + "%\r\n"; + string += "伤害加成"+player.getDB()+"% 多段次数 " +player.getDD() + "次 切割伤害"+DamageParse.process(player.getQG().toString())+" 鞭尸几率" + player.getBSJL()/100+"%\r\n\r\n"; string += "#r个人资产\r\n"; string += "拥有:" + c.getPlayer().getCSPoints(1) + " 点劵\r\n\r\n"; string += "延迟 " + c.getPlayer().getClient().getLatency() + " 毫秒\r\n"; diff --git a/src/server/maps/MapleMap.java b/src/server/maps/MapleMap.java index e9f456b..7236770 100644 --- a/src/server/maps/MapleMap.java +++ b/src/server/maps/MapleMap.java @@ -1035,6 +1035,16 @@ public final class MapleMap { } } this.dropFromMonster(drop, monster); + + //贪玩鞭尸 + int bsjl = chr.getBSJL(); + int bsjl2 = Randomizer.rand(0, 10000); + if (bsjl2 < bsjl) { + String mapName1 = chr.getMap().getMapName(); + Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(5, "恭喜[" + chr.getName() + "]在"+mapName1+"击杀怪物后触发鞭尸,怪物二次大爆!")); + this.dropFromMonster(drop, monster); + } + int bs = chr.getBs(); @@ -2344,7 +2354,7 @@ public final class MapleMap { } } } - if (吸物状态 && mob.getStats().isBoss() && Start.ConfigValuesMap.get("boss吸物品开关") !=1){ + if (吸物状态 && mob.getStats().isBoss() && Start.bossxw != 1){ 吸物状态 = false; } diff --git a/src/tools/MaplePacketCreator.java b/src/tools/MaplePacketCreator.java index 958e91f..880b69b 100644 --- a/src/tools/MaplePacketCreator.java +++ b/src/tools/MaplePacketCreator.java @@ -1,5 +1,6 @@ package tools; +import gui.tw.ZLConfig; import server.ServerProperties; import client.inventory.Equip; import gui.Start; @@ -2871,7 +2872,15 @@ public class MaplePacketCreator { xl = "[☆超级王者☆]"; else if (c.getCombat() > 1100000) xl = "[☆宇宙王者☆]"; - mplew.writeMapleAsciiString("战力:" + c.getCombat()); + int 转生次数 = c.getAccountidLog("飞升"); + int cs = 转生次数; + String name = "转生次数" + cs +"层"; + for (ZLConfig zlConfig : Start.zlConfigs) { + if (zlConfig.getNum() <转生次数){ + name = zlConfig.getName() +(转生次数 -zlConfig.getNum())+ zlConfig.getName2(); + } + } + mplew.writeMapleAsciiString("战力:" + c.getCombat()+" "+name); mplew.write(0); mplew.writeInt(0); mplew.writeInt(0);