You are not logged in.
Pages: 1
Вопрос наверное к Seemann, потому как больше незнаю человека, который бы смог мне на него ответить.
В этот раз речь пойдёт о сохранениях игры - то-бишь сейвах.
Все мы знаем, что сохранив игру, в сейв (файл записи) отправляется масса информации о координатах игрока, машинах в горожах, подружках, скилах, переменных и пр.
Подозреваю, что во время игры вся эта информация находится в динамической памяти, откуда её можно прочитать/изменить/подкорректировать.
Вопрос в том как это сделать...
Зачем это нужно?
Попытаюсь объяснить: мне например это нужно для принудительного устранения "мусора" попадающего в сейв, чаще всего это могут быть "не выгруженные" модели транспорта и людей, использованных в своих модах.
Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ
Offline
масса информации о координатах игрока, машинах в горожах, подружках, скилах, переменных
вся эта масса разбросана по памяти, а не сосредоточена в одном месте. Адреса координат, скиллов известны, переменных тоже. Подружки контролируются через scm, там вся фишка в контрольках (переменная $GIRLFRIEND, например). Структура гаражей и их адреса тоже известны.
Что конкретно тебе нужно?
И еще. Я не занимался структурой сейвов, этим занимался Xieon и вроде как достиг в этом определенных успехов.
Offline
может я не в тему но всётаки не хочу открывать новую тему чтоб не засорять форум
у меня такой вопрос:
как сделать чтоб Сиджей при начале новой игры появлялся не на гроув стрит а где небудь в другом месте?
Offline
как сделать чтоб Сиджей при начале новой игры появлялся не на гроув стрит а где небудь в другом месте?
Найди либо опкод Player.Create (0053) либо Actor.PutAt($PLAYER_ACTOR,....). После создания игрока в оригинальной игре его перемещают в другое место этим опкодом.
Как проверить есть ли в памяти загруженные модели "пользователя"?
хмм, а если просто:
if #INFERNUS.Available then #INFERNUS.Destroy end
можно в цикле перебрать все модели и выгрузить их.
Offline
а как это делать, отдельным новым потокам?
я сделал так:
crate_thead @nachalo :nachalo 0053: $PLAYER_CHAR = create_player #NULL at 2260.0237 -4.8848 26.5581 end_thread
оH появляется в нужном месте но после этого не один скрипт не работает
Offline
2reinstal:
можно просто изменить координаты в уже существующем опкоде и перекомпилировать.
Offline
Вот у меня вопрос, если в сейве ко всем ячейки содержащие адреса с 0xA49960 до конца SCM блока прибавить размер добаленного кода в SCM, то сейв загрузится? Я думаю, что да, ведь указатели на текущие потоки не собьются.
Offline
Помогите пожалста , в чищеном Main.scm написал несколько внешних скриптов , начинаю новую игру - все работает. Сохраняюсь, загружаю сэйв и ни один скрипт неработает, не могу понять в чем проблемма, мож объяснит кто-нибудь?
Offline
Я не понимаю как работают гаражы. Дело в том, что я создал скрипт с чистого листа(не большой, в качестве треннировки) и у меня после сохранения и последующей загрузки того сохранения, машины, поставленные в гараж, исчезают. Не могу понять, как от этого избавиться.
Offline
А как ты создал гараж?
Offline
Вот так вот, его ещё и создавать надо... Собственно говоря наткнулся на проблему проверяя гараж рядом с домом джонсонов, при этом никак его не описывая. Ну не понял я что делать с гаражами, читая оригинальный main.scm
Мне совсем недавно попал в руки редактор миссий(SannyBuilder) и я плохо в этих скриптах разбираюсь. Потому и спрашиваю.
Offline
http://www.gtamodding.com/index.php?title=Garage
In San Andreas, garages can only be created through the GRGE section of the IPL file and controlled through the main.scm.
Вывод: гараж нужно прописывать через IPL. Хотя я где-то на форуме выкладывал способ, как создать гараж через память игры, попробуй поискать.
Offline
Вывод: гараж нужно прописывать через IPL. Хотя я где-то на форуме выкладывал способ, как создать гараж через память игры, попробуй поискать.
Точно. Для примера могу предложить еще один сохраняющий гараж.
Открываем LAe2.ipl между grge и end прописываем строку
2520.64, -1675.42, 13.6685, 2528.25, -1675.42, 2520.64, -1672.24, 18.7685, 1, 16, sweetG
все, теперь в доме Свита работает гараж.
Offline
Вывод: гараж нужно прописывать через IPL. Хотя я где-то на форуме выкладывал способ, как создать гараж через память игры, попробуй поискать.
Через память бесполезно. Когда ты мне показал как можно создавать гаражи, я пробывал сделать гараж через память и ipl-файл, не начиная новой игры, у меня ничего не получилось. Наверно знаний не хватает. Единственное что у меня получилось - сделать гараж через ipl начиная новую игру.
Offline
Offline
2flashTrash : код в студию )
Вот, то что объяснял Seemann.
Загрузка IPL: Code: // -------------- получаем адрес, если скрипт в CLEO -------------- 0A9F: 0@ = current_thread_pointer 0@ += 0x10 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 0@ -= @IPL // -------------- получаем адрес, если скрипт в майне -------------- //0@ = @IPL //0@ += 0xA49960 // загружаем IPL 0AA5: call 0x5B8700 num_params 1 pop 1 0@ //.... -------------- где-то в скрипте -------------- :IPL hex "data\maps\vegas\vegasE.ipl" 00 endЯ правда не уверен, будет ли рада игра, если ей вот так подсовывать IPL. Возможно надо что-то дополнительно выгружать после этого...
Можно обойтись без IPL и создавать гараж напрямую из скрипта:
Code: {$CLEO} 0A9F: 0@ = current_thread_pointer 0@ += 0x10 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 0@ -= @GRGE // 0@ указывает на опкод 0900, пропускаем 4 байта в коде (0900 и 2 еще байта) 0@ += 4 // теперь 0@ указывает непосредственно на сам текст "2602.6..." // вызываем процедуру чтения строки GRGE из IPL 0AA5: call 0x5B4530 num_params 1 pop 1 0@ 0A93: end_custom_thread :GRGE 0900: "2602.6 1438.84 9.8337 2616.4 1438.84 2602.6 1462.11 15.4891 1 1 vgElock" 0000:
Offline
Pages: 1