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

Lua Custom Ring doesn't sit in ring slot

Loth Gena

Roxeria 8.60 Developer
Joined
Feb 5, 2014
Messages
245
Reaction score
23
Location
UK
Hi all, using TFS 0.2.8 client 8.62.

The emerald bangle has a custom script that once put in the ring slot, will turn the player into a much stronger character (more hp, mana, skills, different outfit) and it uses money every second or so, once ran out of money OR removed from ring slot, the player turns back to normal.

BUT, when you try to put the bangle in the ring slot, it says you cannot place that item there and bangle stays in backpack, but the script still works! The player turns into that stronger character and it all works fine, apart from the bangle stays in backpack and you cannot turn it off (unless you ran out of money).

In Items.xml and movements.xml the bangle has a slot type "ring".

Here is the LUA of the script:

Code:
-- >> Small config section --
 
local outfitMale =
{
lookType = 12,
lookHead = 19,
lookBody = 79,
lookLegs = 3,
lookFeet = 81,
lookAddons = 0
}
 
local outfitFemale =
{
lookType = 12,
lookHead = 19,
lookBody = 53,
lookLegs = 92,
lookFeet = 79,
lookAddons = 0
}
 
local cointype = 2160 -- Id of the coin the spell will use (2148 = gold coin, 2152 = platinum coin, 2160 = crystal coin) --
local tbcw = 1500 -- coin wasting time interval (miliseconds) --
local ncws = 1 -- number of coins used up during time interval --
local ncni = 3 -- number of coins needed to trigger the transformation --
local stcn = 20 -- number of coins needed to execute script (must be higher than ncni value) --
local warn = 1 -- warns player when runing short on coins, 1 = yes --
local cwar = 20 -- number of coins that triggers the warnings --
 
local bmaineff = CONST_ME_YELLOW_RINGS
local bsecondeff = CONST_ME_BLOCKHIT
local bflingeff = CONST_ANI_SMALLHOLY
local blandeff = CONST_ME_HOLYAREA
local bringwaste = CONST_ME_FIREWORK_YELLOW
local bringabsorb = CONST_ME_MAGIC_GREEN
 
local gmaineff = CONST_ME_EXPLOSIONAREA
local gsecondeff = CONST_ME_FIREAREA
local gflingeff = CONST_ANI_FIRE
local glandeff = CONST_ME_FIREWORK_RED
local gringwaste = CONST_ME_FIREWORK_RED
local gringabsorb = CONST_ME_MAGIC_RED
 
-- Small config section << --
 
local condition1 = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition1, CONDITION_PARAM_TICKS, -1)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FIST, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FISHING, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_CLUB, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_SWORD, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_AXE, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_DISTANCE, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_SHIELD, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FISHING, 30)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAGICPOINTS, 50)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 130)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 150)
 
local condition2 = createConditionObject(CONDITION_HASTE)
setConditionParam(condition2, CONDITION_PARAM_TICKS, -1)
setConditionFormula(condition2, 2.5, 0, 3.0, 0)
 
function superform1(param)
    if param.crca == 1 then
 
        local pos = getCreaturePosition(param.cid)
        local sex = getPlayerSex(param.cid)
 
        local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
        local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
        local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
        local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
        local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
        local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
        if sex == 1 then
            doSendMagicEffect(pos, bmaineff)
            doSendMagicEffect(pos, bsecondeff)
 
            doSendDistanceShoot(pos, nha, bflingeff)
            doSendDistanceShoot(pos, sha, bflingeff)
            doSendDistanceShoot(pos, wha, bflingeff)
            doSendDistanceShoot(pos, eha, bflingeff)
            doSendDistanceShoot(pos, nwa, bflingeff)
            doSendDistanceShoot(pos, nea, bflingeff)
            doSendDistanceShoot(pos, sea, bflingeff)
            doSendDistanceShoot(pos, swa, bflingeff)
 
            doSendMagicEffect(nha, blandeff)
            doSendMagicEffect(sha, blandeff)
            doSendMagicEffect(wha, blandeff)
            doSendMagicEffect(eha, blandeff)
            doSendMagicEffect(nwa, blandeff)
            doSendMagicEffect(nea, blandeff)
            doSendMagicEffect(sea, blandeff)
            doSendMagicEffect(swa, blandeff)
 
            doSetCreatureOutfit(param.cid, outfitMale, -1)
        else
            doSendMagicEffect(pos, gmaineff)
            doSendMagicEffect(pos, gsecondeff)
 
            doSendDistanceShoot(pos, nha, gflingeff)
            doSendDistanceShoot(pos, sha, gflingeff)
            doSendDistanceShoot(pos, wha, gflingeff)
            doSendDistanceShoot(pos, eha, gflingeff)
            doSendDistanceShoot(pos, nwa, gflingeff)
            doSendDistanceShoot(pos, nea, gflingeff)
            doSendDistanceShoot(pos, sea, gflingeff)
            doSendDistanceShoot(pos, swa, gflingeff)
 
            doSendMagicEffect(nha, glandeff)
            doSendMagicEffect(sha, glandeff)
            doSendMagicEffect(wha, glandeff)
            doSendMagicEffect(eha, glandeff)
            doSendMagicEffect(nwa, glandeff)
            doSendMagicEffect(nea, glandeff)
            doSendMagicEffect(sea, glandeff)
            doSendMagicEffect(swa, glandeff)
            doSetCreatureOutfit(param.cid, outfitFemale, -1)
        end
 
        doAddCondition(param.cid, condition1)
        doAddCondition(param.cid, condition2)
 
        local mhp = getCreatureMaxHealth(param.cid)
        local mma = getPlayerMaxMana(param.cid)
        local chp = getCreatureHealth(param.cid)
        local cma = getPlayerMana(param.cid)
 
        local dhp = mhp - chp
        local dma = mma - cma   
 
        doPlayerRemoveItem(param.cid, cointype, ncni)
 
        param.crcb = 1
        param.sex = sex
        setPlayerStorageValue(param.cid, 50780, 1)
 
        addEvent(superform2, 1, param)
    end
end
 
function superform2(param)
    if param.crca == 1 and param.crcb == 1 and isCreature(param.cid) == TRUE and getPlayerStorageValue(param.cid, 50780) == 1 then
        local pos = getCreaturePosition(param.cid)
        doPlayerRemoveItem(param.cid, cointype, ncws)
        if param.sex == 1 then       
            doSendMagicEffect(pos, bringwaste)
            doSendMagicEffect(pos, bringabsorb)
        else
            doSendMagicEffect(pos, gringwaste)
            doSendMagicEffect(pos, gringabsorb)
        end
        local goldleft = getPlayerItemCount(param.cid, cointype)
        if goldleft < cwar and warn == 1 then
            doPlayerSendTextMessage(param.cid, MESSAGE_STATUS_CONSOLE_RED, "Coins left: " ..goldleft.. ".")
        end
        if goldleft < ncws then
            param.crca = 0
            param.crcb = 0
            setPlayerStorageValue(param.cid, 50780, 0)
            doPlayerSendTextMessage(param.cid, MESSAGE_EVENT_DEFAULT, "Your bangle has been destroyed!")
            
            local pos = getCreaturePosition(param.cid)
 
            local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
            local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
            local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
            local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
            local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
            local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
            local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
            local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
 
            doRemoveCondition(param.cid, CONDITION_OUTFIT)
            doRemoveCondition(param.cid, CONDITION_ATTRIBUTES)
            doRemoveCondition(param.cid, CONDITION_HASTE)
 
            if param.sex == 1 then
                doSendMagicEffect(pos, bmaineff)
                doSendMagicEffect(pos, bsecondeff)
 
                doSendDistanceShoot(pos, nha, bflingeff)
                doSendDistanceShoot(pos, sha, bflingeff)
                doSendDistanceShoot(pos, wha, bflingeff)
                doSendDistanceShoot(pos, eha, bflingeff)
                doSendDistanceShoot(pos, nwa, bflingeff)
                doSendDistanceShoot(pos, nea, bflingeff)
                doSendDistanceShoot(pos, sea, bflingeff)
                doSendDistanceShoot(pos, swa, bflingeff)
 
                doSendMagicEffect(nha, blandeff)
                doSendMagicEffect(sha, blandeff)
                doSendMagicEffect(wha, blandeff)
                doSendMagicEffect(eha, blandeff)
                doSendMagicEffect(nwa, blandeff)
                doSendMagicEffect(nea, blandeff)
                doSendMagicEffect(sea, blandeff)
                doSendMagicEffect(swa, blandeff)
            else
                doSendMagicEffect(pos, gmaineff)
                doSendMagicEffect(pos, gsecondeff)
 
                doSendDistanceShoot(pos, nha, gflingeff)
                doSendDistanceShoot(pos, sha, gflingeff)
                doSendDistanceShoot(pos, wha, gflingeff)
                doSendDistanceShoot(pos, eha, gflingeff)
                doSendDistanceShoot(pos, nwa, gflingeff)
                doSendDistanceShoot(pos, nea, gflingeff)
                doSendDistanceShoot(pos, sea, gflingeff)
                doSendDistanceShoot(pos, swa, gflingeff)
 
                doSendMagicEffect(nha, glandeff)
                doSendMagicEffect(sha, glandeff)
                doSendMagicEffect(wha, glandeff)
                doSendMagicEffect(eha, glandeff)
                doSendMagicEffect(nwa, glandeff)
                doSendMagicEffect(nea, glandeff)
                doSendMagicEffect(sea, glandeff)
                doSendMagicEffect(swa, glandeff)
            end
        else
            addEvent(superform2, tbcw, param)
        end
    end
 
end
 
function onEquip(cid, item, slot)
    local param = {cid = cid, item = item, slot = slot}
    local gold = getPlayerItemCount(cid, cointype)
    if gold > stcn then
        param.crca = 1
        addEvent(superform1, 1, param)
    end
end
 
function onDeEquip(cid, item, slot)
    if isPlayer(cid) and getPlayerStorageValue(cid, 50780) == 1 then
 
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doRemoveCondition(cid, CONDITION_ATTRIBUTES)
        doRemoveCondition(cid, CONDITION_HASTE)
 
        local pos = getCreaturePosition(cid)
        setPlayerStorageValue(cid, 50780, 0)
        local sex = getPlayerSex(cid)
 
        local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
        local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
        local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
        local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
        local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
        local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
        if sex == 1 then
            doSendMagicEffect(pos, bmaineff)
            doSendMagicEffect(pos, bsecondeff)
 
            doSendDistanceShoot(pos, nha, bflingeff)
            doSendDistanceShoot(pos, sha, bflingeff)
            doSendDistanceShoot(pos, wha, bflingeff)
            doSendDistanceShoot(pos, eha, bflingeff)
            doSendDistanceShoot(pos, nwa, bflingeff)
            doSendDistanceShoot(pos, nea, bflingeff)
            doSendDistanceShoot(pos, sea, bflingeff)
            doSendDistanceShoot(pos, swa, bflingeff)
 
            doSendMagicEffect(nha, blandeff)
            doSendMagicEffect(sha, blandeff)
            doSendMagicEffect(wha, blandeff)
            doSendMagicEffect(eha, blandeff)
            doSendMagicEffect(nwa, blandeff)
            doSendMagicEffect(nea, blandeff)
            doSendMagicEffect(sea, blandeff)
            doSendMagicEffect(swa, blandeff)
        else
            doSendMagicEffect(pos, gmaineff)
            doSendMagicEffect(pos, gsecondeff)
 
            doSendDistanceShoot(pos, nha, gflingeff)
            doSendDistanceShoot(pos, sha, gflingeff)
            doSendDistanceShoot(pos, wha, gflingeff)
            doSendDistanceShoot(pos, eha, gflingeff)
            doSendDistanceShoot(pos, nwa, gflingeff)
            doSendDistanceShoot(pos, nea, gflingeff)
            doSendDistanceShoot(pos, sea, gflingeff)
            doSendDistanceShoot(pos, swa, gflingeff)
 
            doSendMagicEffect(nha, glandeff)
            doSendMagicEffect(sha, glandeff)
            doSendMagicEffect(wha, glandeff)
            doSendMagicEffect(eha, glandeff)
            doSendMagicEffect(nwa, glandeff)
            doSendMagicEffect(nea, glandeff)
            doSendMagicEffect(sea, glandeff)
            doSendMagicEffect(swa, glandeff)
        end
    end
end

Any help will be appreciated, thank you!
 
Try adding "return true" to the end of the equip/deEquip functions.
 
Did you place the return true correctly?

Example:
Code:
function onEquip(cid, item, slot)

...
return true
end

function onDeEquip(cid, item, slot)

...
return true
end
 
As above asks, if you believe you've placed everything correctly, please post everything associated with the script this time, if it's still not fully functional.

items.xml -> emerald bangle, itemID and attributes.
movements.xml -> emerald bangle, equip & deEquip lines.
movements LUA file -> the entire Updated script.

We'll try our best to get you up and running.
 
Sorry for late reply, been caught up with work recently.
When i placed "return true" above "end", nothing happened, i couldn't put the bangle in the ring slot but the script worked.
When i placed "return true" below the first "end", still nothing happened
It was when i placed it below the second "end" i was able to put the bangle in the ring slot but the script did not work.

Here is the original lua script where you can see there is 2x "ends" after onEquip and onDeEquip which confused me
Code:
-- >> Small config section --
 
local outfitMale =
{
lookType = 12,
lookHead = 19,
lookBody = 79,
lookLegs = 3,
lookFeet = 81,
lookAddons = 0
}
 
local outfitFemale =
{
lookType = 12,
lookHead = 19,
lookBody = 53,
lookLegs = 92,
lookFeet = 79,
lookAddons = 0
}
 
local cointype = 2160 -- Id of the coin the spell will use (2148 = gold coin, 2152 = platinum coin, 2160 = crystal coin) --
local tbcw = 1500 -- coin wasting time interval (miliseconds) --
local ncws = 1 -- number of coins used up during time interval --
local ncni = 3 -- number of coins needed to trigger the transformation --
local stcn = 20 -- number of coins needed to execute script (must be higher than ncni value) --
local warn = 1 -- warns player when runing short on coins, 1 = yes --
local cwar = 20 -- number of coins that triggers the warnings --
 
local bmaineff = CONST_ME_YELLOW_RINGS
local bsecondeff = CONST_ME_BLOCKHIT
local bflingeff = CONST_ANI_SMALLHOLY
local blandeff = CONST_ME_HOLYAREA
local bringwaste = CONST_ME_FIREWORK_YELLOW
local bringabsorb = CONST_ME_MAGIC_GREEN
 
local gmaineff = CONST_ME_EXPLOSIONAREA
local gsecondeff = CONST_ME_FIREAREA
local gflingeff = CONST_ANI_FIRE
local glandeff = CONST_ME_FIREWORK_RED
local gringwaste = CONST_ME_FIREWORK_RED
local gringabsorb = CONST_ME_MAGIC_RED
 
-- Small config section << --
 
local condition1 = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition1, CONDITION_PARAM_TICKS, -1)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FIST, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FISHING, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_CLUB, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_SWORD, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_AXE, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_DISTANCE, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_SHIELD, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FISHING, 30)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAGICPOINTS, 50)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 130)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 150)
 
local condition2 = createConditionObject(CONDITION_HASTE)
setConditionParam(condition2, CONDITION_PARAM_TICKS, -1)
setConditionFormula(condition2, 2.5, 0, 3.0, 0)
 
function superform1(param)
    if param.crca == 1 then
 
        local pos = getCreaturePosition(param.cid)
        local sex = getPlayerSex(param.cid)
 
        local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
        local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
        local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
        local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
        local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
        local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
        if sex == 1 then
            doSendMagicEffect(pos, bmaineff)
            doSendMagicEffect(pos, bsecondeff)
 
            doSendDistanceShoot(pos, nha, bflingeff)
            doSendDistanceShoot(pos, sha, bflingeff)
            doSendDistanceShoot(pos, wha, bflingeff)
            doSendDistanceShoot(pos, eha, bflingeff)
            doSendDistanceShoot(pos, nwa, bflingeff)
            doSendDistanceShoot(pos, nea, bflingeff)
            doSendDistanceShoot(pos, sea, bflingeff)
            doSendDistanceShoot(pos, swa, bflingeff)
 
            doSendMagicEffect(nha, blandeff)
            doSendMagicEffect(sha, blandeff)
            doSendMagicEffect(wha, blandeff)
            doSendMagicEffect(eha, blandeff)
            doSendMagicEffect(nwa, blandeff)
            doSendMagicEffect(nea, blandeff)
            doSendMagicEffect(sea, blandeff)
            doSendMagicEffect(swa, blandeff)
 
            doSetCreatureOutfit(param.cid, outfitMale, -1)
        else
            doSendMagicEffect(pos, gmaineff)
            doSendMagicEffect(pos, gsecondeff)
 
            doSendDistanceShoot(pos, nha, gflingeff)
            doSendDistanceShoot(pos, sha, gflingeff)
            doSendDistanceShoot(pos, wha, gflingeff)
            doSendDistanceShoot(pos, eha, gflingeff)
            doSendDistanceShoot(pos, nwa, gflingeff)
            doSendDistanceShoot(pos, nea, gflingeff)
            doSendDistanceShoot(pos, sea, gflingeff)
            doSendDistanceShoot(pos, swa, gflingeff)
 
            doSendMagicEffect(nha, glandeff)
            doSendMagicEffect(sha, glandeff)
            doSendMagicEffect(wha, glandeff)
            doSendMagicEffect(eha, glandeff)
            doSendMagicEffect(nwa, glandeff)
            doSendMagicEffect(nea, glandeff)
            doSendMagicEffect(sea, glandeff)
            doSendMagicEffect(swa, glandeff)
            doSetCreatureOutfit(param.cid, outfitFemale, -1)
        end
 
        doAddCondition(param.cid, condition1)
        doAddCondition(param.cid, condition2)
 
        local mhp = getCreatureMaxHealth(param.cid)
        local mma = getPlayerMaxMana(param.cid)
        local chp = getCreatureHealth(param.cid)
        local cma = getPlayerMana(param.cid)
 
        local dhp = mhp - chp
        local dma = mma - cma   
 
        doPlayerRemoveItem(param.cid, cointype, ncni)
 
        param.crcb = 1
        param.sex = sex
        setPlayerStorageValue(param.cid, 50780, 1)
 
        addEvent(superform2, 1, param)
    end
end
 
function superform2(param)
    if param.crca == 1 and param.crcb == 1 and isCreature(param.cid) == TRUE and getPlayerStorageValue(param.cid, 50780) == 1 then
        local pos = getCreaturePosition(param.cid)
        doPlayerRemoveItem(param.cid, cointype, ncws)
        if param.sex == 1 then       
            doSendMagicEffect(pos, bringwaste)
            doSendMagicEffect(pos, bringabsorb)
        else
            doSendMagicEffect(pos, gringwaste)
            doSendMagicEffect(pos, gringabsorb)
        end
        local goldleft = getPlayerItemCount(param.cid, cointype)
        if goldleft < cwar and warn == 1 then
            doPlayerSendTextMessage(param.cid, MESSAGE_STATUS_CONSOLE_RED, "Coins left: " ..goldleft.. ".")
        end
        if goldleft < ncws then
            param.crca = 0
            param.crcb = 0
            setPlayerStorageValue(param.cid, 50780, 0)
            doPlayerSendTextMessage(param.cid, MESSAGE_EVENT_DEFAULT, "Your bangle has been destroyed!")
            
            local pos = getCreaturePosition(param.cid)
 
            local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
            local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
            local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
            local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
            local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
            local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
            local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
            local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
 
            doRemoveCondition(param.cid, CONDITION_OUTFIT)
            doRemoveCondition(param.cid, CONDITION_ATTRIBUTES)
            doRemoveCondition(param.cid, CONDITION_HASTE)
 
            if param.sex == 1 then
                doSendMagicEffect(pos, bmaineff)
                doSendMagicEffect(pos, bsecondeff)
 
                doSendDistanceShoot(pos, nha, bflingeff)
                doSendDistanceShoot(pos, sha, bflingeff)
                doSendDistanceShoot(pos, wha, bflingeff)
                doSendDistanceShoot(pos, eha, bflingeff)
                doSendDistanceShoot(pos, nwa, bflingeff)
                doSendDistanceShoot(pos, nea, bflingeff)
                doSendDistanceShoot(pos, sea, bflingeff)
                doSendDistanceShoot(pos, swa, bflingeff)
 
                doSendMagicEffect(nha, blandeff)
                doSendMagicEffect(sha, blandeff)
                doSendMagicEffect(wha, blandeff)
                doSendMagicEffect(eha, blandeff)
                doSendMagicEffect(nwa, blandeff)
                doSendMagicEffect(nea, blandeff)
                doSendMagicEffect(sea, blandeff)
                doSendMagicEffect(swa, blandeff)
            else
                doSendMagicEffect(pos, gmaineff)
                doSendMagicEffect(pos, gsecondeff)
 
                doSendDistanceShoot(pos, nha, gflingeff)
                doSendDistanceShoot(pos, sha, gflingeff)
                doSendDistanceShoot(pos, wha, gflingeff)
                doSendDistanceShoot(pos, eha, gflingeff)
                doSendDistanceShoot(pos, nwa, gflingeff)
                doSendDistanceShoot(pos, nea, gflingeff)
                doSendDistanceShoot(pos, sea, gflingeff)
                doSendDistanceShoot(pos, swa, gflingeff)
 
                doSendMagicEffect(nha, glandeff)
                doSendMagicEffect(sha, glandeff)
                doSendMagicEffect(wha, glandeff)
                doSendMagicEffect(eha, glandeff)
                doSendMagicEffect(nwa, glandeff)
                doSendMagicEffect(nea, glandeff)
                doSendMagicEffect(sea, glandeff)
                doSendMagicEffect(swa, glandeff)
            end
        else
            addEvent(superform2, tbcw, param)
        end
    end
 
end
 
function onEquip(cid, item, slot)
    local param = {cid = cid, item = item, slot = slot}
    local gold = getPlayerItemCount(cid, cointype)
    if gold > stcn then
        param.crca = 1
        addEvent(superform1, 1, param)
    end
end
 
function onDeEquip(cid, item, slot)
    if isPlayer(cid) and getPlayerStorageValue(cid, 50780) == 1 then
 
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doRemoveCondition(cid, CONDITION_ATTRIBUTES)
        doRemoveCondition(cid, CONDITION_HASTE)
 
        local pos = getCreaturePosition(cid)
        setPlayerStorageValue(cid, 50780, 0)
        local sex = getPlayerSex(cid)
 
        local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
        local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
        local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
        local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
        local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
        local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
        if sex == 1 then
            doSendMagicEffect(pos, bmaineff)
            doSendMagicEffect(pos, bsecondeff)
 
            doSendDistanceShoot(pos, nha, bflingeff)
            doSendDistanceShoot(pos, sha, bflingeff)
            doSendDistanceShoot(pos, wha, bflingeff)
            doSendDistanceShoot(pos, eha, bflingeff)
            doSendDistanceShoot(pos, nwa, bflingeff)
            doSendDistanceShoot(pos, nea, bflingeff)
            doSendDistanceShoot(pos, sea, bflingeff)
            doSendDistanceShoot(pos, swa, bflingeff)
 
            doSendMagicEffect(nha, blandeff)
            doSendMagicEffect(sha, blandeff)
            doSendMagicEffect(wha, blandeff)
            doSendMagicEffect(eha, blandeff)
            doSendMagicEffect(nwa, blandeff)
            doSendMagicEffect(nea, blandeff)
            doSendMagicEffect(sea, blandeff)
            doSendMagicEffect(swa, blandeff)
        else
            doSendMagicEffect(pos, gmaineff)
            doSendMagicEffect(pos, gsecondeff)
 
            doSendDistanceShoot(pos, nha, gflingeff)
            doSendDistanceShoot(pos, sha, gflingeff)
            doSendDistanceShoot(pos, wha, gflingeff)
            doSendDistanceShoot(pos, eha, gflingeff)
            doSendDistanceShoot(pos, nwa, gflingeff)
            doSendDistanceShoot(pos, nea, gflingeff)
            doSendDistanceShoot(pos, sea, gflingeff)
            doSendDistanceShoot(pos, swa, gflingeff)
 
            doSendMagicEffect(nha, glandeff)
            doSendMagicEffect(sha, glandeff)
            doSendMagicEffect(wha, glandeff)
            doSendMagicEffect(eha, glandeff)
            doSendMagicEffect(nwa, glandeff)
            doSendMagicEffect(nea, glandeff)
            doSendMagicEffect(sea, glandeff)
            doSendMagicEffect(swa, glandeff)
        end
    end
end

Here is movements.xml:

Code:
<!-- Rings -->
    <movevent event="Equip" itemid="2127" slot="ring" function="onEquipItem" script="chaosbangle.lua"/>
     <movevent event="DeEquip" itemid="2127" slot="ring" function="onDeEquipItem" script="chaosbangle.lua"/>

And here is items.xml:

Code:
<item id="2127" article="an" name="emerald bangle">
        <attribute key="weight" value="40"/>
        <attribute key="slotType" value="ring"/>
    </item>
 
Should be like this, tested on 8.6 and it worked.

Code:
-- >> Small config section --
 
local outfitMale =
{
lookType = 12,
lookHead = 19,
lookBody = 79,
lookLegs = 3,
lookFeet = 81,
lookAddons = 0
}
 
local outfitFemale =
{
lookType = 12,
lookHead = 19,
lookBody = 53,
lookLegs = 92,
lookFeet = 79,
lookAddons = 0
}
 
local cointype = 2160 -- Id of the coin the spell will use (2148 = gold coin, 2152 = platinum coin, 2160 = crystal coin) --
local tbcw = 1500 -- coin wasting time interval (miliseconds) --
local ncws = 1 -- number of coins used up during time interval --
local ncni = 3 -- number of coins needed to trigger the transformation --
local stcn = 20 -- number of coins needed to execute script (must be higher than ncni value) --
local warn = 1 -- warns player when runing short on coins, 1 = yes --
local cwar = 20 -- number of coins that triggers the warnings --
 
local bmaineff = CONST_ME_YELLOW_RINGS
local bsecondeff = CONST_ME_BLOCKHIT
local bflingeff = CONST_ANI_SMALLHOLY
local blandeff = CONST_ME_HOLYAREA
local bringwaste = CONST_ME_FIREWORK_YELLOW
local bringabsorb = CONST_ME_MAGIC_GREEN
 
local gmaineff = CONST_ME_EXPLOSIONAREA
local gsecondeff = CONST_ME_FIREAREA
local gflingeff = CONST_ANI_FIRE
local glandeff = CONST_ME_FIREWORK_RED
local gringwaste = CONST_ME_FIREWORK_RED
local gringabsorb = CONST_ME_MAGIC_RED
 
-- Small config section << --
 
local condition1 = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition1, CONDITION_PARAM_TICKS, -1)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FIST, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FISHING, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_CLUB, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_SWORD, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_AXE, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_DISTANCE, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_SHIELD, 30)
setConditionParam(condition1, CONDITION_PARAM_SKILL_FISHING, 30)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAGICPOINTS, 50)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 130)
setConditionParam(condition1, CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 150)
 
local condition2 = createConditionObject(CONDITION_HASTE)
setConditionParam(condition2, CONDITION_PARAM_TICKS, -1)
setConditionFormula(condition2, 2.5, 0, 3.0, 0)
 
function superform1(param)
    doSendMagicEffect(getPlayerPosition(param.cid),5)
    if param.crca == 1 then
 
        local pos = getCreaturePosition(param.cid)
        local sex = getPlayerSex(param.cid)
 
        local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
        local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
        local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
        local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
        local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
        local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
        if sex == 1 then
            doSendMagicEffect(pos, bmaineff)
            doSendMagicEffect(pos, bsecondeff)
 
            doSendDistanceShoot(pos, nha, bflingeff)
            doSendDistanceShoot(pos, sha, bflingeff)
            doSendDistanceShoot(pos, wha, bflingeff)
            doSendDistanceShoot(pos, eha, bflingeff)
            doSendDistanceShoot(pos, nwa, bflingeff)
            doSendDistanceShoot(pos, nea, bflingeff)
            doSendDistanceShoot(pos, sea, bflingeff)
            doSendDistanceShoot(pos, swa, bflingeff)
 
            doSendMagicEffect(nha, blandeff)
            doSendMagicEffect(sha, blandeff)
            doSendMagicEffect(wha, blandeff)
            doSendMagicEffect(eha, blandeff)
            doSendMagicEffect(nwa, blandeff)
            doSendMagicEffect(nea, blandeff)
            doSendMagicEffect(sea, blandeff)
            doSendMagicEffect(swa, blandeff)
 
            doSetCreatureOutfit(param.cid, outfitMale, -1)
        else
            doSendMagicEffect(pos, gmaineff)
            doSendMagicEffect(pos, gsecondeff)
 
            doSendDistanceShoot(pos, nha, gflingeff)
            doSendDistanceShoot(pos, sha, gflingeff)
            doSendDistanceShoot(pos, wha, gflingeff)
            doSendDistanceShoot(pos, eha, gflingeff)
            doSendDistanceShoot(pos, nwa, gflingeff)
            doSendDistanceShoot(pos, nea, gflingeff)
            doSendDistanceShoot(pos, sea, gflingeff)
            doSendDistanceShoot(pos, swa, gflingeff)
 
            doSendMagicEffect(nha, glandeff)
            doSendMagicEffect(sha, glandeff)
            doSendMagicEffect(wha, glandeff)
            doSendMagicEffect(eha, glandeff)
            doSendMagicEffect(nwa, glandeff)
            doSendMagicEffect(nea, glandeff)
            doSendMagicEffect(sea, glandeff)
            doSendMagicEffect(swa, glandeff)
            doSetCreatureOutfit(param.cid, outfitFemale, -1)
        end
 
        doAddCondition(param.cid, condition1)
        doAddCondition(param.cid, condition2)
 
        local mhp = getCreatureMaxHealth(param.cid)
        local mma = getPlayerMaxMana(param.cid)
        local chp = getCreatureHealth(param.cid)
        local cma = getPlayerMana(param.cid)
 
        local dhp = mhp - chp
        local dma = mma - cma  
 
        doPlayerRemoveItem(param.cid, cointype, ncni)
 
        param.crcb = 1
        param.sex = sex
        setPlayerStorageValue(param.cid, 50780, 1)
 
        addEvent(superform2, 1, param)
    end
end
 
function superform2(param)
    if param.crca == 1 and param.crcb == 1 and isCreature(param.cid) == TRUE and getPlayerStorageValue(param.cid, 50780) == 1 then
        local pos = getCreaturePosition(param.cid)
        doPlayerRemoveItem(param.cid, cointype, ncws)
        if param.sex == 1 then      
            doSendMagicEffect(pos, bringwaste)
            doSendMagicEffect(pos, bringabsorb)
        else
            doSendMagicEffect(pos, gringwaste)
            doSendMagicEffect(pos, gringabsorb)
        end
        local goldleft = getPlayerItemCount(param.cid, cointype)
        if goldleft < cwar and warn == 1 then
            doPlayerSendTextMessage(param.cid, MESSAGE_STATUS_CONSOLE_RED, "Coins left: " ..goldleft.. ".")
        end
        if goldleft < ncws then
            param.crca = 0
            param.crcb = 0
            setPlayerStorageValue(param.cid, 50780, 0)
            doPlayerSendTextMessage(param.cid, MESSAGE_EVENT_DEFAULT, "Your bangle has been destroyed!")
           
            local pos = getCreaturePosition(param.cid)
 
            local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
            local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
            local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
            local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
            local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
            local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
            local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
            local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
 
            doRemoveCondition(param.cid, CONDITION_OUTFIT)
            doRemoveCondition(param.cid, CONDITION_ATTRIBUTES)
            doRemoveCondition(param.cid, CONDITION_HASTE)
 
            if param.sex == 1 then
                doSendMagicEffect(pos, bmaineff)
                doSendMagicEffect(pos, bsecondeff)
 
                doSendDistanceShoot(pos, nha, bflingeff)
                doSendDistanceShoot(pos, sha, bflingeff)
                doSendDistanceShoot(pos, wha, bflingeff)
                doSendDistanceShoot(pos, eha, bflingeff)
                doSendDistanceShoot(pos, nwa, bflingeff)
                doSendDistanceShoot(pos, nea, bflingeff)
                doSendDistanceShoot(pos, sea, bflingeff)
                doSendDistanceShoot(pos, swa, bflingeff)
 
                doSendMagicEffect(nha, blandeff)
                doSendMagicEffect(sha, blandeff)
                doSendMagicEffect(wha, blandeff)
                doSendMagicEffect(eha, blandeff)
                doSendMagicEffect(nwa, blandeff)
                doSendMagicEffect(nea, blandeff)
                doSendMagicEffect(sea, blandeff)
                doSendMagicEffect(swa, blandeff)
            else
                doSendMagicEffect(pos, gmaineff)
                doSendMagicEffect(pos, gsecondeff)
 
                doSendDistanceShoot(pos, nha, gflingeff)
                doSendDistanceShoot(pos, sha, gflingeff)
                doSendDistanceShoot(pos, wha, gflingeff)
                doSendDistanceShoot(pos, eha, gflingeff)
                doSendDistanceShoot(pos, nwa, gflingeff)
                doSendDistanceShoot(pos, nea, gflingeff)
                doSendDistanceShoot(pos, sea, gflingeff)
                doSendDistanceShoot(pos, swa, gflingeff)
 
                doSendMagicEffect(nha, glandeff)
                doSendMagicEffect(sha, glandeff)
                doSendMagicEffect(wha, glandeff)
                doSendMagicEffect(eha, glandeff)
                doSendMagicEffect(nwa, glandeff)
                doSendMagicEffect(nea, glandeff)
                doSendMagicEffect(sea, glandeff)
                doSendMagicEffect(swa, glandeff)
            end
        else
            addEvent(superform2, tbcw, param)
        end
    end
 
end
 
function onEquip(cid, item, slot)
    local param = {cid = cid, item = item, slot = slot}
    local gold = getPlayerItemCount(cid, cointype)
    if gold > stcn then
        param.crca = 1
        addEvent(superform1, 1, param)
    end
    return true
end
 
function onDeEquip(cid, item, slot)
    if isPlayer(cid) and getPlayerStorageValue(cid, 50780) == 1 then
 
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doRemoveCondition(cid, CONDITION_ATTRIBUTES)
        doRemoveCondition(cid, CONDITION_HASTE)
 
        local pos = getCreaturePosition(cid)
        setPlayerStorageValue(cid, 50780, 0)
        local sex = getPlayerSex(cid)
 
        local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
        local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
        local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
        local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
 
        local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
        local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
 
        if sex == 1 then
            doSendMagicEffect(pos, bmaineff)
            doSendMagicEffect(pos, bsecondeff)
 
            doSendDistanceShoot(pos, nha, bflingeff)
            doSendDistanceShoot(pos, sha, bflingeff)
            doSendDistanceShoot(pos, wha, bflingeff)
            doSendDistanceShoot(pos, eha, bflingeff)
            doSendDistanceShoot(pos, nwa, bflingeff)
            doSendDistanceShoot(pos, nea, bflingeff)
            doSendDistanceShoot(pos, sea, bflingeff)
            doSendDistanceShoot(pos, swa, bflingeff)
 
            doSendMagicEffect(nha, blandeff)
            doSendMagicEffect(sha, blandeff)
            doSendMagicEffect(wha, blandeff)
            doSendMagicEffect(eha, blandeff)
            doSendMagicEffect(nwa, blandeff)
            doSendMagicEffect(nea, blandeff)
            doSendMagicEffect(sea, blandeff)
            doSendMagicEffect(swa, blandeff)
        else
            doSendMagicEffect(pos, gmaineff)
            doSendMagicEffect(pos, gsecondeff)
 
            doSendDistanceShoot(pos, nha, gflingeff)
            doSendDistanceShoot(pos, sha, gflingeff)
            doSendDistanceShoot(pos, wha, gflingeff)
            doSendDistanceShoot(pos, eha, gflingeff)
            doSendDistanceShoot(pos, nwa, gflingeff)
            doSendDistanceShoot(pos, nea, gflingeff)
            doSendDistanceShoot(pos, sea, gflingeff)
            doSendDistanceShoot(pos, swa, gflingeff)
 
            doSendMagicEffect(nha, glandeff)
            doSendMagicEffect(sha, glandeff)
            doSendMagicEffect(wha, glandeff)
            doSendMagicEffect(eha, glandeff)
            doSendMagicEffect(nwa, glandeff)
            doSendMagicEffect(nea, glandeff)
            doSendMagicEffect(sea, glandeff)
            doSendMagicEffect(swa, glandeff)
        end
    end
    return true
end

if it doesn't, an error on console would help, also make sure you have crystal coins in your inventory, I made that mistake the first time.
 
Unfortunately that didn't work either, the script works but the bangle cannot be put in the ring slot :/

I don't get any errors in console when using the bangle either, the only error i get which could be relevant is "Warning: [XMLSCHEMA] items.xml could not be validated against XSD". But this only comes up when i start the server, not sure if it has something to do with it - i got no problems with other items though
 
Edit: Nevermind, I'm honestly not even sure anymore.
Try removing the function bit from movements.xml perhaps?
Code:
<movevent event="Equip" itemid="2127" slot="ring" script="chaosbangle.lua"/>
<movevent event="DeEquip" itemid="2127" slot="ring" script="chaosbangle.lua"/>
 
Last edited:
Nope still nothing! i have no idea why it doesn't want to work for me... It worked on a 8.21 client with an older TFS
 
Back
Top