Стремление к лучшему.

  • Автор темы Автор темы Mangol
  • Дата начала Дата начала

Mangol

Путник
Пользователь
Сообщения
796
Розыгрыши
0
Репутация
965
Реакции
62
Баллы
0
Лазя по ai.nask, наткнулся на чудесный код.

Код:
handler:
  EventHandler ATTACKED( attacker )
  {
    if( attacker.builder_level > 0 && attacker.builder_level <= 3 )
    {
      if( gg::OwnItemCount( attacker, @adena ) == 133 )
      {
        myself::InstantZone_Enter( attacker, Day_InstantZone_ID, 0 );
      }
      else if( gg::OwnItemCount( attacker, @adena ) == 1331 )
      {
        myself::InstantZone_Enter( attacker, Night_InstantZone_ID,
                                   Day_EnterType_P );
      }
      else if( gg::OwnItemCount( attacker, @adena ) == 1332 )
      {
        myself::InstantZone_Enter( attacker, Night_InstantZone_ID,
                                   Day_EnterType_M );
      }
      else if( gg::OwnItemCount( attacker, @adena ) == 114 )
      {
        myself::InstantZone_Enter( attacker, Night_InstantZone_ID, 0 );
      }
      else if( gg::OwnItemCount( attacker, @adena ) == 1141 )
      {
        myself::InstantZone_Enter( attacker, Night_InstantZone_ID,
                                   Night_EnterType );
      }
      else if( gg::OwnItemCount( attacker, @adena ) == 135 )
      {
        myself::InstantZone_Enter( attacker, Day_83_InstantZone_ID, 0 );
      }
    }
  }

Корейцы! КРАСАВЦЫ!
 
Нормальная отладка же
 
Код:
if( 1 == 1 )
             {
               i4 = gg::Rand( 1000 );
               if( i4 < 500 && 500 != 0 )
               {
                 if( 1 != 0 && 1 == 1 )
                 {
                   myself::GiveItem1( target, @q_ketra_molar, 1 );
                 }
                 if( 0 != 0 && 0 == 1 )
                 {
                   myself::GiveItem1( target, 0, 0 );
                 }
                 if( 0 != 0 && 0 == 1 )
                 {
                   myself::GiveItem1( target, 0, 0 );
                 }
                 myself::SoundEffect( target, "ItemSound.quest_itemget" );
               }
               else if( i4 < 500 + 0 && 0 != 0 )
               {
                 if( 0 != 0 && 1 == 1 )
                 {
                   myself::GiveItem1( target, @q_ketra_molar, 0 );
                 }
                 if( 0 != 0 && 0 == 1 )
                 {
                   myself::GiveItem1( target, 0, 0 );
                 }
                 if( 0 != 0 && 0 == 1 )
                 {
                   myself::GiveItem1( target, 0, 0 );
                 }
                 myself::SoundEffect( target, "ItemSound.quest_itemget" );
               }
               else if( i4 < 500 + 0 + 0 && 0 != 0 )
               {
                 if( 0 != 0 && 1 == 1 )
                 {
                   myself::GiveItem1( target, @q_ketra_molar, 0 );
                 }
                 if( 0 != 0 && 0 == 1 )
                 {
                   myself::GiveItem1( target, 0, 0 );
                 }
                 if( 0 != 0 && 0 == 1 )
                 {
                   myself::GiveItem1( target, 0, 0 );
                 }
                 myself::SoundEffect( target, "ItemSound.quest_itemget" );
               }
             }
           }

В любой сборке с4\Ила - даже в адвексте, присутствует вот такой имбовый код xD
 
у них доместос передовых технологий, мощнее ебашит
 
А вы не думали что это косяки декомпилятора?
 
А вы не думали что это косяки декомпилятора?
Я так же думал, пока сам не залез в .obj и не пролистал сам код....И явно не декомпилятора бага

Код:
  push_const 1000
   func_call 218169344   //  func[Rand]
   shift_sp -1
   assign4
   shift_sp -1
   push_event   //  i4
   push_const 276
   add
   fetch_i4
   push_const 529
   less
   push_reg_sp
   fetch_i
   branch_false L1171
   push_const 529
   push_const 0
   not_equal
   and
L1171
   branch_false L1170
L1169
   push_const 1
   push_const 0
   not_equal
   push_reg_sp
   fetch_i
   branch_false L1174
   push_const 1
   push_const 1
   equal
   and
L1174
   branch_false L1173
L1172
   push_event   //  myself
   push_const 704
   add
   fetch_i
   push_event   //  target
   push_const 96
   add
   fetch_i
   push_const 7234
   push_const 1
   func_call 184746111   //  func[GiveItem1]
   shift_sp -3
   shift_sp -1
L1173
   push_const 0
   push_const 0
   not_equal
   push_reg_sp
   fetch_i
   branch_false L1177
   push_const 0
   push_const 1
   equal
   and
L1177
   branch_false L1176
L1175
   push_event   //  myself
   push_const 704
   add
   fetch_i
   push_event   //  target
   push_const 96
   add
   fetch_i
   push_const 0
   push_const 0
   func_call 184746111   //  func[GiveItem1]
   shift_sp -3
   shift_sp -1
L1176
   push_const 0
   push_const 0
   not_equal
   push_reg_sp
   fetch_i
   branch_false L1180
   push_const 0
   push_const 1
   equal
   and
L1180
   branch_false L1179
L1178
   push_event   //  myself
   push_const 704
   add
   fetch_i
   push_event   //  target
   push_const 96
   add
   fetch_i
   push_const 0
   push_const 0
   func_call 184746111   //  func[GiveItem1]
   shift_sp -3
   shift_sp -1
L1179
   push_event   //  myself
   push_const 704
   add
   fetch_i
   push_event   //  target
   push_const 96
   add
   fetch_i
S28.   "ItemSound.quest_itemget"
   push_string S28
   func_call 184680685   //  func[SoundEffect]
   shift_sp -2
   shift_sp -1
   jump L1181
L1170
 
Последнее редактирование:
Это скорее всего константы. Их название при компиляции заменяется на значение (на счет const хз, но с дефайнами так). То может у них какие-то настройки в файле были в виде констант, а при компиле они потерлись. Естественно, при декомпиле их уже не вернуть.
 
Да это константы которые в исходнике были @Param ( так же из за сборки аи по макросам macro.txt )
Код у корейцов не покрыт тестами и пройдя несколько статических тестов нашел более 150 ошибок.
п.с а дебаги с входами в инсты по итемам у них обычное дело.
 
Оффтоп:
Видать @Prototype к себе взяли, а он им "напирагарамиривал" байдкода

Хотя рили, больше смахивает на фиговый декомпил.
 
Просто мало кто знает как выглядит сурс аи.
Он состоит из 3- основных кусков( ai_script.txt, macro.txt, questdata.txt )
При компиле они сливаются вместе и выходят такие конструкции. ( но компилятор не убирает их )
ftp://ftp.lineageworld.ru/pub/lineage/server/C2&C3Project/Script/SCRIPT/questdata.txt
ftp://ftp.lineageworld.ru/pub/lineage/server/C2&C3Project/Script/SCRIPT/ai_macro.txt
ftp://ftp.lineageworld.ru/pub/lineage/server/C2&C3Project/Script/SCRIPT/ai_script.txt

скажем
Код:
turek_orc_drop_item(__item, drop_ratio)
[
    c1 = GetLastAttacker();
    if(HaveMemo(c1, @reclaim_the_land)== 1)
    {     
        GiveItem1(c1, __item, 1);
        SoundEffect(c1, "ItemSound.quest_itemget");
 
        i0 = Rand(100);
        if(i0 < drop_ratio)
        {
            i1 = Rand(100);
            if(i1 < 25)
                {
                GiveItem1(c1, @clay_urn_fragment, 1);
            }
            else if( i1 < 50)
            {
                GiveItem1(c1, @brass_trinket_piece, 1);
            }
            else if( i1 < 75)
                {
                GiveItem1(c1, @bronze_mirror_piece, 1);
            }
            else
            {
                GiveItem1(c1, @jade_necklace_bead, 1);
            }
        }
    }
]

и потом просто используют
Код:
    // 몬스터 처리 ( 투렉 오크 시리즈 )
    npc_begin

    npc_name = [turek_orc_sentinel]
    my_dying_event_begin
        handler(c1, i0, i1) =
        [
            c1 = GetLastAttacker();
            c1.quest_last_reward_time = 0;
            MACRO<turek_orc_drop_item>(@turek_dogtag, 7);
        ]     
    my_dying_event_end
 
    npc_end

    npc_begin

    npc_name = [turek_orc_footman]
    my_dying_event_begin
        handler(c1, i0, i1) =
        [
            c1 = GetLastAttacker();
            c1.quest_last_reward_time = 0;
            MACRO<turek_orc_drop_item>(@turek_dogtag, 8);
        ]     
    my_dying_event_end
 
    npc_end

Так же и с апом са кристалов ( часто увидев кучу копипасты во всех рб с условиями вида 1 = 0 думают что это баг но на деле там макрос)
 
Последнее редактирование: