local DISTILLERY = {5513, 5514, 5469, 5470}
local ITEM_RUM_FLASK = 5553
local ITEM_POOL = 2016
local TYPE_EMPTY = 0
local TYPE_WATER = 1
local TYPE_BLOOD = 2
local TYPE_BEER = 3
local TYPE_SLIME = 4
local TYPE_MANA_FLUID = 7
local TYPE_LIFE_FLUID = 10
local TYPE_OIL = 11
local TYPE_WINE = 15
local TYPE_MUD = 19
local TYPE_LAVA = 26
local TYPE_RUM = 27
local TYPE_SWAMP = 28
local oilLamps = {[2046] = 2044}
local casks = {[1771] = TYPE_WATER, [1772] = TYPE_BEER, [1773] = TYPE_WINE}
local alcoholDrinks = {TYPE_BEER, TYPE_WINE, TYPE_RUM}
local poisonDrinks = {TYPE_SLIME, TYPE_SWAMP}
local drunk = createConditionObject(CONDITION_DRUNK)
setConditionParam(drunk, CONDITION_PARAM_TICKS, 60000)
local poison = createConditionObject(CONDITION_POISON)
setConditionParam(poison, CONDITION_PARAM_DELAYED, true) -- Condition will delay the first damage from when it's added
setConditionParam(poison, CONDITION_PARAM_MINVALUE, -50) -- Minimum damage the condition can do at total
setConditionParam(poison, CONDITION_PARAM_MAXVALUE, -120) -- Maximum damage
setConditionParam(poison, CONDITION_PARAM_STARTVALUE, -5) -- The damage the condition will do on the first hit
setConditionParam(poison, CONDITION_PARAM_TICKINTERVAL, 4000) -- Delay between damages
setConditionParam(poison, CONDITION_PARAM_FORCEUPDATE, true) -- Re-update condition when adding it(ie. min/max value)
local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))
local borders = {4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655}
local effects = {["swamp"] = CONST_ME_GREEN_RINGS, ["water"] = CONST_ME_LOSEENERGY, ["shallow water"] = CONST_ME_LOSEENERGY, ["tar"] = CONST_ME_POFF, ["lava"] = CONST_ME_HITBYFIRE}
local trashholders = {493, 598, 599, 600, 601, 708, 709, 710, 711, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4664, 4665, 4666, 4691, 4692, 4693, 4694, 4695, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4749, 4750, 4751, 4752, 4753, 4754, 4755}
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(itemEx.uid == cid) then
if(item.type == TYPE_EMPTY) then
return false
end
if(item.type == TYPE_MANA_FLUID) then
if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
return true
end
if(not doPlayerAddMana(cid, math.random(80, 160))) then
return false
end
doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
doAddCondition(cid, exhaust)
elseif(item.type == TYPE_LIFE_FLUID) then
if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
return true
end
if(not doCreatureAddHealth(cid, math.random(40, 75))) then
return false
end
doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
doAddCondition(cid, exhaust)
elseif(isInArray(alcoholDrinks, item.type)) then
if(not doTargetCombatCondition(0, cid, drunk, CONST_ME_NONE)) then
return false
end
doCreatureSay(cid, "Aaah...", TALKTYPE_ORANGE_1)
elseif(isInArray(poisonDrinks, item.type)) then
if(not doTargetCombatCondition(0, cid, poison, CONST_ME_NONE)) then
return false
end
doCreatureSay(cid, "Urgh!", TALKTYPE_ORANGE_1)
else
doCreatureSay(cid, "Gulp.", TALKTYPE_ORANGE_1)
end
doChangeTypeItem(item.uid, TYPE_EMPTY)
return true
end
if(not isCreature(itemEx.uid)) then
if(item.type == TYPE_EMPTY) then
if(item.itemid == ITEM_RUM_FLASK and isInArray(DISTILLERY, itemEx.itemid)) then
if(itemEx.actionid == 100) then
doItemEraseAttribute(itemEx.uid, "description")
doItemEraseAttribute(itemEx.uid, "aid")
doChangeTypeItem(item.uid, TYPE_RUM)
else
doPlayerSendCancel(cid, "You have to process the bunch into the distillery to get rum.")
end
return true
end
if(casks[itemEx.itemid] ~= nil) then
doChangeTypeItem(item.uid, casks[itemEx.itemid])
return true
end
local fluidEx = getFluidSourceType(itemEx.itemid)
if(fluidEx ~= 0) then
doChangeTypeItem(item.uid, fluidEx)
return true
end
return false
elseif itemEx.type == 0 and isItemFluidContainer(itemEx.itemid) then
doChangeTypeItem(itemEx.uid, item.type)
doChangeTypeItem(item.uid, TYPE_EMPTY)
return true
end
if hasProperty(getTileThingByPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=0}).uid, CONST_PROP_BLOCKSOLID) and not isInArray(borders, itemEx.itemid) then
local tmp = getThingfromPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=1}).itemid
if tmp == 0 and (isInArray(trashholders, getThingfromPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=0}).itemid) or getTileItemByType(getThingPos(itemEx.uid), ITEM_TYPE_TRASHHOLDER).itemid ~= 0) then
itemEx.name = getItemInfo(itemEx.itemid).name
if effects[itemEx.name] then
doSendMagicEffect(toPosition, effects[itemEx.name])
end
return doChangeTypeItem(item.uid, TYPE_EMPTY)
elseif item.uid ~= itemEx.uid and not isInArray(borders, tmp) and not isInArray(trashholders, getThingfromPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=0}).itemid) and getTileItemByType(getThingPos(itemEx.uid), ITEM_TYPE_TRASHHOLDER).itemid == 0 then
return doPlayerSendCancel(cid, 'There is not enough room.')
end
end
if(item.type == TYPE_OIL and oilLamps[itemEx.itemid] ~= nil) then
doTransformItem(itemEx.uid, oilLamps[itemEx.itemid])
doChangeTypeItem(item.uid, TYPE_NONE)
return true
end
end
if isInArray({0, 65535}, toPosition.x) then
toPosition = getThingPos(cid)
end
doDecayItem(doCreateItem(ITEM_POOL, item.type, toPosition))
doChangeTypeItem(item.uid, TYPE_EMPTY)
return true
end