You are not logged in.
CraZZZy-GameRRR:
Раскопай скрипт Yelmi: Фары и другое..
А теперь мой вопрос:
SAMoreVehicles- сия замечательная вещь увеличивает лимит машин, ну это вы наверно знаете, а как эти машины собственно добавлять, т.е. в какие файлы, что вообще добавлять, ведь я немного маппер и скриптер, а с машинами не работал(пока что) в ридми ничего не написано.
100 постов - 27 августа;
Offline
Проверка фар на включенность:
:IsCarLightsOn 0A97: 0@ = car 0@ struct 0@ += 0x4A8 0A8D: 0@ = read_memory 0@ size 1 virtual_protect 0 if or 08B7: test 0@ bit 3 08B7: test 0@ bit 4 then 0485: return_true else 059A: return_false end 0AB2: ret 0
Использование:
03C0: 0@ = actor $PLAYER_ACTOR car if 0AB1: call_scm_func @IsCarLightsOn 1 car 0@ then //do something end
*_____________________________________________*
Кто-нибудь знает статические адреса полицейских вертолетов? найти не могу.
Offline
Спасибо, ALIEN!
Сначала скрипт всегда выдавал FALSE, но я нашёл список всех адресов памяти, прочитал статью про биты переменных. Вообщем, вместо
0@ += 0x4A8
написал
0@ += 1412
и
if or 08B7: test 0@ bit 3 08B7: test 0@ bit 4 ...
заменил на
if 08B7: test 0@ bit 0 ...
Заработало!
И ещё один вопрос - можно-ли узнать обороты двигателя авто?
Offline
А теперь мой вопрос:
SAMoreVehicles- сия замечательная вещь увеличивает лимит машин, ну это вы наверно знаете, а как эти машины собственно добавлять, т.е. в какие файлы, что вообще добавлять, ведь я немного маппер и скриптер, а с машинами не работал(пока что) в ридми ничего не написано.
Попробую ответить...
Значит так. Добавление новых машин дело не особо хлопотное, но главное ничего не забыть и не перепутать. Для начала скажу что так же лучше установить себе плагин от Alexander'a San Andreas Vehicle Audio Editor Ultimate 1.3
Хочу добавить. Все текстовые файлы из папки дата удобней всего редактировать не в чем нибудь а в Sanny Builder'e. Попробуйте открыть какой либо файл в блокноте и в билдере, и тогда вы увидите разницу.
Первое что нужно сделать, так это закинуть файлы новой тачки в gta3.img
Потом открыть файл vehicles.ide который лежит в папке data.
Выберите среди всех строк нужную вам по типу машину(например если добавляете спорткар, то берите за основу строку Инфернуса, Туризмо, Супер Джи Ти или другоу спортивной машины. Аналогично и с другими классами автомобилей. Давайте добавим тачку, которая по характеристикам походит на Лэндсталкер.
Открываем файл vehicles.ide в блокноте и видим следующее:
# # see default.ide for id ranges # # flags: # 0x01 gets streamed out after 1 car is generated (for dumpsters, MrWoopy etc) # 0x02 Don't use. Used by code internally. cars # Id, Model name, Txd name, Type HandlingId Game name, Anims Class Frq flags Comprules # # cars have two extra fields wheelmodelId and wheel scale # planes have one extra field model id of low level of detail [u][i][b]400, landstal, landstal, car, LANDSTAL, LANDSTK, null, normal, 10, 0, 0, -1, 0.768, 0.768, 0[/b][/i][/u] 401, bravura, bravura, car, BRAVURA, BRAVURA, null, poorfamily, 10, 0, 0, -1, 0.74, 0.74, 0 402, buffalo, buffalo, car, BUFFALO, BUFFALO, null, executive, 5, 0, 0, -1, 0.7, 0.7, 0 403, linerun, linerun, car, LINERUN, LINERUN, truck, worker, 6, 0, 0, -1, 1.1, 1.1, -1
Выделяем первую строку которая содержит в себе характеристики Лэндсталкера(она выделена)
и копируем её через Ctrl+C.
Далее прокручиваем файл вниз и видим следующее:
600, picador, picador, car, PICADOR, PICADOR, null, normal, 10, 0, 0, -1, 0.7, 0.7, 0 601, swatvan, swatvan, car, SWATVAN, SWATVAN, van, big, 4, 0, 0, -1, 1.366, 1.366, -1 602, alpha, alpha, car, ALPHA, ALPHA, null, executive, 10, 0, 0, -1, 0.7, 0.7, 0 603, phoenix, phoenix, car, PHOENIX, PHOENIX, null, normal, 7, 0, 0, -1, 0.7, 0.7, 0 604, glenshit, glenshit, car, GLENDALE, GLENSHI, null, normal, 5, 0, 0, -1, 0.7, 0.7, -1 605, sadlshit, sadlshit, car, SADLER, SADLSHI, null, normal, 10, 0, 0, -1, 0.7, 0.7, -1 606, bagboxa, bagboxa, trailer, BAGBOXA, BAGBOXA, null, ignore, 4, 0, 0, -1, 0.6, 0.6, -1 607, bagboxb, bagboxb, trailer, BAGBOXB, BAGBOXB, null, ignore, 4, 0, 0, -1, 0.6, 0.6, -1 608, tugstair, tugstair, trailer, STAIRS, TUGSTAI, null, ignore, 4, 0, 0, -1, 0.6, 0.6, -1 609, boxburg, boxburg, car, BOXBURG, BOXBURG, van, worker, 10, 0, 0, -1, 0.76, 0.76, -1 610, farmtr1, farmtr1, trailer, FARM_TR1, FARMTR1, null, ignore, 4, 0, 0, -1, 0.32, 0.32, -1 611, utiltr1, utiltr1, trailer, UTIL_TR1, UTILTR1, null, ignore, 4, 0, 0, -1, 0.68, 0.68, -1 end
Между строкой начинающейся на '611, utiltr1, utiltr1,' и end вставляем скопированную ранее строку(Ctrl + V).
Первый шаг сделан. Теперь рассмотрим строку которую мы вставили.
Самое первое число этой строки - это id автомобиля. Изменим его на 612.
Второе и третье слова обозначают имя модели и текстуры машины соответственно. Эти имена НЕ ДОЛЖНЫ совпадать с именами заменяемой машины.
Четвертое слово обозначает тип машины. В нашем случае это CAR. Так его и оставим.
Пятое слово обозначает имя машины, которое будет использоваться в файле HANDLING.CFG. Поменяем его на NEWCAR.
Шестое слово обозначает имя машины в игре, то есть ключ с таким именем будет содержать в себе название машины. Этот ключ надо так же добавить в american.gxt. Или можно сделать хитрее, добавив нужный ключ с помощь GXT Hook и FXT Editor'a.
Остальные значения рассматривать не будем. Изменение оных может привести к нестабильности игры. Да и к тому же я и сам не зная что они меняют.
Теперь пришла пора редактировать файл HANDLING.CFG Тут можно пойти двумя путями. Редактировать сам файл через блокнот или попробовать использовать плагин Alexander'a San Andreas Vehicle Handling Adder.
Но я представлю туториал основываясь на первом пути.
Открываем файл HANDLING.CFG и так же как в случае с файлом vehicles.ide находим и копируем строку, которая относится к нашему Лэндсталкеру. Потом можно прямо над этой строкойвставить скопированную. Например так:
; > THE DATA < ; ----- cars --------------------------------- ; ; name mass turnmass drag centreofmass boy traction transmission brakes steer suspension suslines antidive seat col cost mflags hflags lights ; A B C D F G H I J K L M N O P Q R S T U V a b c d e f g aa ab ac af ag ah ai aj LANDSTAL 1700.0 5008.3 2.5 0.0 0.0 -0.3 85 0.75 0.85 0.5 5 160.0 25.0 20.0 4 D 6.2 0.60 0 35.0 2.4 0.08 0.0 0.28 -0.14 0.5 0.25 0.27 0.23 25000 20 500002 0 1 0 LANDSTAL 1700.0 5008.3 2.5 0.0 0.0 -0.3 85 0.75 0.85 0.5 5 160.0 25.0 20.0 4 D 6.2 0.60 0 35.0 2.4 0.08 0.0 0.28 -0.14 0.5 0.25 0.27 0.23 25000 20 500002 0 1 0 BRAVURA 1300.0 2200.0 1.7 0.0 0.3 0.0 70 0.65 0.80 0.52 5 160.0 15.0 10.0 F P 08.0 0.80 0 30.0 1.3 0.08 0.0 0.31 -0.15 0.57 0.0 0.26 0.50 9000 1 1 0 0 0 BUFFALO 1500.0 4000.0 2.0 0.0 0.0 -0.1 85 0.7 0.9 0.5 5 200.0 28.0 5.0 R P 11.0 0.45 0 30.0 1.2 0.12 0.0 0.28 -0.24 0.5 0.4 0.25 0.50 35000 2800 10200000 1 1 0 LINERUN 38
Во вставленной строке заменяем слово LANDSTAL на то которое мы написали пятым по счету в файле vehicles.ide. В данном случае это NEWCAR.
Сохраняем изменения.
Теперь осталось только добавить новой машине озвучку через плагин Alexander'a и ключ с названием машины в american.gxt
Да, и я думаю не надо повторять что нужно перед редактированием любых файлов делать их резервные копии.
Удачи!
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Сначала скрипт всегда выдавал FALSE
ага, 3 и 4 биты включаются скриптовым опкодом 067F. На него функция реагирует прекрасно, но вот игровой движок видимо включает фары через dword по смещению 0x584. Тогда функция должна быть переписана примерно так:
:IsCarLightsOn 0A97: 0@ = car 0@ struct 0@ += 0x4A8 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 0@ += 0xDC 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 if or 08B7: test 1@ bit 3 08B7: test 1@ bit 4 0@ <> 0 then 0485: return_true else 059A: return_false end 0AB2: ret 0
Offline
Gyr:
Это целая статья получилась, осталось только например вот тут выложить и всё
Статья теперь есть Создание машины
у меня тача не появляется, а если с клео в тачу посадить то вот: [img align=С]http://files.mail.ru/HCZSG4[/img]
это я раньше делал, [img align=С]http://files.mail.ru/GAMK1E[/img] это сейчас, почему так происходит?
Last edited by PIT (12-08-2009 19:29)
100 постов - 27 августа;
Offline
ага, 3 и 4 биты включаются скриптовым опкодом 067F. На него функция реагирует прекрасно, но вот игровой движок видимо включает фары через dword по смещению 0x584. Тогда функция должна быть переписана примерно так:
Я что заметил, в предыдущей версии кода (с моими поправками) скрипт выдаёт TRUE, если горит правая фара (не обращая внимания на левую). Здесь же скрипт выдаёт TRUE когда фары должны гореть (даже если они разбиты). Мне как раз именно это и нужно.
И ещё. У тебя скрипт выдаёт TRUE, когда я торможу и у тачки загораются тормозные огни. Исправь пожалуйста.
-----------
вопрос не новый, да и ответ не изменился: НЕЛЬЗЯ
но можно рассчитать, исходя из:
+скорости
+передачи
+максимальной скорости
+общего количества передач
Ну я в принципе так и сделал, но результатом не очень доволен - уж много всяких нюансов учитывать надо. Например, жму на ручник и на газ - обороты должны быть большие, а они оказываются немногим выше нуля или при переключении передач стрелка тахометра должна более-менее плавно опускалась или поднималась и т.д. А ты, 3Doomer, случайно не знаешь, может где-нибудь есть скрипт нормального тахометра, а то я кроме Camera-Hack`а, в котором он есть, больше ничего не нашёл.
Last edited by CraZZZy-GameRRR (12-08-2009 21:52)
Offline
Короче, по фарам. Получается вот что:
dword по смещению 0x584 содержит массив битов, определяющих рендеринг огней на машинах:
бит 0 - правая фара,
бит 1 - левая фара,
биты 2 и 3 - стоп-сигналы. Они всегда вместе горят.
Может что-то еще определяет свечение огней такси на крыше.
Скриптовые биты совсем не нужны оказались. Чтобы проверить только состояние фар:
:IsCarLightsOn 0A97: 0@ = car 0@ struct 0@ += 0x584 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 if or 08B7: test 0@ bit 0 08B7: test 0@ bit 1 then 0485: return_true else 059A: return_false end 0AB2: ret 0
Есть еще темка, где чинились и разбивались эти фары.
Offline
Как узнать максимальное кол-во пассажирских мест машины? Можно и всех мест (вместе с водителем). Или здесь нужно узнавать тип машины? Если тип, то какие они бывают. Да и вообще, ответьте на последний вопрос тоже, пожалуйста
Offline
01EA: 60@ = car 59@ max_passengers
если с водителем то добавить
60@ += 1
всего свободных мест:
046D: 55@ = actor 36@ car_free_seats
Last edited by PIT (13-08-2009 09:36)
100 постов - 27 августа;
Offline
Ой, сорри, уже сам нашёл
Это я, что называется, "протупил": набрал в OST сначала passenger_seat, нужного не нашёл и тогда ввёл более широкое понятие - seat, но опять же, ничего подходящего не увидел. А вот про вариант passenger что-то не подумал Сейчас только на форуме нажал вместо какой-либо страницы "all" и стал читать весь топик сначала и нечаянно наткнулся на то, что нужно.
В любом случае, за внимание спасибо за внимание!
[---]
[large]Новый пост[/large]
[---]
А что насчёт типов машин (опкод 08EC)? Какими они бывают?
Возможно ответ, как всегда кроется прямо перед носом (в мониторе ), например в файле cargrp или другом о тачах
Offline
Короче, по фарам. Получается вот что:
dword по смещению 0x584 содержит массив битов, определяющих рендеринг огней на машинах:
бит 0 - правая фара,
бит 1 - левая фара,
биты 2 и 3 - стоп-сигналы. Они всегда вместе горят.
Может что-то еще определяет свечение огней такси на крыше.
Скриптовые биты совсем не нужны оказались. Чтобы проверить только состояние фар::IsCarLightsOn 0A97: 0@ = car 0@ struct 0@ += 0x584 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 if or 08B7: test 0@ bit 0 08B7: test 0@ bit 1 then 0485: return_true else 059A: return_false end 0AB2: ret 0Есть еще темка, где чинились и разбивались эти фары.
Спасибо, ALIEN, хотя всё вышеизложенное я уже на своём личном опыте понял.
Offline
А что насчёт типов машин (опкод 08EC)? Какими они бывают?
Возможно ответ, как всегда кроется прямо перед носом (в мониторе smile), например в файле cargrp или другом о тачах
я думаю, это типы машин из vehicles.ide
т.е. Car, Peren, trash, pony, mule(такое ощущение, что R делали домашних животных, а не машин ), heli ,moonbeam, taxi, hunter, boat ,bus,rhino и другие..
а возможно я ошибась
100 постов - 27 августа;
Offline
Покопавшись в мэйне игры, увидел, что задействованы в мэйне только 7 типов (0-6), но скорее всего, их больше.
Да, PIT, возможно ты ошибаешься. Скорее всего
А может и нет. Во всяком случае, надо бы ещё покопаться в такого рода файлах и посмотреть.
Offline
Над создать клео скрипт, щас создам и посмотрю, ведь у мня ещё CARspawner!
100 постов - 27 августа;
Offline
Вот про это придумал:
Да будет так сказал господень, и дал нам клео скрипты в раз
Все мотоциклы или многие с типом 8
не, сделаю по другому, с ини файлом.:crazy:
Last edited by PIT (13-08-2009 18:27)
100 постов - 27 августа;
Offline
Не, неполучится, quick opcode не устанавливается.
100 постов - 27 августа;
Offline
Покопавшись в мэйне игры, увидел, что задействованы в мэйне только 7 типов (0-6), но скорее всего, их больше.
Да, PIT, возможно ты ошибаешься. Скорее всего
А может и нет. Во всяком случае, надо бы ещё покопаться в такого рода файлах и посмотреть.
Как многэ эмоций...
например в файле cargrp
А что ты собственно хочешь найти в файле где совершенно другое.
Вот отрывок из файла vehicles.ide (просто случайная машина)
422, bobcat, bobcat, car, BOBCAT, BOBCAT, null, worker, 10, 0, 0, -1, 0.7, 0.7, 0
worker - тот самый "тип". Только вот не понятно что он меняет...
Offline
worker - тот самый "тип". Только вот не понятно что он меняет...
если ты прав и это действительно тот тип, то возможно он меняет, педов, которые на машине ездят.
100 постов - 27 августа;
Offline
worker - тот самый "тип". Только вот не понятно что он меняет...
если ты прав и это действительно тот тип, то возможно он меняет, педов, которые на машине ездят.
А вот ещё, это определяет с какой скоростью будет ехать водитель (он ведь управляется в зависимости от типа поведения его транспорта), и как будет себя вести если врежется/упадёт/слетит с дороги.
Offline
PIT wrote:worker - тот самый "тип". Только вот не понятно что он меняет...
если ты прав и это действительно тот тип, то возможно он меняет, педов, которые на машине ездят.
А вот ещё, это определяет с какой скоростью будет ехать водитель (он ведь управляется в зависимости от типа поведения его транспорта), и как будет себя вести если врежется/упадёт/слетит с дороги.
это объясняет, почему у вертолетов -1, но почему у моцыков?
100 постов - 27 августа;
Offline
Offline
это могло бы пригодится, если бы мы точно знали
Sweet а у тебя есть Quick opcode?
100 постов - 27 августа;
Offline