iskiz 0 Опубликовано 11 октября, 2013 (изменено) Здравствуйте посетители форума. Хочу разобраться с проблемой правильного дропа. Для примера его неправильности - шанс на Группу колечка АК в "RATED_GROUPED": <group chance="30.0"> <reward item_id="6660" min="1" max="1" chance="100.0000" /> <!--Ring of Queen Ant--> </group> Если я правильно все понимаю, то шанс на срабатывание группы должен быть 30% и если срабатывает, то кольцо 100% выпадает. Но на практике шанс группы 100%. Вернее через альт-шифт показывает правильно, а выпадает всегда 100%. Полез я в RewardData.java и первое на что обратил внимание: public RewardData(int itemId) { _item = ItemHolder.getInstance().getTemplate(itemId); if(_item.isArrow()) _notRate = true; // стрелы не рейтуются if(Config.NO_RATE_EQUIPMENT && _item.isEquipment()) _notRate = true; // отключаемая рейтовка эквипа if(Config.NO_RATE_KEY_MATERIAL && _item.isKeyMatherial()) _notRate = true; // отключаемая рейтовка ключевых материалов if(Config.NO_RATE_RECIPES && _item.isRecipe()) _notRate = true; // отключаемая рейтовка рецептов if(ArrayUtils.contains(Config.NO_RATE_ITEMS, itemId)) _notRate = true; if(Config.NO_RATE_HERBS && _item.isHerb()) _notRate = true; // отключаемая рейтовка хербов if(Config.NO_RATE_ENCHANT_SCROLL && _item.isEnchantScroll()) _notRate = true; if(Config.NO_RATE_ATT && _item.isAttributeCrystal()) _notRate = true; if(Config.NO_RATE_ATT && _item.isAttributeJewel()) _notRate = true; if(Config.NO_RATE_ATT && _item.isAttributeStone()) _notRate = true; if(Config.NO_RATE_ATT && _item.isAttributeEnergy()) _notRate = true; if(Config.NO_RATE_LIFE_STONE && _item.isLifeStone()) _notRate = true; if(Config.NO_RATE_CODEX_BOOK && _item.isCodexBook()) _notRate = true; if(Config.NO_RATE_FORGOTTEN_SCROLL && _item.isForgottenScroll()) _notRate = true; } "_notRate = true;" я расставил для каждого отдельно, так как один общий "_notRate = true;" на весь класс брал судя по всему последний шанс. Но к сожалению это не помогло. Проблему на данном этапе обнаружил в "RewardGroup.java" ФТ-сборки. Там есть функция: public List<RewardItem> roll(RewardType type, Player player, double mod, boolean isRaid, boolean isSiegeGuard, boolean isChampion) { switch(type) { case NOT_RATED_GROUPED: case NOT_RATED_NOT_GROUPED:{ _isRaid = false; return rollItems(mod, 1.0, 1.0);} case SWEEP:{ _isRaid = false; return rollItems(mod, Config.RATE_DROP_SPOIL, player.getRateSpoil());} case RATED_GROUPED: if(_isAdena) return rollAdena(mod, Config.RATE_DROP_ADENA, player.getRateAdena()); if(_isHerb){ _isRaid = false; return rollItems(mod, Config.RATE_DROP_HERBS, 1.0);} if(isRaid){ player.sendMessage("проверка"); // тут не работает _isRaid = true; _notRate = Config.NO_RATE_RAIDBOSS; return rollItems(mod, Config.RATE_DROP_RAIDBOSS, 1.0);} if(isSiegeGuard){ _isRaid = false; _notRate = Config.NO_RATE_SIEGE_GUARD; return rollItems(mod, Config.RATE_DROP_SIEGE_GUARD, 1.0);} _isRaid = false; player.sendMessage("проверка"); // показывает в чат return rollItems(mod, Config.RATE_DROP_ITEMS, player.getRateItems()); default: return Collections.emptyList(); } } Сделал проверку условий в кейсе "RATED_GROUPED" обычными сообщениями. И как оказалось проблема в том, что в функцию не поступают некоторые данные, в моем случае в функцию: public List<RewardItem> roll(RewardType type, Player player, double mod, boolean isRaid, boolean isSiegeGuard, boolean isChampion) не приходят данные "boolean isRaid". В то же время в самом RewardList.java: public RewardList(RewardType rewardType, boolean a) { super(5); _type = rewardType; _autoLoot = a; } public List<RewardItem> roll(Player player) { return roll(player, 1.0, false, false); } public List<RewardItem> roll(Player player, double mod) { return roll(player, mod, false, false); } public List<RewardItem> roll(Player player, double mod, boolean isRaid) { return roll(player, mod, true, false); // тут было return roll(player, mod, isRaid, false); } public List<RewardItem> roll(Player player, double mod, boolean isRaid, boolean isSiegeGuard) { return roll(player, mod, false, false, true); } public List<RewardItem> roll(Player player, double mod, boolean isRaid, boolean isSiegeGuard, boolean isChampion) { List<RewardItem> temp = new ArrayList<RewardItem>(size()); for(RewardGroup g : this) { List<RewardItem> tdl = g.roll(_type, player, mod, isRaid, isSiegeGuard, isChampion); if(!tdl.isEmpty()) for(RewardItem itd : tdl) temp.add(itd); } return temp; } Насколько я помню "boolean" может принимать значения "тру", "фелс", еденицу и ноль - в связи с чем поправил: public List<RewardItem> roll(Player player, double mod, boolean isRaid) { return roll(player, mod, true, false); // тут было return roll(player, mod, isRaid, false); } Но к сожалению это не помогло. Получается, что просто не приходят данные о типе моба (Рейдбосса, но подозреваю, что и остальных тоже). Есть ли идеи? Если я правильно понял всю проблему - подскажите пожалуйста куда смотреть(откуда идут данные о мобе)? Спасибо всем откликнувшимся Изменено 11 октября, 2013 пользователем iskiz Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
dislike 302 Опубликовано 11 октября, 2013 А зачем такие сложности? Просто перенси эпик бижу в нот рейтед нот групд. По поводу остальной рейтовки сегодня вечером посмотрю, если никто не поможет. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
iskiz 0 Опубликовано 11 октября, 2013 (изменено) А зачем такие сложности? Просто перенси эпик бижу в нот рейтед нот групд. По поводу остальной рейтовки сегодня вечером посмотрю, если никто не поможет. Дело в том, что хочется на дроп рейт с рейдов("NO_RATE_RAIDBOSS", "RATE_DROP_RAIDBOSS") поставить шанс в 2 раза ниже остального. А в таком случае, как у меня сейчас - нужно будет "RATE_DROP_ITEMS" менять. По поводу эпика - я так и сделал, но потом заметил, что шанс с РБ сам по себе сравнительно велик, а поменять не получается. Изменено 11 октября, 2013 пользователем iskiz Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
iskiz 0 Опубликовано 11 октября, 2013 По поводу остальной рейтовки сегодня вечером посмотрю, если никто не поможет. Было бы очень замечательно Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
iskiz 0 Опубликовано 12 октября, 2013 Есть у кого-нить идеи? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты