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

talkaction mana train tfs 0.4

miguelshta

Member
Joined
Mar 21, 2009
Messages
351
Solutions
1
Reaction score
13
Location
Toronto, Canada
hello i wanted for a script to train mana in my ot to make it work u need an spell an mana to say it example:
!train exura vita,400 >> it will use exura vita when has 400 of mana thanks for all !! <3
 
You can up the thread to infinity, but there is no solution to the issue unless a source edit is done.

The only other viable alternative is to go through your entire list of conjuring spells and re-create them using lua functions.
-> check for required soul
-> check for required mana
-> (runes) check for blank rune
-> remove soul/mana
-> add mana consumed to player total mana spent (make sure to include all stages/multipliers)
-> add conjured items to player
 
You can up the thread to infinity, but there is no solution to the issue unless a source edit is done.

The only other viable alternative is to go through your entire list of conjuring spells and re-create them using lua functions.
-> check for required soul
-> check for required mana
-> (runes) check for blank rune
-> remove soul/mana
-> add mana consumed to player total mana spent (make sure to include all stages/multipliers)
-> add conjured items to player
i buy this fuction,, wanna make and sell for me? say u offer...
 
Can use the spell name or spell words.
Will auto-eat food.

Line 52 has the 'anti-idle' feature, however is disabled by default. Un-greentext this line to enable it.
I have it disabled by default, because I have no idea if the ot-serv-list sites will ban you for using it.
Use the anti-idle at your own risk.

Example ways to use the talkaction.
!train exevo gran mas vis, 800
!train Ultimate Explosion, 800
!train list -- shows list of all spells you own

Lua:
local players = {}

local FOODS, MAX_FOOD = {
    [2328] = {84, "Gulp."},  [2362] = {48, "Yum."}, [2666] = {180, "Munch."}, [2667] = {144, "Munch."},
    [2668] = {120, "Mmmm."}, [2669] = {204, "Munch."}, [2670] = {48, "Gulp."}, [2671] = {360, "Chomp."},
    [2672] = {720, "Chomp."}, [2673] = {60, "Yum."}, [2674] = {72, "Yum."}, [2675] = {156, "Yum."},
    [2676] = {96, "Yum."}, [2677] = {12, "Yum."}, [2678] = {216, "Slurp."}, [2679] = {12, "Yum."},
    [2680] = {24, "Yum."}, [2681] = {108, "Yum."}, [2682] = {240, "Yum."}, [2683] = {204, "Munch."},
    [2684] = {60, "Crunch."}, [2685] = {72, "Munch."}, [2686] = {108, "Crunch."}, [2687] = {24, "Crunch."},
    [2688] = {24, "Mmmm."}, [2689] = {120, "Crunch."}, [2690] = {72, "Crunch."}, [2691] = {96, "Crunch."},
    [2695] = {72, "Gulp."}, [2696] = {108, "Smack."}, [8112] = {108, "Urgh."}, [2787] = {108, "Crunch."},
    [2788] = {48, "Munch."}, [2789] = {264, "Munch."}, [2790] = {360, "Crunch."}, [2791] = {108, "Crunch."},
    [2792] = {72, "Crunch."}, [2793] = {144, "Crunch."}, [2794] = {36, "Crunch."}, [2795] = {432, "Crunch."},
    [2796] = {300, "Crunch."}
}, 1200

local function autoEat(cid)
    for food, foodinfo in pairs(FOODS) do
        if getPlayerItemCount(cid, food) > 0 then
            if getPlayerFood(cid) + foodinfo[1] * 3 < MAX_FOOD then
                doPlayerFeed(cid, foodinfo[1])
                doPlayerRemoveItem(cid, food, 1)
                doCreatureSay(cid, foodinfo[2], TALKTYPE_MONSTER)
            end
            break
        end
    end
end

local function trainMana(cid, startTime)
    if not isPlayer(cid) then
        players[cid] = nil
        return
    end
    if not players[cid] or players[cid][3] ~= startTime then
        return
    end
    if getCreatureMana(cid) >= players[cid][2] then
        if not doCreatureCastSpell(cid, players[cid][1]) then
            doCreatureSay(cid, "Cannot cast spell.")
            players[cid] = nil
            return
        end
        local mana = getInstantSpellInfo(cid, players[cid][1]).mana
        doCreatureAddMana(cid, -(mana), false)
        doPlayerAddSpentMana(cid, mana, true)
        doCreatureSay(cid, getInstantSpellInfo(cid, players[cid][1]).words, TALKTYPE_MONSTER_SAY)
    end
    if getPlayerFood(cid) < 10 then -- if less then 10 seconds of food time left
        autoEat(cid)
    end
    --doPlayerSetIdleTime(cid, 0)
    addEvent(trainMana, 1000, cid, startTime)
end

local function showSpellList(cid)
    local t = {}
    for i = 0, getPlayerInstantSpellCount(cid) - 1 do
        local spell = getPlayerInstantSpellInfo(cid, i)
        if(spell.mlevel ~= 0) then
            if(spell.manapercent > 0) then
                spell.mana = spell.manapercent .. "%"
            end
   
            table.insert(t, spell)
        end
    end
   
    table.sort(t, function(a, b) return a.mlevel < b.mlevel end)
    local text, prevLevel = "", -1
    for i, spell in ipairs(t) do
        local line = ""
        if(prevLevel ~= spell.mlevel) then
            if(i ~= 1) then
                line = "\n"
            end
            line = line .. "Spells for Magic Level " .. spell.mlevel .. "\n"
            prevLevel = spell.mlevel
        end
        text = text .. line .. "  " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n"
    end
    doShowTextDialog(cid, 2175, text)
end


function onSay(cid, words, param, channel)
    if players[cid] then
        if players[cid][3] == os.time() then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Training cannot be stopped this quickly. Please wait a few seconds.")
            return true
        end
        players[cid] = nil
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Training has been stopped.")
        return true
    end
   
    if param == "" then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spell name and mana threshold required. Ex: !train Light Healing, 400 | !train list -> will show list of owned spells")
        return true
    elseif param == "list" then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Here is a list of your current spells.")
        showSpellList(cid)
        return true
    end
   
    local t = string.explode(param, ",")
    if t[1] == nil or t[2] == nil then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spell name and mana threshold required. Ex: !train Light Healing, 400")
        return true
    end
    t[1] = t[1]:lower()
   
    local spell
    for i = 0, getPlayerInstantSpellCount(cid) - 1 do
        spell = getPlayerInstantSpellInfo(cid, i)
        if spell.name:lower() == t[1] or spell.words:lower() == t[1] then
            t[1] = spell.name:lower()
            spell = true
            break
        end
    end
   
    if spell ~= true then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The spell (" .. t[1] .. ") does not exist.")
        return true
    end
   
    local manaThreshold = tonumber(t[2])
    if manaThreshold == nil then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The mana threshold chosen (" .. t[2] .. ") is not a known number. Mana threshold has been set to your maximum mana.")
        manaThreshold = getCreatureMaxMana(cid)
    end
   
    manaThreshold = math.floor(manaThreshold) -- to get rid of any decimals player might have thrown in
    if manaThreshold < 0 or manaThreshold < getInstantSpellInfo(cid, t[1]).mana then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The mana threshold chosen (" .. t[2] .. ") is lower then the spell cost of the spell (" .. t[1] .. "). Mana threshold has been set to your maximum mana.")
        manaThreshold = getCreatureMaxMana(cid)
    elseif manaThreshold > getCreatureMaxMana(cid) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The mana threshold chosen (" .. t[2] .. ") is higher then your maxmimum mana. Mana threshold has been set to your maximum mana.")
        manaThreshold = getCreatureMaxMana(cid)
    end
   
    players[cid] = {getInstantSpellInfo(cid, t[1]).name, manaThreshold, os.time()}  
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Training has started! Spell: (" .. t[1] .. "), Mana Threshold: " .. manaThreshold .. "")
    trainMana(cid, os.time())
    return true
end
This script is amazing. Thank you for posting it! I'm running an older server that won't have some of these key functions, but I'm eager to try adding them.

I would need to make my own:
-getInstantSpellInfo
-getCreatureMaxMana
-doCreatureCastSpell
-doCreatureAddMana
-doPlayerAddSpentMana

I'm not quite sure what these functions are supposed to do, so it might be difficult to rewrite them. Could you take a moment to explain them if you get a chance?

I was only able to find this one:

Lua:
local addManaSpentFunc = Player.addManaSpent
function Player.addManaSpent(...)
    APPLY_SKILL_MULTIPLIER = false
    local ret = addManaSpentFunc(...)
    APPLY_SKILL_MULTIPLIER = true
    return ret
end
Post automatically merged:

I have access to a function like this:

 
Last edited:
This script is amazing. Thank you for posting it! I'm running an older server that won't have some of these key functions, but I'm eager to try adding them.

I would need to make my own:
-getInstantSpellInfo
-getCreatureMaxMana
-doCreatureCastSpell
-doCreatureAddMana
-doPlayerAddSpentMana

I'm not quite sure what these functions are supposed to do, so it might be difficult to rewrite them. Could you take a moment to explain them if you get a chance?

I was only able to find this one:

Lua:
local addManaSpentFunc = Player.addManaSpent
function Player.addManaSpent(...)
    APPLY_SKILL_MULTIPLIER = false
    local ret = addManaSpentFunc(...)
    APPLY_SKILL_MULTIPLIER = true
    return ret
end
Post automatically merged:

I have access to a function like this:

You can find most functions in luascript.cpp

I've only used the functions, don't really know how they are made in source.

Try searching for partial, like MaxMana it might be like getPlayerMaxMana in older distro's.

doCreatureCastSpell will probably be hard to find, as it wasn't included in most distro's.
 
Back
Top