Такой вот топик был 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 по поводу какого-то не понятного момента, они достаточно быстро отвечают. Для визов просто очень критичный момент.