Untitled

 avatar
unknown
plain_text
a month ago
3.5 kB
2
Indexable
-- Skrypt combo do Xenobot: Używanie czarów w sekwencji z uwzględnieniem odległości od potwora

-- Konfiguracja
local manaPotionID = 268 -- ID mana potiona

local spells = {
    {name = "utito tempo", mana = 50, cooldown = 20000, range = 7}, -- Buff czar, rzucany rzadziej, range 7
    {name = "exori gran", mana = 90, cooldown = 1000, range = 5}, -- Range 5 dla exori gran
    {name = "exori", mana = 80, cooldown = 1000, range = 1}, -- Range 1 dla exori
    {name = "exori amp kor", mana = 120, cooldown = 1000, range = 4}, -- Range 4 dla exori amp kor
    {name = "exori min", mana = 50, cooldown = 1000, range = 1}  -- Range 1 dla exori min
}

-- Zmienna przechowująca czas ostatniego rzucenia dla każdego czaru
local lastCasts = {}
for _, spell in ipairs(spells) do
    lastCasts[spell.name] = 0
end

-- Funkcja do obliczenia odległości
local function CalculateDistance(pos1, pos2)
    return math.sqrt((pos1.x - pos2.x)^2 + (pos1.y - pos2.y)^2 + (pos1.z - pos2.z)^2)
end

-- Funkcja główna
Module.New("Cast Spell Combo", function(module)
    -- Uzyskaj pozycję gracza
    local playerPos = Self.Position()

    -- Uzyskaj listę potworów w pobliżu w zadanym zasięgu (przykład zasięgu 10)
    local monsters = Creature.GetMonsters(10)

    -- Sprawdź, czy otrzymaliśmy listę potworów
    if not monsters or #monsters == 0 then
        return -- Brak potworów w zasięgu, zakończ wykonanie tej iteracji
    end

    -- Weź najbliższego potwora (pierwszy w liście)
    local target = monsters[1]
    local targetPos = target.Position

    -- Oblicz odległość do celu
    local targetDistance = CalculateDistance(playerPos, targetPos)

    -- Logowanie informacji o odległości
    print("Odległość do celu: " .. targetDistance)

    -- Iteruj przez listę czarów
    for _, spell in ipairs(spells) do
        local currentTime = os.clock() * 1000
        -- Sprawdź, czy mamy wystarczającą manę i spełniony cooldown
        if Self.Mana() >= spell.mana and (currentTime - lastCasts[spell.name]) >= spell.cooldown then
            -- Sprawdź, czy cel znajduje się w odpowiedniej odległości
            if targetDistance <= spell.range then
                -- Obróć się w stronę celu
                Self.TurnToTarget(target.ID)
                print("Rzucam czar: " .. spell.name) -- Logowanie, który czar będzie rzucony

                -- Rzuć czar
                Self.Say(spell.name)
                lastCasts[spell.name] = currentTime

                -- Użyj mana potiona po rzuceniu "exori gran"
                if spell.name == "exori gran" then
                    print("Używam mana potiona") -- Logowanie użycia mana potiona
                    Self.UseItemWithMe(manaPotionID)
                end

                break -- Rzuć tylko jeden czar na iterację
            else
                print("Cel jest za daleko dla czaru: " .. spell.name) -- Logowanie, jeśli cel jest za daleko
            end
        else
            -- Logowanie, jeśli czar nie jest możliwy do rzucenia
            if Self.Mana() < spell.mana then
                print("Za mało many do rzucenia czaru: " .. spell.name)
            end
            if (currentTime - lastCasts[spell.name]) < spell.cooldown then
                print("Czary muszą poczekać na cooldown: " .. spell.name)
            end
        end
    end
end)
Leave a Comment