Ir para conteúdo
  • 0

Função getPlayerFreeCap(cid)


Lordbaxx

Pergunta

Bom eu tentei utilizar a função "getPlayerFreeCap", para a verificação/contagem do número de pokebolas que o jogador tem dentro de sua bag. Tentei numerar com 0.99 + 0.99 e com 1, 2, 3, 4 etc.
Exemplo:
 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!")
 end
E tentei também:
if getPlayerFreeCap(cid) < 1 then  --[[O 1 conta como uma pokeball com um pokemon na bag do jogador
 doPlayerSendCancel("You don't have pokemon!")
 end

 

Poré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!

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

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 por Aberos
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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..

Link para o comentário
Compartilhar em outros sites

  • 0

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!

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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..

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

 

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 

É preciso utilizar o atributo "isPokeball" no items.xml? Grato.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...