Myst case & OBB

Тема в разделе "Игровые вопросы", создана пользователем zesalamel, 6 май 2011.

  1. Шадоу

    Шадоу Игрок

    сударь, пруф пожалуйста!
  2. Маршель

    Маршель Игрок

    рейт не влияет. шансы те же
    (проверяла на практике)
  3. Arsin

    Arsin Игрок

    А на прошлом фриро рейты влияли
  4. Smile

    Smile Игрок

    Пруф? Исходный код eAthena. Если интересует подробнее - опишу принцип работы бонусов на дроп предметов от карт.
    Шанс выпадения легко проверить с помощью autoloot.
    Если при autoloot 0.89 Gift Box будет падать на землю, а при autoloot 0.9 - попадать в инвентарь, то шанс выпадения - 0.9. Аналогично будет и с Mimic Card.
    Stormtrooper нравится это.
  5. Шадоу

    Шадоу Игрок

    cool,bro
  6. -silver-

    -silver- Игрок

    не верю...если две карты - каждая добавит в дроп моба гифт бокс (их уже будет два в дропе, как крылышки у драника) и следовательно с одного моба при крайней везучести можно будет выбить две гифты... =)
    Или давай пруф, я сужу по строке:
    Код:
    { bonus2 bAddMonsterDropItem,644,30; },{},{}

    З.Ы.: дроп с муст кейса карты порезали дня три назад, нэ? Что-то очень редко с тех пор падают гифты....
  7. Stormtrooper

    Stormtrooper Игрок

    Мисткейс - хз, по ощущениям - то падает по 2-3 штуки сразу, то вообще не падает =))
  8. Smile

    Smile Игрок

    К сожалению, нельзя, если только Gift Box не является обычным дропом с моба.
    Может расскажете, что вы под ней понимаете?
    Скрипт предмета, конечно, хорошо, но за ним стоит куда более глубокая логика. Было бы не лишним узнать, как работает функция bonus2 с параметром bAddMonsterDropItem.

    Источник - eAthena trunk rev. 14801.
    pc.c - строка 2789
    Код:
        case SP_ADD_MONSTER_DROP_ITEM:
            if (sd->state.lr_flag != 2)
                pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, (1<<RC_BOSS)|(1<<RC_NONBOSS), val);
            break;
    
    pc.c - строка 1585
    Код:
    static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id, short group, int race, int rate)
    {
        int i;
        //Apply config rate adjustment settings.
        if (rate >= 0) { //Absolute drop.
            if (battle_config.item_rate_adddrop != 100)
                rate = rate*battle_config.item_rate_adddrop/100;
            if (rate < battle_config.item_drop_adddrop_min)
                rate = battle_config.item_drop_adddrop_min;
            else if (rate > battle_config.item_drop_adddrop_max)
                rate = battle_config.item_drop_adddrop_max;
        } else { //Relative drop, max/min limits are applied at drop time.
            if (battle_config.item_rate_adddrop != 100)
                rate = rate*battle_config.item_rate_adddrop/100;
            if (rate > -1)
                rate = -1;
        }
        for(i = 0; i < max && (drop[i].id || drop[i].group); i++) {
            if(
                (id && drop[i].id == id) ||
                (group && drop[i].group == group)
            ) {
                drop[i].race |= race;
                if(drop[i].rate > 0 && rate > 0)
                {    //Both are absolute rates.
                    if (drop[i].rate < rate)
                        drop[i].rate = rate;
                } else
                if(drop[i].rate < 0 && rate < 0) {
                    //Both are relative rates.
                    if (drop[i].rate > rate)
                        drop[i].rate = rate;
                } else if (rate < 0) //Give preference to relative rate.
                        drop[i].rate = rate;
                return 1;
            }
        }
        if(i == max) {
            ShowWarning("pc_bonus: Reached max (%d) number of added drops per character!\n", max);
            return 0;
        }
        drop[i].id = id;
        drop[i].group = group;
        drop[i].race |= race;
        drop[i].rate = rate;
        return 1;
    }
    mob.c - строка 2261
    Код:
                int itemid = 0;
                for (i = 0; i < ARRAYLENGTH(sd->add_drop) && (sd->add_drop[i].id || sd->add_drop[i].group); i++)
                {
                    if (sd->add_drop[i].race & (1<<status->race) ||
                        sd->add_drop[i].race & 1<<(status->mode&MD_BOSS?RC_BOSS:RC_NONBOSS))
                    {
                        //check if the bonus item drop rate should be multiplied with mob level/10 [Lupus]
                        if(sd->add_drop[i].rate < 0) {
                            //it's negative, then it should be multiplied. e.g. for Mimic,Myst Case Cards, etc
                            // rate = base_rate * (mob_level/10) + 1
                            drop_rate = -sd->add_drop[i].rate*(md->level/10)+1;
                            drop_rate = cap_value(drop_rate, battle_config.item_drop_adddrop_min, battle_config.item_drop_adddrop_max);
                            if (drop_rate > 10000) drop_rate = 10000;
                        }
                        else
                            //it's positive, then it goes as it is
                            drop_rate = sd->add_drop[i].rate;
    
                        if (rand()%10000 >= drop_rate)
                            continue;
                        itemid = (sd->add_drop[i].id > 0) ? sd->add_drop[i].id : itemdb_searchrandomid(sd->add_drop[i].group);
                        mob_item_drop(md, dlist, mob_setdropitem(itemid,1), 0, drop_rate, homkillonly);
                    }
                }
    Увы, подсветка синтаксиса здесь не работает.
    В коде разберетесь или я с вами не на том уровне абстракции разговариваю?

    Я и сам не сразу поверил, специально проверил на практике.
    Надел один мсткейс, убил ~3300 мобов - выпало 7 коробок.
    Надел 10 мисткейсов, убил ~2800 мобов - выпало 4 коробки.
    Результат на лицо.
    Дроп остался прежним - 0.9%.
    Stormtrooper нравится это.
  9. Renegade

    Renegade Игрок

    Странно, а по-моему каждая карта срабатывает по очереди...

    Остается выяснить какая у нас версия стоит... Чтобы убедиться на 200%...
  10. Smile

    Smile Игрок

    Ревизия сервера на это не влияет. В старинной 11981 (2007 год) код точно такой же. В последней на данный момент 14808 отличий также нет.
    Stormtrooper нравится это.
  11. MaximaL

    MaximaL Игрок

    пруфлинк
  12. -silver-

    -silver- Игрок

    Smile, спасибо, опечалил )) а я так мечтал второй мист одеть ))
    Stormtrooper нравится это.