-
Total de itens
106 -
Registro em
-
Última visita
Sobre Muvuka

Perfil
-
Gênero
Masculino
Informações
-
Char no Tibia
Samuel on Issobra
-
Forma que conheci o xTibia
Outros Sites
-
Sou
Scripter
Últimos Visitantes
20970 visualizações
Muvuka's Achievements
-
Muvuka começou a seguir TFS 0.3.6 - 8.60 COMO EU FAÇO PRA DEIXA MINIMAP FULL DO CLIENT CLASSICO DO TIBIA 8.60 , TFS 0.3.6 - 8.60 Eu queria clean console script limpa concole sem precisa da clean com mause eu queria a cada 12 horas. , [TFS 0.3.6 8.60] Pra Que Que Serve Isso o Que eu Ponho Nisso e 7 outros
-
displayPlayersLogging = true prefixChannelLogs = "" runFile = "" outLogName = "" errorLogName = "" truncateLogsOnStartup = false -D__ENABLE_SERVER_LOGS__ -D__GUI_LOGS__ Já Adicionei Essas Flag Pra Compila Mais Mesmo Assim eu Aperto CTRL +Z ou CTRL + J Reporto Mais Não Aparece Nada Nos na Pasta Logs adminLogsEnabled = true displayPlayersLogging = true prefixChannelLogs = "" runFile = "logs/run.log" outLogName = "logs/out.log" errorLogName = "logs/error.logs" truncateLogsOnStartup = false Mais não Funciona
-
Olha Como o Meu tá e Não ta Funcionando Olha Mapa: ONDE EU TO É A POS: x266 y233 z15 <action actionid="4725" script="roulette.lua"/> <action actionid="4571" script="roulette.lua"/> <action actionid="4545" script="roulette.lua"/> <action actionid="4478" script="roulette.lua"/> --[[ ================================================================================ = ROULETTE SYSTEM FOR TFS = = = = Author: Neutras = = Version: 2.1 = = Description: Gacha-style roulette system with dynamic speed mechanics = = and multi-key feature. = = = = Features: = = - Multi-key support (1-4 keys per spin). = = - Dynamic speed animation with configurable initial and final speeds. = = - Persistent "Winner Slot" effects and animated texts. = = - Configurable rewards with reroll chances. = = - Logging system to track player rewards. = = = = Compatible with TFS 0.3.7 (Tibia 8.6). = ================================================================================ --]] --[[ ================================================================================ = ROULETTE SYSTEM FOR TFS = = = = Author: Neutras = = Version: 2.1 = = Description: Gacha-style roulette system with dynamic speed mechanics = = and multi-key feature. = = = = Features: = = - Multi-key support (1-4 keys per spin). = = - Dynamic speed animation with configurable initial and final speeds. = = - Persistent "Winner Slot" effects and animated texts. = = - Configurable rewards with reroll chances. = = - Logging system to track player rewards. = = = = Compatible with TFS 0.3.7 (Tibia 8.6). = ================================================================================ --]] -- ================= LOGGING SYSTEM ================= -- local logPath = "data/logs/" local logFileName = "roulette.log" -- Logs player rewards to a file. -- @param cid: Player ID. -- @param keyName: Name of the key used. -- @param items: Table of items won. -- @param keyCount: Number of keys used. local function logEntry(cid, keyName, items, keyCount) local file = io.open(logPath .. logFileName, "a") if file then local itemStrings = {} for _, item in ipairs(items) do table.insert(itemStrings, string.format("x%d %s", item.count, getItemNameById(item.id))) end file:write(string.format("[%s] %s used %d '%s' and won: %s\n", os.date("%Y-%m-%d %H:%M:%S"), getPlayerName(cid), keyCount, keyName, table.concat(itemStrings, ", "))) file:close() end end -- ================= BASE CONFIGURATION ================= -- -- Levers Action IDs to key item IDs. local keyByAid = { [1354] = 9971, -- Key for reward level 1 (Copper) [1355] = 9972, -- Key for reward level 2 (Silver) [1356] = 9973 -- Key for reward level 3 (Golden) } -- Levers Action IDs to reward levels. local rewardByAid = { [1354] = 1, -- Reward level 1 (Copper) [1355] = 2, -- Reward level 2 (Silver) [1356] = 3 -- Reward level 3 (Golden) } -- Relative positions of the slots in the roulette. local rouletteSpinOffset = { {1, -4}, {2, -4}, {3, -4}, {3, -3}, {4, -3}, {4, -2}, {4, -1}, {5, -1}, {5, 0}, {5, 1}, {4, 1}, {4, 2}, {4, 3}, {3, 3}, {3, 4}, {2, 4}, {1, 4}, {0, 4}, {-1, 4}, {-2, 4}, {-3, 4}, {-3, 3}, {-4, 3}, {-4, 2}, {-4, 1}, {-5, 1}, {-5, 0}, {-5, -1},{-4, -1},{-4, -2}, {-4, -3},{-3, -3},{-3, -4},{-2, -4},{-1, -4}, {0, -4} } -- ================= MAIN CONFIGURATION ================= -- local config = { rouletteCD = 30, -- Global cooldown in seconds. globalStoCd = 22600, -- Storage ID for cooldown. globalStoKeyCount = 22601, -- Storage ID for key count. maxLoops = 100, -- Maximum iterations per spin. initialSpeed = 50, -- Initial speed in milliseconds. finalSpeed = 400, -- Final speed in milliseconds. effectLever = 35, -- Effect when activating the lever. effectRewardPlayer = 28, -- Effect on the player when winning. effectReward = 28, -- Effect on the winning slot. -- Reward table by level. -- Formula: Real Probability = (Item Chance / Total Chances) * (1 - (Reroll % / 100)) items = { [1] = { {id = 4871, chance = 100, count = 1}, }, [2] = { {id = 4872, chance = 100, count = 1}, }, [3] = { {id = 4870, chance = 100, count = 1}, }, [4] = { {id = 5899, chance = 100, count = 1}, }, [5] = { {id = 2349, chance = 100, count = 1}, }, [6] = { {id = 9003, chance = 100, count = 1}, }, [7] = { {id = 2300, chance = 100, count = 1}, }, [8] = { {id = 2309, chance = 100, count = 1}, }, [9] = { {id = 2272, chance = 100, count = 1}, }, [10] = { {id = 2306, chance = 100, count = 1}, }, [11] = { {id = 2447, chance = 100, count = 1}, }, [12] = { {id = 7739, chance = 100, count = 1}, }, [13] = { {id = 7737, chance = 100, count = 1}, }, [14] = { {id = 5805, chance = 100, count = 1}, }, [15] = { {id = 2446, chance = 100, count = 1} } } } -- ================= PROBABILITY CACHING ================= -- -- Precalculates cumulative probabilities for each reward level. local cumulativeChanceCache = {} for rewardId, items in pairs(config.items) do local total = 0 local cumulative = {} for _, item in ipairs(items) do total = total + item.chance table.insert(cumulative, {item = item, threshold = total}) end cumulativeChanceCache[rewardId] = {total = total, items = cumulative} end -- ================= UTILITY FUNCTIONS ================= -- -- Calculates the speed of the roulette animation based on progress. -- @param progress: Current progress (0 to 1). -- @return: Speed in milliseconds. local function calculateSpeed(progress) return config.initialSpeed + (config.finalSpeed - config.initialSpeed) * progress^3 end -- Selects a random item from the reward table, considering reroll chances. -- @param rewardId: Reward level ID. -- @return: Selected item. local function chooseRouletteItem(rewardId) local cache = cumulativeChanceCache[rewardId] local roll = math.random(cache.total) for _, entry in ipairs(cache.items) do if roll <= entry.threshold then if entry.item.porc_cambio and math.random(100) <= entry.item.porc_cambio then return chooseRouletteItem(rewardId) end return entry.item end end return cache.items[#cache.items].item end -- Rotates the slots in the roulette. -- @param slots: Table of slots. local function rotateSlots(slots) local last = slots[36] for i = 36, 2, -1 do slots[i] = slots[i-1] end slots[1] = last end -- Updates the visual display of the roulette. -- @param cpos: Center position of the roulette. -- @param slots: Table of slots. -- @param isFillingPhase: Whether the slots are being filled for the first time. local function updateRouletteDisplay(cpos, slots, isFillingPhase) for i = 1, 36 do local pos = { x = cpos.x + rouletteSpinOffset[i][1], y = cpos.y + rouletteSpinOffset[i][2], z = cpos.z } doCleanTile(pos) if slots[i] then doCreateItem(slots[i].id, slots[i].count, pos) -- Show puff effect only during the initial filling phase. if isFillingPhase then doSendMagicEffect(pos, 14) end end end end -- ================= WINNER SLOTS AND EFFECTS ================= -- -- Shows "Winner Slot" animated text on winning slots. -- @param cpos: Center position of the roulette. -- @param keyCount: Number of keys used. local function showWinnerSlots(cpos, keyCount) local winningSlots = {} if keyCount == 1 then winningSlots = {36} elseif keyCount == 2 then winningSlots = {36, 18} elseif keyCount == 3 then winningSlots = {36, 18, 9} elseif keyCount == 4 then winningSlots = {36, 18, 9, 27} else winningSlots = {36} -- Default to one winning slot if keyCount is invalid. end for _, slot in ipairs(winningSlots) do local pos = { x = cpos.x + rouletteSpinOffset[slot][1], y = cpos.y + rouletteSpinOffset[slot][2], z = cpos.z } doSendAnimatedText(pos, "Winner", TEXTCOLOR_YELLOW) end end -- Shows the number of keys in use. -- @param cpos: Center position of the roulette. local function showKeyCount(cpos) local keyCount = getGlobalStorageValue(config.globalStoKeyCount) keyCount = (keyCount < 1 or keyCount > 4) and 1 or keyCount local pos = {x = 266, y = 233, z = 15} doSendAnimatedText(pos, string.format("Keys: %d", keyCount), TEXTCOLOR_LIGHTBLUE) end -- ================= MAIN ROULETTE LOGIC ================= -- -- Main animation function, recursively called to simulate the roulette spin. -- @param cid: Player ID. -- @param cpos: Center position of the roulette. -- @param rewardId: ID of the reward level. -- @param nloop: Current iteration number. -- @param slots: Table of slots (items). -- @param keyName: Name of the key used. -- @param keyCount: Number of keys used. local function shuffle(cid, cpos, rewardId, nloop, slots, keyName, keyCount) if nloop > config.maxLoops then if isPlayer(cid) then -- Determine winning slots based on the number of keys used. local winningSlots = {} if keyCount == 1 then winningSlots = {36} elseif keyCount == 2 then winningSlots = {36, 18} elseif keyCount == 3 then winningSlots = {36, 18, 9} elseif keyCount == 4 then winningSlots = {36, 18, 9, 27} else winningSlots = {36} -- Default to one winning slot if keyCount is invalid. end -- Get the winning items and their positions. local wonItems = {} local winPositions = {} for _, slot in ipairs(winningSlots) do if slots[slot] then table.insert(wonItems, slots[slot]) local pos = { x = cpos.x + rouletteSpinOffset[slot][1], y = cpos.y + rouletteSpinOffset[slot][2], z = cpos.z } table.insert(winPositions, pos) end end -- Award the items and display visual effects. if #wonItems > 0 then for _, pos in ipairs(winPositions) do doSendAnimatedText(pos, "Winner Slot", TEXTCOLOR_YELLOW) doSendMagicEffect(pos, config.effectReward) end for _, item in ipairs(wonItems) do doPlayerAddItem(cid, item.id, item.count) end doSendMagicEffect(getCreaturePosition(cid), config.effectRewardPlayer) -- Display a message to the player with all the rewards. local itemList = {} for _, item in ipairs(wonItems) do table.insert(itemList, string.format("x%d %s", item.count, getItemNameById(item.id))) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[ROULETTE] You won: " .. table.concat(itemList, ", ")) -- Log the player's rewards. logEntry(cid, keyName, wonItems, keyCount) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[ROULETTE] No items won.") end setGlobalStorageValue(config.globalStoCd, 0) end return end -- Initial filling phase of the roulette slots. if nloop <= 36 then slots[nloop] = chooseRouletteItem(rewardId) updateRouletteDisplay(cpos, slots, true) else -- Rotate the slots and update the display. rotateSlots(slots) updateRouletteDisplay(cpos, slots, false) -- Show effects on the winning slots every 5 iterations. if nloop % 5 == 0 then local winningSlots = {} if keyCount == 1 then winningSlots = {36} elseif keyCount == 2 then winningSlots = {36, 18} elseif keyCount == 3 then winningSlots = {36, 18, 9} elseif keyCount == 4 then winningSlots = {36, 18, 9, 27} else winningSlots = {36} -- Default to one winning slot if keyCount is invalid. end for _, slot in ipairs(winningSlots) do local pos = { x = cpos.x + rouletteSpinOffset[slot][1], y = cpos.y + rouletteSpinOffset[slot][2], z = cpos.z } doSendMagicEffect(pos, config.effectReward) end end end -- Schedule the next iteration with dynamic speed. local progress = nloop / config.maxLoops addEvent(shuffle, calculateSpeed(progress), cid, cpos, rewardId, nloop + 1, slots, keyName, keyCount) end -- ================= PERIODIC EFFECTS AND TEXTS ================= -- -- Shows effects and texts periodically. -- @param cpos: Center position of the roulette. local function showEffectsAndTexts(cpos) local keyCount = getGlobalStorageValue(config.globalStoKeyCount) keyCount = (keyCount < 1 or keyCount > 4) and 1 or keyCount -- Ensure keyCount is within range. -- Show "Winner Slot" on the winning slots. showWinnerSlots(cpos, keyCount) -- Show the number of keys in use. showKeyCount(cpos) -- Schedule the next execution. addEvent(showEffectsAndTexts, 1500, cpos) end -- ================= EFFECT SCRIPT INITIALIZATION ================= -- -- Start the periodic effects and texts when the script is loaded. local cpos = {x = 266, y = 233, z = 15} -- Center position of the roulette. addEvent(function() showEffectsAndTexts(cpos) end, 5000) -- 5 seconds delay since server start. -- ================= MAIN OBJECT USE FUNCTION ================= -- -- Called when the roulette object is used. function onUse(cid, item, frompos, item2, topos) -- Handle the key change lever. if item.aid == 1360 then local current = getGlobalStorageValue(config.globalStoKeyCount) current = (current < 1 or current > 4) and 1 or (current % 4) + 1 setGlobalStorageValue(config.globalStoKeyCount, current) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string.format("Now using %d keys per spin.", current)) doSendMagicEffect(getThingPos(item.uid), CONST_ME_MAGIC_GREEN) return true end -- Handle the roulette levers. if not keyByAid[item.aid] then return false end local key = keyByAid[item.aid] local keyName = getItemNameById(key) local requiredKeys = getGlobalStorageValue(config.globalStoKeyCount) requiredKeys = (requiredKeys < 1 or requiredKeys > 4) and 1 or requiredKeys if getPlayerAccess(cid) < 5 and getPlayerItemCount(cid, key) < requiredKeys then doPlayerSendCancel(cid, string.format("You need %d %s to play!", requiredKeys, keyName)) doSendMagicEffect(topos, 14) return true end local rewardId = rewardByAid[item.aid] or 1 -- Get the reward level based on the lever. Default to 1 if not found. local pos = {x = 266, y = 233, z = 15} -- Center position of the roulette. if getGlobalStorageValue(config.globalStoCd) > os.time() and getPlayerAccess(cid) < 5 then local remaining = getGlobalStorageValue(config.globalStoCd) - os.time() doPlayerSendCancel(cid, "Wait " .. remaining .. " seconds to play again.") return true end setGlobalStorageValue(config.globalStoCd, os.time() + config.rouletteCD) -- Set the cooldown. doTransformItem(item.uid, item.itemid == 9825 and 9826 or 9825) -- Change the lever's appearance. -- Clear the tiles around the roulette and add magic effects. for i = 1, 36 do local rpos = { x = pos.x + rouletteSpinOffset[i][1], y = pos.y + rouletteSpinOffset[i][2], z = pos.z } doCleanTile(rpos) doSendMagicEffect(rpos, config.effectReward) end if key > 0 then doPlayerRemoveItem(cid, key, requiredKeys) end -- Remove the keys from the player's inventory. doSendMagicEffect(pos, config.effectLever) -- Play the lever activation effect. math.randomseed(os.time() + getPlayerGUID(cid)) -- Seed the random number generator. addEvent(shuffle, config.initialSpeed, cid, pos, rewardId, 1, {}, keyName, requiredKeys) -- Start the roulette animation. return true end
-
Muvuka reagiu a uma resposta a uma pergunta: [TFS-0.3.6-8.60] RESET SYSTEM COM 2 STORAGE SÓ PODE RESET SE TIVER VIP E INFINITE VIP
-
Muvuka reagiu a uma resposta a uma pergunta: [TFS 0.3.6 - 8.60] Converter Esse Códigos Pra TFS 0.3.6
-
local arrs = { { {0, 1, 0}, {1, 2, 1}, {0, 1, 0} }, { {0, 1, 1, 1, 0}, {1, 1, 0, 1, 1}, {1, 0, 2, 0, 1}, {1, 1, 0, 1, 1}, {0, 1, 1, 1, 0} }, { {0, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 2, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1}, {0, 1, 0, 0, 0, 1, 0}, {0, 0, 1, 1, 1, 0, 0} }, { {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, {0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0} } } local combat = {} for i = 1, 4 do combat[i] = Combat() combat[i]:setParameter(COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) combat[i]:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA) combat[i]:setArea(createCombatArea(arrs[i])) function onGetFormulaValues(player, level, magicLevel) local min = (level / 5) + (maglevel * 10) local max = (level / 5) + (maglevel * 14) return -min, -max end function onTargetTile(creature, position) creature:getPosition():sendDistanceEffect(position, CONST_ANI_HOLY) end combat[i]:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") combat[i]:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") end local function castSpell(creatureId, variant, counter) local creature = Creature(creatureId) if not creature then return end if counter == 0 then combat[1]:execute(creature, variant) elseif counter == 100 then combat[2]:execute(creature, variant) elseif counter == 250 then combat[3]:execute(creature, variant) elseif counter == 500 then combat[4]:execute(creature, variant) end if counter < 500 then addEvent(castSpell, 50, creatureId, variant, counter + 50) end end function onCastSpell(creature, variant) castSpell(creatureId, variant, 0) return true end local arr1 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr2 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr3 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr4 = { {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, {0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0} } local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA) combat:setArea(createCombatArea(arr1)) local combat2 = Combat() combat2:setParameter(COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) combat2:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE) combat2:setArea(createCombatArea(arr2)) local combat3 = Combat() combat3:setParameter(COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) combat3:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE) combat3:setArea(createCombatArea(arr3)) local combat4 = Combat() combat4:setParameter(COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) combat4:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) combat4:setArea(createCombatArea(arr4)) function onGetFormulaValues(player, level, magicLevel) local min = 1 local max = 1 return -min, -max end function onGetFormulaValues2(player, level, magicLevel) local min = 2 local max = 2 return -min, -max end function onGetFormulaValues3(player, level, magicLevel) local min = 3 local max = 3 return -min, -max end function onGetFormulaValues4(player, level, magicLevel) local min = 4 local max = 4 return -min, -max end function onTargetTile(creature, position) creature:getPosition():sendDistanceEffect(position, CONST_ANI_HOLY) end function onTargetTileTwo(creature, position) creature:getPosition():sendDistanceEffect(position, CONST_ANI_HOLY) end function onTargetTileThree(creature, position) creature:getPosition():sendDistanceEffect(position, CONST_ANI_HOLY) end combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") combat2:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues2") combat3:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues3") combat4:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues4") combat2:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") combat3:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTileTwo") combat4:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTileThree") local function castSpell1(creatureId, variant) local creature = Creature(creatureId) if not creature then return end combat:execute(creature, variant) end local function castSpell2(creatureId, variant) local creature = Creature(creatureId) if not creature then return end combat2:execute(creature, variant) end local function castSpell3(creatureId, variant) local creature = Creature(creatureId) if not creature then return end combat3:execute(creature, variant) end local function castSpell4(creatureId, variant) local creature = Creature(creatureId) if not creature then return end combat4:execute(creature, variant) end function onCastSpell(creature, variant) castSpell1(creature, variant) addEvent(castSpell2, 100, creature:getId(), variant) addEvent(castSpell3, 250, creature:getId(), variant) addEvent(castSpell4, 500, creature:getId(), variant) return true end
-
function onSay(cid, words, param) --[Configurações de Condição]__ config = { --[[verdadeiro / Falso]] needPa = false, -- Precisa de Premium Account? [true / false] needPz = false, -- Precisa estar em Protection Zone? [true / false] battle = false, -- Precisa estar sem Batlle para Resetar? [true / false] withe = false, -- Players PK Withe pode Resetar? [true / false] red = false, -- Players PK Red pode Resetar? [true / false] tp = false, -- Teleportar para o Templo após o reset? [true / false] look = true, -- Mostrar Resets no Look do Player? [true / false] addLimite = true, -- Abilitar Limite de Resets? [true / false] setClasse = false, -- Mudar Vocação do player quando resetar? [true / false] storage = 54676, -- Storage [valor] --[Configurações do Reset]__ resetStatus = { player = getPlayerGUID(cid), -- Não Mude. lvl = 717217, -- Level Necessário para Resetar. [valor] lvlreset = 1, -- Level que retornará após o Reset. [valor] limite = 100, -- Máximo de resets que um player pode chegar. [valor] newClasse = 0, -- Id da Nova Vocação após o Reset. [valor] tempo = 0 }, } --[Funções]__ function Reseting(cid) resets = getResets(cid) setPlayerStorageValue(cid,config.storage,resets+1) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerSetVocation(cid, config.resetStatus.newClasse) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `description` = ' [Reset "..resets.."]' WHERE `players`.`id` = "..config.resetStatus.player) db.executeQuery("UPDATE `players` SET `level` = "..config.resetStatus.lvlreset..", `experience` = 0 WHERE `id` = "..config.resetStatus.player) return TRUE end function noAll(cid) resets = getResets(cid) setPlayerStorageValue(cid,config.storage,resets+1) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `level` = "..config.resetStatus.lvlreset..", `experience` = 0 WHERE `id` = "..config.resetStatus.player) db.executeQuery("UPDATE `players` SET `description` = '' WHERE `players`.`id` = "..config.resetStatus.player) return TRUE end function noTeleporting(cid) resets = getResets(cid) setPlayerStorageValue(cid,config.storage,resets+1) doPlayerSetVocation(cid, config.resetStatus.newClasse) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `level` = "..config.resetStatus.lvlreset..", `experience` = 0 WHERE `id` = "..config.resetStatus.player) db.executeQuery("UPDATE `players` SET `description` = ' [Reset "..resets.."]' WHERE `players`.`id` = "..config.resetStatus.player) return TRUE end function noLook(cid) resets = getResets(cid) setPlayerStorageValue(cid,config.storage,resets+1) doPlayerSetVocation(cid, config.resetStatus.newClasse) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `level` = "..config.resetStatus.lvlreset..", `experience` = 0 WHERE `id` = "..config.resetStatus.player) db.executeQuery("UPDATE `players` SET `description` = '' WHERE `players`.`id` = "..config.resetStatus.player) return TRUE end function noClasse(cid) resets = getResets(cid) setPlayerStorageValue(cid,config.storage,resets+1) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `description` = ' [Reset "..resets.."]' WHERE `players`.`id` = "..config.resetStatus.player) db.executeQuery("UPDATE `players` SET `level` = "..config.resetStatus.lvlreset..", `experience` = 0 WHERE `id` = "..config.resetStatus.player) return TRUE end function setClasse(cid) resets = getResets(cid) setPlayerStorageValue(cid,config.storage,resets+1) doPlayerSetVocation(cid, config.resetStatus.newClasse) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `description` = '' WHERE `players`.`id` = "..config.resetStatus.player) db.executeQuery("UPDATE `players` SET `level` = "..config.resetStatus.lvlreset..", `experience` = 0 WHERE `id` = "..config.resetStatus.player) return TRUE end function look(cid) resets = getResets(cid) setPlayerStorageValue(cid,config.storage,resets+1) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `description` = ' [Reset "..resets.."]' WHERE `players`.`id` = "..config.resetStatus.player) db.executeQuery("UPDATE `players` SET `level` = "..config.resetStatus.lvlreset..", `experience` = 0 WHERE `id` = "..config.resetStatus.player) return TRUE end function teleporting(cid) resets = getResets(cid) setPlayerStorageValue(cid,config.storage,resets+1) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `description` = '' WHERE `players`.`id` = "..config.resetStatus.player) db.executeQuery("UPDATE `players` SET `level` = "..config.resetStatus.lvlreset..", `experience` = 0 WHERE `id` = "..config.resetStatus.player) return TRUE end function getResets(cid) local resets = getPlayerStorageValue(cid, config.storage) -- If the storage value is less than 0 or invalid, set resets to 0 if type(resets) ~= "number" or resets < 0 then resets = 0 end return resets end local resets = getResets(cid) local needLvl ="Você precisa de "..config.resetStatus.lvl-getPlayerLevel(cid).." level's para resetar." local msg ="~~[Reset: "..getResets(cid).."]~~ 'Sucesso ao Resetar! Você será deslogado em "..config.resetStatus.tempo.." Segundos." --[Condiçoes]__ local storageKey = 13545 local storageKey = 13587 if getCreatureStorage(cid, storageKey) < os.time() then doPlayerPopupFYI(cid, "Somente Player [VIP] Account.") return true elseif(config.needPz == true) and (getTilePzInfo(getCreaturePosition(cid)) == FALSE) then doPlayerSendTextMessage(cid,22,"Voce Precisa estar em Protection Zone Para Resetar.") return TRUE elseif(config.addLimite == true) and (getResets(cid) == config.resetStatus.limite) then doPlayerSendTextMessage(cid, 22, "Voce ja atingiu o Limite de Resets.") return TRUE elseif(config.withe == false) and (getCreatureSkullType(cid) == 3) then doPlayerSendTextMessage(cid,22,"Voce ta PK White, por isso não pode resetar.") return TRUE elseif(config.red == false) and (getCreatureSkullType(cid) == 4) then doPlayerSendTextMessage(cid,22,"Voce ta PK Red, por isso não pode resetar.") return TRUE elseif(config.needPa == true) and not isPremium(cid) then doPlayerSendTextMessage(cid,22,"Voce Precisa ser Premium Account para Resetar.") return TRUE elseif(config.battle == true) and (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then doPlayerSendTextMessage(cid,22,"Voce Precisa estar sem Battle para Resetar.") return TRUE elseif getPlayerLevel(cid) >= config.resetStatus.lvl and (config.tp == true) and (config.look == true) and (config.setClasse == true) then addEvent(Reseting, config.resetStatus.tempo* 1000, cid) elseif getPlayerLevel(cid) >= config.resetStatus.lvl and (config.tp == false) and (config.look == false) and (config.setClasse == false) then addEvent(noAll, config.resetStatus.tempo* 1000, cid) elseif getPlayerLevel(cid) >= config.resetStatus.lvl and (config.tp == false) and (config.look == true) and (config.setClasse == true) then addEvent(noTeleporting, config.resetStatus.tempo* 1000, cid) elseif getPlayerLevel(cid) >= config.resetStatus.lvl and (config.tp == true) and (config.look == false) and (config.setClasse == true) then addEvent(noLook, config.resetStatus.tempo* 1000, cid) elseif getPlayerLevel(cid) >= config.resetStatus.lvl and (config.tp == true) and (config.look == true) and (config.setClasse == false) then addEvent(noClasse, config.resetStatus.tempo* 1000, cid) elseif getPlayerLevel(cid) >= config.resetStatus.lvl and (config.tp == false) and (config.look == false) and (config.setClasse == true) then addEvent(setClasse, config.resetStatus.tempo* 1000, cid) elseif getPlayerLevel(cid) >= config.resetStatus.lvl and (config.tp == false) and (config.look == true) and (config.setClasse == false) then addEvent(look, config.resetStatus.tempo* 1000, cid) elseif getPlayerLevel(cid) >= config.resetStatus.lvl and (config.tp == true) and (config.look == false) and (config.setClasse == false) then addEvent(teleporting, config.resetStatus.tempo* 1000, cid) elseif doPlayerSendCancel(cid, needLvl) then doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return TRUE end return TRUE end --[By: Linnux]__ COMO COLOCO CONDIÇÃO DE VIP INFINITE NO CODIGO ACIMA function onSay(cid, words, param) if words == "!buyacc" then -- Check if the player already has permanent VIP access if getPlayerStorageValue(cid, 13587) == 2^31 - 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You already have permanent VIP access !vipacc.") return true end -- Check if the player already has temporary VIP if getPlayerStorageValue(cid, 13587) - os.time() > 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You already have VIP. Please wait for your time to expire.") return true end local itemid = 6527 local count = 100 if doPlayerRemoveItem(cid, itemid, count) then -- Set permanent VIP access local permanentAccess = 2^31 - 1 setPlayerStorageValue(cid, 13587, permanentAccess) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have received permanent VIP access on your character.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need [" .. count .. " " .. getItemNameById(itemid) .. "] to get VIP.") end elseif words == "!vipacc" then local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(cid, 13587) - timenow) / (24 * 60 * 60)) if quantity > 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have permanent VIP access.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You do not have permanent VIP access.") end elseif words == "/checkvip" then if getPlayerAccess(cid) == 5 then if not param then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid parameter specified.") else local player = getPlayerByName(param) if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " not found.") else local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(player, 13587) - timenow) / (24 * 60 * 60)) if quantity > 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player " .. param .. " has " .. quantity .. " days of VIP.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player " .. param .. " does not have any VIP days.") end end end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You do not have access to this command.") end elseif words == "/addvip" then if getPlayerAccess(cid) == 5 then local t = string.explode(param, ",") if not t[2] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid parameter specified.") else local playerName = t[1] local player = getPlayerByName(playerName) local days = tonumber(t[2]) if not player then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player with this name doesn't exist or is offline.") return true end local daysvalue = days * 3600 * 24 local storageplayer = getPlayerStorageValue(player, 13587) local timenow = os.time() local time = storageplayer <= 0 and (timenow + daysvalue) or (storageplayer + daysvalue) setPlayerStorageValue(player, 13587, time) local quantity = math.floor((getPlayerStorageValue(player, 13587) - timenow) / (3600 * 24)) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "You have " .. quantity .. " days of VIP remaining.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You do not have access to this command.") end elseif words == "/delvip" then if getPlayerAccess(cid) == 5 then local dec = MESSAGE_INFO_DESCR if param == "" then return true, doPlayerSendTextMessage(cid, 18, "Command parameter required.") end local t = string.explode(param, ",") local C = {} C.pos = getPlayerPosition(cid) C.uid = getCreatureByName(t[1]) C.time = ((tonumber(t[2]) == nil) and 1 or tonumber(t[2])) * 3600 * 24 -- VIP time per day. C.days = (tonumber(t[2]) == nil) and 1 or tonumber(t[2]) -- VIP days. if getPlayerStorageValue(C.uid, 13587) < C.time then doPlayerSendTextMessage(cid, dec, 'The player ' .. t[1] .. ' does not have ' .. C.days .. ' days of VIP.') else doPlayerSendTextMessage(cid, dec, 'You have removed ' .. C.days .. ' days of VIP from player ' .. t[1] .. '.') setPlayerStorageValue(C.uid, 13587, getPlayerStorageValue(C.uid, 13587) - C.time) end doSendMagicEffect(C.pos, math.random(28, 30)) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You do not have access to this command.") end end return true end function onSay(cid, words, param) if words == "!buyvip" then -- Check if the player already has permanent VIP if getPlayerStorageValue(cid, 13587) == 2^31 - 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You already have permanent VIP and cannot buy temporary VIP !vipacc.") return true end -- Check if the player has already used the command if getPlayerStorageValue(cid, 13587) == 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have already used this command and cannot use it again.") return true end local itemid = 2159 local count = 50000 if doPlayerRemoveItem(cid, itemid, count) then local days = 372 local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(cid, 13545) local timenow = os.time() local time if storageplayer - timenow <= 0 then time = timenow + daysvalue else time = storageplayer + daysvalue end -- Update VIP status without modifying the name doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Added " .. days .. " days of VIP to your character.") setPlayerStorageValue(cid, 13545, time) local quantity = math.floor((getPlayerStorageValue(cid, 13545) - timenow) / (24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have " .. (quantity < 0 and 0 or quantity) .. " days of VIP remaining.") -- Mark that the player used the command setPlayerStorageValue(cid, 13587, 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need [" .. count .. " " .. getItemNameById(itemid) .. "] to add VIP.") end elseif words == "!vipdays" then local timenow = os.time() local vipEndTime = getPlayerStorageValue(cid, 13545) local vipDays = 0 if vipEndTime > 0 then -- Calculate the remaining VIP days vipDays = math.ceil((vipEndTime - timenow) / (24 * 60 * 60)) end if vipDays > 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have " .. vipDays .. " days of VIP on your character.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You do not have VIP days.") end elseif words == "/checkvip" then if getPlayerAccess(cid) == 5 then if not param or param == "" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid parameter.") else local player = getPlayerByName(param) if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " not found.") else local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(player, 13545) - timenow) / (24 * 60 * 60)) if quantity > 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player " .. param .. " has " .. quantity .. " days of VIP.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player " .. param .. " does not have VIP days.") end end end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You do not have access to this command.") end elseif words == "/addvip" then if getPlayerAccess(cid) == 5 then local t = string.explode(param, ",") if not t[2] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid parameter.") else local playerName = t[1] local player = getPlayerByName(playerName) if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. playerName .. " not found.") else local days = tonumber(t[2]) local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(player, 13545) local timenow = os.time() local time = storageplayer <= 0 and (timenow + daysvalue) or (storageplayer + daysvalue) -- Update VIP status without modifying the name doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Added " .. days .. " days of VIP to your character.") setPlayerStorageValue(player, 13545, time) local quantity = math.floor((getPlayerStorageValue(player, 13545) - timenow) / (24 * 60 * 60)) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "You have " .. quantity .. " days of VIP remaining.") end end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You do not have access to this command.") end elseif words == "/delvip" then if getPlayerAccess(cid) == 5 then local dec = MESSAGE_INFO_DESCR if param == "" then return TRUE, doPlayerSendTextMessage(cid, 18, "Command parameter is required.") end local t = string.explode(param, ",") local player = getPlayerByName(t[1]) if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[1] .. " not found.") else local days = tonumber(t[2]) local timeToRemove = days * 24 * 60 * 60 local currentTime = getPlayerStorageValue(player, 13545) if currentTime < timeToRemove then doPlayerSendTextMessage(cid, dec, "Player " .. t[1] .. " does not have " .. days .. " days of VIP.") else doPlayerSendTextMessage(cid, dec, "Removed " .. days .. " days of VIP from player " .. t[1] .. ".") setPlayerStorageValue(player, 13545, currentTime - timeToRemove) end end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You do not have access to this command.") end end return true end
-
ok me ajuda exporta minimap no tópico la arquivo anexado dos mapa no formato .otbm
-
eu quero quando mata player ganha ponto se player membro ou dono de uma guild 1 ponto ao matar player seja pk red black ou sem justificativa ou com justificativa
-
Tem Como Fazer Esse Sistema Para TFS 0.3.6 8.60 ???
um tópico no fórum postou Muvuka Lixeira Pública
https://forums.#####/index.php?/forums/topic/169735-revscript-sistema-guild-level/
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.