#1 30-12-2006 18:01

Capushon
Registered: 13-08-2006
Posts: 350
Website

Сохранения

Вопрос наверное к Seemann, потому как больше незнаю человека, который бы смог мне на него ответить.
В этот раз речь пойдёт о сохранениях игры - то-бишь сейвах.
Все мы знаем, что сохранив игру, в сейв (файл записи) отправляется масса информации о координатах игрока, машинах в горожах, подружках, скилах, переменных и пр.
Подозреваю, что во время игры вся эта информация находится в динамической памяти, откуда её можно прочитать/изменить/подкорректировать.
Вопрос в том как это сделать...
Зачем это нужно?
Попытаюсь объяснить: мне например это нужно для принудительного устранения "мусора" попадающего в сейв, чаще всего это могут быть "не выгруженные" модели транспорта и людей, использованных в своих модах.


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#2 30-12-2006 19:35

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Сохранения

масса информации о координатах игрока, машинах в горожах, подружках, скилах, переменных

вся эта масса разбросана по памяти, а не сосредоточена в одном месте. Адреса координат, скиллов известны, переменных тоже. Подружки контролируются через scm, там вся фишка в контрольках (переменная $GIRLFRIEND, например). Структура гаражей и их адреса тоже известны.
Что конкретно тебе нужно?

И еще. Я не занимался структурой сейвов, этим занимался Xieon и вроде как достиг в этом определенных успехов.

Offline

#3 31-12-2006 13:12

reinstal
Registered: 08-12-2006
Posts: 45

Re: Сохранения

может я не в тему но всётаки не хочу открывать новую тему чтоб не засорять форум
у меня такой вопрос:
как сделать чтоб Сиджей при начале новой игры появлялся не на гроув стрит а где небудь в другом месте?

Offline

#4 31-12-2006 14:41

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Сохранения

2Seemann:
Наверное неправильно сформулировал.
Как проверить есть ли в памяти загруженные модели "пользователя"?
Можно ли их принудительно убрать с помощью массива?


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#5 01-01-2007 18:13

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Сохранения

reinstal wrote:

как сделать чтоб Сиджей при начале новой игры появлялся не на гроув стрит а где небудь в другом месте?

Найди либо опкод Player.Create (0053) либо Actor.PutAt($PLAYER_ACTOR,....). После создания игрока в оригинальной игре его перемещают в другое место этим опкодом.

Capushon wrote:

Как проверить есть ли в памяти загруженные модели "пользователя"?

хмм, а если просто:

if
  #INFERNUS.Available
then
  #INFERNUS.Destroy
end

можно в цикле перебрать все модели и выгрузить их.

Offline

#6 01-01-2007 20:08

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Сохранения

2Seemann:

хмм, а если просто:
if
  #INFERNUS.Available
then
  #INFERNUS.Destroy
end

А потом все модели людей и define items  smile


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#7 04-01-2007 12:58

reinstal
Registered: 08-12-2006
Posts: 45

Re: Сохранения

а как это делать, отдельным новым потокам?
я сделал так:

 
crate_thead @nachalo

:nachalo    
0053: $PLAYER_CHAR = create_player #NULL at 2260.0237 -4.8848 26.5581  
end_thread

оH появляется в нужном месте но после этого не один скрипт не работает

Offline

#8 04-01-2007 14:36

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Сохранения

2reinstal:
можно просто изменить координаты в уже существующем опкоде и перекомпилировать.

Offline

#9 24-06-2007 13:25

San'OK
Registered: 22-06-2007
Posts: 7

Re: Сохранения

Вот у меня вопрос, если в сейве ко всем ячейки содержащие адреса с 0xA49960 до конца SCM блока прибавить размер добаленного кода в SCM, то сейв загрузится? Я думаю, что да, ведь указатели на текущие потоки не собьются.

Offline

#10 16-02-2008 07:30

Neo-lorD0
Registered: 16-02-2008
Posts: 1

Re: Сохранения

Помогите пожалста , в чищеном Main.scm написал несколько внешних скриптов , начинаю новую игру - все работает. Сохраняюсь, загружаю сэйв и ни один скрипт неработает, не могу понять в чем проблемма, мож объяснит кто-нибудь?

Offline

#11 11-04-2008 14:53

Hokum
Registered: 11-04-2008
Posts: 2

Re: Сохранения

Я не понимаю как работают гаражы. Дело в том, что я создал скрипт с чистого листа(не большой, в качестве треннировки) и у меня после сохранения и последующей загрузки того сохранения, машины, поставленные в гараж, исчезают. Не могу понять, как от этого избавиться.

Offline

#12 11-04-2008 15:47

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Сохранения

А как ты создал гараж?

Offline

#13 11-04-2008 16:17

Hokum
Registered: 11-04-2008
Posts: 2

Re: Сохранения

Вот так вот, его ещё и создавать надо... Собственно говоря наткнулся на проблему проверяя гараж рядом с домом джонсонов, при этом никак его не описывая. Ну не понял я что делать с гаражами, читая оригинальный main.scm
Мне совсем недавно попал в руки редактор миссий(SannyBuilder) и я плохо в этих скриптах разбираюсь. Потому и спрашиваю.

Offline

#14 14-04-2008 13:22

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Сохранения

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

#15 14-04-2008 16:13

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Сохранения

Seemann wrote:

Вывод: гараж нужно прописывать через 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

#16 15-04-2008 09:26

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: Сохранения

Вывод: гараж нужно прописывать через IPL. Хотя я где-то на форуме выкладывал способ, как создать гараж через память игры, попробуй поискать.

Через память бесполезно. Когда ты мне показал как можно создавать гаражи, я пробывал сделать гараж через память и ipl-файл, не начиная новой игры, у меня ничего не получилось. Наверно знаний не хватает. Единственное что у меня получилось - сделать гараж через ipl начиная новую игру.

Offline

#17 15-04-2008 20:51

Alexander
Registered: 19-08-2006
Posts: 184
Website

Re: Сохранения

2flashTrash : код в студию )

Offline

#18 16-04-2008 08:04

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: Сохранения

Alexander wrote:

2flashTrash : код в студию )

Вот, то что объяснял Seemann.

Seemann wrote:
Загрузка 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

Board footer

Powered by FluxBB