10-11-2013, 04:04 AM
Здравствуйте посетители форума.
Хочу разобраться с проблемой правильного дропа.
Для примера его неправильности - шанс на Группу колечка АК в "RATED_GROUPED":
Если я правильно все понимаю, то шанс на срабатывание группы должен быть 30% и если срабатывает, то кольцо 100% выпадает.
Но на практике шанс группы 100%. Вернее через альт-шифт показывает правильно, а выпадает всегда 100%.
Полез я в RewardData.java и первое на что обратил внимание:
"_notRate = true;" я расставил для каждого отдельно, так как один общий "_notRate = true;" на весь класс брал судя по всему последний шанс. Но к сожалению это не помогло.
Проблему на данном этапе обнаружил в "RewardGroup.java" ФТ-сборки.
Там есть функция:
Сделал проверку условий в кейсе "RATED_GROUPED" обычными сообщениями. И как оказалось проблема в том, что в функцию не поступают некоторые данные, в моем случае в функцию:
не приходят данные "boolean isRaid". В то же время в самом RewardList.java:
Насколько я помню "boolean" может принимать значения "тру", "фелс", еденицу и ноль - в связи с чем поправил:
Но к сожалению это не помогло. Получается, что просто не приходят данные о типе моба (Рейдбосса, но подозреваю, что и остальных тоже).
Есть ли идеи? Если я правильно понял всю проблему - подскажите пожалуйста куда смотреть(откуда идут данные о мобе)?
Спасибо всем откликнувшимся
Хочу разобраться с проблемой правильного дропа.
Для примера его неправильности - шанс на Группу колечка АК в "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);
}
Но к сожалению это не помогло. Получается, что просто не приходят данные о типе моба (Рейдбосса, но подозреваю, что и остальных тоже).
Есть ли идеи? Если я правильно понял всю проблему - подскажите пожалуйста куда смотреть(откуда идут данные о мобе)?
Спасибо всем откликнувшимся