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