You are not logged in.
Pages: 1
Здравствуйте. Как вывести список компонентов тюнинга, словно я заехал в Transfender или другой вид тюнинга (нужны разные списки для разных типов машин)?
Offline
Offline
@3Doomer -
я не возьмусь за это!
А тебя никто и не просит.
@GTASA - просто вытащи простой скрипт трансфендера и удали из него команды, которые телепортируют тачку в интерьер гаража и обратно. Если тебе надо на клео, то воспользуйся прогой CleoOptimizer
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
А разве скрипт траснсфендера находится в мэйне? Что-то я его там не нашел.
Offline
Я искал так: ввел в мэин слово какое-то, которым называется зап часть, и ответа не было. Может, все-таки не в мэине оно? Надо какой-то адрес памяти, который вызывает то меню.
Offline
Я искал так: ввел в мэин слово какое-то, которым называется зап часть, и ответа не было. Может, все-таки не в мэине оно? Надо какой-то адрес памяти, который вызывает то меню.
Неужели так трудно посмотреть внешние скрипты? External script 66 (CARMOD1), например. Все вам адрес памяти подавай.
Offline
Через память всё-таки можно, вот скрипт:
thread 'AnyTrasfender'
{$CLEO}
{$I stdconsts.txt}
var
$Player_Char: Player
$Player_Actor: Actor
$419: Integer
end
wait 1000
$419=0
0@s='MAIN'
0AB1: call_scm_func @InjectJumpOpcode 4 0@ 1@ 60194 @MainIfInject
0AB1: call_scm_func @SetIfNumber 4 thread_name 0@ 1@ offset 60190 number 25
0@s='CARMOD'
while true
if $Player_Char.Defined
then
if and
0AB0: key_pressed VK_CONTROL
0AB0: key_pressed VK_T
$Player_Actor.Driving
09E7: player $PLAYER_CHAR not_frozen
then
0926: $Script_Status = external_script_status 66 (CARMOD1)
if
$Script_Status == 0
then
32@=0
$419=1
while 88AB: not external_script 66 (CARMOD1) loaded
08A9: load_external_script 66 (CARMOD1)
wait 0
end
0913: run_external_script 66 (CARMOD1)
32@=0
wait 0
0AAA: 5@ = pointer_to_thread 'CARMOD'
if 5@==0
then
0513: show_text_box_1number 'NUMBER' number 666 // ~1~
end
0AB1: call_scm_func @SetIfNumber 4 thread_name 0@ 1@ offset 1584 number 23
0AB1: call_scm_func @InjectJumpOpcode 4 0@ 1@ 1588 @CarmodInject1
0AB1: call_scm_func @InjectJumpOpcode 4 0@ 1@ 3972 @CarmodInject3
0AB1: call_scm_func @InjectJumpOpcode 4 0@ 1@ 9765 @CarmodInjectLoadPos
0AB1: call_scm_func @ReplaceLabelInOpcode 4 0@ 1@ 2148 @CarmodInjectStorePos
0AB1: call_scm_func @ReplaceLabelInOpcode 4 0@ 1@ 1803 @CarmodInject4
else
end_thread_named 'CARMOD'
090F: end_external_script 66 (CARMOD1)
end
wait 200
end
end
wait 0
end
:MainIfInject
03B0: garage 'BODLAWN' door_open
03B0: garage 'MODLAST' door_open
03B0: garage 'MDSSFSE' door_open
03B0: garage 'MDS1SFS' door_open
03B0: garage 'VECMOD' door_open
$419 == 1
jump 60249
:CarmodInjectEF
00D6: if 0
0256: player $2 defined
004D: jump_if_false -13936
if and
$419==1
33@>5000
09E7: player $PLAYER_CHAR not_frozen
jf -1426
01EB: set_traffic_density_multiplier_to 1.0
end_thread
:CarmodInject4
if
$419==1
jf -2356
jump -1810
:CarmodInject3
if
$419<>1
jf -7392
00D6: if 0
096F: car $10431 street_racing_car
004D: jump_if_false -5615
jump -3988
:CarmodInjectStorePos
00aa: store_car $CARMOD_Car position_to $10428 $10429 $10430
0A97: 0@ = car $CARMOD_Car struct
0@+=0x14
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0 //right.x
0@+=4
0A8D: 2@ = read_memory 0@ size 4 virtual_protect 0 //right.y
0@+=4
0A8D: 3@ = read_memory 0@ size 4 virtual_protect 0 //right.z
0@+=8
0A8D: 4@ = read_memory 0@ size 4 virtual_protect 0 //top.x
0@+=4
0A8D: 5@ = read_memory 0@ size 4 virtual_protect 0 //top.y
0@+=4
0A8D: 6@ = read_memory 0@ size 4 virtual_protect 0 //top.z
0@+=8
0A8D: 7@ = read_memory 0@ size 4 virtual_protect 0 //at.x
0@+=4
0A8D: 8@ = read_memory 0@ size 4 virtual_protect 0 //at.y
0@+=4
0A8D: 9@ = read_memory 0@ size 4 virtual_protect 0 //at.z
jump -2185
:CarmodInjectLoadPos
04E4: unknown_refresh_game_renderer_at $10428 $10429
03CB: set_rendering_origin_at $10428 $10429 $10430
00AB: put_car $10431 at $10428 $10429 $10430
if $419<>0
jf -9779
$419=0
0A97: 0@ = car $10431 struct
0@+=0x14
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0A8C: write_memory 0@ size 4 value 1@ virtual_protect 0 //right.x
0@+=4
0A8C: write_memory 0@ size 4 value 2@ virtual_protect 0 //right.y
0@+=4
0A8C: write_memory 0@ size 4 value 3@ virtual_protect 0 //right.z
0@+=8
0A8C: write_memory 0@ size 4 value 4@ virtual_protect 0 //top.x
0@+=4
0A8C: write_memory 0@ size 4 value 5@ virtual_protect 0 //top.y
0@+=4
0A8C: write_memory 0@ size 4 value 6@ virtual_protect 0 //top.z
0@+=8
0A8C: write_memory 0@ size 4 value 7@ virtual_protect 0 //at.x
0@+=4
0A8C: write_memory 0@ size 4 value 8@ virtual_protect 0 //at.y
0@+=4
0A8C: write_memory 0@ size 4 value 9@ virtual_protect 0 //at.z
jump -9869
:CarmodInject1
0103: actor $3 in_sphere 1042.01294 -1019.92700 31.12700 radius 4.00000 4.00000 2.00000 sphere 1 stopped_in_car
0103: actor $3 in_sphere -1935.52795 247.02901 33.56100 radius 4.00000 4.00000 2.00000 sphere 1 stopped_in_car
0103: actor $3 in_sphere 2387.07495 1050.51099 9.81200 radius 4.00000 4.00000 2.00000 sphere 1 stopped_in_car
$419 == 1 //<<<
jump -1699
:SetIfNumber{SetFirstByteConstOpcodeParam}
var
//0@s - InNameThread
2@: Integer //Offset
3@: Integer //IfNumber
6@: Integer //Pointer to thread
4@: Integer
5@: Integer
end
0AAA: 6@ = pointer_to_thread 0@s
if 6@ == 0
then
0AB2: ret 0
end
6@+=16
0A8D: 6@ = read_memory 6@ size 4 virtual_protect 0
if 6@==0
then
6@=0xA49960
end
4@=6@
4@+=2@
//0A8C: write_memory 4@ size 2 {word} value 0x00D6 {if opcode} virtual_protect 1
4@+=2
//0A8C: write_memory 4@ size 1 {byte} value 0x04 {signed byte type} virtual_protect 1
4@+=1
0A8C: write_memory 4@ size 1 {byte} value 3@ {IfNumber} virtual_protect 0
0AB2: ret 0
:ReplaceLabelInOpcode
var
//0@s - InNameThread
2@: Integer //Offset
3@: Integer //InLabel
6@: Integer //Pointer to thread
4@: Integer
5@: Integer
end
0AAA: 6@ = pointer_to_thread 0@s
if 6@ == 0
then
0AB2: ret 0
end
6@+=16
0A8D: 6@ = read_memory 6@ size 4 virtual_protect 0
if 6@==0
then
6@=0xA49960
end
4@=6@
4@+=2@
//0A8C: write_memory 4@ size 2 {word} value 0x0002 {jump opcode} virtual_protect 1
4@+=2
0A8C: write_memory 4@ size 1 {byte} value 0x01 {label type} virtual_protect 1
4@+=1
0A9F: 5@ = current_thread_pointer
5@+=16
0A8D: 5@ = read_memory 5@ size 4 virtual_protect 0
5@-=0xA49960
5@-=3@
0A8C: write_memory 4@ size 4 {dword} value 5@ {label} virtual_protect 0
0AB2: ret 0
:InjectJumpOpcode
var
//0@s - InNameThread
2@: Integer //Offset
3@: Integer //InLabel
6@: Integer //Pointer to thread
4@: Integer
5@: Integer
end
0AAA: 6@ = pointer_to_thread 0@s
if 6@ == 0
then
0AB2: ret 0
end
6@+=16
0A8D: 6@ = read_memory 6@ size 4 virtual_protect 0
if 6@==0
then
6@=0xA49960
end
4@=6@
4@+=2@
0A8C: write_memory 4@ size 2 {word} value 0x0002 {jump opcode} virtual_protect 1
4@+=2
0A8C: write_memory 4@ size 1 {byte} value 0x01 {label type} virtual_protect 1
4@+=1
0A9F: 5@ = current_thread_pointer
5@+=16
0A8D: 5@ = read_memory 5@ size 4 virtual_protect 0
5@-=0xA49960
5@-=3@
0A8C: write_memory 4@ size 4 {dword} value 5@ {label} virtual_protect 0
0AB2: ret 0Используется run-time изменение оригинального скрипта трансфендера через редактирование памяти. Правда, иногда глючит, пропадает траффик.
Last edited by VcSaJen (04-12-2009 04:55)
[small][/small]
Offline
Через память все можно, хоть карту с ног на голову повернуть. Спасибо.
Last edited by GTASA (05-12-2009 04:02)
Offline
Pages: 1