Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотров
    15 628

Телепорт на Lua. 10 слотов. 3 типа данных


MasterGH

1 023 просмотра

Функции:

1) Три типа данных: float, double, integer

2)  10 слотов сохранений

3) Управление горячими клавишами. ctrl+X - где X от 0 до 9 сохраняет позицию, shift + X загружает ранее сохраненную позицию

4) Озвучивание загрузки или сохранения

Как пользоваться:

1. Подключаемся к процессу игры любым способом (хоть вручную, хоть на Lua, чем угодно)

2. В CE вставляем Lua скрипт

Спойлер

teleport_address = "03D2C6DC"	-- "[[address+XX]+XX]" или через registersymbol()
type_data = 'INTEGER'			-- FLOAT, DOUBLE, INTEGER

-- ctrl + R - сбросить позицию
-- ctrl + X - сохранить в слот X, где X от 0 до 9
-- shift + X - сохранить в слот X, где X от 0 до 9

--класс
Vector3 = {}
function Vector3:new(address, type_data)

	local object = {}
	object.address = address
	object.x = 0
	object.y = 0
	object.z = 0
	object.type_data = type_data
	
	function object:getAddress()
		return self.address 
	end
	
	function object:read()
		if object.type_data == 'FLOAT' then
			object.x = readFloat(object.address)
			object.y = readFloat(getAddress(object.address) + 4)
			object.z = readFloat(getAddress(object.address) + 8)
		elseif object.type_data == 'DOUBLE' then
			object.x = readDouble(object.address)
			object.y = readDouble(getAddress(object.address) + 8)
			object.z = readDouble(getAddress(object.address) + 16)		
		elseif object.type_data == 'INTEGER' then
			object.x = readInteger(object.address)
			object.y = readInteger(getAddress(object.address) + 4)
			object.z = readInteger(getAddress(object.address) + 8)		
		end
		return object
	end
	
	function object:write()
		if object.type_data == 'FLOAT' then
			writeFloat(object.address, object.x)
			writeFloat(getAddress(object.address) + 4, object.y)
			writeFloat(getAddress(object.address) + 8, object.z)
		elseif object.type_data == 'DOUBLE' then
			writeDouble(object.address, object.x)
			writeDouble(getAddress(object.address) + 8, object.y)
			writeDouble(getAddress(object.address) + 16, object.z)		
		elseif object.type_data == 'INTEGER' then
			writeInteger(object.address, object.x)
			writeInteger(getAddress(object.address) + 4, object.y)
			writeInteger(getAddress(object.address) + 8, object.z)		
		end	
	end
	
	function object:print_vector()
		print(string.format("%s, %s, %s", object.x, object.y, object.z))
	end
	
	setmetatable(object, self)
	self.__index = self; 
	return object
end



--класс
Teleport = {}

--тело класса Teleport
function Teleport:new(address, type_data)
	
	local object = {}
	-- Тип данных
	object.type_data = type_data
	-- Адрес
	object.vector3_position = Vector3:new(address, type_data)
	-- Адреса для слотов
	object.vector3_positions = {}
	
	function object:getAddress()
		return self.address 
	end
	
	function object:make_hotkey_reset_position()
	
		local genericHotkey = createHotkey(
				function() 
					object.vector3_position:write()
				end,
				{VK_CONTROL, VK_R}
			)
		genericHotkey.DelayBetweenActivate = 2000
	end

	function object:make_hotkey_save_position(numberKey)
		
		local genericHotkey = createHotkey(
				function()
					speakEnglish("Save position "..numberKey)
					object.vector3_positions[numberKey]:read()
				end, 
				{VK_CONTROL, VK_0 + numberKey}
			)
		genericHotkey.DelayBetweenActivate = 2000
	end

	function object:make_hotkey_load_position(numberKey)
		
		local genericHotkey = createHotkey(
				function() 
					speakEnglish("Load position "..numberKey)
					object.vector3_position:read()
					object.vector3_positions[numberKey]:write()
				end,
				{VK_SHIFT, VK_0 + numberKey}
			)
		genericHotkey.DelayBetweenActivate = 2000
	end

	function object:registry_hot_keys()

		object:make_hotkey_reset_position()

		for numberKey = 0, 9 do
			local addressPosition = Vector3:new(address, type_data)
			addressPosition:read()
			table.insert(object.vector3_positions, addressPosition)
			object:make_hotkey_save_position(numberKey)
			object:make_hotkey_load_position(numberKey)		
		end
	end	
	
	object:registry_hot_keys()
	
	setmetatable(object, self)
	self.__index = self; 
	return object
end

local teleport = Teleport:new(teleport_address, type_data)

 

 

3. Меняем адрес teleport_address = "03D2C6DC"   на тот который нужно.

Здесь может быть указатель например  -"[[address+XX]+XX]" или через registersymbol() в АА скриптах.

Не тестировалось если адрес еще невалидный, т.е. не существует в памяти. По идее слоты проинициализируются с нулевыми координатами по умолчанию. Поэтому лучше Lua скрипт запускать в момент существования адреса. Проверка на существование адреса - getAddressSafe(string, local OPTIONAL, shallow OPTIONAL): returns the address of a symbol, or nil if not found. Similar to getAddress when errorOnLookup is false, but returns nil instead. Проверку можно делать по таймеру. Запуск скрипта это последняя строка 

 

4.Меняем тип данных type_data = 'INTEGER'            -- FLOAT, DOUBLE, INTEGER


Данный скрипт предоставляется как есть. Сделан для всех пользователей форума и можно использовать его в любых целях: в образовательных, в коммерческих. Если что-то не работает, то придется править вам самим. У меня к сожалению нет времени на оказание помощи. Справочник по луа функциям в файле"celua.txt"

  • Плюс 1

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

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

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