-
Total de itens
164 -
Registro em
-
Última visita
-
Dias Ganhos
20
Tudo que El Rusher postou
-
local config = { monster = {"Boss"}, -- nome dos monstros, separado por vírgulas. item = { [1] = {id = 9693, chance = 10}, -- ID do item1 e chance em porcentagem (exemplo: 10%) [2] = {id = 9971, chance = 5}, -- ID do item2 e chance em porcentagem (exemplo: 5%) [3] = {id = 7440, chance = 20}, -- ID do item3 e chance em porcentagem (exemplo: 20%) [4] = {id = 8300, chance = 15}, -- ID do item4 e chance em porcentagem (exemplo: 15%) [5] = {id = 12289, chance = 8}, -- ID do item5 e chance em porcentagem (exemplo: 8%) }, effect = 27, -- efeito ao matar o monstro. } function onKill(cid, target) if isInArray(config.monster, getCreatureName(target)) then local totalChance = 0 for i = 1, #config.item do totalChance = totalChance + config.item[i].chance end local randomChance = math.random(1, totalChance) local accumulatedChance = 0 local chosenItem = nil for i = 1, #config.item do accumulatedChance = accumulatedChance + config.item[i].chance if randomChance <= accumulatedChance then chosenItem = config.item[i] break end end if chosenItem then doPlayerAddItem(cid, chosenItem.id, 1) end doBroadcastMessage("O Boss morreu", MESSAGE_STATUS_WARNING) doSendMagicEffect(getThingPos(cid), config.effect) end return true end
-
function onUse(cid, item, fromPosition, itemEx, toPosition) -- Lista de vocações permitidas a usar o script (5 = Paladin, 6 = Knight) local allowedVocations = {5, 6} -- Verifica se o jogador pertence a uma das vocações permitidas if not isInArray(allowedVocations, getPlayerVocation(cid)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Apenas Paladinos e Cavaleiros podem usar este item.") return false end -- Restante do código do script aqui... end
-
-- Função para adicionar o loot em uma das bags disponíveis function addToAvailableBags(loot, player) local playerSlotItem = getPlayerSlotItem(player, 3) -- Obtém a mochila do jogador local bags = {} -- Lista para armazenar as bags disponíveis -- Adiciona a mochila do jogador à lista de bags table.insert(bags, playerSlotItem.uid) -- Verifica se a mochila do jogador está dentro de outra bag local container = playerSlotItem.uid while container ~= 0 do container = getContainerParent(container) if container ~= 0 then table.insert(bags, container) -- Adiciona a bag à lista de bags end end -- Tenta adicionar o loot em cada bag disponível for _, bag in ipairs(bags) do local freeSlots = getContainerSlotsFree(bag) if freeSlots >= 1 and freeSlots ~= 333 then doCorpseAddLoot(getCreatureName(loot), bag, player, loot, loot) -- Adiciona o loot na bag return true -- Retorna true para indicar que o loot foi adicionado com sucesso end end return false -- Retorna false se não foi possível adicionar o loot em nenhuma bag end -- Verifica se o jogador é premium e está usando o auto loot if isPremium(getCreatureMaster(cid)) and isCollectAll(getCreatureMaster(cid)) then -- Tenta adicionar o loot em uma das bags disponíveis if not addToAvailableBags(target, getCreatureMaster(cid)) then doCorpseAddLoot(getCreatureName(target), corpse, getCreatureMaster(cid), target, corpse) -- Adiciona o loot na bag original se não houver outras disponíveis end else doCorpseAddLoot(getCreatureName(target), corpse, getCreatureMaster(cid), target, corpse) -- Adiciona o loot na bag original se o jogador não for premium ou não estiver usando o auto loot end
-
aparentemente não há nenhum erro no script, de uma verificada se os nomes de monstros e storages estão adequados pro seu servidor, e se o evento onKill ta sendo acionado de acordo, por exemplo: function onKill(cid, target) print("O evento onKill foi acionado.") local m = { ["demon"] = 12001, } if isMonster(target) then local n = getCreatureName(target) local name_monster = m[string.lower(n)] if name_monster then local contagem = getPlayerStorageValue(cid, name_monster) if contagem == -1 then contagem = 1 end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ja matou " .. contagem .. " " .. n .. ".") setPlayerStorageValue(cid, name_monster, contagem + 1) end end return true end
-
local monsterRanks = { ['ASTRA'] = {0}, } function onSay(cid, words, param) local monsterName = "ASTRA" if monsterRanks[monsterName] ~= nil then local str = getHighscoreString(monsterRanks[monsterName][1]) doShowTextDialog(cid, 6500, str) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Monstro não encontrado no ranking.") end return TRUE end
-
local function getPlayerKills(cid) local kills = getPlayerStorageValue(cid, 123456) -- Substitua 123456 pelo storage correto return kills ~= -1 and kills or 0 end local function setPlayerKills(cid, kills) setPlayerStorageValue(cid, 123456, kills) -- Substitua 123456 pelo storage correto end function onUse(cid, item, fromPosition, itemEx, toPosition) local monsterName = "bazir" -- Nome do monstro local kills = getPlayerKills(cid) local txt = "Você matou o monstro '" .. monsterName .. "' " .. kills .. " vezes." doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, txt) return true end
-
function onUse(cid, item, frompos, item2, topos) if item.uid == 1624 then if getPlayerStorageValue(cid, 1624) == -1 then if getPlayerLevel(cid) >= 0 then -- Verifica se o jogador tem espaço suficiente no inventário para as mochilas local enoughSpace = true for i = 1, 42 do if not doPlayerAddItem(cid, 10518, 1) then enoughSpace = false break end end if enoughSpace then -- Adiciona 1000 moedas (ID 2159) dentro de uma mochila (ID 10518) e repete 100 vezes for i = 1, 100 do local backpack = doCreateItemEx(10518, 1) if backpack ~= 0 then for j = 1, 42 do doAddContainerItem(backpack, 2159, 1000) end doPlayerAddItemEx(cid, backpack, false) else enoughSpace = false break end end end if enoughSpace then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Parabéns! Você ganhou um prêmio.") else -- Não há espaço suficiente, então cai no chão com dinheiro dentro local townID = 1 -- Altere isso para o ID da cidade desejada (1 para DexSoft) local tile = getTownTemplePosition(townID) local container = doCreateItemEx(10518, 1) for i = 1, 42 do doAddContainerItem(container, 2159, 1000) end doItemSetAttribute(container, "depot", true) doTeleportThing(container, tile, false) doSendMagicEffect(tile, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tinha espaço suficiente, a mochila foi enviada para o depot.") end setPlayerStorageValue(cid, 1624, 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa ser level 0 para usar.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você já pegou o bônus.") end end return true end Este script verifica se o jogador tem espaço suficiente no inventário para as mochilas. Se tiver, ele adiciona as mochilas diretamente ao inventário do jogador. Caso contrário, ele cria as mochilas com dinheiro dentro e as envia para o depot da cidade especificada.
-
perdao local itemID = 1234 -- ID do item no mapa que irá acionar a cura function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid == itemID then doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid)) -- Cura o jogador doCureStatus(cid, "all", true) -- Cura todos os status negativos do jogador doSendMagicEffect(getThingPos(cid), EFFECT_HEAL) -- Efeito de cura local backpack = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) if backpack.itemid == 0 then return true end local bpItems = getContainerItems(backpack.uid) for _, item in ipairs(bpItems) do if isPokeball(item.itemid) then local creatureID = getItemAttribute(item.uid, "pokeid") if creatureID then doCreatureAddHealth(creatureID, getCreatureMaxHealth(creatureID) - getCreatureHealth(creatureID)) -- Cura o Pokémon doCureStatus(creatureID, "all", true) -- Cura todos os status negativos do Pokémon doSendMagicEffect(getThingPos(creatureID), EFFECT_HEAL) -- Efeito de cura end end end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Todos os seus Pokémon foram curados.") -- Mensagem de sucesso end return true end function isPokeball(itemid) -- Adicione aqui os itemids das pokébolas que deseja considerar local validPokeballIDs = {1, 2, 3, 4} -- Por exemplo, considere as pokébolas com IDs 1, 2, 3, 4 for _, id in ipairs(validPokeballIDs) do if itemid == id then return true end end return false end
-
local itemID = 1234 -- ID do item no mapa que irá acionar a cura function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid == itemID then doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid)) -- Cura o jogador doCureStatus(cid, "all", true) -- Cura todos os status negativos do jogador doSendMagicEffect(getThingPos(cid), EFFECT_HEAL) -- Efeito de cura local backpack = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) if backpack.itemid == 0 then return true end local iter = makeItemIter(backpack.uid) local ball = iter.next() while ball.itemid ~= 0 do if isPokeball(ball.itemid) then local creatureID = getItemAttribute(ball.uid, "pokeid") if creatureID then doCreatureAddHealth(creatureID, getCreatureMaxHealth(creatureID) - getCreatureHealth(creatureID)) -- Cura o Pokémon doCureStatus(creatureID, "all", true) -- Cura todos os status negativos do Pokémon doSendMagicEffect(getThingPos(creatureID), EFFECT_HEAL) -- Efeito de cura end end ball = iter.next() end iter.free() doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Todos os seus Pokémon foram curados.") -- Mensagem de sucesso end return true end function isPokeball(itemid) -- Adicione aqui os itemids das pokébolas que deseja considerar local validPokeballIDs = {1, 2, 3, 4} -- Por exemplo, considere as pokébolas com IDs 1, 2, 3, 4 for _, id in ipairs(validPokeballIDs) do if itemid == id then return true end end return false end
-
local monsterRanks = { ['ASTRA'] = {score = 0}, -- Inicialmente, o score é zero } function onUse(cid, item, fromPosition, itemEx, toPosition) local monsterName = "ASTRA" if monsterRanks[monsterName] ~= nil then local str = "Rank de Monstros:\n\n" str = str .. monsterName .. ": " .. monsterRanks[monsterName].score .. " derrotados" doShowTextDialog(cid, 6500, str) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Monstro não encontrado no ranking.") end return true end
-
local config = { monsters = {"The Mega Boss Rox"}, rewards = { {itemID = 2160, chanceToGainInPercent = 3, quantity = 100}, {itemID = 2148, chanceToGainInPercent = 3, quantity = 100}, }, effect = 27, backpackID = 1988, -- ID da Backpack } -- Função para selecionar um item com base na porcentagem function selectRandomItem() local totalChance = 0 for _, reward in pairs(config.rewards) do totalChance = totalChance + reward.chanceToGainInPercent end local randomValue = math.random(1, totalChance) local cumulativeChance = 0 for _, reward in pairs(config.rewards) do cumulativeChance = cumulativeChance + reward.chanceToGainInPercent if randomValue <= cumulativeChance then return reward end end end function onKill(cid, target, lastHit) if isPlayer(cid) and isMonster(target) then if getCreatureMaster(target) ~= nil then return true end local monsterNameKilled = getCreatureName(target) if isInArray(config.monsters, monsterNameKilled) then local selectedItem = selectRandomItem() local backpack = doPlayerAddItem(cid, config.backpackID, 1) if backpack ~= RETURNVALUE_NOERROR then local item = doCreateItemEx(selectedItem.itemID, selectedItem.quantity) doAddContainerItem(backpack, item) doSendMagicEffect(getCreaturePosition(cid), config.effect) doBroadcastMessage("Mataram o boss.", 19) else doPlayerAddItem(cid, selectedItem.itemID, selectedItem.quantity) doSendMagicEffect(getCreaturePosition(cid), config.effect) doBroadcastMessage("Mataram o boss.", 19) end end end return true end function onLogin(cid) registerCreatureEvent(cid, "killTheBoss") return true end
-
local config = { itemsToTrade = { -- Lista de itens a serem trocados {itemId = 1234, count = 3}, -- Exemplo: {itemId = ID_DO_ITEM, count = QUANTIDADE} {itemId = 5678, count = 2}, -- Adicione mais itens conforme necessário }, newItemId = 9876, -- ID do novo item a ser dado ao jogador leverId = 12345, -- ID da alavanca } function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid == config.leverId then local playerItems = {} -- Tabela para armazenar os itens do jogador -- Verifica se o jogador possui todos os itens necessários for _, tradeItem in ipairs(config.itemsToTrade) do local playerItemCount = getPlayerItemCount(cid, tradeItem.itemId) if playerItemCount < tradeItem.count then doPlayerSendCancel(cid, "Você não tem todos os itens necessários para a troca.") return true else playerItems[#playerItems + 1] = {itemId = tradeItem.itemId, count = tradeItem.count} end end -- Remove os itens do jogador for _, playerItem in ipairs(playerItems) do doPlayerRemoveItem(cid, playerItem.itemId, playerItem.count) end -- Dá o novo item ao jogador doPlayerAddItem(cid, config.newItemId, 1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você trocou os itens com sucesso!") -- Remove a alavanca após o uso doRemoveItem(item.uid) return true end return false end
-
local config = { SKILL_ID = 0, -- id do skill... multiplier = 1.5, percentual = 0.5, } function onUse(cid, item, fromPosition, itemEx, toPosition) if isPlayer(itemEx.uid) then local chance = (getPlayerSkillLevel(itemEx.uid, config.SKILL_ID) * config.percentual) * 10 if math.random(1, 1400) <= chance then doCreatureSay(itemEx.uid, "Você ativou o efeito crítico!", TALKTYPE_ORANGE_1) doSendMagicEffect(getPlayerPosition(itemEx.uid), CONST_ME_MAGIC_RED) else doCreatureSay(itemEx.uid, "Você não ativou o efeito crítico.", TALKTYPE_ORANGE_1) end end return true end
-
Abra o arquivo constants.lua e adicione a função getExpForLevel: -- constants.lua function getExpForLevel(level) level = level - 1 return ((50 * level * level * level) - (150 * level * level) + (400 * level)) / 3 end Abra o arquivo player.lua localizado em data/events/scripts/ e adicione o código para verificar o bloqueio de nível dentro do evento onGainExperience: -- player.lua local level_tiers = { {level = 20, storage = 50000, value = 1}, -- level, quest_storage, value_required {level = 40, storage = 50001, value = 1}, {level = 60, storage = 50002, value = 1}, } function Player:onGainExperience(source, exp, rawExp) local experience = exp for _, array in ipairs(level_tiers) do if self:getStorageValue(array.storage) < array.value then local current_exp, level_exp = self:getExperience(), getExpForLevel(array.level) if (current_exp + experience) > level_exp then experience = math.max(0, level_exp - current_exp) break end end end return experience end Isso adicionará a verificação do bloqueio de nível ao evento onGainExperience, garantindo que os jogadores não possam ganhar experiência além do limite permitido para o seu nível, a menos que cumpram os requisitos de armazenamento definidos nas level_tiers.
-
Tfs fecha do nada e da error sozinho com tempo indeterminado
pergunta respondeu ao Jhony Araujo de El Rusher em Scripts
precisa ser mais especifico meu nobre, tem 1000 razoes ou mais que ocasionam isso, por exemplo Falha de Memória ou Vazamento de Memória, Sobrecarga do Servidor, Erros de Script, Problemas de Configuração, Atualizações e Patches, Logs de Erro, etc etc -
function onUse(cid, item, fromPosition, itemEx, toPosition) local manaToRestore = 150 + getPlayerMagLevel(cid) * 2 if doPlayerAddMana(cid, manaToRestore) then doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_BLUE) doRemoveItem(item.uid, 1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have been healed for " .. manaToRestore .. " mana points.") else doPlayerSendCancel(cid, "You cannot use this item right now.") end return true end Certifique-se de substituir getItemMagLevel(cid) pela função real que você está usando para obter o nível de magia do jogador no seu servidor. Além disso, ajuste os valores conforme necessário para equilibrar o jogo de acordo com suas preferências.
-
<?xml version="1.0" encoding="UTF-8"?> <mod name="Vipsystem" version="1.0" author="Aco" contact="http://otland.net/members/acordion" enabled="yes"> <!--- Information Vip Item = 10503 set action id 11223 to the tile you want to be vip tile set action id 2112 to the door you want to be vip door MYSQL TABLE ALTER TABLE `accounts` ADD `vipdays` int(11) NOT NULL DEFAULT 0; --> <config name="VipFuctions"><![CDATA[ --- Vip functions by Kekox function getPlayerVipDays(accountId) local Info = db.getResult("SELECT `vipdays` FROM `accounts` WHERE `id` = " .. accountId .. " LIMIT 1") if Info:getID() ~= LUA_ERROR then local days= Info:getDataInt("vipdays") Info:free() return days end return LUA_ERROR end function doAddVipDays(accountId, days) db.executeQuery("UPDATE `accounts` SET `vipdays` = `vipdays` + " .. days .. " WHERE `id` = " .. accountId .. ";") end function doRemoveVipDays(accountId, days) db.executeQuery("UPDATE `accounts` SET `vipdays` = `vipdays` - " .. days .. " WHERE `id` = " .. accountId .. ";") end ]]></config> <globalevent name="VipDaysRemover" time="00:01" event="script"><![CDATA[ --- Script by Kekox. function onTime() db.executeQuery("UPDATE accounts SET vipdays = vipdays - 1 WHERE vipdays > 0;") return true end ]]></globalevent> <globalevent name="vipEffect" interval="2" event="script"><![CDATA[ domodlib('VipFuctions') --- Script By Kekox. function onThink(interval, lastExecution) for _, name in ipairs(getOnlinePlayers()) do local cid = getPlayerByName(name) local accountId = getPlayerAccountId(cid) if getPlayerVipDays(accountId) >= 1 then doSendMagicEffect(getPlayerPosition(cid), 27) doSendAnimatedText(getPlayerPosition(cid), "VIP!", TEXTCOLOR_RED) end end return true end ]]></globalevent> <event type="login" name="Vip" event="script"><![CDATA[ --- Script by Kekox. function onLogin(cid) registerCreatureEvent(cid, "VipCheck") return true end ]]></event> <event type="login" name="VipCheck" event="script"><![CDATA[ domodlib('VipFuctions') --- Script by Kekox. function onLogin(cid) local accountId = getPlayerAccountId(cid) if getPlayerVipDays(accountId) >= 1 then doPlayerSendTextMessage(cid, 19, "You have ".. getPlayerVipDays(accountId) .." vip days left.") end return true end ]]></event> <movevent type="StepIn" actionid="11223" event="script"><![CDATA[ domodlib('VipFuctions') --- Script by Kekox. function onStepIn(cid, item, position, fromPosition) local accountId = getPlayerAccountId(cid) if getPlayerVipDays(accountId) == 0 then doTeleportThing(cid, fromPosition, FALSE) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only VIP Account can go there.") end return true end ]]></movevent> <action actionid="13500" event="script"><![CDATA[ domodlib('VipFuctions') --- Script by Kekox. function onUse(cid, item, frompos, item2, topos) local accountId = getPlayerAccountId(cid) if getPlayerVipDays(accountId) >= 1 then pos = getPlayerPosition(cid) if pos.x == topos.x then if pos.y < topos.y then pos.y = topos.y + 1 else pos.y = topos.y - 1 end elseif pos.y == topos.y then if pos.x < topos.x then pos.x = topos.x + 1 else pos.x = topos.x - 1 end else doPlayerSendTextMessage(cid,22,"Stand in front of the door.") return true end doTeleportThing(cid,pos) doSendMagicEffect(topos,12) else doPlayerSendTextMessage(cid,22,'Only VIP Account can go there.') end return true end ]]></action> <action itemid="11111" event="script"><![CDATA[ domodlib('VipFuctions') --- Script by Kekox. function onUse(cid, item, fromPosition, itemEx, toPosition) local accountId = getPlayerAccountId(cid) if getPlayerVipDays(accountId) > 365 then doPlayerSendCancel(cid, "You can only have 1 year of vip account or less.") else doAddVipDays(cid, 30) doCreatureSay(cid, "Vip", TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "We have added 30 vip days to your account.") doRemoveItem(item.uid) end return true end ]]></action> </mod>
-
tem que dar uma procurada nas funções do seu servidor se tem algo que faça isso, se encontrar pode usar meu script como base: function moveItemsToPersonalDepot(player) local house = player:getTile():getHouse() if not house then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Você não está em uma casa.") return end local personalDepot = player:getDepot() if not personalDepot then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Você não possui um depot pessoal.") return end local houseItems = house:getItems() for _, item in ipairs(houseItems) do if item:isMoveable() then local moved = personalDepot:addItem(item) if moved then item:remove() end end end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Todos os itens da sua casa foram transferidos para o seu depot pessoal.") end function onSay(player, words, param) if param == "!leavehouse" then moveItemsToPersonalDepot(player) end return false end
-
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if (not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) local itemid, count = 9020, 300 -- Edite o id e a quantidade do item aqui if isInArray({"recover", "recuperar", "exp", "experience"}, msg) then npcHandler:say("Você deseja recuperar a experiência perdida após a sua morte por " .. count .. " " .. getItemNameById(itemid) .. "? {yes}", cid) talkState[talkUser] = 1 elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if getPlayerStorageValue(cid, death_table.before_exp) ~= -1 and getPlayerExperience(cid) < getPlayerStorageValue(cid, death_table.before_exp) then if doPlayerRemoveItem(cid, itemid, count) == TRUE then local count = (getPlayerStorageValue(cid, death_table.before_exp) - getPlayerStorageValue(cid, death_table.after_exp)) doPlayerAddExp(cid, count) npcHandler:say("Obrigado! Aqui está sua experiência.", cid) else npcHandler:say("Desculpe, você não tem " .. getItemNameById(itemid) .. " suficientes!", cid) end else npcHandler:say("Desculpe, você não morreu ou já recuperou sua exp perdida!", cid) end talkState[talkUser] = 0 elseif msg == "no" then npcHandler:say("Then not", cid) talkState[talkUser] = 0 end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
function onSay(cid, words, param, channel) local maxSpellsToShow = 5000 -- Define o número máximo de feitiços a serem mostrados local t = {} -- Loop através dos feitiços do jogador for i = 0, getPlayerInstantSpellCount(cid) - 1 do if #t >= maxSpellsToShow then break -- Sai do loop se o limite máximo de feitiços for atingido end local spell = getPlayerInstantSpellInfo(cid, i) -- Verifica se o feitiço não está no nível mínimo if(spell.mlevel ~= 1) then if(spell.manapercent > 0) then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end -- Ordena os feitiços pelo nível de magia table.sort(t, function(a, b) return a.mlevel < b.mlevel end) -- Constrói a mensagem a ser exibida local text = "" local prevLevel = -1 for i, spell in ipairs(t) do local line = "" if(prevLevel ~= spell.mlevel) then if(i ~= 1) then line = "\n" end line = line .. "Spells for Magic Level " .. spell.mlevel .. "\n" prevLevel = spell.mlevel end text = text .. line .. " " .. spell.words .. " : " .. spell.mana .. "\n" end -- Verifica o comprimento do texto if #text > 5000 then local chunks = {} local current_chunk = "" for line in text:gmatch("[^\r\n]+") do if #current_chunk + #line > 5000 then table.insert(chunks, current_chunk) current_chunk = "" end current_chunk = current_chunk .. line .. "\n" end table.insert(chunks, current_chunk) -- Mostra cada fragmento de texto ao jogador for _, chunk in ipairs(chunks) do doShowTextDialog(cid, 2175, chunk) end else -- Mostra a mensagem ao jogador doShowTextDialog(cid, 2175, text) end return true end
-
function onStepIn(creature, item, position, fromPosition) local skillToTrain = SKILL_FISHING -- Substitua SKILL_FISHING pela habilidade que você deseja treinar local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar local gainChance = 50 -- Chance de ganhar skill, em porcentagem local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar (por exemplo, uma vara de pescar) if creature:isPlayer() then local player = creature:getPlayer() -- Verifica se o jogador está equipado com o item necessário if player:getSlotItem(CONST_SLOT_RIGHT) and player:getSlotItem(CONST_SLOT_RIGHT):getId() == requiredItemID then local skillLevel = player:getSkillLevel(skillToTrain) if skillLevel >= minSkill then -- Verifica se o jogador ganha skill if math.random(100) <= gainChance then player:addSkillTries(skillToTrain, 1) player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".") else player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".") end else player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.") end else player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.") end end return true end Certifique-se de substituir SKILL_FISHING, 10 e 1234 pelos valores apropriados para a habilidade que deseja treinar, o nível mínimo de habilidade para começar a treinar e o ID do item necessário para treinar, respectivamente. Este script irá verificar se o jogador está equipado com o item correto e se ele atende aos requisitos mínimos de habilidade antes de aumentar a habilidade de pesca do jogador com uma certa chance de sucesso. Se o jogador atender a esses critérios, ele receberá uma mensagem informando se ganhou ou não experiência na habilidade de pesca.
-
Testa assim: local scrolls = { [1234] = {skill = SKILL__MAGLEVEL, duration = 7, multiplier = 1.5}, -- Substitua 1234 pelo ID do item do scroll de Magia [5678] = {skill = SKILL__FIST, duration = 7, multiplier = 1.5}, -- Substitua 5678 pelo ID do item do scroll de Luta de Punhos -- Adicione mais entradas conforme necessário para outros scrolls } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local scroll = scrolls[item:getId()] if scroll then if not player:addSkillTry(scroll.skill, 0) then player:sendCancelMessage("You already have this skill at maximum.") return true end if player:addSkill(scroll.skill, scroll.multiplier * player:getSkillLevel(scroll.skill)) then item:remove(1) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) player:sendTextMessage(MESSAGE_INFO_DESCR, "You have received a boost of " .. tostring(scroll.multiplier * 100) .. "% to your " .. getItemNameById(item:getId()) .. " skill for 7 days.") player:setStorageValue(1000 + scroll.skill, 1) addEvent(function(cid, skill) local player = Player(cid) if player then player:removeSkill(skill) player:sendTextMessage(MESSAGE_INFO_DESCR, "Your boost to " .. getItemNameById(item:getId()) .. " skill has worn off.") player:setStorageValue(1000 + skill, -1) end end, scroll.duration * 24 * 3600 * 1000, player:getId(), scroll.skill) else player:sendCancelMessage("You cannot use this item right now.") end end return true end E leva algumas coisas em consideraçao tambem, por exemplo: 1.Variáveis Globais: SKILL__MAGLEVEL, SKILL__FIST, SKILL__CLUB, SKILL__SWORD, SKILL__AXE, SKILL__DISTANCE, SKILL__SHIELD, MESSAGE_INFO_DESCR, CONST_ME_MAGIC_BLUE e getPlayerSkillLevel realmente existem no seu servidor? 2. O seu servidor usa a função doPlayerAddSkillTry? 3.Certifique-se de que todas as variáveis e funções utilizadas no script estejam corretamente definidas e disponíveis. 4.Verificação de item inválido: Adicione uma verificação para garantir que o itemEx não seja nil antes de acessar itemEx.itemid. Isso evitará um possível erro caso o script seja acionado com um itemEx inválido. +- nessa pegada: local scrolls = { [1234] = {skill = SKILL__MAGLEVEL, duration = 7, multiplier = 1.5}, -- Substitua 1234 pelo ID do item do scroll de Magia [5678] = {skill = SKILL__FIST, duration = 7, multiplier = 1.5}, -- Substitua 5678 pelo ID do item do scroll de Luta de Punhos -- Adicione mais entradas conforme necessário para outros scrolls } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local itemEx = target if not itemEx or not itemEx:isItem() then return false end local scroll = scrolls[itemEx:getId()] if scroll then if not player:addSkillTry(scroll.skill, 0) then player:sendCancelMessage("You already have this skill at maximum.") return true end if player:addSkill(scroll.skill, scroll.multiplier * player:getSkillLevel(scroll.skill)) then item:remove(1) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) player:sendTextMessage(MESSAGE_INFO_DESCR, "You have received a boost of " .. tostring(scroll.multiplier * 100) .. "% to your " .. getItemNameById(item:getId()) .. " skill for 7 days.") player:setStorageValue(1000 + scroll.skill, 1) addEvent(function(cid, skill) local player = Player(cid) if player then player:removeSkill(skill) player:sendTextMessage(MESSAGE_INFO_DESCR, "Your boost to " .. getItemNameById(item:getId()) .. " skill has worn off.") player:setStorageValue(1000 + skill, -1) end end, scroll.duration * 24 * 3600 * 1000, player:getId(), scroll.skill) else player:sendCancelMessage("You cannot use this item right now.") end end return true end
-
solta o script da Joy pra mim usar como base ai meu nobre
-
[Pedido de ajuda] Pokebar puxando pokémon sem addon.
pergunta respondeu ao poggerskekw de El Rusher em Scripts
Por favor, envie os códigos relacionados ao sistema de addon e à pokebar, e também qualquer informação adicional relevante que possa ajudar a entender melhor o contexto do problema. Assim, poderei fornecer uma solução mais precisa para o seu caso. -
local scrolls = { ["Magic Level Scroll"] = {skill = SKILL__MAGLEVEL, duration = 7, multiplier = 1.5}, ["Fist Fighting Scroll"] = {skill = SKILL__FIST, duration = 7, multiplier = 1.5}, ["Club Fighting Scroll"] = {skill = SKILL__CLUB, duration = 7, multiplier = 1.5}, ["Sword Fighting Scroll"] = {skill = SKILL__SWORD, duration = 7, multiplier = 1.5}, ["Axe Fighting Scroll"] = {skill = SKILL__AXE, duration = 7, multiplier = 1.5}, ["Distance Fighting Scroll"] = {skill = SKILL__DISTANCE, duration = 7, multiplier = 1.5}, ["Shielding Scroll"] = {skill = SKILL__SHIELD, duration = 7, multiplier = 1.5} } function onUse(cid, item, fromPosition, itemEx, toPosition) local scroll = scrolls[itemEx.itemid] if scroll then if not doPlayerAddSkillTry(cid, scroll.skill, 0) then doPlayerSendCancel(cid, "You already have this skill at maximum.") return true end if doPlayerAddSkill(cid, scroll.skill, scroll.multiplier * getPlayerSkillLevel(cid, scroll.skill)) then doRemoveItem(item.uid) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have received a boost of " .. tostring(scroll.multiplier * 100) .. "% to your " .. getItemNameById(itemEx.itemid) .. " skill for 7 days.") setPlayerStorageValue(cid, 1000 + scroll.skill, 1) addEvent(function(cid, skill) if isPlayer(cid) then doPlayerRemoveSkill(cid, skill) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your boost to " .. getItemNameById(itemEx.itemid) .. " skill has worn off.") setPlayerStorageValue(cid, 1000 + skill, -1) end end, scroll.duration * 24 * 3600 * 1000, cid, scroll.skill) else doPlayerSendCancel(cid, "You cannot use this item right now.") end end return true end
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.