GorDeveloper 356 Опубликовано 11 марта, 2014 (изменено) Подскажите, взрываю себе мозг. Есть некое выражение, заложенное в Switch(), где в кейсах видим такую картинку: case ItemTemplate.SLOT_L_EAR: case ItemTemplate.SLOT_R_EAR: case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR: { if (_paperdoll[PAPERDOLL_LEAR] == null) { setPaperdollItem(PAPERDOLL_LEAR, item); } else if (_paperdoll[PAPERDOLL_REAR] == null) { setPaperdollItem(PAPERDOLL_REAR, item); } else { setPaperdollItem(PAPERDOLL_LEAR, item); } break; } Нужно переделать сию конструкцию в if{}else if{} ввиду невозможности запихнуть long в switch. Получилось так: else if(bodySlot == ItemTemplate.SLOT_L_EAR || bodySlot == ItemTemplate.SLOT_R_EAR) { if (_paperdoll[PAPERDOLL_LEAR] == null) { setPaperdollItem(PAPERDOLL_LEAR, item); } else if (_paperdoll[PAPERDOLL_REAR] == null) { setPaperdollItem(PAPERDOLL_REAR, item); } else { setPaperdollItem(PAPERDOLL_LEAR, item); } } Но правильно ли? Т.к. после сего действа, перестали одеваться сережки. Поправьте и скажите как лучше, не очень понимаю. Изменено 11 марта, 2014 пользователем AwakenDev Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 11 марта, 2014 case ItemTemplate.SLOT_L_EAR: case ItemTemplate.SLOT_R_EAR: case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 марта, 2014 else if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR) { if (_paperdoll[PAPERDOLL_LEAR] == null) { setPaperdollItem(PAPERDOLL_LEAR, item); } else if (_paperdoll[PAPERDOLL_REAR] == null) { setPaperdollItem(PAPERDOLL_REAR, item); } else { setPaperdollItem(PAPERDOLL_LEAR, item); } } Суть дела не поменялась: [12.03.14 13:01:35:783] WARN items.Inventory: onEquip: unknown body slot:6 for item id: 6656 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 12 марта, 2014 Суть дела не поменялась: [12.03.14 13:01:35:783] WARN items.Inventory: onEquip: unknown body slot:6 for item id: 6656 До меня чет не дошло что именно вы не можете впихнуть. И чем не устраивает данный код. case ItemTemplate.SLOT_L_EAR: case ItemTemplate.SLOT_R_EAR: { if (_paperdoll[PAPERDOLL_LEAR] == null) { setPaperdollItem(PAPERDOLL_LEAR, item); } else if (_paperdoll[PAPERDOLL_REAR] == null) { setPaperdollItem(PAPERDOLL_REAR, item); } else { setPaperdollItem(PAPERDOLL_LEAR, item); } break; } Есть некое выражение, заложенное в Switch(), какая Управляющая ? Управляющая ищет совпадения в кейсах. И потом ток чет делает. Давайте метод целиком и что хотите c делать подробно будем думать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 марта, 2014 До меня чет не дошло что именно вы не можете впихнуть. И чем не устраивает данный код. case ItemTemplate.SLOT_L_EAR: case ItemTemplate.SLOT_R_EAR: { if (_paperdoll[PAPERDOLL_LEAR] == null) { setPaperdollItem(PAPERDOLL_LEAR, item); } else if (_paperdoll[PAPERDOLL_REAR] == null) { setPaperdollItem(PAPERDOLL_REAR, item); } else { setPaperdollItem(PAPERDOLL_LEAR, item); } break; } Есть некое выражение, заложенное в Switch(), какая Управляющая ? Управляющая ищет совпадения в кейсах. И потом ток чет делает. Давайте метод целиком и что хотите c делать подробно будем думать Суть в том, что свич не может обрабатывать тип long в себе. Тут изначально, данные в типе int и всё нормально public void equipItem(ItemInstance item) { int bodySlot = item.getBodyPart(); double hp = getActor().getCurrentHp(); double mp = getActor().getCurrentMp(); double cp = getActor().getCurrentCp(); switch(bodySlot) { case ItemTemplate.SLOT_L_EAR: case ItemTemplate.SLOT_R_EAR: case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR: { if(_paperdoll[PAPERDOLL_LEAR] == null) { setPaperdollItem(PAPERDOLL_LEAR, item); } else if(_paperdoll[PAPERDOLL_REAR] == null) { setPaperdollItem(PAPERDOLL_REAR, item); } else { setPaperdollItem(PAPERDOLL_LEAR, item); } break; } После перевода в лонг, необходима смена swith на if/else. public void equipItem(ItemInstance item) { long bodySlot = item.getBodyPart(); System.out.println("SLOTS DEBUG SYSTEM: BodyPart slot is " + bodySlot); if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR) { if (_paperdoll[PAPERDOLL_LEAR] == null) { setPaperdollItem(PAPERDOLL_LEAR, item); } else if (_paperdoll[PAPERDOLL_REAR] == null) { setPaperdollItem(PAPERDOLL_REAR, item); } else { setPaperdollItem(PAPERDOLL_LEAR, item); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 12 марта, 2014 (изменено) а так не пробовал? if(bodySlot == (ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR)) просто ты в if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR) уже над результатами сравнения производишь битовое сложение. или над ItemTemplate.SLOT_L_EAR и bodySlot - я просто не помнь ща наизусть очередность операций в таком случае. Изменено 12 марта, 2014 пользователем Gaikotsu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 марта, 2014 (изменено) а так не пробовал? if(bodySlot == (ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR)) просто ты в if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR) уже над результатами сравнения производишь битовое сложение. или над ItemTemplate.SLOT_L_EAR и bodySlot - я просто не помнь ща наизусть очередность операций в таком случае. Ща глянем. Кстати, возьми на заметку. В хрониках выше линдвиора это понадобится. Там ячейки уже не укладываются в integer'e. Да, Благодарю, дело было именно в этом. Изменено 12 марта, 2014 пользователем AwakenDev Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 12 марта, 2014 (изменено) да я в курсе что там есть номера слотов выше 31. но пока мне это не актуально - это у тебя сборка пилится for fun и ты в принципе только пакетку и все что ей сопутствует мучаешь, а у меня сборка, над которой я работаю, уже стоит на серверах на которых играют и посему пока ап до эпиздеона и выше не планируется - пока линдвиор домучивается, притом 531 протокол - выше пока по пакетке даже и не лезу. Изменено 12 марта, 2014 пользователем Gaikotsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 марта, 2014 (изменено) да я в курсе что там есть номера слотов выше 31. но пока мне это не актуально - это у тебя сборка пилится for fun и ты в принципе только пакетку и все что ей сопутствует мучаешь, а у меня сборка, над которой я работаю, уже стоит на серверах на которых играют и посему пока ап до эпиздеона и выше не планируется - пока линдвиор домучивается, притом 531 протокол - выше пока по пакетке даже и не лезу. Очень много букав, но дочитал. Я так на всякий случай. И там не просто номера выше 31. Там теперь вся инфа о бодипартах отсылается в writeQ. Изменено 12 марта, 2014 пользователем AwakenDev Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 12 марта, 2014 (изменено) ну это логично, ибо битовую маску со значениями слотов выше 31 в int не пошлешь. интерестно как будут выкручиваться если внезапно еще слотов добавят и 63 (при long) не хватит ну а мне пока даже на будущее нет смысла делать хранение в long - будут лишь лишние преобразования типов в итоге. Изменено 12 марта, 2014 пользователем Gaikotsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 марта, 2014 ну это логично, ибо битовую маску со значениями слотов выше 31 в int не пошлешь. интерестно как будут выкручиваться если внезапно еще слотов добавят и 63 (при long) не хватит ну а мне пока даже на будущее нет смысла делать хранение в long - будут лишь лишние преобразования типов в итоге. Ну пока добавилось 1 брошка и 6 камней к ней. соответственно 7 слотов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 12 марта, 2014 ты как будто корейцев не знаешь - ударит им опять что-то в голову и выкинут коленце типа "а давайте пропустим несколько десятков номеров слотов и сделаем новые слоты с номерами ну например с 71". Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 12 марта, 2014 а так не пробовал? if(bodySlot == (ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR)) просто ты в if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR) уже над результатами сравнения производишь битовое сложение. или над ItemTemplate.SLOT_L_EAR и bodySlot - я просто не помнь ща наизусть очередность операций в таком случае. Видимо я слишком тонко ответил. К прочтению: http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 марта, 2014 Видимо я слишком тонко ответил. К прочтению: http://ru.wikipedia....итовые_операции Да уже прочитал, самообразовался. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты