Search
Write a publication
Pull to refresh
1
0
Send message

Мне, технарю, вообще переживать по этому поводу смысла нет. Работы всегда навалом было. Но лучше вообще не работать, а жить в свое удовольствие, развиваться творчески, духовно и физически. Только вот много людей может себе это позволить?

Сумеешь не превратиться барыгу, не побежишь продавать и не выкинешь на помойку, а отправишь девайс (который героически отслужил тебе верой и правдой) на заслуженный отдых в свой домашний музей?

Продолжение скрипта..

               )
            )
            catch() -- игнорируем свойства, которые нельзя прочитать
        )

        -- customAttributes
        if isProperty obj #customAttributes then
        (
            try
            (
                for ca in obj.customAttributes do
                (
                    local caStr = ca as string
                    for pattern in patterns do if matchPattern caStr pattern pattern:"regex" then append findings #(obj.name, "customAttribute", pattern)
                )
            )
            catch()
        )

        -- контроллеры анимации (ScriptController и ExpressionController)
        -- Проверяем наиболее типичные controller-ы
        local ctlProps = #(#position_controller, #rotation_controller, #scale_controller, #transform_controller)
        for ctlProp in ctlProps do
        (
            if isProperty obj ctlProp then
            (
                try
                (
                    local ctl = getProperty obj ctlProp
                    if ctl != undefined then
                    (
                        -- ScriptController имеет .script, ExpressionController может иметь .expression или.toString
                        if classOf ctl == ScriptController then
                        (
                            local scriptText = ctl.script
                            for pattern in patterns do if matchPattern scriptText pattern pattern:"regex" then append findings #(obj.name, ctlProp as string, pattern)
                        )
                        else
                        (
                            -- Попробуем конвертировать контроллер в строку и искать в ней
                            local ctlStr = ctl as string
                            for pattern in patterns do if matchPattern ctlStr pattern pattern:"regex" then append findings #(obj.name, ctlProp as string, pattern)
                        )
                    )
                )
                catch()
            )
        )

        -- материалы и вложенные карты (приближённо: toString матрицы и карт)
        if isProperty obj #material and obj.material != undefined then
        (
            try
            (
                local matStr = obj.material as string
                for pattern in patterns do if matchPattern matStr pattern pattern:"regex" then append findings #(obj.name, "material", pattern)
            )
            catch()
        )

        -- XRef объекты: merge внешнюю сцену и просканировать добавленные объекты
        if isProperty obj #isXRefObject and obj.isXRefObject then
        (
            local xrefFile = obj.xrefFile
            if xrefFile != undefined then
            (
                -- ВНИМАНИЕ: mergeMAXFile импортирует содержимое XRef в текущую сцену.
                -- Это сохраняет удобство тестирования, но изменяет сцену. Будь осторожен.
                -- Используем quiet:true, чтобы не мешать интерфейсу.
                try
                (
                    local beforeObjs = for o in objects collect o
                    local tmpScene = mergeMAXFile xrefFile quiet:true
                    -- Найдём новые объекты, добавленные merge'ом
                    local afterObjs = for o in objects collect o
                    local newObjs = for o in afterObjs where findItem beforeObjs o == 0 collect o
                    for n in newObjs do append findings (scanObjectRecursively n)
                    -- (Можно дополнительно удалить merged-объекты при желании)
                )
                catch()
            )
        )
    )
    catch()
    return findings
)

-- ===== Main function: оболочка Exorcist (не менять интерфейс вызова) =====
fn scanMaxScripts folderPath =
(
    if folderPath == undefined or folderPath == "" then
    (
        format "Usage: scanMaxScripts \"C:\\path\\to\\folder\"\n"
        return undefined
    )

    format "===== MaxScript Exorcist 3.1 =====\n"
    format "Scanning folder: %\n" folderPath

    -- Сканируем файлы
    local fileFindings = scanFilesInFolder folderPath
    if fileFindings.count == 0 then format "No suspicious tokens found in scanned scripts.\n"
    else
    (
        format "FOUND % suspicious matches in files:\n" fileFindings.count
        for s in fileFindings do format "⚡ - %    token: % ⚡\n" s[1] s[2]
    )

    -- Сканируем сцену
    local allObjs = objects as array
    format "Scanning scene objects for scripts...\n"
    local sceneFindings = #()
    for obj in allObjs do append sceneFindings (scanObjectRecursively obj)

    if sceneFindings.count == 0 then format "No custom attributes or scripts found in scene objects.\n"
    else
    (
        format "FOUND % suspicious matches in scene objects:\n" sceneFindings.count
        for s in sceneFindings do format "⚡ - Object: %    Property: %    Token: % ⚡\n" s[1] s[2] s[3]
    )

    return #(fileFindings, sceneFindings)
)

-- ===== Вызов проверки (измени путь по необходимости) =====
scanMaxScripts "C:\\MaxTest\\scan_samples"

Иногда запускаю на айпаде карту Царство хаоса на максимальной сложности (на других не играю). Сбалансированная карта для восьми разных рас. Игра в игре. Как-то хватает))

А у меня вообще нет компьютера (полтора года назад продал последний игровой ноут и перекрестился). Всем спокойной ночи )))

Не дай Бог, чтобы сбылись мечты хотя бы половины обитателей планеты, ибо тогда земле наступит конец.

Четырехлетняя племянница научила меня, что лучше иметь СВОЕ мнение, пускай и ошибочное, чем никакого ))

Первые два абзаца вызвали улыбку. Вспомнился Федор Достоевский и его зрелый этап творчества: тонкий сарказм, переплетенный с горьким реализмом и глубокой философией, разбавленной тоннами водосодержащей субстанции, которую так любили его читатели.

Какой смысл «прорываться» на «заветную» вакансию путем тонких манипуляций и сраколизания в духе стратагем Сунь Цзы? Пусть работодатель САМ делает свою работу по поиску работника безупречно - ИЩЕТ и нанимает лучшего из лучших. Работа - это не сладкое кайфовое времяпрепровождение, где человек наслаждается жизнью 24 часа в сутки, семь дней в неделю.

Information

Rating
Does not participate
Registered
Activity