PDA

Просмотр полной версии : Стремление к лучшему.


mAnGoL
29.10.2015, 15:34
Лазя по ai.nask, наткнулся на чудесный код.

Код:


[CODE]
handler:
EventHandler ATTACKED( attacker )
{
if( attacker.builder_level > 0 && attacker.builder_level

Корейцы! КРАСАВЦЫ!

zcxv
29.10.2015, 15:37
Нормальная отладка же

mAnGoL
29.10.2015, 15:39
Нормальная отладка же


Супер отладка.

Koner
04.11.2015, 14:19
Код:


[CODE]
if( 1 == 1 )
{
i4 = gg::Rand( 1000 );
if( i4

В любой сборке с4\Ила - даже в адвексте, присутствует вот такой имбовый код xD

ツsmile10ツ
04.11.2015, 14:43
у них доместос передовых технологий, мощнее ебашит

Mifesto
04.11.2015, 15:00
[QUOTE="Koner"]

Код:


[CODE]
if( 1 == 1 )
{
i4 = gg::Rand( 1000 );
if( i4

Koner
04.11.2015, 16:56
А вы не думали что это косяки декомпилятора?


Я так же думал, пока сам не залез в .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

Mizuwokiru
04.11.2015, 17:42
Это скорее всего константы. Их название при компиляции заменяется на значение (на счет const хз, но с дефайнами так). То может у них какие-то настройки в файле были в виде констант, а при компиле они потерлись. Естественно, при декомпиле их уже не вернуть.

test
04.11.2015, 18:29
Да это константы которые в исходнике были @Param ( так же из за сборки аи по макросам macro.txt )

Код у корейцов не покрыт тестами и пройдя несколько статических тестов нашел более 150 ошибок.

п.с а дебаги с входами в инсты по итемам у них обычное дело.

Mizuwokiru
04.11.2015, 20:14
Да это константы которые в исходнике были @Param ( так же из за сборки аи по макросам macro.txt )
Код у корейцов не покрыт тестами и пройдя несколько статических тестов нашел более 150 ошибок.
п.с а дебаги с входами в инсты по итемам у них обычное дело.







Видать @Prototype (https://forum.antichat.xyz/members/890719/) к себе взяли, а он им "напирагарамиривал" байдкода

Хотя рили, больше смахивает на фиговый декомпил.

test
04.11.2015, 20:39
Просто мало кто знает как выглядит сурс аи.

Он состоит из 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

и потом просто используют

Код:


[CODE]
// 몬스터 처리 ( 투렉 오크 시리즈 )
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_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_dogtag, 8);
]
my_dying_event_end

npc_end


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