LINUX.ORG.RU

История изменений

Исправление LightDiver, (текущая версия) :

Она знает луа не просто для вовки, но даже для конкретной версии вовки. Не надо учить. Просто уточняешь версию и оно даст код нужный.

Вся задача - именно указать код чего тебе надо. То есть чуть чуть понимать задачу и структуру кода надо.

Оно знает различия между версиями языков, версиями игр. Между разными языками.

Например: "Создай класс для отрисовки 100 кнопок wow 3.3.5. Кнопки должны быть размером 64х64 пикселя, располагаться квадратом 10х10 в центре экрана. Привязаны должны быть к первой кнопке и перемещатья по экрану за нее. Их нельзя переместить за пределы экрана. Добавь чтобы при клике на кнопку выводился номер кнопки

Сделай так, чтобы при наведении на любую кнопку все кнопки уходили на предпоследний слой и перекрывали остальные элементы интерфейса. Если мышь убрать с кнопок, они должны уходить на самый низкий слой. "

Секунд 5-6 он писал код:

local ButtonGrid = {}
ButtonGrid.__index = ButtonGrid

-- Конструктор класса
function ButtonGrid:Create()
    local self = setmetatable({}, ButtonGrid)
    self.buttons = {} -- Таблица для хранения кнопок
    self.buttonSize = 64 -- Размер кнопки (64x64 пикселя)
    self.gridSize = 10 -- Размер сетки (10x10)
    self.spacing = 5 -- Расстояние между кнопками
    self:CreateButtons()
    return self
end

-- Создание кнопок
function ButtonGrid:CreateButtons()
    local totalSize = (self.buttonSize + self.spacing) * self.gridSize - self.spacing
    local startX = (GetScreenWidth() - totalSize) / 2
    local startY = (GetScreenHeight() - totalSize) / 2

    for i = 1, self.gridSize do
        for j = 1, self.gridSize do
            local buttonIndex = (i - 1) * self.gridSize + j -- Номер кнопки
            local button = CreateFrame("Button", nil, UIParent, "UIPanelButtonTemplate")
            button:SetSize(self.buttonSize, self.buttonSize)
            button:SetPoint("TOPLEFT", startX + (j - 1) * (self.buttonSize + self.spacing), -(startY + (i - 1) * (self.buttonSize + self.spacing)))
            button:SetText("") -- Убираем текст
            button:SetMovable(true)
            button:RegisterForDrag("LeftButton")

            -- Обработчик клика на кнопку
            button:SetScript("OnClick", function()
                print("Кнопка номер: " .. buttonIndex) -- Выводим номер кнопки в чат
            end)

            -- Обработчик наведения на кнопку
            button:SetScript("OnEnter", function()
                self:SetButtonsStrata("HIGH") -- Переводим все кнопки на предпоследний слой
            end)

            -- Обработчик ухода мыши с кнопки
            button:SetScript("OnLeave", function()
                self:SetButtonsStrata("BACKGROUND") -- Возвращаем все кнопки на самый низкий слой
            end)

            -- Привязка первой кнопки к перемещению
            if i == 1 and j == 1 then
                button:SetScript("OnDragStart", function() button:StartMoving() end)
                button:SetScript("OnDragStop", function()
                    button:StopMovingOrSizing()
                    self:UpdateButtonPositions(button)
                end)
            else
                -- Остальные кнопки привязываем к первой
                button:SetScript("OnDragStart", nil)
                button:SetScript("OnDragStop", nil)
            end

            table.insert(self.buttons, button)
        end
    end
end

-- Установка слоя для всех кнопок
function ButtonGrid:SetButtonsStrata(strata)
    for _, button in ipairs(self.buttons) do
        button:SetFrameStrata(strata)
    end
end

-- Обновление позиций кнопок относительно первой
function ButtonGrid:UpdateButtonPositions(mainButton)
    local mainX, mainY = mainButton:GetLeft(), mainButton:GetTop()
    local screenWidth, screenHeight = GetScreenWidth(), GetScreenHeight()

    -- Ограничение перемещения за пределы экрана
    local totalGridWidth = self.buttonSize * self.gridSize + self.spacing * (self.gridSize - 1)
    local totalGridHeight = totalGridWidth

    -- Ограничение по левому и правому краю
    mainX = math.max(0, math.min(mainX, screenWidth - totalGridWidth))
    -- Ограничение по верхнему и нижнему краю
    mainY = math.max(totalGridHeight, math.min(mainY, screenHeight))

    mainButton:ClearAllPoints()
    mainButton:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", mainX, mainY)

    for i = 1, #self.buttons do
        if self.buttons[i] ~= mainButton then
            local row = math.floor((i - 1) / self.gridSize) + 1
            local col = (i - 1) % self.gridSize + 1
            local offsetX = (col - 1) * (self.buttonSize + self.spacing)
            local offsetY = (row - 1) * (self.buttonSize + self.spacing)
            self.buttons[i]:ClearAllPoints()
            self.buttons[i]:SetPoint("TOPLEFT", mainButton, "TOPLEFT", offsetX, -offsetY)
        end
    end
end

-- Создаем экземпляр класса
local buttonGrid = ButtonGrid:Create()

Результат: https://rutube.ru/video/private/3b499f2ac90b71a81ad9d135050bc3ce/?p=w0Ls05sfm467-n4Iy4LHVQ

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

При этом он же все правильно сделал, собака. Учел размеры,расстояния. Главное - задай ему задачу. Я вот на эту срань помню потратил много суток. Чтобы подогнать под конкретный сервер, чтоб все нормально работало, чтобы все учесть. Чтобы разобраться как вообще это рисовать. Два года у меня ушло на понимание что такое вообще классы. А тут 5 секунд - держи.

Я перед этим неделю общался с ним на тему отличий человека и нейросети. Я его убеждал, что человек по сути та же нейросеть, но сложнее, он меня, что нейросеть говно, а человек вершина эволюции. Очень аргументированно убеждал, с отсылками на философов, науку, цитаты кидал и прочее. С человеками так конструктивно очень редко удается побеседовать В конце сошлись на том, что пока что нет технологий для создания нейросети уровня человека. Технологий и уровня понимания что такое человек.

Исправление LightDiver, :

Она знает луа не просто для вовки, но даже для конкретной версии вовки. Не надо учить. Просто уточняешь версию и оно даст код нужный.

Вся задача - именно указать код чего тебе надо. То есть чуть чуть понимать задачу и структуру кода надо.

Оно знает различия между версиями языков, версиями игр. Между разными языками.

Например: "Создай класс для отрисовки 100 кнопок wow 3.3.5. Кнопки должны быть размером 64х64 пикселя, располагаться квадратом 10х10 в центре экрана. Привязаны должны быть к первой кнопке и перемещатья по экрану за нее. Их нельзя переместить за пределы экрана. Добавь чтобы при клике на кнопку выводился номер кнопки

Сделай так, чтобы при наведении на любую кнопку все кнопки уходили на предпоследний слой и перекрывали остальные элементы интерфейса. Если мышь убрать с кнопок, они должны уходить на самый низкий слой. "

Секунд 5-6 он писал код:

local ButtonGrid = {}
ButtonGrid.__index = ButtonGrid

-- Конструктор класса
function ButtonGrid:Create()
    local self = setmetatable({}, ButtonGrid)
    self.buttons = {} -- Таблица для хранения кнопок
    self.buttonSize = 64 -- Размер кнопки (64x64 пикселя)
    self.gridSize = 10 -- Размер сетки (10x10)
    self.spacing = 5 -- Расстояние между кнопками
    self:CreateButtons()
    return self
end

-- Создание кнопок
function ButtonGrid:CreateButtons()
    local totalSize = (self.buttonSize + self.spacing) * self.gridSize - self.spacing
    local startX = (GetScreenWidth() - totalSize) / 2
    local startY = (GetScreenHeight() - totalSize) / 2

    for i = 1, self.gridSize do
        for j = 1, self.gridSize do
            local buttonIndex = (i - 1) * self.gridSize + j -- Номер кнопки
            local button = CreateFrame("Button", nil, UIParent, "UIPanelButtonTemplate")
            button:SetSize(self.buttonSize, self.buttonSize)
            button:SetPoint("TOPLEFT", startX + (j - 1) * (self.buttonSize + self.spacing), -(startY + (i - 1) * (self.buttonSize + self.spacing)))
            button:SetText("") -- Убираем текст
            button:SetMovable(true)
            button:RegisterForDrag("LeftButton")

            -- Обработчик клика на кнопку
            button:SetScript("OnClick", function()
                print("Кнопка номер: " .. buttonIndex) -- Выводим номер кнопки в чат
            end)

            -- Обработчик наведения на кнопку
            button:SetScript("OnEnter", function()
                self:SetButtonsStrata("HIGH") -- Переводим все кнопки на предпоследний слой
            end)

            -- Обработчик ухода мыши с кнопки
            button:SetScript("OnLeave", function()
                self:SetButtonsStrata("BACKGROUND") -- Возвращаем все кнопки на самый низкий слой
            end)

            -- Привязка первой кнопки к перемещению
            if i == 1 and j == 1 then
                button:SetScript("OnDragStart", function() button:StartMoving() end)
                button:SetScript("OnDragStop", function()
                    button:StopMovingOrSizing()
                    self:UpdateButtonPositions(button)
                end)
            else
                -- Остальные кнопки привязываем к первой
                button:SetScript("OnDragStart", nil)
                button:SetScript("OnDragStop", nil)
            end

            table.insert(self.buttons, button)
        end
    end
end

-- Установка слоя для всех кнопок
function ButtonGrid:SetButtonsStrata(strata)
    for _, button in ipairs(self.buttons) do
        button:SetFrameStrata(strata)
    end
end

-- Обновление позиций кнопок относительно первой
function ButtonGrid:UpdateButtonPositions(mainButton)
    local mainX, mainY = mainButton:GetLeft(), mainButton:GetTop()
    local screenWidth, screenHeight = GetScreenWidth(), GetScreenHeight()

    -- Ограничение перемещения за пределы экрана
    local totalGridWidth = self.buttonSize * self.gridSize + self.spacing * (self.gridSize - 1)
    local totalGridHeight = totalGridWidth

    -- Ограничение по левому и правому краю
    mainX = math.max(0, math.min(mainX, screenWidth - totalGridWidth))
    -- Ограничение по верхнему и нижнему краю
    mainY = math.max(totalGridHeight, math.min(mainY, screenHeight))

    mainButton:ClearAllPoints()
    mainButton:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", mainX, mainY)

    for i = 1, #self.buttons do
        if self.buttons[i] ~= mainButton then
            local row = math.floor((i - 1) / self.gridSize) + 1
            local col = (i - 1) % self.gridSize + 1
            local offsetX = (col - 1) * (self.buttonSize + self.spacing)
            local offsetY = (row - 1) * (self.buttonSize + self.spacing)
            self.buttons[i]:ClearAllPoints()
            self.buttons[i]:SetPoint("TOPLEFT", mainButton, "TOPLEFT", offsetX, -offsetY)
        end
    end
end

-- Создаем экземпляр класса
local buttonGrid = ButtonGrid:Create()

Результат: https://rutube.ru/video/private/3b499f2ac90b71a81ad9d135050bc3ce/?p=w0Ls05sfm467-n4Iy4LHVQ

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

При этом он же все правильно сделал, собака. Учел размеры,расстояния. Главное - задай ему задачу. Я вот на эту срань помню потратил много суток. Чтобы подогнать под конкретный сервер, чтоб все нормально работало, чтобы все учесть. Чтобы разобраться как вообще это рисовать. Два года у меня ушло на понимание что такое вообще классы. А тут 5 секунд - держи.

Я перед этим неделю общался с ним на тему отличий человека и нейросети. Я его убеждал, что человек по сути та же нейросеть, но сложнее, он меня, что нейросеть говно, а человек вершина эволюции. Очень аргументированно убеждал, с отсылками на философов, науку, цитаты кидал и прочее. С человеками так конструктивно очень редко удается побеседовать В конце сошлись на том, что пока что нет технологий для создания нейросети уровня человека.

Исправление LightDiver, :

Она знает луа не просто для вовки, но даже для конкретной версии вовки. Не надо учить. Просто уточняешь версию и оно даст код нужный.

Вся задача - именно указать код чего тебе надо. То есть чуть чуть понимать задачу и структуру кода надо.

Оно знает различия между версиями языков, версиями игр. Между разными языками.

Например: "Создай класс для отрисовки 100 кнопок wow 3.3.5. Кнопки должны быть размером 64х64 пикселя, располагаться квадратом 10х10 в центре экрана. Привязаны должны быть к первой кнопке и перемещатья по экрану за нее. Их нельзя переместить за пределы экрана. Добавь чтобы при клике на кнопку выводился номер кнопки

Сделай так, чтобы при наведении на любую кнопку все кнопки уходили на предпоследний слой и перекрывали остальные элементы интерфейса. Если мышь убрать с кнопок, они должны уходить на самый низкий слой. "

Секунд 5-6 он писал код:

local ButtonGrid = {}
ButtonGrid.__index = ButtonGrid

-- Конструктор класса
function ButtonGrid:Create()
    local self = setmetatable({}, ButtonGrid)
    self.buttons = {} -- Таблица для хранения кнопок
    self.buttonSize = 64 -- Размер кнопки (64x64 пикселя)
    self.gridSize = 10 -- Размер сетки (10x10)
    self.spacing = 5 -- Расстояние между кнопками
    self:CreateButtons()
    return self
end

-- Создание кнопок
function ButtonGrid:CreateButtons()
    local totalSize = (self.buttonSize + self.spacing) * self.gridSize - self.spacing
    local startX = (GetScreenWidth() - totalSize) / 2
    local startY = (GetScreenHeight() - totalSize) / 2

    for i = 1, self.gridSize do
        for j = 1, self.gridSize do
            local buttonIndex = (i - 1) * self.gridSize + j -- Номер кнопки
            local button = CreateFrame("Button", nil, UIParent, "UIPanelButtonTemplate")
            button:SetSize(self.buttonSize, self.buttonSize)
            button:SetPoint("TOPLEFT", startX + (j - 1) * (self.buttonSize + self.spacing), -(startY + (i - 1) * (self.buttonSize + self.spacing)))
            button:SetText("") -- Убираем текст
            button:SetMovable(true)
            button:RegisterForDrag("LeftButton")

            -- Обработчик клика на кнопку
            button:SetScript("OnClick", function()
                print("Кнопка номер: " .. buttonIndex) -- Выводим номер кнопки в чат
            end)

            -- Обработчик наведения на кнопку
            button:SetScript("OnEnter", function()
                self:SetButtonsStrata("HIGH") -- Переводим все кнопки на предпоследний слой
            end)

            -- Обработчик ухода мыши с кнопки
            button:SetScript("OnLeave", function()
                self:SetButtonsStrata("BACKGROUND") -- Возвращаем все кнопки на самый низкий слой
            end)

            -- Привязка первой кнопки к перемещению
            if i == 1 and j == 1 then
                button:SetScript("OnDragStart", function() button:StartMoving() end)
                button:SetScript("OnDragStop", function()
                    button:StopMovingOrSizing()
                    self:UpdateButtonPositions(button)
                end)
            else
                -- Остальные кнопки привязываем к первой
                button:SetScript("OnDragStart", nil)
                button:SetScript("OnDragStop", nil)
            end

            table.insert(self.buttons, button)
        end
    end
end

-- Установка слоя для всех кнопок
function ButtonGrid:SetButtonsStrata(strata)
    for _, button in ipairs(self.buttons) do
        button:SetFrameStrata(strata)
    end
end

-- Обновление позиций кнопок относительно первой
function ButtonGrid:UpdateButtonPositions(mainButton)
    local mainX, mainY = mainButton:GetLeft(), mainButton:GetTop()
    local screenWidth, screenHeight = GetScreenWidth(), GetScreenHeight()

    -- Ограничение перемещения за пределы экрана
    local totalGridWidth = self.buttonSize * self.gridSize + self.spacing * (self.gridSize - 1)
    local totalGridHeight = totalGridWidth

    -- Ограничение по левому и правому краю
    mainX = math.max(0, math.min(mainX, screenWidth - totalGridWidth))
    -- Ограничение по верхнему и нижнему краю
    mainY = math.max(totalGridHeight, math.min(mainY, screenHeight))

    mainButton:ClearAllPoints()
    mainButton:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", mainX, mainY)

    for i = 1, #self.buttons do
        if self.buttons[i] ~= mainButton then
            local row = math.floor((i - 1) / self.gridSize) + 1
            local col = (i - 1) % self.gridSize + 1
            local offsetX = (col - 1) * (self.buttonSize + self.spacing)
            local offsetY = (row - 1) * (self.buttonSize + self.spacing)
            self.buttons[i]:ClearAllPoints()
            self.buttons[i]:SetPoint("TOPLEFT", mainButton, "TOPLEFT", offsetX, -offsetY)
        end
    end
end

-- Создаем экземпляр класса
local buttonGrid = ButtonGrid:Create()

Результат: https://rutube.ru/video/private/3b499f2ac90b71a81ad9d135050bc3ce/?p=w0Ls05sfm467-n4Iy4LHVQ

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

При этом он же все правильно сделал, собака. Учел размеры,расстояния. Главное - задай ему задачу. Я вот на эту срань помню потратил много суток. Чтобы подогнать под конкретный сервер, чтоб все нормально работало, чтобы все учесть. Чтобы разобраться как вообще это рисовать. Два года у меня ушло на понимание что такое вообще классы. А тут 5 секунд - держи.

Исходная версия LightDiver, :

Она знает луа не просто для вовки, но даже для конкретной версии вовки. Не надо учить. Просто уточняешь версию и оно даст код нужный.

Вся задача - именно указать код чего тебе надо. То есть чуть чуть понимать задачу и структуру кода надо.

Оно знает различия между версиями языков, версиями игр. Между разными языками.

Например: "Создай класс для отрисовки 100 кнопок wow 3.3.5. Кнопки должны быть размером 64х64 пикселя, располагаться квадратом 10х10 в центре экрана. Привязаны должны быть к первой кнопке и перемещатья по экрану за нее. Их нельзя переместить за пределы экрана. Добавь чтобы при клике на кнопку выводился номер кнопки

Сделай так, чтобы при наведении на любую кнопку все кнопки уходили на предпоследний слой и перекрывали остальные элементы интерфейса. Если мышь убрать с кнопок, они должны уходить на самый низкий слой. "

Секунд 5-6 он писал код:

local ButtonGrid = {}
ButtonGrid.__index = ButtonGrid

-- Конструктор класса
function ButtonGrid:Create()
    local self = setmetatable({}, ButtonGrid)
    self.buttons = {} -- Таблица для хранения кнопок
    self.buttonSize = 64 -- Размер кнопки (64x64 пикселя)
    self.gridSize = 10 -- Размер сетки (10x10)
    self.spacing = 5 -- Расстояние между кнопками
    self:CreateButtons()
    return self
end

-- Создание кнопок
function ButtonGrid:CreateButtons()
    local totalSize = (self.buttonSize + self.spacing) * self.gridSize - self.spacing
    local startX = (GetScreenWidth() - totalSize) / 2
    local startY = (GetScreenHeight() - totalSize) / 2

    for i = 1, self.gridSize do
        for j = 1, self.gridSize do
            local buttonIndex = (i - 1) * self.gridSize + j -- Номер кнопки
            local button = CreateFrame("Button", nil, UIParent, "UIPanelButtonTemplate")
            button:SetSize(self.buttonSize, self.buttonSize)
            button:SetPoint("TOPLEFT", startX + (j - 1) * (self.buttonSize + self.spacing), -(startY + (i - 1) * (self.buttonSize + self.spacing)))
            button:SetText("") -- Убираем текст
            button:SetMovable(true)
            button:RegisterForDrag("LeftButton")

            -- Обработчик клика на кнопку
            button:SetScript("OnClick", function()
                print("Кнопка номер: " .. buttonIndex) -- Выводим номер кнопки в чат
            end)

            -- Обработчик наведения на кнопку
            button:SetScript("OnEnter", function()
                self:SetButtonsStrata("HIGH") -- Переводим все кнопки на предпоследний слой
            end)

            -- Обработчик ухода мыши с кнопки
            button:SetScript("OnLeave", function()
                self:SetButtonsStrata("BACKGROUND") -- Возвращаем все кнопки на самый низкий слой
            end)

            -- Привязка первой кнопки к перемещению
            if i == 1 and j == 1 then
                button:SetScript("OnDragStart", function() button:StartMoving() end)
                button:SetScript("OnDragStop", function()
                    button:StopMovingOrSizing()
                    self:UpdateButtonPositions(button)
                end)
            else
                -- Остальные кнопки привязываем к первой
                button:SetScript("OnDragStart", nil)
                button:SetScript("OnDragStop", nil)
            end

            table.insert(self.buttons, button)
        end
    end
end

-- Установка слоя для всех кнопок
function ButtonGrid:SetButtonsStrata(strata)
    for _, button in ipairs(self.buttons) do
        button:SetFrameStrata(strata)
    end
end

-- Обновление позиций кнопок относительно первой
function ButtonGrid:UpdateButtonPositions(mainButton)
    local mainX, mainY = mainButton:GetLeft(), mainButton:GetTop()
    local screenWidth, screenHeight = GetScreenWidth(), GetScreenHeight()

    -- Ограничение перемещения за пределы экрана
    local totalGridWidth = self.buttonSize * self.gridSize + self.spacing * (self.gridSize - 1)
    local totalGridHeight = totalGridWidth

    -- Ограничение по левому и правому краю
    mainX = math.max(0, math.min(mainX, screenWidth - totalGridWidth))
    -- Ограничение по верхнему и нижнему краю
    mainY = math.max(totalGridHeight, math.min(mainY, screenHeight))

    mainButton:ClearAllPoints()
    mainButton:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", mainX, mainY)

    for i = 1, #self.buttons do
        if self.buttons[i] ~= mainButton then
            local row = math.floor((i - 1) / self.gridSize) + 1
            local col = (i - 1) % self.gridSize + 1
            local offsetX = (col - 1) * (self.buttonSize + self.spacing)
            local offsetY = (row - 1) * (self.buttonSize + self.spacing)
            self.buttons[i]:ClearAllPoints()
            self.buttons[i]:SetPoint("TOPLEFT", mainButton, "TOPLEFT", offsetX, -offsetY)
        end
    end
end

-- Создаем экземпляр класса
local buttonGrid = ButtonGrid:Create()

Результат: https://rutube.ru/video/private/3b499f2ac90b71a81ad9d135050bc3ce/?p=w0Ls05sfm467-n4Iy4LHVQ

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