最後更新於 2021 年 7 月 1 日
應該同樣適用於113,其他版本沒試過。
SRC
打開 Sever\Maps\MapleMap.java
,在上方 import 處加上:
import server.life.MonsterDropEntry; import server.life.MonsterGlobalDropEntry; import server.life.MapleMonsterInformationProvider;
然後在最下方 }
前貼上:
public List<Integer> getAllUniqueMonsters() { ArrayList<Integer> ret = new ArrayList<>(); mapobjectlocks.get(MapleMapObjectType.MONSTER).readLock().lock(); try { for (MapleMapObject mmo : mapobjects.get(MapleMapObjectType.MONSTER).values()) { int theId = ((MapleMonster) mmo).getId(); if (!ret.contains(theId)) { ret.add(theId); } } } finally { mapobjectlocks.get(MapleMapObjectType.MONSTER).readLock().unlock(); } return ret; } private Map<Integer, MapleMapObject> mapobjects1 = new LinkedHashMap<Integer, MapleMapObject>(); public Collection<MapleMapObject> getMapObjects() { return Collections.unmodifiableCollection(mapobjects1.values()); } public List<Integer> getUniqueMonsters() { List<Integer> mobs = new ArrayList<Integer>(); for (MapleMapObject obj : this.getMapObjects()) { MapleMonster mob = this.getMonsterByOid(obj.getObjectId()); if (mob != null) { if (!mobs.contains(mob.getId())) { mobs.add(mob.getId()); } } } return mobs; }
- 打開
scripting\NPCConversationManager.java
,在最下方}
前貼上
public String checkDrop(int mobId) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); List<MonsterDropEntry> ranks = MapleMonsterInformationProvider.getInstance().retrieveDrop(mobId); if (!ranks.isEmpty() && ranks.size() > 0) { int num = 0, itemId, chance; MonsterDropEntry de; StringBuilder name = new StringBuilder(); for (MonsterDropEntry rank : ranks) { de = rank; if (de.chance > 0 && (de.questid <= 0 || (de.questid > 0 && MapleQuest.getInstance(de.questid).getName().length() > 0))) { itemId = de.itemId; if (itemId == 0) { continue; } else if (!ii.itemExists(itemId)) { continue; } if (num == 0) { name.append("當前怪物 #o").append(mobId).append("# 的掉寶率為:\r\n"); name.append("--------------------------------------\r\n"); } String namez = ""; if (itemId == 0) { //金幣 物品ID為0就是金幣道具 itemId = 4031041; //休咪的錢包 display sack of cash namez = (de.Minimum * getClient().getChannelServer().getMesoRate()) + " - " + (de.Maximum * getClient().getChannelServer().getMesoRate()) + " 的金幣"; } else { namez = "#z" + itemId + "#"; } chance = de.chance * getClient().getChannelServer().getDropRate(); if (getPlayer().isAdmin()) { name.append(num + 1).append(") #v").append(itemId).append("#").append(namez).append(" - ").append(Integer.valueOf(chance >= 999999 ? 1000000 : chance).doubleValue() / 10000.0).append("%的掉寶率. ").append(de.questid > 0 && MapleQuest.getInstance(de.questid).getName().length() > 0 ? ("需要接受任務: " + MapleQuest.getInstance(de.questid).getName()) : "").append("\r\n"); } else { name.append(num + 1).append(") #v").append(itemId).append("#").append(namez).append(de.questid > 0 && MapleQuest.getInstance(de.questid).getName().length() > 0 ? ("需要接受任務: " + MapleQuest.getInstance(de.questid).getName()) : "").append("\r\n"); } num++; } } if (name.length() > 0) { return name.toString(); } } return "沒有找到這個怪物的掉寶率數據。"; } public String checkMapDrop() { List<MonsterGlobalDropEntry> ranks = new ArrayList<>(MapleMonsterInformationProvider.getInstance().getGlobalDrop()); int mapid = getPlayer().getMap().getId(); //int cashServerRate = getClient().getChannelServer().getCashRate(); //點卷掉寶率 //int globalServerRate = getClient().getChannelServer().getDropgRate(); //特殊數據庫道具掉寶率 int globalServerRate = 1; //特殊數據庫道具掉寶率 if (ranks != null && ranks.size() > 0) { int num = 0, itemId, chance; MonsterGlobalDropEntry de; StringBuilder name = new StringBuilder(); for (MonsterGlobalDropEntry rank : ranks) { de = rank; if (de.continent < 0 || (de.continent < 10 && mapid / 100000000 == de.continent) || (de.continent < 100 && mapid / 10000000 == de.continent) || (de.continent < 1000 && mapid / 1000000 == de.continent)) { itemId = de.itemId; if (num == 0) { name.append("當前地圖 #r").append(mapid).append("#k - #m").append(mapid).append("# 的全局掉寶率為:"); name.append("\r\n--------------------------------------\r\n"); } String names = "#z" + itemId + "#"; // if (itemId == 0 && cashServerRate != 0) { // itemId = 4031041; // names = (de.minimum * cashServerRate) + " - " + (de.maximum * cashServerRate) + " 的抵用卷"; // } chance = de.chance * globalServerRate; if (getPlayer().isAdmin()) { name.append(num + 1).append(") #v").append(itemId).append("#").append(names).append(" - ").append(Integer.valueOf(chance >= 999999 ? 1000000 : chance).doubleValue() / 10000.0).append("%的掉寶率. ").append(de.questid > 0 && MapleQuest.getInstance(de.questid).getName().length() > 0 ? ("需要接受任務: " + MapleQuest.getInstance(de.questid).getName()) : "").append("\r\n"); } else { name.append(num + 1).append(") #v").append(itemId).append("#").append(names).append(de.questid > 0 && MapleQuest.getInstance(de.questid).getName().length() > 0 ? ("需要接受任務: " + MapleQuest.getInstance(de.questid).getName()) : "").append("\r\n"); } num++; } } if (name.length() > 0) { return name.toString(); } } return "當前地圖沒有設置全局掉寶率。"; }
NPC腳本
隨便塞給一個NPC就行
var status = -1; function action(mode, type, selection) { if (mode == 1) { status++; } else { if (status == 0) { cm.dispose(); } status--; } if (status == 0) { if (cm.getMap().getAllMonstersThreadsafe().size() <= 0) { cm.sendOk("當前地圖沒有刷新怪物,無法查看怪物掉寶資訊。"); cm.dispose(); return; } var selStr = "請選擇你要查看怪物的掉寶資訊。\r\n\r\n#b"; var iz = cm.getMap().getAllUniqueMonsters().iterator(); while (iz.hasNext()) { var zz = iz.next(); selStr += "#L" + zz + "##o" + zz + "##l\r\n"; } if (cm.getPlayer().isAdmin()) { selStr += "\r\n#L0# #r查看全地圖掉寶資訊#k#l"; } cm.sendSimple(selStr); } else if (status == 1) { if (selection == 0) { cm.sendNext(cm.checkMapDrop()); } else { cm.sendOk(cm.checkDrop(selection)); } cm.dispose(); } }
Latest posts by pluto (see all)
- React 那些好看、有趣、實用的函式庫、組件庫推薦(2) - 2022 年 6 月 26 日
- 解決 preact 資源請求路徑錯誤的問題 - 2022 年 6 月 24 日
- [楓之谷私服] 潮流轉蛋機 NPC 腳本優化 - 2022 年 6 月 19 日
List<MonsterDropEntry> ranks = MapleMonsterInformationProvider.getInstance().retrieveDrop(mobId);
這邊我也出現錯誤
應該是導包問題
在最上方加上
import server.life.MonsterDropEntry;
import server.life.MonsterGlobalDropEntry;
謝謝 這個ok了
import server.life.MapleMonsterInformationProvider;
再加上這個就沒錯誤了
謝謝你 我在文中補上了
請問大大知道怎麼關閉其他玩家的技能特效嗎 ?
哦哦 沒事了 有找出來了
非GM權限的玩家好像看不到機率只能看到掉落物
想改但不會改..還停留在JS複製貼上改造的程度
如果大大方便的話 再麻煩您了
文中 NPCConversationManager.java 的第 29 – 33 以及 68 – 72 行,第一個 if 判斷式就是判斷是不是 GM,如果是 GM才會顯示掉寶率。如果一般玩家也要顯示的話,直接把 if (getPlayer().isAdmin()) { } 裡面的內容搬出來,然後原本的 if else 註釋掉就好。
非常感謝大大 我弄好了