MOTR logo
    • Категории
    • Последние
    • Популярные
    • Метки
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Рефлект магии на визов с Platinum Shield'а

    Запланировано Прикреплена Закрыта Перенесена Архив ошибок
    1 Сообщения 1 Posters 212 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • AidanA Не в сети
      Aidan
      отредактировано

      Такой вот топик был http://forum.motronline.com/viewtopic.php?f=89&t=139114, его закрыли и перенесли в раздел "Работает как задумано". Но, мне стало интересно, как же на самом деле было задумано разработчиками eAthena, и я решил глянуть это дело в бранче атены stable. Поэтому, я еще раз попробую.

      1. Имя вашего персонажа.
      Mosquiton

      2. Дату и время обнаружения ошибки.
      WoE 1.0 21.07.2010, последние минут 20 примерно.

      3. Описание самой ошибки.
      На хайвиза под линком и с кристал фрагментами рефликтилась магия по средствам платинум щита. От кайте линк спасал.

      4. Причины почему это следует считать ошибкой и какой должна быть правильная работа (для тем с ошибками в скиллах, механике и т.п.).
      Для меня веской причиной являются исходники eAthena из бранча stable.

      !
      ! В skill.c я нашел следующее:
      ! [code:3qa4cdui]
      ! ...
      ! //Checks if 'bl' should reflect back a spell cast by 'src'.
      ! //type is the type of magic attack: 0: indirect (aoe), 1: direct (targetted)
      ! static int skill_magic_reflect(struct block_list* src, struct block_list* bl, int type)
      ! {
      ! struct status_change sc = status_get_sc(bl);
      ! struct map_session_data
      sd = BL_CAST(BL_PC, bl);
      !
      ! // item-based reflection
      ! if( sd && sd->magic_damage_return && type && rand()%100 < sd->magic_damage_return )
      ! return 1;
      !
      ! // status-based reflection
      ! if( !sc || sc->count == 0 )
      ! return 0;
      !
      ! if( sc->data[SC_MAGICMIRROR] && rand()%100 < sc->data[SC_MAGICMIRROR]->val2 )
      ! return 1;
      !
      ! if( sc->data[SC_KAITE] && (src->type == BL_PC || status_get_lv(src) <= 80) )
      ! {// Kaite only works against non-players if they are low-level.
      ! clif_specialeffect(bl, 438, AREA);
      ! if( --sc->data[SC_KAITE]->val2 <= 0 )
      ! status_change_end(bl, SC_KAITE, -1);
      ! return 1;
      ! }
      !
      ! return 0;
      ! }
      ! ...
      ! int skill_attack (int attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, int skillid, int skilllv, unsigned int tick, int flag)
      ! {
      ! ...
      ! if (attack_type&BF_MAGIC) {
      ! if( !(sstatus->mode&MD_BOSS) && (dmg.damage || dmg.damage2) && skill_magic_reflect(src, bl, src==dsrc) )
      ! { //Magic reflection, switch caster/target
      ! struct block_list *tbl = bl;
      ! bl = src;
      ! src = tbl;
      ! sd = BL_CAST(BL_PC, src);
      ! tsd = BL_CAST(BL_PC, bl);
      ! sc = status_get_sc(bl);
      ! if (sc && !sc->count)
      ! sc = NULL; //Don't need it.
      ! //Spirit of Wizard blocks bounced back spells.
      ! if (sc && sc->data[SC_SPIRIT] &&
      ! sc->data[SC_SPIRIT]->val2 == SL_WIZARD)
      ! {
      ! //It should only consume once per skill casted. Val3 is the skill
      ! //id and val4 is the ID of the damage src, this should account for
      ! //ground spells (and single target spells will be completed on
      ! //castend_id) [Skotlex]
      ! if (tsd && !(
      ! sc->data[SC_SPIRIT]->val3 == skillid &&
      ! sc->data[SC_SPIRIT]->val4 == dsrc->id)
      ! ) { //Check if you have stone to consume.
      ! type = pc_search_inventory (tsd, 7321);
      ! if (type >= 0)
      ! pc_delitem(tsd, type, 1, 0);
      ! } else
      ! type = 0;
      ! if (type >= 0) {
      ! dmg.damage = dmg.damage2 = 0;
      ! dmg.dmg_lv = ATK_FLEE;
      ! sc->data[SC_SPIRIT]->val3 = skillid;
      ! sc->data[SC_SPIRIT]->val4 = dsrc->id;
      ! }
      ! }
      ! }
      ! ...
      ! }
      !
      ! damage = dmg.damage + dmg.damage2;
      ! ...
      ! }
      ! ...
      ! [/code:3qa4cdui]
      !
      В атене разницы никакой между рефлектом магии с мирора и рефлектом с кайте (как собственно и было до этого момента; за пол года, стоя в дефе под линком и с фрагами, я не ловил рефлект магии ни разу). Да и вообще, нету разницы между любыми рефлектами магии касательно визов под линком. Если есть линк, то на 1 скилл тратится 1 фрагмент.

      5. Если есть скриншоты иллюстрирующие ошибку, их можно приложить к теме.
      Есть видео, но сейчас я не дома, поэтому не могу его приложить. Если понадобится, могу выложить позже.

      Если это поведение и вправду было намеренно изменено разработчиками эмуля MOTR'а, то почему о таком изменении не было нигде написано? И где тогда можно посмотреть все то, что не работает как задумано, а "работает как задумано"? "В слепую" играть нет ни малейшего желания.

      Также, можно спросить у разработчиков самой атены на форуме. Как-то общались с товарищем Skotlex по поводу какого-то не понятного момента, они достаточно быстро отвечают. Для визов просто очень критичный момент.

      1 ответ Последний ответ Ответить Цитировать 0
      • Первое сообщение
        Последнее сообщение