Postado Dezembro 27, 2023 1 ano boa tarde TK estou com um problema para adicionar um sistema de rowlet no meu servidor 8.60 OTX2 erro abaixo se puderem ajudar tmj local config = { actionId = 1495, -- ID DA LAVANCA lever = { left = 1945, right = 1946 }, playItem = { itemId = 2160, -- item necessário para puxar a alavanca count = 10 }, rouletteOptions = { rareItemChance_broadcastThreshold = 500, ignoredItems = {1617,1485}, -- se você tiver mesas/contadores/outros itens nas peças da roleta, adicione-os aqui winEffects = {CONST_ANI_FIRE, CONST_ME_SOUND_YELLOW, CONST_ME_SOUND_PURPLE, CONST_ME_SOUND_BLUE, CONST_ME_SOUND_WHITE}, -- o primeiro efeito precisa ser o efeito de distância effectDelay = 33, spinTime = {min = 8, max = 12}, -- segundos spinSlowdownRamping = 5, rouletteStorage = 48550 -- storage necessário para evitar abuso do jogador (se ele sair/morrer antes do final da roleta.. eles podem girar novamente de graça) }, prizePool = { {itemId = 2160, count = {1, 10}, chance = 100}, -- {itemId = itemid, count = {min, max}, chance = chance/10000} (crystal coins) {itemId = 13752, count = {1, 1}, chance = 9000 }, -- crown legs {itemId = 13753, count = {1, 1}, chance = 8500 }, -- boots of haste {itemId = 13754, count = {1, 1}, chance = 7500 }, -- royal helmet {itemId = 13755, count = {1, 1}, chance = 6500 }, -- old sudden death rune -- runes are given as stackable items, even tho they have 'charges' {itemId = 13756, count = {1, 100}, chance = 5000 }, -- loot seller chest -- items with 'charges' and have 'showCharges' in items.xml will be given charges {itemId = 13749, count = {1, 3}, chance = 4000 }, -- roulette token {itemId = 13751, count = {1, 1}, chance = 3000 }, -- golden legs {itemId = 13600, count = {1, 1}, chance = 1500 }, -- magic plate armor {itemId = 13604, count = {1, 1}, chance = 500 }, -- golden boots {itemId = 13604, count = {1, 1}, chance = 500 }, -- golden boots {itemId = 13604, count = {1, 1}, chance = 500 } -- golden boots }, roulettePositions = { -- 7 positions. Position(72, 168, 8), Position(73, 168, 8), Position(74, 168, 8), Position(78, 168, 8), --a posição 4 nesta lista é codificada para ser o local da recompensa, que é o item dado ao jogador Position(75, 168, 8), Position(76, 168, 8), Position(77, 168, 8), Position(78, 168, 8), Position(79, 168, 8), Position(80, 168, 8), Position(81, 168, 8), Position(82, 168, 8), } } local chancedItems = {} -- used for broadcast. don't edit local function resetLever(position) local lever = Tile(position):getItemById(config.lever.right) lever:transform(config.lever.left) end local function updateRoulette(newItemInfo) local positions = config.roulettePositions for i = #positions, 1, -1 do local item = Tile(positions[i]):getTopVisibleThing() if item and item:getId() ~= Tile(positions[i]):getGround():getId() and not table.contains(config.rouletteOptions.ignoredItems, item:getId()) then if i ~= 12 then item:moveTo(positions[i + 1]) else item:remove() end end end if ItemType(newItemInfo.itemId):hasShowCharges() then local item = Game.createItem(newItemInfo.itemId, 1, positions[1]) item:setAttribute("charges", newItemInfo.count) else Game.createItem(newItemInfo.itemId, newItemInfo.count, positions[1]) end end local function clearRoulette(newItemInfo) local positions = config.roulettePositions for i = #positions, 1, -1 do local item = Tile(positions[i]):getTopVisibleThing() if item and item:getId() ~= Tile(positions[i]):getGround():getId() and not table.contains(config.rouletteOptions.ignoredItems, item:getId()) then item:remove() end if newItemInfo == nil then positions[i]:sendMagicEffect(CONST_ME_POFF) else if ItemType(newItemInfo.itemId):hasShowCharges() then local item = Game.createItem(newItemInfo.itemId, 1, positions[i]) item:setAttribute("charges", newItemInfo.count) else Game.createItem(newItemInfo.itemId, newItemInfo.count, positions[i]) end end end end local function chanceNewReward() local newItemInfo = {itemId = 0, count = 0} local rewardTable = {} while #rewardTable < 1 do for i = 1, #config.prizePool do if config.prizePool[i].chance >= math.random(10000) then rewardTable[#rewardTable + 1] = i end end end local rand = math.random(#rewardTable) newItemInfo.itemId = config.prizePool[rewardTable[rand]].itemId newItemInfo.count = math.random(config.prizePool[rewardTable[rand]].count[1], config.prizePool[rewardTable[rand]].count[2]) chancedItems[#chancedItems + 1] = config.prizePool[rewardTable[rand]].chance return newItemInfo end local function initiateReward(leverPosition, effectCounter) if effectCounter < #config.rouletteOptions.winEffects then effectCounter = effectCounter + 1 if effectCounter == 1 then config.roulettePositions[1]:sendDistanceEffect(config.roulettePositions[4], config.rouletteOptions.winEffects[1]) config.roulettePositions[7]:sendDistanceEffect(config.roulettePositions[4], config.rouletteOptions.winEffects[1]) else for i = 1, #config.roulettePositions do config.roulettePositions[i]:sendMagicEffect(config.rouletteOptions.winEffects[effectCounter]) end end if effectCounter == 2 then local item = Tile(config.roulettePositions[4]):getTopVisibleThing() local newItemInfo = {itemId = item:getId(), count = item:getCount()} clearRoulette(newItemInfo) end addEvent(initiateReward, config.rouletteOptions.effectDelay, leverPosition, effectCounter) return end resetLever(leverPosition) end local function rewardPlayer(playerId, leverPosition) local player = Player(playerId) if not player then return end local item = Tile(config.roulettePositions[4]):getTopVisibleThing() if ItemType(item:getId()):hasShowCharges() then local addedItem = player:addItem(item:getId(), 1, true) addedItem:setAttribute("charges", item:getCharges()) else player:addItem(item:getId(), item:getCount(), true) end player:setStorageValue(config.rouletteOptions.rouletteStorage, -1) if chancedItems[#chancedItems - 3] <= config.rouletteOptions.rareItemChance_broadcastThreshold then Game.broadcastMessage("The player " .. player:getName() .. " has won " .. item:getName() .. " from the roulette!", MESSAGE_EVENT_ADVANCE) end end local function roulette(playerId, leverPosition, spinTimeRemaining, spinDelay) local player = Player(playerId) if not player then resetLever(leverPosition) return end local newItemInfo = chanceNewReward() updateRoulette(newItemInfo) if spinTimeRemaining > 0 then spinDelay = spinDelay + config.rouletteOptions.spinSlowdownRamping addEvent(roulette, spinDelay, playerId, leverPosition, spinTimeRemaining - (spinDelay - config.rouletteOptions.spinSlowdownRamping), spinDelay) return end initiateReward(leverPosition, 0) rewardPlayer(playerId, leverPosition) end local casinoRoulette = Action() function casinoRoulette.onUse(player, item, fromPosition, target, toPosition, isHotkey) if item:getId() == config.lever.right then player:sendTextMessage(MESSAGE_STATUS_SMALL, "A Roleta do Cassino está em andamento. Por favor, aguarde.") return true end if player:getItemCount(config.playItem.itemId) < config.playItem.count then if player:getStorageValue(config.rouletteOptions.rouletteStorage) < 1 then player:sendTextMessage(MESSAGE_STATUS_SMALL, "A Roleta do Cassino requer " .. config.playItem.count .. " " .. (ItemType(config.playItem.itemId):getName()) .. " usar.") return true end -- player:sendTextMessage(MESSAGE_STATUS_SMALL, "Free Spin being used due to a previous unforeseen error.") end item:transform(config.lever.right) clearRoulette() chancedItems = {} player:removeItem(config.playItem.itemId, config.playItem.count) player:setStorageValue(config.rouletteOptions.rouletteStorage, 1) local spinTimeRemaining = math.random((config.rouletteOptions.spinTime.min * 1000), (config.rouletteOptions.spinTime.max * 1000)) roulette(player:getId(), toPosition, spinTimeRemaining, 100) return true end casinoRoulette:aid(config.actionId) casinoRoulette:register() local disableMovingItemsToRoulettePositions = EventCallback disableMovingItemsToRoulettePositions.onMoveItem = function(self, item, count, fromPosition, toPosition, fromCylinder, toCylinder) for v, k in pairs(config.roulettePositions) do if toPosition == k then return false end end return true end disableMovingItemsToRoulettePositions:register()
Postado Dezembro 28, 2023 1 ano Em 27/12/2023 em 19:53, carlosmagnox disse: servidor 8.60 OTX2 o script é de TFS 1.x, não vai funcionar como script de OTX mesmo
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.