Ir para conteúdo
  • Cadastre-se

LeoTK

Membro
  • Total de itens

    3264
  • Registro em

  • Última visita

  • Dias Ganhos

    63

Posts postados por LeoTK

  1. Em 06/10/2023 em 22:09, bolinhaoriginal disse:

     Bom Dia Hoje Eu Estou Aki Para Dropar O NTO Alternative, Porque Voce Me Pergunta?, Simples O Mlk E Mt Pnc, Vejam Os Relatos:

    Menino De 14 Anos: bem no inicio dos ots eu um pequeno garfanhoto no começo de otserver estilo dbo,ndbo,nto ( fazia poketibia na epoca ) eu comecei com um dbozin conhecendo os sistemas e vocaçoes comecei com a base teach ( sem conhecimento nenhum em dbo ) eu comecei a divulgar no facebook o dbo e o oriental vem no meu pv e começa a me xingar ( motivo? nenhum ) na epoca nem liguei mais vale resaltar aki

    Vendendo Base Dropada: bom a base nto alternative foi dropada fazia um tempo e o oriental msm sabendo disso foi vender para uma pessoa que nao sabia que foi dropada e tentou vender ( ela conversou cmg a tempo ) prints a baixo:
     

      Mostrar conteúdo oculto

    Screenshot_43.png.c5e94ed3fe771078966e517a1c187039.pngScreenshot_44.png.d9d230fc54744648aad2caf1fc68871a.png
    image.png.a2e9265a53bfc618ce0a0fa039e6dafe.png

    A Volta ( kaksdkaskdk ) : bom dps de mt tempo chega o menino oriental no meu pv perguntando se eu tenho um dbo, e qual base e, eu respondo pra ele, depois disso ele pergunta se eu ja tive a base alternative ( origens eu acho ) e depois disso fui pro pc falar com ele e ele começou a ser cuzaum ( oq normalmente e kk ) eu falei que tinha sim e ele pergunta quem mandou, eu falo que nao sou x9 e ele me ameaça falando que meu ot nao pega 1 on e fala que vai divulgar ( falando mal ) pros outros e me xinga de filho da puta, e dps disso eu falo pra ele o relato de anos atras e ele fala: fodase seu merda do caralho
    prints a baixo:
     

      Ocultar conteúdo

    Screenshot_94.thumb.png.d7ce14e4d80e8697bd34dcda9a2c4a36.pngScreenshot_98.png.0993ac7a0c9c44ad8bc2f06184953b37.pngScreenshot_97.thumb.png.8975e14a3db2b8e0e9b6dea7056bbf3f.pngScreenshot_96.thumb.png.8a3ac909305a3404803e6ec2b373e2f5.pngScreenshot_95.thumb.png.bd55979b0b06718c403e2a63f157bb34.png

    so estou esperando permiçao para dropar a base dbo alternative bye bye aproveitem a base nto alternative

    Download https://www.mediafire.com/file/f6mvl23caxnwhsw/NTO_ALTERNATIVE.rar/file
    Virus Total: https://www.virustotal.com/gui/file/1862f15c7424ef72e19c603688f8f76d12dbd017919ebabb1751a9dfd99b39d6

    essa foto desse oriental não me é estranha acho que já topei em algum momento com essa figura kkkk, pela base não conheço e também não faço questão mas independente de qualquer coisa é mais uma pra agregar ao opentibia entretanto vê se mantem o link online e não deixa off daqui um tempo ...

  2. 2 horas atrás, gelove disse:

    Senhoras e senhores, estou aprendendo a criar um baiak com um amigo mas estou com dificuldade de achar a localização das actions na versão do tibia que estamos utilizando, vejo vários tutoriais bem feitos aqui mas infelizmente não achamos essa pasta  para implementar as actions.

    Versão do tibia: 13.20 canary


    Bom primeiramente sugiro que tenha o datapack original que pode ser obtido no github oficial do projeto link abaixo.
    https://github.com/opentibiabr/canary

    Tendo a plena certeza de estar utilizando a base original e atualizada o sistema de revscript permite você ter um arquivo em qualquer lugar e ter mais de um tipo de função no mesmo script ou seja eu posso ter 1 action, 1 talkaction etc... ou até mais de 1 no mesmo arquivo.lua

    Sabendo disso a melhor forma é copiar um action que já existe de base e editar ou pode fazer um do zero vou deixar um exemplo de um abaixo.

    Obs: Sugiro utilizar o caminho de data-otservbr-global/scripts/custom/nomedoscript.lua ou data-canary/scripts/custom/nomedoscript.lua nesse caminho é a pasta custom onde tem apenas conteúdo custom é separada para isso então caso utilize o github desktop ou comando para manter o repositório atualizado não irá afetar a pasta custom com todo o seu conteúdo custom.

    Exemplo:

    local config = {
        [ITEM_GOLD_COIN] = {changeTo = ITEM_PLATINUM_COIN},
        [ITEM_PLATINUM_COIN] = {changeBack = ITEM_GOLD_COIN, changeTo = ITEM_CRYSTAL_COIN},
        [ITEM_CRYSTAL_COIN] = {changeBack = ITEM_PLATINUM_COIN}
    }
    
    local goldConverter = Action()
    
    function goldConverter.onUse(player, item, fromPosition, target, toPosition, isHotkey)
        local coin = config[target.itemid]
     
        if not coin then
            return false
        end
     
        local charges = item:getCharges()
        if coin.changeTo and target.type == 100 then
            target:remove()
            player:addItem(coin.changeTo, 1)
            item:transform(item:getId(), charges -1)
        elseif coin.changeBack then
            target:transform(target.itemid, target.type - 1)
            player:addItem(coin.changeBack, 100)
            item:transform(item:getId(), charges -1)
        else
            return false
        end
    
        if charges == 0 then
            item:remove()
        end
    
        return true
    end
    
    goldConverter:id(23722, 25719)
    goldConverter:register()


    Explicação:
    O revscript é bem simples tirando todo o conteúdo ele se resume em:

    - local goldConverter = Action()
    Essa parte você determina que o goldConverter vai ser um action

    - goldConverter:id(23722, 25719)
    Nessa parte você determina quais itens vão ser utilizados no caso como é o gold converter vai ser o gold coin e o platinum coin

    -goldConverter:register()
    Essa parte registra todo o escopo do goldConverter como script não precisando do action.xml apenas o arquivo.lua

  3. Em 18/07/2023 em 19:57, ambrozii0 disse:

    amigo esses Revscripts não funcionaram no meu servidor acho que o tfs nao deve ter batido.... 

    sera que alguem mais poderia ajudar? acho que é tfs 1.4 ou 1.5

    Você havia dito que era canary

    "Minha versão de cliente é 12.91
    Versão da Canary 2.6.1"

    Então eu passei scripts compatíveis com o canary

  4. 5 horas atrás, ambrozii0 disse:

    Gostaria de fazer um pedido de um NPC de Task progressiva,

    Ele iniciaria dando missões para level 8 para caçar Troll, Rotworm e Ghoul.

     

    No level 30 liberaria: Cyclops, Dragon e Wyrm... e assim em diante se puder deixar comentado eu faço as criaturas na sequencia dos leveis seguintes.

     

    O jogador pode fazer as tasks dos leveis anteriores mesmo que já tenha ultrapassado o level do próximo nível de task.

     

    E o jogador ao terminar a missão poderia escolher a recompensa em gold ou experiência. As tasks podem se repetir sem problema, mas apenas pode pegar uma de cada vez.

     

    Ao finalizar todas as tasks o jogador ganha uma montaria.

     

    Minha versão de cliente é 12.91
    Versão da Canary 2.6.1
    Não sei qual o TFS do meu servidor.

    existe esse para dar montaria etc... só configurar no script

    https://docs.opentibiabr.com/others/resources/revscripts/systems#revscript-modal-task-system1

     

    tem esse outro também a diferença é que o de cima é por item no mapa utilizei uma placa para simular o placa de task e o de baixo é por comando

     

    https://docs.opentibiabr.com/others/resources/revscripts/systems#revscript-modal-task-system

  5. 4 horas atrás, mcmarinello disse:

    .Qual servidor ou website você utiliza como base? 

    Canary

    Qual o motivo deste tópico? 

    Pessoal, estou com um server canary, gostaria de buffar os efeitos dos itens forjados, por exemplo Onslaugh no t10 da 10% chance de dano, contudo não acho o script que altera isso. vcs saberiam me informar pfv?

    Está surgindo algum erro? Se sim coloque-o aqui. 

     

    Você tem o código disponível? Se tiver publique-o aqui: 

    
     

     

    Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

     

    essa é a parte do código da source que faz o calculo da porcentagem só alterar isso

    https://github.com/opentibiabr/canary/blob/332c5403f33afb3fe64f1262bd1835d75cb0b6fa/src/server/network/protocol/protocolgame.cpp#L5038

  6. Salve galera beleza?

     

    Bom eu possuo esse projeto a um tempo desde sempre solo no projeto entretanto sempre foi difícil ter que fazer todas as partes do servidor sozinho então dessa vez que estou retomando o projeto estou buscando pessoas para agregar ao mesmo.

     

    Possuo mais de 10 anos de experiência na área, possuo um público interessado no projeto, possuo diversos conteúdos tanto implementado quanto para ser implementado ainda.

     

    Atualmente estou em busca de duas pessoas para fazer parte do projeto, estou buscando pessoas na área de mapper e de cliente maker (OTC) que saiba fazer as edições no design de um Otclient

     

    Como já deve ter ficado subtendido a ideia é buscar pessoas para fazer parte do projeto para ter ganhos lá na frente, dito isso que para muitos pode parecer muito desanimador pelo fato de não ter retorno financeiro de imediato posso garantir que tudo o que é necessário para um servidor dar certo desde a infraestrutura até os detalhes menos "importantes" eu com toda a experiência que consegui obter todo esse tempo posso garantir o sucesso do servidor.

     

    Mais importante que palavras são fatos.

     

    Abaixo algumas redes sociais onde podem ver por vocês mesmo um pouco do projeto, estou aberto a entrar em uma call e mostrar o projeto por completo também basta apenas entrar no servidor do discord e me chamar.

     

    Facebook: https://www.facebook.com/NtoNewSeason

    Youtube: https://www.youtube.com/@NtoNewSeason

    Discord: https://discord.gg/FZnQ2PTvzT

     

    Algumas fotos:

     

    casas_e_lojas.gif

    hiraishin_kunai.gif

    screenshot_2022-08-8-12-2-31.png?width=8

    screenshot_2021-10-11-16-14-3.png

  7. Em 25/02/2023 em 10:58, Anderson Sacani disse:

    Bom dia!

    Estava de bobeira agora pela manhã e resolvi brincar um pouco.

    Criei um script de SD no qual se for noite, ela retornará um valor X de dano, e, se for dia, ela retornará um valor Y de dano.

    Estou compartilhando esse script para vocês terem como base e usarem até mesmo em outros:

     

    
    local config = {
        damageDay = {
            min = 0.70,
            max = 0.75
        },
        damageNight = {
            min = 0.95,
            max = 1
        },
        hourStartDay = 6,
        hourEndDay = 18
    }
    
    local combat = Combat()
    combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
    combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
    combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
    
    function onGetFormulaValues(player, level, maglevel)
        local min, max = ((level / 5) + (maglevel * 4.605)), ((level / 5) + (maglevel * 7.395))
        local hour = tonumber(os.date("%H", os.time())) -- Obtém a hora atual
    
        -- Define o valor do dano com base na hora do dia
        if hour >= config.hourStartDay and hour < config.hourEndDay then -- Dia
            min = min * config.damageDay.min
            max = max * config.damageDay.max
        else -- Noite
            min = min * config.damageNight.min
            max = max * config.damageNight.max
        end
    
        return -min, -max
    end
    
    combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
    
    local rune = Spell("rune")
    
    function rune.onCastSpell(creature, var, isHotkey)
        return combat:execute(creature, var)
    end
    
    rune:group("attack")
    rune:name("sudden death rune")
    rune:runeId(3155)
    rune:allowFarUse(true)
    rune:charges(3)
    rune:level(45)
    rune:magicLevel(15)
    rune:cooldown(2 * 1000)
    rune:groupCooldown(2 * 1000)
    rune:needTarget(true)
    rune:isBlocking(true) -- True = Solid / False = Creature
    rune:register()

     

     

     

    ele pega o horário do jogo ou da maquina vps que esta hospedado?

  8. 13 horas atrás, Maahzeera disse:

    Agora este erro.. seria problema com a minha lib ?

     

    image.thumb.png.0b51b75ad83ac0c1afb86918b8b623b4.png

     

    tenta


    Não testei
     

    local combat1 = createCombatObject()
    setCombatParam(combat1, COMBAT_PARAM_HITCOLOR, COLOR_LIGHTGREEN)
    setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
    setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, 70)
    setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -35.0, 0, -40.5, 0)
    
    local function onCastSpell1(cid, parameters)
    if not isPlayer(parameters.cid) then return true end
    if isCreature(parameters.cid) and getCreatureTarget(parameters.cid) then
    local target = getThingPosition(getCreatureTarget(parameters.cid))
    local position1 = {x=getThingPosition(target).x+0, y=getThingPosition(target).y+0, z=getThingPosition(target).z}
    doSendMagicEffect(position1, 31)
    return isCreature(parameters.cid) and doCombat(parameters.cid, parameters.combat1, parameters.var)
    end
    end
     
    function onCastSpell(cid, var)
    local parameters = {cid = cid, var = var, combat1 = combat1}
    
    for k = 1, 7 do
        addEvent(function()
            if isCreature(cid) then
                addEvent(onCastSpell1, 1, cid, parameters)            
            end
        end, 1 + ((k-1) * 225))
    end
    return true
    end

     

  9. 8 horas atrás, NetoXdddsedrttg disse:

    .Qual servidor ou website você utiliza como base? 

     

    Qual o motivo deste tópico? 

     

    Está surgindo algum erro? Se sim coloque-o aqui. 

     

    Você tem o código disponível? Se tiver publique-o aqui: 

    
     

     

    Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

     

    me chama no discord

    LeoTK#3957

  10. Em 17/02/2023 em 00:33, doda4ever disse:

    Fala pessoal. Estou com alguns outfits e sprites próprios e gostaria de tentar escondê-los ou pelo menos dificultar que os outros copiem.

     

    Estou a procura de alguém que saiba esconder/ camuflar o cliente .dat .spr do meu cliente próprio 8.60

     

    Valores a conversar.

    Hoje em dia é muito dificil fazer isso ainda mais nessa versão caso for OTC (OtClient) talvez consiga mas ainda sim não é 100% seguro uma parcela de gente ainda vai conseguir recortar as sprites e ripar caso queira mesmo algo do tipo sugiro procurar um profissional fora do opentibia ou seja um programador de criptografia para ele criar uma criptografia única dessa forma vai ser mais dificil ripar lembrando ainda não é impossível mas esse é o caminho, lembrando isso não é barato ok mas é o valor pela segurança dos seus dados...

  11. 6 horas atrás, Spraypaint disse:

    .Qual servidor ou website você utiliza como base? 

     

    Qual o motivo deste tópico? 

    Existe alguma solução para burlar o IPCGNAT? Ou só conseguiria hospedar o meu servidor aqui se conseguisse um ip exclusivo?

    Está surgindo algum erro? Se sim coloque-o aqui. 

     

    Você tem o código disponível? Se tiver publique-o aqui: 

    
     

     

    Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

     

    só usando a porta 8090 ou solicitando o tal do ip fixo que eles cobram uma fortuna que pelo valor sai mais barato alugar uma vps

  12. 3 horas atrás, leozincorsair disse:

    Galera ultimamente tem uns gringos atacando vários servidores, e o meu também foi alvo, eles estao fazendo ataques no site e assim trava o servidor a ponto que nem feche, so e possivel retornar reiniciando a vps. Se alguem souber de alguma coisa por favor nos ajude

     uso linux e ja tentei praticamente de tudo !

     

    me chama no discord: LeoTK#3957

  13. Em 09/01/2023 em 19:35, Rodrigo Querobim disse:

    Não deu também, não sei por que ele não esta reconhecendo as voc

    Testa esse aqui

     

    Spoiler


    
    local config = {
    	items = {
    		{id = 35284, charges = 8000},
    		{id = 35279, charges = 8000},
    		{id = 35281, charges = 8000},
    		{id = 35283, charges = 8000},
    		{id = 35282, charges = 8000},
    		{id = 35280, charges = 8000},
    	},
    	storage = 3327712, -- storage key, player can only win once
    }
    
    local function sendExerciseRewardModal(player)
    	local window = ModalWindow {
    		title = "Exercise Reward",
    		message = 'choose a item'
    	}
    	for _, it in pairs(config.items) do
    		local iType = ItemType(it.id)
    		if iType then
    			local choice = window:addChoice(iType:getName())
    			choice.itemId = it.id
    			choice.charges = it.charges
    		end
    	end
    	window:addButton('Ok',
    		function(button, choice)
    			local iType = ItemType(choice.itemId)
    			
    			local inbox = player:getSlotItem(CONST_SLOT_STORE_INBOX)
    			if inbox and inbox:getEmptySlots() > 0 then
    				local item = inbox:addItem(choice.itemId, choice.charges)
    				if item then
    					item:setActionId(NOT_MOVEABLE_ACTION)
    				else
    					player:sendTextMessage(MESSAGE_INFO_DESCR, "You need to have capacity and empty slots to receive.")
    					return
    				end
    				player:sendTextMessage(MESSAGE_INFO_DESCR, "Congratulations, you just received a ".. iType:getName() .." [".. choice.charges .."] charges.")
    				player:setStorageValue(config.storage, 1)
    			else
    				player:sendTextMessage(MESSAGE_INFO_DESCR, "You need to have capacity and empty slots to receive.")
    			end
    		end
    	)
    	window:addButton('Close',
    		function(button, choice)
    		end
    	)
    	window:setDefaultEnterButton('Close')
    	window:setDefaultEscapeButton('Close')
    	window:sendToPlayer(player)
    end
    
    local exercise_reward_modal = TalkAction("!reward")
    function exercise_reward_modal.onSay(player, words, param)
    	if player:getStorageValue(config.storage) > 0 then
    		player:sendTextMessage(MESSAGE_INFO_DESCR, "You already received your exercise weapon reward!")
    		return false
    	end
    	sendExerciseRewardModal(player)
    	return false
    end
    exercise_reward_modal:separator(" ")
    exercise_reward_modal:register()


     

     

  14. 4 horas atrás, King Laker disse:

    Infelizmente esse sistema tem o mesmo problema do script do night, quando um player tem protection all (como um might ring ou outro item editado) o dano do critico fica menor do que o dano base, queria saber se existe a possibilidade de arrumar isso?

    não dou suporte faz tempo a esse script caso queira corrigir para agregar ao tópico fique a vontade e eu edito com a modificação

  15. 1 hora atrás, Rodrigo Bouviere disse:

    .Qual servidor ou website você utiliza como base? 

    TFS 0.3.7

    Qual o motivo deste tópico? 

    Olá, estou voltando a mexer com OTServer depois de anos... e estou dando suporte ao OT de um amigo... 

    nosso OT possui apenas um set "VIP"

    e eu gostaria de criar mais itens vips... na verdade um set para cada vocacao...

    a minha pergunta, é como eu faço isso... eu sei que posso editar os atributos dos itens ja existentes em itens.xml e movements.xml...

    eu gostaria de saber se é possivel, eu criar um item com um ID novo, porem usando a Sprite de um item que já esta em uso, como por exemplo a Demon legs

    e nao precisar alterar a demon legs original...

    se sim, como devo proceder? preciso adicionar isso nas sources do meu server e recompila-lo? agradeço desde já...

     

    Está surgindo algum erro? Se sim coloque-o aqui. 

     

    Você tem o código disponível? Se tiver publique-o aqui: 

    
     

     

    Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

     

    você vai precisar duplicar a sprite e depois atualizar no item.otb dessa forma vai ter um novo item com os atributos da demon legs entretanto você pode alterar para legs vip por exemplo....

  16. 17 horas atrás, TibianoAprendiZ disse:

    Vejo ot's que o efeito do buff do personagem fica grudado na vocação, sem atraso de quando a vocacão se mover e o buff ficar "pra tras", o efeito fica totalmente no personagem. Como faço isso? Script? Dll? 

     

    depende se não me engano tem um server que usa dll e os outros são OTClient onde usa shaders no lugar do effect

  17. Em 25/07/2022 em 18:40, Maniaco disse:

    @FeeTads Video:
     

     

     

    Salve demorou mas consegui achar ta ai bro

     

     

    é um MOD okCrie um arquivo na pasta mod e coloque esse código

     

    Spoiler


    
    <?xml version="1.0" encoding="UTF-8"?>
    <mod name="BoatSystem" enabled="yes" author="MatheusMkalo" forum="XTibia.com">
    
    <config name="BoatSystemLib"><![CDATA[
    mydirs= {
       [1] = {type = 1, ids = {3587, 3590, 3591}, xy = {0, -1}},
       [2] = {type = 2, ids = {3592, 3595, 3596}, xy = {1, 0}},
       [3] = {type = 1, ids = {3587, 3590, 3591}, xy = {0, 1}},
       [4] = {type = 2, ids = {3592, 3595, 3596}, xy = {-1, 0}}
    }
    
    allids = {3587, 3590, 3591, 3592, 3595, 3596}
    
    function newEndb(endb, dir)
       local xx = endb.x
       local yy = endb.y
       for i = 1, #dir do
           xx = xx+mydirs[dir[i]].xy[1]
           yy = yy+mydirs[dir[i]].xy[2]
       end
       return {x=xx, y=yy, z=endb.z}
    end
    
    function doMoveBoat(post, dir, cid)
       local newboat = {}
       for i,s in ipairs(post) do
           local backu = getThingPos(s)
           doRemoveItem(s, 1)
           doCreateItem(mydirs[dir].ids[i], 1, {x=backu.x+mydirs[dir].xy[1], y=backu.y+mydirs[dir].xy[2], z=backu.z})
           table.insert(newboat, getThingFromPos({x=backu.x+mydirs[dir].xy[1], y=backu.y+mydirs[dir].xy[2], z=backu.z, stackpos=1}).uid)
       end
       if mydirs[dir].type ~= post.type and mydirs[dir].type == 1 then
           doCreateItem(getThing(newboat[1]).itemid, 1, {x=getThingPos(newboat[1]).x+1, y=getThingPos(newboat[1]).y-1, z=getThingPos(newboat[1]).z})
           doRemoveItem(newboat[1], 1)
           doCreateItem(getThing(newboat[3]).itemid, 1, {x=getThingPos(newboat[3]).x-1, y=getThingPos(newboat[3]).y+1, z=getThingPos(newboat[3]).z})
           doRemoveItem(newboat[3], 1)
       elseif mydirs[dir].type ~= post.type and mydirs[dir].type == 2 then
           doCreateItem(getThing(newboat[1]).itemid, 1, {x=getThingPos(newboat[1]).x-1, y=getThingPos(newboat[1]).y+1, z=getThingPos(newboat[1]).z})
           doRemoveItem(newboat[1], 1)
           doCreateItem(getThing(newboat[3]).itemid, 1, {x=getThingPos(newboat[3]).x+1, y=getThingPos(newboat[3]).y-1, z=getThingPos(newboat[3]).z})
           doRemoveItem(newboat[3], 1)
       end
       if cid then
           doTeleportThing(cid, {x=getCreaturePosition(cid).x+mydirs[dir].xy[1], y=getCreaturePosition(cid).y+mydirs[dir].xy[2], z=getCreaturePosition(cid).z}, false) 
       end
    end
    
    function getPosBoat(cid, pos)
       local pcid = not pos and getCreaturePosition(cid) or pos
       local check = getThingFromPos({x=pcid.x, y=pcid.y, z=pcid.z, stackpos=1}).itemid == mydirs[1].ids[2] and 1 or 2
       if check == 1 then
           return {getThingFromPos({x=pcid.x, y=pcid.y-1, z=pcid.z, stackpos=1}).uid, getThingFromPos({x=pcid.x, y=pcid.y, z=pcid.z, stackpos=1}).uid, getThingFromPos({x=pcid.x, y=pcid.y+1, z=pcid.z, stackpos=1}).uid, type = check}
       elseif check == 2 then
           return {getThingFromPos({x=pcid.x-1, y=pcid.y, z=pcid.z, stackpos=1}).uid, getThingFromPos({x=pcid.x, y=pcid.y, z=pcid.z, stackpos=1}).uid, getThingFromPos({x=pcid.x+1, y=pcid.y, z=pcid.z, stackpos=1}).uid, type = check}
       end
    return false
    end
    
    function reverse(t)
       local result = {}
       for i = #t, 1, -1 do
           table.insert(result, t[i] == 1 and 3 or t[i] == 2 and 4 or t[i] == 3 and 1 or t[i] == 4 and 2)
       end
    return result
    end
    
    ]]></config>
    
    <movevent type="StepIn" actionid="6616" event="script"><![CDATA[
       domodlib("BoatSystemLib")
       local t = {4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}
       local postart = {x=968, y=1001, z=7, stackpos=1}
       local posback = {x=994, y=978, z=7, stackpos=1}
       local delay = 350
       if toPosition.x == posback.x and toPosition.y == posback.y then
           doCreatureSetNoMove(cid, true)
           for i = 1, #reverse(t) do
               addEvent(function() doMoveBoat(getPosBoat(cid), reverse(t)[i], cid) end, i*delay)
           end
           addEvent(doCreatureSetNoMove, delay*#reverse(t)+100, cid, false)
           addEvent(function() doItemSetAttribute(getThingFromPos(postart).uid, "aid", 6616) end, delay*#t+100)
       elseif toPosition.x == postart.x and toPosition.y == postart.y then
           doCreatureSetNoMove(cid, true)
           for i = 1, #t do
               addEvent(function() doMoveBoat(getPosBoat(cid), t[i], cid) end, i*delay)
           end
           addEvent(doCreatureSetNoMove, delay*#t+100, cid, false)
           addEvent(function() doItemSetAttribute(getThingFromPos(posback).uid, "aid", 6616) end, delay*#t+100)
       end
    ]]></movevent>
    
    <movevent type="StepIn" actionid="6617" event="script"><![CDATA[
       domodlib("BoatSystemLib")
       if not isInArray(allids, getThingFromPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=1}).itemid) then
           doTeleportThing(cid, fromPosition, false)
       end
    ]]></movevent>
    
    </mod>


     

     

     

    Agora as configurações
     

    local t = {4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}
    local postart = {x=968, y=1001, z=7, stackpos=1}
    
    local posback = {x=994, y=978, z=7, stackpos=1}
    
    local delay = 350

     

    No local t, sao todas as direçoes que o barco vai andar, em sentido horario:
    
    1 = norte
    
    2 = leste
    
    3 = sul
    
    4 = oeste
    
    No local postart eh a posiçao que o meio do barco vai estar quando ele estiver indo para algum lugar.
    
    No local posback eh a posiçao que o meio do barco vai estar quando ele estiver voltando.
    
    O delay eh o tempo em milesegundos que demora pra o barco andar.
    
    Adicionando no Map editor:
    
    Faça 3 sqms do id 4820.
    
    Adicione o actionid 6617 nesses sqms.
    
    Faça 3 ids de barco, voce escolhe se eh o virado para cima ou para o lado.
    
    Bote o actionid 6616 no meio do barco.
    
    OBS: PONHA OS SQMS DA ROTA PARA NAO PODER LOGA SE ALGUEM LOGA NO BARCO VAI DAR BUG

     

    @Maniaco

     

  18. @DonaTello testa ai eu estou meio enferrujado mas acredito que vá resolver teu problema

    OBS: Não testei


     

    Spoiler


    
    -----DISCORD:SoyFabi#5938
    local combat = createCombatObject()
    local combat1 = createCombatObject()
    setCombatParam(combat1, COMBAT_PARAM_HITCOLOR, COLOR_YELLOW) --180(red), 70(blue), 156(brown), 215(white), 145(red 2), 95(lightblue)
    setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
    setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -1.0, -1000, -1.0, -1000)
    -------------------
    local function onCastSpell1(parameters)
    if not isPlayer(parameters.cid) then return true end
    doCombat(parameters.cid, parameters.combat1, parameters.var)
    end
    -------------------
    local combat2 = createCombatObject()
    setCombatParam(combat2, COMBAT_PARAM_HITCOLOR, COLOR_YELLOW) --180(red), 70(blue), 156(brown), 215(white), 145(red 2), 95(lightblue)
    setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
    setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -1.0, -1000, -1.0, -1000)
    setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, 22) -- Missile
    -------------------
    local function onCastSpell2(parameters)
    if not isPlayer(parameters.cid) then return true end
    doCombat(parameters.cid, parameters.combat2, parameters.var)
    end
    -------------------
    local function Effect(cid, target)
    local pos = getCreaturePosition(target)
      	if not isCreature(parameters.cid) then return true end
    	doSendMagicEffect({x = pos.x + 1, y = pos.y + 1, z = pos.z}, 216)
    end
    local function Effect_two(cid, target)
    local pos = getCreaturePosition(target)
      	if not isCreature(parameters.cid) then return true end
    	doSendMagicEffect({x = pos.x + 1, y = pos.y + 2, z = pos.z}, 217)
    end
    local function Effect_three(cid, target)
    local pos = getCreaturePosition(target)
      	if not isCreature(parameters.cid) then return true end
    	doSendMagicEffect({x = pos.x + 2, y = pos.y + 2, z = pos.z}, 218)
    end
    local function Effect_four(cid, target)
    local pos = getCreaturePosition(target)
      	if not isCreature(parameters.cid) then return true end
    	doSendMagicEffect({x = pos.x + 2, y = pos.y + 1, z = pos.z}, 219)
    end
    local function Effect_five(cid, target)
    local pos = getCreaturePosition(target)
      	if not isCreature(parameters.cid) then return true end
    	doSendMagicEffect({x = pos.x + 1, y = pos.y + 1, z = pos.z}, 220)
    end
    local function Effect_six(cid, target)
    local pos = getCreaturePosition(target)
      	if not isCreature(parameters.cid) then return true end
    	doSendMagicEffect({x = pos.x + 2, y = pos.y + 1, z = pos.z}, 223)
    end
    local function Effect_seven(cid, target)
    local pos = getCreaturePosition(target)
      	if not isCreature(parameters.cid) then return true end
    	doSendMagicEffect({x = pos.x + 1, y = pos.y + 1, z = pos.z}, 222)
    end
    local function Effect_eight(cid, target)
    local pos = getCreaturePosition(target)
      	if not isCreature(parameters.cid) then return true end
    	doSendMagicEffect({x = pos.x + 1, y = pos.y + 1, z = pos.z}, 221)
    end
    function onCastSpell(cid, var)
    local exhausted = 1 -- Time of exhaustion.
    local storage = 17002 -- Storage for combo for each spell.
    if exhaustion.check(cid, storage) then
    doPlayerSendCancel(cid, "You are exhausted.")
    doSendMagicEffect(getCreaturePosition(cid), 2)
        return false
    end
    local parameters = {cid = cid, var = var, combat1 = combat1 , combat2 = combat2}
    addEvent(onCastSpell2, 100, parameters)
    addEvent(onCastSpell1, 300, parameters)
    addEvent(onCastSpell1, 400, parameters)
    addEvent(onCastSpell1, 500, parameters)
    addEvent(onCastSpell1, 600, parameters)
    addEvent(onCastSpell1, 700, parameters)
    addEvent(onCastSpell1, 800, parameters)
    local config = {
                    hit = 1, -- Veces que dara un hit.
                    time = 100, -- tiempo que saldra la magia.
    				time2 = 300, -- tiempo que saldra la magia.
    				time3 = 400, -- tiempo que saldra la magia.
    				time4 = 500, -- tiempo que saldra la magia.
    				time5 = 600, -- tiempo que saldra la magia.
    				time6 = 700, -- tiempo que saldra la magia.
    				time7 = 800, -- tiempo que saldra la magia.
    				time8 = 900, -- tiempo que saldra la magia.
                    configtarget = getCreatureTarget(cid), --- No borre (es importante para que salga las magias).				
    }
    for a = 1, config.hit do
    addEvent(Effect, config.time * a, cid, config.configtarget)
    addEvent(Effect_two, config.time2 * a, cid, config.configtarget)	
    addEvent(Effect_three, config.time3 * a, cid, config.configtarget)	
    addEvent(Effect_four, config.time4 * a, cid, config.configtarget)	
    addEvent(Effect_five, config.time5 * a, cid, config.configtarget)	
    addEvent(Effect_six, config.time6 * a, cid, config.configtarget)	
    addEvent(Effect_seven, config.time7 * a, cid, config.configtarget)	
    addEvent(Effect_eight, config.time8 * a, cid, config.configtarget)					
    end
    
    		
    exhaustion.set(cid, storage, exhausted)
    return doCombat(cid, combat, var)
    end
    ---DISCORD:SoyFabi#5938


     

     

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo