Item that spreads light

tokenzz

:thinking:
Joined
Feb 2, 2013
Messages
783
Best answers
2
Reaction score
313
Hiho,

I've got a question why the following code doesn't work. Might be an issue related to what I've typed in movements.xml.

Source: OTServ 0.6.3 (similar to OTHire)

Code:
local light = createConditionObject(CONDITION_LIGHT)
setConditionParam(light, CONDITION_PARAM_LIGHT_LEVEL, 10)
setConditionParam(light, CONDITION_PARAM_LIGHT_COLOR, 215)

function onEquip(cid, item, slot)
if (item.id == 2642) then
doAddCondition(cid, light)
return false
end
end
what should I write in movements.xml + what am I missing?

Kind regards,

t0kenz

NOTE: Doesn't give me an error in the console.
 
Last edited:

Codex NG

Recurrent Flamer
Joined
Jul 24, 2015
Messages
2,998
Best answers
11
Reaction score
1,530
Code:
CONDITION_PARAM_TICKS
Using 1.2 code as an example
Code:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

local condition = Condition(CONDITION_LIGHT)
condition:setParameter(CONDITION_PARAM_LIGHT_LEVEL, 8)
condition:setParameter(CONDITION_PARAM_LIGHT_COLOR, 215)
condition:setParameter(CONDITION_PARAM_TICKS, (11 * 60 + 35) * 1000)
combat:setCondition(condition)

function onCastSpell(creature, variant)
    return combat:execute(creature, variant)
end
In this case combat is just to execute the special effects, where as condition is used to apply the expected result.
 
OP
tokenzz

tokenzz

:thinking:
Joined
Feb 2, 2013
Messages
783
Best answers
2
Reaction score
313
Code:
CONDITION_PARAM_TICKS
Is that required, or can I simply ignore it? The item is meant to have no time limit. Or should I to make it infinite just specify a ridiculously high number?
 
OP
tokenzz

tokenzz

:thinking:
Joined
Feb 2, 2013
Messages
783
Best answers
2
Reaction score
313
Code:
setConditionParam(light, CONDITION_PARAM_TICKS, -1) -- infinite time
Ty. Is the rest fine?

I believe my movevent is the issue i'm having.

Code:
    <movevent event="Equip" itemid="2642" slot="feet" function="onEquipItem" />
 <movevent event="DeEquip" itemid="2642" slot="feet" function="onDeEquipItem" />
 

Codex NG

Recurrent Flamer
Joined
Jul 24, 2015
Messages
2,998
Best answers
11
Reaction score
1,530
Code:
local light = createConditionObject(CONDITION_LIGHT)
setConditionParam(light, CONDITION_PARAM_LIGHT_LEVEL, 10)
setConditionParam(light, CONDITION_PARAM_LIGHT_COLOR, 215)
setConditionParam(light, CONDITION_PARAM_TICKS, -1)

function onEquip(cid, item, slot)
    if (item.itemid == 2642) then
        doAddCondition(cid, light)
        return true
    end
end
 
OP
tokenzz

tokenzz

:thinking:
Joined
Feb 2, 2013
Messages
783
Best answers
2
Reaction score
313
Code:
local light = createConditionObject(CONDITION_LIGHT)
setConditionParam(light, CONDITION_PARAM_LIGHT_LEVEL, 10)
setConditionParam(light, CONDITION_PARAM_LIGHT_COLOR, 215)
setConditionParam(light, CONDITION_PARAM_TICKS, -1)

function onEquip(cid, item, slot)
    if (item.itemid == 2642) then
        doAddCondition(cid, light)
        return true
    end
end
Should the movevent.xml events work?
 

Codex NG

Recurrent Flamer
Joined
Jul 24, 2015
Messages
2,998
Best answers
11
Reaction score
1,530
lightboots.lua
Code:
local light = createConditionObject(CONDITION_LIGHT)
setConditionParam(light, CONDITION_PARAM_LIGHT_LEVEL, 10)
setConditionParam(light, CONDITION_PARAM_LIGHT_COLOR, 215)
setConditionParam(light, CONDITION_PARAM_TICKS, -1)

function onEquip(cid, item, slot)
    if (item.itemid == 2642) then
        doAddCondition(cid, light)
        return true
    end
end

function onDeEquip(cid, item, slot)
    if (item.itemid == 2642) then
        if hasCondition(cid, CONDITION_LIGHT) then
             doRemoveCondition(cid, light)
        end
    end
    return true
end
Code:
<movevent event="Equip" itemid="2642" slot="feet" script="lightboots.lua" />
<movevent event="DeEquip" itemid="2642" slot="feet" script="lightboots.lua" />
 
OP
tokenzz

tokenzz

:thinking:
Joined
Feb 2, 2013
Messages
783
Best answers
2
Reaction score
313
lightboots.lua
Code:
local light = createConditionObject(CONDITION_LIGHT)
setConditionParam(light, CONDITION_PARAM_LIGHT_LEVEL, 10)
setConditionParam(light, CONDITION_PARAM_LIGHT_COLOR, 215)
setConditionParam(light, CONDITION_PARAM_TICKS, -1)

function onEquip(cid, item, slot)
    if (item.itemid == 2642) then
        doAddCondition(cid, light)
        return true
    end
end

function onDeEquip(cid, item, slot)
    if (item.itemid == 2642) then
        if hasCondition(cid, CONDITION_LIGHT) then
             doRemoveCondition(cid, light)
        end
    end
    return true
end
Code:
<movevent event="Equip" itemid="2642" slot="feet" script="lightboots.lua" />
<movevent event="DeEquip" itemid="2642" slot="feet" script="lightboots.lua" />

Thank you :)

-- Solved, feel free to close!
 
OP
tokenzz

tokenzz

:thinking:
Joined
Feb 2, 2013
Messages
783
Best answers
2
Reaction score
313
Just one issue. When I deequip the item, the condition state isn't removed. Tried fixing it myself but without any luck
 

Codex NG

Recurrent Flamer
Joined
Jul 24, 2015
Messages
2,998
Best answers
11
Reaction score
1,530
Just one issue. When I deequip the item, the condition state isn't removed. Tried fixing it myself but without any luck
change this
Code:
 doRemoveCondition(cid, light)
to
Code:
doRemoveCondition(cid, CONDITION_LIGHT)
My bad, I am guessing most of the time when i write this stuff, but that should work :p
 
OP
tokenzz

tokenzz

:thinking:
Joined
Feb 2, 2013
Messages
783
Best answers
2
Reaction score
313
change this
Code:
 doRemoveCondition(cid, light)
to
Code:
doRemoveCondition(cid, CONDITION_LIGHT)
My bad, I am guessing most of the time when i write this stuff, but that should work :p
yeah finally figured it out, but thanks for answering anyhow. Might solve the issue for others reading this topic.
 
Top