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

Action [TFS 1.1] - Slot system

Status
Not open for further replies.
Can someone help me fix this? ;d

ObG1jFX.png
lol looks like one of my modal window scripts? why are you posting in a slot system?
 
@zbizu For the slot remover, it works...but if I roll any a stat on an item that increases its atk/def value (+atk%/+def%/arm) and then remove it, the value remains while the slot is removed...allowing players to infinitely stack atk/def on items. Would you know the solution to this?
 
@zbizu For the slot remover, it works...but if I roll any a stat on an item that increases its atk/def value (+atk%/+def%/arm) and then remove it, the value remains while the slot is removed...allowing players to infinitely stack atk/def on items. Would you know the solution to this?
Recalculating item stats. I don't update this script anymore.
 
I see...well just I'll keep messing it with it in hopes I get it to work one day haha.. and yeah I figured you probably didn't, being that it's 2years old and all but decided there was no harm in asking :p
 
Thanks for this! It was a nice script, had to change some player to cid but that was no biggie.
For TFS 1.1 this should work for creaturescripts slot.lua.
Code:
local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
for i=1,300 do
  conditionHP[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionHP[i], CONDITION_PARAM_SUBID, 50)
  setConditionParam(conditionHP[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionHP[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionHP[i], CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100+i)

  conditionMP[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionMP[i], CONDITION_PARAM_SUBID, 51)
  setConditionParam(conditionMP[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionMP[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionMP[i], CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 100+i)

  conditionML[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionML[i], CONDITION_PARAM_SUBID, 52)
  setConditionParam(conditionML[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionML[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionML[i], CONDITION_PARAM_STAT_MAGICPOINTSPERCENT, 100+i)


  conditionCLUB[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SUBID, 53)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_MELEEPERCENT, 100+i)


  conditionSHI[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_SUBID, 54)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+i)

  conditionDIST[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_SUBID, 55)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+i)
end

function getSlotType(n)
  if not n then
  return false
  end
  if n:match('%[(.+)%]') then
  n = n:match('%[(.+)%]')
  if n == '?' then
  return 0,n
  else
  return n:match('(.-)%.([+-])(%d+)%%')
  end
  else
  return false
  end
end

local function loadSet(cid)
local player = Player(cid)
if not player then return false end
  local t = {}
  for slot=1,9 do
  t[slot] = ''
  local s = getPlayerSlotItem(player,slot).uid
  if s ~= 0 then
  t[slot] = Item(s):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION)
  end
  end
  return t
end

function chk(cid,f)
local player = Player(cid)
  if not Player(cid) then return false end
  local t = loadSet(cid)
  if not t then return false end

  for i=1,#f do
  if f[i] ~= t[i] then
  equip(player,nil,slot)
  break
  end
  end
  addEvent(chk,2000,cid,t)
end

function check_slot(aab, i)
  if i == 5 or i == 6 then
  if isWeapon(aab) or isShield(aab) or isBow(aab) then
  return true
  end
  else
  return true
  end
return false
end

function equip(cid,item,slot)
local player = Player(cid)
  local t = {}
  if item then
  local mm,sinal,qto = getSlotType(Item(item.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION))
  t[mm] = tonumber(qto)
  end
  for i=1,9 do
  if i ~= slot then
  if getPlayerSlotItem(player,i).itemid ~= 0 then
  local aab = getPlayerSlotItem(player,i).uid
  if aab and check_slot(aab,i) then
  for _ in Item(aab):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION):gmatch('(%[.-%])') do
  local mm,sinal,qto2 = getSlotType(_)
  if mm then
  if not t[mm] then
  t[mm] = 0
  end
  t[mm] = t[mm]+tonumber(qto2)
  t[mm] = t[mm] > 300 and 300 or t[mm]
  end
  end
  end
  end
  end
  end
  local fu = 0
  local ca = {}
  local s = ''
  for sl,n in pairs(t) do
  fu = fu+1
  s = s..''..n..'% more of '..sl..'\n'
  if sl == 'hp' then
  player:addCondition(conditionHP[tonumber(n)])
  ca[50] = 1
  doSendTutorial(player,19)
  elseif sl == 'mp' then
  player:addCondition(conditionMP[tonumber(n)])
  ca[51] = 1
  doSendTutorial(player,19)
  elseif sl == 'ml' then
  player:addCondition(conditionML[tonumber(n)])
  ca[52] = 1
  elseif sl == 'melee' then
  player:addCondition(conditionCLUB[tonumber(n)])
  ca[53] = 1
  elseif sl == 'shield' then
  player:addCondition(conditionSHI[tonumber(n)])
  ca[54] = 1
  elseif sl == 'dist' then
  player:addCondition(conditionDIST[tonumber(n)])
  ca[55] = 1
  end
  end
  if fu > 0 then
  for i=50,55 do
  if not ca[i] then
  doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i)
  end
  end
  else
  for i=50,55 do
  doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i)
  end
  end
  return true
end

function onLogin(player)
  equip(player,nil,slot)
local cid = player:getId()
  addEvent(chk,2000,cid,loadSet(cid))
  return true
end
 
How can I put a limit for %??

Exemple: Melee% Max = 20%

Help me please!!
 
set maximum value
Code:
local maxMelee = 20
and add one of these:
Code:
if n > maxMelee then n = maxMelee end
Code:
n = n <= maxMelee and n or maxMelee
Code:
n = math.min(n, maxMelee)
before each condition is added(this line):
Code:
player:addCondition(conditionMP[tonumber(n)])
 
CONST_SLOT_AMMO = 10,

so we need to change this:
Code:
for slot=1,9 do
to
Code:
for slot=1,10 do

also to avoid every item type having an effect in ammo slot edit check_slot to (only items with slot type "ammo" will work):
Code:
function check_slot(aab, i)
    if i == 10 then
        if isAmmoSlot(aab) then
            return true
        end
    elseif i == 5 or i == 6 then
        if isWeapon(aab) or isShield(aab) or isBow(aab) then
            return true
        end
    else
        return true
    end
    return false
end

and add isAmmoSlot function to the top of this file or somewhere in global.lua
(perhaps something like this)
Code:
function isAmmoSlot(uid)
    return ItemType(getThing(uid).itemid):getSlotPosition() == 560
end
560(16+32+512) means that every item that is equipable in both hands + ammo slot will work
 
Last edited:
CONST_SLOT_AMMO = 10,
560(16+32+512) means that every item that is equipable in both hands + ammo slot will work
Thanks for help, but dont work and no error
 
there was an error in function name (isAmmo instead of isAmmoSlot)

make sure that the item you are trying to use has ammo type in items.xml
Code:
<attribute key="slotType" value="ammo" />

what value does this print out?
Code:
print(ItemType( item_id_here ):getSlotPosition())
 
Value = 560
Solved :D
i have changed function isAmmo to isAmmoSlot
thanks
 
Last edited:
i have this error, the script work fine, but after long time get this error
on tfs 1.2, that does not allow login
Code:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/custom/slot.lua:onLogin
data/creaturescripts/scripts/custom/slot.lua:115: attempt to index a nil value
stack traceback:
        [C]: in function '__index'
        data/creaturescripts/scripts/custom/slot.lua:115: in function 'equip'
        data/creaturescripts/scripts/custom/slot.lua:172: in function <data/creaturescripts/scripts/custom/slot.lua:171>


Code:
local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
for i=1,300 do
  conditionHP[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionHP[i], CONDITION_PARAM_SUBID, 50)
  setConditionParam(conditionHP[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionHP[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionHP[i], CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100+i)

  conditionMP[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionMP[i], CONDITION_PARAM_SUBID, 51)
  setConditionParam(conditionMP[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionMP[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionMP[i], CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 100+i)

  conditionML[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionML[i], CONDITION_PARAM_SUBID, 52)
  setConditionParam(conditionML[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionML[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionML[i], CONDITION_PARAM_STAT_MAGICPOINTSPERCENT, 100+i)


  conditionCLUB[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SUBID, 53)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_MELEEPERCENT, 100+i)


  conditionSHI[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_SUBID, 54)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+i)

  conditionDIST[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_SUBID, 55)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+i)
end

function getSlotType(n)
  if not n then
  return false
  end
  if n:match('%[(.+)%]') then
  n = n:match('%[(.+)%]')
  if n == '?' then
  return 0,n
  else
  return n:match('(.-)%.([+-])(%d+)%%')
  end
  else
  return false
  end
end

local function loadSet(cid)
local player = Player(cid)
if not player then return false end
  local t = {}
  for slot=1,10 do
  t[slot] = ''
  local s = getPlayerSlotItem(player,slot).uid
  if s ~= 0 then
  t[slot] = Item(s):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION)
  -- print(ItemType( item_id_here ):getSlotPosition())
  end
  end
  return t
end

function chk(cid,f)
local player = Player(cid)
  if not Player(cid) then return false end
  local t = loadSet(cid)
  if not t then return false end

  for i=1,#f do
  if f[i] ~= t[i] then
  equip(player,nil,slot)
  break
  end
  end
  addEvent(chk,2000,cid,t)
end

function check_slot(aab, i)
    if i == 10 then
        if isAmmoSlot(aab) then
            return true
        end
    elseif i == 5 or i == 6 then
        if isWeapon(aab) or isShield(aab) or isBow(aab) then
            return true
        end
    else
        return true
    end
    return false
end

function equip(cid,item,slot)
local player = Player(cid)
  local t = {}
  if item then
  local mm,sinal,qto = getSlotType(Item(item.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION))
  t[mm] = tonumber(qto)
  end
  for i=1,10 do
  if i ~= slot then
  if getPlayerSlotItem(player,i).itemid ~= 0 then
  local aab = getPlayerSlotItem(player,i).uid
  if aab and check_slot(aab,i) then
  for _ in Item(aab):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION):gmatch('(%[.-%])') do
  local mm,sinal,qto2 = getSlotType(_)
  if mm then
  if not t[mm] then
  t[mm] = 0
  end
  t[mm] = t[mm]+tonumber(qto2)
  t[mm] = t[mm] > 300 and 300 or t[mm]
  end
  end
  end
  end
  end
  end
  local fu = 0
  local ca = {}
  local s = ''
  for sl,n in pairs(t) do
  fu = fu+1
  s = s..''..n..'% more of '..sl..'\n'
  if sl == 'hp' then
  player:addCondition(conditionHP[tonumber(n)])
  ca[50] = 1
  doSendTutorial(player,19)
  elseif sl == 'mp' then
  player:addCondition(conditionMP[tonumber(n)])
  ca[51] = 1
  doSendTutorial(player,19)
  elseif sl == 'ml' then
  player:addCondition(conditionML[tonumber(n)])
  ca[52] = 1
  elseif sl == 'melee' then
  player:addCondition(conditionCLUB[tonumber(n)])
  ca[53] = 1
  elseif sl == 'shield' then
  player:addCondition(conditionSHI[tonumber(n)])
  ca[54] = 1
  elseif sl == 'dist' then
  player:addCondition(conditionDIST[tonumber(n)])
  ca[55] = 1
  end
  end
  if fu > 0 then
  for i=50,55 do
  if not ca[i] then
  doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i)
  end
  end
  else
  for i=50,55 do
  doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i)
  end
  end
  return true
end

function onLogin(cid)
local player = Player(cid)
  equip(player,nil,slot)
local cid = player:getId()
  addEvent(chk,2000,cid,loadSet(cid))
  return true
end

changes
Today
Code:
function onLogin(cid)
local player = Player(cid)

for ammo slot
Code:
for slot=1,10 do
Code:
function check_slot(aab, i)
    if i == 10 then
        if isAmmoSlot(aab) then
            return true
        end
    elseif i == 5 or i == 6 then
        if isWeapon(aab) or isShield(aab) or isBow(aab) then
            return true
        end
    else
        return true
    end
    return false
end

BUMP

BUMP
 
Last edited by a moderator:
i try use this on tfs 1.2 and i have this error ;/

Code:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/slot.lua:onLogin
data/lib/compat/compat.lua:403: attempt to call method 'sendTutorial' (a nil value)
stack traceback:
        [C]: in function 'sendTutorial'
        data/lib/compat/compat.lua:403: in function 'doSendTutorial'
        data/creaturescripts/scripts/slot.lua:135: in function 'equip'
        data/creaturescripts/scripts/slot.lua:165: in function <data/creaturescripts/scripts/slot.lua:164>
 
Anyone willing to help with this one?
using TFS 1.0 and i'm guessing i'm using the old script, anyways, everything works just fine but i am getting an error in the console;

Code:
argument 3 unsafe
[C]: in funtion 'addEvent'
lua: 165

function onLogin(cid)
local player = Player(cid)
  equip(cid,nil,slot)
  addEvent(chk,2000,cid,loadSet(cid))
  return true
end
 
I have this error
Code:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/slot.lua:onLogin
LuaScriptInterface::luaAddEvent(). Argument #3 is unsafe
stack traceback:
        [C]: in function 'addEvent'
        data/creaturescripts/scripts/slot.lua:164: in function <data/creaturescripts/scripts/slot.lua:162>
 
Status
Not open for further replies.
Back
Top