DE

[ Action ]Pokeball System

Por DevilMoon, 05 de mai. de 2010 em Actions e Talkactions

otserv
tibia
script
101
33.9k
DevilMoonD
05 de maio de 2010 às 21:39

PokeBall System!

 

Ola Xtibianos, Vim hoje postar um Famoso Script de Pokeball System feito pelo Genioso Nahruto, claro pedi a autorização dele para postar.

A Todos que forem pegar Scripts de outras Pessoas, lembre-se de sempre pedir autorização e claro colocar os creditos.

 

Para Tfs: 0.34 , 0.35 e 0.36 Essas Forao Testadas E Funfo.

Versoes: 8.42 - 8.50 - 8.52 - 8.54 - 8.6.

Ots Testados: Snowz Yurots - Alissow Server - Styller Yurots

 

 

Primeiramente Vamos Fuçar em Function.lua, se voce nao Sabe onde fica vá em:

Data>Lib>Function.lua

 

Abra e Coloque Isto:

 

_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

 

E Isso!

  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  

 

Agora Vamos Fazer o Script Vá em Pasta do Seu Ot > Data > Actions > Scripts Crie uma Pasta chamada pokeball.lua

e bote isso dentro

 

local notAllowed = {"Ferumbras", "Demon"}
local storage = {
   status = 25650,
   pokeName = 25651
}
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 pokeballStatus == -1 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
                       doPlayerSay(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)
               doPlayerSay(cid, pokeName .. " Go!!", TALKTYPE_SAY)
               setPlayerStorageValue(cid, storage.status, -1)
               doSetItemSpecialDescription(item.uid, "it is empty.")
       --    end
       end
   else

   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

 

para TFS

 

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 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 = doCreatureSummons(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

   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 Vamos Adicionar as Tags, vá em Data>Actions.xml e Adicione as Tags Corretas´

 

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

 

[font-"Georgia"]em <action itemid="xxxx" nos 4 X voce coloca o Number Id Do seu Item que Será como uma "Pokeball"[/font]

 

 

Oque o Script Faz Realmente:

 

- Guarda monstros dentro de objetos e salva seu status, você pode colocar pra salvar em qlqr objeto.. seria ótimo para projetos pokemons..

 

 

Creditos:

Nahruto

 

 

Print Screen's:

 

Snorlax Saindo da Pokeball:

 

snorlaxgo.png

 

Snorlax Voltando para a Pokeball

 

snorlaxback.png

 

Look da Pokeball ( o Player so Ve assim You See a Pokeball , Have Snorlax )]

 

snorlaxlook.png

 

 

Lembrando que eu nao Adicionei o Efeito da Pokeball Abrindo e Jogando o Monstro.

Para fazer este Tipo de efeito voce vai ter que saber direitinho o LookType da Pokeball Fechando e Saindo, e transformar para um efeito e depois modificar no Script, aqui no xtibia Existe varios Tutoriais explicando isto, é so procurar!

 

 

 

Gostou? Clica no

add.png Ali em Baicho para me Ajudar!

 

 

 

Abraços..

Editado Outubro 11 por DevilMoon

05 de maio de 2010 às 22:20

Nossa cara, parabens ótimo script, ah muitos ots qe vao ser de pokemon e vai ajudar muito esse script, se eu fosse criar um ot eu usaria.

 

Parabens a vc e ao criador! Rep+ :button_ok:

Evil7E
07 de maio de 2010 às 19:03

cara estava precisando, quero fazer um server estilo pokemon, estou decidido, mas essa parte de scripts tá osso =x

 

Ajudou muito, e gostei da humildade e ética :]

 

vou testar script!

 

EDIT:

pro TFS não precisa dos três primeiros? ou precisa dos 3 e mais os dois últimos? xD

 

Att. Evil

Editado Maio 7 por Evil01

08 de maio de 2010 às 00:35

Explica ai a primeira parte, voce fala que tem que bota no global? Que porra de global? Qual arquivo. Explica melhor o topico pow

PedrinhuHenriqueP
08 de maio de 2010 às 09:24

Caramba meu, parabéns ao Narutoh por disponibilizar esse sistema para nós do Xtibia e por fazer também né?

Pois sei que não é fácil.

 

Ótimo script!

DevilMoonD
08 de maio de 2010 às 18:46

Vlw Luisfe +Rep Para Ti Tambem :D

 

@Evil

 

Sim Bota Tudu!

 

@Natsu

 

Todo Mundo Consiguiu Uns no Pvt me perguntarao e ta funfando eles intederao a maioria tbm :o

 

nao sabe onde fika Global Functions?

 

@Pedrinho

 

Vlw Ae Meo!

Editado Maio 8 por DevilMoon

08 de maio de 2010 às 18:59

DevilMoon, se eu soubesse não teria perguntando, e mesmo assim voce não sanou minha pergunta... E todo mundo quem? Ninguem disse que conseguil, eles disseram que o script esta otimo e que vão usar...

DeadlockD
12 de maio de 2010 às 18:50

Funfanfo 100% muito obrigado por postar aqui no Xtibia eu procuraa e nunca achava um que prestasse

matheus1000M
14 de maio de 2010 às 12:44

Estou com uma dúvida:

 

Onde eh global functions? (desculpe a pergunta de noob)

 

Ótimo script, está de parabens!

2 semanas depois...
valdemirotV
24 de maio de 2010 às 19:16

Postou 14 maio 2010 - 12:44

Estou com uma dúvida:

 

Onde eh global functions? (desculpe a pergunta de noob)

 

Ótimo script, está de parabens! ²

M4TH3U5M
25 de maio de 2010 às 18:40

Aki Dah Creature not found

DevilMoonD
25 de maio de 2010 às 20:25

Ops Desculpa Galera :PPPP Nao Tinha Visto o Topico Ok Pera!

 

 

@All Que Elogirao!

 

 

Muintu Obrigado :D Ok Vlw ae Galera!

 

@Valdemiroth e Natsu

 

 

Se Seu Ot Nao Tem a Pasta GlobalFunctions Cria uma Pasta Chamada GlobalFunctions.xml na pasta Mods e coloka akilo dentro se teu ot tiver a pasta mods se nao nao precisa ok eu fis isso aki em casa e funfo!

 

 

Obs Natsu Desculpe :D !

 

 

 

@R1B31R0

 

Ve Corretamente se Botou Tudu Direitinho!

matheus1000M
25 de maio de 2010 às 22:22

Consigui ;D.

Muito bom²

 

+REP

M4TH3U5M
28 de maio de 2010 às 16:06

[28/05/2010 15:05:16] [Error - LuaScriptInterface::loadFile] data/actions/scripts/pokeball.lua:67: 'end' expected (to close 'function' at line 8) near 'else'

[28/05/2010 15:05:16] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/pokeball.lua)

[28/05/2010 15:05:16] data/actions/scripts/pokeball.lua:67: 'end' expected (to close 'function' at line 8) near 'else'

[28/05/2010 15:05:16] [Warning - Actions::registerEvent] Duplicate registered item id: 5791

[28/05/2010 15:05:16] >> Loading chat channels

 

 

=/ Sabe Oq E Isso?

OBG

brunin86B
29 de maio de 2010 às 23:02

Onde fica o Global Functions?

 

E tipo, esse Global Functions só tem em mapa 8.3 ? Se tiver em outros 8.4 + me passa o nome de um ?

 

 

Por acaso é o " Global Events ? "

Editado Maio 29 por brunin86