cara, esse n é o jeito certo de se fazer isso. Você tá verificando quantos oz o player tem de capacidade, independente de numero de pokebolas.
Pra fazer isso que vc quer vc precisa ter a função onMoveItem compilada na sua source e fazer checagem por id (acredito que o id da pokebola cheia seja diferente da pokebola vazia, não?)
daí vc só pega os tipos diferentes de pokebola que existem e executa essa função getPlayerItemCount(cid, itemid) pra cada um deles. Se a soma das counts for maior que a quantidade que ele pode carregar vc dá um return false no callback da onMoveItem.
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

getPlayerMana()
esqueceu que os server de pokemon usam a mana para mostrar na barra quantos pokemons tem, logo usando a função getPlayerMana, vai retornar o numero de pokemons q tem.
E é possivel usar sim a função getPlayerFreeCap(), só que ela retorna o tanto que você tem LIVRE(FREE) de cap, não o tanto que você esta utilizando, e muito menos o tanto que você tem no total.
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

Nightwolf.. Teria como mudar isso? Tipo, ao invés de Cap. Colocar por mana? No meu serve é por cap, e isso está me dando bug quando captura o pokemon.. E bem, eu tenho essa função onmoveitem.. E possuo as sources..
cara, esse n é o jeito certo de se fazer isso. Você tá verificando quantos oz o player tem de capacidade, independente de numero de pokebolas.
Pra fazer isso que vc quer vc precisa ter a função onMoveItem compilada na sua source e fazer checagem por id (acredito que o id da pokebola cheia seja diferente da pokebola vazia, não?)
daí vc só pega os tipos diferentes de pokebola que existem e executa essa função getPlayerItemCount(cid, itemid) pra cada um deles. Se a soma das counts for maior que a quantidade que ele pode carregar vc dá um return false no callback da onMoveItem.
Entendi perfeitamente. Obrigado!
info
Grupo: Visconde
Registrado: 23/02/13
Posts: 437
Reputação: +71
Gênero: Masculino

Existe uma função nos ots que se chama getPlayerPokeballs
function getPlayerPokeballs(cid)
local ret = {}
local container = 0
if isCreature(cid) then
container = getPlayerSlotItem(cid, 3).uid
local myball = getPlayerSlotItem(cid, 8)
if myball.uid > 0 then
table.insert(ret, myball)
end
else
container = cid
end
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 = getPlayerPokeballs(item.uid)
if itemsbag and #itemsbag > 0 then
for i = 0, #itemsbag do
table.insert(ret, itemsbag[i])
end
end
elseif isPokeball(item.itemid) then
table.insert(ret, item)
end
end
end
return ret
end
Porem depende dessa funçao isPokeball onde vc prescisa configurar os ids das balls
function isPokeball(item)
if not item then return false end
if item == 2227 then return true end
if item >= 2220 and item <= 2224 then
return true
end
if item >= 2651 and item <= 2659 then
return true
end
if item >= 11579 and item <= 12039 then
return true
end
return false
end
Editado Outubro 25 por Aberos
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

Isso é no PDA, aberos.. tentei colocar por "mana e cap" consegui.. Porem, eu descobrir o porque do brun123 colocar os pokémons por cap.. bem, se for por mana, quando dar goback em um pokémon, vai o pokémon e outro sendo selvagem uahe
info
Grupo: Visconde
Registrado: 23/02/13
Posts: 437
Reputação: +71
Gênero: Masculino

Jovem nao existe isso de é no pda, LUA é igual em qualquer server , e pelo oque o cara flw ali ele quer uma funcao pra retornar o tanto de pokeballs o player tem na bag , se ele editar ali vai funcionar de boa.Eu uso ja usei essa funcao ate no 8.6
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

Você não entendeu o que falei mas de boas. Ele quer verificar o tanto de pokéball que o player tem na bag, em um sistema de duel..
tipo, se o player(cid) foi invitar o outro jogar e o mesmo(cid) nao tiver o tanto de pokeball que ele escolheu os channels, vai dar um sendcansel e avisar que ele nao tem pokemons suficiente.. Se o player(cid) invitar e tive as balls, só que se o outro player(target) não tiver, vai dar outro cancel.. ou entao poderia invitar normal e quando o target for aceitar, é só colocar pra fazer a mesma checagem..
info
Grupo: Visconde
Registrado: 23/02/13
Posts: 437
Reputação: +71
Gênero: Masculino

Entao me explica pq a funcao que eu postei ali nao vai funcionar? se a funcao que eu postei ali serve pra retornar a quantidade de pokeballs o player tem
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

Bem, eu n disse que não iria funcionar '-'
info
Grupo: Visconde
Registrado: 23/02/13
Posts: 437
Reputação: +71
Gênero: Masculino

Nao foi oque pareceu ali quando vc disse -"Isso e no Pda, aberos", mas foda-se o foco aki e ajudar o cara que fez o topico
Existe uma função nos ots que se chama getPlayerPokeballs
function getPlayerPokeballs(cid) local ret = {} local container = 0 if isCreature(cid) then container = getPlayerSlotItem(cid, 3).uid local myball = getPlayerSlotItem(cid, 8) if myball.uid > 0 then table.insert(ret, myball) end else container = cid end 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 = getPlayerPokeballs(item.uid) if itemsbag and #itemsbag > 0 then for i = 0, #itemsbag do table.insert(ret, itemsbag[i]) end end elseif isPokeball(item.itemid) then table.insert(ret, item) end end end return ret endPorem depende dessa funçao isPokeball onde vc prescisa configurar os ids das balls
function isPokeball(item) if not item then return false end if item == 2227 then return true end if item >= 2220 and item <= 2224 then return true end if item >= 2651 and item <= 2659 then return true end if item >= 11579 and item <= 12039 then return true end return false end
É preciso utilizar o atributo "isPokeball" no items.xml? Grato.
info
Grupo: Visconde
Registrado: 23/02/13
Posts: 437
Reputação: +71
Gênero: Masculino

N prescisa do isPokeball no atributo nao
info
Grupo: Marquês
Registrado: 03/02/13
Posts: 1.2k
Reputação: +254
Gênero: Masculino
Char no Tibia: Partiu Baladinha

Tópico Movido
Este tópico foi movido de "OTServ → Suporte OTServ → Suporte Scripting"
para "OTServ → Suporte OTServ → Suporte Scripting → Pedidos e dúvidas resolvidos - Scripting".




info
Grupo: Conde
Registrado: 01/07/13
Posts: 521
Reputação: +291
if getPlayerFreeCap(cid) < 0.99 then --[[O 0.99 conta como uma pokeball com um pokemon na bag do jogador (CADA 0.99 = 1 pokemon) doPlayerSendCancel("You don't have pokemon!") endif getPlayerFreeCap(cid) < 1 then --[[O 1 conta como uma pokeball com um pokemon na bag do jogador doPlayerSendCancel("You don't have pokemon!") endPorém nenhum dos dois modos funcionaram.. Eu utilizo estes if's no script onde abre o channel para escolher o número de pokemons.
1 pokemon, 2 pokemons, 3 pokemons etc..
No caso o if getPlayerFreeCap(cid), serviria para checar se o player tem a quantidade de pokemons que escolheu.. Espero que alguém saiba se tem algo errado e possa ajudar. Abraço!