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 просто, как я понял - ставит "метку" покрашено!?
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