Форум Trainsim  

Вернуться   Форум Trainsim > Microsoft Train Simulator > MSTS - Подвижной состав

Ответ
 
Опции темы Опции просмотра
Старый 08.01.2009, 22:26   #16
Aleks
Матёрый пользователь
 
Регистрация: 25.07.2007
Адрес: г. Москва
Сообщений: 573
Вы сказали Спасибо: 1
Поблагодарили 11 раз(а) в 10 сообщениях
Aleks стоит на развилке (репутация по умолчанию)
Отправить сообщение для Aleks с помощью ICQ
По умолчанию

Цитата:
Сообщение от DeBUG Посмотреть сообщение
Если будут вопросы спрашивай.
Будут )). Целью моей работы с памятью МСТС является заполнение вот такой структуры с адресами и значениями параметров всех подвижных единиц состава игрока:

Код:
struct pWagon{
	DWORD pTM; // Давление в тормозной магистрали, psi
	float TM;
	DWORD pZR; // Давление в запасном резервуаре, psi
	float ZR;
	DWORD pTC; // Давление в тормозном цилиндре, psi
	float TC;
	DWORD pSpeed; // Скорость (м/с)
	float Speed;
	DWORD pTractiveForce; // Сила тяги
	float TractiveForce;
	DWORD pBrakeForce; // Сила торможения
	float BrakeForce;
};
Вот данные по адресам для игры без патча:

DWORD pConsist = 0x7c8778;
DWORD pHour = 0x810984; // Часы игрового времени int
DWORD pMin = 0x810980; // Минуты игрового времени int
DWORD pSec = 0x81097c; // Секунды игрового времени int
DWORD pSpeed = 0x80f680; // Скорость (м/с) float
DWORD pSigAsp = 0x80f70c; // SIGASP впередистоящего светофора int

А так я ищу адреса для заполнения структур pWagon:
// Предполагая, что HANDLE hProcess = OpenProcess(... я уже сделал.

Код:
nWag = 0;
ReadProcessMemory(hProcess, (LPCVOID)pConsist, &adr1, 4, NULL);
adr1 += 0x6a;
ReadProcessMemory(hProcess, (LPCVOID)adr1, &adr2, 4, NULL);	

// Поиск адресов вагонных переменных
float m_A, m_B; // Переменные записи значений меток поиска
DWORD pSearch = adr2 - 0x13ef0; // Границы адресов поиска
DWORD pSearchEnd = 0x2100000;

while (pSearch < pSearchEnd)
	{
		ReadProcessMemory(hProcess, (LPCVOID)pSearch, &m_A, 4, NULL);
		if (m_A == 76)
		{
			ReadProcessMemory(hProcess, (LPCVOID)(pSearch + 0xC), &m_B, 4, NULL);
			if (m_B == 60)
			{
				nWag += 1;
				Wag(nWag).pZR = pSearch - 0x4;
				Wag(nWag).pTC = pSearch + 0x8;
				Wag(nWag).pTM = pSearch + 0x10;
				Wag(nWag).pSpeed = pSearch - 0x6c;
				Wag(nWag).pBrakeForce = pSearch + 0x4;
				Wag(nWag).pTractiveForce = pSearch + 0x76;
			}
		}
		pSearch += 0x4;
	}
	// Чтение времени из игры
	ReadProcessMemory(hProcess, (LPCVOID)pHour, &Hour, 4, NULL);
	ReadProcessMemory(hProcess, (LPCVOID)pMin, &Min, 4, NULL);
	ReadProcessMemory(hProcess, (LPCVOID)pSec, &Sec, 4, NULL);
Значения меток поиска берутся из енг-файла головного локомотива:

TrainBrakesControllerMaxSystemPressure( 76 )
EngineBrakesControllerMaxSystemPressure( 60 )
Aleks вне форума   Ответить с цитированием
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


Реклама показывается изредка по случайному принципу
По умолчанию РЕКЛАМА

 
Старый 08.01.2009, 22:39   #17
DeBUG
Опытный
 
Регистрация: 11.10.2008
Сообщений: 201
Вы сказали Спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
DeBUG стоит на развилке (репутация по умолчанию)
По умолчанию

Так в чем проблема? У тебя проблема по адрессам в патче или как?
DeBUG вне форума   Ответить с цитированием
Старый 08.01.2009, 22:52   #18
Aleks
Матёрый пользователь
 
Регистрация: 25.07.2007
Адрес: г. Москва
Сообщений: 573
Вы сказали Спасибо: 1
Поблагодарили 11 раз(а) в 10 сообщениях
Aleks стоит на развилке (репутация по умолчанию)
Отправить сообщение для Aleks с помощью ICQ
По умолчанию

Цитата:
Сообщение от DeBUG Посмотреть сообщение
У тебя проблема по адрессам в патче или как?
Угу. Даже есть я адреса и нахожу (поиском по значению через ArtMoney), то всеравно не получается написать алгоритм поиска.
Aleks вне форума   Ответить с цитированием
Старый 08.01.2009, 22:55   #19
DeBUG
Опытный
 
Регистрация: 11.10.2008
Сообщений: 201
Вы сказали Спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
DeBUG стоит на развилке (репутация по умолчанию)
По умолчанию

Тебе нужно изменить стартовый адрес DWORD pConsist = 0x7c8778 на тот который в патче. Я гляну скажу.
DeBUG вне форума   Ответить с цитированием
Старый 08.01.2009, 23:05   #20
DeBUG
Опытный
 
Регистрация: 11.10.2008
Сообщений: 201
Вы сказали Спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
DeBUG стоит на развилке (репутация по умолчанию)
По умолчанию

Твой адрес DWORD pConsist должен быть равен 0x7C2AC0

DWORD pConsist = 0x7C2AC0;
DeBUG вне форума   Ответить с цитированием
Старый 08.01.2009, 23:10   #21
Aleks
Матёрый пользователь
 
Регистрация: 25.07.2007
Адрес: г. Москва
Сообщений: 573
Вы сказали Спасибо: 1
Поблагодарили 11 раз(а) в 10 сообщениях
Aleks стоит на развилке (репутация по умолчанию)
Отправить сообщение для Aleks с помощью ICQ
По умолчанию

А это под какую версию MSTSBin?
Aleks вне форума   Ответить с цитированием
Старый 08.01.2009, 23:13   #22
DeBUG
Опытный
 
Регистрация: 11.10.2008
Сообщений: 201
Вы сказали Спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
DeBUG стоит на развилке (репутация по умолчанию)
По умолчанию

Это под оф.патч и 1.8 точно, наверное и под 1.7 работать должно. Если у тебя алгоритм правильный, то меняешь адрес и пробуешь должно работать.
DeBUG вне форума   Ответить с цитированием
Старый 08.01.2009, 23:18   #23
Aleks
Матёрый пользователь
 
Регистрация: 25.07.2007
Адрес: г. Москва
Сообщений: 573
Вы сказали Спасибо: 1
Поблагодарили 11 раз(а) в 10 сообщениях
Aleks стоит на развилке (репутация по умолчанию)
Отправить сообщение для Aleks с помощью ICQ
По умолчанию

Цитата:
Сообщение от DeBUG Посмотреть сообщение
Это под оф.патч и 1.8 точно, наверное и под 1.7 работать должно. Если у тебя алгоритм правильный, то меняешь адрес и пробуешь должно работать.
Буду пробовать. Алгоритм верный - с игрой без патча все отлично работает.
Aleks вне форума   Ответить с цитированием
Старый 08.01.2009, 23:27   #24
DeBUG
Опытный
 
Регистрация: 11.10.2008
Сообщений: 201
Вы сказали Спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
DeBUG стоит на развилке (репутация по умолчанию)
По умолчанию

Значит и под патч пойдет. Я вообще скоро займусь вот этим http://mstsbin.uktrainsim.com/images/hud.gif это то чем ты сейчас занимаешься. Только обширнее. Если что выйдет скину исходник.

По твоему коду есть пара советов. Основной это избегать таких затрат на поиск адресов. В программе есть алгоритм, вот его и следует вытаскивать и воссоздавать в своей программе.
DeBUG вне форума   Ответить с цитированием
Старый 09.01.2009, 00:08   #25
Aleks
Матёрый пользователь
 
Регистрация: 25.07.2007
Адрес: г. Москва
Сообщений: 573
Вы сказали Спасибо: 1
Поблагодарили 11 раз(а) в 10 сообщениях
Aleks стоит на развилке (репутация по умолчанию)
Отправить сообщение для Aleks с помощью ICQ
По умолчанию

Цитата:
Сообщение от DeBUG Посмотреть сообщение
Я вообще скоро займусь вот этим http://mstsbin.uktrainsim.com/images/hud.gif это то чем ты сейчас занимаешься. Только обширнее.
Интересно посмотреть будет.
В своем проекте я беру работу по расчету тяги и торможения на свою программу, а МСТС рассчитывает движение состава по пути в зависимости от этого. Кроме того для управления у меня используется не клавиатура, а спец. приспособленные элементы управления от настоящего п.с., подключенные к компьютеру.
Еще классно было бы найти адреса в памяти и научится программно включать/выключать фары, открывать/закрывать двери и т.п. (но это только позже).

Цитата:
По твоему коду есть пара советов. Основной это избегать таких затрат на поиск адресов. В программе есть алгоритм, вот его и следует вытаскивать и воссоздавать в своей программе.
Полностью согласен, но затраты на поиск для меня сейчас не главное, да и выполняется поиск только один раз при запуске игры. Хотя улучшить алгоритм я вряд ли смогу - я все-таки не программист.
Вот описать физику поведения подвижного состава - это да, тут основное знание это не программинг, а именно конструкция п.с. и работа отдельных его элементов.
Aleks вне форума   Ответить с цитированием
Старый 09.01.2009, 00:15   #26
DeBUG
Опытный
 
Регистрация: 11.10.2008
Сообщений: 201
Вы сказали Спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
DeBUG стоит на развилке (репутация по умолчанию)
По умолчанию

Попробуй во время игры (оригинал) записать "1" в адрес 0x7BC1A4 тебе может помочь с проверкой твоих результатов.
DeBUG вне форума   Ответить с цитированием
Старый 09.01.2009, 19:55   #27
DeBUG
Опытный
 
Регистрация: 11.10.2008
Сообщений: 201
Вы сказали Спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
DeBUG стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от Barmaley
Дело в том, что они реагируют только на триггеры связанные с speed и variable(1,2,3)controlled
Есть вот такие триггеры:

Variable3Controlled
Variable2Controlled
Variable1Controlled
DistanceControlled
SpeedControlled

Быть может еще будет.
DeBUG вне форума   Ответить с цитированием
Старый 10.01.2009, 11:23   #28
Barmaley
Бабайский Пират
 
Аватар для Barmaley
 
Регистрация: 05.11.2007
Адрес: Краматорск
Сообщений: 1,632
Вы сказали Спасибо: 8
Поблагодарили 68 раз(а) в 30 сообщениях
Barmaley стоит на развилке (репутация по умолчанию)
Отправить сообщение для Barmaley с помощью ICQ Отправить сообщение для Barmaley с помощью Skype™
По умолчанию

Вот и все. А вагоны к примеру только на дистанс и спиид реагируют. А У них хотелось бы и триггеры тормозов как-то того...
__________________
"Да здравствует мыло душистое и веревка пушистая "(с)
Barmaley вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 01:23. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim
TopList Нажми для появления дома Trainsim на карте Intermap
Что это?