Самповский редактор объектов

.Makarov.

Известный
Автор темы
190
35
Версия MoonLoader
.027.0-preview
Как получать/изменять данные (поворот,наклон,размеры) в реальном времени у этой хреновины?
1697663205603.png
 
  • Нравится
Реакции: Vintik и Tema05

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
Lua:
local sampev = require "lib.samp.events"

function sampev.onSendEditObject(playerObject, objectId, response, position, rotation)
    -- Вывод координат в чат при взаимодействии с объектом.
    sampAddChatMessage(string.format("[OBJECT] X: %s | Y: %s | Z: %s | RX: %s | RY: %s | RZ: %s",
        position.x, position.y, position.z, rotation.x, rotation.y, rotation.z), -1)
    
    -- Изменение координат объекта на свои.
    position.x, position.y, position.z = 0, 0, 0 -- При взаимодействии с объектом, его унесёт на нулевые координаты.
    return {playerObject, objectId, response, position, rotation}
end
Я не знаю, как сделать так, чтобы координаты изменились на свои только при сохранении объекта. Я думал, что можно через это событие:
Lua:
OUTCOMING_RPCS[RPC.SELECTOBJECT]              = {'onSendEnterEditObject', {type = 'int32'}, {objectId = 'uint16'}, {model = 'int32'}, {position = 'vector3d'}}
Но оно у меня даже в ничего не выводит.
 
  • Нравится
Реакции: .Makarov.

.Makarov.

Известный
Автор темы
190
35
Lua:
local sampev = require "lib.samp.events"

function sampev.onSendEditObject(playerObject, objectId, response, position, rotation)
    -- Вывод координат в чат при взаимодействии с объектом.
    sampAddChatMessage(string.format("[OBJECT] X: %s | Y: %s | Z: %s | RX: %s | RY: %s | RZ: %s",
        position.x, position.y, position.z, rotation.x, rotation.y, rotation.z), -1)
   
    -- Изменение координат объекта на свои.
    position.x, position.y, position.z = 0, 0, 0 -- При взаимодействии с объектом, его унесёт на нулевые координаты.
    return {playerObject, objectId, response, position, rotation}
end
Я не знаю, как сделать так, чтобы координаты изменились на свои только при сохранении объекта. Я думал, что можно через это событие:
Lua:
OUTCOMING_RPCS[RPC.SELECTOBJECT]              = {'onSendEnterEditObject', {type = 'int32'}, {objectId = 'uint16'}, {model = 'int32'}, {position = 'vector3d'}}
Но оно у меня даже в ничего не выводит.
Кхм... Первый эвент ничего не выводит, ни в начале, ни в конце, ни во время редактирования. Да и там нету размеров. Второй я вроде как ранее пробовал, но он вроде выводил только при сохранении, что тоже не совсем то что мне нужно.
Собственно что я хочу то и для чего мне это? Хочу сделать свой дополнительный редактор, а то то что есть сейчас - очень неудобен, особенно если надо менять аксы на куче скинов. Хотелось бы какие-то присеты сделать. И так же иметь возможность устанавливать точный поворот/положение/размер по конкретной оси. Но в ивентах я ничего для этого не нашел (хотя вроде проверил всё). Уже даже пытался искать адреса памяти, но для меня это темный лес, и я даже не знаю где искать =(
 

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
А, тебе для прикреплённых объектов надо. Может, поэтому и не сработало. У них другое событие:
Lua:
OUTCOMING_RPCS[RPC.EDITATTACHEDOBJECT] = {'onSendEditAttachedObject', {response = 'int32'}, {index = 'int32'}, {model = 'int32'}, {bone = 'int32'}, {position = 'vector3d'}, {rotation = 'vector3d'}, {scale = 'vector3d'}, {color1 = 'int32'}, {color2 = 'int32'}}
INCOMING_RPCS[RPC.EDITATTACHEDOBJECT] = {'onEditAttachedObject', {index = 'int32'}}
 

.Makarov.

Известный
Автор темы
190
35
А, тебе для прикреплённых объектов надо. Может, поэтому и не сработало. У них другое событие:
Lua:
OUTCOMING_RPCS[RPC.EDITATTACHEDOBJECT] = {'onSendEditAttachedObject', {response = 'int32'}, {index = 'int32'}, {model = 'int32'}, {bone = 'int32'}, {position = 'vector3d'}, {rotation = 'vector3d'}, {scale = 'vector3d'}, {color1 = 'int32'}, {color2 = 'int32'}}
INCOMING_RPCS[RPC.EDITATTACHEDOBJECT] = {'onEditAttachedObject', {index = 'int32'}}
А, ну вот, данное событие срабатывает только когда я сохраняю объект. А мне надо получать/изменять значения во время редактирования
 

Vintik

Мечтатель
Проверенный
1,469
917
Как я понял, события следующие.
1. Сервер отправляет тебе RPC, мол, ты начал редактировать объект (и у тебя появляется этот редактор):
Редактирование обычного объекта:
function ev.onEnterEditObject(playerObject, objectId)
    ...
end
Редактирование прикреплённого объекта:
function ev.onEditAttachedObject(index)
    ...
end
2. Если сервер в какой-то момент подумал, что нужно прекратить редактирование (например, ты убрал объект далеко):
Lua:
function ev.onCancelEdit()
    ...
end
3. А дальше ты уже редактируешь объекты и присылаешь серверу информацию (в процессе редактирования):
Редактирование обычного объекта:
function ev.onSendEditObject(playerObject, objectId, response, position, rotation)
    ...
end
Редактирование прикреплённого объекта:
function ev.onSendEditAttachedObject(response, index, model, bone, position, rotation, scale, color1, color2)
    ...
end
4. И когда закончил редактирование объекта и нажимаешь «Сохранить» — серверу отправляется:
Lua:
function ev.onSendEnterEditObject(type, objectId, model, position)
    ...
end