-
Total de itens
304 -
Registro em
-
Última visita
-
Dias Ganhos
13
Tudo que L3K0T postou
-
Compilando o OTClient Mehah no Visual Studio 2022
um tópico no fórum postou L3K0T Tutoriais para Iniciantes
Bem-vindo ao tutorial sobre como compilar o OTClient Mehah no Visual Studio 2022! Neste tutorial, vou guiá-lo pelo processo de configuração do ambiente de desenvolvimento e compilação do OTClient Mehah no Visual Studio 2022 Tutorial: Compilando o OTClient Mehah no Visual Studio 2022 Passo 1: Downloads necessários baixe todos primeiro Visual Studio 2022 Comunidade: Faça o download: https://visualstudio.microsoft.com/pt-br/downloads/ Microsoft Visual C++ Redistributable 2015-2022: Download: 32bits: https://aka.ms/vs/17/release/vc_redist.x86.exe ou 64 bits: https://aka.ms/vs/17/release/vc_redist.x64.exe Git: Se ainda não tiver o Git instalado, faça o download: https://git-scm.com/download/win Passo 2: Instalando abra o visual studio 22 ai quando chegar nessa tela você marca essas opções e desmarca as outras: instalando o git, pode só dar next até o final... instalando o Microsoft Visual C++ Redistributable 2015-2022 abra seu powershell digite os comando 1 por vez: git clone https://github.com/Microsoft/vcpkg cd vcpkg .\bootstrap-vcpkg.bat bibliotecas 64bits referente ao seus sistema .\vcpkg install boost-iostreams:x64-windows boost-asio:x64-windows boost-system:x64-windows boost-variant:x64-windows boost-lockfree:x64-windows luajit:x64-windows glew:x64-windows boost-filesystem:x64-windows boost-uuid:x64-windows physfs:x64-windows openal-soft:x64-windows libogg:x64-windows libvorbis:x64-windows zlib:x64-windows opengl:x64-windows openssl:x64-windows liblzma:x64-windows nlohmann-json:x64-windows protobuf:x64-windows bibliotecas 32bits referente ao seus sistema .\vcpkg install boost-iostreams:x86-windows boost-asio:x86-windows boost-system:x86-windows boost-variant:x86-windows boost-lockfree:x86-windows luajit:x86-windows glew:x86-windows boost-filesystem:x86-windows boost-uuid:x86-windows physfs:x86-windows openal-soft:x86-windows libogg:x86-windows libvorbis:x86-windows zlib:x86-windows opengl:x86-windows openssl:x86-windows liblzma:x86-windows nlohmann-json:x86-windows protobuf:x86-windows por final: .\vcpkg integrate install Download cliente mehah versão nova: https://github.com/mehah/otclient/archive/refs/tags/3.1.zip Agora só abrir o projeto pelo visual studio e clica compilar que vai configura tudo certinho e vai compilar -
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
-
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
-
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())
-
<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
-
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()
-
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)"/>
-
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
-
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())
-
'-'
-
Retirando o Debug de cancel target da rev 3884 protocoll 8.60 0.4
um tópico no fórum postou L3K0T Lixeira Pública
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 -
eu tinha colocado cip soft mais alterei
-
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+
-
TOP!!!!
-
tem torneio ss, cast system vou ver se coloco tbm obrigado pelo feed back ^^
-
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
-
Pode mover pra lixeira, projeto descontinuado
-
update já coloquei
-
arrumado ARRUMADO
-
TÁ NORMAL AQUI TENTE USAR OUTRO NAVEGADOR
-
Bom galera aqui está o spr e dat do otpokemon. com mês de novembro com toda as Sprites incluindo, corpse, parede, itens, addons, etc..., façam bom aproveito! UPDATE - NOVEMBRO -2017 1 Download client: cliente otp.zip 2 Download obj: Object Builder 0.4.3.zip scan 1: https://www.virustotal.com/#/file/ec4c3f2ee12d3b56beb8887a40870c31a926df897a47494d83932c8daa3e58b2/detection scan 2: https://www.virustotal.com/#/file/6db1c7abfe7acc64adb2be04d1f0589cc51fc8f59d3faf309bd660c99fad6ee2/detection abra em modo estendido e usem acima que está pra download também. espero que tenha ajudado alguém.... pois nem todo mundo consegue sprites do otp e muita gente fica ai guardando segredos. UPDATE - DEZEMBRO - NATAL 2017 1 Download client: otp dezembro.zip 2 Download obj: Object Builder 0.4.3.zip scan 1: https://www.virustotal.com/#/file/c34eeb2167a30f6eee04b43575f62455a07e0f6006a0ffe57730c4ac301a553d/detection scan 2: https://www.virustotal.com/#/file/6db1c7abfe7acc64adb2be04d1f0589cc51fc8f59d3faf309bd660c99fad6ee2/detection
-
apaga isso e tente function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if getTileItemById(toPos, depot).uid < 1 then if toPos.x ~= 65535 or toPos.y ~= 64 then return doPlayerSendCancel(cid, "You can't move this item.") and false end end return true end
-
Monstro Focando 1° no Summon depois no Player.
um tópico no fórum postou L3K0T CreatureScripts e Movements
Fala galera, hoje estarei ensinando você como fazer os monstro (selvagens) focar primeiro no summons, depois no player, sem mexer na source, hoje estarei mostrando em scripts e é o mesmo que uso em meu servidor, então testado! vai em data/creaturescripts/scripts copia uma arquivo .lua e renomeia pra ataque.lua e coloca isso lá dentro. function onAttack(cid, target, attacker, type, combat, value) if isPlayer(target) and #getCreatureSummons(target) >= 1 then doMonsterSetTarget(cid, getCreatureSummons(target)[1]) end return true end agora no creaturescripts.xml coloca a tag <event type="attack" name="BlockHit6" event="script" value="ataque.lua"/> como usar ? é muito simples agora você vai em todos monstros selvagens e vai add lá em baixo. <script> <event name="BlockHit6"></event> </script> sempre antes do </monster> ADICIONA NO LOGIN.LUA registerCreatureEvent(cid, "BlockHit6") agora é só alegria parceiro espero ter ajudado! 😘 -
-
obrigado @Bennyyw você também!
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.