Ir para conteúdo
  • 0

Fishing System - Sumonando os Monstros


Aerdor

Pergunta

Tipo, alguém consegue fazer pra mim um fishing system que quando vc pesca em vez de vir o peixe normal (o item) vir um monstro? Mas com uma "lista" com os monstros que podem vir, estilo pokétibia, saka? Minha versão é 8.54.

 

Alguém pode me ajudar?

 

Se for de alguma ajuda aqui tem o código do fishing normal:

 

 

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

 

 

E aqui o fishing do pokétibia:

 

 

local fishing = {

["Magikarp"] = {skill = 0, level = -2},

["Qwilfish"] = {skill = 18, level = 3},

["Remoraid"] = {skill = 16, level = 20},

["Staryu"] = {skill = 22, level = 6},

["Tentacool"] = {skill = 20, level = 7},

["Goldeen"] = {skill = 17, level = 5},

["Krabby"] = {skill = 14, level = 2},

["Horsea"] = {skill = 16, level = 3},

["Poliwag"] = {skill = 15, level = 2},

["Marill"] = {skill = 21, level = 30},

["Azumarill"] = {skill = 37, level = 16},

["Buizel"] = {skill = 40, level = 25},

["Kingler"] = {skill = 35, level = 14},

["Seaking"] = {skill = 28, level = 11},

["Starmie"] = {skill = 45, level = 20},

["Chinchou"] = {skill = 23, level = 6},

["Poliwhirl"] = {skill = 27, level = 9},

["Seadra"] = {skill = 40, level = 15},

["Lanturn"] = {skill = 38, level = 14},

["Octillery"] = {skill = 30, level = 9},

["Corsola"] = {skill = 46, level = 16},

["Carvanha"] = {skill = 25, level = 15},

["Mudkip"] = {skill = 35, level = 15},

["Feebas"] = {skill = 52, level = 35},

["Wailmer"] = {skill = 52, level = 30},

["Totodile"] = {skill = 33, level = 30},

["Mantine"] = {skill = 45, level = 30},

["Quagsire"] = {skill = 45, level = 30},

["Wooper"] = {skill = 32, level = 30},

["Barboach"] = {skill = 20, level = 20},

["Whiscash"] = {skill = 32, level = 30},

["Corphish"] = {skill = 15, level = 15},

["Crawdaunt"] = {skill = 36, level = 36},

["Spheal"] = {skill = 42, level = 40},

["Clamperl"] = {skill = 22, level = 10},

["Huntail"] = {skill = 34, level = 34},

["Gorebyss"] = {skill = 42, level = 50},

["Luvdisc"] = {skill = 12, level = 10},

}

 

local storage = 15458

local bonus = 1.0

local limite = 80

 

 

local function doFish(cid, pos, ppos, chance, interval, number)

if not isCreature(cid) then return false end

if getPlayerSex(cid) == 1 then

if getCreatureOutfit(cid).lookType ~= 520 then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa botar a roupa de Fisher para poder pescar.")

return false

end

else

if getCreatureOutfit(cid).lookType ~= 521 then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa botar a roupa de Fisher para poder pescar.")

return false

end

end

if getThingPos(cid).x ~= ppos.x or getThingPos(cid).y ~= ppos.y then

return false end

 

if getPlayerStorageValue(cid, storage) ~= number then return false end

 

doSendMagicEffect(pos, 181)

 

local peixe = 0

local playerpos = getClosestFreeTile(cid, getThingPos(cid))

local level = 1

local fishes = {}

local randomfish = ""

 

 

--if getPlayerSkillLevel(cid, 6) < limite then

--doPlayerAddSkillTry(cid, 6, bonus)

--end

 

for a, b in pairs (fishing) do

if getPlayerSkillLevel(cid, 6) >= b.skill then

table.insert(fishes, a)

end

end

 

if math.random(1, 100) <= chance then

if getPlayerSkillLevel(cid, 6) < limite and math.random(1, 100) <= 30 then --30 = 30% chance de add fishing

doPlayerAddSkillTry(cid, 6, bonus)

end

randomfish = fishes[math.random(#fishes)]

level = getPlayerSkillLevel(cid, 6) / 3

level = level + getPlayerLevel(cid) / 5

level = math.random(level * 0.6, level)

level = level + fishing[randomfish].level

peixe = doSummonCreature(randomfish, playerpos)

if level <= 0 then

level = math.random(getPlayerLevel(cid))

end

if not isCreature(peixe) then

addEvent(doFish, interval, cid, pos, ppos, chance, interval, number)

return true

end

setWildPokemonLevel(peixe, level)

doSetMonsterPassive(peixe)

doWildAttackPlayer(peixe, cid)

if #getCreatureSummons(cid) >= 1 then

doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173)

doChallengeCreature(getCreatureSummons(cid)[1], peixe)

else

doSendMagicEffect(getThingPos(cid), 173)

doChallengeCreature(cid, peixe)

end

return true

end

addEvent(doFish, interval, cid, pos, ppos, chance, interval, number)

return true

end

 

local waters = {4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825}

 

function onUse(cid, item, fromPos, itemEx, toPos)

 

if getPlayerGroupId(cid) == 11 then

return true

end

 

local checkPos = toPos

checkPos.stackpos = 0

 

if getTileThingByPos(checkPos).itemid <= 0 then

doPlayerSendCancel(cid, '!')

return true

end

 

if not isInArray(waters, getTileInfo(toPos).itemid) then

return true

end

 

if (getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 63215) >= 1) and not canFishWhileSurfingOrFlying then

doPlayerSendCancel(cid, "You can't fish while surfing/flying.")

return true

end

 

if isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then

doPlayerSendCancel(cid, "You can\'t fish while surfing neither flying above water.")

return true

end

 

if getTileInfo(getThingPos(getCreatureSummons(cid)[1] or cid)).protection then

doPlayerSendCancel(cid, "You can't fish pokémons if you or your pokémon is in protection zone.")

return true

end

 

if not tonumber(getPlayerStorageValue(cid, storage)) then

local test = io.open("data/sendtobrun123.txt", "a+")

local read = ""

if test then

read = test:read("*all")

test:close()

end

read = read.."\n[fishing.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, storage)..""

local reopen = io.open("data/sendtobrun123.txt", "w")

reopen:write(read)

reopen:close()

setPlayerStorageValue(cid, storage, 1)

end

 

setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage) + 1)

if getPlayerStorageValue(cid, storage) >= 800 then

setPlayerStorageValue(cid, storage, 1)

end

 

local delay = 3500 - getPlayerSkillLevel(cid, 6) * 25

local chance = 10 + getPlayerSkillLevel(cid, 6) / 2.5

 

doFish(cid, toPos, getThingPos(cid), chance, delay, getPlayerStorageValue(cid, storage))

 

return true

end

 

 

REP+ pra quem ajudar.

Editado por Aerdor
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Tenta ai:

local config = {
waters = {4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825},
monster = {"Rat", "Cave Rat"}, -- Nome dos monstros
rateFishing = 1, -- 1% de pescar
minhocaId = 1, -- id da mminhoca que o player tem que ter
}
function onUse(cid, itemEx, topos)
	 if isInArray(config.waters, itemEx.itemid) then
	 chance = math.random(1, 100)
	  if doPlayerRemoveItem(cid, config.minhocaId, 1) then
	  doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_LOSEENERGY)
	   if chance <= config.rateFishing then
		 monsterName = config.monster[math.random(#config.monster)]
		 doCreateMonster(monsterName, getClosestFreeTile(cid, getThingPos(cid)))
	   else
		 doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
	   end
	  else
	  doPlayerSendTextMessage(cid, 27, "You need a "..getItemNameById(config.minhocaId).." for fishing.")
	  return true
	  end
	 else
	 return doPlayerSendCancel(cid, "Sorry, is not possible.")
	 end
end		 

Link para o comentário
Compartilhar em outros sites

  • 0

troca isso..

function onUse(cid, itemEx, topos)

por isso...

function onUse(cid, item, fromPosition, itemEx, toPosition)

 

n tenhu certeza mas.. o nome dos parametros n importa, mas a ordem deles sim...

Link para o comentário
Compartilhar em outros sites

  • 0

Aeeeeeeeeeeeee, ta indo!!!

Entretanto... não puxa os monstros!

Tá gastando as worms, fazendo o efeito da pesca e tal, mas n puxa monstro nenhum, to pescando a um tempão e nada D:

 

 

@EDIT

Opa, funcionou! Amo vocês!!!!!!!!!!!!!!!!

Só tinha esquecido de arrumar a rate de fishing, agora só ajustar direitinho pra n ficar nem tão facil nem tão dificil, vou dar rep pro amigo q deu o script inteiro e dps pro slicer que ajudou a consertar!

Editado por Aerdor
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...