ну логика у меня в принципе такая. На МС скилла стоит код:

Код AS1/AS2:
onClipEvent (load) {
id = this._name.slice(5, 7);
gotoAndStop(id);
zabito = 0;
zabitoC = 0;
guardX = _x;//исходное
guardY = _y;//положение
lockMenu = false;
checks = true;
}
on (rollOver) {
if (lockMenu == false) {
_root.skillBASE(this._name);// берет инфу о скилле
_root.menuCheck(_x, _y, _width);//проверяет, чтобы самодельное окно не выходило за пределы экрана
}
}
on (press) {
this.swapDepths(100);
startDrag(this);
_root.information._visible = false;
lockMenu = true;
}
//теперь очень громоздкий код который мне ОЧЕНь хотелось бы оптимизировать, но мозг не рабоает что-то
on (release) {
for (i=1; i<=3; i++) {//идет перебор 3 слотов экипировки скиллов
if (this.hitTest(_root["slot"+i])) {
if (_root.a[i] == 1) {//условие проверяет забит ли i-тый слот другим скиллом, если 1 то забит и МС возвращается на своё guard место
i = 3;
_root.a[zabito] = 0;//изначально все скиллы находятся в нулевом слоте a[0]
trace("a["+zabito+"]="+_root.a[zabito]);
trace("ВЫШЕЛ ИЗ СЛОТА: "+zabito);
_x = guardX;
_y = guardY;
_width = 38;
_height = 38;
this.shine.gotoAndStop(1);
break;
} else {
_x = _root["slot"+i]._x;//далее естественно описывается вхождение в выбранный слот при свободном слоте
_y = _root["slot"+i]._y;
_width = _root["slot"+i]._width;
_height = _root["slot"+i]._height;
if (i<>zabito) {
trace("ВЫШЕЛ ИЗ СЛОТА "+zabito);
_root.a[zabito] = 0;
trace("a["+zabito+"]="+_root.a[zabito]);
}
trace("ВОШЕЛ В СЛОТ "+i);
_root.a[i] = 1;
trace("a["+i+"]="+_root.a[i]);
zabito = i;
this.shine.gotoAndStop(2);
break;
}
} else {
if (i == 3) {//а здесь описывается что происходит если hittest не "почувствовал" ни одного слота
_root.a[zabito] = 0;
trace("a["+zabito+"]="+_root.a[zabito]);
trace("ВЫШЕЛ ИЗ СЛОТА: "+zabito);
_x = guardX;
_y = guardY;
_width = 38;
_height = 38;
this.shine.gotoAndStop(1);
}
}//и вот сейчас начинается АД
if (this.hitTest(_root["comboslot"+i])) {//теперь проверяем еще 2 слота, но другие по функционалу, то есть не экипировк, а комбинирования
if (_root.b[i] == 1) {//естественно коды аналогичны
i = 2;
_root.b[zabitoC] = 0;
trace("b["+zabitoC+"]="+_root.b[zabitoC]);
trace("ВЫШЕЛ ИЗ СЛОТА: "+zabitoC);
_x = guardX;
_y = guardY;
_width = 38;
_height = 38;
this.shine.gotoAndStop(1);
break;
} else {
_x = _root["comboslot"+i]._x;
_y = _root["comboslot"+i]._y;
_width = _root["comboslot"+i]._width;
_height = _root["comboslot"+i]._height;
if (i<>zabitoC) {
trace("ВЫШЕЛ ИЗ СЛОТА "+zabitoC);
_root.b[zabitoC] = 0;
trace("b["+zabitoC+"]="+_root.b[zabitoC]);
}
trace("ВОШЕЛ В СЛОТ "+i);
_root.b[i] = 1;
trace("b["+i+"]="+_root.b[i]);
zabitoC = i;
if (i == 1) {
_root.part1 = id;
trace(_root.part1);
} else {
_root.part2 = id;
trace(_root.part2);
}
this.shine.gotoAndStop(2);
break;
}
} else {
if (i == 2) {
_root.b[zabitoC] = 0;
trace("b["+zabitoC+"]="+_root.b[zabitoC]);
trace("ВЫШЕЛ ИЗ СЛОТА: "+zabitoC);
_x = guardX;
_y = guardY;
_width = 38;
_height = 38;
this.shine.gotoAndStop(1);
}
}
}
stopDrag();
this.swapDepths(0);
lockMenu = false;
}
on (rollOut) {
_root.information._visible = false;//скрывает самодельное окно с инфой
}
И вот иногда бывают ошибки. Напрмер:
1) В 3ий слот экипировки не может попасть скилл, который находился в слоте комбо.
2) Всё видно на этом скриншоте
В общем всё состоит из 3 слотов экипировки и двух слотов для комбинирования скиллов. Я думал сделать их однотипными, то есть не делить на slot и comboslot, а slot1-slot5.
Что думаете по этому поводу. Прекрасно понимаю, что безумно избыточно, но лучше ничего к сожалению не придумал и то, что ВСЁ ЭТО на мувике меня тоже безумно напрягает, если учитывать что это всё дублируется на 50 аналогичных МС. Вот такие пироги
Если, что-то непонятно в коде спрашивайте