Ir para conteúdo
  • Cadastre-se

Sistema (PEDIDO) Um item que ao ser usado invoca um monstro que ajuda o invocador.


Posts Recomendados

Eu gostaria de uma ajuda em um script, como eu poderia fazer pra quando o jogador usar um item "X" ele invocar um monstro "X" ?

Sou novo nessas coisas de script então não manjo muito bem, se puderem me ajudar com isso eu serei grato!

Link para o post
Compartilhar em outros sites

Este tópico foi movido para a área correta. Esta é uma mensagem automática!
Pedimos que leia as regras do fórum!

Spoiler

This topic has been moved to the correct area. This is an automated message!
Please read the forum rules.

 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

@CaioPinaa Você não detalhou muito bem, então testa assim:

local monster = "Demon" -- Monster name

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local pos = getCreaturePosition(cid)
    local target = doCreateMonster(monster, pos)
    doRemoveItem(item.uid, 1)
    doConvinceCreature(cid, target)
    doSendMagicEffect(pos, 5)
    return true
end

 

Link para o post
Compartilhar em outros sites

@victor4312 

local config = {
    
    name = "Demon", -- Nome do Summon
    storage = 42355, -- Storage que permite o uso
    exaust_sto = 5555, -- Storage que contabiliza o exaust
    exaust_time = 60 -- Segundos de Exaust
    
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local pos = getCreaturePosition(cid)
    if getPlayerStorageValue(cid, config.storage) == 1 then
        if not exhaustion.check(cid, config.exaust_sto) then
            local target = doCreateMonster(config.name, pos)
            doConvinceCreature(cid, target)
            doSendMagicEffect(pos, CONST_ME_TELEPORT)
            exhaustion.set(cid, config.exaust_sto, config.exaust_time)
            return true
        else
            doPlayerSendTextMessage(cid, 27, "Exhaustion!! Wait ".. exhaustion.get(cid, config.exaust_sto) .." seconds.")
            doSendMagicEffect(pos, POFF)
            return false
        end
    else
        doPlayerSendTextMessage(cid, 27, "voce nao tem a storage necessaria")
        doSendMagicEffect(pos, POFF)
        return false 
    end
    return true
end

 

Link para o post
Compartilhar em outros sites

@victor4312 

local config = {
    
    name = "Demon", -- Nome do Summon
    max = 1, -- Máximo de summons
    storage = 42355, -- Storage que permite o uso
    exaust_sto = 5555, -- Storage que contabiliza o exaust
    exaust_time = 60 -- Segundos de Exaust
    
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local pos = getCreaturePosition(cid)
    if getPlayerStorageValue(cid, config.storage) == 1 then
        if not exhaustion.check(cid, config.exaust_sto) then
            if table.maxn(getCreatureSummons(cid)) <= config.max then
                local target = doCreateMonster(config.name, pos)
                doConvinceCreature(cid, target)
                doPlayerSendTextMessage(cid, 27, "Voce invocou o monstro ".. config.name .."!!")
                doSendMagicEffect(pos, CONST_ME_TELEPORT)
                exhaustion.set(cid, config.exaust_sto, config.exaust_time)
                return true
            else
                doPlayerSendTextMessage(cid, 27, "Você ja tem a quantidade máxima de summons ativos!")
                doSendMagicEffect(pos, POFF)
                return false 
            end
        else
            doPlayerSendTextMessage(cid, 27, "Exhaustion!! Wait ".. exhaustion.get(cid, config.exaust_sto) .." seconds.")
            doSendMagicEffect(pos, POFF)
            return false
        end
    else
        doPlayerSendTextMessage(cid, 27, "voce nao tem a storage necessaria")
        doSendMagicEffect(pos, POFF)
        return false 
    end
    return true
end

 

@CaioPinaa 

local monster = "Demon" -- Monster name
local max = 1 -- Max de summons ativos

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local pos = getCreaturePosition(cid)
    if table.maxn(getCreatureSummons(cid)) < max then
        local target = doCreateMonster(monster, pos)
        doConvinceCreature(cid, target)
        doSendMagicEffect(pos, 5)
    else
        doPlayerSendTextMessage(cid, 27, "Você ja tem a quantidade máxima de summons ativos!")
        doSendMagicEffect(pos, POFF)
        return false 
    end
    return true
end

 

Link para o post
Compartilhar em outros sites

@victor4312 Substitui na script;

doPlayerSendTextMessage(cid, 27, "Espere ".. math.floor(exhaustion.get(cid, config.exaust_sto) / 60) .." minuto(s) e ".. exhaustion.get(cid, config.exaust_sto) - (math.floor(exhaustion.get(cid, config.exaust_sto) / 60)*60) .." segundo(s) para usar seu pet novamente.")

 

Link para o post
Compartilhar em outros sites
local config = {
    
    name = "Demon", -- Nome do Summon
    max = 1, -- Máximo de summons
    storage = 42355, -- Storage que permite o uso
    exaust_sto = 5555, -- Storage que contabiliza o exaust
    exaust_time = 60 -- Segundos de Exaust
    
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local pos = getCreaturePosition(cid)
    if getPlayerStorageValue(cid, config.storage) == 1 then
        if not exhaustion.check(cid, config.exaust_sto) then
            if table.maxn(getCreatureSummons(cid)) <= config.max then
                local target = doCreateMonster(config.name, pos)
                doConvinceCreature(cid, target)
                doPlayerSendTextMessage(cid, 27, "Voce invocou o monstro ".. config.name .."!!")
                doSendMagicEffect(pos, CONST_ME_TELEPORT)
                exhaustion.set(cid, config.exaust_sto, config.exaust_time)
                return true
            else
                doPlayerSendTextMessage(cid, 27, "Você ja tem a quantidade máxima de summons ativos!")
                doSendMagicEffect(pos, POFF)
                return false 
            end
        else
            doPlayerSendTextMessage(cid, 27, "Exhaustion!! Wait ".. exhaustion.get(cid, config.exaust_sto) .." seconds.")
            doSendMagicEffect(pos, POFF)
            return false
        end
    else
        doPlayerSendTextMessage(cid, 27, "voce nao tem a storage necessaria")
        doSendMagicEffect(pos, POFF)
        return false 
    end
    return true
end

 

Como faz para tira esse storage e por só para vip usa? @Storm

Toda hr que tento usa o monstro faz isso 21:19 você não tem a storagenecessaria

Editado por louco3626 (veja o histórico de edições)

Jamais se desespere em meio as sombrias afeiçoes da sua vida, pois das nuvens mais negras cai água límpida e fecunda

Link para o post
Compartilhar em outros sites

@louco3626 

local config = {
    
    name = "Demon", -- Nome do Summon
    max = 1, -- Máximo de summons
    exaust_sto = 5555, -- Storage que contabiliza o exaust
    exaust_time = 60 -- Segundos de Exaust
    
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local pos = getCreaturePosition(cid)
        if not exhaustion.check(cid, config.exaust_sto) then
            if table.maxn(getCreatureSummons(cid)) <= config.max then
                local target = doCreateMonster(config.name, pos)
                doConvinceCreature(cid, target)
                doPlayerSendTextMessage(cid, 27, "Voce invocou o monstro ".. config.name .."!!")
                doSendMagicEffect(pos, CONST_ME_TELEPORT)
                exhaustion.set(cid, config.exaust_sto, config.exaust_time)
                return true
            else
                doPlayerSendTextMessage(cid, 27, "Você ja tem a quantidade máxima de summons ativos!")
                doSendMagicEffect(pos, POFF)
                return false 
            end
        else
            doPlayerSendTextMessage(cid, 27, "Exhaustion!! Wait ".. exhaustion.get(cid, config.exaust_sto) .." seconds.")
            doSendMagicEffect(pos, POFF)
            return false
        end
    return true
end

 

Link para o post
Compartilhar em outros sites
Em 29/04/2019 em 11:07, Storm disse:

@louco3626 


local config = {
    
    name = "Demon", -- Nome do Summon
    max = 1, -- Máximo de summons
    exaust_sto = 5555, -- Storage que contabiliza o exaust
    exaust_time = 60 -- Segundos de Exaust
    
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local pos = getCreaturePosition(cid)
        if not exhaustion.check(cid, config.exaust_sto) then
            if table.maxn(getCreatureSummons(cid)) <= config.max then
                local target = doCreateMonster(config.name, pos)
                doConvinceCreature(cid, target)
                doPlayerSendTextMessage(cid, 27, "Voce invocou o monstro ".. config.name .."!!")
                doSendMagicEffect(pos, CONST_ME_TELEPORT)
                exhaustion.set(cid, config.exaust_sto, config.exaust_time)
                return true
            else
                doPlayerSendTextMessage(cid, 27, "Você ja tem a quantidade máxima de summons ativos!")
                doSendMagicEffect(pos, POFF)
                return false 
            end
        else
            doPlayerSendTextMessage(cid, 27, "Exhaustion!! Wait ".. exhaustion.get(cid, config.exaust_sto) .." seconds.")
            doSendMagicEffect(pos, POFF)
            return false
        end
    return true
end

Depois dos 60 segundos ta dando pra invoca outro tipo... teria como deixa pra invoca só quando o primeiro morresse?

 

 

Jamais se desespere em meio as sombrias afeiçoes da sua vida, pois das nuvens mais negras cai água límpida e fecunda

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por luanluciano93
      Olá pessoal, estou desenvolvendo esse sistema vip para TFS 1.x, se precisarem de alguma função nova é só comentar, criei para usar em um servidor meu e resolvi postar, bom proveito a todos.
       
      É só ir no arquivo data/lib/core/player.lua e adicionar esse código no começo do script:
      -- ALTER TABLE `accounts` ADD `vip_time` BIGINT(20) NOT NULL DEFAULT 0; -- player:getVipTime() function Player.getVipTime(self) local resultId = db.storeQuery("SELECT `vip_time` FROM `accounts` WHERE `id` = '".. self:getAccountId() .."';") local time = resultId ~= false and result.getNumber(resultId, "vip_time") or 0 result.free(resultId) return time end -- player:isVip() function Player.isVip(self) return self:getVipTime() > os.time() and true or false end -- player:addVipDays(days) function Player.addVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVipDays(days) function Player.removeVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:setVipDays(days) function Player.setVipDays(self, days) return db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVip() function Player.removeVip(self) db.query("UPDATE `accounts` SET `vip_time` = '0' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:sendVipDaysMessage() function Player.sendVipDaysMessage(self) if self:isVip() then local vipTime = self:getVipTime() - os.time() local vipDays = 1 + (math.floor(vipTime / 86400)) return self:getVipTime() ~= false and self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'You have '.. vipDays .. ' vip day(s) in your account.') end end -- player:checkVipLogin() function Player.checkVipLogin(self) if self:getVipTime() > 0 and not self:isVip() then return self:removeVip() and self:teleportTo(self:getTown():getTemplePosition()) end end  
       
      As funções são:
      • player:getVipTime() - Retorna o valor da tabela vip_time (igual esta na database).
      • player:isVip() - Retorna se o player é vip ou não.
      • player:addVipDays(days) - Usa-se em algum script para para adicionar dias de vip ao player (parâmetro de entrada "days").
      • player:removeVipDays(days) - Usa-se em algum script para para remover dias de vip do player (parâmetro de entrada "days").
      • player:setVipDays(days) - Usa-se em algum script para para mudar os dias de vip do player (parâmetro de entrada "days").
      • player:removeVip() - Usa-se em algum script para para remover todo tempo de vip do player.
      • player:sendVipDaysMessage() - Retorna uma mensagem no player mostrando os dias de vip que ainda restam ao player.
      • player:checkVipLogin() - Checa se a vip do player acabou, se sim teleporta ele para o templo.
       

      Qualquer dúvida ou erro/bug poste aqui.
    • Por Killua
      Como funciona?
      A cada monstro que vc mata, seus itens equipados ganham 1 de exp. Quando seus itens chegarem às quantidades de exp definidas, eles upam e ficam com o nome assim: Demon Helmet + 1. Helmets, armors, legs, e boots recebem 1 de arm a cada vez que upam. Armas recebem 1 de ataque e escudos 1 de defesa.
       
      Para o monstro contar, ele deve dar um mínimo de exp (definido no script). O número de exp a que me refiro é aquele um presente no arquivo .xml.
       
      Para instalar, crie Killua Items Upgrade.lua em data/creaturescripts/scripts e coloque:
        Em data/creaturescripts/creaturescripts.xml coloque essas duas tags:
      <event type="kill" name="Item level" event="script" value="Killua Items Upgrade.lua"/> <event type="login" name="Item levell" event="script" value="Killua Items Upgrade.lua"/> Configurando: Na tabela table_of_slots, coloque em quais slots os itens upam.
      min_exp é a experiência mínima que o monstro deve ter para contar exp para o item. Se vc colocar 500, somente os monstros que tem exp igual ou superior a 500 no arquivo.xml vão valer.
      exp_levels são os valores de exp que os itens devem atingir para upar. No meu caso, quando o item alcançar 50 de exp, ele upa para o level 1. Quando alcançar 50 de exp, upa para o level 2 e assim por diante.
    • Por Cat
      Testado em: TFS 1.0 (10.31)
      Funciona em: TFS 1.0 e TFS 0.4
      Descrição: Você leva uma determinada espada até o npc, fala com ele, ele vai pegar essa espada e ficar com ela por um certo tempo (3min), claro, você irá pagar uma quantia. Ao retornar, sua espada estará melhorada (no caso dos ids utilizados o npc irá trocar o item). Se houver algum bug, reporte que arrumaremos.
      Créditos: Jamison, Daniel.
       
      ---------- • ----------
       
      Diálogo:
       
      22:21 Daniel [250]: hi 
      22:21 Blacksmith Elf: Hello Daniel! I'm a Blacksmith Elf, I can transform your item! 
      22:21 Daniel [250]: transform 
      22:21 Blacksmith Elf: From time to time fate smiles upon those who take great risks and have strong dreams! If you have money, we can try to transform your umbral swords, axes, clubs, bows, crossbows or spellbooks. 
      22:21 Daniel [250]: club 
      22:21 Blacksmith Elf: One handed or two handed? 
      22:21 Daniel [250]: one handed 
      22:21 Blacksmith Elf: Do you want to spend your money to transform your crude umbral mace, yes or no? 
      22:21 Daniel [250]: yes 
      22:21 Blacksmith Elf: Great! Alright, I need a while to finish this club for you. Come ask me later. 22:22 Daniel [250]: hi 
      22:22 Blacksmith Elf: Hello Daniel! I'm a Blacksmith Elf, I can transform your item! 
      22:22 Daniel [250]: transform 
      22:22 Blacksmith Elf: Have you left anything here to transform ? 
      22:22 Daniel [250]: yes 
      22:22 Blacksmith Elf: You must wait until : 22:24:49. 22:25 Daniel [250]: hi 
      22:25 Blacksmith Elf: Hello Daniel! I'm a Blacksmith Elf, I can transform your item! 
      22:25 Daniel [250]: transform 
      22:25 Blacksmith Elf: Have you left anything here to transform ? 
      22:25 Daniel [250]: yes 
      22:25 Blacksmith Elf: Here you have it.  
      ---------- • ----------
       
      Fotos
       

       

       

       
      ---------- • ----------
       
      Script:
       
      data/npc/Blacksmith Elf.lua
       



       
      data/npc/scripts/blacksmith_elf.lua
       



    • Por Sekk
      Bom, procurei esse Castle por MUITO TEMPO, mas não achei em NENHUM LUGAR DA INTERNET. Ontem, eu estava vendo alguns mapas do @Deathrocks, e vi nos prints, que o mapa possuia o evento que eu queria!
       
      Então baixei o mapa e extrai o evento, então venho lhes trazer!
       
       
      Nome: Castle 24H
      Cliente: 8.6
      Versão TFS: 0.4
      Tipo: Evento
       
      Bom, para começar, vamos em actions/scripts e crie 2 arquivos:
       
      castledoor1.lua
       
      castlewar1.lua
       
        Agora em actions.xml adicione as tags:
       
      Agora em monster/traps crie 3 arquivos:
       
      porta.xml
       
      protectcastle.xml  
      statue.xml  
      Agora em monsters.xml adicione as tags:    
      Vamos para movements/scripts e crie 2 arquivos:
       
      castlewar2.lua
       
      level.lua  
      Agora em movements.xml adicione as tags:  
       
      Pronto. Agora você só precisa baixar o mapa, inserir o mesmo ao seu servidor, configurar os teleports, e as hunts dentro do castle etc.
       
      PRINTS:
      1ª parte
       
      2ª parte:
       
      Obs.: Todos os ActionID e monsters já estão no mapa! Você só precisa configurar as coordenadas dos teleports, e o que possui no castle!
       
      Obs².: Tudo o que você pode configurar, já está escrito em cada script!
       
       
      Créditos:
      @DeathRocks
      PC98
      mapa.rar
    • Por gpedro
      Testado: MySQL & SQLite
      Distro: TFS 0.4_SVN & TFS 0.3.6

      MySQL

      ALTER TABLE `players` ADD `resets` INT(11) NOT NULL DEFAULT "0"; SQLite ALTER TABLE players ADD resets INTEGER not null default 0 Adicionando nas sources player.h procure por: uint32_t level; logo abaixo, adicione: uint32_t resets; iologindata.cpp procure por query << "SELECT `id`, `account_id`, `group_id`, `world_id`, `sex`, `vocation`, `experience`, `level`," substitua por: query << "SELECT `id`, `account_id`, `group_id`, `world_id`, `sex`, `vocation`, `experience`, `level`, `resets`, " procure por player->level = std::max((uint32_t)1, (uint32_t)result->getDataInt("level")); logo abaixo adicione: player->resets = (uint32_t)result->getDataInt("resets"); procure por query << "`maglevel` = " << player->magLevel << ", "; logo abaixo adicione: query << "`resets` = " << player->resets << ", "; players.cpp procure por: s << " (Level " << level << ")"; substitua por: s << " (Level " << level << ") [Reset " << resets << "]"; players.h procure por: void setPromotionLevel(uint32_t pLevel); logo abaixo adicione: uint32_t getResets() { return resets;} void setResets(int32_t amount) { resets += amount; if (resets < 0) {resets = 0;} } luascript.cpp para 0.3.6 static int32_t luaDoPlayerSetIdleTime(lua_State* L); logo abaixo adicione: static int32_t luaGetResets(lua_State* L); static int32_t luaSetResets(lua_State* L); talkactions.xml <talkaction words="!rank;/rank" event="script" value="ranks.lua"/> <talkaction words="!reset;/reset" script="reset.lua"/> ranks.lua
      Créditos: Dark Skyllen, Marcryzius, Mock, Kydrai, Cykotitan, gpedro*.
      * adaptação para 0.4
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo