Пакет EnchantResult

nesss

Путник
Участник
Сообщения
129
Розыгрыши
0
Решения
3
Репутация
-2
Реакции
14
Баллы
85
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Собственная
Всем привет, подскажите параметры.

Вот так выглядит пакет:
Java:
        writeByte(0x81);
        writeInt(result);

Параметр result:

0 - удачно.
1 - ???
2 - отмена.
3 - не удачно.
4 - ?????
 
Значения 1 и 4 применяются если enchant не удался. Все зависит от типа кристалла:

Код:
if (crystalId == 0)
  sendEnchantFailed(4);
else
  sendEnchantFailed(1);

Если каким-то образом был разбит предмет на no-grade (предмет без типа кристалла, обычно это no-grade) нужно пересылать код 4.
 
Не понял, а вроде нельзя разбивать НГ шмотки?
 
Ну так а зачем тогда те параметры? 1 и 4 в пакете, если НГ нельзя точить. И каким это образом можно разбить предмет на НГ кристаллы??
 
Ну так а зачем тогда те параметры? 1 и 4 в пакете, если НГ нельзя точить. И каким это образом можно разбить предмет на НГ кристаллы??
там идет указание "если был разбит НГ предмет (любой предмет без кристаллов)".
На возможно это бижа какая-то, на ессенса это может быть кольцо баюма, ну или футболка какая-то. В БУДУЩЕЕ СМОТРЕЛИ!)
В любом случае - если нет кристаллов напишет "Не удалось, предмет уничтожен". Если есть кристаллы, напишет "Не удалось, предмет кристаллизирован".
 
ааа, ну я понял, в клиенте вроде если пробуешь кристаллизовать НГ предмет, то даже пакет не высылается на сервер. А если каким-то макаром принудительно отправить, то идет проверка на грейд, и если он НГ, то просто пропускается выполнение метода кристаллизации.
 
Всем привет, подскажите параметры.

Вот так выглядит пакет:
Java:
        writeByte(0x81);
        writeInt(result);

Параметр result:

0 - удачно.
1 - ???
2 - отмена.
3 - не удачно.
4 - ?????
Код:
enum ItemEnchantResult : __int32
{
  IER_SUCCESS = 0x0,
  IER_FAIL = 0x1,
  IER_CANCELED = 0x2,
  IER_BLESSED_FAIL = 0x3,
  IER_EVENT_FAIL = 0x4,
  IER_ANCIENT_BLESSED_FAIL = 0x5,
  IER_MAX = 0x6,
};
 
интерлюду кажется без разницы что там отправлять (может в дллке хардкод)
Код:
function HandleEnchantResult(string param)
{
    //결과에 상관없이 무조건 Hide
    Me.HideWindow();
    Clear();
}

но начиная с ГФа там уже идет обработка результата

у воронов довольно подробное описание
Java:
public class EnchantResult extends L2GameServerPacket
{
    private final int _resultId, _crystalId;
    private final long _count;
    public static final EnchantResult SUCESS = new EnchantResult(0, 0, 0); // вещь заточилась
    public static final EnchantResult FAILED = new EnchantResult(1, 0, 0); // вещь разбилась, требует указания получившихся кристаллов, в статичном виде не используется
    public static final EnchantResult CANCEL = new EnchantResult(2, 0, 0); // заточка невозможна
    public static final EnchantResult BLESSED_FAILED = new EnchantResult(3, 0, 0); // заточка не удалась, уровень заточки сброшен на 0
    public static final EnchantResult FAILED_NO_CRYSTALS = new EnchantResult(4, 0, 0); // вещь разбилась, но кристаллов не получилось (видимо для эвента, сейчас использовать невозможно, там заглушка)
    public static final EnchantResult ANCIENT_FAILED = new EnchantResult(5, 0, 0); // заточка не удалась, уровень заточки не изменен (для Ancient Enchant Crystal из итем молла)


    public EnchantResult(int resultId, int crystalId, long count)
    {
        _resultId = resultId;
        _crystalId = crystalId;
        _count = count;
    }


    @Override
    protected final void writeImpl()
    {
        writeC(0x87);
        writeD(_resultId);
        writeD(_crystalId); // item id кристаллов
        writeQ(_count); // количество кристаллов
    }
}

ну и обработка ГФа-ХФ (мб с ХБ начинается)
Код:
function HandleEnchantResult(string param)
{
    local int IntResult;
    local ItemID ItemID;
    local int64 Count;
    local int CountInt;
    local ItemInfo ResultItem;
    local string EndTxt;
    EnchantProgressAnim.HideWindow();
    //결과에 상관없이 무조건 Hide
    //~ Me.HideWindow();
    //~ Clear();
    //debug (param);
    ParseInt(Param, "Result", IntResult );
    ParseItemID(param, ItemID );
    Parseint64(param, "Count", Count );
    ParseInt(param, "Count", CountInt );
    //debug ("count:" @ string(int(Count)));
    class'UIDATA_ITEM'.static.GetItemInfo(ItemID, ResultItem );
    
    switch (IntResult)
    {
        case 0:
            bEnchantedbool = true;
            EnchantProgressAnim.HideWindow();
            EnchantProgressAnim.SetTexture("l2ui_ct1.ItemEnchant_DF_Effect_Success_00");
            EnchantProgressAnim.SetLoopCount( 1 );
            EnchantProgressAnim.Stop();
            EnchantProgressAnim.Play();
            Playsound("ItemSound3.enchant_success");
            EnchantProgressAnim.ShowWindow();
        
            BackPattern.SetAlpha(0, 0);
            BackPattern.ShowWindow();
            BackPattern.SetAlpha(255, 2);
        
            SelectItemInfo.Enchanted = SelectItemInfo.Enchanted+1;
        
            EnchantedItemSlot.SetItem( 0, SelectItemInfo );
            EnchantedItemSlot.AddItem( SelectItemInfo );
            EndTxt = MakeFullSystemMsg(GetSystemMessage(2342), "+"$string(SelectItemInfo.Enchanted) @ SelectItemInfo.Name, "");
            InstructionTxt.SetText(EndTxt);
            EnchantedItemSlot.SetAlpha(0);
            EnchantedItemSlot.ShowWindow();
            EnchantedItemSlot.SetAlpha(255,2);
            CloverItemSlot.HideWindow();
            //~ EnchantItemSlot.SetAlpha(0, 2);
            EnchantItemSlot.HideWindow();
            EnchantScriptSlot.HideWindow();
            CloverItemSlot.HideWindow();
            break;
        
        case 1:
            bEnchantedbool = true;
            EnchantProgressAnim.HideWindow();
            EnchantProgressAnim.SetTexture("l2ui_ct1.ItemEnchant_DF_Effect_Failed_01");
            EnchantProgressAnim.SetLoopCount( C_ANIMLOOPCOUNT );
            EnchantProgressAnim.Stop();
            EnchantProgressAnim.Play();
            Playsound("ItemSound3.enchant_fail");
            EnchantProgressAnim.ShowWindow();
        
            BackPattern.SetAlpha(0, 0);
            BackPattern.ShowWindow();
            BackPattern.SetAlpha(255, 2);
        
            //~ ResultItem.
            ResultItem.ItemNum = Count;
            //debug ("Count2" @ string(int(Count)));
            EnchantedItemSlot.SetAlpha(0);
            EnchantedItemSlot.SetItem( 0, ResultItem );
            EnchantedItemSlot.AddItem( ResultItem );
            EnchantedItemSlot.ShowWindow();
            EnchantedItemSlot.SetAlpha(255,2);
            EndTxt = MakeFullSystemMsg(GetSystemMessage(2343), ResultItem.Name, String(CountInt));
            InstructionTxt.SetText(EndTxt);
        
            CloverItemSlot.HideWindow();
            EnchantItemSlot.HideWindow();
            //~ EnchantItemSlot.SetAlpha(0, 3);
            //~ EnchantItemSlot.HideWindow();
            EnchantScriptSlot.HideWindow();
            CloverItemSlot.HideWindow();
            break;
        case 2:
            EnchantProgressAnim.HideWindow();
            if (!bEnchantedbool)
                Me.HideWindow();
            break;
        case 3:
            bEnchantedbool = true;
            EnchantProgressAnim.HideWindow();
            EnchantProgressAnim.SetTexture("l2ui_ct1.ItemEnchant_DF_Effect_Failed_01");
            EnchantProgressAnim.SetLoopCount( C_ANIMLOOPCOUNT );
            EnchantProgressAnim.Stop();
            EnchantProgressAnim.Play();
            Playsound("ItemSound3.enchant_fail");
            EnchantProgressAnim.ShowWindow();
        
            BackPattern.SetAlpha(0, 0);
            BackPattern.ShowWindow();
            BackPattern.SetAlpha(255, 2);
        
            //~ ResultItem.
            ResultItem.ItemNum = IntToInt64(1);
            EnchantedItemSlot.SetAlpha(0);
            SelectItemInfo.Enchanted = 0;
            EnchantedItemSlot.SetItem( 0, SelectItemInfo );
            EnchantedItemSlot.AddItem( SelectItemInfo );
            EnchantedItemSlot.ShowWindow();
            EnchantedItemSlot.SetAlpha(255,2);
            EndTxt = MakeFullSystemMsg(GetSystemMessage(2343), SelectItemInfo.Name, "1");
            InstructionTxt.SetText(EndTxt);
        
            CloverItemSlot.HideWindow();
            EnchantItemSlot.HideWindow();
            //~ EnchantItemSlot.SetAlpha(0, 3);
            //~ EnchantItemSlot.HideWindow();
            EnchantScriptSlot.HideWindow();
            CloverItemSlot.HideWindow();
            break;
            
        case 4:
            bEnchantedbool = true;
            EnchantProgressAnim.HideWindow();
            EnchantProgressAnim.SetTexture("l2ui_ct1.ItemEnchant_DF_Effect_Failed_01");
            EnchantProgressAnim.SetLoopCount( C_ANIMLOOPCOUNT );
            EnchantProgressAnim.Stop();
            EnchantProgressAnim.Play();
            Playsound("ItemSound3.enchant_fail");
            EnchantProgressAnim.ShowWindow();
        
            BackPattern.SetAlpha(0, 0);
            BackPattern.ShowWindow();
            BackPattern.SetAlpha(255, 2);
        
            //~ ResultItem.
            ResultItem.ItemNum = IntToInt64(0);
            EnchantedItemSlot.SetAlpha(0);
            EnchantedItemSlot.SetItem( 0, ResultItem );
            EnchantedItemSlot.AddItem( ResultItem );
            //~ EnchantedItemSlot.ShowWindow();
            EnchantedItemSlot.SetAlpha(255,2);
            EndTxt = MakeFullSystemMsg(GetSystemMessage(64), SelectItemInfo.Name,"");
            InstructionTxt.SetText(EndTxt);
        
            CloverItemSlot.HideWindow();
            EnchantItemSlot.HideWindow();
            //~ EnchantItemSlot.SetAlpha(0, 3);
            //~ EnchantItemSlot.HideWindow();
            EnchantScriptSlot.HideWindow();
            break;
            
        //branch
        case 5:            // case IER_ANCIENT_BLESSED_FAIL -> ItemEnchantResult 상수가 추가되어 번호가 변경되진 않는지 확인.
            bEnchantedbool = true;
            EnchantProgressAnim.HideWindow();
            EnchantProgressAnim.SetTexture("l2ui_ct1.ItemEnchant_DF_Effect_Failed_01");
            EnchantProgressAnim.SetLoopCount( C_ANIMLOOPCOUNT );
            EnchantProgressAnim.Stop();
            EnchantProgressAnim.Play();
            Playsound("ItemSound3.enchant_fail");
            EnchantProgressAnim.ShowWindow();
        
            BackPattern.SetAlpha(0, 0);
            BackPattern.ShowWindow();
            BackPattern.SetAlpha(255, 2);
        
            //~ ResultItem.
            ResultItem.ItemNum = IntToInt64(1);
            EnchantedItemSlot.SetAlpha(0);
            EnchantedItemSlot.SetItem( 0, SelectItemInfo );
            EnchantedItemSlot.AddItem( SelectItemInfo );
            EnchantedItemSlot.ShowWindow();
            EnchantedItemSlot.SetAlpha(255,2);
            EndTxt = GetSystemMessage(6004);
            InstructionTxt.SetText(EndTxt);
        
            CloverItemSlot.HideWindow();
            EnchantItemSlot.HideWindow();
            //~ EnchantItemSlot.SetAlpha(0, 3);
            //~ EnchantItemSlot.HideWindow();
            EnchantScriptSlot.HideWindow();
            CloverItemSlot.HideWindow();
            break;
        //end of branch
        
    }
    ExitBtn.SetNameText( GetSystemString(646) );
    EnchantBtn.DisableWindow();
    ExitBtn.EnableWindow();
}

FAILED_NO_CRYSTALS (4) как видим отправляется при заточке йоги стафа, ивент предмета
 
Спасибо за ГФ, но интересует ИТ )))

Код:
enum ItemEnchantResult : __int32
{
  IER_SUCCESS = 0x0,
  IER_FAIL = 0x1,
  IER_CANCELED = 0x2,
  IER_BLESSED_FAIL = 0x3,
  IER_EVENT_FAIL = 0x4,
  IER_ANCIENT_BLESSED_FAIL = 0x5,
  IER_MAX = 0x6,
};

IER_EVENT_FAIL = 0x4, - вот это что?
IER_ANCIENT_BLESSED_FAIL = 0x5, - вот это что?
IER_MAX = 0x6, - вот это что? Максимально-допустимая заточка?
 
Спасибо за ГФ, но интересует ИТ )))



IER_EVENT_FAIL = 0x4, - вот это что?
IER_ANCIENT_BLESSED_FAIL = 0x5, - вот это что?
IER_MAX = 0x6, - вот это что? Максимально-допустимая заточка?
интерлюду без разницы на результат
и выше 3ех вряд ли будет, ибо йоги стафа там нет и итем мола тоже
IER_ANCIENT_BLESSED_FAIL = 0x5, - вот это что? - итем мол предметы, которых нет в ИТ
Java:
public boolean isAncientEnchantScroll()
    {
        switch(_itemId)
        {
            case 22014: // item Mall Wpn B
            case 22015: // item Mall Wpn A
            case 20519: // item Mall Wpn S
            case 22016: // item Mall Arm B
            case 22017: // item Mall Arm A
            case 20520: // item Mall Arm S
                return true;
        }
        return false;
    }

вроде же все ясно расписал, откройте интерфейс посмотрите на обработку HandleEnchantResult
 
Фейл заточки предмета, который имеет тип кристаллов - event, например 13539
IER_EVENT_FAIL = 0x4
IER_ANCIENT_BLESSED_FAIL = 0x5, - вот это что?
IER_MAX = 0x6, - вот это что? Максимально-допустимая заточка?
Это появилось в ГФ. В ИЛ этого нет. Я тебе скинул значения enum из ПТС. ПТС ИЛа у меня, к счастью, нет. Но как правило, корейцы не ломают обратную совместимость и большая часть нововведений это расширение функционала, а не замена.
 
Ага, я понял, то есть по факту в ИТ работает :

IER_SUCCESS = 0x0,
IER_FAIL = 0x1,
IER_CANCELED = 0x2,
IER_BLESSED_FAIL = 0x3,

Ну тогда все понятно, спасибо )
 
По факту интерлюду без разницы что там прийдёт, он в любом случае просто закрывает окно заточки

Это с интерлюда
Код:
function HandleEnchantResult(string param)
{
    //결과에 상관없이 무조건 Hide
    Me.HideWindow();
    Clear();
}
 
Не уверен, думаю в зависимости что отправишь, будет характерный звук в клиенте, к примеру разные звуки при удачной и не удачной заточками. а если Cancel отправить, то звука вообще не будет. Ну это я протестирую
 

    MrKirill1232

    Баллов: 30
    Трусы Баюма забыли указать!
IER_ANCIENT_BLESSED_FAIL = 0x5, - вот это что? - итем мол предметы, которых нет в ИТ

ну в файлах они есть, а в дропе и в геймплее - нету. Это Энсиент скрол заточки, который при фейле не скидывает заточку предмета, а оставляет прежней. Бомжам ЛА2 такое запрещено, они должны страдать) Блеску то фиг достанешь....
 
От куда на интерлюде рубашка ольфа?
я в целом просто
и кстати до ольфа были точащиеся эвентовые нг шмотки, но не помню когда точно их ввели - после интерлюда или там/до него
это например новогодняя рубашка, радужное одеяние веги, пояс энергии.
 

Похожие темы

Назад
Сверху Снизу