You are not logged in.

Не очень понял, "разрешение экрана" 1920 - делить на 640 = 3 ?!
Offline

Как проверить, перевернулась ли машинf, так понимаю ключевое слово flipped, но есть два проверочных опкода 01f4 и 020d (чем отличаются?), а ещё есть опкод flipped_for_2_seconds - кто может занимался этим?
И чем отличается опкод wrecked?
_Щас попробую в трёшку впихнуть repair car  
Last edited by reute70 (26-12-2011 08:50)
Offline

Спасиб за перевод(хотя кое-что и уточнено) !
__Вобщем, repair_car не удалось "внедрить"  , 01f4 работает, а вот после замены его на опкод 020d уже при посадке ГГ в гараже скрипт стал срабатывать(смотрелось это - машина подпрыгивает и еле двигается), а garage $PORTLAND_PAYNSPRAY_GARAGE respray_done просто, как я понял - ставит "метку" покрашено!?
, 01f4 работает, а вот после замены его на опкод 020d уже при посадке ГГ в гараже скрипт стал срабатывать(смотрелось это - машина подпрыгивает и еле двигается), а garage $PORTLAND_PAYNSPRAY_GARAGE respray_done просто, как я понял - ставит "метку" покрашено!?
Offline

Так как repair в трёшке не работает, решил сделать, как один раз обсуждали - нажал две кнопки, удаляется машина, на её месте создаётся с тем же ID`ом, в неё помещается ГГ:
:UNFLIP_10
wait 250 
if 
   Player.Defined($PLAYER_CHAR)
else_jump @UNFLIP_10 
if 
   Actor.Driving($PLAYER_ACTOR)
else_jump @UNFLIP_10 
03C0: 0@ = actor $PLAYER_ACTOR car
if and
 05EE:  key_pressed 17   // Ctrl       
 05EE:  key_pressed 81   // Q 
else_jump @UNFLIP_10 
Car.StorePos(0@, 1@, 2@, 3@)
3@ += 2 // integer values 
4@ = Car.Angle(0@)
Model.Destroy(0@)
    Model.Load(0@)
    038B: load_requested_models
while not Model.Available(0@) //8248: not model 6@ available 
    wait 10 
end
00A5: 5@ = create_car 0@ at 1@ 2@ 3@
Car.Angle(5@) = 4@
0224: set_car 5@ health_to 900
Model.Destroy(0@)
01C3: remove_references_to_car 5@  // 0@
0369: put_player $PLAYER_CHAR in_car 0@
wait 200 
jump @UNFLIP_10
но чё-то не то (зависает игра)?
Надо сначала ID машины взять, опкод помещения ГГ в машину не там поставил?
Offline
Попробуй это.
{$CLEO}
wait 250
while true
    if
        0256:   player 0 defined
    then
        if
            00E0:   player 0 driving
        then
            if and
                05EE:   key_pressed 17   // Ctrl       
                05EE:   key_pressed 81   // Q
            then
                03C1: 0@ = player 0 car
                05F5: call_scm_func @Car_Repair params_count 1 car 0@
            end
        end
    end
    wait 0
end
:Car_Repair
05E7: 0@ = car 0@ struct
0@ += 0x200
05DF: write_memory 0@ size 4 value 1000.0 virtual_protect 0
0@ += 0x88
05E3: call_method 0x545850 struct 0@ num_params 0 pop 0
05F6: ret 0
						Last edited by DK22Pac (27-12-2011 01:02)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline

Спасибо большое, попробую!
Но ведь тут есть работа с памятью, значит, не на все ехе пойдёт?!
(я сначала пробую на Snow City, а уж потом на оригинальном 
Offline
{$CLEO}
wait 250
while true
    if
        0256:   player 0 defined
    then
        if
            00E0:   player 0 driving
        then
            if and
                05EE:   key_pressed 17   // Ctrl       
                05EE:   key_pressed 81   // Q
            then
                03C1: 0@ = player 0 car
                gosub @Car_Repair // 0@ - car handle
            end
        end
    end
    wait 0
end
:Car_Repair
05E7: 0@ = car 0@ struct
05E5: 1@ = game_version
if
    1@ == 0
then    
    05E3: call_method 0x53C240 struct 0@ num_params 0 pop 0
else
    05E3: call_method 0x53C480 struct 0@ num_params 0 pop 0
end
0@ += 0x200
05DF: write_memory 0@ size 4 value 1000.0 virtual_protect 0
returnSCM-функции в этой клео криво работют. Параметры не передаются.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Поправочка. SCM-функции работают на ура, просто были проблемы с .ini с Дежи-ного сайта. На радостях написал ещё парочку полезных SCM-функций. 
//-----------------------------------------------------------------------------------
:getCoordsFromActor
{
05F5: call_scm_func @getCoordsFromActor 4 actor $PLAYER_ACTOR offset 0.0 2.0 0.0 store_to 0@ 1@ 2@
}
05E6: 0@ = actor 0@ struct
0@ += 4
05E5: 5@ = game_version
05EC: 6@ = current_thread_pointer
6@ += 0x34
if
    5@ == 0
then    
    05E1: call 0x5A37D0 num_params 4 pop 4 0@ 1 6@ 6@
else
    05E1: call 0x5A3A90 num_params 4 pop 4 0@ 1 6@ 6@
end
05F6: ret 3 1@ 2@ 3@
//-----------------------------------------------------------------------------------
:getCoordsFromCar
{
05F5: call_scm_func @getCoordsFromCar 4 car 3@ offset 0.0 2.0 0.0 store_to 0@ 1@ 2@
}
05E7: 0@ = car 0@ struct
0@ += 4
05E5: 5@ = game_version
05EC: 6@ = current_thread_pointer
6@ += 0x34
if
    5@ == 0
then    
    05E1: call 0x5A37D0 num_params 4 pop 4 0@ 1 6@ 6@
else
    05E1: call 0x5A3A90 num_params 4 pop 4 0@ 1 6@ 6@
end
05F6: ret 3 1@ 2@ 3@
//-----------------------------------------------------------------------------------
:getCoordsFromObject
{
05F5: call_scm_func @getCoordsFromObject 4 object 3@ offset 0.0 2.0 0.0 store_to 0@ 1@ 2@
}
05E8: 0@ = object 0@ struct
0@ += 4
05E5: 5@ = game_version
05EC: 6@ = current_thread_pointer
6@ += 0x34
if
    5@ == 0
then    
    05E1: call 0x5A37D0 num_params 4 pop 4 0@ 1 6@ 6@
else
    05E1: call 0x5A3A90 num_params 4 pop 4 0@ 1 6@ 6@
end
05F6: ret 3 1@ 2@ 3@
//-----------------------------------------------------------------------------------
:getLocalVarOffset
{
05F5: call_scm_func @getLocalVarOffset 1 var 0 store_to 1@
}
05EC: 1@ = current_thread_pointer
0@ *= 4
1@ += 0x30
005A: 1@ += 0@
05F6: ret 1 1@
//-----------------------------------------------------------------------------------
:getActorBodypartPosition
{
05F5: call_scm_func @getActorBodypartPosition 2 actor $PLAYER_ACTOR bodypart SUPPERARML store_to 0@ 1@ 2@
}
05E6: 0@ = actor 0@ struct
0@ += 0x1A4
1@ *= 4
005A: 0@ += 1@
05E0: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ += 0x10
05E0: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ += 0x80
05E0: 1@ = read_memory 0@ size 4 virtual_protect 0
0@ += 4
05E0: 2@ = read_memory 0@ size 4 virtual_protect 0
0@ += 4
05E0: 3@ = read_memory 0@ size 4 virtual_protect 0
05F6: ret 3 1@ 2@ 3@
//-----------------------------------------------------------------------------------
:ActorRemoveBodypart
{
05F5: call_scm_func @ActorRemoveBodypart 2 actor $PLAYER_ACTOR bodypart SUPPERARML
}
05E6: 0@ = actor 0@ struct
05E5: 2@ = game_version
if
    2@ == 0
then
    05E3: call_method 0x4EAEE0 struct 0@ num_params 2 pop 0 0 1@
else
    05E3: call_method 0x4EAF90 struct 0@ num_params 2 pop 0 0 1@
end
05F6: ret 0Номера
//-----------------------------------------------------------------------------------
{
eNums bodyparts
}
const
    SLOWERLEGL = 0
    SMID       = 1
    SHEAD      = 2
    SUPPERARML = 3
    SUPPERARMR = 4
    SLHAND     = 5
    SRHAND     = 6
    SUPPERLEGL = 7
    SUPPERLEGR = 8
    SFOOTL     = 9
    SFOOTR     = 10
    SLOWERLEGR = 11    
end
						Last edited by DK22Pac (30-12-2011 19:13)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline

Э-э-э, а что такое ActorBodypart... с номерами ?
И чего там с ".ini с Дежи-ного сайта" ? - на всякий случай
Offline
Номера частей педа.
Сейчас у меня .ini от инсталлятора CLEO.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline

Да я перевёл, хоть и "немец" по образованию 
Считывание координат частей тела... - трансформеры, подспорье в создании анимаций?!
Offline

to DK22Pac
На гтафорумс в ветке мода Хбокс автор говорил, что у тебя есть скрипт, чтоб фары светили пореалистичнее - можешь поделиться? А то в трёшке это один из самых стрёмных моментов...
Offline
@reute70
http://www.mediafire.com/?rdvvedn46oaz70d
Вот мой кар-спаунер)
{$CLEO}
05E5: 8@ = game_version
while true
    wait 0
    if
        player.Defined($PLAYER_CHAR)
    then
        for 0@ = 90 to 150
            05F5: call_scm_func @getCarModelName 1 model 0@ get_string_offset_to 10@
            05F5: call_scm_func @getStringNumChars 2 string_offset 10@ include_null_terminator 0 get_num_chars_to 9@
            if
                9@ <> 0
            then
                05F5: call_scm_func @testCheat 2 string_offset 10@ num_chars 9@ get_result_to 3@
                if
                    3@ == 1
                then
                    0054: store_player $PLAYER_CHAR position_to 1@ 2@ 3@
                    02C1: set 4@ 5@ 6@ to_car_path_coords_closest_to 1@ 2@ 3@
                    05F5: call_scm_func @getDistanceBetweenPoints 6 XYZ 1@ 2@ 3@ and_XYZ 4@ 5@ 6@ to 7@
                    if
                        7@ > 15.0
                    then
                        05F5: call_scm_func @getCoordsFromActor 4 actor $PLAYER_ACTOR offset 0.0 3.0 0.0 store_to 4@ 5@ 6@
                    end
                    05F5: call_scm_func @spawnCar 4 model 0@ XYZ 4@ 5@ 6@
                    9@ *= 2
                    if
                        8@ == 0
                    then
                        9@ += 0x95CCB6
                    else
                        9@ += 0x95CE6E
                    end
                    if
                        8@ == 0
                    then
                        13@ = 0x95CCB6
                        14@ = 0x5051E0
                    else
                        13@ = 0x95CE6E
                        14@ = 0x5052C0
                    end
                    0085: 7@ = 13@
                    0085: 11@ = 10@
                    for 15@ = 0 to 19
                        05E0: 12@ = read_memory 11@ size 1 virtual_protect 0
                        05DF: write_memory 13@ size 2 value 12@ virtual_protect 0
                        inc(11@)
                        13@ += 2
                    end
                    05DF: write_memory 9@ size 2 value 0x20 virtual_protect 0 //
                    9@ += 2
                    05DF: write_memory 9@ size 2 value 0x73 virtual_protect 0 // s
                    9@ += 2
                    05DF: write_memory 9@ size 2 value 0x70 virtual_protect 0 // p
                    9@ += 2
                    05DF: write_memory 9@ size 2 value 0x61 virtual_protect 0 // a
                    9@ += 2
                    05DF: write_memory 9@ size 2 value 0x77 virtual_protect 0 // w
                    9@ += 2
                    05DF: write_memory 9@ size 2 value 0x6E virtual_protect 0 // n
                    9@ += 2
                    05DF: write_memory 9@ size 2 value 0x65 virtual_protect 0 // e
                    9@ += 2
                    05DF: write_memory 9@ size 2 value 0x64 virtual_protect 0 // d
                    05E1: call 14@ num_params 2 pop 2 0 7@
                end
            end
        end
    end
end
{$I scmfuncs.txt}SCM-ф-ции
//-----------------------------------------------------------------------------------
:spawnCar
{
05F5: call_scm_func @spawnCar 4 model 0@ XYZ 4@ 5@ 6@
}
model.Load(0@)
038B: load_requested_models 
car.Create(4@, 0@, 1@, 2@, 3@)
model.Destroy(0@)
car.RemoveReferences(4@)
05F6: ret 0
//-----------------------------------------------------------------------------------
:showTextBox
{
05F5: call_scm_func @showTextBox 1 string_offset 0@
}
05E5: 1@ = game_version
if
    1@ == 0
then
    3@ = 0x95CCB6
    4@ = 0x5051E0
else
    3@ = 0x95CE6E
    4@ = 0x5052C0
end
for 1@ = 0 to 19
    05E0: 2@ = read_memory 0@ size 1 virtual_protect 0
    05DF: write_memory 3@ size 2 value 2@ virtual_protect 0
    inc(0@)
    3@ += 2
end
05E1: call 4@ num_params 2 pop 2 0 3@
05F6: ret 0
//-----------------------------------------------------------------------------------
:getCoordsFromActor
{
05F5: call_scm_func @getCoordsFromActor 4 actor $PLAYER_ACTOR offset 0.0 2.0 0.0 store_to 0@ 1@ 2@
}
05E6: 0@ = actor 0@ struct
0@ += 4
05E5: 5@ = game_version
05EC: 6@ = current_thread_pointer
6@ += 0x34
if
    5@ == 0
then    
    05E1: call 0x5A37D0 num_params 4 pop 4 0@ 1 6@ 6@
else
    05E1: call 0x5A3A90 num_params 4 pop 4 0@ 1 6@ 6@
end
05F6: ret 3 1@ 2@ 3@
//-----------------------------------------------------------------------------------
:getDistanceBetweenPoints
{
05F5: call_scm_func @getDistanceBetweenPoints XYZ 1@ 2@ 3@ and 4@ 5@ 6@ to 7@
} 
0087: 6@ = 0@ 
0087: 7@ = 1@ 
0087: 8@ = 2@ 
0063: 6@ -= 3@ 
0063: 7@ -= 4@ 
0063: 8@ -= 5@ 
006B: 6@ *= 6@ 
006B: 7@ *= 7@ 
006B: 8@ *= 8@ 
005B: 6@ += 7@ 
005B: 6@ += 8@ 
01FB: 6@ = square_root 6@ 
if 
    6@ < 0.0 
then 
    0097: absf 6@ 
end
05F6: ret 1 6@    
//-----------------------------------------------------------------------------------
:getCarModelName
{
05F5: call_scm_func @getCarModelName 1 model 90 get_string_offset_to 1@
}
0@ *= 4
0@ += 0x83D408
05E0: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ += 0x4
05F6: ret 1 0@
//-----------------------------------------------------------------------------------
:getStringNumChars
{
05F5: call_scm_func @getStringNumChars 2 string_offset 1@ include_null_terminator 1 get_num_chars_to 2@
}
for 2@ = 0 to 99
    05E0: 3@ = read_memory 0@ size 1 virtual_protect 0
    if
        3@ == 0
    then
        if
            1@ == 1
        then
            inc(2@)
        end
        05F6: ret 1 2@
    end
    inc(0@)
end
05F6: ret 1 0
//-----------------------------------------------------------------------------------
:stringReverse
{
05F5: call_scm_func @stringReverse 4 string_offset 0x885B90 num_chars 1@ store_to 0x5F7650 skip_null_terminator 1
}
if
    3@ == 0
then
    1@ -= 2
else
    dec(1@)
end
005A: 2@ += 1@
0085: 6@ = 2@
for 4@ = 0 to 1@
    05E0: 5@ = read_memory 0@ size 1 virtual_protect 0
    05DF: write_memory 2@ size 1 value 5@ virtual_protect 0
    dec(2@)
    inc(0@)
end
inc(6@)
05DF: write_memory 6@ size 1 value 0 virtual_protect 0
05F6: 0
//-----------------------------------------------------------------------------------
:testCheat
{
05F5: call_scm_func @testCheat 2 string_offset 1@ num_chars 2@ get_result_to 3@
}
05E5: 3@ = game_version
if
    3@ == 0
then
    05F5: call_scm_func @stringReverse 4 string_offset 0x885B90 num_chars 1@ store_to 0x5F7650 skip_null_terminator 1
    05E2: call_function 0x5A08B0 num_params 2 pop 2 0@ 0x5F7650 2@
else
    05F5: call_scm_func @stringReverse 4 string_offset 0x885B40 num_chars 1@ store_to 0x5F7438 skip_null_terminator 1
    05E2: call_function 0x5A0B70 num_params 2 pop 2 0@ 0x5F7438 2@
end                                                         
if
    2@ == 0
then
    if
        3@ == 0
    then
        05DF: write_memory 0x885B90 size 1 value 0 virtual_protect 0
    else
        05DF: write_memory 0x885B40 size 1 value 0 virtual_protect 0
    end
    05F6: ret 1 1
else
    05F6: ret 1 0
end
					Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline

Большое спасибо!
Насчёт карспаунера - scm_func вызываются из текстового файла, лежащего в папке Cleo ?!
Offline

Нет, эти функции куда-нибудь вниз скрипта кинуть.
Offline
Он у меня в папке CLEO.
Вот все нужные файлы. (в аттаче)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline

Насчёт headlight.asi - прямоугольник света у фары всё-таки немного виден и корона "слегка" просвечивает через крыло машины - это, наверно, вряд ли можно исправить(с таким движком)?
Offline

Поставил простенький код 041E: set_radio_station 9 0 (когда в машине), срабатывает, но мп3 начинает проигрываться, когда в меню выйдешь и обратно (поставил на клавишу Delete) - как сделать, шоб сразу, как при переборе станций?
И каждый раз, когда нажимаешь - проигрываться начинает с начала "списка" - можно сделать, чтоб случайный был трэк? (этакий рандомайзер 
Offline

Как оживлённо на форуме!
Спрошу по-другому - есть опкод для вызова паузы в игре? - надо сымитировать нажатие кнопки Esc и обратно в игру.
Offline

Если в меню и можно, то обратно с помощью скриптов - нет.
Offline

Хотя б в меню, ещё раз стукнуть по эскейпу смогу - не в лом!
Offline

Поздно прочел заголовок темы "Cleo для GTA III". Например, для са адрес byte 0xBA677B - запись 1 или 0 вкл/выкл меню... Для III не знаю, но все можно найти в .idb Листенера.
Last edited by Jack Daniel's (13-02-2012 13:04)
Offline

Решил через Cleo сделать гараж, откуда в миссии Getaway выбегают мужики, чтоб ограбить банк
0219: $PORTLAND_MY_GARAGE = create_garage 18 from 1092.3 -234.1 8.5 1082.3 -242.5 13.5
03DA: set_garage $PORTLAND_MY_GARAGE camera_follows_player  // достаточно только первого опкода
- дверь открывается, машина исчезает при закрытии "шторки" (изнутри можно наблюдать, если отойти), при открытии - ничего нет и так впихать тачек можно много...
Попробую конечно, и через main.scm(использовал и локальные переменные), но хотелось бы понять...
PS Извиняюсь, поставил задержку wait 1000 - всё нормально, видать, несколько раз активировался гараж при нажатии клавиши(вначале хотел сделать пикап, но для отладки сделал по-простому) !
PPS Вобщем при загрузке сохранений дверь гаража не открывается, хотя за ней машины есть и при отдалении от них они исчезают, а ещё хотел попробовать использовать при активировании гаража локальные переменные (маркеры остаются)!
Last edited by reute70 (29-02-2012 15:08)
Offline