Skip to content

Instantly share code, notes, and snippets.

@ranisalt
Created July 16, 2015 20:27
Show Gist options
  • Save ranisalt/add4b81638ec9afe9ba0 to your computer and use it in GitHub Desktop.
Save ranisalt/add4b81638ec9afe9ba0 to your computer and use it in GitHub Desktop.
fish.lua
local ITEM_MAGIC_WORM = 10224
local config = {
peixes = {
leveis = { 20, 40, 50, 60, 80, 100, 120 },
fish = {
[20] = 2670, -- 4
[40] = 2667, -- 8
[60] = 7159, -- 16
[80] = 7158, -- 20
[100] = 2669, -- 30
[130] = 7963, -- 40
}
},
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"),
rateSpawn = getConfigValue("rateSpawn"),
summons = {-- {skill, name, chance, bossName, bossChance}
},
baitFailRemoveChance = 10,
allowFromPz = false,
useBait = true,
baitCount = 1,
fishes = 1
}
local function getFish(uid)
local lvl = getPlayerSkillLevel(uid, 6)
for i = #config.peixes.leveis, 1, -1 do
if lvl >= config.peixes.leveis[i] then
return config.peixes.fish[config.peixes.leveis[i]]
end
end
return 2670
end
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 getPlayerItemCount(cid, ITEM_MAGIC_WORM) > 0 or 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, getFish(cid), 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, 1, false)
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment