Jump to content

Recommended Posts

Seria possível um script de exiva onde mostrasse junto a localização do player qual foi o último monstro targetado pelo mesmo? Exemplo : Tibia King is very far to the west.

Last target: Dragon

(pra 8.60) // eu revirei essa internet e nada até agora, caso exista deve estar sendo ofuscado pelos resultados de buscas que em maioria aparece hotckeys de elfbot. Rep+ para quem ajudar. cya

Citar

 

 

 

 

 

Share this post


Link to post
Share on other sites

Então, pra fazer esse rolê de falar o ultimo, vai dar um trabalho meio chato, unico jeito q pense é mexendo na database, mas fiz esse, q fala o target ATUAL, as vezes te serve 😃

 

bota essas 4 linhas no script do exiva, embaixo de     creature:sendTextMessage(MESSAGE_INFO_DESCR, target:getName() .. " " .. message .. ".")

    local ttt = target:getTarget()
    if ttt:getName() then
    creature:sendTextMessage(MESSAGE_INFO_DESCR, "Atualmente ele esta matando um(a) "..ttt:getName() .. ".")
    end

 


MEUS POSTS:

 

SE AJUDEI, DÁ O REP+, ESQUECE NÃO, VLW BB <3

Share this post


Link to post
Share on other sites
5 horas atrás, Mor3nao disse:

Então, pra fazer esse rolê de falar o ultimo, vai dar um trabalho meio chato, unico jeito q pense é mexendo na database, mas fiz esse, q fala o target ATUAL, as vezes te serve 😃

 

bota essas 4 linhas no script do exiva, embaixo de     creature:sendTextMessage(MESSAGE_INFO_DESCR, target:getName() .. " " .. message .. ".")


    local ttt = target:getTarget()
    if ttt:getName() then
    creature:sendTextMessage(MESSAGE_INFO_DESCR, "Atualmente ele esta matando um(a) "..ttt:getName() .. ".")
    end

 

Perdão, mas onde fica esse script do exiva? Eu revirei aqui e não achei ele.

Share this post


Link to post
Share on other sites

spells/script/find_person


MEUS POSTS:

 

SE AJUDEI, DÁ O REP+, ESQUECE NÃO, VLW BB <3

Share this post


Link to post
Share on other sites
6 horas atrás, Mor3nao disse:

Então, pra fazer esse rolê de falar o ultimo, vai dar um trabalho meio chato, unico jeito q pense é mexendo na database, mas fiz esse, q fala o target ATUAL, as vezes te serve 😃

 

bota essas 4 linhas no script do exiva, embaixo de     creature:sendTextMessage(MESSAGE_INFO_DESCR, target:getName() .. " " .. message .. ".")


    local ttt = target:getTarget()
    if ttt:getName() then
    creature:sendTextMessage(MESSAGE_INFO_DESCR, "Atualmente ele esta matando um(a) "..ttt:getName() .. ".")
    end

 

Faz utilizando uma tabela global, inserindo o last monster que o player atacou. No exiva você só pega a informação da tabela global :)

 

image.png.e55cbd27c3d6ae5893e29d2718904e7f.png

Edited by Movie (see edit history)

Share this post


Link to post
Share on other sites
20 minutos atrás, Mor3nao disse:

spells/script/find_person

No meu não há essa pasta, será que deve estar em outro local? Uso tfs 0.4 (8.6)

7 minutos atrás, Movie disse:

Faz utilizando uma tabela global, inserindo o last monster que o player atacou. No exiva você só pega a informação da tabela global :)

 

image.png.e55cbd27c3d6ae5893e29d2718904e7f.png

Eu gostaria bastante de entender o que você disse, pois parece uma solução simples para o meu pedido.

</instant>
    <instant name="Find Person" words="exiva" lvl="8" mana="20" aggressive="0" params="1" exhaustion="1000" needlearn="0" event="function" value="searchPlayer">
        <vocation id="1"/>
        <vocation id="2"/>
        <vocation id="3"/>
        <vocation id="4"/>
        <vocation id="5"/>
        <vocation id="6"/>
        <vocation id="7"/>
        <vocation id="8"/>
    </instant>

 

(única coisa que achei a respeito do exiva, pois não há pasta de script para ele. Porém ele funciona normalmente)

Share this post


Link to post
Share on other sites

Ele está em spells.cpp na source se tiver ela, existe a versão lua feita pelo LukeOake.

Spoiler

function getSearchString(fromPos, toPos, isFromCreature, isToCreature)
    isFromCreature = isFromCreature == nil and false or isFromCreature
    isToCreature = isToCreature == nil and false or isToCreature
    local DISTANCE_CLOSE,DISTANCE_FAR,DISTANCE_VERYFAR = 0,1,2
    local LEVEL_HIGHER,LEVEL_LOWER,LEVEL_SAME = 1,-1,0
    local DIR_N,DIR_S,DIR_E,DIR_W,DIR_NE,DIR_NW,DIR_SE,DIR_SW = 0,1,2,3,4,5,6,7,8
    local distance
    local direction
    local level
    local dx,dy,dz = fromPos.x - toPos.x,fromPos.y - toPos.y,fromPos.z - toPos.z
    
    if dz > 0 then
        level = LEVEL_HIGHER
    elseif dz < 0 then
        level = LEVEL_LOWER
    else
        level = LEVEL_SAME
    end
    
    if math.abs(dx) < 5 and math.abs(dy) < 5 then
        distance = DISTANCE_BESIDE
    else
        tmp = dx * dx + dy * dy
        if tmp < 10000 then
            distance = DISTANCE_CLOSE
        elseif tmp < 75625 then
            distance = DISTANCE_FAR
        else
            distance = DISTANCE_VERYFAR
        end
    end
    
    local tangent
    
    if dx ~= 0 then
        tangent = dy / dx
    else
        tangent = 10.
    end
    
    if math.abs(tangent) < 0.4142 then
        if dx > 0 then
            direction = DIR_W
        else
            direction = DIR_E
        end
    elseif math.abs(tangent) < 2.4142 then
        if tangent > 0 then
            if dy > 0 then
                direction = DIR_NW
            else
                direction = DIR_SE
            end
        else
            if dx > 0 then
                direction = DIR_SW
            else
                direction = DIR_NE
            end
        end
    else
        if dy > 0 then
            direction = DIR_N
        else
            direction = DIR_S
        end
    end
    
    local ss = ""
    
    if distance == DISTANCE_BESIDE then
        if level == LEVEL_SAME then
            ss = ss.."is "
            if toIsCreature then
                ss = ss.."standing "
            end
            
            ss = ss.."next to you"
        elseif level == LEVEL_HIGHER then
            ss = ss.."is above "
            if fromIsCreature then
                ss = ss.."you"
            end
        elseif level == LEVEL_LOWER then
            ss = ss.."is below "
            if fromIsCreature then
                ss = ss.."you"
            end
        end
    elseif distance == DISTANCE_CLOSE then
        if level == LEVEL_SAME then
            ss = ss.."is to the"
        elseif level == LEVEL_HIGHER then
            ss = ss.."is on a higher level to the "
        elseif level == LEVEL_LOWER then
            ss = ss.."is on a lower level to the "
        end
    elseif distance == DISTANCE_FAR then
        ss = ss.."is far to the"
    elseif distance == DISTANCE_VERYFAR then
        ss = ss.."is very far to the"
    end
    
    if distance ~= DISTANCE_BESIDE then
        ss = ss.." "
        if direction == DIR_N then
            ss = ss.."north"
        elseif direction == DIR_S then
            ss = ss.."south"
        elseif direction == DIR_E then
            ss = ss.."east"
        elseif direction == DIR_W then
            ss = ss.."west"
        elseif direction == DIR_NE then
            ss = ss.."north-east"
        elseif direction == DIR_NW then
            ss = ss.."north-west"
        elseif direction == DIR_SE then
            ss = ss.."south-east"
        elseif direction == DIR_SW then
            ss = ss.."south-west"
        end
    end
    
    return ss
end
 
function useExiva(cid, pid)
    return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, getCreatureName(pid)..getSearchString(getCreaturePosition(cid), getCreaturePosition(pid), true, true))
end

 

 


Naze#3578

 

<!-- Pirataria é crime, original é roubo, compartilhar é legal. -->

 

tumblr_muk78tEwDQ1qah4nko1_500.gif

Share this post


Link to post
Share on other sites
1 hora atrás, Naze disse:

Ele está em spells.cpp na source se tiver ela, existe a versão lua feita pelo LukeOake.

  Ocultar conteúdo


function getSearchString(fromPos, toPos, isFromCreature, isToCreature)
    isFromCreature = isFromCreature == nil and false or isFromCreature
    isToCreature = isToCreature == nil and false or isToCreature
    local DISTANCE_CLOSE,DISTANCE_FAR,DISTANCE_VERYFAR = 0,1,2
    local LEVEL_HIGHER,LEVEL_LOWER,LEVEL_SAME = 1,-1,0
    local DIR_N,DIR_S,DIR_E,DIR_W,DIR_NE,DIR_NW,DIR_SE,DIR_SW = 0,1,2,3,4,5,6,7,8
    local distance
    local direction
    local level
    local dx,dy,dz = fromPos.x - toPos.x,fromPos.y - toPos.y,fromPos.z - toPos.z
    
    if dz > 0 then
        level = LEVEL_HIGHER
    elseif dz < 0 then
        level = LEVEL_LOWER
    else
        level = LEVEL_SAME
    end
    
    if math.abs(dx) < 5 and math.abs(dy) < 5 then
        distance = DISTANCE_BESIDE
    else
        tmp = dx * dx + dy * dy
        if tmp < 10000 then
            distance = DISTANCE_CLOSE
        elseif tmp < 75625 then
            distance = DISTANCE_FAR
        else
            distance = DISTANCE_VERYFAR
        end
    end
    
    local tangent
    
    if dx ~= 0 then
        tangent = dy / dx
    else
        tangent = 10.
    end
    
    if math.abs(tangent) < 0.4142 then
        if dx > 0 then
            direction = DIR_W
        else
            direction = DIR_E
        end
    elseif math.abs(tangent) < 2.4142 then
        if tangent > 0 then
            if dy > 0 then
                direction = DIR_NW
            else
                direction = DIR_SE
            end
        else
            if dx > 0 then
                direction = DIR_SW
            else
                direction = DIR_NE
            end
        end
    else
        if dy > 0 then
            direction = DIR_N
        else
            direction = DIR_S
        end
    end
    
    local ss = ""
    
    if distance == DISTANCE_BESIDE then
        if level == LEVEL_SAME then
            ss = ss.."is "
            if toIsCreature then
                ss = ss.."standing "
            end
            
            ss = ss.."next to you"
        elseif level == LEVEL_HIGHER then
            ss = ss.."is above "
            if fromIsCreature then
                ss = ss.."you"
            end
        elseif level == LEVEL_LOWER then
            ss = ss.."is below "
            if fromIsCreature then
                ss = ss.."you"
            end
        end
    elseif distance == DISTANCE_CLOSE then
        if level == LEVEL_SAME then
            ss = ss.."is to the"
        elseif level == LEVEL_HIGHER then
            ss = ss.."is on a higher level to the "
        elseif level == LEVEL_LOWER then
            ss = ss.."is on a lower level to the "
        end
    elseif distance == DISTANCE_FAR then
        ss = ss.."is far to the"
    elseif distance == DISTANCE_VERYFAR then
        ss = ss.."is very far to the"
    end
    
    if distance ~= DISTANCE_BESIDE then
        ss = ss.." "
        if direction == DIR_N then
            ss = ss.."north"
        elseif direction == DIR_S then
            ss = ss.."south"
        elseif direction == DIR_E then
            ss = ss.."east"
        elseif direction == DIR_W then
            ss = ss.."west"
        elseif direction == DIR_NE then
            ss = ss.."north-east"
        elseif direction == DIR_NW then
            ss = ss.."north-west"
        elseif direction == DIR_SE then
            ss = ss.."south-east"
        elseif direction == DIR_SW then
            ss = ss.."south-west"
        end
    end
    
    return ss
end
 
function useExiva(cid, pid)
    return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, getCreatureName(pid)..getSearchString(getCreaturePosition(cid), getCreaturePosition(pid), true, true))
end

 

está dando erro na distro, diz assim ''Event on CastSpell not found <data/spells/scripts/support/find_person.lua

 

Share this post


Link to post
Share on other sites

O que passei é apenas a função, para usa-la no spells teria q ser de outra forma, ai você poderia usar o que mor3nao falou. Da forma que você tem atual o que você quer que seja feito se não usar tfs 1.3, seria apenas na forma que movie falou, pela sources, então talvez não é um trabalho que qualquer um vai fazer de graça, acho que vou adicionar no meu servidor isso, ai posto aqui mas tenho muito trabalho antes disso então pode tentar por conta, as informações que precisa ja tem.


Naze#3578

 

<!-- Pirataria é crime, original é roubo, compartilhar é legal. -->

 

tumblr_muk78tEwDQ1qah4nko1_500.gif

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By Lisbeky
      .Qual servidor ou website você utiliza como base? 
      0.36
       
      Boa noite pessoal!
       
      Então, mais uma vez venho pedir ajuda... pesquisei bastante aqui no fórum e encontrei um script, testei e não deu certo, mas estarei postando aqui para quem sabe alguém solucionar o problema.
       
      o script ele faz um monstro X ao chegar aos 50% de life , ele se transforma em outro monstro Y, mas também queria ele dando storage para todos os players que atacarem ele...
       
      o que esta errado? 
      então não da erro na distro, nem quando ligo o servidor e nem quando mato o boss. mas o problema esta quando chega na metade da vida do primeiro boss, ele não aparece o outro, logo, não esta dando a storage também.
       
      obs: já pedi um suporte de um script que os playrs matam o boss e recebem a storage, esta corretíssimo funcionando, mas esse aqui é diferente, então atenção, não estou pedindo a mesma coisa :D
       
      então o script esta assim...
       
       function onStatsChange(cid, attacker, type, combat, value) local storage = 47000 local stor = 354867 -- n mexa local monster = "Phanta" -- Monstro que irá atingir o 50% e sumir local monstro = "Demo" -- Monstro que irá ser invocado local msg = "Enough playing. I am the Divinity of this house." -- Mensagem quando o monstro for sumir if not isMonster(cid) then return true end if type == STATSCHANGE_HEALTHLOSS and getCreatureName(cid):lower() == monster:lower() then local monsterPercent = 100/(getCreatureMaxHealth(cid)/getCreatureHealth(cid)) if monsterPercent <= 50 and monsterPercent >= 49 then if getGlobalStorageValue(stor) - os.time() <= 0 then doCreatureSay(cid, msg, 1) setGlobalStorageValue(stor, os.time() + 120) addEvent(doCreateMonster, 1000, monstro, getCreaturePosition(cid)) addEvent(doRemoveCreature, 1000, cid) for _, check in pairs(deathList) do if isPlayer(check) then setPlayerStorageValue(check, storage, 5) end end end end end return true end  
       
       
    • By Doidodepeda
      Entao galera, tenho esse script de top level que fica aparecendo na tela do player.
      queria saber se alguem pode modificar pra aparacer os resetes no lugar do level.
       
      Script:

      function onThink(interval, lastExecution)
          local max, query = 5, db.getResult("SELECT `name`, `level` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `level` DESC, `name` ASC;")
          local str = "TOP Rank Level do Server:\n"
          if (query:getID() ~= -1) then 
              k = 1 
              while true do
                  str = str .. "\n " .. k .. " - "..query:getDataString("name").." - ["..query:getDataInt("level").."]"
                  k = k + 1
                  if not(query:next()) or k > max then
                      break 
                  end 
              end 
              query:free()
          end
          doBroadcastMessage(str, 22)
          return true
      end
       
       
       
      Sistema de resete que uso:
       
       
    • By Senju uchira
      ola gostaria de tira uma duvida e fazer um pedido ao mesmo tempo-se possivel;
      e possivel o sumon x usa a spell com um comando, exemplo ; eu faço ele usa a spell com o comando X etals. como faço
       
    • By shanden4502
      Boa noite, então eu tenho esse codigo:
       
      local STORAGE_SKILL_LEVEL = 10009 local STORAGE_SKILL_TRY = 10007 local config = { levels = { {level = {0,9}, quant = {1,1}, percent = 5}, {level = {10,19}, quant = {1,1}, percent = 10}, {level = {20,29}, quant = {1,1}, percent = 15}, {level = {30,39}, quant = {1,1}, percent = 20}, {level = {40,49}, quant = {1,1}, percent = 25}, {level = {50,59}, quant = {1,1}, percent = 30}, {level = {60,69}, quant = {1,1}, percent = 30}, {level = {70,79}, quant = {1,1}, percent = 35}, {level = {80,89}, quant = {1,1}, percent = 35}, {level = {90,99}, quant = {1,1}, percent = 40}, {level = {100}, quant = {1,1}, percent = 50} }, rocks = {5092}, -- Id das rochas que podem ser quebradas rocks2 = {5093}, rocks3 = {5094}, rocks4 = {5095}, stones = {5097}, -- Modelo = {rock_id, rock_id} stones2 = {5099}, stones3 = {5100}, stones4 = {5098}, rock_delay = 60, -- Tempo de volta da rocha (Em segundos) bonus_chance = 3, -- Chance (em porcentagem) de se conseguir um bonus de exp bonus_exp = 1 -- Bonus extra } ------------------------------------ -- END Configurations --- ------------------------------------ function getCuttingLevel(cid) return getPlayerStorageValue(cid, STORAGE_SKILL_LEVEL) end function setPlayerCuttingLevel(cid, n) setPlayerStorageValue(cid, STORAGE_SKILL_LEVEL, n) end function addCuttingLevel(cid, n) setPlayerCuttingLevel(cid, getCuttingLevel(cid) + (isNumber(n) and n or 1)) setCuttingTry(cid, 0) end function getCuttingInfo(cid) for i = 1, #config.levels do min = config.levels[i].level[1]; max = config.levels[i].level[2] if (getCuttingLevel(cid) >= min and getCuttingLevel(cid) <= max) then return {quantity = {min = config.levels[i].quant[1], max = config.levels[i].quant[2]}, chance = config.levels[i].percent} end end end function getStoneByRock(rockid) for i = 1, #config.stones do if (config.stones[2] == rockid) then return config.stones[1] elseif (config.stones2[3] == rockid2) then return config.stones2[4] end end end function getCuttingTries(cid) return getPlayerStorageValue(cid, STORAGE_SKILL_TRY) end function setCuttingTry(cid, n) setPlayerStorageValue(cid, STORAGE_SKILL_TRY, n) end function addCuttingTry(cid, bonus) setCuttingTry(cid, getCuttingTries(cid) + 1 + (bonus and config.bonus_exp or 0)) if (getCuttingTries(cid) >= getCuttingExpTo(getCuttingLevel(cid))) then -- Up doPlayerSendTextMessage(cid, 22, "You advanced from level " .. getCuttingLevel(cid) .. " to level ".. (getCuttingLevel(cid) + 1) .." in miner.") if ((getCuttingLevel(cid)+1) == getCuttingMaxLevel()) then doPlayerSendTextMessage(cid, 22, "Max level reached in miner.") end addCuttingLevel(cid) doSendMagicEffect(getCreaturePosition(cid), math.random(28,30)) setCuttingTry(cid, 0) end end function getCuttingExpTo(level) return ((level*1.5)+((level+1)*7)) end function getCuttingMaxLevel() return config.levels[#config.levels].level[#config.levels[#config.levels].level] end --------------------------- function onUse(cid, item, fromPosition, itemEx, toPosition) rock = { id = itemEx.itemid, uid = itemEx.uid, position = toPosition } player = { position = getCreaturePosition(cid) } if (getCuttingLevel(cid) < 0) then setPlayerCuttingLevel(cid, 0) end if (isInArray(config.rocks, rocks2, rocks3, rocks4, rock.id, rock.id2, rock.id3, rock.id4)) then addCuttingTry(cid) if (math.random(1,100) <= getCuttingInfo(cid).chance) then local collected = math.random(getCuttingInfo(cid).quantity.min, getCuttingInfo(cid).quantity.max) doPlayerAddItem(cid, getStoneByRock(rock.id), collected) doPlayerSendTextMessage(cid, 22, "You got " .. collected .. " brass" .. (collected > 1 and "s" or "") .. " ore.") if (math.random(1,100) <= config.bonus_chance) then -- Bonus calc addCuttingTry(cid, true) doSendAnimatedText(player.position, "Bonus!", COLOR_ORANGE) end event_rockCut(rock) else if (math.random(0,100) <= (0-getCuttingInfo(cid).chance/0)) then doPlayerSendTextMessage(cid, 22, "You got nothing.") event_rockCut(rock) else doSendMagicEffect(rock.position, 3) doSendAnimatedText(rock.position, "Poff!", COLOR_GREEN) end end else doPlayerSendCancel(cid, "This can't be cut.") end end function event_rockCut(rock) addEvent(event_rockGrow, config.rock_delay * 1000, rock.position, rock.id) doTransformItem(rock.uid, 5104) doSendMagicEffect(rock.position, 3) doSendAnimatedText(rock.position, "Tack!", COLOR_GREEN) doItemSetAttribute(rock.uid, "name", "A trunk of " .. getItemNameById(rock.id)) end function event_rockGrow(rockPos, old_id) local rock = getThingFromPos(rockPos).uid doTransformItem(rock, old_id) doItemSetAttribute(rock, "name", getItemNameById(old_id)) doSendMagicEffect(rockPos, 3) end eu estou tentando editar para que dependendo da pedra, exemplo, 5092, venha o minerio 5097 e somente ele, eu tentei:
       
      if (config.stones[2] == rockid) then return config.stones[1] elseif (config.stones2[3] == rockid2) then return config.stones2[4] end mas não estou tendo resultado nenhum, nem erro, alguem poderia me dar uma luz?
    • By Lisbeky
      Boa noite galera! 
       
      Postei cedo sobre esse script, a duvida foi sanada, mas surgiu outro problema depois que teste.
       
      esse script serve para setar uma storage e criar um tp de saída para quando o boss for morto e isso esta acontecendo certinho, mas existe um problema, ele esta setando somente para o player que mata o boss e não para o time inteiro.
       
      Então gostaria de pedir o suporte a vocês. Será que da para por o storage para setar para todos os players dentro de uma determinada área?
       
      por exemplo usar, frompos e topos da área e fazer com que todos os players dentro desta posição , após matar o boss todos setarem a storage (46000, 5)
       
      Meus sinceros agradecimentos a todos do TibiaKing!
       
      local tps = { ["hyaena"] = {pos = {x=349, y=1103, z=15}, toPos = {x = 518, y = 840, z = 7}, time = 10, storage = 46000}, } local storage = 46000 local function removeTp(tp) local t = getTileItemById(tp.pos, 5023).uid return t > 0 and doRemoveItem(t) and doSendMagicEffect(tp.pos, CONST_ME_POFF) end function onKill(cid, target) local tp = tps[getCreatureName(target)] if tp then setPlayerStorageValue(cid, tp.storage, 5) doCreateTeleport(5023, tp.toPos, tp.pos) doCreatureSay(target, "O teleport irá sumir em "..tp.time.." segundos.", TALKTYPE_ORANGE_1) addEvent(removeTp, tp.time*1000, tp) end return true end   
       
       
  • Recently Browsing   0 members

    No registered users viewing this page.


Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

Tibia King Recomenda

DokeHost - Soluções em Hospedagem

VPS Windows
VPS Linux
Servidor VPS
×
×
  • Create New...