查看: 1481|回复: 2

[楓之谷私服]v120 當前地圖怪物掉寶查詢

[复制链接]
  • TA的每日心情

    2022-12-15 19:48
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    74

    主题

    9

    回帖

    355

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    355
    QQ
    发表于 2022-11-21 15:37:56 | 显示全部楼层 |阅读模式
    本帖最后由 小强 于 2022-11-21 15:41 编辑




    [Java] 纯文本查看 复制代码
    打開 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();
        }
    }


    专注于GMS研究,有偿调试架设,全网最低,公益群:915210346。
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-6-28 07:37
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    2

    主题

    66

    回帖

    71

    积分

    注册会员

    Rank: 2

    积分
    71
    发表于 2024-6-19 18:25:22 | 显示全部楼层

    666666666666666
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-7-4 11:28
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    0

    主题

    55

    回帖

    168

    积分

    注册会员

    Rank: 2

    积分
    168
    发表于 2024-6-29 07:38:30 | 显示全部楼层
    66666666666666
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表