• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Błąd z potami

Krzkru

New Member
Joined
Jan 10, 2013
Messages
89
Reaction score
1
Location
Poland
Witam,

Mam taki oto skrypt na poty:

Code:
local config = {
    removeOnUse = "no",
    usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
    splashable = "no",
    range = -1,
    realAnimation = "no" -- make text effect visible only for players in range 1x1
}

local min, max = 0, 0
local POTIONS = {
    [8704] = {empty = 7636, splash = 42, health = {1.0, 1.25}, min = 50, max = 100}, -- small health potion
    [7618] = {empty = 7636, splash = 42, health = {1.25, 1.75}, min = 50, max = 150}, -- health potion
    [7588] = {empty = 7634, splash = 42, health = {1.75, 2.25}, min = 0, max = 350, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
    [7591] = {empty = 7635, splash = 42, health = {2.25, 2.5}, min = 0, max = 500, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
    [8473] = {empty = 7635, splash = 42, health = {2.5, 3.0}, min = 0, max = 800, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
 
    [7620] = {empty = 7636, splash = 47, mana = {1.0, 1.5}, min = 50, max = 150}, -- mana potion
    [7589] = {empty = 7634, splash = 47, mana = {1.5, 2.0}, min = 0, max = 250, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
    [7590] = {empty = 7635, splash = 47, mana = {2.0, 2.5}, min = 0, max = 350, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion
 
    [8472] = {empty = 7635, splash = 43, health = {1.25, 2.25}, mana = {1.25, 2.25}, min = 0, max = 320, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion
}
 
for index, potion in pairs(POTIONS) do
    if(type(index) == "number")then
        for k, v in pairs(config) do
            if(not potion[k]) then
                potion[k] = v
            end
        end
 
        if(potion.removeOnUse) then
            potion.removeOnUse = getBooleanFromString(potion.removeOnUse)
        end
 
        if(potion.usableOnTarget) then
            potion.usableOnTarget = getBooleanFromString(potion.usableOnTarget)
        end
 
        if(potion.splashable) then
            potion.splashable = getBooleanFromString(potion.splashable)
        end
 
        if(potion.realAnimation) then
            potion.realAnimation = getBooleanFromString(potion.realAnimation)
        end
 
        POTIONS[index] = potion
    end
end
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
    local potion = POTIONS[item.itemid]
    if(not potion) then
        return false
    end
 
    if(not isPlayer(itemEx.uid) or (not potion.usableOnTarget and cid ~= itemEx.uid)) then
        if(not potion.splashable or not potion.splash) then
            return false
        end
 
        if(toPosition.x == CONTAINER_POSITION) then
            toPosition = getThingPosition(item.uid)
        end
 
        doDecayItem(doCreateItem(POOL, potion.splash, toPosition))
        doRemoveItem(item.uid, 1)
        if(not potion.empty or potion.removeOnUse) then
            return true
        end
 
        if(fromPosition.x ~= CONTAINER_POSITION) then
            doCreateItem(potion.empty, fromPosition)
        else
            doPlayerAddItem(cid, potion.empty, 1)
        end
 
        return true
    end
 
    if(((potion.level and getPlayerLevel(itemEx.uid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(itemEx.uid)))) and
        not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES))
    then
        doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1)
        return true
    end
 
    if(potion.range > 0 and cid ~= itemEx.uid and getDistanceBetween(getThingPosition(cid), getThingPosition(itemEx.uid)) > potion.range) then
        return false
    end
    
    local x = getPlayerLevel(cid)
    local min_, max_ = potion.min, potion.max
    
    local health = potion.health
    if health then
        local hp = math.ceil(math.random(health[1] * x, health[2] * x))
        if hp < min_ then
            hp = math.random(min_, max_)
        elseif hp > max_ then
            hp = math.random(max_, max_ + 100)
        end
 
        doCreatureAddHealth(itemEx.uid, hp)
    end
 
    local mana = potion.mana
    if mana then
        local mp = math.ceil(math.random(mana[1] * x, mana[2] * x))
        if mp < min_ then
            mp = math.random(min_, max_)
        elseif mp > max_ then
            mp = math.random(max_, max_ + 100)
        end
 
        doPlayerAddMana(itemEx.uid, mp)
    end
 
    doSendMagicEffect(getThingPosition(itemEx.uid), CONST_ME_MAGIC_BLUE)
    if(not potion.realAnimation) then
        doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
    else
        for i, tid in ipairs(getSpectators(getThingPosition(itemEx.uid), 1, 1)) do
            if(isPlayer(tid)) then
                doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid)
            end
        end
    end
 
    doRemoveItem(item.uid, 1)
    if(not potion.empty or potion.removeOnUse) then
        return true
    end
 
    if(fromPosition.x ~= CONTAINER_POSITION) then
        doCreateItem(potion.empty, fromPosition)
    else
        doPlayerAddItem(cid, potion.empty, 1)
    end
 
    return true
end

Problem tkwi w tym, że po użyciu poty znikają mimo, że jest zaznaczone "no". Używając innego skryptu poty nie znikały lecz dawały mane/hp w danym zakresie. Chce żeby dawały w zależności od mlvl tak jak jest tu. Jakiś pomysł co jest nie tak?
 

Similar threads

Back
Top