bpm91
Intermediate OT User
- Joined
- May 23, 2019
- Messages
- 931
- Solutions
- 7
- Reaction score
- 127
- Location
- Brazil
- YouTube
- caruniawikibr
local drunk = Condition(CONDITION_DRUNK)
drunk:setParameter(CONDITION_PARAM_TICKS, 60000)
local poison = Condition(CONDITION_POISON)
poison:setParameter(CONDITION_PARAM_DELAYED, true)
poison:setParameter(CONDITION_PARAM_MINVALUE, -50)
poison:setParameter(CONDITION_PARAM_MAXVALUE, -120)
poison:setParameter(CONDITION_PARAM_STARTVALUE, -5)
poison:setParameter(CONDITION_PARAM_TICKINTERVAL, 4000)
poison:setParameter(CONDITION_PARAM_FORCEUPDATE, true)
local fluidMessage = {
[FLUID_BEER] = "Aah...",
[FLUID_SLIME] = "Urgh!",
[FLUID_LEMONADE] = "Mmmh.",
[FLUID_MANA] = "Aaaah...",
[FLUID_LIFE] = "Aaaah...",
[FLUID_OIL] = "Urgh!",
[FLUID_URINE] = "Urgh!",
[FLUID_WINE] = "Aah...",
[FLUID_MUD] = "Urgh!",
[FLUID_RUM] = "Aah...",
[FLUID_MEAD] = "Aaaah..."
}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
local targetItemType = ItemType(target.itemid)
if targetItemType and targetItemType:isFluidContainer() then
if target.type == FLUID_NONE and item.type ~= FLUID_NONE then
target:transform(target:getId(), item.type)
item:transform(item:getId(), FLUID_NONE)
return true
elseif target.type ~= FLUID_NONE and item.type == FLUID_NONE then
item:transform(item:getId(), target.type)
target:transform(target:getId(), FLUID_NONE)
return true
end
end
if target.itemid == 1 then
if item.type == FLUID_NONE then
player:sendTextMessage(MESSAGE_STATUS_SMALL, "It is empty.")
elseif target.uid == player.uid then
if table.contains({FLUID_BEER, FLUID_WINE, FLUID_MEAD}, item.type) then
player:addCondition(drunk)
elseif item.type == FLUID_SLIME then
player:addCondition(poison)
elseif item.type == FLUID_MANA then
player:addMana(math.random(50, 150))
fromPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
elseif item.type == FLUID_LIFE then
player:addHealth(60)
fromPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
end
player:say(fluidMessage[item.type] or "Gulp.", TALKTYPE_MONSTER_SAY)
item:transform(item:getId(), FLUID_NONE)
else
Game.createItem(2016, item.type, toPosition):decay()
item:transform(item:getId(), FLUID_NONE)
end
else
local fluidSource = targetItemType and targetItemType:getFluidSource() or FLUID_NONE
if fluidSource ~= FLUID_NONE then
item:transform(item:getId(), fluidSource)
elseif table.contains(distillery, target.itemid) then
local tmp = distillery[target.itemid]
if tmp then
item:transform(item:getId(), FLUID_NONE)
else
player:sendCancelMessage("You have to process the bunch into the distillery to get rum.")
end
elseif item.type == FLUID_NONE then
player:sendTextMessage(MESSAGE_STATUS_SMALL, "It is empty.")
else
if toPosition.x == CONTAINER_POSITION then
toPosition = player:getPosition()
end
Game.createItem(2016, item.type, toPosition):decay()
item:transform(item:getId(), FLUID_NONE)
end
end
return true
end
Are you sure that you changed the file? Because the file that you replied on last are not modified.no work :/
Lua:local drunk = Condition(CONDITION_DRUNK) drunk:setParameter(CONDITION_PARAM_TICKS, 60000) local poison = Condition(CONDITION_POISON) poison:setParameter(CONDITION_PARAM_DELAYED, true) poison:setParameter(CONDITION_PARAM_MINVALUE, -50) poison:setParameter(CONDITION_PARAM_MAXVALUE, -120) poison:setParameter(CONDITION_PARAM_STARTVALUE, -5) poison:setParameter(CONDITION_PARAM_TICKINTERVAL, 4000) poison:setParameter(CONDITION_PARAM_FORCEUPDATE, true) local fluidMessage = { [FLUID_BEER] = "Aah...", [FLUID_SLIME] = "Urgh!", [FLUID_LEMONADE] = "Mmmh.", [FLUID_MANA] = "Aaaah...", [FLUID_LIFE] = "Aaaah...", [FLUID_OIL] = "Urgh!", [FLUID_URINE] = "Urgh!", [FLUID_WINE] = "Aah...", [FLUID_MUD] = "Urgh!", [FLUID_RUM] = "Aah...", [FLUID_MEAD] = "Aaaah..." } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local targetItemType = ItemType(target.itemid) if targetItemType and targetItemType:isFluidContainer() then if target.type == FLUID_NONE and item.type ~= FLUID_NONE then target:transform(target:getId(), item.type) item:transform(item:getId(), FLUID_NONE) return true elseif target.type ~= FLUID_NONE and item.type == FLUID_NONE then item:transform(item:getId(), target.type) target:transform(target:getId(), FLUID_NONE) return true end end if target.itemid == 1 then if item.type == FLUID_NONE then player:sendTextMessage(MESSAGE_STATUS_SMALL, "It is empty.") elseif target.uid == player.uid then if table.contains({FLUID_BEER, FLUID_WINE, FLUID_MEAD}, item.type) then player:addCondition(drunk) elseif item.type == FLUID_SLIME then player:addCondition(poison) elseif item.type == FLUID_MANA then player:addMana(math.random(50, 150)) fromPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE) elseif item.type == FLUID_LIFE then player:addHealth(60) fromPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE) end player:say(fluidMessage[item.type] or "Gulp.", TALKTYPE_MONSTER_SAY) item:transform(item:getId(), FLUID_NONE) else Game.createItem(2016, item.type, toPosition):decay() item:transform(item:getId(), FLUID_NONE) end else local fluidSource = targetItemType and targetItemType:getFluidSource() or FLUID_NONE if fluidSource ~= FLUID_NONE then item:transform(item:getId(), fluidSource) elseif table.contains(distillery, target.itemid) then local tmp = distillery[target.itemid] if tmp then item:transform(item:getId(), FLUID_NONE) else player:sendCancelMessage("You have to process the bunch into the distillery to get rum.") end elseif item.type == FLUID_NONE then player:sendTextMessage(MESSAGE_STATUS_SMALL, "It is empty.") else if toPosition.x == CONTAINER_POSITION then toPosition = player:getPosition() end Game.createItem(2016, item.type, toPosition):decay() item:transform(item:getId(), FLUID_NONE) end end return true end
I will try to check later to be sure. But I think you can check it by yourself:it worked, I think I was on the wrong line, could you tell me how I can make the water POT can throw liquid out and in? this gray POT we used to trap in the old days?View attachment 67596
Did you add it?i no have action to id 2562 :/
Yes, you can rename your modified fluids.lua file (ex: mana_fluids.lua), then go to actions.xml and on vials ID o change the script name to the new one.I realized now that I can't use this fluids script for mana fluid and life fluid, because all items that are containers are disappearing along with them, how can I make a script just for mana and life?
<action itemid="1386" script="other/teleport.lua" />
<action itemid="3678" script="other/teleport.lua" />
<action fromid="2376" toid="2404" script="other/destroy.lua" />
<action fromid="2406" toid="2419" script="other/destroy.lua" />
<action fromid="2421" toid="2453" script="other/destroy.lua" />
<action fromid="2005" toid="2009" script="other/mana_fluids.lua" />
<action fromid="2011" toid="2015" script="other/fluids.lua" />
<action itemid="2562" script="other/fluids.lua" />
<action itemid="2023" script="other/fluids.lua" />
<action itemid="1775" script="other/fluids.lua" />
<action fromid="2031" toid="2034" script="other/fluids.lua" />
<action fromid="2574" toid="2577" script="other/fluids.lua" />
<action fromid="5792" toid="5797" script="other/die.lua" />
<action itemid="2692" script="other/createbread.lua" />
<action itemid="2694" script="other/createbread.lua" />
<action fromid="5303" toid="5304" script="other/windows.lua" />
you have to link the pot id to your mana/life fluids. example, my fluids are located in others/fluids.luaI have fluids 1 and fluids 2, fluids 1 are the containers, but they don't have a splash effect, throw liquid on the floor,
fluid 2 are manafluid and life fluid, I would like to add the functions of
hit the floor, and not be able to use it on another player, if you use it, he will also hit the floor
<action itemid="2562" script="other/fluids.lua"/>
Quick fix:I think I'm going to need a new script for the fluids, because for example, in the old version, the fluids worked like this, you could use them on the floor if they fell,
you couldn't use it on another player (they fall to the ground when trying to use it on another player) but mine doesn't do any of that. this goes for the containers script too, they are not throwing the liquids on the floor
View attachment 67599
when trying to throw the liquid on the floor this message appears
local distillery = {[5513] = 5469, [5514] = 5470}
local fluidSource = targetItemType and targetItemType:getFluidSource() or FLUID_NONE
if fluidSource ~= FLUID_NONE then
item:transform(item:getId(), fluidSource)
elseif item.type == FLUID_NONE then
player:sendTextMessage(MESSAGE_STATUS_SMALL, "It is empty.")
else
if toPosition.x == CONTAINER_POSITION then
toPosition = player:getPosition()
end
Game.createItem(2016, item.type, toPosition):decay()
item:transform(item:getId(), FLUID_NONE)
end
is ther a way to set a delay of 1 sec for spells after use manafluid?Quick fix:
define the line below on your fluids.lua
Lua:local distillery = {[5513] = 5469, [5514] = 5470}
Explanation:
This can be solved by making a check on this code and the error that you printed. I followed the error message: fluids.lua:65 (the error is on fluids.lua on line 65)
The line 65 calls table.contains method which is defined on global.lua:84 and the error message says "bad argument #1 to 'pairs' (table expected, got nil)". On table.contains the "pairs" is the first argument.
Looking on call of table.contains on fluids.lua:65 the first argument is "distillery" which is nill. So here are the source of the problem: distillery is nill.
Checking on fluids.lua I found that the distillery is not defined. I go to the forgottenserver main branch and found the original fluids.lua has a definition of "distillery".
The right solution on my point of view:
As it is a downgrade and probably you are not using this "distillery" I would remove the entire elseif block which starts on line 65 and the code would be:
Lua:local fluidSource = targetItemType and targetItemType:getFluidSource() or FLUID_NONE if fluidSource ~= FLUID_NONE then item:transform(item:getId(), fluidSource) elseif item.type == FLUID_NONE then player:sendTextMessage(MESSAGE_STATUS_SMALL, "It is empty.") else if toPosition.x == CONTAINER_POSITION then toPosition = player:getPosition() end Game.createItem(2016, item.type, toPosition):decay() item:transform(item:getId(), FLUID_NONE) end
local drunk = Condition(CONDITION_DRUNK)
drunk:setParameter(CONDITION_PARAM_TICKS, 60000)
local poison = Condition(CONDITION_POISON)
poison:setParameter(CONDITION_PARAM_DELAYED, true)
poison:setParameter(CONDITION_PARAM_MINVALUE, -50)
poison:setParameter(CONDITION_PARAM_MAXVALUE, -120)
poison:setParameter(CONDITION_PARAM_STARTVALUE, -5)
poison:setParameter(CONDITION_PARAM_TICKINTERVAL, 4000)
poison:setParameter(CONDITION_PARAM_FORCEUPDATE, true)
local fluidMessage = {
[2] = 'Aaaah...',
[3] = 'Aah...',
[4] = 'Urgh!',
[5] = 'Mmmh.',
[7] = 'Aaaah...',
[10] = 'Glup.',
[11] = 'Urgh!',
[13] = 'Urgh!',
[15] = 'Aah...',
[19] = 'Urgh!',
[43] = 'Aaaah...'
}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
local targetType = ItemType(target.itemid)
if item.actionid == 2023 then
player:sendTextMessage(MESSAGE_STATUS_SMALL, '2')
destination = Position(32791, 32332, 10)
player:teleportTo(destination)
player:say('Muahahahaha..', TALKTYPE_MONSTER_SAY, false, player)
fromPosition:sendMagicEffect(CONST_ME_DRAWBLOOD)
destination:sendMagicEffect(CONST_ME_MORTAREA)
end
if targetType:isFluidContainer() then
if target.type == 0 and item.type ~= 0 then
target:transform(target.itemid, item.type)
item:transform(item.itemid, 0)
return true
elseif target.type ~= 0 and item.type == 0 then
target:transform(target.itemid, 0)
item:transform(item.itemid, target.type)
return true
end
end
if target.itemid == 1 then
if item.type == 0 then
player:sendTextMessage(MESSAGE_STATUS_SMALL, 'It is empty.')
elseif target.uid == player.uid then
if isInArray({3, 15, 43}, item.type) then
player:addCondition(drunk)
elseif item.type == 4 then
player:addCondition(poison)
doSendMagicEffect(toPosition, CONST_ME_GREEN_RINGS)
elseif item.type == 7 then
player:addMana(math.random(50, 150))
doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
elseif item.type == 2 then
player:addHealth(60)
doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
end
player:say(fluidMessage[item.type] or 'Gulp.', TALKTYPE_MONSTER_SAY)
item:transform(7490, 0)
else
local pool = Game.createItem(2016, item.type, toPosition)
if pool then
pool:decay()
if item.type == 1 then
checkWallArito(pool, toPosition)
end
end
item:transform(item.itemid, 0)
end
else
local fluidSource = targetType:getFluidSource()
if fluidSource ~= 0 then
item:transform(item.itemid, fluidSource)
elseif item.type == 0 then
player:sendTextMessage(MESSAGE_STATUS_SMALL, 'It is empty.')
else
if target.actionid == 2023 then
destination = Position(32791, 32332, 10)
player:teleportTo(destination)
player:say('Muahahahaha..', TALKTYPE_MONSTER_SAY, false, player)
fromPosition:sendMagicEffect(CONST_ME_DRAWBLOOD)
destination:sendMagicEffect(CONST_ME_MORTAREA)
else
if toPosition.x == CONTAINER_POSITION then
toPosition = player:getPosition()
end
local pool = Game.createItem(2016, item.type, toPosition)
if pool then
pool:decay()
if item.type == 1 then
checkWallArito(pool, toPosition)
end
end
end
item:transform(item.itemid, 0)
end
end
return true
end
local berserk = Condition(CONDITION_ATTRIBUTES)
berserk:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
berserk:setParameter(CONDITION_PARAM_SKILL_MELEE, 5)
berserk:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10)
berserk:setParameter(CONDITION_PARAM_BUFF_SPELL, true)
local mastermind = Condition(CONDITION_ATTRIBUTES)
mastermind:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
mastermind:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, 3)
mastermind:setParameter(CONDITION_PARAM_BUFF_SPELL, true)
local bullseye = Condition(CONDITION_ATTRIBUTES)
bullseye:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
bullseye:setParameter(CONDITION_PARAM_SKILL_DISTANCE, 5)
bullseye:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10)
bullseye:setParameter(CONDITION_PARAM_BUFF_SPELL, true)
local antidote = Combat()
antidote:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
antidote:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
antidote:setParameter(COMBAT_PARAM_DISPEL, CONDITION_POISON)
antidote:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
antidote:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
local exhaust = Condition(CONDITION_EXHAUST_HEAL)
exhaust:setParameter(CONDITION_PARAM_TICKS, (configManager.getNumber(configKeys.EX_ACTIONS_DELAY_INTERVAL) - 1000))
-- 1000 - 100 due to exact condition timing. -100 doesn't hurt us, and players don't have reminding ~50ms exhaustion.
local potions = {
[6558] = {transform = {id = {7588, 7589}}, effect = CONST_ME_DRAWBLOOD},
[7439] = {condition = berserk, vocations = {4, 8}, effect = CONST_ME_MAGIC_RED,
description = "Only knights may drink this potion.", text = "You feel stronger."},
[7440] = {condition = mastermind, vocations = {1, 2, 5, 6}, effect = CONST_ME_MAGIC_BLUE,
description = "Only sorcerers and druids may drink this potion.", text = "You feel smarter."},
[7443] = {condition = bullseye, vocations = {3, 7}, effect = CONST_ME_MAGIC_GREEN,
description = "Only paladins may drink this potion.", text = "You feel more accurate."},
[7588] = {health = {250, 350}, vocations = {3, 4, 7, 8}, level = 50, flask = 7634,
description = "Only knights and paladins of level 50 or above may drink this fluid."},
[7589] = {mana = {115, 185}, vocations = {1, 2, 3, 5, 6, 7}, level = 50, flask = 7634,
description = "Only sorcerers, druids and paladins of level 50 or above may drink this fluid."},
[7590] = {mana = {150, 250}, vocations = {1, 2, 5, 6}, level = 80, flask = 7635,
description = "Only druids and sorcerers of level 80 or above may drink this fluid."},
[7591] = {health = {425, 575}, vocations = {4, 8}, level = 80, flask = 7635,
description = "Only knights of level 80 or above may drink this fluid."},
[7618] = {health = {125, 175}, flask = 7636},
[7620] = {mana = {75, 125}, flask = 7636},
[8472] = {health = {250, 350}, mana = {100, 200}, vocations = {3, 7}, level = 80, flask = 7635,
description = "Only paladins of level 80 or above may drink this fluid."},
[8473] = {health = {650, 850}, vocations = {4, 8}, level = 130, flask = 7635,
description = "Only knights of level 130 or above may drink this fluid."},
[8474] = {combat = antidote, flask = 7636},
[8704] = {health = {60, 90}, flask = 7636},
[26029] = {mana = {425, 575}, vocations = {1, 2, 5, 6}, level = 130, flask = 7635,
description = "Only druids and sorcerers of level 130 or above may drink this fluid."},
[26030] = {health = {420, 580}, mana = {250, 350}, vocations = {3, 7}, level = 130, flask = 7635,
description = "Only paladins of level 130 or above may drink this fluid."},
[26031] = {health = {875, 1125}, vocations = {4, 8}, level = 200, flask = 7635,
description = "Only knights of level 200 or above may drink this fluid."}
}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
if type(target) == "userdata" and not target:isPlayer() then
return false
end
local potion = potions[item:getId()]
if potion.level and player:getLevel() < potion.level or potion.vocations and not table.contains(potion.vocations, player:getVocation():getBase():getId()) and not (player:getGroup():getId() >= 2) then
player:say(potion.description, TALKTYPE_MONSTER_SAY)
return true
end
if player:getCondition(CONDITION_EXHAUST_HEAL) then
player:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_YOUAREEXHAUSTED))
return true
end
if potion.health or potion.mana or potion.combat then
if potion.health then
doTargetCombatHealth(0, target, COMBAT_HEALING, potion.health[1], potion.health[2], CONST_ME_MAGIC_BLUE)
end
if potion.mana then
doTargetCombatMana(0, target, potion.mana[1], potion.mana[2], CONST_ME_MAGIC_BLUE)
end
if potion.combat then
potion.combat:execute(target, Variant(target:getId()))
end
player:addAchievementProgress('Potion Addict', 100000)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
player:addItem(potion.flask, 1)
player:addCondition(exhaust)
player:setStorageValue(38412, player:getStorageValue(38412)+1)
end
if potion.condition then
player:addCondition(potion.condition)
player:say(potion.text, TALKTYPE_MONSTER_SAY)
player:getPosition():sendMagicEffect(potion.effect)
end
if potion.transform then
item:transform(potion.transform.id[math.random(#potion.transform.id)])
item:getPosition():sendMagicEffect(potion.effect)
return true
end
if not configManager.getBoolean(configKeys.REMOVE_POTION_CHARGES) then
return true
end
local client = player:getClient()
if client.version > 1140 then
player:updateSupplyTracker(item)
end
item:remove(1)
return true
end