Vial of Blood

Status
Not open for further replies.

enriel

Big L
Joined
Dec 14, 2007
Messages
1,254
Best answers
0
Reaction score
2
Location
Montenegro
Can anyone make a scrip if using vial of blood on grave stone, he will be sent down? :p
 

Cykotitan

Experienced G'
Joined
Nov 4, 2008
Messages
16,894
Best answers
4
Reaction score
817
With onAddItem or vial script?
 
OP
enriel

enriel

Big L
Joined
Dec 14, 2007
Messages
1,254
Best answers
0
Reaction score
2
Location
Montenegro
action script : if use vial on gravestone, he'll be tped down.
like; local position1 = {x= X_POS, y= Y_POS, z= Z_POS}
if item.uid == 1409 blablabla ~~ if you understand, just like in real tibia.
 
OP
enriel

enriel

Big L
Joined
Dec 14, 2007
Messages
1,254
Best answers
0
Reaction score
2
Location
Montenegro
when add blood on grave stone so I guess addITEM
 
Last edited:

Cykotitan

Experienced G'
Joined
Nov 4, 2008
Messages
16,894
Best answers
4
Reaction score
817
Modifying vial/fluid containers script is easier and less exploitable.
 
OP
enriel

enriel

Big L
Joined
Dec 14, 2007
Messages
1,254
Best answers
0
Reaction score
2
Location
Montenegro
I don't know if you got me or I can't read, I wanted script kinda like pits of inferno grave stone. If use vial of blood (so it's blood splash) on gravestone then he right kicks and gets teleported to X Y Z position.
 

Cykotitan

Experienced G'
Joined
Nov 4, 2008
Messages
16,894
Best answers
4
Reaction score
817
Yes, I got you right in the first place.
I was just asking in which way do you want it scripted.

plz post your data\actions\scripts\liquids\containers.lua [TFS 0.3] or data\actions\scripts\other\fluids.lua [TFS 0.2]
 
OP
enriel

enriel

Big L
Joined
Dec 14, 2007
Messages
1,254
Best answers
0
Reaction score
2
Location
Montenegro
ahh okey, then my fault :p


Code:
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))

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if(itemEx.uid == cid) then
		if(item.type == TYPE_EMPTY) then
			doPlayerSendCancel(cid, "It is empty.")
			return true
		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(isItemFluidContainer(itemEx.itemid) and itemEx.type ~= TYPE_EMPTY) then
				doChangeTypeItem(item.uid, itemEx.type)
				doChangeTypeItem(itemEx.uid, TYPE_EMPTY)
				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 ~= false) then
				doChangeTypeItem(item.uid, fluidEx)
				return true
			end

			doPlayerSendCancel(cid, "It is empty.")
			return true
		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

		if(hasProperty(itemEx.uid, CONST_PROP_BLOCKSOLID)) then
			return false
		end
	end

	doDecayItem(doCreateItem(ITEM_POOL, item.type, toPosition))
	doChangeTypeItem(item.uid, TYPE_EMPTY)
	return true
end
 

Cykotitan

Experienced G'
Joined
Nov 4, 2008
Messages
16,894
Best answers
4
Reaction score
817
Code:
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))

function onUse(cid, item, fromPosition, itemEx, toPosition)
[B][COLOR="Red"]	if(itemEx.uid == 10200 and item.type == 2) then
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_DRAWBLOOD)
		doTeleportThing(cid, {x=32791, y=32333, z=10})
		doCreatureSay(cid, "Muahahahaha...", TALKTYPE_ORANGE_1, nil, nil, toPosition)
		for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 7, 5)) do
			if(isPlayer(tid)) then
				doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid)
			end
		end
		doChangeTypeItem(item.uid, TYPE_EMPTY)
		return true
	end[/COLOR][/B]
	if(itemEx.uid == cid) then
		if(item.type == TYPE_EMPTY) then
			doPlayerSendCancel(cid, "It is empty.")
			return true
		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(isItemFluidContainer(itemEx.itemid) and itemEx.type ~= TYPE_EMPTY) then
				doChangeTypeItem(item.uid, itemEx.type)
				doChangeTypeItem(itemEx.uid, TYPE_EMPTY)
				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 ~= false) then
				doChangeTypeItem(item.uid, fluidEx)
				return true
			end

			doPlayerSendCancel(cid, "It is empty.")
			return true
		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

		if(hasProperty(itemEx.uid, CONST_PROP_BLOCKSOLID)) then
			return false
		end
	end

	doDecayItem(doCreateItem(ITEM_POOL, item.type, toPosition))
	doChangeTypeItem(item.uid, TYPE_EMPTY)
	return true
end
bold red
 

Taurus

Texass
Joined
Jan 11, 2009
Messages
615
Best answers
2
Reaction score
30
Location
United States
I need this to work too.

Only now with tfs 0.4 the scripts are quite different and I'm not sure how to add this in.

Anyone have an idea?

Here is the potions.lua
Lua:
local config = {
	removeOnUse = "no",
	usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
	splashable = "no",
	range = -1,
	realAnimation = "no", -- make text effect visible only for players in range 1x1
	multiplier = {
		health = 1.0,
		mana = 1.0
	}
}

config.removeOnUse = getBooleanFromString(config.removeOnUse)
config.usableOnTarget = getBooleanFromString(config.usableOnTarget)
config.splashable = getBooleanFromString(config.splashable)
config.realAnimation = getBooleanFromString(config.realAnimation)

local POTIONS = {
	[8704] = {empty = 7636, splash = 42, health = {50, 100}}, -- small health potion
	[7618] = {empty = 7636, splash = 42, health = {100, 200}}, -- health potion
	[7588] = {empty = 7634, splash = 42, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
	[7591] = {empty = 7635, splash = 42, health = {500, 700}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
	[8473] = {empty = 7635, splash = 42, health = {800, 1000}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion

	[7620] = {empty = 7636, splash = 47, mana = {70, 130}}, -- mana potion
	[7589] = {empty = 7634, splash = 47, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
	[7590] = {empty = 7635, splash = 47, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion

	[8472] = {empty = 7635, splash = 43, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion
}

local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local potion = POTIONS[item.itemid]
	if(not potion) then
		return false
	end

	if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then
		if(not config.splashable) then
			return false
		end

		if(toPosition.x == CONTAINER_POSITION) then
			toPosition = getThingPosition(item.uid)
		end

		doDecayItem(doCreateItem(POOL, potion.splash, toPosition))
		doRemoveItem(item.uid, 1)
		if(not potion.empty or config.removeOnUse) then
			return true
		end

		if(fromPosition.x ~= CONTAINER_POSITION) then
			doCreateItem(potion.empty, fromPosition)
		else
			doPlayerAddItem(cid, potion.empty, 1)
		end

		return true
	end

	if(hasCondition(cid, CONDITION_EXHAUST)) then
		doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
		return true
	end

	if(((potion.level and getPlayerLevel(itemEx.uid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(itemEx.uid)))) and
		not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES))
	then
		doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1)
		return true
	end

	if(config.range > 0 and cid ~= itemEx.uid and getDistanceBetween(getThingPosition(cid), getThingPosition(itemEx.uid)) > config.range) then
		return false
	end

	local health = potion.health
	if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.multiplier.health))) then
		return false
	end

	local mana = potion.mana
	if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.multiplier.mana))) then
		return false
	end

	doSendMagicEffect(getThingPosition(itemEx.uid), CONST_ME_MAGIC_BLUE)
	if(not config.realAnimation) then
		doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
	else
		for i, tid in ipairs(getSpectators(getThingPosition(itemEx.uid), 1, 1)) do
			if(isPlayer(tid)) then
				doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid)
			end
		end
	end

	doAddCondition(cid, exhaust)
	doRemoveItem(item.uid, 1)
	if(not potion.empty or config.removeOnUse) then
		return true
	end

	if(fromPosition.x ~= CONTAINER_POSITION) then
		doCreateItem(potion.empty, fromPosition)
	else
		doPlayerAddItem(cid, potion.empty, 1)
	end

	return true
end
Quite a big difference, most flasks aren't even mentioned in it.

and for the life of me i cant figure out how to get a vial of blood with this new system.

If anyone has ideas on this subject I appreciate your input.
 

Delirium

OTLand veteran
Staff member
Global Moderator
Joined
May 28, 2007
Messages
3,335
Best answers
1
Reaction score
196
Location
Athens, Greece
How about you make a new thread instead of posting on a one-year-old thread?
 
Status
Not open for further replies.
Top