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

Fishing like RL Tibia

Sherlok

Active Member
Joined
Aug 29, 2008
Messages
2,116
Reaction score
44
Location
Poland, Wrocław.
Hiho,
I need perfect fishing script like real tibia :p

Already in TFS is fishing script, but you don't need worms etc..
LUA:
local config = {
	waterIds = {493, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625},
	rateSkill = getConfigValue("rateSkill"),
	allowFromPz = false,
	useWorms = true
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if(not isInArray(config.waterIds, itemEx.itemid)) then
		return false
	end

	if((config.allowFromPz or not getTileInfo(getCreaturePosition(cid)).protection) and itemEx.itemid ~= 493 and
		math.random(1, (100 + (getPlayerSkill(cid, SKILL_FISHING) / 10))) < getPlayerSkill(cid, SKILL_FISHING) and
		(not config.useWorms or (getPlayerItemCount(cid, ITEM_WORM) > 0 and doPlayerRemoveItem(cid, ITEM_WORM, 1)))) then
		doPlayerAddItem(cid, ITEM_FISH, 1)
		doPlayerAddSkillTry(cid, SKILL_FISHING, config.rateSkill)
	end

	doSendMagicEffect(toPosition, CONST_ME_LOSEENERGY)
	return true
end
 
Try this one:
LUA:
local config = {
	waters = {4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825},
	fishable = {4608, 4609, 4610, 4611, 4612, 4613, 7236},
	spawning = {4614, 4615, 4616, 4617, 4618, 4619},
	holes = {7236},

	corpses = {
		-- [corpse] = {items}
		[2025] = {
			-- {itemid, countmax, chance}
			-- TODO: Water elemental and Massive Water Elemental loot...
		}
	},
	checkCorpseOwner = getConfigValue("checkCorpseOwner"),
	rateLoot = getConfigValue("rateLoot"),

	summons = {
		-- {skill, name, chance, bossName, bossChance}
	},
	rateSpawn = getConfigValue("rateSpawn"),

	baitFailRemoveChance = 10,
	allowFromPz = false,
	useBait = true,
	baitCount = 1,
	fishes = 1
}

config.checkCorpseOwner = getBooleanFromString(config.checkCorpseOwner)

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if(isInArray(config.waters, itemEx.itemid)) then
		if(isInArray(config.spawning, itemEx.itemid)) then
			doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
		end

		doSendMagicEffect(toPosition, CONST_ME_LOSEENERGY)
		return true
	end

	local corpse = config.corpses[itemEx.itemid]
	if(corpse ~= nil) then
		local owner = getItemAttribute(cid, "corpseowner")
		if(owner ~= 0 and owner ~= getPlayerGUID(cid) and config.checkCorpseOwner) then
			doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUARENOTTHEOWNER)
			return true
		end

		local chance, items = math.random(0, 100000) / config.rateLoot, {}
		for _, data in ipairs(corpse) do
			if(data[3] >= chance) then
				local tmp = {data[1], math.random(1, data[2])}
				table.insert(items, tmp)
			end
		end

		local itemCount = table.maxn(items)
		if(itemCount > 0) then
			local loot = items[math.random(1, itemCount)]
			doPlayerAddItem(cid, loot[1], loot[2])
		end

		doTransformItem(itemEx.uid, itemEx.uid + 1)
		return true
	end

	if(not isInArray(config.fishable, itemEx.itemid)) then
		return false
	end

	local position, formula, tries = getThingPosition(cid), getPlayerSkill(cid, SKILL_FISHING) / 200 + 0.85 * math.random(), 0
	config.allowFromPz = config.allowFromPz or not getTileInfo(position).protection
	if(item.itemid ~= ITEM_MECHANICAL_FISHING_ROD) then
		if(config.allowFromPz and (not config.useBait or getPlayerItemCount(cid, ITEM_WORM) >= config.baitCount)) then
			tries = 1
			if(isInArray(config.holes, itemEx.itemid)) then
				if(doPlayerRemoveItem(cid, ITEM_WORM, config.baitCount)) then
					tries = 2
					if(formula > 0.83) then
						doPlayerAddItem(cid, ITEM_RAINBOW_TROUT, config.fishes)
					elseif(formula > 0.7) then
						doPlayerAddItem(cid, ITEM_NORTHERN_PIKE, config.fishes)
					elseif(formula > 0.5) then
						doPlayerAddItem(cid, ITEM_GREEN_PERCH, config.fishes)
					else
						doPlayerAddItem(cid, ITEM_FISH, config.fishes)
					end
				end
			elseif(formula > 0.7 and doPlayerRemoveItem(cid, ITEM_WORM, config.baitCount)) then
				tries = 2
				if(table.maxn(config.summons) > 0 and getDistanceBetween(position, toPosition) < 2) then
					local skill, summon = getPlayerSkill(cid, SKILL_FISHING), {name = "", chance = 0, bossName = "", bossChance = 0}
					for _, data in pairs(config.summons) do
						if(skill >= data[1]) then
							summon.name = data[2]
							summon.chance = data[3]
							summon.bossName = data[4]
							summon.bossChance = data[5]
						end
					end

					local random = math.random(1, 100000) / config.rateSpawn
					if(summon.bossName ~= "" and summon.bossChance >= random) then
						doCreateMonster(summon.bossName, position)
						tries = 4
					elseif(summon.name ~= "" and summon.chance >= random) then
						doCreateMonster(summon.name, position)
						tries = 3
					else
						doPlayerAddItem(cid, ITEM_FISH, config.fishes)
					end
				else
					doPlayerAddItem(cid, ITEM_FISH, config.fishes)
				end
			end
		end
	elseif(config.allowFromPz and (not config.useBait or getPlayerItemCount(cid, ITEM_NAIL) >= config.baitCount)) then
		if(formula > 0.7 and doPlayerRemoveItem(cid, ITEM_NAIL, config.baitCount)) then
			doPlayerAddItem(cid, ITEM_MECHANICAL_FISH, config.fishes)
			tries = 2
		else
			tries = 1
		end
	end

	if(tries > 1) then
		doPlayerAddSkillTry(cid, SKILL_FISHING, tries)
		if(not isInArray(config.holes, itemEx.itemid)) then
			doTransformItem(itemEx.uid, itemEx.itemid + 6)
		else
			doTransformItem(itemEx.uid, itemEx.itemid + 1)
		end

		doDecayItem(itemEx.uid)
	elseif(tries > 0) then
		doPlayerAddSkillTry(cid, SKILL_FISHING, 1)
		if(config.baitFailRemoveChance >= math.random(1, 100)) then
			if(item.itemid == ITEM_MECHANICAL_FISHING_ROD) then
				doPlayerRemoveItem(cid, ITEM_NAIL, config.baitCount)
			else
				doPlayerRemoveItem(cid, ITEM_FISH, config.baitCount)
			end
		end
	end

	doSendMagicEffect(toPosition, CONST_ME_LOSEENERGY)
	return true
end
 
Back
Top