Перейти к содержанию
Авторизация  
iskiz

Правильная Настройка Дропа (First-Team И Другие)

Рекомендуемые сообщения

Здравствуйте посетители форума.

Хочу разобраться с проблемой правильного дропа.

Для примера его неправильности - шанс на Группу колечка АК в "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);
}

 

Но к сожалению это не помогло. Получается, что просто не приходят данные о типе моба (Рейдбосса, но подозреваю, что и остальных тоже).

Есть ли идеи? Если я правильно понял всю проблему - подскажите пожалуйста куда смотреть(откуда идут данные о мобе)?

 

Спасибо всем откликнувшимся

 

Изменено пользователем iskiz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем такие сложности? Просто перенси эпик бижу в нот рейтед нот групд. По поводу остальной рейтовки сегодня вечером посмотрю, если никто не поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем такие сложности? Просто перенси эпик бижу в нот рейтед нот групд. По поводу остальной рейтовки сегодня вечером посмотрю, если никто не поможет.

Дело в том, что хочется на дроп рейт с рейдов("NO_RATE_RAIDBOSS", "RATE_DROP_RAIDBOSS") поставить шанс в 2 раза ниже остального. А в таком случае, как у меня сейчас - нужно будет "RATE_DROP_ITEMS" менять. По поводу эпика - я так и сделал, но потом заметил, что шанс с РБ сам по себе сравнительно велик, а поменять не получается.

Изменено пользователем iskiz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу остальной рейтовки сегодня вечером посмотрю, если никто не поможет.

Было бы очень замечательно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...