strutZ
Australian OT Member {AKA Beastn}
- Joined
- Nov 16, 2014
- Messages
- 1,391
- Solutions
- 7
- Reaction score
- 550
lol looks like one of my modal window scripts? why are you posting in a slot system?Can someone help me fix this? ;d
lol looks like one of my modal window scripts? why are you posting in a slot system?Can someone help me fix this? ;d
Sorry about that haha i posted the wrong image xDlol looks like one of my modal window scripts? why are you posting in a slot system?
https://otland.net/threads/tfs-1-1-slot-system.206697/page-7#post-2216446Sorry about that haha i posted the wrong image xD
Oh thanks, i dont know how i missed this haha
Recalculating item stats. I don't update this script anymore.@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?
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
local maxMelee = 20
if n > maxMelee then n = maxMelee end
n = n <= maxMelee and n or maxMelee
n = math.min(n, maxMelee)
player:addCondition(conditionMP[tonumber(n)])
for slot=1,9 do
for slot=1,10 do
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 isAmmoSlot(uid)
return ItemType(getThing(uid).itemid):getSlotPosition() == 560
end
Thanks for help, but dont work and no errorCONST_SLOT_AMMO = 10,
560(16+32+512) means that every item that is equipable in both hands + ammo slot will work
<attribute key="slotType" value="ammo" />
print(ItemType( item_id_here ):getSlotPosition())
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>
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
function onLogin(cid)
local player = Player(cid)
for slot=1,10 do
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
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>
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
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>