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

tfs 1.1 spellup GetCreatureStoreage

7804364

Member
Joined
Mar 6, 2010
Messages
457
Reaction score
10
Ok so im getting this in my console

Code:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/spellup.lua:onAdvance
data/creaturescripts/scripts/spellup.lua:12: attempt to call global 'getCreatureStorage' (a nil value)
stack traceback:
        [C]: in function 'getCreatureStorage'
        data/creaturescripts/scripts/spellup.lua:12: in function <data/creaturescripts/scripts/spellup.lua:11>

This is the script

Code:
local s = {
    repeatAfterDeath = false,
    detailedInfo = true,
    Storage = 70000,
    messageType = 'channel', -- options: 'popUp' or 'channel'
--this one below only used if messageType = channel
    channelClass = MESSAGE_STATUS_CONSOLE_ORANGE
    }
function onAdvance(cid, skill, oldlevel, newlevel)
    if skill ~= SKILL_LEVEL or not s.repeatAfterDeath and getCreatureStorage(cid, s.Storage) >= newlevel then
        return true
    end

    local t = {}
    for i = 0, getPlayerInstantSpellCount(cid) - 1 do
        local spell = getPlayerInstantSpellInfo(cid, i)
        if(spell.level ~= 0) and spell.level == newlevel 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.level < b.level end)
    local text, prevLevel = '', -1
    for i, spell in ipairs(t) do
        local line = ''
        if(prevLevel ~= spell.level) then
            if(i ~= 1) then
                line = '\n'
            end

            line = line .. 'New spells available (Level '..newlevel..'):\n'
            prevLevel = spell.level
        end
        text = text ..line..' ['..spell.name..'] "'..spell.words..'" '..(s.detailedInfo and 'Mana: '..spell.mana..''..(spell.mlevel > 0 and ' ML: '..spell.mlevel..'' or '') or '')..'\n'
    end
    if text == '' then
        return true
    end
    doCreatureSetStorage(cid, s.Storage, newlevel)
    doPlayerSendTextMessage(cid, s.channelClass, text)
    -- if s.messageType == 'popUp' then
        -- doShowTextDialog(cid, 2175, text)
    -- elseif s.messageType == 'channel' then
        -- doPlayerSendTextMessage(cid, s.channelClass, text)
    -- end
    return true
end
 
Code:
local s = { --SETUP
repeatAfterDeath = false, -- true -> player will always get the msg at lvlup | false -> player will only get the 1st time the gets the new level
detailedInfo = true, -- true -> player will get name, words, mana & mana% info of spells | false -> player will only get the name and the words of the spells
-- storage below is where the newlevel will be stored ONLY IF YOU USE repeatAfterDeath
Storage = 5000,
messageType = 'channel', -- options: 'popUp' or 'channel'
--this one below only used if messageType = channel
channelClass = MESSAGE_STATUS_CONSOLE_BLUE
}

function onAdvance(cid, skill, oldlevel, newlevel)
if skill ~= SKILL_LEVEL or not s.repeatAfterDeath and getPlayerStorageValue(cid, s.Storage) >= newlevel then
return true
end

local t = {}
for i = 0, getPlayerInstantSpellCount(cid) - 1 do
local spell = getPlayerInstantSpellInfo(cid, i)
if(spell.level ~= 0) and spell.level == newlevel 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.level < b.level end)
local text, prevLevel = '', -1
for i, spell in ipairs(t) do
local line = ''
if(prevLevel ~= spell.level) then
if(i ~= 1) then
line = '\n'
end

line = line .. 'You have just advanced to level '..newlevel..' and learned new spells!\n'
prevLevel = spell.level
end
text = text ..line..' ['..spell.name..'] "'..spell.words..'" '..(s.detailedInfo and 'Mana['..spell.mana..']'..(spell.mlevel > 0 and ' ML['..spell.mlevel..']' or '') or '')..'\n'
end

if text == '' then
return true
end

setPlayerStorageValue(cid, s.Storage, newlevel)
if s.messageType == 'popUp' then
doShowTextDialog(cid, 2175, text)
elseif s.messageType == 'channel' then
doPlayerSendTextMessage(cid, s.channelClass, text)
end
return true
end
 
Here you go:

Code:
local s = { --SETUP
  repeatAfterDeath = true, -- true -> player will always get the msg at lvlup | false -> player will only get the 1st time the gets the new level
  detailedInfo = true, -- true -> player will get name, words, mana & mana% info of spells | false -> player will only get the name and the words of the spells
-- storage below is where the newlevel will be stored ONLY IF YOU USE repeatAfterDeath
  Storage = 15000,
  messageType = 'channel', -- options: 'popUp' or 'channel'
--this one below only used if messageType = channel
  channelClass = MESSAGE_STATUS_CONSOLE_ORANGE
  }
function onAdvance(cid, skill, oldlevel, newlevel)
  if skill ~= SKILL_LEVEL or not s.repeatAfterDeath and getPlayerStorageValue(cid, s.Storage) >= newlevel then
  return true
  end
  local t = {}
  for i = 0, getPlayerInstantSpellCount(cid) - 1 do
  local spell = getPlayerInstantSpellInfo(cid, i)
  if(spell.level ~= 0) and spell.level == newlevel 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.level < b.level end)
  local text, prevLevel = '', -1
  for i, spell in ipairs(t) do
  local line = ''
  if(prevLevel ~= spell.level) then
  if(i ~= 1) then
  line = '\n'
  end
  line = line .. 'You have just advanced to level '..newlevel..' and learned New Spells!\n'
  prevLevel = spell.level
  end
  text = text ..line..' ['..spell.name..'] "'..spell.words..'" '..(s.detailedInfo and 'Mana['..spell.mana..']'..(spell.mlevel > 0 and ' ML['..spell.mlevel..']' or '') or '')..'\n'
  end
  if text == '' then
  return true
  end
  setPlayerStorageValue(cid, s.Storage, newlevel)
  if s.messageType == 'popUp' then
  doShowTextDialog(cid, 2175, text)
  elseif s.messageType == 'channel' then
  doPlayerSendTextMessage(cid, s.channelClass, text)
  end
  return true
end

"getPlayerStorageValue"

Kind Regards,
Eldin.
 
fastest solution:

add it to global/compat/anywhere in libs:
Code:
doCreatureSetStorage = setPlayerStorageValue
getCreatureStorage = getPlayerStorageValue

also
1.0 -> 1.1
below function onAdvance add
Code:
if not tonumber(cid) then cid = cid:getId() end
 
Back
Top