Телепорт на Lua. 10 слотов. 3 типа данных
Функции:
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 Комментариев
Рекомендуемые комментарии
Комментариев нет
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти