Извиняюсь за скомплинированный скрипт.
------------------------------------------------------------------------------------------------------------------------------
JAN 08 2012 12:46 GMT+08:00
Путём убирания некоторых частей кода я нашёл причину вылета. Вылетает при использовании следующей части кода:
... 0006: 16@ = 305868 0006: 6@ = 1988 008B: 16@ = &0(16@,1i) // (int) 0AB1: call_scm_func @KITT_FUNCTIONS_8172 2 16@ 8 7@ 0A8D: 11@ = read_memory 16@ size 4 virtual_protect 0 ...
Что делает эта часть кода и чем её можно заменить?
]]>Вот тебе мой вариант interceptor'а
0AB1: call_scm_func @ANY_GETACTOR 4 1@ 2@ 3@ 10.0 0@ ///Вызываешь это где нужно в скрипте ///Все по аналогии с обычным интерсептором ///1@ 2@ 3@ это центр поиска, ///10.0 это радиус поиска ///0@ это получаемый актер //////////////////// Добавляешь это в конец куда нибудь скрипта :ANY_GETACTOR 0006: 16@ = 305868 0006: 6@ = 1988 03C0: 8@ = actor $PLAYER_ACTOR car :ANY_ACTOR_STARTSEARCH 008B: 16@ = &0(16@,1i) // CPool* 0085: 5@ = 16@ 17@ = 8 gosub @ANY_ACTOR_READMEMOFFSET 0085: 7@ = 5@ 0A8D: 11@ = read_memory 16@ size 4 virtual_protect 0 // CPool.pUnits 0006: 10@ = 0 0006: 19@ = -1 :ANY_ACTOR_SEARCHLOOPMAIN 0085: 5@ = 11@ 17@ = 20 gosub @ANY_ACTOR_READMEMOFFSET 0085: 4@ = 5@ 8039: not 4@ == 0 004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT 0085: 5@ = 4@ 17@ = 48 gosub @ANY_ACTOR_READMEMOFFSET 0087: 12@ = 5@ 0085: 5@ = 4@ 17@ = 52 gosub @ANY_ACTOR_READMEMOFFSET 0087: 13@ = 5@ 0085: 5@ = 4@ 17@ = 56 gosub @ANY_ACTOR_READMEMOFFSET 0087: 14@ = 5@ 050A: 15@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 12@ 13@ 14@ 0025: 3@ > 15@ // (float) 004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT 0085: 9@ = 10@ // (int) // counter 0085: 5@ = 16@ 17@ = 4 gosub @ANY_ACTOR_READMEMOFFSET 0085: 4@ = 5@ 005A: 4@ += 9@ // (int) 0A8D: 4@ = read_memory 4@ size 1 virtual_protect 0 0012: 9@ *= 256 005A: 9@ += 4@ // (int) :ANY_ACTOR_TESTACTORHANDLE 056D: is 9@ valid_actor_handle 004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT 00D6: if and 803C: not $PLAYER_ACTOR == 9@ // (int) 8118: not actor 9@ dead 004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT 03C0: 18@ = actor 9@ car if and not 18@ == -1 803B: not 18@ == 8@ // (int) 004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT 0085: 19@ = 9@ 0085: 3@ = 15@ :ANY_ACTOR_SEARCHLOOPNEXT 005A: 11@ += 6@ // (int) 000A: 10@ += 1 002D: 10@ >= 7@ // (int) 004D: jump_if_false @ANY_ACTOR_SEARCHLOOPMAIN 0AB2: ret 1 19@ :ANY_ACTOR_READMEMOFFSET 0A8E: 5@ = 5@ + 17@ // int 0A8D: 5@ = read_memory 5@ size 4 virtual_protect 0 0051: return]]>