Ir para conteúdo

lolksky

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    lolksky deu reputação a Fabi Marzan em (Resolvido)Porta que abre com X skill   
    function onUse(cid, item, fromPosition, target, toPosition, isHotkey) if getPlayerSkill(cid, SKILL_SWORD) and getPlayerSkill(cid, SKILL_AXE) and getPlayerSkill(cid, SKILL_CLUB) >= 15 then doTeleportThing(cid, toPosition, true) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE,"Acesso alcancado.") else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE,"Voce precisa de habilidade para passar.") end return true end  
    Estes seriam os scripts, em qualquer caso, tendo maior ou igual a 15 você pode passar. (SO SWORD, AXE, CLUB), se quiser continuar colocando, é só colocar:
     
    and getPlayerSkill(cid, SKILL_MAGLEVEL) and getPlayerSkill(cid, SKILL_DISTANCE)  
  2. Gostei
    lolksky deu reputação a FeeTads em (Resolvido)Porta que abre com X skill   
    script perfeito para que ele precisa, porém um adendo, caso ele utilize, não esqueça de mudar os "and" pra "or".
    and significa E, ou seja, skill sword E axe E club, necessita dos 3 pra abrir.
    colocando OR, qualquer uma que seja maior que o estipulado, ja confere
    não sei dizer ao certo se funciona assim, mas creio que cada verificação necessita do parametro, ex:
    if getPlayerSkill(cid, SKILL_SWORD) >= 15 and getPlayerSkill(cid, SKILL_AXE) >= 15 and getPlayerSkill(cid, SKILL_CLUB) >= 15 then  
    creio que só "getPlayerSkill(cid, SKILL_SWORD)" retorna algum boolean
  3. Gostei
    lolksky deu reputação a FeeTads em (Resolvido)tile que remove storage   
    coloca assim:
    e coloca a tag no xml assim por exemplo
    data > movement > movements.xml
    <movevent type="StepIn" actionid="56780" event="script" value="removeStorage.lua"/>   ai cria o arquivo
    data > movements > scripst > removeStorage.lua
    e coloca isso dentro
    local storages = {1234, 12345, 123456, 1234567} -- Aqui você adiciona as storages a serem verificadas e removidas caso o player venha a telas. function onStepIn(cid, item) for i= 1, #storages do setPlayerStorageValue(cid, storages[i], 0) end return true end  
    ai coloca no chão o action ID 56780
     
    se a storage do seu bau checar -1, coloca no logar do 0 o -1
    setPlayerStorageValue(cid, storages[i], -1)
  4. Gostei
    lolksky recebeu reputação de FeeTads em (Resolvido)Premmy no nick   
    Agora parece que foi! hehe
    vou fazer mais testes, qualquer coisa retorno
     
    De toda forma, muito obrigado até aqui. Você é fera demais !
  5. Gostei
    lolksky deu reputação a FeeTads em (Resolvido)Premmy no nick   
    function Split(s, delimiter) result = {}; for match in (s..delimiter):gmatch("(.-)"..delimiter) do table.insert(result, match); end return result; end function onLogin(cid) if getPlayerAccess(cid) > 2 then -- ignora GM+ return true end local func = db.query or db.executeQuery local namePlayer = getPlayerName(cid) local checkPremmy = Split(namePlayer, " ") if isPremium(cid) and checkPremmy[1] ~= "[P]" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você será desconectado pra mudança de nome!") --Msg em vermelho na tela do player addEvent(function() if isCreature(cid) then --verifica se o player ainda ta on e executa doRemoveCreature(cid) --desloga o char func('UPDATE `players` SET `name` = "[P] '..namePlayer..'" WHERE `name` = "'..namePlayer..'"') --executa a função na DB end end, 6000) -- 2000 = 2s pra deslogar o player elseif not isPremium(cid) and checkPremmy[1] == "[P]" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você será desconectado pra mudança de nome!") addEvent(function() if isCreature(cid) then --verifica se o player ainda ta on e executa -- não mexer em nada daqui pra baixo ****** local split = Split(getPlayerName(cid), " ") -- função pra tirar o [P] local nomeAntigo = '' local space = " " for i=2, #split do nomeAntigo = nomeAntigo..split[i] if i+1 <= #split then --se ainda tiver mais nomes nomeAntigo = nomeAntigo..space -- caso seja nome composto add espaço ex: Pedro Mauro end end -- não mexer em nada pra cima ****** doRemoveCreature(cid) --desloga o char func('UPDATE `players` SET `name` = "'..nomeAntigo..'" WHERE `name` = "'..namePlayer..'"') --executa a função na DB end end, 6000) -- 2000 = 2s pra deslogar o player end return true end  
    coloca esse código todo no lugar.
     
    e testa em OUTRO boneco qualquer pra ver
  6. Gostei
    lolksky recebeu reputação de FeeTads em (Resolvido)Usar um item em outro e ganhar stg   
    MEU HERÓI !!!
    Funcionou perfeitamente!
    obrigado aos envolvidos
  7. Gostei
    lolksky deu reputação a FeeTads em (Resolvido)Usar um item em outro e ganhar stg   
    local config = { itemY = 2160, -- Id do item Y message = 'A mensagem que ira aparecer quando usar o item X no item Y.', storage = 412311 } function onUse(cid, item, fromPosition, itemEx, toPosition) -- esse if o player só usa 1x e nunca mais if getPlayerStorageValue(cid, config.storage) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já usou esse item no item Y.") return true end if (itemEx.itemid == config.itemY) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.message) doRemoveItem(item.uid, 1) -- storage de usar apenas 1x setPlayerStorageValue(cid, config.storage, 1) end return true end  
    ta na mão meu querido
  8. Gostei
    lolksky deu reputação a Tricoder em [TFS 1.2] The Silencer Plateau - Lure Silencers   
    Video de Demonstração
     
    ________________________________________________
    Baseado neste evento: 
    http://www.tibiawiki.com.br/wiki/Silencer_Plateau
    ________________________________________________
    data/actions/script/ResonanceChamber.lua
    --Config local config = { item = 22535, storage = 34380, position = { Position(33637, 32516, 5), -- Top Left Position(33664, 32537, 5), -- botton Right Position(33650, 32527, 5) -- Center }, raid = { [1] = {"silencer", math.random(8,15) }, [2] = {"silencer", math.random(11,18) }, [3] = {"silencer", math.random(8,15) }, [4] = {"Sight of Surrender", math.random(3,8) } }, globalEventTime = 30 * 60 * 1000, -- [30min] waiting time to get started again timeBetweenraid = 1 * 60 * 1000, -- [1min] Waiting time between each raid cleanraid = true -- Clean zone after globalEventTime } local function isWalkable(position) local tile = Tile(position) if not tile then return false end local ground = tile:getGround() if not ground or ground:hasProperty(CONST_PROP_BLOCKSOLID) then return false end local items = tile:getItems() for i = 1, tile:getItemCount() do local item = items[i] local itemType = item:getType() if itemType:getType() ~= ITEM_TYPE_MAGICFIELD and not itemType:isMovable() and item:hasProperty(CONST_PROP_BLOCKSOLID) then return false end end return true end local function raids(monster) local randX,randY,randZ = 0,0,0 randX = math.random(config.position[1].x, config.position[2].x) randY = math.random(config.position[1].y, config.position[2].y) randZ = math.random(config.position[1].z, config.position[2].z) if isWalkable(Position(randX, randY, randZ)) then Game.createMonster(monster, Position(randX, randY, randZ)) else raids(monster) end end local function cleanRaid() local mostersraid= Game.getSpectators(config.position[3], false, false, 13, 13, 11, 11) for i = 1, #mostersraid do if mostersraid[i]:isMonster() then mostersraid[i]:remove() end end end function onUse(cid, item, fromPosition, itemEx, toPosition) local player = Player(cid) local max,time,monster = 0,0,"" if item.itemid ~= config.item then return true end local spectators,hasPlayer,hasMonsters = Game.getSpectators(config.position[3], false, false, 13, 13, 11, 11),false,false for i = 1, #spectators do if spectators[i]:isPlayer() then if spectators[i]:getName() == player:getName() then hasPlayer = true end elseif spectators[i]:isMonster() then hasMonsters = true end end if not hasPlayer then player:sendCancelMessage('Use on Silencer Plateau is located in the south-eastern part of Roshamuul') return true end if hasMonsters then player:sendCancelMessage('You need kill all monsters') return true end if Game.getStorageValue(config.storage) <= 0 then if math.random(0,10000) < 7000 then player:say("PRRRR...*crackle*", TALKTYPE_MONSTER_SAY) item:remove(1) return true else player:say("PRRRROOOOOAAAAAHHHH!!!", TALKTYPE_MONSTER_SAY) end local raid = config.raid for y, x in pairs(raid) do local i = 1 while i <= #x do print(x[i]) print(x[i+1]) time = time + config.timeBetweenraid for j = 1, x[i+1] do Game.setStorageValue(config.storage,x[i+1]) addEvent(raids,time,x[i]) end i = i + 2 end end addEvent(Game.setStorageValue, config.globalEventTime, config.storage, 0) if config.cleanraid then addEvent(cleanRaid, config.globalEventTime) end item:remove(1) else player:sendCancelMessage('You need to wait') end end data/actions/actions.xml
    <action itemid="22535" script=ResonanceChamber.lua"/> ________________________________________________
    Créditos: Omin
  9. Gostei
    lolksky deu reputação a Bruno Minervino em TopLevel Effect   
    Fala galera,
     
    Um membro fez um pedido, e achei que deveria compartilhar com vocês, algo simples porém útil. Principalmente em OT's do estilo Baiak.
     
    O que o script faz ?
    Ele simplesmente manda um efeito para o Top Level caso ele estiver online.
     
    Instalação:

    Em data/creaturescripts/creaturescripts.xml adicione:
    <event type="login" name="TopEffect" event="script" value="topeffect.lua"/> <event type="advance" name="CheckTop" event="script" value="topeffect.lua"/> Agora crie um arquivo em data/creaturescripts/scripts com o nome topeffect.lua e adicione:
    --[[ Script by Bruno Minervino para o Tibia King Caso for postar, colocar os créditos ]] local config = { tempo = 10, --tempo em segundos mensagem = { texto = "[TOP]", --não use mais de 9 caracteres efeito = TEXTCOLOR_LIGHTBLUE --efeito para a função doSendAnimatedText }, efeito = 30, --efeito da função doSendMagicEffect globalstr = 5687 -- uma global storage qualquer q esteje vazia } --[[ Não mexa em nada abaixo ]] local topPlayer = getGlobalStorageValue(config.globalstr) > 0 and getGlobalStorageValue(config.globalstr) or 0 function onLogin(cid) local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1") if (query:getID() ~= -1) then local pid = query:getDataString("id") local name = query:getDataString("name") if getPlayerName(cid) == name then if topPlayer ~= getPlayerID(cid) then topPlayer = getPlayerID(cid) end setGlobalStorageValue(config.globalstr, pid) TopEffect(cid) end end registerCreatureEvent(cid, "CheckTop") return true end function onAdvance(cid, skill, oldlevel, newlevel) if skill == 8 then local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1") if (query:getID() ~= -1) then local level = tonumber(query:getDataString("level")) if level < newlevel and topPlayer ~= getPlayerID(cid) then doBroadcastMessage("O jogador " .. getPlayerName(cid) .. " tornou-se o novo Top Level. Parabens!", 22) topPlayer = getPlayerID(cid) doSaveServer() setGlobalStorageValue(config.globalstr, getPlayerID(cid)) TopEffect(cid) end end end return true end function TopEffect(cid) if not isPlayer(cid) then return true end if topPlayer == getPlayerID(cid) then doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito) doSendMagicEffect(getCreaturePosition(cid), config.efeito) addEvent(TopEffect, config.tempo * 1000, cid) end end function getPlayerNameById(id) local query = db.getResult("SELECT `name` FROM `players` WHERE `id` = " .. db.escapeString(id)) if query:getID() ~= -1 then return query:getDataString("name") end return 0 end function getPlayerIdByName(name) local query = db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name)) if query:getID() ~= -1 then return tonumber(query:getDataString("id")) end return 0 end function getPlayerID(cid) return getPlayerIdByName(getPlayerName(cid)) end  
    Espero ajudar!
  10. Gostei
    lolksky deu reputação a xWhiteWolf em Experience Weapon System   
    Eai galera, hoje eu to trazendo pra vocês o meu Experience Weapon System. Pra quem não conhece é um sistema em que conforme você vai matando os monstros sua arma vai adquirindo parte da experiencia e upando de nível junto com você!

    Eu abri um tópico pra sugestões mas os players foram tão criativos que eu decidi seguir meus instintos e fazer da minha própria maneira se não ia ficar muito ruim pra servers que não fossem derivados.

    Testado em TFS 0.3.6 mas deve funcionar em qualquer um que tenha getThing(Pos) e onAttack e onKill ;]
    Foi decidido por mim então fazer da seguinte maneira:

    • Axes/ Swords/ Bows/ Crossbows:
    Tem 5% de chance (pra cada nivel) de ferir gravemente o oponente e deixar ele sangrando, o nível do ferimento é proporcional ao nível da arma.

    • Clubs:
    Tem 5% de chance (pra cada nivel) de bater com tanta força que faça todos ao redor sentirem o tremor do seu ataque e levarem um dano baseado no nivel da arma e no ataque da mesma.

    • Wands/ Rods:
    Tem 5% de chance (pra cada nivel) de retirar uma quantidade de mana do player (proporcional ao nivel da arma) e ficar recuperando mana mais rapidamente durante 5 segundos após isso
     
    Dito isso vamos ao que interessa:

    Adiciona essas duas linhas no seu creaturescripts.xml:
    <event type="kill" name="itemexp" script="itemexp.lua"/> <event type="attack" name="conditionitem" script="conditionitem.lua"/> e no login.lua:
    --------------- Experience System ---------------- registerCreatureEvent(cid,"itemexp") registerCreatureEvent(cid,"conditionitem") Agora crie um arquivo em data\lib\ chamado 037 - Experience System.lua e coloque isso dentro dele:



    Feito isso crie um arquivo em creaturescripts\scripts chamado itemexp.lua e adicione isso daqui:




    Agora crie outro arquivo em creaturescripts\scripts, adicione isso daqui nele e chame de conditionitem.lua:



    Agora configurando:




    Bom, é isso aí, a minha idéia era trazer um pouco a mais de RPG e fazer o pessoal pensar 2x antes de sair trocando suas armas pela primeira que ele dropa que tenha + ataque que a dele pois assim ele passa a ter que valorizar mais os itens que já possui a um bom tempo;

    Outro motivo é que agora os items vão valer mais e agora seu server vai ter mais movimento nas trocas ;]

    Espero que tenham gostado e qualquer coisa é só falar nos comentários. Abraço do lobinho.

    Ps: aqui tem duas fotinhas mas o resto só instalando mesmo porque tem bastante coisa pra mostrar.

    E lembrando, se te ajudei clica em Gostei aqui embaixo. Fuis
  11. Gostei
    lolksky deu reputação a zipter98 em (Resolvido)Sistema para evento programado com tps [8.60]   
    Muda:

    function onTimer() para: function onTime() E vê se o erro continua.
  12. Gostei
    lolksky deu reputação a Adriano SwaTT em (Resolvido)Sistema para evento programado com tps [8.60]   
    Boa noite.
    Criei e testei o script, as funções básicas que precisa consegui executar com sucesso.
     
    1. Ele cria os teleportes, cada um com uma ActionID diferente para que você possa criar um script para cada teleporte e assim configurar os requisitos para poder entrar.
    2. Ele cria os teleportes no horário programado no GlobalEvents.xml, e a data fica configurada dentro do próprio script.
    3. Ele remove os teleportes depois do tempo programado.
    4. Ele bloqueia players que já acessaram um dos teleportes, já configurado para liberar a cada evento.
     
    Vamos em GlobalEvents.xml e adicionar a tag abaixo:

    <globalevent name="Teleports" time="12:00" event="script" value="teleports_progs.lua"/>  
    Agora na pasta scripts da referida, criaremos o arquivo "teleports_progs.lua" e adicionaremos o script abaixo:

    --------- Script by: Adriano Swatt' ------ local dia = '1' -- qual dia do mês local horas = 12 -- hora do evento & horas para remover os tps local tp_id = 5023 -- ID do Teleport (Pode ser outro item, se desejar) local gstrg_control = 12129 -- Não precisa mexer (Global Storage de Controle de Acesso) local tp_pos = {{x=000, y=000, z=0}, {x=000, y=000, z=0}, {x=000, y=000, z=0}, {x=000, y=000, z=0}, {x=000, y=000, z=0}, {x=000, y=000, z=0}} -- Coordenada Onde Nascerá os TPs local tp_acts = {11111, 22222, 33333, 44444, 55555, 66666} -- ActionID para Cada TP (Terá que registrar em movements.xml as memas que colocar aqui) ----------- FIM DAS CONFIGURAÇÕES --------- function onTimer() local checkday = os.date("%d")     if checkday == dia then         for x = 1, #tp_pos do         doItemSetAttribute(doCreateItem(tp_id, 1, tp_pos[x]), "aid", tp_acts[x])         end -- FOR         addEvent(RemoveTps, horas * 60 * 60 * 1000)         doBroadcastMessage("Hoje é dia "..checkday.." e são exatamente "..horas..":00 horas, os teleportes de bonus foram abertos e permanecerão por "..horas.." horas.")         if getGlobalStorageValue(gstrg_control) <= 0 then             setGlobalStorageValue(gstrg_control, 1)         else             setGlobalStorageValue(gstrg_control, (getGlobalStorageValue(gstrg_control) + 1))         end         return true     else         doBroadcastMessage("Lembrem-se: Todo dia "..checkday.." às "..horas.." horas terá o evento dos teleportes.")     end return true end function RemoveTps()     for y = 1, #tp_pos do     doRemoveItem(getTileItemById(tp_pos[y], tp_id).uid, 1)     end -- FOR     doBroadcastMessage("Os teleportes foram removidos, o evento abrirá novamente no próximo dia "..dia.." exatamente às "..horas..":00 horas.") return true end  
    Agora em Movements.xml adicionaremos a tag, como abaixo: (Substitua os números de acordo com que configurou o script anterior/acima)

    <movevent type="StepIn" actionid="11111;22222;33333;44444;55555;66666" event="script" value="Teleports_Progs.lua"/>  
    E em scripts, criaremos o arquivo "Teleports_Progs.lua" e adicionaremos o código abaixo:

    -------- Script by: Adriano Swatt' ------- local gstrg_control = 12129 -- Não precisa mexer (Global Storage de Controle de Acesso) local tp_exe = 11111 -- ID da ActionID do Teleport Exclusivo (Necessita 5 storages) local stors = {11111, 22222, 33333, 44444, 55555} -- Storages o player precisa para o teleport exclusivo local tp_acts = {     [11111] = {{x=000, y=000, z=0}}, -- ActionID de cada teleport e coordenada pra onde o player irá (Tem que ser a mesma do outro script)     [22222] = {{x=000, y=000, z=0}}, -- teleport 2     [33333] = {{x=000, y=000, z=0}}, -- teleport 3     [44444] = {{x=000, y=000, z=0}}, -- teleport 4     [55555] = {{x=000, y=000, z=0}}, -- teleport 5     [66666] = {{x=000, y=000, z=0}}  -- teleport 6 } local msgs = { "Você não tem todas as quests necessárias.", -- Mensagem quando não tiver todas storages "Você já entrou em um dos teleportes bônus hoje.", -- Mensagem quando já tiver acessado um dos teleportes "Parabéns, você entrou no teleporte bônus." -- Mensagem ao entrar em algum teleporte } -- Mensagens ----------- FIM DAS CONFIGURAÇÕES --------- function onStepIn(cid, item, position, fromPosition) local tp_check = tp_acts[item.actionid] local gstrg = getGlobalStorageValue(gstrg_control) local getSto = getPlayerStorageValue     if item.actionid ~= tp_exe then         if tp_check then             if getSto(cid, gstrg_control) < (gstrg) then                 doPlayerSendCancel(cid, msgs[3])                 doTeleportThing(cid, tp_check[1])                 setPlayerStorageValue(cid, gstrg_control, (getGlobalStorageValue(gstrg_control)))             else                 doPlayerSendCancel(cid, msgs[2])                 doTeleportThing(cid, fromPosition)             end         end     else         if getSto(cid, gstrg_control) < (gstrg) then             if getSto(cid, stors[1]) >= 1 and getSto(cid, stors[2]) >= 1 and getSto(cid, stors[3]) >= 1 and getSto(cid, stors[4]) >= 1 and getSto(cid, stors[5]) >= 1 then                 doPlayerSendCancel(cid, msgs[3])                 doTeleportThing(cid, tp_check[1])                 setPlayerStorageValue(cid, gstrg_control, (getGlobalStorageValue(gstrg_control)))             else                 doPlayerSendCancel(cid, msgs[1])                 doTeleportThing(cid, fromPosition)             end         else             doPlayerSendCancel(cid, msgs[2])             doTeleportThing(cid, fromPosition)         end     end     return true end    
    Testei e funcionou perfeitamente.
     
    Boa sorte.
    Caso ocorra algum erro, ou até mesmo para agradecer, dê um FeedBack.
     
    Abraços.
  13. Gostei
    lolksky deu reputação a Wise em (Resolvido)Tile que heala monstro [8.60]   
    Amigo, essa função que você utilizou no segundo parâmetro, não existe. Portanto retornaria um valor nulo; seria getCreatureMaxHealth.
    E o modo como ela está sendo aplicada, provavelmente iria bugar os health points do creatureid, já que você fez uma adição do HP máximo dele ao HP atual.

    Você têm de subtrair os points máximos pelos points atuais, então, resultando na quantidade exata para "completar" o HP do creatureid:
    function onStepIn(cid)     if isMonster(cid) then         doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid))         doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)     end          return true end

Informação Importante

Confirmação de Termo