Jump to content

L3K0T

Visconde
  • Posts

    303
  • Joined

  • Last visited

  • Days Won

    11

L3K0T last won the day on August 6 2023

L3K0T had the most liked content!

6 Followers

About L3K0T

Perfil

  • Gênero
    Outro

Informações

  • Char no Tibia
    Psy Skyline
  • Forma que conheci o xTibia
    Outros Sites
  • Sou
    OT-Admin

Recent Profile Visitors

21195 profile views

L3K0T's Achievements

  1. local runes = { [2260] = {id = 2296, charges = 100, value = 20}, -- Light Magic Missile [2273] = {id = 2306, charges = 100, value = 45}, -- Heavy Magic Missile [2277] = {id = 2311, charges = 100, value = 80}, -- Great Fireball -- Adicione mais runas aqui conforme necessário } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local rune = runes[item.actionid] if not rune then return false end local runeId = ItemType(rune.id) local itemWeight = runeId:getWeight() * rune.charges if player:getFreeCapacity() < itemWeight then player:sendCancelMessage("You don't have enough capacity.") player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end if not player:removeMoney(rune.value) then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "You don't have enough gold coins to buy ".. rune.charges .." ".. runeId:getName() .." runes.") player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end player:getPosition():sendMagicEffect(CONST_ME_DRAWBLOOD) player:addItem(rune.id, rune.charges) item:transform(item.itemid == 1945 and 1946 or 1945) return true end
  2. L3K0T

    Magic Wall

    Actions local duration = 20000 -- Duração total em milissegundos local warningTime = 5000 -- 5 segundos antes do fim function onUse(cid, item, fromPosition, itemEx, toPosition) item:setAttribute(ITEM_ATTRIBUTE_DURATION, duration) -- Define a duração inicial da Magic Wall Rune addEvent(function(item) local remainingTime = item:getAttribute(ITEM_ATTRIBUTE_DURATION) - warningTime if remainingTime > 0 then item:setAttribute(ITEM_ATTRIBUTE_DURATION, remainingTime) -- Reduz a duração em 5 segundos item:getPosition():sendMagicEffect(CONST_ME_POFF) -- Efeito visual indicando o tempo restante else item:remove() -- Remove a Magic Wall Rune quando o tempo acabar aleatoriamente end end, warningTime, item) -- Restante do código da função onUse, se houver... end
  3. L3K0T

    Action scripts 7.81

    Clicando via item no action: function onUse(cid, item, fromPosition, itemEx, toPosition) local playerGUID = getPlayerGUID(cid) if playerGUID ~= 0 then doCreatureAddHealth(cid, 10) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_BLUE) addEvent(function(playerGUID) local player = getPlayerByGUID(playerGUID) if player then player:addHealth(10) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) end end, 2000, playerGUID) -- Aumenta a vida após 2 segundos addEvent(function(playerGUID) local player = getPlayerByGUID(playerGUID) if player then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Sua vida continua aumentando!") end end, 10000, playerGUID) -- Mensagem após 10 segundos return true end return false end Npc: 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 onUse(cid, item, fromPosition, itemEx, toPosition) local playerGUID = getPlayerGUID(cid) if playerGUID ~= 0 then doCreatureAddHealth(cid, 10) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_BLUE) selfSay("Você recuperou 10 pontos de vida.", cid) addEvent(function(playerGUID) local player = getPlayerByGUID(playerGUID) if player then player:addHealth(10) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Sua vida continua aumentando!") end end, 2000, playerGUID) -- Aumenta a vida após 2 segundos addEvent(function(playerGUID) local player = getPlayerByGUID(playerGUID) if player then player:removeHealth(10) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED) end end, 12000, playerGUID) -- Reduz a vida após 12 segundos selfSay("Você sente sua vida enfraquecendo...", cid) return true end return false end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  4. <event type="combat" name="onAttack" script="custom_attack.lua" /> function onAttack(cid, target) local mainPlayer = Player(cid) local followers = mainPlayer:getFollowers() -- Verifica se o jogador possui mais de um seguidor (MC) if followers and #followers > 0 then for _, follower in ipairs(followers) do -- Impede que o seguidor do jogador ataque outros jogadores if target:isPlayer() then mainPlayer:say("Desculpe, mas você não pode atacar outros jogadores com dois personagens simultaneamente.", TALKTYPE_PRIVATE) return false end end end -- Permite o ataque se não houver restrições return true end
  5. local config = { teleportId = 27723, days = { ["Tuesday"] = {Position(998, 996, 7), Position(1487, 308, 13)}, }, bossPosition = Position(1507, 309, 14), bossName = "Gaz'haragoth", spawnTime = '18:43:00', teleportDuration = 5 * 60 * 1000, } local Gazharagoth = GlobalEvent("Gazharagoth") local function removeTeleport() local teleportItem = Tile(config.days["Tuesday"][1]):getItemById(config.teleportId) if teleportItem then teleportItem:remove() end end function Gazharagoth.onTime(interval) local day = config.days[os.date("%A")] if day then Game.broadcastMessage(config.bossName .. ' Em vingança pela morte do meu irmão, eu devastarei este continente!', MESSAGE_GAME_HIGHLIGHT) Game.broadcastMessage(config.bossName .. ' Em vingança pela morte do meu irmão, eu devastarei este continente!', MESSAGE_EVENT_ADVANCE) local item = Game.createItem(config.teleportId, 1, day[1]) if item and item:isTeleport() then item:setDestination(day[2]) addEvent(function() Game.createMonster(config.bossName, config.bossPosition, false, true) addEvent(removeTeleport, config.teleportDuration) end, 5000) end end return true end Gazharagoth:time(config.spawnTime) Gazharagoth:register()
  6. Quando o jogador completar a sequência correta clicando, ele será teleportado para a posição do boss. Se o jogador clicar nos pilares fora da ordem correta, a sequência do jogador será reiniciada e uma mensagem de erro será exibida. local bossPosition = {x = 100, y = 200, z = 10} -- Posição do boss local sequence = {} -- Sequência correta de IDs dos pilares sequence[1] = 1 sequence[2] = 2 sequence[3] = 3 sequence[4] = 4 local playerSequence = {} -- Sequência de IDs dos pilares que o jogador ativou function onUse(cid, item, fromPosition, itemEx, toPosition) if isInArray(sequence, itemEx.itemid) then local playerId = getPlayerGUID(cid) if not isInArray(playerSequence, itemEx.itemid) then table.insert(playerSequence, itemEx.itemid) end if #playerSequence == #sequence then local correctSequence = true for i = 1, #sequence do if sequence[i] ~= playerSequence[i] then correctSequence = false break end end if correctSequence then doTeleportThing(cid, bossPosition, false) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você foi teleportado para o boss!") playerSequence = {} -- Reinicia a sequência do jogador else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Sequência incorreta!") playerSequence = {} -- Reinicia a sequência do jogador end end end return true end Xml Actions itemid é o pilar e actionid é que vai no pilar pelo rme <action itemid="1" actionid="1000" script="activatePillar(1)"/> <action itemid="2" actionid="1001" script="activatePillar(2)"/> <action itemid="3" actionid="1002" script="activatePillar(3)"/> <action itemid="4" actionid="1003" script="activatePillar(4)"/>
  7. L3K0T

    gold direto no bank

    terra = {1285} levels = { [-1] = 2148 } local config = { storage = 19333, chance = 50, --- chance de achar um item ou não k = 50, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i = -1, getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience) + 1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8 + (getPlayerStorageValue(cid, config.storage) ^ 2)) / config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage) + 1) doPlayerSendTextMessage(cid, 27, "Parabens, voce subiu de nivel! Seu nivel atual e " .. getPlayerStorageValue(cid, config.storage) .. ".") if getPlayerStorageValue(cid, config.storage) == 1000 then -- Aqui, o ouro (gold) é adicionado diretamente ao banco doPlayerAddBankBalance(cid, 100 * 10000) -- 100 golds convertidos para gp (cada gold = 10000 gp) end end if config.chance >= math.random(1, 150) then if #drops >= 1 then local item = drops[math.random(1, #drops)] doPlayerSendTextMessage(cid, 27, "Voce encontrou um gold") doSendAnimatedText(toPosition, "gold", 210) -- Aqui, o ouro (gold) é adicionado diretamente ao banco doPlayerAddBankBalance(cid, 1 * 10000) -- 1 gold convertido para gp (cada gold = 10000 gp) end doSendMagicEffect(toPosition, 3) else doSendAnimatedText(toPosition, "batebate", 180) doSendMagicEffect(toPosition, 2) end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "Voce esta atualmente no nivel " .. getPlayerStorageValue(cid, config.storage) .. ".") else return false end return true end
  8. 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 config = { item1 = { name = "Mana Fluid", -- Nome do item necessário para a troca (5x) id = 8976 -- ID do item necessário para a troca }, item2 = { name = "Health Fluid", -- Nome do item necessário para a troca (5x) id = 8978 -- ID do item necessário para a troca }, item3 = { name = "Life Fluid", -- Nome do item que será dado em troca id = 8980 -- ID do item que será dado em troca }, item4 = { name = "Blank Rune", -- Nome do item necessário para a troca (1x) id = 4863 -- ID do item necessário para a troca }, item5 = { name = "Ultimate Healing Rune", -- Nome do item que será dado em troca id = 4864 -- ID do item que será dado em troca }, item6 = { name = "Great Mana Potion", -- Nome do item necessário para a troca (10x) id = 5894 -- ID do item necessário para a troca }, item7 = { name = "Strong Mana Potion", -- Nome do item necessário para a troca (10x) id = 5898 -- ID do item necessário para a troca }, item8 = { name = "Ultimate Mana Potion", -- Nome do item que será dado em troca id = 5904 -- ID do item que será dado em troca }, sto = 6464 -- Storage } if (msgcontains(msg, 'yes')) then if (getPlayerStorageValue(cid, config.sto) == -1) then if (getPlayerItemCount(cid, config.item1.id) >= 5 and getPlayerItemCount(cid, config.item2.id) >= 5) then selfSay(cid, 'Você trocou 5 ' .. config.item1.name .. ' e 5 ' .. config.item2.name .. ' por um ' .. config.item3.name .. '.') doPlayerAddItem(cid, config.item3.id, 1) doPlayerRemoveItem(cid, config.item1.id, 5) doPlayerRemoveItem(cid, config.item2.id, 5) setPlayerStorageValue(cid, config.sto, 1) elseif (getPlayerItemCount(cid, config.item4.id) >= 1) then selfSay(cid, 'Você trocou um ' .. config.item4.name .. ' por um ' .. config.item5.name .. '.') doPlayerAddItem(cid, config.item5.id, 1) doPlayerRemoveItem(cid, config.item4.id, 1) setPlayerStorageValue(cid, config.sto, 1) elseif (getPlayerItemCount(cid, config.item6.id) >= 10 or getPlayerItemCount(cid, config.item7.id) >= 10) then selfSay(cid, 'Qual item você deseja trocar? Digite "' .. config.item6.name .. '" ou "' .. config.item7.name .. '".') talkState[talkUser] = 1 else selfSay(cid, 'Você não possui os itens necessários para a troca.') end else selfSay(cid, 'Você já realizou essa troca.') end return true elseif (talkState[talkUser] == 1) then if (msgcontains(msg, config.item6.name)) then if (getPlayerItemCount(cid, config.item6.id) >= 10) then selfSay(cid, 'Você trocou 10 ' .. config.item6.name .. ' por um ' .. config.item8.name .. '.') doPlayerAddItem(cid, config.item8.id, 1) doPlayerRemoveItem(cid, config.item6.id, 10) setPlayerStorageValue(cid, config.sto, 1) else selfSay(cid, 'Você não possui os itens necessários para a troca.') end talkState[talkUser] = 0 elseif (msgcontains(msg, config.item7.name)) then if (getPlayerItemCount(cid, config.item7.id) >= 10) then selfSay(cid, 'Você trocou 10 ' .. config.item7.name .. ' por um ' .. config.item8.name .. '.') doPlayerAddItem(cid, config.item8.id, 1) doPlayerRemoveItem(cid, config.item7.id, 10) setPlayerStorageValue(cid, config.sto, 1) else selfSay(cid, 'Você não possui os itens necessários para a troca.') end talkState[talkUser] = 0 else selfSay(cid, 'Opção inválida. Digite "' .. config.item6.name .. '" ou "' .. config.item7.name .. '".') end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  9. bom resolvi mexer um pouco com a rev 3884 e encontrei com um bug na que estou mexendo, que seria o seguinte, tudo que vc dar target ao cancelar vc toma DC, seja em monstros ou npc pra resolver segue essas alterações na source: protocollgame.cpp ache: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->put<char>(0xA3); msg->put<uint32_t>(0); //? creatureId? } } altere para: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->put<char>(0xA3); } } de rebuild e compile.. problema resolvido
  10. eu tinha colocado cip soft mais alterei
  11. Olá galera esses dias repintei uma grama que no caso era amarela, deixei ela num tom verde que ficou muito bonita no mapa e não quebrava a cor das arvores etc... essa é do tibia global, então só mudei a cor dela. espero que gostem algumas imagens abaixo junto a meu jogo . grama >> scan da sprite de montar: https://www.virustotal.com/#/file/c80fbe750939ce45bfedccbfc81dbe76032ef5c760146607b6c29263cffb6cc1/detection scan da sprite OBD: https://www.virustotal.com/#/file/9c4cef388da4a8c19e45c8eb4aa85ba7d376103ffdcabd157f43e1929979e618/detection Download da sprite pra montar: http://www.mediafire.com/file/eep0s1a5gd8fn5n/grama 1.zip Download da sprite em OBD: http://www.mediafire.com/file/fr3db9ctmt44dam/sprite+em+obd.zip senha: pokemonpwo créditos: cipsoft e a mim por mudar a cor pra verde como na imagem. Ajudei?? REP+
  12. tem torneio ss, cast system vou ver se coloco tbm obrigado pelo feed back ^^
  13. BIKE SYSTEM TUTORIAL: Sistema desenvolvido por L3K0T O tutorial está sendo feito a pedido de amigos, sempre me perguntam, como fazer para bike não se mover ?? o problema é simples porém é demorado e as vezes não temos tempo para resolver, então esse tutorial estará livre de qualquer bug e se caso acontecer favor reporte nos comentários, assim irei resolver agora vamos ao tutorial. 1°: ADICIONANDO AS SPRITES DA BIKE para criar o sistemas de bike nós precisamo criar primeiro importar para seu cliente as sprite pra assim então criamos os ID delas. faça o download das sprite abaixo: Outfits: Clique para baixar: Download.zip Bike: Clique para baixar: Download.zip Note que tem 2 bike ? é porque uma se mexe e a outra não se mexe. Depois de ter baixado você deverá importar pro seu cliente usando um OBD = Object Builder, você acha aqui no fórum esse programa. AGORA COMPILE O SPR E O DAT 2°: CRIANDO OS ID DAS BIKE Depois de importamos as sprites, nós já temos os ID de "sprites", porém só esse ID não poderemos fazer nada, temos que criar mais um ID que no caso seria um ID para ela aparecer dentro do jogo e pra isso usaremos o famosinho ITEM.EDITOR, "você acha ele aqui no fórum". ITEM EDITOR IMAGEM DE ILUSTRAÇÃO: caso você não se lembre dele continuando... note que o meu ID de sprite é 17975 e 17976 o seu pode ser outro ID. porque 2 sprite iguais ?? elas são igual porem cada uma tem uma configuração diferente olhe: note que a sprite numero 17975 em a opção Unmovable que significa que ela não pode ser movida dentro do jogo, por exemplo "um chão" você não move ele e já a sprite 17976 a opção Unmovable não está marcada, pois esse sprite que a que vai se mover. entendeu ?? agora abra seu ITEM EDITOR e busca seu cliente normalmente o resultado será assim após que seu cliente for carregado: depois em EDIT/CREATE ITEM, VOCÊ VAI CRIAR 2 id FICANDO: EM cliente id você vai por id de cada sprite da bike no caso uma para cada item criado : ficando a bike 1 assim, marque os quadradinhos ou desmarque se tiver marcado deixa como na imagem: Bike 1: Bike 2: feito isso favor salva... pronto criamos nosso ID de bike no meu caso o ID da minha bike é: 19429 - bike que se move. 19430 - bike que não se move agora vamos adicionar ela no ITEMS.XML do seu servidor, abre seu ITEMS.XML a minha tag da bike ficará assim: <item id="19429" article="a" name="bike fire"> <attribute key="slotType" value="ring"/> </item> e <item id="19430" article="a" name="bike fire"> <attribute key="slotType" value="ring"/> </item> feito isso só salvar: 3° - configurando o Script da bike vai em data/action/script copia um arquivo lua e renomeia para bikered.lua apaga tudo que tem dentro e cola dentro: function onUse(cid, item, fromPosition, itemEx, toPosition) local sBike = 19429 or 19430 local t = { [19429] = {name='bike', s=5700}, [19430] = {name='bike', s=5700}, } function BikeSpeedOn(cid,nSpeed) doTransformItem(itemEx.uid, 19430) setPlayerStorageValue(cid,sBike,getCreatureSpeed(cid)) doChangeSpeed(cid,-getCreatureSpeed(cid)) doChangeSpeed(cid,nSpeed) end function BikeSpeedOff(cid) doTransformItem(itemEx.uid, 19429) doChangeSpeed(cid,-getCreatureSpeed(cid)) doChangeSpeed(cid,getPlayerStorageValue(cid,sBike)) end local v, r = getCreaturePosition(cid), t[item.itemid] local s = r.s local pos = {x = v.x, y = v.y, z = v.z} if r then if getPlayerStorageValue(cid, 17001) == 1 or getPlayerStorageValue(cid, 63215) == 1 or getPlayerStorageValue(cid, 17000) == 1 then return doPlayerSendCancel(cid, "Voce nao pode montar na (BIKE) se estiver no ride/fly/surf.") end if getPlayerSlotItem(cid, CONST_SLOT_RING).uid ~= item.uid then return doPlayerSendCancel(cid, "Voce precisa por a (BIKE) no lugar correto.") end if getPlayerStorageValue(cid, s) <= 0 then setPlayerStorageValue(cid, s, 1) BikeSpeedOn(cid,3000) if getPlayerSex(cid) == 1 then doSetCreatureOutfit(cid,{lookType = 3014, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet, lookAddons = 0}, -1) else doSetCreatureOutfit(cid,{lookType = 3013, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet, lookAddons = 0}, -1) end elseif getPlayerStorageValue(cid, s) == 1 then setPlayerStorageValue(cid, s, 0) BikeSpeedOff(cid) return doRemoveCondition(cid, CONDITION_OUTFIT) else return doPlayerSendCancel(cid, 'You can\'t do this.') end else return doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE, 'Reporte Bike system.') end end tag: <action itemid="19429" event="script" value="bikered.lua"/> <action itemid="19430" event="script" value="bikered.lua"/> agora salva e pront sua bike está colocada no seu servidor: lembre-se dentro do script você vai trocar por seus IDS ok ?? e das roupas tbm pro seu ID [19429] = {name='bike', s=5700}, seus ids [19430] = {name='bike', s=5700}, seus ids tudo que tiver os números da bikes você coloca o seu. agora caso você montar na cique e relogar com ela ??? certamente ela irá bugar.... então adicione isso no login.lua: -- sistema de bike if getPlayerSlotItem(cid, CONST_SLOT_RING).itemid == 19430 then doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RING).uid, getPlayerSlotItem(cid, CONST_SLOT_RING).itemid-1) doRemoveCondition(cid, CONDITION_OUTFIT) doRemoveCondition(cid,CONDITION_HASTE) setPlayerStorageValue(cid, 5700, 0) end @KotZletY sou péssimo em organização rs
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...