esclarece melhor o tutorial, fiz igual ao que vc explicou e não deu isso que sube compreender, os novato n irão entender nada.
- Fórum
- OTServ
- Recursos
- Scripting
- Actions e Talkactions
- New Balls Pod
info
Grupo: Campones
Registrado: 04/05/11
Posts: 54
Reputação: +5
Char no Tibia: Demon Killer

info
Grupo: Campones
Registrado: 17/03/11
Posts: 35
Reputação: +22

Man meu primeiro tutorial e como disse novato em script axo que nao consegue pq tem que arrumar mta coisa.
Qualquer dia desses ponho umas SS.
info
Grupo: Banidos
Registrado: 24/02/11
Posts: 6
Reputação: +1
Char no Tibia: MorreuQuePena

q mapa editor vc usa ?
info
Grupo: Campones
Registrado: 22/09/10
Posts: 13
Reputação: +2
Char no Tibia: Biell [Ice]

Otimo Tutorial, concerteza vai ajudar muita gente que gostaria de add novas Poke ball's.
info
Grupo: Campones
Registrado: 17/03/11
Posts: 35
Reputação: +22

@up Valeu aew ![]()
@morreuquepena uso RME.
Bem quem nao conseguir por mande os scripts pra mim que eu faço.
info
Grupo: Campones
Registrado: 22/09/10
Posts: 13
Reputação: +2
Char no Tibia: Biell [Ice]

Você esqueceu de add no tutorial que tem modificar o go/back do creaturescripts tambem.
info
Grupo: Campones
Registrado: 04/05/11
Posts: 54
Reputação: +5
Char no Tibia: Demon Killer

ou pode me dizer o que há de errado aqui??? olha só
data/Actions.xml
<action itemid="3777" event="script" value="roupas.lua"/> <action itemid="2220;2221;2222;2223;105;107" event="script" value="goback.lua"/> <action itemid="2224;2227;110" event="script" value="fainted.lua"/> <action itemid="2147;2146;102" event="script" value="catch.lua"/> <action itemid="2550" event="script" value="order.lua" allowfaruse="1"/> <action itemid="3896;3897;3867;3868" event="script" value="roupas.lua"/> <action itemid="2276;2277;2278;2279;2280;2281;2283;2284;2285;2286;2287;2288;2289;2290" event="script" value="evolution.lua" allowfaruse="1"/>
data/actions/catch.lua
elseif item.itemid == 102 then catchrate = 20 oncatch = 198 onfail = 197 bolabola = 105
data/actions/goback.xml
if item.itemid == 2222 or item.itemid == 2223 then gobackeff = 10 elseif item.itemid == 2220 or item.itemid == 2221 then gobackeff = 191 elseif item.itemid == 105 or item.itemid == 107 then gobackeff = 193 end local effect = gobackeff if item.itemid == 2223 or item.itemid == 2221 or item.itemid == 107 then elseif item.itemid == 2222 or item.itemid == 2220 or item.itemid == 105 then
data/creaturescript/login.lua
if getPlayerItemCount(cid, greatpokeout) >= 1 and getPlayerStorageValue(cid, 61207) <= 0 and getPlayerStorageValue(cid, 17001) <= 0 and getPlayerStorageValue(cid, 17000) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then local item = getPlayerItemById(cid, TRUE, greatpokeout) doTransformItem(item.uid, greatpokein) doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke") .. " HP = ["..getPlayerStorageValue(cid, 61205).."/"..getPlayerStorageValue(cid, 61206).."]") end
data/creaturescript/goback.lua
if getPlayerSlotItem(owner, 8).itemid == 2220 or getPlayerSlotItem(owner, 8).itemid == 2221 then doSendMagicEffect(getCreaturePosition(cid), 191) elseif getPlayerSlotItem(owner, 8).itemid == 2222 or getPlayerSlotItem(owner, 8).itemid == 2223 then doSendMagicEffect(getCreaturePosition(cid), 10) elseif getPlayerSlotItem(owner, 8).itemid == 105 or getPlayerSlotItem(owner, 8).itemid == 107 then doSendMagicEffect(getCreaturePosition(cid), 193) end doPlayerSendTextMessage(owner, 22, "Your pokemon fainted.") if getPlayerSlotItem(owner, 8).itemid == 2220 or getPlayerSlotItem(owner, 8).itemid == 2221 then doTransformItem(getPlayerSlotItem(owner, 8).uid, 2227) elseif getPlayerSlotItem(owner, 8).itemid == 2222 or getPlayerSlotItem(owner, 8).itemid == 2223 then doTransformItem(getPlayerSlotItem(owner, 8).uid, 2224) elseif getPlayerSlotItem(owner, 8).itemid == 105 or getPlayerSlotItem(owner, 8).itemid == 107 then doTransformItem(getPlayerSlotItem(owner, 8).uid, 110) end
data/lib/poklib.lua
pokein, pokeout = 2222,2223
pokeinultra, pokeoutultra = 2220, 2221
pokeingreat, pokeoutgreat = 105, 107
function doRemoveTile(pos)-- Script by mock
pos.stackpos = 0
local sqm = getTileThingByPos(pos)
doRemoveItem(sqm.uid,1)
end
function doCreateTile(id,pos) -- By mock
doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)
doCreateItem(id,1,pos)
end
function getPosDirs(p, dir) -- By MatheusMkalo
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end
function doItem(pos,a,d)-- Script by mock
doCreateTile(460,pos)
pos.stackpos = 0
local c = getTileThingByPos(pos)
doItemSetAttribute(c.uid, "aid", a)
end
function getDescription(uid)
for i,x in pairs(getItemDescriptions(uid)) do
if i == "special" then
return x
end
end
end
function findLetter(string, letter)
for i = 1, #string do
if string:sub(i, i) == letter then
return i
end
end
end
function isWalkable(pos, creature, proj, pz)-- by Nord
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false, true end
local n = not proj and 3 or 2
for i = 0, 255 do
pos.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and not isCreature(tile.uid) then
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end
return true
end
function getPosDirs(p, dir)
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end
function canSummon(cid)
local pos = getCreaturePosition(cid)
local state = false
for i = 1, 8 do
if isWalkable(getPosDirs(getCreaturePosition(cid), i)) then
state = true
end
end
return state
end
function isPlayerSummon(cid, uid)
if getCreatureMaster(uid) == cid then
return TRUE
end
return FALSE
end
function getSummonLifes(cid)
for _,x in pairs(getCreatureSummons(cid)) do
return getCreatureHealth(x), getCreatureMaxHealth(x)
end
end
function getItemsInContainerById(container, itemid) -- Function By Kydrai
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
for slot=0, (getContainerSize(container)-1) do
local item = getContainerItem(container, slot)
if isContainer(item.uid) then
local itemsbag = getItemsInContainerById(item.uid, itemid)
for i=0, #itemsbag do
table.insert(items, itemsbag[i])
end
else
if itemid == item.itemid then
table.insert(items, item.uid)
end
end
end
end
return items
end
function addPokeball(cid, pokename, maxh)
local s = doPlayerAddItem(cid, pokein)
local s = doPlayerAddItem(cid, pokeinultra)
local s = doPlayerAddItem(cid, pokeingreat)
doItemSetAttribute(s, "poke", "This is "..pokename.."'s pokeball. HP = ["..maxh.."/"..maxh.."]")
doItemSetAttribute(s, "name", "" .. pokename .. " Poke Ball")
end
function getPokeOutLive(cid)
dat = {}
for slot = CONST_SLOT_FIRST, CONST_SLOT_LAST do
local item = getPlayerSlotItem(cid, slot)
if isContainer(item.uid) then
local items = getItemsInContainerById(item.uid, pokeout)
local items = getItemsInContainerById(item.uid, pokeoutgreat)
local items = getItemsInContainerById(item.uid, pokeoutultra)
for _, ui in pairs(items) do
if getItemAttribute(ui, "poke"):sub(#getItemAttribute(ui, "poke")) == "." then
table.insert(dat, ui)
end
end
end
if item.itemid == pokeout then
if getItemAttribute(item.uid, "poke"):sub(#getItemAttribute(item.uid, "poke")) == "." then
table.insert(dat, item.uid)
end
end
if item.itemid == pokeoutultra then
if getItemAttribute(item.uid, "poke"):sub(#getItemAttribute(item.uid, "poke")) == "." then
table.insert(dat, item.uid)
end
end
if item.itemid == pokeoutgreat then
if getItemAttribute(item.uid, "poke"):sub(#getItemAttribute(item.uid, "poke")) == "." then
table.insert(dat, item.uid)
end
end
end
return dat
end
ta ai só faltou a nuser mais nela n tem como ta errado ![]()
info
Grupo: Campones
Registrado: 22/09/10
Posts: 13
Reputação: +2
Char no Tibia: Biell [Ice]

Tem que modificar no portrait tambem para ele aceitar as novas poke ball's se não vc n consegue coloca-las no slot.
Editado Maio 12 por BielLokS
info
Grupo: Campones
Registrado: 17/03/11
Posts: 35
Reputação: +22

Malz nao tava podendo entra agora to de volta '-'
Galea me add no msn quem nao consegui que tento ajuda e @BielLokS valeu ja vo por
Axei que tinha posto '-' e se nao po la o script nem funfa porcausa na hora do poke morrer.
Ja estarei atualizando.
Tutorial legal =) deu pra eu aprimorar o meu script de novas pokebolas /o/
info
Grupo: Campones
Registrado: 17/03/11
Posts: 35
Reputação: +22

@up
Hehe gosto? Rep+ aew ![]()
Talvez ponha com fotos mais to trabalhando no meu projeto
dai fika dificil '-'
T+ duvidas poste aki.
info
Grupo: Campones
Registrado: 31/12/10
Posts: 24
Reputação: +10

Vlw ae , me ajudou muito ficou massa no meu sv ^^
Rep+!
info
Grupo: Campones
Registrado: 17/03/11
Posts: 35
Reputação: +22

@up
Denada qualquer duvida so posta que ajudo.
info
Grupo: Campones
Registrado: 05/04/11
Posts: 9
Reputação: 0

po fiz tudo que vc fez...na hora de soltar o pokemon da nova ball,ao invez de sair o pokemon,sai um efeito de como se fosse tacando uma pokebola!!! uso pokemon dash tb...como arrumo isso?



info
Grupo: Campones
Registrado: 17/03/11
Posts: 35
Reputação: +22
Apenas para pokemon dash.
Ola galera, vim aki fazer um tutorial que acredito que muitos estão atras.
Aki eu irei por como voce pode add novas balls no Pokemon Dash.
Bem primeiro de tudo ira precisar de otitemeditor 0.3.7,map editor e conheçimento em mexer
nesses arquivos citados alem de saber mexer em script.Bem Vamos la:
Abra o remeres com o client que voce quer.Apos isso procure item por item
Ate achar as pokebolas juntaveis acesa e apagada.
Feito isso abra o otitemeditor 0.3.7 e procure os itens que voce achou no map editor
Note que tera opçoes e tera uma sequencia numerica embaixo da foto do item e do lado
Do CID Anote o numero e veja qual item é
Apos ter feito isso com as pokebolas que irao dar catch,soltar poke,puxar o poke e a que sera
Usada para reviver na nurse, va no menu tools ainda no itemeditor e add 4 novos items.
Va no 1 item dai va no item em CID e ponha o numero que voce add para a pokebola que
Dara catch, e marque Useable e Pickupable.
Agora va no 2 item que você add ponha em CID o numero que voce anotou para pokebola acesa
E marque a opção Pickupable
Agora o 3 item que sera a ball apagada que puxara o poke va em CID e ponha o numero da pokebola apagada
Que voce anotou e marque a opção Pickupable e Not Moveable
Agora 4 e ultimo item o que sera usado na Nurse Joy Add em CID o mesmo numero que add no 3 item, mas nas opções
Marque apenas Pickupable.
1 Parte Foi Feita agora 2 parte.Envolve Script agora.
Va na pasta do seu server e em data\actions\scripts Abra seu catch e add o seguinte
elseif item.itemid == XXX then--Id da pokebola que sera usada para capturar
catchrate = 2--Chance ao usar essa pokebola
oncatch = 198--Effect da pokebola rodando pra la e praca e fikando verde
onfail = 197--Effect da pokebola rodando pra la e praca e falhando
bolabola = 2652--pokebola que sera usada para liberar o poke ou seja a ball acesa
Pronto agora salve e feche e abra o seu goback.
e add isso:
elseif item.itemid == AC or item.itemid == AP then--AC Pokebola Acesa, AP pokebola apagada
gobackeff = 193--Effect da hora que ira puxar o poke pra fora ou pra dentro da ball
Agora desca um poco ira achar essa linha
if item.itemid == 2223 or item.itemid == 2221 then
Antes de then add
or item.itemid == XXX --XXX id da pokebola apagada
Fikando Assim:
if item.itemid == 2223 or item.itemid == 2221 or item.itemid == XXX then--XXX id da ball apagada
Agora desca mais um poco ira ter outro do decima mais com outros ids das pokebolas acesas assim
elseif item.itemid == 2222 or item.itemid == 2220 then
ADD or item.itemid == XXXAntes de then fikando assim
elseif item.itemid == 2222 or item.itemid == 2220 or item.itemid == XXX then--XXX id da ball acesa
Pronto Salve e feche.
Va na pasta do seu server\Data\Actions e abra Actions.xml E procure por goback
e add o seguinte codigo depois do ultimo numero ;XXXAC;XXXAP ---XXXAC é id da ball acesa e XXXAP o id da ball apagada
Agora procure por catch e add o seguinte depois do ultimo numero:
;XXXCA---XXXCA id da ball que sera para dar catch
E procure por fainted e add
;XXXDE ---XXXDE o id da ball que é a que sera usada para reviver.
Agora salve e feche e va na pasta do seu server data\creaturescripts\scripts
E abra login.lua
E procure por
if getPlayerItemCount(cid, ultrapokeout) >= 1 and getPlayerStorageValue(cid, 61207) <= 0 and getPlayerStorageValue(cid, 17001) <= 0 and getPlayerStorageValue(cid, 17000) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then
local item = getPlayerItemById(cid, TRUE, ultrapokeout)
doTransformItem(item.uid, ultrapokein)
doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke") .. " HP = ["..getPlayerStorageValue(cid, 61205).."/"..getPlayerStorageValue(cid, 61206).."]")
end
E add abaixo disso isso
if getPlayerItemCount(cid, greatpokeout) >= 1 and getPlayerStorageValue(cid, 61207) <= 0 and getPlayerStorageValue(cid, 17001) <= 0 and getPlayerStorageValue(cid, 17000) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then
local item = getPlayerItemById(cid, TRUE, greatpokeout)
doTransformItem(item.uid, greatpokein)
doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke") .. " HP = ["..getPlayerStorageValue(cid, 61205).."/"..getPlayerStorageValue(cid, 61206).."]")
end
Expilação Greatpokeout e Greatpokein sao nomes na lib que depois irei mostrar como add no proximo passo.
Bem mude apenas o que esta em verde greatpokeout é ball apagada e greatpokein ball acesa
Mude o great para outro nome por exemplo super ou great ou master ou safari ou outro qualquer.
Pronto feito isso salve e feche.
Agora va na pasta do seu server\data\lib e abra pokelib logo ao abrir ira apareçer isso:
pokein, pokeout = 2222,2223
ultrapokein, ultrapokeout = 2220, 2221
se voce estiver usando pokemon dash com apenas duas balls
Add embaixo de ultrapokein, ultrapokeout = 2220, 2221
isso NOMEpokein, NOMEpokeout = 2652, 2653---NOMEpokein é o id da ball acesa e NOMEpokeout o id da ball apagada para voce nao bugar com o pokemon para fora é necessario seguir o passo do creaturescripts
ai emcima e eu disse que era pra mudar o GREAT para outro nome e bem agora no NOME voce poem o nome que escolheu
no login.lua
Feito isso salve e feche.
Agora volte na pasta creaturescripts/scripts e abra o goback.lua
Feito isso procure por
if getPlayerSlotItem(owner, 8).itemid == 2220 or getPlayerSlotItem(owner, 8).itemid == 2221 then
doSendMagicEffect(getCreaturePosition(cid), 191)
E add embaixo
elseif getPlayerSlotItem(owner, 8).itemid == 2222 or getPlayerSlotItem(owner, 8).itemid == 2223 then
doSendMagicEffect(getCreaturePosition(cid), 10)
Explicação:2222 é o id da ball acesa 2223 apagada e dai no 10 é o effect do poke voltando pra pokebola.Agora desca um poco voce ira achar isso:
if getPlayerSlotItem(owner, 8).itemid == 2220 or getPlayerSlotItem(owner, 8).itemid == 2221 then
doTransformItem(getPlayerSlotItem(owner, 8).uid, 2227)
Add embaixo
elseif getPlayerSlotItem(owner, 8).itemid == 2222 or getPlayerSlotItem(owner, 8).itemid == 2223 then
doTransformItem(getPlayerSlotItem(owner, 8).uid, 2224)
Explicação mesma coisa do de cima mas em 2224 é o id da ball
que sera transformada na que sera o pokemon morto.
Ultimo passo Para curar as pokebolas.
Va na pasta do seu server\data\npc\script e abra o script da sua nurse joy que cura seus pokemons
E logo ira apareçer
local pokeballs = {'2222', '2224'}
local ultraballs = {'2220', '2227'}
Add embaixo local testballs = {'AC', 'RE'} ---Explicação, AC é o id da pokebola acesa e RE o id da pokebola com pokemon morto
Apos feito isso procure por isso
if isInArray(pokeballs, getPlayerSlotItem(cid, CONST_SLOT_FEET).itemid) then
local feet = getPlayerSlotItem(cid, CONST_SLOT_FEET)
local maxh = tonumber(getItemAttribute(feet.uid, "poke"):match("/(.+)]"))
doItemSetAttribute(feet.uid, "poke", getItemAttribute(feet.uid, "poke"):sub(1, findLetter(getItemAttribute(feet.uid, "poke"), "[")) .. maxh .. getItemAttribute(feet.uid, "poke"):sub(findLetter(getItemAttribute(feet.uid, "poke"), "/")))
doTransformItem(feet.uid, 2222)
end
Apos achar isso add embaixo
if isInArray(testballs, getPlayerSlotItem(cid, CONST_SLOT_FEET).itemid) then
local feet = getPlayerSlotItem(cid, CONST_SLOT_FEET)
local maxh = tonumber(getItemAttribute(feet.uid, "poke"):match("/(.+)]"))
doItemSetAttribute(feet.uid, "poke", getItemAttribute(feet.uid, "poke"):sub(1, findLetter(getItemAttribute(feet.uid, "poke"), "[")) .. maxh .. getItemAttribute(feet.uid, "poke"):sub(findLetter(getItemAttribute(feet.uid, "poke"), "/")))
doTransformItem(feet.uid, XXX)---Id da ball acesa
end
Obs:Os ids da balls devem ser seguidos
EX:
Acesa:1689
Apagada:1690
Ja a que é usada para ser usada na nurse
Pode variar o id:1735
Pronto salve e feche e Nao esqueça do REP+ em
Creditos apenas meu e nao poste em outro forum sem minha permissao.
Editado Maio 16 por TheDevilZ