Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Histórico de Reputação

  1. Upvote
    zipter98 recebeu reputação de M i s s em (resolvido) points premium in game   
    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).
  2. Upvote
    zipter98 recebeu reputação de kaleudd em (resolvido) points premium in game   
    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.
  3. Upvote
    zipter98 recebeu reputação de kaleudd em (resolvido) points premium in game   
    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.
  4. Confuso
    zipter98 recebeu reputação de DanijoBR em [PEDIDO] Item aleatorio   
    Antes de mais nada, vou explicar a lógica por trás do código que escrevi e sua configuração.
     
    Tome a seguinte imagem como referência:

     
    As posições que serão consideradas no "sorteio" estão contidas na área do quadrilátero (representado em azul). Por isso, para delimitar essa área do restante do mapa que não será considerado tomamos como pontos de referência os vértices A e B. No código que postarei a seguir, você deve colocar em fromPos as coordenadas do ponto A (ponto superior esquerdo da área), e em toPos as coordenadas do ponto B (ponto inferior direito da área).
    Também optei por imprimir a posição escolhida na distro, facilitando sua busca.
     
    data/globalevents/scripts:
    local config = { itemid = xxx, --ID do item criado. edges = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda. toPos = {x = x, y = y, z = z} --Coordenadas da posição inferior direita. }}function isWalkable(pos, creature, proj, pz, water)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water 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 trueendfunction getRandomPos(f, t) local pos = {x = math.random(f.x, t.x), y = math.random(f.y, t.y), z = math.random(f.z, t.z)} if not isWalkable(pos, true, true, true, true) then pos = getRandomPos(f, t) end return posendfunction onStartup() local pos = getRandomPos(config.edges.fromPos, config.edges.toPos) print("Coordenadas selecionadas para o item "..getItemNameById(config.itemid)..":") print("X: "..pos.x..", Y: "..pos.y..", Z: "..pos.z) doCreateItem(config.itemid, 1, pos) return trueend Tag:
    <globalevent name="randompos" type="start" event="script" value="nome_do_arquivo.lua"/>  
  5. Upvote
    zipter98 recebeu reputação de wougoplex em [PEDIDO] Item aleatorio   
    Antes de mais nada, vou explicar a lógica por trás do código que escrevi e sua configuração.
     
    Tome a seguinte imagem como referência:

     
    As posições que serão consideradas no "sorteio" estão contidas na área do quadrilátero (representado em azul). Por isso, para delimitar essa área do restante do mapa que não será considerado tomamos como pontos de referência os vértices A e B. No código que postarei a seguir, você deve colocar em fromPos as coordenadas do ponto A (ponto superior esquerdo da área), e em toPos as coordenadas do ponto B (ponto inferior direito da área).
    Também optei por imprimir a posição escolhida na distro, facilitando sua busca.
     
    data/globalevents/scripts:
    local config = { itemid = xxx, --ID do item criado. edges = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda. toPos = {x = x, y = y, z = z} --Coordenadas da posição inferior direita. }}function isWalkable(pos, creature, proj, pz, water)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water 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 trueendfunction getRandomPos(f, t) local pos = {x = math.random(f.x, t.x), y = math.random(f.y, t.y), z = math.random(f.z, t.z)} if not isWalkable(pos, true, true, true, true) then pos = getRandomPos(f, t) end return posendfunction onStartup() local pos = getRandomPos(config.edges.fromPos, config.edges.toPos) print("Coordenadas selecionadas para o item "..getItemNameById(config.itemid)..":") print("X: "..pos.x..", Y: "..pos.y..", Z: "..pos.z) doCreateItem(config.itemid, 1, pos) return trueend Tag:
    <globalevent name="randompos" type="start" event="script" value="nome_do_arquivo.lua"/>  
  6. Upvote
    zipter98 recebeu reputação de Wase Wiss em (resolvido) Alguém edita essa script para min ?   
    Abaixo de:
    function onSay(cid, words, param, channel) coloque:
    local posis = { --Abaixo você configura, respectivamente, as coordenadas da posição superior esquerda (fromPos) e inferior direita (toPos) das áreas. {fromPos = {x = x, y = y, z = z}, toPos = {x = x, y = y, z = z}}, {fromPos = {x = x, y = y, z = z}, toPos = {x = x, y = y, z = z}}, {fromPos = {x = x, y = y, z = z}, toPos = {x = x, y = y, z = z}}, --etc}local check_posfor 1, #posis do if isInArea(getThingPos(cid), posis[i].fromPos, posis[i].toPos) then check_pos = true break endendif not check_pos then doPlayerSendCancel(cid, "You must be in some training room to use this command.") return trueend  
  7. Upvote
    zipter98 recebeu reputação de DuuhCarvalho em (resolvido) Alguém edita essa script para min ?   
    Como não jogo Tibia, me baseei somente na informação que o autor havia dado (limitar o uso à certas áreas). Como, após meu post, o autor explicitou que as áreas necessariamente seriam aquelas com o atributo de no-pvp, de fato, sua alternativa acaba sendo mais adequada, visto que há um fator abrangente que descarta o uso de looping e tabelas.
     
    Porém, recomendaria apenas que não adotasse FALSE (destaque no case-sensitive) como um booleano. TRUE e FALSE são variáveis cujo valor são os verdadeiros booleanos: true e false. Apesar da funcionalidade ser a mesma (em servidores de Tibia, já que tais variáveis não são padrões em todas as fontes), é uma boa adotar logo o uso direto do booleano, como em:
    if getTileInfo(getThingPos(cid)).nopvp == false then ou, ainda melhor:
    if not getTileInfo(getThingPos(cid)).nopvp then Mas, novamente, ressalto que não há erros na estrutura que você escreveu.
  8. Upvote
    zipter98 recebeu reputação de gabriel28 em Ajuda com esse script.   
    ^ recomendaria você comparar a storage com os.time, já que o autor pediu que o item pudesse ser usado uma vez por dia.
  9. Upvote
    zipter98 recebeu reputação de Zync em Script de npc função de "wait"   
    Sinceramente, não estou muito a fim de procurar a razão do problema com o selfSay, então, se não se importar, use isso aqui (em efeitos práticos, dá na mesma):
    selfSay("O meu nome é X, eu quero duelar com vc!") addEvent(doCreatureSay, 1500, getNpcCid(), "Espero que esteja preparado mlk!") addEvent(doCreatureSay, 3000, getNpcCid(), "Vamos a isso!") Certamente deve haver outras formas de preparar ações para um momento futuro, mas minha disposição à programar não me incentiva muito a pensar nisso. addEvent é a maneira mais simples e sem complicações (logicamente, 'sem complicações' caso as condições adequadas sejam postas, o que não vejo necessidade no caso - a não ser que o NPC seja deletado aleatoriamente).
  10. Amei
    zipter98 recebeu reputação de poxt em Mega Evolution System (PxG)   
    Base usada: PDA by Slicer, v1.9
     
    Para quem não conhece o sistema de mega evoluções, recomendo acessar este link. A diferença é que a pedra (mega stone) não ocupa o espaço de um Held Item tier Y (visto que não são todos os servidores que possuem Held Itens).
     
    Instalação do sistema (atenção nos detalhes)  
    data/lib:
     
    cooldown bar.lua:
    Troque o código da função getNewMoveTable(table, n) por este:
    function getNewMoveTable(table, n)    if table == nil then        return false    end    local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12}    local returnValue = moves    if n then        returnValue = moves[n]    end    return returnValueend No código da função doUpdateMoves(cid), troque o segundo: table.insert(ret, "n/n,") por:
    local mEvolveif not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then    if not isInArray(ret, "Mega Evolution,") then        table.insert(ret, "Mega Evolution,")        mEvolve = true    endendif not mEvolve then    table.insert(ret, "n/n,")end  
    Depois, em pokemon moves.lua: Troque: min = getSpecialAttack(cid) * table.f * 0.1   --alterado v1.6 por:
    min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1   --alterado v1.6  
    Código da spell: elseif spell == "Mega Evolution" then    local effect = xxx                          --Efeito de mega evolução.    if isSummon(cid) then        local pid = getCreatureMaster(cid)        if isPlayer(pid) then            local ball = getPlayerSlotItem(pid, 8).uid            if ball > 0 then                local attr = getItemAttribute(ball, "megaStone")                if attr and megaEvolutions[attr] then                    local oldPosition, oldLookdir, health_percent_lost = getThingPos(cid), getCreatureLookDir(cid), (getCreatureMaxHealth(cid) - getCreatureHealth(cid)) * 100 / getCreatureMaxHealth(cid)                    doItemSetAttribute(ball, "poke", megaEvolutions[attr][2])                    doSendMagicEffect(getThingPos(cid), effect)                    doRemoveCreature(cid)                    doSummonMonster(pid, megaEvolutions[attr][2])                    local newPoke = getCreatureSummons(pid)[1]                    doTeleportThing(newPoke, oldPosition, false)                    doCreatureSetLookDir(newPoke, oldLookdir)                    adjustStatus(newPoke, ball, true, false) doCreatureAddHealth(newPoke, -(health_percent_lost * getCreatureMaxHealth(newPoke) / 100))                    if useKpdoDlls then                        addEvent(doUpdateMoves, 5, pid)                    end                end            end        end    end Depois, em configuration.lua:
    megaEvolutions = {    --[itemid] = {"poke_name", "mega_evolution"},    [11638] = {"Charizard", "Mega Charizard X"},    [11639] = {"Charizard", "Mega Charizard Y"},}  
    Agora, em data/actions/scripts, código da mega stone: function onUse(cid, item)    local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid    if not mEvolution then        return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.")    elseif ball < 1 then        return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.")    elseif #getCreatureSummons(cid) > 0 then        return doPlayerSendCancel(cid, "Return your pokemon.")    elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then        return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.")    elseif getItemAttribute(ball, "megaStone") then        return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.")    end    doItemSetAttribute(ball, "megaStone", item.itemid)    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".")    doRemoveItem(item.uid)    return trueend  
    Depois, em goback.lua: Abaixo de: if not pokes[pokemon] then    return trueend coloque:
       if pokemon:find("Mega") then        local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1]        if normalPoke then            doItemSetAttribute(item.uid, "poke", normalPoke)            pokemon = normalPoke        end    end  
    Depois, em data/creaturescripts/scripts, look.lua:
    Abaixo de: local boost = getItemAttribute(thing.uid, "boost") or 0 coloque:
    local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone")if megaStone then    extraInfo = getItemNameById(megaStone)       if pokename:find("Mega") then        pokename = megaEvolutions[megaStone][1]    endend  
    Depois, acima do primeiro: doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) coloque:
    if extraInfo ~= "" then    table.insert(str, "\nIt's holding a(n) "..extraInfo..".")end  
    Já em data/talkactions/scripts, move1.lua: Abaixo de: function doAlertReady(cid, id, movename, n, cd) coloque:
    if movename == "Mega Evolution" then return true end Troque:
       if not move then        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")        return true    end por:
    if not move then        local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone")        if not isMega or name:find("Mega") then            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")            return true        end        local moveTable, index = getNewMoveTable(movestable[name]), 0        for i = 1, 12 do            if not moveTable[i] then                index = i                break            end        end        if tonumber(it) ~= index then            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")            return true        end        local needCds = true                   --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown.        if needCds then            for i = 1, 12 do                if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then                    return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.")                end            end        end        move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0}    end E troque:
    doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) por:
    local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!"if move.name == "Mega Evolution" then    spellMessage = "Mega Evolve!"enddoCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY)  
     
    Se não quiser que o "Mega" apareça no nome do pokémon, vá em data/lib, level system.lua: Acima de: if getItemAttribute(item, "nick") then    nick = getItemAttribute(item, "nick")end coloque:
       if nick:find("Mega") then        nick = nick:match("Mega (.*)")        if not pokes[nick] then            nick = nick:explode(" ")[1]        end    end  
     
    Caso queiram que cada mega evolução tenha um clã específico: Em move1.lua, acima de:
    move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} coloque:
    local megaEvoClans = {    --[mega_stone_id] = "clan_name",    [91912] = "Volcanic",    [91913] = "Seavell",    --etc,}if megaEvoClans[isMega] then    if getPlayerClanName(cid) ~= megaEvoClans[isMega] then        return doPlayerSendCancel(cid, "You can't mega evolve this pokemon.")    endend  
    Finalizando o tópico após uma pequena reestruturação na indexação, gostaria de levantar algo que acredito ser bem claro: o sistema é cheio de detalhes, muitas vezes minuciosos. Um simples erro e bugs aparecem por toda parte. Se você encontrou algum, pelo menos uma das duas seguintes condições acontecem: Base DIFERENTE da usada. Peço desculpas, mas não pretendo adaptar o sistema para todas as bases diferentes que aparecerem. Se a base for a mesma, você com certeza errou em algum ponto da instalação. O sistema foi testado inúmeras vezes, não apenas por mim, e seu funcionamento foi seguidamente comprovado.  
    Façam bom uso, invocadores.
  11. Upvote
    zipter98 recebeu reputação de Solanoo em [Resolvido] [PEDIDO Spell] Passive pxg Sturdy   
    Apesar de ter feito este código faz um tempo, suponho que ainda esteja funcionando como deve.
    Para base PDA:
    data/creaturescripts/scripts, exp2.0.lua: Troque: if valor >= getCreatureHealth(cid) then if isInArray(cannotKill, combat) and isPlayer(cid) then valor = getCreatureHealth(cid) - 1 else valor = getCreatureHealth(cid) end end por: local config = { sturdy = { --Pokémons que possuem a habilidade Sturdy. Configuração: ["nome_do_pokemon"] = lookType, ["Aggron"] = lookType, }, cd = 30, --Cooldown da habilidade. duration = 8, --Duração, em segundos, do Sturdy. storage = 8402, } if getPlayerStorageValue(cid, config.storage) > -1 then return false end local hp = getCreatureHealth(cid) - valor if not isPlayer(cid) and hp <= 1 and config.sturdy[getCreatureName(cid)] then local b = true if isSummon(cid) then local ball = getPlayerSlotItem(getCreatureMaster(cid), 8) if ball and getCD(ball.uid, "sturdy") > 0 then b = false end end if b then if hp < 1 then doCreatureAddHealth(cid, hp < 0 and (hp * -1) + 1 or 1) end setPlayerStorageValue(cid, config.storage, 1) if isSummon(cid) then local ball = getPlayerSlotItem(getCreatureMaster(cid), 8) if ball then setCD(ball.uid, "sturdy", config.duration + config.cd) end end doSetCreatureOutfit(cid, {lookType = config.sturdy[getCreatureName(cid)]}, config.duration * 1000) addEvent(function() if isCreature(cid) and getPlayerStorageValue(cid, config.storage) > -1 then setPlayerStorageValue(cid, config.storage, -1) doCreatureAddHealth(cid, -getCreatureHealth(cid)) end end, config.duration * 1000) end end if valor >= getCreatureHealth(cid) then if isInArray(cannotKill, combat) and isPlayer(cid) then valor = getCreatureHealth(cid) - 1 else valor = getCreatureHealth(cid) end end data/lib, newStatusSyst.lua: Troque: doCreatureAddHealth(cid, -damage, 15, COLOR_BURN) por: if getPlayerStorageValue(cid, 8402) == -1 then doCreatureAddHealth(cid, -damage, 15, COLOR_BURN) end Troque: doCreatureAddHealth(cid, -dano, 8, COLOR_GRASS) por: if getPlayerStorageValue(cid, 8402) == -1 then doCreatureAddHealth(cid, -dano, 8, COLOR_GRASS) end Troque: doCreatureAddHealth(cid, -damage) doSendAnimatedText(getThingPos(cid), "-"..damage.."", 144) doSendMagicEffect(getThingPos(cid), 45) ------ local newlife = life - getCreatureHealth(cid) if newlife >= 1 and attacker ~= 0 then doSendMagicEffect(getThingPos(attacker), 14) doCreatureAddHealth(attacker, newlife) doSendAnimatedText(getThingPos(attacker), "+"..newlife.."", 32) end por: if getPlayerStorageValue(cid, 8402) == -1 then doCreatureAddHealth(cid, -damage) doSendAnimatedText(getThingPos(cid), "-"..damage.."", 144) doSendMagicEffect(getThingPos(cid), 45) ------ local newlife = life - getCreatureHealth(cid) if newlife >= 1 and attacker ~= 0 then doSendMagicEffect(getThingPos(attacker), 14) doCreatureAddHealth(attacker, newlife) doSendAnimatedText(getThingPos(attacker), "+"..newlife.."", 32) end end  
  12. Upvote
    zipter98 recebeu reputação de Tingasgo em Teleport "!h" para cidades   
    Procure o arquivo do código em data/talkactions/scripts (provavelmente tele.lua) e poste o conteúdo aqui, por gentileza.
  13. Upvote
    zipter98 recebeu reputação de Josegvb em Underwater Walking e outfit de mergulho   
    O que tem de mais no teleporte? Basta escrever o código em step in e step out, mesma coisa na situação da neve.
  14. Upvote
    zipter98 recebeu reputação de Josegvb em Underwater Walking e outfit de mergulho   
    Também dá pra explorar algumas coisas usando o creatureevent onOutfit(cid, old, current).
    PS: Para aqueles não familiarizados com este callback, ele é executado quando uma criatura muda de outfit.
  15. Upvote
    zipter98 recebeu reputação de rorix em Salva posiçao em sotrage?   
    Apesar de não ter como salvar uma tabela como valor de storage, você pode converter seus valores em uma string, ou até mesmo salvá-los separadamente.
    Por exemplo:
    local pos = getThingPos(cid)setPlayerStorageValue(cid, 100, ":"..pos.x..","..pos.y..","..pos.z) E:
    local new_pos = getPlayerStorageValue(cid, 100):sub(2):explode(",")doTeleportThing(cid, {x = new_pos[1], y = new_pos[2], z = new_pos[3]})  
  16. Upvote
    zipter98 recebeu reputação de Josegvb em Erro "END" no Script   
    function onUse(cid, item, frompos, item2, topos) local dolls = { [11256] = {pet = "Crystal Spider"}, [11207] = {pet = "Ashmunrah"}, [11144] = {pet = "Demon"}, [9019] = {pet = "Vampire"}, } local go = dolls[item.itemid] local summon = getCreatureSummons(cid) local store,exausted = 156249,30 --------------------------------------------------- if getPlayerStorageValue(cid, store) >= os.time() then return doPlayerSendCancel(cid, "wait " .. getPlayerStorageValue(cid, store) - os.time() .. " seconds to use this command again.") end if #summon > 0 then for _, pid in ipairs(summon) do doRemoveCreature(pid) doCreatureSay(cid, "Can go rest ["..go.pet.."]", TALKTYPE_ORANGE_1) end else doConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid))) doCreatureSay(cid, "Let battle ["..go.pet.."]", TALKTYPE_ORANGE_1) end return trueend  
  17. Upvote
    zipter98 recebeu reputação de Administrador em tile somente 2player por ip passa   
    Mesmo sendo um assunto desconexo do tópico (peço desculpas ao autor), estava me questionando justamente quanto a esse tema. Por ter ficado um tempo desligado do mundo poketibiano, não me atualizei sobre as bases mais usadas atualmente (se é esse tal DPX ou outro). Se puder responder-me em meu perfil, agradeço.
  18. Upvote
    zipter98 recebeu reputação de Fjinst em Creature not found   
    function onStepIn(cid) for i = 0, 5 do addEvent(function() if not isCreature(cid) then return true end doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -250, -750, 57) end, i * 500) end return trueend  
  19. Upvote
    zipter98 recebeu reputação de nociam em tabela   
    local pokemons = { ["pedro"] = { {name = "Mega Blastoise", level = 600, nick = "", ball = "normal"}, {name = "Mega Scizor", level = 600, nick = "", ball = "normal"}, {name = "Shiny Snorlax", level = 600, nick = "", ball = "normal"}, {name = "Mega Charizard Y", level = 600, nick = "", ball = "normal"}, {name = "Shiny Dragonite", level = 600, nick = "", ball = "normal"}, {name = "Mewtwo", level = 600, nick = "", ball = "normal"}, }, ["joao"] = { {name = "Mega Blastoise", level = 600, nick = "", ball = "normal"}, {name = "Mega Scizor", level = 600, nick = "", ball = "normal"}, {name = "Shiny Snorlax", level = 600, nick = "", ball = "normal"}, {name = "Mega Charizard Y", level = 600, nick = "", ball = "normal"}, {name = "Shiny Dragonite", level = 600, nick = "", ball = "normal"}, {name = "Mewtwo", level = 600, nick = "", ball = "normal"}, }}local index = {}for name, _ in pairs(pokemons) do table.insert(index, name)endlocal it = pokemons[index[math.random(1, #index)]][battle_turn]  
  20. Upvote
    zipter98 recebeu reputação de lucasmourahere em [Encerrado] Duel System Error   
    Ao que tudo indica, o problema não está nesse código. Anteriormente, me referi ao uso do client original da CipSoft (que é o client C++). Nas imagens que você postou, você apenas usou o OTClient.
    Eu preciso confirmar se o problema ocorre em ambos os clients. Na hipótese destes canais de duelo aparecerem apenas no OTClient, tenho certeza de que a causa se encontra em algum arquivo do OTC (o que, para mim, seriam novas águas, já que nunca me aventurei neste client).
     
  21. Upvote
    zipter98 recebeu reputação de lucasmourahere em [Encerrado] Duel System Error   
    Isso acontece porque o sistema de duelo é escrito usando canais de chat, e, por meio do creatureevent que os manipula, é passada a impressão que são janelas de opção. Para contornar o problema que você citou e reforçar a ideia pretendida, retorna-se falso ao final do bloco de código responsável por esse sistema no creatureevent que citei. Você poderia me informar se este erro ocorre no client C++ (o original)? Se a resposta for afirmativa, saberia informar o servidor que você baixou?
  22. Upvote
    zipter98 recebeu reputação de diarmaint em [Resvoldido](luaGetThingPosition) Thing not found   
    Acima dos dois
    local pos2 = getPlayerPosition(target) coloque:
    if not isCreature(target) then return true end  
  23. Upvote
    zipter98 recebeu reputação de samlecter em Pokemon temporário   
    @samlecter
    É uma ideia bem interessante, inclusive eu já li algo assim em algum fórum de poketibia. Com um sistema de Unique Item no servidor, a ideia fica bem viável. Se alguém tiver interesse no sistema, eu posso escrevê-lo depois de resolver o pedido do tópico.
     
    @mrlhsl
    Como você pediu pelo mais simples, farei o de tornar o pokémon inutilizável após determinado tempo.
    Como já faz algum tempo que não me atualizo quanto as novas bases de poketibia, não conheço as funções deste servidor. Poderia me informar os atributos que podem ser adicionados ao pokémon criado pelo sistema (como boost), e se existe alguma função que cria diretamente um pokémon na pokeball? Caso prefira, você pode postar aqui códigos que usam alguma função do tipo (como uma talkaction que crie pokémon em pokeballs).
     
    Se possível, poste o arquivo relativo ao goback, em data/actions/scripts.
    PS: Se o seu servidor tiver algum creatureevent onLook, poste-o também, por gentileza.
  24. Upvote
    zipter98 recebeu reputação de clebao666 em pokemon que nao toma sing paralyze   
    Ou, ao invés de colocar a condição acima em todas as funções de status negativos (com exceção de sleep), você pode, simplesmente:
    newStatusSyst.lua:
    No código da função doBuff2:
    Abaixo de:
    if ret.buff and ret.buff ~= "" then doBuff2(ret.id, ret.cd, ret.eff, ret.check, ret.buff, ret.first, (ret.attr and ret.attr or false)) end Coloque: local pkmns = {"Entei"} --Pokémons imunes a status negativos, tirando sleep. if not isSummon(ret.id) and isInArray(pkmns, getCreatureName(ret.id)) and ret.cond ~= "Sleep" then return true end
  25. Upvote
    zipter98 recebeu reputação de Gabriel Netto em Storage + timer   
    A ideia não é necessariamente essa. Independentemente do value (key é a storage), o jogador tem uma. O valor padrão é -1, mas isso não significa que a criatura (seja um monstro ou um player) não possui uma storage. Significa que ela não foi alterada (logo, uma linha na tabela do banco de dados não foi criada), ou, caso tenha sido, tenha voltado ao valor padrão (o valor na tabela do banco de dados continuará). A ideia de que -1 represente não ter a storage e 1 ter foi apenas uma ideia adotada e padronizada nos códigos. Entretanto, você pode sem problemas escrever códigos que contrariem esse padrão.
    Quanto a usar tempos em storages, a estrutura é a seguinte:
    setPlayerStorageValue(uid, key, os.time() + time) os.time() retorna o tempo em segundos contado a partir de 01/01/1970, e somando-o ao time (que é em segundos) você obtém o valor que representa o os.time() daqui a time segundos.
    Usando uma condição, você pode saber se o tempo estabelecido na storage já passou ou não:
    if os.time() > getPlayerStorageValue(uid, key) then --tempo já passouelse --tempo ainda não passouend  
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...