Ir para conteúdo
  • 0

(resolvido) points premium in game


kaleudd

Pergunta

7 respostass a esta questão

Posts Recomendados

  • 0

Supondo que, de fato, todas as funções tenham sido copiadas exatamente iguais (o código de box que você postou está incompleto, então me baseei no do PDA):

local pokemon = {    ["nome_do_pokémon"] = {price = xxx, boost = xxx},    --etc}function doCorrectString(str)                       --Slicer    local name = str:explode(" ")    local final = {}        for _, s in ipairs(name) do        table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())    end    return table.concat(final, (name[2] and " " or ""))endfunction onSay(cid, words, param)    local p = param:lower()        if p == "list" then        local str = "******** You can buy: ********"                for p_name, info in pairs(pokemon) do            str = str.."\n-"..p_name.." [+"..info.boost.."] for "..info.price.." premium point(s)."        end                doPlayerPopupFYI(cid, str)    elseif pokemon[doCorrectString(p)] then        local poke = pokemon[doCorrectString(p)]                if getAccountPoints(cid) < poke.price then            doPlayerSendCancel(cid, "Sorry, you do not have enough points. ["..poke.price.." premium points]")            return true        end                doPlayerSendTextMessage(cid, 27, "You successfully bought a "..doCorrectString(p).." [+"..poke.boost.."] for "..poke.price.." premium point(s).")        doAccountRemovePoints(cid, poke.price)        addPokeToPlayer(cid, doCorrectString(p), poke.boost, nil, "normal")    else        doPlayerSendCancel(cid, "Invalid parameter. Type 'list' to see a list of pokemon you can buy, or type the name of the wished pokemon.")    end    return trueend

Algumas observações:

Optei por deixar o código mais configurável. Você pode escolher os pokémon que podem ser comprados, junto com boost e preço específico. Essas informações são mostradas num parâmetro que incluí (/comando list).

Logo, as opções de fala são:

/comando nome_do_pokémon     --Para comprar um pokémon./comando list                --Para mostrar uma lista com os pokémon compráveis.

 

Também, devo informar que os premium points não são compartilhados por outros personagens da conta. Para que isso aconteça, recomendaria instalar a função setAccountStorageValue, encontrada por aí na internet (acho que aqui no XTibia tem).

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

  • 0

Hm, e se adaptasse esse sistema para o uso de storages? Não vejo diferença prática, para falar a verdade (e database não é minha praia).

 

Qualquer coisa, basta substituir a lib por:

PREMIUM_POINT_KEY = 47371function getAccountPoints(cid)    if not isPlayer(cid) then return true end        local points = getPlayerStorageValue(cid, PREMIUM_POINT_KEY)        return points < 0 and 0 or pointsendfunction doAccountAddPoints(cid, count)    if not isPlayer(cid) then return true end        return setPlayerStorageValue(cid, PREMIUM_POINT_KEY, getAccountPoints(cid) + count)endfunction doAccountRemovePoints(cid, count)    if not isPlayer(cid) or getAccountPoints(cid) == 0 then return true end        return setPlayerStorageValue(cid, PREMIUM_POINT_KEY, getAccountPoints(cid) - count)end

Os outros códigos permanecem os mesmos.

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

  • 0
9 horas atrás, zipter98 disse:

Hm, e se adaptasse esse sistema para o uso de storages? Não vejo diferença prática, para falar a verdade (e database não é minha praia).

 

Qualquer coisa, basta substituir a lib por:

PREMIUM_POINT_KEY = 47371function getAccountPoints(cid)    if not isPlayer(cid) then return true end        local points = getPlayerStorageValue(cid, PREMIUM_POINT_KEY)        return points < 0 and 0 or pointsendfunction doAccountAddPoints(cid, count)    if not isPlayer(cid) then return true end        return setPlayerStorageValue(cid, PREMIUM_POINT_KEY, getAccountPoints(cid) + count)endfunction doAccountRemovePoints(cid, count)    if not isPlayer(cid) or getAccountPoints(cid) == 0 then return true end        return setPlayerStorageValue(cid, PREMIUM_POINT_KEY, getAccountPoints(cid) - count)end

Os outros códigos permanecem os mesmos.

muito bom,é o que eu queria isso mesmo,obrigado e aproveitando o topico teria como criar um script que o player digita !buycharizard,e remove x points e o player ganha 1x charizard direto na pokeball? e caso tiver 6 pokes na bag o pokemon comprado ir para depot,e também se puder botar para o pokemon vir bostado no maximo,no meu servidor o bost maximo é +100,ai quando player comprasse o charizard ele ja viria +100,obrigado.

 

estou usando esse script para comprar x points por y item,porém queria x points por y pokémon

 

Spoiler

function onSay(cid, words, param)

if getAccountPoints(cid) < 100 then -- QUANTIDADE DE PONTOS

doPlayerSendCancel(cid, 'Você não tem 100 Donate Points.') -- QUANTIDADE DE PONTOS

else

if doAccountRemovePoints(cid,100) == TRUE then -- QUANTIDADE DE PONTOS

doPlayerAddItem(cid, 2160, 200)  -- ID DO ITEM QUE VAI COMPRAR

doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MORTAREA)

else

doSendMagicEffect(getPlayerPosition(cid), CONST_ME_FLAMEAREA)

end

end

end

 

 

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

  • 0

Poderia me informar se existe alguma função que adiciona o pokémon para o jogador, como no PDA? Porque, caso não haja, gostaria de pedir que você postasse o código de uma daquelas box que dão um pokémon aleatório. Como nunca mexi nesse PDA open source, não conheço seus atributos e funções, por isso preciso de um outro script para me basear.

Link para o comentário
Compartilhar em outros sites

  • 0
7 horas atrás, zipter98 disse:

Poderia me informar se existe alguma função que adiciona o pokémon para o jogador, como no PDA? Porque, caso não haja, gostaria de pedir que você postasse o código de uma daquelas box que dão um pokémon aleatório. Como nunca mexi nesse PDA open source, não conheço seus atributos e funções, por isso preciso de um outro script para me basear.

as funções são as mesmas do pda,fiz questão de add um a um,e são todos ''copias'' das funções originais.

segue a boxs

 

Spoiler

local a = {

[11638] = {balltype = "normal", ballid = 11826,

        pokemons = {"Caterpie", "Weedle", "Pidgey", "Rattata", "Metapod", "Kakuna", "Spearow",

        "Diglett", "Zubat", "Paras", "Oddish", "Poliwag", "Bellsprout", "Magnemite", "Shellder", "Krabby", "Horsea",

        "Goldeen", "Magikarp", "Exeggcute"}},

[11639] = {balltype = "great", ballid = 11832,        --alterado v1.3

        pokemons = {"Bulbasaur", "Charmander", "Squirtle", "Pidgeotto", "Raticate", "Pikachu",

        "Butterfree", "Beedrill", "Ekans", "Arbok", "Gloom", "Nidoran Female", "Nidorina", "Nidoran Male", "Nidorino",

        "Golbat", "Clefairy", "Jigglypuff", "Venonat", "Sandshrew", "Vulpix", "Meowth", "Persian", "Psyduck", "Mankey",

        "Growlithe", "Poliwhirl", "Abra", "Machop", "Weepinbell", "Tentacool", "Geodude", "Ponyta", "Slowpoke", "Doduo",

        "Seel", "Grimer", "Muk", "Gastly", "Drowzee", "Voltorb", "Cubone", "Koffing", "Weezing", "Rhyhorn", "Seaking",

        "Staryu", "Eevee", "Omanyte", "Kabuto"}},

[11640] = {balltype = "super", ballid = 11835,

        pokemons = {"Ivysaur", "Charmeleon", "Wartortle", "Raichu", "Fearow", "Vileplume", "Venomoth",

        "Parasect", "Clefable", "Wigglytuff", "Sandslash", "Dugtrio", "Golduck", "Primeape", "Kadabra", "Machoke",

        "Victreebel", "Graveler", "Rapidash", "Slowbro", "Magneton", "Farfetch'd", "Dodrio", "Cloyster", "Haunter", "Onix",

        "Hypno", "Kingler", "Electrode", "Exeggutor", "Marowak", "Hitmonlee", "Hitmonchan", "Lickitung", "Chansey",

        "Tangela", "Kangaskhan", "Seadra", "Starmie", "Mr. Mime", "Pinsir", "Tauros", "Vaporeon", "Jolteon",

        "Flareon", "Porygon"}},

[11641] = {balltype = "ultra", ballid = 11829,

        pokemons = {"Venusaur", "Charizard", "Blastoise", "Pidgeot", "Nidoqueen", "Nidoking", "Ninetales",

        "Arcanine", "Poliwrath", "Alakazam", "Machamp", "Tentacruel", "Golem", "Dewgong", "Gengar", "Rhydon", "Scyther",

        "Jynx", "Electabuzz", "Magmar", "Gyarados", "Lapras", "Omastar", "Kabutops", "Aerodactyl", "Snorlax", "Dragonair",

        "Dragonite"}}

}

local extrastrength = 1.1        

function onUse(cid, item, frompos, item2, topos)

         local b = a[item.itemid]                                    

               if not b then return true end

         local pokemon = b.pokemons[math.random(#b.pokemons)] --alterado v1.3

         local btype = b.balltype

               if not pokeballs[btype] then return true end

         local gender = getRandomGenderByName(pokemon)

         local happy = 220

         local leveltable = getPokemonExperienceTable(pokemon)

         

         local ball = 0

         local sendToDepot = false                                              --alterado v1.6          

         if getCreatureMana(cid) >= 6 or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then

               sendToDepot = true

               ball = doCreateItemEx(b.ballid)    --alterado v1.3

         else

               ball = item.uid

         end  

         

           doItemSetAttribute(ball, "poke", pokemon)

           doItemSetAttribute(ball, "hp", 1)

           doItemSetAttribute(ball, "happy", happy)

           doItemSetAttribute(ball, "gender", gender)

           if pokemon == "Hitmonchan" or pokemon == "Shiny Hitmonchan" then

              doItemSetAttribute(ball, "hands", 0)

           end

           doItemSetAttribute(ball, "description", "Contains a "..pokemon..".")

           doItemSetAttribute(ball, "fakedesc", "Contains a "..pokemon..".")    

 

         doPlayerSendTextMessage(cid, 27, "You opened a pokemon prize box +"..item.itemid - (11637).."!")

         doPlayerSendTextMessage(cid, 27, "The prize pokemon was a "..pokemon..", congratulations!")

         

         if sendToDepot then

               doPlayerSendMailByName(getCreatureName(cid), ball, 1)  --alterado v1.3

               doPlayerSendTextMessage(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.")

               doRemoveItem(item.uid)

         else

               doTransformItem(ball, pokeballs[btype].on)

         end

         

         doSendMagicEffect(getThingPos(cid), 29)

return true

end

 

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

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...