Дата: Четверг, 17.12.2009, 22:40 | Сообщение # 1052
Школьник II
Группа: Пользователи
Сообщений: 88
Статус: Offline
d88, ни чё се , ты задал вопрос по скриптам ?!!!!!!!!!!!!!!!!!!!!!!!!!
Добавлено (17.12.2009, 22:40) --------------------------------------------- почему ни к одному моему посту с вопросом нет ни одного комментария , либо я говорю действительно х***ю , либо ни кто просто не может ответить
Дата: Воскресенье, 20.12.2009, 11:55 | Сообщение # 1061
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Итак, для тех, кто более-менее разобрался в скриптинге, небольшой обзор опкодов для работы с памятью:
Code
0A8C: write_memory 0xC0BC15 size 1 value 1 virtual_protect 0
Опкод производит запись определённого значения по данному адресу памяти игры. Здесь C0BC15 - адрес памяти (Используем 0x в СБ для обозначения шестнадцатиричного числа). Некоторые адреса памяти есть [url=http://gtamodding.ru/wiki/Адреса_Памяти_(SA)]здесь[/url] size - размер записи: 1,2,4 байта. Зависит от типа записываемых данных. Например, float - 4 байта, byte - 1 байт. В тех адресах, что вы можете найти по ссылке выше, тип данных подписан. value - значение записываемой величины. virtual_protect - зависит от конкретного адреса. Лично я не знаю, от чего зависит данный параметр, но обычно он равен 0. Пример: установим время в игре на 12:00. Конечно, можно воспользоваться специальным опкодом 00с0, но есть другой способ:
Code
0A8C: write_memory 0xB70153 size 1 value 12 virtual_protect 0 // адрес памяти "текущий час" 0A8C: write_memory 0xB70152 size 1 value 0 virtual_protect 0 // адрес памяти "текущая минута"
Смысл опкода противоположен предыдущему. Он читает значение из определённого адреса памяти и записывает результат в переменную. Смысл параметров, думаю, ясен: первый параметр - переменная, куда будет записано значение, второй - адрес памяти, откуда записано значение. Остальные параметры те же, что и в предыдущем опкоде.
Code
0A96: $ActorStruct = actor $PLAYER_ACTOR struct 0A97: $CarStruct = car $MyCar struct 0A98: $ObjectStruct = object 0@ struct
Записывают в переменную адрес начала структуры определённого актера, машины и объекта соответственно. Структура – это совокупность разных значений, таких как здоровье, координаты и т.д. Зная адрес структуры актера можно читать эти значения, используя опкод 0A8D. Пример: проверим, что транспорт 0@ является мотоциклом. Если это так, создадим над ним маркер. Смотрим по ссылке, приведённой выше, раздел Cars. Тип машины записан в её структре по следующему смещению: +1424 = [byte] Тип машины:0 = машина/самолет 5 = лодка 6 = поезд 9 = Байк
Code
0A97: 1@ = car 0@ struct // находим адрес структуры 1@ += 1424 // прибавляем смещение 0A8D: 2@ = read_memory 1@ size 1 virtual_protect 0 // читаем значение if 2@ == 9 then marker.CreateAboveCar(3@ 0@) end
Code
0AA7: call_function 0x569660 num_params 2 pop 2 $COORD_X $COORD_Y $GROUND
Опкод запускает определённую функцию gta_sa.exe. Здесь: первый параметр - адрес начала функции, второй параметр - количество передаваемых в функцию параметров, третий параметр - число параметров, которые должны быть убраны со стека после того как отработает вызываемая функция. Это значение может быть в интервале от 0 до num_params. Точное число зависит от самой вызываемой процедуры. Как правило, отдельные функции в ехе сами не «чистят» за собой стек, поэтому число pop должно быть чаще всего равно num_params.Далее идут параметры, передаваемые в функцию. Последний параметр - результат вызванной функции. В данном примере вызывается функция для вычисления высоты земли по координатам X и Y. В переменные $COORD_X $COORD_Y надо записать координаты X и Y определённого места, в резултате в переменную $GROUND будет записана высота земли в этом месте. Другие опкоды КЛЕО 3 вы можете посмотреть в СБ справке: КЛЕО 3 - опкоды. ---------------------------------------------------------------------------------------------
Quote
то маркер видно, только один раз! Почему?
Маркер нужно будет создать снова.
Quote
Почему актёр не фотографирует, когда я ставлю этот опкод?:
Если перевести с английского на русский, то получим: актер 2@ сфотографирован. Отсюда вывод, что это проверка.
Quote
Каким опкодом можно заставить камеру двигаться из точки в точку? И с какой скоростью?
Дата: Воскресенье, 20.12.2009, 11:59 | Сообщение # 1062
Профессор
Группа: Проверенные
Сообщений: 459
Статус: Offline
Quote (Lost_Forever)
Анимация:DEALER_IDLE Файл анимации:dealer
Спасибо, но я уже нашел!
Quote (Colt_8)
04C5: actor 2@ photographed
Это проверка на то что актера 2@ сфотографировали!
Quote (Colt_8)
Каким опкодом можно заставить камеру двигаться из точки в точку? И с какой скоростью?
Camera.PointAt - заставить камеру смотреть в точку. Camera.SetPosition - поставить камеру в определенную точку. 0460: set_camera_pointing_time 0.0 3000 - установить время перемещения камеры (последний параметр скорость в мс). Camera.SetAtPos - поставить камеру в точку временно. Ну вроде так return
Ты ставишь if и следом записываешь координаты и складываешь переменные, убери if. Еще ты приравниваешь 6@ к 0, зачем, если ты сразу после этого записываешь в нее машину? Еще ты приравниваешь 3@ к 0@ и 4@ к 1@! Если ты берешь машину из зоны cornerA 0@ 1@ cornerB 3@ 4@ ,зачем это? Еще ты загружаешь модель, потом сохраняешь ее координаты, но ведь объекта с этой моделью не существует, ты его не создал! return
Дата: Вторник, 22.12.2009, 17:10 | Сообщение # 1072
Школьник I
Группа: Пользователи
Сообщений: 36
Статус: Offline
Ребята, дело в том что объект (18637) находится в игре уже установленный по координатам, опкод 01ВВ: записывает координаты в переменные, далее к этим координатам + или - число чтобы создать координаты для углов которые нужны в опкоде 053Е:. Простыми словами вокруг объекта появляется зона в которую попадая машины сбрасывают скорость. d88, Он просто не работает, пробовал и вручную запускать установив проверку на кнопку, реакции не какой!
Quote (d88)
А просто создать координаты исходящие от игрока.
Мне нужно чтобы он работал не от игрока, а от объекта.
Quote (Gans|64|)
Ты ставишь if
Ну насколько я понял из скриптинга if and застовляет выполнить все действия перечисленные ниже (что мне и надо), если убиру if ... то одно из действий может не выполнится, и к чему это приведет?!
Quote (Gans|64|)
Еще ты приравниваешь 6@ к 0,
Если я не приравняю 6=0 то там может оказаться транспорт к которому уже применина скорость 10, ведь скрипт работает по кругу.
Quote (Gans|64|)
Еще ты приравниваешь 3@ к 0@ и 4@ к 1@!
Потому что мне нужна переменная +25 относительно коорденаты X0@ объекта, ....
Quote (Gans|64|)
Еще ты загружаешь модель, потом сохраняешь ее координаты, но ведь объекта с этой моделью не существует, ты его не создал!
Вот здесь я задумался раньше, будет ли о-д 01ВВ: работать с объектом созданным на карте игрой!??? Может я что то не понял, поправте пожалуйста. GTA SA Лучшая игра!!!!!!!!
Дата: Вторник, 22.12.2009, 17:48 | Сообщение # 1073
Генерал Профессор
Группа: Проверенные
Сообщений: 1540
Статус: Offline
Quote (clac8)
Ребята, дело в том что объект (18637) находится в игре уже установленный по координатам
Но в скрипт этот объект не запишешь
Quote (clac8)
Мне нужно чтобы он работал не от игрока, а от объекта.
Значит надо поставить координаты идущие от объекта 0400: store_coords_to 20@ 21@ 22@ from_object 9@ with_offset 17@ 18@ 19@
Но в твоём случае если объект уже есть в игре, нужно просто записать координаты того места где он находится.
Quote (clac8)
Ну насколько я понял из скриптинга if and застовляет выполнить все действия перечисленные ниже (что мне и надо), если убиру if ... то одно из действий может не выполнится, и к чему это приведет?!
Ты не так понял. If это для проверок, здесь оно не нужно, все команды и так выполняться. Почитай ещё раз статью о проверках.
Quote (clac8)
Если я не приравняю 6=0 то там может оказаться транспорт к которому уже применина скорость 10, ведь скрипт работает по кругу.
:REPLACE_13 wait 0 if Player.Defined($PLAYER_CHAR) else_jump @REPLACE_13 if and not Actor.Dead($PLAYER_ACTOR) not Actor.Driving($PLAYER_ACTOR) 8965: not actor $PLAYER_ACTOR swimming 8A0C: not player $PLAYER_CHAR on_jetpack 84AD: not actor $PLAYER_ACTOR in_water 09E7: player $PLAYER_CHAR not_frozen else_jump @REPLACE_13 gosub @REPLACE_95 gosub @REPLACE_119 jump @REPLACE_13
Дата: Четверг, 24.12.2009, 16:28 | Сообщение # 1080
Свояк
Группа: Проверенные
Сообщений: 117
Статус: Offline
Quote (Gans|64|)
И Player.Defined лучше ставить в отдельную проверку
во первых нету машины которую ты собираешся красить (несуществует машины с такой переменной если ты её не создал или необозначил) во вторых нет конца потока он уходит в безконечность ставь в конце 0A93: end_custom_thread эсли ето клео! Моддинг отечественный, Бойся меня, ведь я такой коммерческий! Пришел к этому путями всяческими, Это вы коммерческие, а я тащу свой стиль!
Сообщение отредактировал Skript - Четверг, 24.12.2009, 16:28
Дата: Четверг, 24.12.2009, 20:40 | Сообщение # 1085
Мажор сайта
Группа: Команда CG
Сообщений: 338
Статус: Offline
Quote (Colt_8)
Как очистить мэйн?
В папке с SB есть папка \data\sa ,там лежит файл stripped.txt,открываешь его в SB,кампилируешь,заменяешь им стандартный main.scm и всё
Quote (Colt_8)
Как вставить клео миссию в мэйн?
Если в чистом main.scm,то там есть строчка
Quote
//-------------Mission 0--------------- // put your missions here
Пишешь туда create_thread и твое название thread'a Пример:create_thread @Mission_1
Если тебе нужно вставить в обычный main.scm(оригинальный),то нажимаешь ctrl+f,пишешь create_thread,нажимаешь ок,к create_thread'ам приписываешь свой,сам thread вставлять перед
Code
//-------------Mission 0---------------
(в поиске пишем //------Mission 0------ и перед ним вставляем наш скрипт)
Сообщение отредактировал Lost_Forever - Четверг, 24.12.2009, 20:44
Дата: Четверг, 24.12.2009, 21:04 | Сообщение # 1086
Школьник I
Группа: Пользователи
Сообщений: 36
Статус: Offline
Почему часть машин сбрасывают скорость а часть нет и можно ли сделать чтобы машины выехав с координат возвращались к прежней скорости?? Label2 wait 0 if Player.Defined($PLAYER_CHAR) else_jump @Label2 jump @Label29
:Label29 wait 0 if 053E: 6@ = get_random_car_with_model -1 in_rectangle_cornerA 2714.31 2088.09 cornerB 2702.31 2016.09 wait 100 if 056E: car 6@ defined else_jump @Label29 if Car.SetMaxSpeed(6@, 1.0) wait 10 jump @Label2
GTA SA Лучшая игра!!!!!!!!
Сообщение отредактировал clac8 - Четверг, 24.12.2009, 21:05