• 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!

Lua ENCHANTING BUG, Gain to much MLVL

SirJohnsen

New Member
Joined
Sep 26, 2009
Messages
86
Reaction score
3
On my server you can gain magic level 180 in 1 day if you just enchant loads of rubies.
I did look in my enchanting.lua but could not find anything there about how much mlvl you gain. it looks like its just reffering to the config.lua mlvl rate. on my server the mlvl rate is around 20x.

Anyone know where i can fix this? do i have to compile again?

enchanting.lua

Code:
local config = {
    manaCost = 300,
    soulCost = 2,
}

local spheres = {
    [7759] = {3, 7},
    [7760] = {1, 5},
    [7761] = {2, 6},
    [7762] = {4, 8}
}

local enchantableGems = {2147, 2146, 2149, 2150}
local enchantableItems = {2383, 7383, 7384, 7406, 7402, 2429, 2430, 7389, 7380, 2454, 2423, 2445, 7415, 7392, 2391, 2544, 8905}

local enchantingAltars = {
    {7504, 7505, 7506, 7507},
    {7508, 7509, 7510, 7511},
    {7516, 7517, 7518, 7519},
    {7512, 7513, 7514, 7515}
}

local enchantedGems = {7760, 7759, 7761, 7762}
local enchantedItems = {
    [2383] = {7744, 7763, 7854, 7869},
    [7383] = {7745, 7764, 7855, 7870},
    [7384] = {7746, 7765, 7856, 7871},
    [7406] = {7747, 7766, 7857, 7872},
    [7402] = {7748, 7767, 7858, 7873},
    [2429] = {7749, 7768, 7859, 7874},
    [2430] = {7750, 7769, 7860, 7875},
    [7389] = {7751, 7770, 7861, 7876},
    [7380] = {7752, 7771, 7862, 7877},
    [2454] = {7753, 7772, 7863, 7878},
    [2423] = {7754, 7773, 7864, 7879},
    [2445] = {7755, 7774, 7865, 7880},
    [7415] = {7756, 7775, 7866, 7881},
    [7392] = {7757, 7776, 7867, 7882},
    [2391] = {7758, 7777, 7868, 7883},
    [2544] = {7840, 7839, 7850, 7838},
    [8905] = {8906, 8907, 8909, 8908}
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if isInArray({33268, 33269}, toPosition.x) and toPosition.y == 31830 and toPosition.z == 10 and player:getStorageValue(Storage.ElementalSphere.QuestLine) > 0 then
        if not isInArray(spheres[item.itemid], player:getVocation():getId()) then
            return false
        elseif isInArray({7915, 7916}, target.itemid) then
            player:say('Turn off the machine first.', TALKTYPE_MONSTER_SAY)
            return true
        else
            player:setStorageValue(Storage.ElementalSphere.MachineGemCount, math.max(1, player:getStorageValue(Storage.ElementalSphere.MachineGemCount) + 1))
            toPosition:sendMagicEffect(CONST_ME_PURPLEENERGY)
            item:transform(item.itemid, item.type - 1)
            return true
        end
    end

    if item.itemid == 2147 and target.itemid == 2342 then
        target:transform(2343)
        target:decay()
        item:remove(1)
        toPosition:sendMagicEffect(CONST_ME_MAGIC_RED)
        return true
    end

    if item.itemid == 7760 and isInArray({9934, 10022}, target.itemid) then
        target:transform(9933)
        item:remove(1)
        toPosition:sendMagicEffect(CONST_ME_MAGIC_RED)
        return true
    end

    if isInArray(enchantableGems, item.itemid) then
        local subtype = item.type
        if subtype == 0 then
            subtype = 1
        end

        local mana = config.manaCost * subtype
        if player:getMana() < mana then
            player:sendCancelMessage(RETURNVALUE_NOTENOUGHMANA)
            return false
        end

        local soul = config.soulCost * subtype
        if player:getSoul() < soul then
            player:sendCancelMessage(RETURNVALUE_NOTENOUGHSOUL)
            return false
        end

        local targetId = table.find(enchantableGems, item.itemid)
        if not targetId or not isInArray(enchantingAltars[targetId], target.itemid) then
            return false
        end

        player:addMana(-mana)
        player:addSoul(-soul)
        item:transform(enchantedGems[targetId])
        player:addManaSpent(mana * configManager.getNumber(configKeys.RATE_MAGIC))
        player:getPosition():sendMagicEffect(CONST_ME_HOLYDAMAGE)
        return true
    end

    if item.itemid == 7761 and isInArray({9949, 9954}, target.itemid) then
        target:transform(target.itemid - 1)
        target:decay()
        item:remove(1)
        toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
        return true
    end

    if isInArray(enchantedGems, item.itemid) then
        if not isInArray(enchantableItems, target.itemid) then
            fromPosition:sendMagicEffect(CONST_ME_POFF)
            return false
        end

        local targetId = table.find(enchantedGems, item.itemid)
        if not targetId then
            return false
        end

        local subtype = target.type
        if not isInArray({2544, 8905}, target.itemid) then
            subtype = 1000
        end

        target:transform(enchantedItems[target.itemid][targetId], subtype)
        target:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED)
        item:remove(1)
        return true
    end
    return false
end
 
fix what? be more detailed.
This line gives mana skillpoints and its multiplied with the global.lua rate

player:addManaSpent(mana * configManager.getNumber(configKeys.RATE_MAGIC))

Well in my server if someone enchant a ruby. they will gain about half a magic level even if you have magic level 113. it cant be right?
But when looking at that code, i cant seem to find it doing anything else than what you just said. so im abit confused as to how it can give so much magic level?
 
player:addManaSpent(300*1000 * configManager.getNumber(configKeys.RATE_MAGIC))
Your local variable mana value is OFF THE FREAKING ROOFS, no clue what is your config rate.
 
player:addManaSpent(300*1000 * configManager.getNumber(configKeys.RATE_MAGIC))
Your local variable mana value is OFF THE FREAKING ROOFS, no clue what is your config rate.

What do you mean? should I add these values? 300*1000 ? where is local variable mana value?
 
where is local variable mana value?
lol this is your script and there is such amazing keyboard combination called CTRL+F

I failed anyway, there was 2 places where you called subtype.
So the variable mana is most likey around 300-1500

Code:
local mana = config.manaCost * subtype

local config = {
manaCost = 300,
soulCost = 2,
}

local subtype = item.type
if subtype == 0 then
subtype = 1
end
What TFS are you using?
I see errors.. unless its TFS 0.3.6 something near there what i have no clue about.
 
lol this is your script and there is such amazing keyboard combination called CTRL+F

I failed anyway, there was 2 places where you called subtype.
So the variable mana is most likey around 300-1500

Code:
local mana = config.manaCost * subtype

local config = {
manaCost = 300,
soulCost = 2,
}

local subtype = item.type
if subtype == 0 then
subtype = 1
end
What TFS are you using?
I see errors.. unless its TFS 0.3.6 something near there what i have no clue about.

Well this is TFS 1.2
I was simply asking if im sopposed to put a variable into the script. You also said "Your local variable mana value is OFF THE FREAKING ROOFS,"
so i was wondering where u saw this? and my RateMagic in config.lua is 20

I think im having trouble understanding what you are trying to tell me, so sorry :/
this got very confusing "What TFS are you using?
I see errors.. unless its TFS 0.3.6 something near there what i have no clue about."

where do you see errors? something near there what i have no clue about? i dont understand these lines ^.^
 
item is userdata
item.itemid gives you something?

it should be item:getId()

you are giving players 6000 to 30000 manaspent per each use.
 
If you want it to be more reasonable, you can remove the rate multiplier. Right now, as I understand it, it's adding manaspent as (number of gems) * (mana for each) * 20. This means, you'll have 300 mana * 20 for each gem. that's 6000 mana spent per gem. The equivalent of using one of the massive mage spells 5 times. For one gem. If they do 100 gems, that's 600k mana.

Change
Code:
player:addManaSpent(mana * configManager.getNumber(configKeys.RATE_MAGIC))
to
Code:
player:addManaSpent(mana)
This way it will only add 300 mana per gem, which I imagine is more what you want.

This is assuming that when it checks the item's type, it's returning the count in the stack.




item is userdata
item.itemid gives you something?

it should be item:getId()

you are giving players 6000 to 30000 manaspent per each use.
item.itemid still works the same as it always has as far as I know. There's nothing wrong with it, and it has nothing to do with his issue.
 
If you want it to be more reasonable, you can remove the rate multiplier. Right now, as I understand it, it's adding manaspent as (number of gems) * (mana for each) * 20. This means, you'll have 300 mana * 20 for each gem. that's 6000 mana spent per gem. The equivalent of using one of the massive mage spells 5 times. For one gem. If they do 100 gems, that's 600k mana.

Change
Code:
player:addManaSpent(mana * configManager.getNumber(configKeys.RATE_MAGIC))
to
Code:
player:addManaSpent(mana)
This way it will only add 300 mana per gem, which I imagine is more what you want.

This is assuming that when it checks the item's type, it's returning the count in the stack.





item.itemid still works the same as it always has as far as I know. There's nothing wrong with it, and it has nothing to do with his issue.

Thank you so much! this fixed my issue. i tried enchanting like 5 gems now and got about 1% mlvl each 5 gems :)
Rep+1!
 
Back
Top