You are not logged in.
С анимацией проблем не будет... если закостить смогу
Так у тебя есть идея, как то осуществить?
Offline
жду
Offline
Кто знает как сделать так: Когда прицеливаешся на человека он записывается в переменную и тоже самое с машиной?
Offline
написал скрипт но он не совсем работает вернее машина проезжает окола сантиметра и игра вылетает вот код
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
Model.Load(#ADMIRAL)
038B: load_requested_models
:NONAME_7
wait 100
if
Model.Available(#ADMIRAL)
00E1: player 0 pressed_key 9
else_jump @NONAME_7
0@ = Car.Create(#ADMIRAL, 2228.421, 1206.557, 10.7418)
else_jump @NONAME_7
wait 200
Car.DriveTo(0@, 2229.721, 1360.765, 10.7174)
else_jump @NONAME_7
if and
wait 300
Model.Destroy(#ADMIRAL)
else_jump @NONAME_7
Offline
написал скрипт но он не совсем работает вернее машина проезжает окола сантиметра и игра вылетает вот код
{$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- Model.Load(#ADMIRAL) 038B: load_requested_models :NONAME_7 wait 100 if Model.Available(#ADMIRAL) 00E1: player 0 pressed_key 9 else_jump @NONAME_7 0@ = Car.Create(#ADMIRAL, 2228.421, 1206.557, 10.7418) else_jump @NONAME_7 wait 200 Car.DriveTo(0@, 2229.721, 1360.765, 10.7174) else_jump @NONAME_7 if and wait 300 Model.Destroy(#ADMIRAL) else_jump @NONAME_7
ну у тебя в скрипте ошибок много... зачем у тебя "else_jump @NONAME_7" где только не хочешь стоит?) его нужно ставить только в проверках. Машина никуда не поедет без водителя... вот скрипт в исправленном виде:
{$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- Model.Load(#ADMIRAL) 038B: load_requested_models :NONAME_1 wait 100 if and Model.Available(#ADMIRAL) 00E1: player 0 pressed_key 9 else_jump @NONAME_1 0@ = Car.Create(#ADMIRAL, 2228.421, 1206.557, 10.7418) wait 200 Car.DriveTo(0@, 2229.721, 1360.765, 10.7174) wait 1000 Model.Destroy(#ADMIRAL) jump @NONAME_1
Last edited by Voron295 (31-03-2011 16:37)
Offline
Огромное спасибо, выручил.Только вот можеш сказать как он именно работает? Автоматически или надо ставить условие на нажатие клавиши?Если сможеш приведи какой нибудь легкий пример.
Last edited by Ty6ePkYJIe3 (31-03-2011 18:24)
Offline
if 0AD2: 0@ = player $PLAYER_CHAR targeted_actor //IF and SET then actor.StorePos(0@ 1@ 2@ 3@) 020C: create_explosion_with_radius 0 at 1@ 2@ 3@ end
Можно использовать и как команду, а не проверку, но тогда надо будет убедиться, что актёр 0@ существует (0@ <> -1).
Offline
все работает , а где нужно установить скорость авто ?
Offline
все разобрался сам
Offline
Offline
not player.defined and player.health>0 ?
Offline
Offline
Когда-то Alien дал этот код
0A8C: write_memory 13155060 size 4 value 361 virtual_protect 0
с его помощью можно заменить модель огнемёта.
13155060 - видимо адрес огнемёта
361 - ID модели.
Хочу также для осталных оружий, но как узнать нужные адреса?
Offline
Как найти позицию фар относительно машины в гта вайс сити.Или лудше ориентироваться по другому месту.Скрипт на повортники почти готов.Мне нужно не толко на машины у меня поворотники будут ещё и на мотоциклах, мопедах, лодках, танках, верталётах и самолётах.
Offline
@d88 - менять значения в структуре Weapon.dat
@kostyarock* - с этой темой, как я полагаю, знакомились? Там разобрана структура компонентов только для CAutomobile в SA. В VC будет все аналогично.
CAutomobile+394h (RwFrame *[20]). CBike+2A0h (RwFrame *[9]). CHeli+2A0h (RwFrame *[7]). Кажется, компоненты 2 и 3 - пропеллеры. CBoat+2B0h (RwFrame *[7]
В CPlane и CTrain ничего такого не видно...
Частично это должно быть разобрано здесь: http://sannybuilder.com/forums/viewtopic.php?id=849
Last edited by Alien (05-04-2011 16:51)
Offline
Спасибо за помощь.Я к ехешнику раньше не обращался и мой мозг не переварил всю эту информацию :-( Не могли бы вы полностью написать скрипт и объяснить что на что менять для других деталей.Заранее огромное спасибо.
Offline
Но я всё равно не понимаю, что оттуда надо взять, и там же нет этого адреса - 13155060, откуда он взялся? Можете на примере объяснить?
Offline
Чтобы самостоятельно разбираться в подобных примерах, необходимо изучить несколько вопросов.
Во-первых, следует понимать что такое система счисления. В обычной системе счисления 10 цифр - от 0 до 9, поэтому она называется десятичной. В программировании применяются и другие системы счисления: двоичная (состоит из двух цифр: 0 и 1) и шестнадцатиричная (состоит из шестнадцати цифр: 0 - 9, A, B, C, D, E, F). В Sanny Builder можно использовать целые числа как в десятичной, так и в шестнадцатиричной системах счисления - для их различия перед шестнадцатиричным числом ставится приставка 0x
Decimal Hex 0 0x0 1 0x1 2 0x2 .... 9 0x9 10 0xA 11 0xB 12 0xC 13 0xD 14 0xE 15 0xF 16 0x10 17 0x11 ... 255 0xFF ... 65535 0xFFFF ...
Перевести число из одной системы счисления в другую несложно с помощью стандартного Windows-калькулятора. Система счисления в нём выбирается с помощью установки флажка в нужное положение (hex - шестнадцатиричная, dec - десятичная, oct - восьмеричная, bin - двоичная).
Во-вторых, следует понимать основные принципы хранения информации в памяти компьютера. Наименьшая единица измерения информации называется бит. Он может принимать одно из двух значений - либо 0, либо 1. Восемь битов составляют более крупную единицу - байт. То есть один байт может хранить двоичное число, состоящее из восьми цифр - оно будет соответствовать шестнадцатиричному числу, состоящему из двух цифр.
В-третьих, следует изучить основы по работе с памятью игры. Адрес памяти - это номер определённого байта, начиная с которого будет вестись чтение или запись. Для чтения применяется опкод 0A8D:
0A8D: 0@ = read_memory 0xC8AAB8 size 4 virtual_protect 0
Здесь 0xC8AAB8 - адрес памяти (номер байта), начиная с которого будет вестись чтение. 4 - количество байтов, значения которых надо прочитать (можно указать 1, 2 или 4 байта). То есть в данном случае будут последовательно прочитаны значения байтов 0xC8AAB8, 0xC8AAB9, 0xC8AABA, 0xC8AABB. Эти значения будут последовательно скопированы в 4 байта указанной переменной (в данном случае - 0@). Для записи значения по определённому адресу памяти используется опкод 0A8C - там всё аналогично.
Размер переменных в скриптах, как уже сказано, составляет 4 байта. Такая конструкция:
0AC7: 0@ = var 1@ offset 0A8C: write_memory 0@ size 4 value 12345 virtual_protect 0
будет аналогична
1@ = 12345
(опкод 0AC7 получает адрес памяти переменной).
Упомяну ещё о структурах. Структура - набор данных о каком-то объекте, перечисленных в строго определённом порядке. Самый распространённый пример - структуры актёров, транспорта и объектов. Для работы со структурами сначала необходимо узнать адрес, с которого начинается структура. Для вычисления адреса начала структуры актёра, транспорта или объекта есть спец.команды 0A96, 0A97, 0A98. Зная адрес начала структуры и смещение от начала (в байтах), по которому хранятся нужные данные, можно легко прочитать эти данные или заменить значение на своё. Приведу пример: проверим, является ли транспорт 0@ мотоциклом. Назначение многих часто используемых адресов памяти, а также смещений структур можно посмотреть на странице: http://gtamodding.ru/wiki/Адреса_Памяти_(SA) . Например, назначения смещений в структуре машины перечислены в разделе "Машины". Тип транспорта записан по смещению:
+1424 = [byte] Тип машины: 0 = машина/самолет 5 = лодка 6 = поезд 9 = Байк
Значения типа byte имеют размер 1 байт, word - 2 байта, dword - 4 байта, float - 4 байта (дробное число). В данном случае имеем тип "byte", поэтому размер чтения составит 1 байт (указывается в 0A8D).
03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 3@ = car 0@ struct // получаем адрес памяти начала структуры для транспорта игрока 3@ += 1424 // прибавляем смещение 0A8D: 5@ = read_memory 3@ size 1 virtual_protect 0 // читаем значение if 5@ == 9 then marker.CreateAboveCar(2@ 0@) // если транспорт 0@ является мотоциклом, то над ним будет создан маркер end
Offline
@kostyarock* - Не проверял, но должно быть что-то вроде этого:
{$CLEO} 05E5: 0@ = game_version if 0@ <> 0 then 05DC: end_custom_thread end while true wait 0 if not Player.Defined(0) then continue end if and 00DF: actor $PLAYER_ACTOR driving 05EE: key_pressed 0x20 //VK_... then 03C0: 0@ = actor $PLAYER_ACTOR car 05F5: call_scm_func @GetVehicleNode params_count 2 0@ 0 1@ // здесь 0 - номер компонента if 1@ == 0 then continue end 1@ += 0x80 05E0: 2@ = read_memory 1@ size 4 virtual_protect 0 1@ += 4 05E0: 3@ = read_memory 1@ size 4 virtual_protect 0 1@ += 4 05E0: 4@ = read_memory 1@ size 4 virtual_protect 0 024F: create_corona 5.5 6 0 with_color 255 0 0 at_point 2@ 3@ 4@ end end :GetVehicleNode 05E7: 0@ = car 0@ struct 05E4: call_function_method 0x5BAA80 struct 0@ num_params 0 pop 0 2@ 1@ *= 4 000A: 0@ += 1@ if 2@ == 0 then 0@ += 0x394 else if or 2@ == 2 2@ == 3 then 0@ += 0x2A0 else if 2@ == 4 then 0@ += 0x2B0 else 0@ = 0 end end end 05F6: ret 1 0@
Offline
Offline
Вот исправленный вариант. Протестировано и работает. (в данном примере корона будет создаваться на правом колесе CAutomobile)
{$CLEO} 05E5: 0@ = game_version if 0@ <> 0 then 05DC: end_custom_thread end while true wait 0 if not Player.Defined(0) then continue end if and 00DF: actor $PLAYER_ACTOR driving 05EE: key_pressed 0x20 //VK_... then 03C0: 0@ = actor $PLAYER_ACTOR car 05F5: call_scm_func @GetVehicleNode params_count 2 0@ 1 1@ // здесь 1 - номер компонента (правое переднее колесо) if 1@ == 0 then continue end 1@ += 0x80 05E0: 2@ = read_memory 1@ size 4 virtual_protect 0 1@ += 4 05E0: 3@ = read_memory 1@ size 4 virtual_protect 0 1@ += 4 05E0: 4@ = read_memory 1@ size 4 virtual_protect 0 024F: create_corona 0.5 6 0 with_color 255 0 0 at_point 2@ 3@ 4@ end end :GetVehicleNode 05E7: 0@ = car 0@ struct 05E4: call_function_method 0x5BAA80 struct 0@ num_params 0 pop 0 2@ 1@ *= 4 000A: 0@ += 1@ if 2@ == 1 then 0@ += 0x394 else if or 2@ == 2 2@ == 3 then 0@ += 0x2A0 else if 2@ == 4 then 0@ += 0x2B0 else 05F6: ret 1 0 end end end 05E0: 0@ = read_memory 0@ size 4 virtual_protect 0 05F6: ret 1 0@
Offline
@Alien - Да, так действительно работает. Вобще интересно, можно реализовать к примеру бензин, но вместо того, чтоб выводить что-либо на экран, приаттачить корону к машине и регулировать её цвет/размер, что будет означать сколько бензина осталось, или, например, здоровье машины.
Offline