Перейти к содержанию

Ultimap 2 & Ultimap баги


elvis66666

Рекомендуемые сообщения

Хотел спросить у тех, кто пользуется:

1 - Ultimap 2 работает оооочень медленно, на отсев одного раза тратится час и более, конечно использую HDD, а не SSD и скорость записи/чтения всего 60мб.с. , но это что-то уж ооочень долго. У всех так? или это баг?

2 - Ultimap - при добавлении инструкций в codelist постоянно высвечивается окошко добавить и его нельзя закрыть, помогает только убить процесс CE =(

 

Ссылка на комментарий
Поделиться на другие сайты

  • Ultimap 2. Ничего не скажу. железо не подходит
  • Ну, да в Ultimap есть такой баг. Можешь написать Дарк Байту

 

Для вывода и сохранения данных из окна Ultimap можно использовать код из темы Работа с данными ultimap через lua.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

35 минуты назад, MasterGH сказал:
  • Ultimap 2. Ничего не скажу. железо не подходит
  • Ну, да в Ultimap есть такой баг. Можешь написать Дарк Байту

 

Для вывода и сохранения данных из окна Ultimap можно использовать код из темы Работа с данными ultimap через lua.

Благодарю :)

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, MasterGH сказал:
  • Ultimap 2. Ничего не скажу. железо не подходит
  • Ну, да в Ultimap есть такой баг. Можешь написать Дарк Байту

 

Для вывода и сохранения данных из окна Ultimap можно использовать код из темы Работа с данными ultimap через lua.

Кстати , может подскажешь, как уменьшить тормоза в игре, когда работает ultimap? уж слишком он жестоко рубит процессор.

Ссылка на комментарий
Поделиться на другие сайты

59 минут назад, elvis66666 сказал:

Кстати , может подскажешь, как уменьшить тормоза в игре, когда работает ultimap?

 

Я бы сам хотел знать как это сделать.

 

Я довольно давно пытался сделать аналог ultimap - очень быстрый.

Через Lua скрипт я патчил  call-ы и вел считчик их вывозов в специальной области памяти.

 

post-3-0-36680500-1432791776.png

 

Её я сканировал обычными способом на уменьшилось/увеличилось/не изменилось. Находился счетчик. По нему выходил на инструкцию. Но, это касается не всех call-ов, и совершенно не касается прыжков (как в ultimap).

 

Код в этой теме. Форматирование текста к сожалению пропало. Поправлю скоро.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Я так думаю, что для CE вообще надо железа покупать

- 64 Гб оперативы и быстрой

- SSD жесткий диск чем больше тем лучше, или несколько таких

- проц под ultimap2

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, MasterGH сказал:

Я так думаю, что для CE вообще надо железа покупать

- 64 Гб оперативы и быстрой

- SSD жесткий диск чем больше тем лучше, или несколько таких

- проц под ultimap2

ну вот все обновил, кроме SSD, она на 128 у меня была, но ее не хватает)

Нужно разжиться m2 SSD

 

Сейчас попробовал lua скрипты, вообще супер) Еще раз спасибо.

А можно быстро переписать скрипт , чтобы в codelist добавить столбцы?

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, elvis66666 сказал:

А можно быстро переписать скрипт , чтобы в codelist добавить столбцы?

 

Попробую сделать.

 

upd. Быстро не получится. Может минут через 30. Эта функция запрятана и её нет в main.lua. Поэтому по кнопкам двигаемся по CE, и таймеру её придется оформить. Функция добавления мне тоже нужна. Давно хотел сделать.

 

upd2. В общем не получилось. На одном из диалогов InputboxTop не вызывается doClick (inputboxTop.Button1.doClick() ). Код оставлю, может кто решит допилить.

 

Скрытый текст

function FindFrom(formName)	  
	local formCount = getFormCount()
	for i=0, formCount-1 do if(getForm(i).Name == formName) then return getForm(i) end end
end

local defaultDisassemblerView = getMemoryViewForm().DisassemblerView
local popupmenuFromDefaultDisassemblerView = control_getPopupMenu(defaultDisassemblerView)

local menuItem_AddressCodeList = nil
local menuItems = popupmenuFromDefaultDisassemblerView.Items
local count = menuItems.Count - 1
for i = 0, count-1 do
	local item = menuItems.getItem(i)
	if(item.Caption == 'Add to the code list') then
		menuItem_AddressCodeList = item
		break
	end
end

getMemoryViewForm().DisassemblerView.TopAddress = 0x75A55111
menuItem_AddressCodeList.doClick()


local test = 0
local stateAddToCodeList = false
local timer = createTimer()
timer.Interval = 2000
timer.OnTimer = function ()
	print('A')
	local frmAddToCodeList = FindFrom('frmAddToCodeList')
	if(frmAddToCodeList) then 
		frmAddToCodeList.Button1.doClick() 
		print('B')
		return
	end
	print('C')
	local inputboxTop = FindFrom('InputboxTop')
	if(inputboxTop) then 
		inputboxTop.Button1.doClick() 
		print('D')
		return
	end
	
	print('E')
	getMemoryViewForm().DisassemblerView.TopAddress = getMemoryViewForm().DisassemblerView.TopAddress + 1
	menuItem_AddressCodeList.doClick()
	
	test = test + 1
	if(test >= 10) then
		timer.Enabled = false
	end
end

 

 

Ссылка на комментарий
Поделиться на другие сайты

3 hours ago, MasterGH said:

upd2. В общем не получилось. На одном из диалогов InputboxTop не вызывается doClick (inputboxTop.Button1.doClick() ). Код оставлю, может кто решит допилить.

 

Я думаю это из-за того, что данная форма вызвана через if InputboxTop.showModal() == mrOk и у кнопки установлен ModalResult := mrOk, при котором не требуется задания onClick.

В обычном случае достаточно передать форме ModalResult = 1 и выполнить Hide() (модальные формы не закрываются), но пытаясь проделать это через CE я, в случае вызова Hide() ловлю блокировку всех окон, а Close передает ModalResult = 2 (читай mrCancel).

 

Попробую еще потыкать.

 

UPD:

Наврал про хайд, по второму кругу получилось на своих формах. Но так как я не могу запустить ваш скрипт, могу советовать только теоретически.

 

Попробуйте следующее - после нахождения  inputboxTop выполнить: 

  • inputboxTop.ModalResult = mrOK
  • inputboxTop.hide()
Изменено пользователем srg91
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

11 час назад, elvis66666 сказал:

Вот ultimap2 в этом плане вообще супер, не тормозит ничего

Серьёзно? Если так, то надо бы обновить проц, но где взять ~60 тыщ на нормальный комп? :( Хочется и ultimap2, и DirectX 12, да плюс ещё SSD под ultimap2. А если ещё и 64 гига оперативы брать... Нехило так вложиться надо...

Изменено пользователем aliast
Ссылка на комментарий
Поделиться на другие сайты

11 час назад, srg91 сказал:

Я думаю это из-за того, что данная форма вызвана через if InputboxTop.showModal() == mrOk и у кнопки установлен ModalResult := mrOk, при котором не требуется задания onClick.

Да, так и есть. Спасибо
 

11 час назад, srg91 сказал:

Попробуйте следующее - после нахождения  inputboxTop выполнить:

  • inputboxTop.ModalResult = mrOK
  • inputboxTop.hide()

Работает.

 

Добавление инструкций начиная со своего стартового адреса (это скрипт не для Ultimap, а просто как добавить промежуток адресов из дизассемблера)

 

Скрытый текст

startAddress = 0x0045464A -- поставить свой адрес

function FindFrom(formName)	  
	local formCount = getFormCount()
	for i=0, formCount-1 do if(getForm(i).Name == formName) then return getForm(i) end end
end

local defaultDisassemblerView = getMemoryViewForm().DisassemblerView
local popupmenuFromDefaultDisassemblerView = control_getPopupMenu(defaultDisassemblerView)

local menuItem_AddressCodeList = nil
local menuItems = popupmenuFromDefaultDisassemblerView.Items
local count = menuItems.Count - 1
for i = 0, count-1 do
	local item = menuItems.getItem(i)
	if(item.Caption == 'Add to the code list') then
		menuItem_AddressCodeList = item
		break
	end
end


local test = 0
local stateAddToCodeList = false
local timer = createTimer(nil)
timer.Interval = 50

stateAdd = false

timer.OnTimer = function ()



	if(stateAdd) then
		stateAdd = false
		
		getMemoryViewForm().DisassemblerView.TopAddress = getMemoryViewForm().DisassemblerView.TopAddress + getInstructionSize(getMemoryViewForm().DisassemblerView.TopAddress)
		menuItem_AddressCodeList.doClick()
		
		test = test + 1
		if(test >= 5) then
			timer.Enabled = false
		end	
		return
	end
	
	local inputboxTop = FindFrom('InputboxTop')
	
	if(inputboxTop and inputboxTop.Enabled and inputboxTop.Visible) then 
		inputboxTop.ModalResult = mrOK
		inputboxTop.Button1.ModalResult = mrOK
		inputboxTop.Button1.doClick() 
		inputboxTop.hide()
		print()
		
		stateAdd = true
		return
	end

	local frmAddToCodeList = FindFrom('frmAddToCodeList')
	if(frmAddToCodeList and frmAddToCodeList.Enabled and frmAddToCodeList.Visible) then 
		frmAddToCodeList.ModalResult = mrOK
		frmAddToCodeList.Button1.ModalResult = mrOK
		frmAddToCodeList.Button1.doClick() 
		return
	end
end
timer.Enabled = true

getMemoryViewForm().DisassemblerView.TopAddress = startAddress
menuItem_AddressCodeList.doClick()

 


Добавление правой колонки из Ultimap (можно поставить левую). Если будет ошибаться, то задержку таймера увеличить с 50 на значение выше

Скрытый текст

-- Вывод колонки2
local column = 2	


function FindFrom(formName)	
	local formCount = getFormCount()
	for i=0, formCount-1 do     
		if(getForm(i).Name == formName) then return getForm(i) end
	end
end 

function GetAddressArray(argListView, columnNumber)
	local addresses = {}
	local items1 = argListView.Items
	local linesCount = items1.getCount()
	local line = ''
	for i=0, linesCount-1 do
		local item = items1.getItem(i)
		if(columnNumber == 1) then
			addresses[i+1] = getAddress(item.Caption)
		else 
			local subItems = item.subItems 
			local itemCount = subItems.getCount()
			if(columnNumber == 2) then 
				addresses[i+1] = getAddress(subItems[columnNumber-2])
			end 
		end
	end
	return addresses
end

local frmUltimap = FindFrom('frmUltimap')
local ultimapListView1 = frmUltimap.findComponentByName('ListView1')
local tableAddresses = GetAddressArray(ultimapListView1, column)



local defaultDisassemblerView = getMemoryViewForm().DisassemblerView
local popupmenuFromDefaultDisassemblerView = control_getPopupMenu(defaultDisassemblerView)

local menuItem_AddressCodeList = nil
local menuItems = popupmenuFromDefaultDisassemblerView.Items
local count = menuItems.Count - 1
for i = 0, count-1 do
	local item = menuItems.getItem(i)
	if(item.Caption == 'Add to the code list') then
		menuItem_AddressCodeList = item
		break
	end
end



local stateAddToCodeList = false
local timer = createTimer(nil)
timer.Interval = 50
stateAdd = false

timer.OnTimer = function ()

	if(stateAdd) then
		stateAdd = false
		
		indexTable = indexTable + 1
		if(indexTable > #tableAddresses) then
			timer.Enabled = false
		else
			getMemoryViewForm().DisassemblerView.TopAddress = tableAddresses[indexTable]
			menuItem_AddressCodeList.doClick()
		end
		return
	end
	
	local inputboxTop = FindFrom('InputboxTop')
	
	if(inputboxTop and inputboxTop.Enabled and inputboxTop.Visible) then 
		inputboxTop.ModalResult = mrOK
		inputboxTop.Button1.ModalResult = mrOK
		inputboxTop.Button1.doClick() 
		inputboxTop.hide()
		stateAdd = true
		return
	end

	local frmAddToCodeList = FindFrom('frmAddToCodeList')
	if(frmAddToCodeList and frmAddToCodeList.Enabled and frmAddToCodeList.Visible) then 
		frmAddToCodeList.ModalResult = mrOK
		frmAddToCodeList.Button1.ModalResult = mrOK
		frmAddToCodeList.Button1.doClick() 
		return
	end
end

timer.Enabled = true

indexTable = 1
getMemoryViewForm().DisassemblerView.TopAddress = tableAddresses[indexTable]
menuItem_AddressCodeList.doClick()

 

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.