Jump to content

Recommended Posts

  • 3 weeks later...
Em 04/10/2021 em 17:30, najatheus disse:

Sistema funciona da seguinte maneira, ao clicar na alavanca, vai gerar um numero de 1 a quantidade de mesa ou piso que for configurado na tabela, esse numero sera a posição do item até o ponto que o player vai receber o item, assim si o player tirar o menor numero possivel ele podera ter a sorte de receber os stacks do items, vou estar deixando um video aqui em baixo mostrando o sistema

 

tem como add um itens pro player poder girar a roleta? por ex: o player presisa de determinado item e lvl pra poder girar e se ele nao tiver aparecera uma mensagem e se ele tive ele consegue girar e os itens que presisa some do inventario dele

Link to post
Share on other sites
Em 29/10/2021 em 09:37, rafersiq disse:

 

tem como add um itens pro player poder girar a roleta? por ex: o player presisa de determinado item e lvl pra poder girar e se ele nao tiver aparecera uma mensagem e se ele tive ele consegue girar e os itens que presisa some do inventario dele

local configuration_table = {
    storage_pos_item = 0; -- não mexa
    level_requeriment = { -- requimento para poder girar alavanca
        min = 1;
        max = 100;
    };
    count = 0; -- não mexa
    player_to_use_item_id = 3000; -- id do item que o player precisa ter para girar a roleta
    count_gire_item = 0; -- não mexa
    bag_id = 1991; -- id da bag que o player vai receber junto com o item
    count_remove = 0; -- não mexa
    floor_id_or_table = 10449; -- id da mesa ou piso que vão ficar os item por cima
    items = {3000, 2012, 13042, 13045, 13047, 13051, 13044, 13041}; -- items da roleta que vai ser usado na roleta
    effect_item = 8; -- efeito de quando estiver gerando o item
    effect_addItem = 1;  -- efeito de qnd o player receber o item
    effect_addItem_remove = 32; -- efeito de qnd o item for pro slot do player
    effect_removeItem = 36; -- efeito de qnd for remover os item da mesa ou piso
    time_create_item = 400; -- tempo para criar um a um item na mesa ou piso
    time_calcule_pos_item = 500; -- tempo para mover o item para a proxima posição
    time_count_calcule_pos_item = 3200; -- tempo para começar a mover o item ( obs o calculo min tem que ser a quantidade de mesa que vai ter x o tempo time_create_item)
    position = { -- configuração dos movimentos e posição
        create_item = { -- posição para criar os items
            [1] = {x = 981, y = 945, z = 7};
            [2] = {x = 981, y = 946, z = 7};
            [3] = {x = 982, y = 945, z = 7};
            [4] = {x = 982, y = 946, z = 7};
            [5] = {x = 983, y = 945, z = 7};
            [6] = {x = 983, y = 946, z = 7};
            [7] = {x = 984, y = 945, z = 7};
            [8] = {x = 984, y = 946, z = 7};
        };
        roleta = { -- giros da roleta
            [1] = {            
                [1] = {x = 0, y = 1, z = 0};
                [2] = {x = 1, y = -1, z = 0};
                [3] = {x = 0, y = 1, z = 0};
                [4] = {x = 1, y = -1, z = 0};
                [5] = {x = 0, y = 1, z = 0};
                [6] = {x = 1, y = -1, z = 0};
                [7] = {x = 0, y = 1, z = 0};
                [8] = {x = 3, y = 0, z = 0};
            };
            [2] = {
                [1] = {x = 0, y = 0, z = 0};
                [2] = {x = 1, y = -1, z = 0};
                [3] = {x = 0, y = 1, z = 0};
                [4] = {x = 1, y = -1, z = 0};
                [5] = {x = 0, y = 1, z = 0};
                [6] = {x = 1, y = -1, z = 0};
                [7] = {x = 0, y = 1, z = 0};
                [8] = {x = 3, y = 0, z = 0};
            };
            [3] = {
                [1] = {x = 0, y = 0, z = 0};
                [2] = {x = 0, y = 0, z = 0};
                [3] = {x = 0, y = 1, z = 0};
                [4] = {x = 1, y = -1, z = 0};
                [5] = {x = 0, y = 1, z = 0};
                [6] = {x = 1, y = -1, z = 0};
                [7] = {x = 0, y = 1, z = 0};
                [8] = {x = 3, y = 0, z = 0};
            };
            [4] = {
                [1] = {x = 0, y = 0, z = 0};
                [2] = {x = 0, y = 0, z = 0};
                [3] = {x = 0, y = 0, z = 0};
                [4] = {x = 1, y = -1, z = 0};
                [5] = {x = 0, y = 1, z = 0};
                [6] = {x = 1, y = -1, z = 0};
                [7] = {x = 0, y = 1, z = 0};
                [8] = {x = 3, y = 0, z = 0};
            };
            [5] = {
                [1] = {x = 0, y = 0, z = 0};
                [2] = {x = 0, y = 0, z = 0};
                [3] = {x = 0, y = 0, z = 0};
                [4] = {x = 0, y = 0, z = 0};
                [5] = {x = 0, y = 1, z = 0};
                [6] = {x = 1, y = -1, z = 0};
                [7] = {x = 0, y = 1, z = 0};
                [8] = {x = 3, y = 0, z = 0};
            };
            [6] = {
                [1] = {x = 0, y = 0, z = 0};
                [2] = {x = 0, y = 0, z = 0};
                [3] = {x = 0, y = 0, z = 0};
                [4] = {x = 0, y = 0, z = 0};
                [5] = {x = 0, y = 0, z = 0};
                [6] = {x = 1, y = -1, z = 0};
                [7] = {x = 0, y = 1, z = 0};
                [8] = {x = 3, y = 0, z = 0};
            };
            [7] = {
                [1] = {x = 0, y = 0, z = 0};
                [2] = {x = 0, y = 0, z = 0};
                [3] = {x = 0, y = 0, z = 0};
                [4] = {x = 0, y = 0, z = 0};
                [5] = {x = 0, y = 0, z = 0};
                [6] = {x = 0, y = 0, z = 0};
                [7] = {x = 0, y = 1, z = 0};
                [8] = {x = 3, y = 0, z = 0};
            };
            [8] = {
                [1] = {x = 0, y = 0, z = 0};
                [2] = {x = 0, y = 0, z = 0};
                [3] = {x = 0, y = 0, z = 0};
                [4] = {x = 0, y = 0, z = 0};
                [5] = {x = 0, y = 0, z = 0};
                [6] = {x = 0, y = 0, z = 0};
                [7] = {x = 0, y = 0, z = 0};
                [8] = {x = 3, y = 0, z = 0};
            };
        }
    }
}

local function createItemPos()
    if(configuration_table.count >= #configuration_table.position.create_item)then
        configuration_table.count = 0
        return
    end

    configuration_table.count = configuration_table.count + 1

    local item = Game.createItem(configuration_table.items[math.random(1, #configuration_table.items)], 1, configuration_table.position.create_item[configuration_table.count])
    local pos_item = item:getPosition()
    pos_item:sendMagicEffect(configuration_table.effect_item)
    item:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, "Item do evento da roleta")
    addEvent(createItemPos, configuration_table.time_create_item)
end

local function removeItemPos()
    if(configuration_table.count_remove >= #configuration_table.position.create_item)then
        configuration_table.count_remove = 0
        return
    end

    configuration_table.count_remove = configuration_table.count_remove + 1

    local tile = Tile(configuration_table.position.create_item[configuration_table.count_remove])
    if not tile then
        return
    end

   local item = tile:getTopVisibleThing()
   if not item then
       return
   end

   if(item:getId() == configuration_table.floor_id_or_table)then
        return removeItemPos()
   end

   item:getPosition():sendMagicEffect(configuration_table.effect_removeItem)
   item:remove()
   removeItemPos()
end

local function addItemPlayer(player_uid)
    local player = Player(player_uid)
    if not player then
        return
    end

    local tile = Tile(configuration_table.storage_pos_item)
    if not tile then
        return
    end

    local item = tile:getTopVisibleThing()
    if not item then
        return
    end

    local player_pos = player:getPosition()
    local item_pos = item:getPosition()

    local bag = player:addItem(configuration_table.bag_id, 1, true, 1, 3)
    bag:addItem(item:getId(), item:getCount(), true, 1, 3)
    player_pos:sendMagicEffect(configuration_table.effect_addItem)
    item_pos:sendMagicEffect(configuration_table.effect_addItem_remove)
    item:remove(item:getCount())
end

local function calculePosItem(value, player_uid)
    if(configuration_table.count_gire_item >= #configuration_table.position.create_item)then
        removeItemPos()
        addItemPlayer(player_uid)
        configuration_table.count_gire_item = 0
        return nil
    end

    configuration_table.count_gire_item = configuration_table.count_gire_item + 1

    local tile = Tile(configuration_table.position.create_item[configuration_table.count_gire_item])
    if not tile then
        return nil
    end

   local item = tile:getTopVisibleThing()
   if not item then
       return nil
   end

   if(item:getId() == configuration_table.floor_id_or_table)then
       return nil
   end

   local pos = item:getPosition()
   local item_pos_x = pos.x
   local item_pos_y = pos.y
   local item_pos_z = pos.z

   local pos_ = configuration_table.position.roleta[value]

   local position = Position(item_pos_x + pos_[configuration_table.count_gire_item].x, item_pos_y + pos_[configuration_table.count_gire_item].y, item_pos_z)
   if not position then
        return nil
   end

    configuration_table.storage_pos_item = position

   item:moveTo(position)
   addEvent(calculePosItem, configuration_table.time_calcule_pos_item, value, player_uid)
end

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if(player:getLevel() > configuration_table.level_requeriment.max)then
        return(not(player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " your level(" .. player:getLevel() .. ") needs to be bigger(" .. configuration_table.level_requeriment.max .. ")")))
    end

    if(player:getLevel() < configuration_table.level_requeriment.min)then
        return(not(player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " your level(" .. player:getLevel() .. ") needs to be smaller(" .. configuration_table.level_requeriment.min .. ")")))
    end

    local item_ = player:getItemById(configuration_table.player_to_use_item_id, true, -1)

    if not item_ then
        return not player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " você não tem o item")
    end

    if(configuration_table.count_gire_item >= 1) or (configuration_table.count >= 1) or (configuration_table.count_remove >= 1)then
        return(not(player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " wait the roulette is in action, wait for it to finish")))
    end

    local random = math.random(1, #configuration_table.position.roleta)

    item_:remove(1)

    configuration_table.storage_pos_item = 0

    createItemPos()
    addEvent(calculePosItem, configuration_table.time_count_calcule_pos_item, random, player.uid)
    Game.sendAnimatedText("Spin number will be: " .. random, player:getPosition(), math.random(1, 255))
    player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " item of the day is on the rocks there")
  return true
end


Espero ter ajudado

Edited by najatheus (see edit history)
Link to post
Share on other sites
  • 1 month later...

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.

  • Recently Browsing   0 members

    No registered users viewing this page.


  • Similar Content

    • By ArielZeRah
      Salve, gostaria de ajuda com Função Outfits.gif em meu SCRIPT de Characters.PHP, Função que eu quero é seguinte vou deixar videio.gif abaixo pra mas informação!

      Vou deixar meu Characters.php
      characters.php 
       
      ABS; Acho que linha em questão pra editar é essa abaixo vou deixar em spooler!
       
    • By britto.jpg
      function onUse(cid, item, frompos, position, topos) -- Não mecha.   local storage = 1000 -- Storage a cada quest que for criada aumente um numero da storage pra qnd vc pegar o baú de outra quest ñ aparecer que vc já fez.   local item = 2476 -- Id do item ira ganhar.   local quantidade = 1 -- Quantidade ira ganhar.   local level = 30 -- Level que precisa pra fazer.   if getPlayerLevel(cid) >= level and getPlayerStorageValue(cid,storage) == -1 then -- Não mecha.   setPlayerStorageValue(cid,storage,1) -- Não mecha.   doPlayerAddItem(cid, item, quantidade) -- Não mecha.   doSendAnimatedText(topos, "Cleck!", 66)   doSendMagicEffect(getCreaturePosition(cid), 94)   doItemSetAttribute(itemEx.uid, "description", "Esse equipamento foi ... ") elseif getPlayerLevel(cid) <= level then -- Não mecha   doPlayerSendCancel(cid, "The Legend\'s: Você precisa ser level "..level.." ou mais.") -- Mensagem que ira aparecer se o player tiver menos level que o necessario.   doSendMagicEffect(getCreaturePosition(cid), 2)    elseif getPlayerStorageValue(cid,storage) >= 1 then -- Não mecha.   doPlayerSendCancel(cid, 'The Legend\'s: Você já recebeu seu prêmio.') -- Quando tentar pegar mais de uma vez o baú.   doSendMagicEffect(getCreaturePosition(cid), 2) end return true end o erro é esse 
      [30/09/2022 01:25:40] [Error - Action Interface] 
      [30/09/2022 01:25:40] data/actions/scripts/Quests/Level 30/Knight Coat.lua:onUse
      [30/09/2022 01:25:40] Description: 
      [30/09/2022 01:25:4B8r3B4p7yhRXuBWLqsQ546WR43cqQwrbXMDFnBi6vSJBeif8tPW85a7r7DM961Jvk4hdryZoByEp8GC8HzsqJpRN4FxGM9a nil value)
      [30/09/2022 01:25:40] stack traceback:
      [30/09/2022 01:25:4B8r3B4p7yhRXuBWLqsQ546WR43cqQwrbXMDFnBi6vSJBeif8tPW85a7r7DM961Jvk4hdryZoByEp8GC8HzsqJpRN4FxGM9/Quests/Level 30/Knight Coat.lua:1>
       
    • By theeusespindola
      - Boa noite, gostaria de saber como faço pra fazer um script que ao clicar no item x, ele automaticamente vai pro Torurnament Coin(in game store), está mais ou menos pronto quando clica até o item some, porem nao vem tournament coin pra acc no store.
       
       
    • By cssiqueira
      Bom , minha primeira contribuição aqui no fórum, espero que ajude o pessoal novato assim como me ajudou pois sempre acho scripts para servers antigos mas para esses novos que não usam XML fica difícil, aqui no meu OT funcionou corretamente  estou usando o sistema VIP que insere na database em Account o campo vipdays e viplastday 
       
      OT -> Canary 1.3.0 / Cliente 12.86
       
      Eu criei o arquivo Lua em .: data\scripts\movements\others , O nome vocês que escolhem pode ser televip.lua...viptele.lua....teleportvip.lua fica a seu gosto 😁
       
      local config = { teleportActionId = Coloque Aqui o ACTION ID do item de teleport criado em seu RME } local teleVIP = MoveEvent('teleVIP') function teleVIP.onStepIn(player, item, position, fromPosition) if player:getVipDays() == 0 then player:teleportTo(fromPosition) player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce nao tem VIP.") return true end return true end teleVIP:aid(config.teleportActionId) teleVIP:register()  
       
    • By Diego Rulez
      Hoje estarei postando 3 scripts diferentes onde ao clicar na alavanca o player pode comprar itens. Antes que perguntem são 3 scripts porque o funcionamento é diferente, andei pesquisando bastante e perguntando a alguns no TibiaKing e vi que muitos disseram que era fácil, mas apenas dois conseguiram me ajudar. Um foi o @Lyu que explicou um detalhe de como "puxar" a charges para o item do items.xml ao invés de configurar no próprio script. Já o restante dos scripts foram desenvolvidos pelo @luanluciano93
       
      Neste primeiro script é possível comprar uma quantidade de itens (count), que vão vir dentro de um container (containerId) e caso eles tenham "charges", a carga que o item virá é a que está configurada no items.xml
      local items = { [1520] = {containerId = 2003, itemId = 2197, count = 20, price = 100000}, -- stone skin amulet [1521] = {containerId = 1992, itemId = 2164, count = 8, price = 40000}, -- might ring [1522] = {containerId = 1996, itemId = 2169, count = 8, price = 16000}, -- time ring [1523] = {containerId = 1991, itemId = 2167, count = 8, price = 16000}, -- energy ring [1524] = {containerId = 1993, itemId = 2214, count = 8, price = 16000} -- ring of healing } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local tabela = items[item.actionid] if not tabela then return false end local itemTypeContainer = ItemType(tabela.containerId) local itemTypeItem = ItemType(tabela.itemId) local containerWeight = itemTypeContainer:getWeight() local itemWeight = itemTypeItem:getWeight() local playerCap = player:getFreeCapacity() local totalWeight = (containerWeight + (itemWeight * tabela.count)) if playerCap < totalWeight then itemWeight = itemWeight / 100 player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "You have found a " .. itemTypeContainer:getName() .. " with " .. tabela.count .. " " .. itemTypeItem:getName() .. " weighing " .. totalWeight .. " oz it's too heavy.") player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local backpack = player:getSlotItem(CONST_SLOT_BACKPACK) if not backpack or backpack:getEmptySlots(false) < 1 then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "Your main backpack is full. You need to free up 1 available slots.") player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local container = Game.createItem(tabela.containerId) if not container then return false end for i = 1, tabela.count do local itemContainer = Game.createItem(tabela.itemId) if itemTypeItem:getCharges() > 0 then itemContainer:setAttribute(ITEM_ATTRIBUTE_CHARGES, itemTypeItem:getCharges()) end container:addItemEx(itemContainer) end if not container then return false end if player:getTotalMoney() > tabela.price then if player:removeTotalMoney(tabela.price) and player:addItemEx(container) then player:getPosition():sendMagicEffect(CONST_ME_DRAWBLOOD) end else player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "You don't have ".. tabela.price .." gold coins to buy a ".. itemTypeContainer:getName() .." with ".. tabela.count .." ".. itemTypeItem:getName() ..".") player:getPosition():sendMagicEffect(CONST_ME_POFF) end item:transform(item.itemid == 1945 and 1946 or 1945) return true end  
      Nesse segundo script, é possível comprar itens soltos (sem estar dentro de containers) mas que podem ser agrupados, como por exemplo, potions
      local potions = { [1515] = {id = 7620, charges = 100, value = 5600}, -- mana potion [1516] = {id = 7589, charges = 100, value = 9300}, -- strong mana potion [1517] = {id = 7590, charges = 100, value = 14400}, -- great mana potion [1518] = {id = 8472, charges = 100, value = 22800}, -- spirit potion [1519] = {id = 8473, charges = 100, value = 37900}, -- ultimate health potion } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local potion = potions[item.actionid] if not potion then return false end local potionId = ItemType(potion.id) local itemWeight = potionId:getWeight() * potion.charges if player:getFreeCapacity() >= itemWeight then if not player:removeMoney(potion.value) then player:sendCancelMessage("You don't have ".. potion.value .." gold coins to buy ".. potion.charges .." ".. potionId:getName() ..".") else player:getPosition():sendMagicEffect(CONST_ME_DRAWBLOOD) player:addItem(potion.id, potion.charges) end else player:sendCancelMessage("You don't have capacity.") player:getPosition():sendMagicEffect(CONST_ME_POFF) end item:transform(item.itemid == 1945 and 1946 or 1945) return true end  
      Nesse terceiro script, é possivel comprar apenas um item solto, não estacavel e sem charges, como uma wand, axe, etcs..
      local items = { [2378] = {itemId = 2197, price = 100000}, -- battle axe } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local tabela = items[item.actionid] if not tabela then return false end local itemTypeItem = ItemType(tabela.itemId) local itemWeight = itemTypeItem:getWeight() local playerCap = player:getFreeCapacity() if playerCap < itemWeight then itemWeight = itemWeight / 100 player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "You have found a " .. itemTypeItem:getName() .. " weighing " .. itemWeight .. " oz it's too heavy.") player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local backpack = player:getSlotItem(CONST_SLOT_BACKPACK) if not backpack or backpack:getEmptySlots(false) < 1 then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "Your main backpack is full. You need to free up 1 available slots.") player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local itemAdd = Game.createItem(tabela.itemId) if not itemAdd then return false end if player:getTotalMoney() > tabela.price then if player:removeTotalMoney(tabela.price) and player:addItemEx(itemAdd) then player:getPosition():sendMagicEffect(CONST_ME_DRAWBLOOD) end else player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "You don't have ".. tabela.price .." gold coins to buy a ".. itemTypeItem:getName() ..".") player:getPosition():sendMagicEffect(CONST_ME_POFF) end item:transform(item.itemid == 1945 and 1946 or 1945) return true end  
×
×
  • Create New...

Important Information

Confirmação de Termo