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

Solved Old "Set Bonus" script

Elvarion

Member
Joined
Apr 14, 2010
Messages
99
Reaction score
13
Dug up an old Set Bonus script and tried to make it work on a the TFS 1.0 (For client 10.21)
But getting some errors.

Here's the error
Code:
Lua Script Error: [MoveEvents Interface]
data/movements/scripts/set system.lua:onEquip
data/movements/scripts/set system.lua:78: attempt to call global 'setCreatureMax
Health' (a nil value)
stack traceback:
        [C]: in function 'setCreatureMaxHealth'
        data/movements/scripts/set system.lua:78: in function <data/movements/sc
ripts/set system.lua:71>

And here is the script
Code:
--Set System by Strack

local sets = {
--descripcion, helmet, body, legs, boots
[1] = {'Lava Set', 7900, 7899, 7894, 7891},
[2] = {'Ice Set', 7902, 7897, 7896, 7892},
[3] = {'Energy Set', 7901, 7898, 7895, 7893},
[4] = {'Tera Set', 7903, 7884, 7885, 7886}
}
local speed1 = createConditionObject(CONDITION_HASTE)
setConditionParam(speed1, CONDITION_PARAM_TICKS, -1)
setConditionParam(speed1, CONDITION_PARAM_SPEED, 10)

local speed2 = createConditionObject(CONDITION_HASTE)
setConditionParam(speed1, CONDITION_PARAM_TICKS, -1)
setConditionParam(speed1, CONDITION_PARAM_SPEED, 20)

local shield1 = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(shield1, CONDITION_PARAM_TICKS, -1)
setConditionParam(shield1, CONDITION_PARAM_SKILL_SHIELD, 2)

local shield2 = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(shield2, CONDITION_PARAM_TICKS, -1)
setConditionParam(shield2, CONDITION_PARAM_SKILL_SHIELD, 5)

--getPlayerSlotItem(cid, 1) --helmet
--getPlayerSlotItem(cid, 4) --armor
--getPlayerSlotItem(cid, 7) --legs
--getPlayerSlotItem(cid, 8) --boots

setBonus = { --- [] = {condition = , maxHealth = , maxMana = }
[1] = {maxHealth = 200, maxMana = 200, condition = speed1, typ = CONDITION_HASTE}, --Lava Set
[2] = {maxMana = 350, maxHealth = 100, condition = shield1}, --Ice Set
[3] = {maxMana = 200, maxHealth = 100, condition = speed2, typ = CONDITION_HASTE}, --Energy Set
[4] = {maxHealth = 300, condition = shield2} --Terra Set
}
local storage = 17181

function onDeEquip(cid, item, slot) 
for i=1, #sets do
if getPlayerStorageValue(cid, storage) > 0 then
if (slot == 1 and getPlayerSlotItem(cid, 4).itemid == sets[3] and getPlayerSlotItem(cid, 7).itemid == sets[4] and getPlayerSlotItem(cid, 8).itemid == sets[5])
or (slot == 4 and getPlayerSlotItem(cid, 1).itemid == sets[2] and getPlayerSlotItem(cid, 7).itemid == sets[4] and getPlayerSlotItem(cid, 8).itemid == sets[5])
or (slot == 7 and getPlayerSlotItem(cid, 1).itemid == sets[2] and getPlayerSlotItem(cid, 4).itemid == sets[3] and getPlayerSlotItem(cid, 8).itemid == sets[5])
or (slot == 8 and getPlayerSlotItem(cid, 1).itemid == sets[2] and getPlayerSlotItem(cid, 4).itemid == sets[3] and getPlayerSlotItem(cid, 7).itemid == sets[4]) then


doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, sets[1].." effects off.")
if (setBonus).maxHealth ~= nil then
setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) -(setBonus).maxHealth)
doCreatureAddHealth(cid, -(setBonus).maxHealth)
doRemoveCondition(cid, CONDITION_INFIGHT)
end
if (setBonus).maxMana ~= nil then
setCreatureMaxMana(cid, getCreatureMaxMana(cid) -(setBonus).maxMana)
doCreatureAddMana(cid, -(setBonus).maxMana)
doRemoveCondition(cid, CONDITION_INFIGHT)
end
if (setBonus).condition ~= nil then
doRemoveCondition(cid, (setBonus[i]).condition)
end


setPlayerStorageValue(cid,storage,0)
end
end
end
return true
end

function onEquip(cid, item, slot)

for i=1, #sets do
if getPlayerStorageValue(cid, storage) < 1 then
if getPlayerSlotItem(cid, 1).itemid == sets[i][2] and getPlayerSlotItem(cid, 4).itemid == sets[i][3] and getPlayerSlotItem(cid, 7).itemid == sets[i][4] and getPlayerSlotItem(cid, 8).itemid == sets[i][5] then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, sets[i][1].." effects on.")
if (setBonus[i]).maxHealth ~= nil then
setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) +(setBonus[i]).maxHealth)
doCreatureAddHealth(cid, (setBonus[i]).maxHealth)
end
if (setBonus[i]).maxMana ~= nil then
setCreatureMaxMana(cid, getCreatureMaxMana(cid) +(setBonus[i]).maxMana)
doCreatureAddMana(cid, (setBonus[i]).maxMana)
end
if (setBonus[i]).condition ~= nil then
doAddCondition(cid, (setBonus[i]).condition)
end
setPlayerStorageValue(cid,storage,1)
end 
end
end
return true
end
 
Change 'setCreatureMaxHealth' to 'CreatureSetMaxHealth'
Hmm, gives me this error
Code:
Lua Script Error: [MoveEvents Interface]
data/movements/scripts/set system.lua:onEquip
data/movements/scripts/set system.lua:78: attempt to call global 'CreatureSetMax
Health' (a nil value)
stack traceback:
        [C]: in function 'CreatureSetMaxHealth'
        data/movements/scripts/set system.lua:78: in function <data/movements/sc
ripts/set system.lua:71>
 
Use metatables,

e.g
Code:
local player = Player(cid)
player:setMaxHealth(player:getMaxHealth() + (setBonus[i]).maxHealth)
player:setMaxMana(player:getMaxMana() + (setBonus[i]).maxMana)
 
Use metatables,

e.g
Code:
local player = Player(cid)
player:setMaxHealth(player:getMaxHealth() + (setBonus[i]).maxHealth)
player:setMaxMana(player:getMaxMana() + (setBonus[i]).maxMana)

Wasnt really sure how to do it..
Also changed some.
The script now works once when you put on the last piece, But the health does not go away after you remove a piece.
Code:
--Set System by Strack

local sets = {
--descripcion, helmet, body, legs, boots
[1] = {'Lava Set', 7900, 7899, 7894, 7891},
[2] = {'Ice Set', 7902, 7897, 7896, 7892},
[3] = {'Energy Set', 7901, 7898, 7895, 7893},
[4] = {'Tera Set', 7903, 7884, 7885, 7886}
}
local speed1 = createConditionObject(CONDITION_HASTE)
setConditionParam(speed1, CONDITION_PARAM_TICKS, -1)
setConditionParam(speed1, CONDITION_PARAM_SPEED, 10)

local speed2 = createConditionObject(CONDITION_HASTE)
setConditionParam(speed1, CONDITION_PARAM_TICKS, -1)
setConditionParam(speed1, CONDITION_PARAM_SPEED, 20)

local shield1 = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(shield1, CONDITION_PARAM_TICKS, -1)
setConditionParam(shield1, CONDITION_PARAM_SKILL_SHIELD, 2)

local shield2 = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(shield2, CONDITION_PARAM_TICKS, -1)
setConditionParam(shield2, CONDITION_PARAM_SKILL_SHIELD, 5)

--getPlayerSlotItem(cid, 1) --helmet
--getPlayerSlotItem(cid, 4) --armor
--getPlayerSlotItem(cid, 7) --legs
--getPlayerSlotItem(cid, 8) --boots

setBonus = { --- [] = {condition = , maxHealth = , maxMana = }
[1] = {maxHealth = 200, maxMana = 200, condition = speed1, typ = CONDITION_HASTE}, --Lava Set
[2] = {maxMana = 350, maxHealth = 100, condition = shield1}, --Ice Set
[3] = {maxMana = 200, maxHealth = 100, condition = speed2, typ = CONDITION_HASTE}, --Energy Set
[4] = {maxHealth = 300, condition = shield2} --Terra Set
}
local storage = 17181

function onDeEquip(cid, item, slot) 
for i=1, #sets do
if getPlayerStorageValue(cid, storage) > 0 then
if (slot == 1 and getPlayerSlotItem(cid, 4).itemid == sets[3] and getPlayerSlotItem(cid, 7).itemid == sets[4] and getPlayerSlotItem(cid, 8).itemid == sets[5])
or (slot == 4 and getPlayerSlotItem(cid, 1).itemid == sets[2] and getPlayerSlotItem(cid, 7).itemid == sets[4] and getPlayerSlotItem(cid, 8).itemid == sets[5])
or (slot == 7 and getPlayerSlotItem(cid, 1).itemid == sets[2] and getPlayerSlotItem(cid, 4).itemid == sets[3] and getPlayerSlotItem(cid, 8).itemid == sets[5])
or (slot == 8 and getPlayerSlotItem(cid, 1).itemid == sets[2] and getPlayerSlotItem(cid, 4).itemid == sets[3] and getPlayerSlotItem(cid, 7).itemid == sets[4]) then


doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, sets[1].." disabled.")
if (setBonus).maxHealth ~= nil then
local player = Player(cid)
player:setMaxHealth(player:getMaxHealth() + (setBonus[i]).maxHealth)
end
if (setBonus).maxMana ~= nil then
local player = Player(cid)
player:setMaxMana(player:getMaxMana() + (setBonus[i]).maxMana)
end
if (setBonus).condition ~= nil then
doRemoveCondition(cid, (setBonus[i]).condition)
end


setPlayerStorageValue(cid,storage,0)
end
end
end
return true
end

function onEquip(cid, item, slot)

for i=1, #sets do
if getPlayerStorageValue(cid, storage) < 1 then
if getPlayerSlotItem(cid, 1).itemid == sets[i][2] and getPlayerSlotItem(cid, 4).itemid == sets[i][3] and getPlayerSlotItem(cid, 7).itemid == sets[i][4] and getPlayerSlotItem(cid, 8).itemid == sets[i][5] then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, sets[i][1].." enabled.")
if (setBonus[i]).maxHealth ~= nil then
local player = Player(cid)
player:setMaxHealth(player:getMaxHealth() + (setBonus[i]).maxHealth)
end
if (setBonus[i]).maxMana ~= nil then
local player = Player(cid)
player:setMaxMana(player:getMaxMana() + (setBonus[i]).maxMana)
end
if (setBonus[i]).condition ~= nil then
doAddCondition(cid, (setBonus[i]).condition)
end
setPlayerStorageValue(cid,storage,1)
end 
end
end
return true
end
 
Code:
--Set System by Strack

local sets = {
--descripcion, helmet, body, legs, boots
    [1] = {'Lava Set', 7900, 7899, 7894, 7891},
    [2] = {'Ice Set', 7902, 7897, 7896, 7892},
    [3] = {'Energy Set', 7901, 7898, 7895, 7893},
    [4] = {'Tera Set', 7903, 7884, 7885, 7886}
}

local speed1 = Condition(CONDITION_HASTE)
speed1:setTicks(-1)
speed1:setParameter(CONDITION_PARAM_BUFF_SPELL, 1)
speed1:setParameter(CONDITION_PARAM_SUBID, 10)
speed1:setParameter(CONDITION_PARAM_SPEED, 10)

local speed2 = Condition(CONDITION_HASTE)
speed2:setTicks(-1)
speed2:setParameter(CONDITION_PARAM_BUFF_SPELL, 1)
speed2:setParameter(CONDITION_PARAM_SUBID, 11)
speed2:setParameter(CONDITION_PARAM_SPEED, 20)

local shield1 = Condition(CONDITION_ATTRIBUTES)
shield1:setTicks(-1)
shield1:setParameter(CONDITION_PARAM_BUFF_SPELL, 1)
shield1:setParameter(CONDITION_PARAM_SUBID, 12)
shield1:setParameter(CONDITION_PARAM_SKILL_SHIELD, 2)

local shield2 = Condition(CONDITION_ATTRIBUTES)
shield2:setTicks(-1)
shield2:setParameter(CONDITION_PARAM_BUFF_SPELL, 1)
shield2:setParameter(CONDITION_PARAM_SUBID, 13)
shield2:setParameter(CONDITION_PARAM_SKILL_SHIELD, 5)

--getPlayerSlotItem(cid, 1) --helmet
--getPlayerSlotItem(cid, 4) --armor
--getPlayerSlotItem(cid, 7) --legs
--getPlayerSlotItem(cid, 8) --boots

local setBonus = { --- [] = {condition = , maxHealth = , maxMana = }
    [1] = {maxHealth = 200, maxMana = 200, condition = speed1, typ = CONDITION_HASTE, sub = 10}, --Lava Set
    [2] = {maxMana = 350, maxHealth = 100, condition = shield1, typ = CONDITION_ATTRIBUTES, sub = 12}, --Ice Set
    [3] = {maxMana = 200, maxHealth = 100, condition = speed2, typ = CONDITION_HASTE, sub = 11}, --Energy Set
    [4] = {maxHealth = 300, condition = shield2, typ = CONDITION_ATTRIBUTES, sub = 13} --Terra Set
}

local storage = 17181

function onDeEquip(cid, item, slot)
    local player = Player(cid)
    for i = 1, #sets do
        if player:getStorageValue(storage) > 0 then
            if (slot == 1 and pushThing(player:getSlotItem(CONST_SLOT_ARMOR)).itemid == sets[i][3] and pushThing(player:getSlotItem(CONST_SLOT_LEGS)).itemid == sets[i][4] and pushThing(player:getSlotItem(CONST_SLOT_FEET)).itemid == sets[i][5]) or (slot == 4 and pushThing(player:getSlotItem(CONST_SLOT_HEAD)).itemid == sets[i][2] and pushThing(player:getSlotItem(CONST_SLOT_LEGS)).itemid == sets[i][4] and pushThing(player:getSlotItem(CONST_SLOT_FEET)).itemid == sets[i][5]) or (slot == 7 and pushThing(player:getSlotItem(CONST_SLOT_HEAD)).itemid == sets[i][2] and pushThing(player:getSlotItem(CONST_SLOT_ARMOR)).itemid == sets[i][3] and pushThing(player:getSlotItem(CONST_SLOT_FEET)).itemid == sets[i][5]) or (slot == 8 and pushThing(player:getSlotItem(CONST_SLOT_HEAD)).itemid == sets[i][2] and pushThing(player:getSlotItem(CONST_SLOT_ARMOR)).itemid == sets[i][3] and pushThing(player:getSlotItem(CONST_SLOT_LEGS)).itemid == sets[i][4]) then
                player:sendTextMessage(MESSAGE_INFO_DESCR, sets[i][1] .. " disabled.")
        
            if (setBonus[i]).maxHealth ~= nil then
                player:setMaxHealth(player:getMaxHealth() - (setBonus[i]).maxHealth)
                player:addHealth(-(setBonus[i]).maxHealth)
            end
        
            if (setBonus[i]).maxMana ~= nil then
                player:setMaxMana(player:getMaxMana() - (setBonus[i]).maxMana)
                player:addMana(-(setBonus[i]).maxMana)
            end
        
            if (setBonus[i]).condition ~= nil then
                player:removeCondition((setBonus[i]).typ, CONDITIONID_COMBAT, (setBonus[i]).sub)
            end

            player:setStorageValue(storage, 0)
            end
        end
    end
    return true
end

function onEquip(cid, item, slot)
    local player = Player(cid)
    for i = 1, #sets do
        if player:getStorageValue(storage) < 1 then
            if pushThing(player:getSlotItem(CONST_SLOT_HEAD)).itemid == sets[i][2] and pushThing(player:getSlotItem(CONST_SLOT_ARMOR)).itemid == sets[i][3] and pushThing(player:getSlotItem(CONST_SLOT_LEGS)).itemid == sets[i][4] and pushThing(player:getSlotItem(CONST_SLOT_FEET)).itemid == sets[i][5] then
                player:sendTextMessage(MESSAGE_INFO_DESCR, sets[i][1].." enabled.")
            
            if (setBonus[i]).maxHealth ~= nil then
                player:setMaxHealth(player:getMaxHealth() + (setBonus[i]).maxHealth)
                player:addHealth((setBonus[i]).maxHealth)
            end
        
            if (setBonus[i]).maxMana ~= nil then
                player:setMaxMana(player:getMaxMana() + (setBonus[i]).maxMana)
                player:addMana((setBonus[i]).maxMana)
            end
        
            if (setBonus[i]).condition ~= nil then
                player:addCondition((setBonus[i]).condition)
            end
        
            player:setStorageValue(storage, 1)
            end
        end
    end
    return true
end

Should work now :p
 
Back
Top