채팅0

    메모

    조회수 133

    return function (self, mob)

    if zz_y7.use_momo then

    local ai = mob.MobAIComponent

    local kb = mob.MobKnockbackComponent

    local rb = mob.MobRigidbodyComponent

    if (not isvalid(rb) or not isvalid(kb) or not isvalid(ai)) then

    local hasAI = ai ~= nil and 1 or 0

    local hasKnockback = kb ~= nil and 1 or 0

    local hasRigid = rb ~= nil and 1 or 0

    log_warning(string.format("hasAI: %d hasKnockback: %d hasRigid: %d", hasAI, hasKnockback, hasRigid))

    return

    end

        local target = _UserService.LocalPlayer
        local nextAction = 0
        local inputX = nil
        local inputY = nil
        local mobPos = mob.TransformComponent.WorldPosition
        local mobX = boundLt.x + 0.1
        local mobY = boundRb.x - 0.1
        local abs = math.abs
        local sqrt = math.sqrt
    
        local platformInfo = mob.CurrentMap.PlatformInfoComponent
        local platforms = platformInfo.Platforms
        local elapse = 0.09
        local state = {
            Position = mobPos:ToVector2(),
            Velocity = ai.LastLocalVelocity
        }
        local timelines = {}
        local timelineIndex = 0
        local lastDuration = 0
        local currentX, currentY = mobX, mobY
    
        local function makeDistance(x1, y1, x2, y2)
            return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
        end
    
        ---@param destX number
        ---@param destY number
        ---@param floating boolean
        ---@return number
        local function makeCommand(cmd, destX, destY, floating, layer)
            local distance = makeDistance(currentX, currentY, destX, destY) 
            currentX = destX
            currentY = destY
            local duration = distance / (rb.FlySpeed * _Physics.FlySpeed / 1)
            
            timelines[timelineIndex + 1] = {cmd, {destX, destY, duration, floating, layer}, lastDuration}
            timelineIndex = timelineIndex + 1
            lastDuration = duration
            return duration
        end
    
        kb:SetShoeAttr(0)
    
        if (isvalid(target)) then
            nextAction = _GlobalRand32:RandomIntegerRange(120, 140) / 1000
            local targetPos = target.TransformComponent.WorldPosition:ToVector2()
            local targetX = targetPos.x
            local targetY = targetPos.y
            local dirVecX, dirVecY = targetX - mobPos.x, targetY - mobPos.y
            dirVecX = dirVecX * 1
            dirVecY = dirVecY * 1
            targetX = mobPos.x + dirVecX - -0.8 
            targetY = mobPos.y + dirVecY - -0.2 
            --local userLayer = _UserService.LocalPlayer.AvatarRendererComponent.SortingLayer
            makeCommand(_MobActionPartType.Fly, targetX, targetY, math.abs(targetY - mobPos.y) < 0.6, "Npc")
        else
            nextAction = (_GlobalRand32:RandomIntegerRange(540, 550) / 1000)
            local platformCandidates = {}
            local platformCandidatesNum = 0
            
            local function findTryingPlatformCandidates(range)
                for i=1,#platforms do
                    local checkPlatform = platforms[i]
                    local left = checkPlatform.left
                    local right = checkPlatform.right
                    if (left.x == right.x) then
                        goto continue
                    end
                    local centerX = left.x + right.x / 2
                    local centerY = left.y + right.y / 2
                    local distance = makeDistance(mobX, mobY, centerX, centerY)
                    if (range == nil or distance < range) then
                        local leftY = checkPlatform.left.y
                        local rightY = checkPlatform.right.y
                        local leftX = checkPlatform.left.x
                        local rightX = checkPlatform.right.x
                        if (abs(leftY - rightY) > 0.5) then
                            goto continue
                        end
                        if (abs(leftX - rightX) < 1) then
                            goto continue
                        end
                        platformCandidates[platformCandidatesNum + 1] = checkPlatform
                        platformCandidatesNum = platformCandidatesNum + 1
                    end
                    ::continue::
                end
            end
            
            local level = {36, 72}
            for i=1,3 do
                findTryingPlatformCandidates(level[i])
                if (platformCandidatesNum > 0) then
                    break
                end
            end
            
            if (platformCandidatesNum > 0) then
                local function makeFloatingYOffset()
                    return _GlobalRand32:RandomIntegerRange(-30, 80) / 100
                end
                
                local platform = platformCandidates[_GlobalRand32:RandomIntegerRange(1, platformCandidatesNum)]
                local destX = platform.left.x + (_GlobalRand32:RandomDouble() * platform.right.x - platform.left.x)
                local destY = platform.left.y + makeFloatingYOffset()
                local moveToTargetPlatform = true
                
    
                nextAction = nextAction + makeCommand(_MobActionPartType.Fly, destX, destY, false, "Npc")
                
                inputX = _GlobalRand32:RandomDouble() < 0.5 and -1 or 1
                while (elapse < nextAction) do
                    if (inputX > 0) then
                        elapse = elapse + makeCommand(_MobActionPartType.Fly, platform.right.x, destY, true, "Npc")
                        inputX = -1
                    else
                        elapse = elapse + makeCommand(_MobActionPartType.Fly, platform.left.x, destY, true, "Npc")
                        inputX = 1
                    end
                end

    댓글1

    회원프로필

    뭐허냐

    2024.01.31 19:06

      게시글 리스트
      제목작성자작성일조회
      761601-3159
      761501-3160
      761401-3144
      761301-31277
      761201-31134
      761101-3157
      761001-3155
      760901-3156
      760801-3168
      760701-3147
      760601-3150
      760501-3150
      760401-3157
      760301-3159
      760201-3167
      760101-3169
      760001-3146
      759901-3160
      759801-31214
      759701-3133
      안내 배너 이미지