Ir para conteúdo

[ Action ]Sistema Pokebola


Posts Recomendados

Bom vi que muitos estavam procurando pelo sistema pokebola. E que ainda nao tinha no xTibia, então resolvi trazer para ca

 

Primeiro de tudo

 

Autor="Nahruto"

Versao="8.3+"

Testado_em="TFS"

Creditos="Nahruto"

 

ok esse script server para você captura pokemons como o nome ja diz

então vamos começar!

 

va na sua pasta DATA e em global functions coloque isso:

_warpzone = 2147483648 -- start storing strings here (THIS IS THE ABSOLUTE MAXIMUM VALUE FOR THIS)

_maxlength = 1024 -- multiply by 3 to get the true length.

 

setPlayerStorageInteger = setPlayerStorageValue

getPlayerStorageInteger = getPlayerStorageValue

 

function setPlayerStorageString(cid, key, value)

if #value > (_maxlength-1) * 3 - 1 then -- Last word is reserved for 0 termination of the string.

error("Storage string is too long")

end

if key > _warpzone / _maxlength then

error("Storage string key is too large (" .. key .. ")")

end

key = _warpzone + key * _maxlength

 

local word = 0

local wordwrap = 0

local wordcount = 0

local i = 1

while i <= #value do

local byte = string.byte(string.sub(value, i, i))

word = bit.bor(word, bit.lshift(byte, wordwrap))

wordwrap = wordwrap + 8

if wordwrap == 24 then

--[[

In the ideal world we would be able to store 4 characters per word,

however, as the default return value for getPlayerStorageValue is

-1, we cant use the last bit.

]]--

setPlayerStorageInteger(cid, key + wordcount, word)

word = 0

wordwrap = 0

wordcount = wordcount + 1

end

i = i + 1

end

-- store the last word

setPlayerStorageInteger(cid, key + wordcount, word)

end

 

function getPlayerStorageString(cid, key)

if key > _warpzone / _maxlength then

error("Storage string key is too large (" .. key .. ")")

end

key = _warpzone + key * _maxlength

 

local wordcount = 0

local str = ""

while true do

if wordcount >= _maxlength then

break

end

local word = getPlayerStorageInteger(cid, key + wordcount)

if word == -1 then

-- end of string

break

else

-- Extract the 3 characters from the value

byte = bit.band(word, 255)

if byte == 0 then break else str = str .. string.char(byte) end

byte = bit.rshift(bit.band(word, 65280), 8)

if byte == 0 then break else str = str .. string.char(byte) end

byte = bit.rshift(bit.band(word, 16711680), 16)

if byte == 0 then break else str = str .. string.char(byte) end

end

wordcount = wordcount + 1

end

return str

end

 

function doConvinceSummon(cid, creature, amount, pos)

summonplayerpos = {x=pos.x, y=pos.y, z=pos.z, stackpos=253}

summonplayer = getThingfromPos(summonplayerpos)

 

 

if(summonplayer ~= nil and summonplayer.itemid > 0) then

doPlayerSendCancel(cid,"There is not enough room to summon here.")

ret = 0

else

convince = doSummonCreature(creature, pos)

doConvinceCreature(cid, convince)

ret = 1

end

 

return ret

end

 

 

ok agora vá em DATA/ACTIONS/SCRIPTS

e crie um com o nome pokebola.lua e coloque isso:

 

local notAllowed = {"Ferumbras", "Demon"}

local storage = {

status = 15244,

pokeName = 15212

}

local actionid_used = 7510

 

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

local pokeballStatus = getPlayerStorageValue(cid, storage.status)

local pokeName = getPlayerStorageString(cid, storage.pokeName)

pos = getPlayerPosition(cid) pos.stackpos = 0

if getTilePzInfo(toPos) == 0 and getTilePzInfo(pos) == 0 then

if pokeballStatus <= 0 then

toPos.stackpos = 253

local pokeThing = getThingfromPos(toPos)

if isCreature(pokeThing.uid) == TRUE then

if isPlayer(pokeThing.uid) == FALSE then

local pokename_ = getCreatureName(pokeThing.uid)

if item.actionid ~= actionid_used then

-- local maxHealth = 400

-- local creatureHealth = getCreatureHealth(pokeThing.uid)

-- local divNum = (string.len(maxHealth)-1)^2

-- local result = math.floor((creatureHealth/divNum)/10)

-- local chance = math.random(1, math.random(4, math.random(7, math.max(result, 7))))

-- if chance == result then

if isInTable(notAllowed, pokename_) == TRUE then

doPlayerSendCancel(cid, "You cannot catch this creature")

else

setPlayerStorageString(cid, storage.pokeName, pokename_)

doRemoveCreature(pokeThing.uid)

doSendDistanceShoot(fromPos, toPos, 37)

setPlayerStorageValue(cid, storage.status, 1)

doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".")

doSetItemActionId(item.uid, actionid_used)

end

-- else

-- doSendMagicEffect(fromPos, 2)

-- doPlayerSendCancel(cid, "The Pokemom Escaped")

-- end

elseif item.actionid == actionid_used and pokename_ == pokeName then

doCreatureSay(cid, pokeName .. " Back!!", TALKTYPE_SAY)

doRemoveCreature(pokeThing.uid)

doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".")

setPlayerStorageValue(cid, storage.status, 1)

doSendDistanceShoot(fromPos, toPos, 37)

else

doSendMagicEffect(fromPos, 2)

doPlayerSendCancel(cid, "This pokeball is already used")

end

else

doPlayerSendCancel(cid, "You cannot catch this creature")

end

else

doPlayerSendCancel(cid, "Creature not found")

end

elseif pokeballStatus == 1 then

-- summons = getCreatureSummons(cid)

-- if #summons >= 2 then

-- doPlayerSendCancel(cid, "You cannot call more pokemons")

-- else

doConvinceSummon(cid, pokeName, 0, toPos)

doSendDistanceShoot(fromPos, toPos, 37)

doCreatureSay(cid, pokeName .. " Go!!", TALKTYPE_SAY)

setPlayerStorageValue(cid, storage.status, 0)

doSetItemSpecialDescription(item.uid, "it is empty.")

-- end

end

else

doPlayerSendCancel(cid, "You cannot use pokeballs in protection zone.")

end

return 1

end

 

function isInTable(t, val)

for _, v in pairs(t) do

if v == val then

return TRUE

end

end

return LUA_ERROR

end

 

agora em DATA/ACTIONS/ACTIONS.XML coloque isso:

 

<action itemid="xxxx" script="pokebola.lua" allowfaruse="1" blockwalls="1" />

 

no lugar do "xxxx" coloque um id de item que você desejar

 

 

 

Explicando : vc cata o item e da use no monstro

imediatamente o monstro vai ser removido e qnd vc usar no chão, vai sumonar o monstro

o unico ruim é que voce pode solar uma quest facil facil (a menos que coloque os monstros na lista de não permitidos) e da pra pegar NPC's (a menos que coloque o nome de todos os npc's na lista de não permitidos)

 

 

SCRIPT NÃO ESTA 100% PERFEITO MAIS ESTA BOM PARA TESTES...

Obs: NAO E SISTEMA CATCH.....O SISTEMA E POKEBALL NÃO CONFUNDAM

 

ABERTO A CRITICAS E SUJESTÕES

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

Jaah vi muita jente precisando deste systema.. vai ser muito util!

 

Vou faser um teste aki.. se não funfar eu edito aki =D.

 

Muito Bom!

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

tenho algumas duvidas com esse script....como meu ot eh 8.1 e n tem a pasta global events como q eu faço pra colocar?

e otra coisa: quanu eu capturo o monstro ele começa a me seguir dpois disso?

Link para o comentário
Compartilhar em outros sites

tenho algumas duvidas com esse script....como meu ot eh 8.1 e n tem a pasta global events como q eu faço pra colocar?

e otra coisa: quanu eu capturo o monstro ele começa a me seguir dpois disso?

 

 

Se for TFS coloque no Fuctions.lua que fica dentro da pasta data..

Link para o comentário
Compartilhar em outros sites

Meu ot eh o tfs 0.3.4 , 8.50, e nao tem a pasta global functions...

como eu faço?

 

 

Affs mano presta mais atenção ... Duvida ja esclarecida acima

 

Se nao tiver entre na sua pasta data Fuctions.lua e coloque la

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

foi mal e vlw :D

 

Ps: Functions fica na pasta Data ~> LIB

 

ta dando esse erro:

 

[08/04/2010 13:01:27] Lua Script Error: [Action Interface]

[08/04/2010 13:01:27] data/actions/scripts/blood orb.lua:onUse

 

[08/04/2010 13:01:28] luaGetTileInfo(). Tile not found

 

[08/04/2010 13:01:28] Lua Script Error: [Action Interface]

[08/04/2010 13:01:28] data/actions/scripts/blood orb.lua:onUse

 

[08/04/2010 13:01:28] data/lib/function.lua:334: attempt to index a boolean value

[08/04/2010 13:01:29] stack traceback:

[08/04/2010 13:01:29] data/lib/function.lua:334: in function 'getTilePzInfo'

[08/04/2010 13:01:29] data/actions/scripts/blood orb.lua:12: in function <data/actions/scripts/blood orb.lua:8>

 

Alguem ajuda? ¬¬

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

Mas eu copiei o script e nao alterei nada, so mudei no actions.xml o item que vai ser usado, que no caso era o blood orb e botei frozen starlight...

 

Meu Script ta assim:

 

local notAllowed = {"Ferumbras", "Demon"}
local storage = {
status = 15244,
pokeName = 15212
}
local actionid_used = 2361

function onUse(cid, item, fromPos, item2, toPos)
local pokeballStatus = getPlayerStorageValue(cid, storage.status)
local pokeName = getPlayerStorageString(cid, storage.pokeName)
pos = getPlayerPosition(cid) pos.stackpos = 0
if getTilePzInfo(toPos) == 0 and getTilePzInfo(pos) == 0 then
if pokeballStatus <= 0 then
toPos.stackpos = 253
local pokeThing = getThingfromPos(toPos)
if isCreature(pokeThing.uid) == TRUE then
if isPlayer(pokeThing.uid) == FALSE then
local pokename_ = getCreatureName(pokeThing.uid)
if item.actionid ~= actionid_used then
-- local maxHealth = 400
-- local creatureHealth = getCreatureHealth(pokeThing.uid)
-- local divNum = (string.len(maxHealth)-1)^2
-- local result = math.floor((creatureHealth/divNum)/10)
-- local chance = math.random(1, math.random(4, math.random(7, math.max(result, 7))))
-- if chance == result then
if isInTable(notAllowed, pokename_) == TRUE then
doPlayerSendCancel(cid, "You cannot catch this creature")
else
setPlayerStorageString(cid, storage.pokeName, pokename_)
doRemoveCreature(pokeThing.uid)
doSendDistanceShoot(fromPos, toPos, 37)
setPlayerStorageValue(cid, storage.status, 1)
doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".")
doSetItemActionId(item.uid, actionid_used)
end
-- else
-- doSendMagicEffect(fromPos, 2)
-- doPlayerSendCancel(cid, "The Pokemom Escaped")
-- end
elseif item.actionid == actionid_used and pokename_ == pokeName then
doCreatureSay(cid, pokeName .. " Back!!", TALKTYPE_SAY)
doRemoveCreature(pokeThing.uid)
doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".")
setPlayerStorageValue(cid, storage.status, 1)
doSendDistanceShoot(fromPos, toPos, 37)
else
doSendMagicEffect(fromPos, 2)
doPlayerSendCancel(cid, "This pokeball is already used")
end
else
doPlayerSendCancel(cid, "You cannot catch this creature")
end
else
doPlayerSendCancel(cid, "Creature not found")
end
elseif pokeballStatus == 1 then
-- summons = getCreatureSummons(cid)
-- if #summons >= 2 then
-- doPlayerSendCancel(cid, "You cannot call more pokemons")
-- else
doConvinceSummon(cid, pokeName, 0, toPos)
doSendDistanceShoot(fromPos, toPos, 37)
doCreatureSay(cid, pokeName .. " Go!!", TALKTYPE_SAY)
setPlayerStorageValue(cid, storage.status, 0)
doSetItemSpecialDescription(item.uid, "it is empty.")
-- end
end
else
doPlayerSendCancel(cid, "You cannot use pokeballs in protection zone.")
end
return 1
end 

function isInTable(t, val)
for _, v in pairs(t) do
if v == val then
return TRUE
end
end
return LUA_ERROR
end

 

E Actions.XML

<action itemid="2361" script="frozen starlight.lua" allowfaruse="1" blockwalls="1" />

 

Erro:

Agora não aparece mais nenhum erro no client, e mudei o blood orb para frozen starlight, então com isso ele nao da mais nenhum erro ao iniciar o client, nem quando do reload actions... Mas ele não captura nenhum monstro, eu boto ele na bp, dou Use with em 1 Amazon, Rat, varios monstros e fala "Criatura nao encontrada" ( Em ingles ) , boto a frozen starlight no chão, faço o mesmo processo e da o mesmo erro... :S

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

não adianta trazer um sistema que não funciona pra ganhar um post a mais.

 

e tentar resolver os problemas perguntando qual é o servidor e que o item pode estar errado já é clichê. leecham o script de outro fórum e não sabem resolver os bugs. fail.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...