Postado Março 20, 2018 7 anos Olá galerinha, gostaria de pedir ajuda com um código do meu servidor de poketibia. Eu não consigo fazer funcionar a máquina de helds e o autoloot juntos, ou um funciona ou o outro, o cod esta meio que no msm script. Servidor\data\creaturescripts\scripts\opcodes Esse script funciona o autoloot 100%, mas o resto não funciona local op_crea = { OPCODE_SKILL_BAR = opcodes.OPCODE_SKILL_BAR, OPCODE_POKEMON_HEALTH = opcodes.OPCODE_POKEMON_HEALTH, OPCODE_BATTLE_POKEMON = opcodes.OPCODE_BATTLE_POKEMON, OPCODE_FIGHT_MODE = opcodes.OPCODE_FIGHT_MODE, OPCODE_WILD_POKEMON_STATS = opcodes.OPCODE_WILD_POKEMON_STATS, OPCODE_REQUEST_DUEL = opcodes.OPCODE_REQUEST_DUEL, OPCODE_ACCEPT_DUEL = opcodes.OPCODE_ACCEPT_DUEL, OPCODE_YOU_ARE_DEAD = opcodes.OPCODE_YOU_ARE_DEAD, OPCODE_DITTO_MEMORY = opcodes.OPCODE_DITTO_MEMORY, } function onExtendedOpcode(cid, opcode, buffer) if opcode == op_crea.OPCODE_SKILL_BAR then if buffer == "refresh" then doOTCSendPlayerSkills(cid) end elseif opcode == op_crea.OPCODE_POKEMON_HEALTH then if buffer == "refresh" then doOTCSendPokemonHealth(cid) end elseif opcode == op_crea.OPCODE_BATTLE_POKEMON then if buffer == "refresh" then if #getCreatureSummons(cid) >= 1 then doSendPlayerExtendedOpcode(cid, op_crea.OPCODE_BATTLE_POKEMON, tostring(getCreatureSummons(cid)[1])) end end elseif opcode == op_crea.OPCODE_FIGHT_MODE then setPlayerStorageValue(cid, storages.fightMode, tonumber(buffer)) elseif opcode == op_crea.OPCODE_WILD_POKEMON_STATS then doSendPlayerExtendedOpcode(cid, op_crea.OPCODE_WILD_POKEMON_STATS, pokeStatus.getVity(tonumber(buffer)).."|"..pokeStatus.getAtk(tonumber(buffer)).."|"..pokeStatus.getSpAtk(tonumber(buffer)).."|"..pokeStatus.getDef(tonumber(buffer)).."|"..pokeStatus.getSpDef(tonumber(buffer)).."|"..pokeStatus.getSpeed(tonumber(buffer))) --//Duel elseif opcode == opcodes.OPCODE_REQUEST_DUEL then --legenda: cid = player, sid = player convidado local cut = string.explode(buffer, "/") local pokeballsCount, sid = tonumber(cut[1]), getCreatureByName(cut[2]) if isCreature(sid) then doIniteDuel(cid, sid, pokeballsCount) end elseif opcode == opcodes.OPCODE_ACCEPT_DUEL then local p2 = getCreatureByName(buffer) if isInvitedDuel(p2, cid) then doPantinNoDuel(cid, p2, getPlayerStorageValue(p2, duelTable.infoBalls), 5) end elseif opcode == opcodes.OPCODE_DITTO_MEMORY then local item = getPlayerSlotItem(cid, 8) if item.uid == 0 then doSendMsg(cid, "Coloque seu shiny ditto no slot correto.") return true end local pokeName = getItemAttribute(item.uid, "poke") if pokeName ~= "Shiny Ditto" then return true end if isInArray({"saveMemory1", "saveMemory2", "saveMemory3"}, buffer) then local copyName = getItemAttribute(item.uid, "copyName") if pokeName == copyName then doSendMsg(cid, "Transforme seu ditto primeiro.") return true end if isPokeInSlots(getItemAttribute(item.uid, "memoryDitto"), doCorrectString(copyName)) then doSendMsg(cid, "Esta copia já está salva em um slot.") return true end if buffer == "saveMemory1" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 1, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) -- getPortraitClientID(doCorrectString(copyName)))) elseif buffer == "saveMemory2" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 2, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) elseif buffer == "saveMemory3" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 3, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) end elseif isInArray({"clearSlot1", "clearSlot2", "clearSlot3"}, buffer) then if buffer == "clearSlot1" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 1, "?")) elseif buffer == "clearSlot2" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 2, "?")) elseif buffer == "clearSlot3" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 3, "?")) end elseif isInArray({"use1", "use2", "use3"}, buffer) then local summons = getCreatureSummons(cid) if #summons < 1 then doSendMsg(cid, "Coloque seu ditto para fora da pokeball.") return true end local pokeToTransform = getSlot(getItemAttribute(item.uid, "memoryDitto"), tonumber(buffer:explode("use")[1])) doCopyPokemon(summons[1], pokeToTransform, true) end local memory = getItemAttribute(item.uid, "memoryDitto") if not memory or memory == nil then doItemSetAttribute(item.uid, "memoryDitto", "?|?|?") memory = getItemAttribute(item.uid, "memoryDitto") end local memoryOne, memoryTwo, memoryTree = memory:explode("|")[1], memory:explode("|")[2], memory:explode("|")[3] local str = memoryOne .. "-".. memoryTwo .."-" .. memoryTree doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_DITTO_MEMORY, str) elseif opcode == opcodes.OPCODE_TV_CAM then -- TVCam --doCreatePrivateChannel(cid) --doInviteToPrivateChannel(cid, playerName) --doRemoveIntoPrivateChannel(cid, playerName) if getGlobalStorageValue(globalsTV) == -1 then -- iniciar sistema setGlobalStorageValue(globalsTV, "") end local action = buffer:explode("/")[1] if action == "create" then createChannel(cid, buffer) elseif action == "close" then closeInClientChannmel(cid) elseif action == "watch" then local playerToWatch = getCreatureByName(buffer:explode("/")[2]) if isCreature(playerToWatch) then if getPlayerStorageValue(playerToWatch, storages.playerTVPass) ~= "" and getPlayerStorageValue(playerToWatch, storages.playerTVPass) ~= "notASSenha" then doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_TV_CAM, "requestPass|" .. getPlayerStorageValue(playerToWatch, storages.playerTVPass) .. "|" .. buffer:explode("/")[2]) else doWatch(cid, playerToWatch) end else doSendMsg(cid, "Este player não está mais gravando.") end elseif action == "watchWithPass" then local playerToWatch = getCreatureByName(buffer:explode("/")[2]) if isCreature(playerToWatch) then doWatch(cid, playerToWatch) else doSendMsg(cid, "Este player não está mais gravando.") end elseif action == "errou" then doSendMsg(cid, "Senha do digitada incorreta.") end elseif opcode == opcodes.OPCODE_PLAYER_SHOW_AUTOLOOT then -- Autoloot if buffer:find("load/") then local itens = getAllItensAutoLoot() doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_PLAYER_SHOW_AUTOLOOT, (isCollectAll(cid) and "yes" or "no") .. "|" .. itens .. "|" .. getAllItensInMyListToClient(cid)) elseif buffer:find("all") then doCollectAll(cid, true) doSendMsg(cid, "AutoLoot: Coletar tudo foi ativado.") elseif buffer:find("no") then doCollectAll(cid, false) doSendMsg(cid, "AutoLoot: Coletar tudo foi desativado.") else doSaveItems(cid, buffer) end elseif opcode == opcodes.OPCODE_PLAYER_SHOW_ONLINE then -- Janela de onlines do ADM doGetPlayersOnToADM(cid) end end function getSlot(strings, slot) local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] local ret, flag = "", false for a, b in pairs(fotos) do if getItemInfo(fotos[a]).clientId == tonumber(slot1) and slot == 1 then ret = doCorrectString(a) flag = true elseif getItemInfo(fotos[a]).clientId == tonumber(slot2) and slot == 2 then ret = doCorrectString(a) flag = true elseif getItemInfo(fotos[a]).clientId == tonumber(slot3) and slot == 3 then ret = doCorrectString(a) flag = true end if flag then break end end return ret end function saveSlot(strings, slot, poke) local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] local finalSlots = (slot == 1 and poke .. "|" or slot1 .. "|") .. (slot == 2 and poke .. "|" or slot2 .. "|") .. (slot == 3 and poke .. "|" or slot3) return finalSlots end function isPokeInSlots(strings, poke) poke = getItemInfo(fotos[poke]).clientId local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] if tonumber(slot1) == poke then return true elseif tonumber(slot2) == poke then return true elseif tonumber(slot3) == poke then return true end return false end E esse outro aqui funciona a máquina de helds, mas não funciona o resto. local op_crea = { OPCODE_SKILL_BAR = opcodes.OPCODE_SKILL_BAR, OPCODE_POKEMON_HEALTH = opcodes.OPCODE_POKEMON_HEALTH, OPCODE_BATTLE_POKEMON = opcodes.OPCODE_BATTLE_POKEMON, OPCODE_FIGHT_MODE = opcodes.OPCODE_FIGHT_MODE, OPCODE_WILD_POKEMON_STATS = opcodes.OPCODE_WILD_POKEMON_STATS, OPCODE_REQUEST_DUEL = opcodes.OPCODE_REQUEST_DUEL, OPCODE_ACCEPT_DUEL = opcodes.OPCODE_ACCEPT_DUEL, OPCODE_YOU_ARE_DEAD = opcodes.OPCODE_YOU_ARE_DEAD, OPCODE_DITTO_MEMORY = opcodes.OPCODE_DITTO_MEMORY, } function onExtendedOpcode(cid, opcode, buffer) if opcode == op_crea.OPCODE_SKILL_BAR then if buffer == "refresh" then doOTCSendPlayerSkills(cid) end elseif opcode == op_crea.OPCODE_POKEMON_HEALTH then if buffer == "refresh" then doOTCSendPokemonHealth(cid) end elseif opcode == op_crea.OPCODE_BATTLE_POKEMON then if buffer == "refresh" then if #getCreatureSummons(cid) >= 1 then doSendPlayerExtendedOpcode(cid, op_crea.OPCODE_BATTLE_POKEMON, tostring(getCreatureSummons(cid)[1])) end end elseif opcode == op_crea.OPCODE_FIGHT_MODE then setPlayerStorageValue(cid, storages.fightMode, tonumber(buffer)) elseif opcode == op_crea.OPCODE_WILD_POKEMON_STATS then doSendPlayerExtendedOpcode(cid, op_crea.OPCODE_WILD_POKEMON_STATS, pokeStatus.getVity(tonumber(buffer)).."|"..pokeStatus.getAtk(tonumber(buffer)).."|"..pokeStatus.getSpAtk(tonumber(buffer)).."|"..pokeStatus.getDef(tonumber(buffer)).."|"..pokeStatus.getSpDef(tonumber(buffer)).."|"..pokeStatus.getSpeed(tonumber(buffer))) --//Duel elseif opcode == opcodes.OPCODE_REQUEST_DUEL then --legenda: cid = player, sid = player convidado local cut = string.explode(buffer, "/") local pokeballsCount, sid = tonumber(cut[1]), getCreatureByName(cut[2]) if isCreature(sid) then doIniteDuel(cid, sid, pokeballsCount) end elseif opcode == opcodes.OPCODE_ACCEPT_DUEL then local p2 = getCreatureByName(buffer) if isInvitedDuel(p2, cid) then doPantinNoDuel(cid, p2, getPlayerStorageValue(p2, duelTable.infoBalls), 5) end elseif opcode == opcodes.OPCODE_DITTO_MEMORY then local item = getPlayerSlotItem(cid, 8) if item.uid == 0 then doSendMsg(cid, "Coloque seu shiny ditto no slot correto.") return true end local pokeName = getItemAttribute(item.uid, "poke") if pokeName ~= "Shiny Ditto" then return true end if isInArray({"saveMemory1", "saveMemory2", "saveMemory3"}, buffer) then local copyName = getItemAttribute(item.uid, "copyName") if pokeName == copyName then doSendMsg(cid, "Transforme seu ditto primeiro.") return true end if not fotos[doCorrectString(copyName)] then return true end if isPokeInSlots(getItemAttribute(item.uid, "memoryDitto"), doCorrectString(copyName)) then doSendMsg(cid, "Esta copia já está salva em um slot.") return true end if buffer == "saveMemory1" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 1, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) -- getPortraitClientID(doCorrectString(copyName)))) elseif buffer == "saveMemory2" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 2, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) elseif buffer == "saveMemory3" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 3, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) end elseif isInArray({"clearSlot1", "clearSlot2", "clearSlot3"}, buffer) then if buffer == "clearSlot1" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 1, "?")) elseif buffer == "clearSlot2" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 2, "?")) elseif buffer == "clearSlot3" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 3, "?")) end elseif isInArray({"use1", "use2", "use3"}, buffer) then local summons = getCreatureSummons(cid) if #summons < 1 then doSendMsg(cid, "Coloque seu ditto para fora da pokeball.") return true end local pokeToTransform = getSlot(getItemAttribute(item.uid, "memoryDitto"), tonumber(buffer:explode("use")[1])) doCopyPokemon(summons[1], pokeToTransform, true) end local memory = getItemAttribute(item.uid, "memoryDitto") if not memory or memory == nil then doItemSetAttribute(item.uid, "memoryDitto", "?|?|?") memory = getItemAttribute(item.uid, "memoryDitto") end local memoryOne, memoryTwo, memoryTree = memory:explode("|")[1], memory:explode("|")[2], memory:explode("|")[3] local str = memoryOne .. "-".. memoryTwo .."-" .. memoryTree doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_DITTO_MEMORY, str) elseif opcode == opcodes.OPCODE_TV_CAM then -- TVCam --doCreatePrivateChannel(cid) --doInviteToPrivateChannel(cid, playerName) --doRemoveIntoPrivateChannel(cid, playerName) if getGlobalStorageValue(globalsTV) == -1 then -- iniciar sistema setGlobalStorageValue(globalsTV, "") end local action = buffer:explode("/")[1] if action == "create" then createChannel(cid, buffer) elseif action == "close" then closeInClientChannmel(cid) elseif action == "watch" then local playerToWatch = getCreatureByName(buffer:explode("/")[2]) if isCreature(playerToWatch) then if getPlayerStorageValue(playerToWatch, storages.playerTVPass) ~= "" and getPlayerStorageValue(playerToWatch, storages.playerTVPass) ~= "notASSenha" then doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_TV_CAM, "requestPass|" .. getPlayerStorageValue(playerToWatch, storages.playerTVPass) .. "|" .. buffer:explode("/")[2]) else doWatch(cid, playerToWatch) end else doSendMsg(cid, "Este player não está mais gravando.") end elseif action == "watchWithPass" then local playerToWatch = getCreatureByName(buffer:explode("/")[2]) if isCreature(playerToWatch) then doWatch(cid, playerToWatch) else doSendMsg(cid, "Este player não está mais gravando.") end elseif action == "errou" then doSendMsg(cid, "Senha do digitada incorreta.") end elseif opcode == opcodes.OPCODE_PLAYER_SHOW_ONLINE then -- Janela de onlines do ADM doGetPlayersOnToADM(cid) elseif opcode == opcodes.OPCODE_PLAYER_SHOW_TRADE_HELD then local op = tonumber(buffer:explode("-")[2]) local posP = getThingPos(cid) local posMachine = {{x = 222, y = 430, z = 7}, {x = 221, y = 430, z = 7}} if not doComparePositions(posMachine[1], posP) and not doComparePositions(posMachine[2], posP) then doSendMsg(cid, "Tienes que estar en frente de la maquina.") return true end if op == 1 then if doPlayerRemoveItem(cid, 15645, 15) then local tier = math.random(1, 2) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 15 Devoted Tokens.") end return true elseif op == 2 then if doPlayerRemoveItem(cid, 15644, 50) then local tier = math.random(1, 3) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 50 Mighty Tokens.") end return true elseif op == 3 then if doPlayerRemoveItem(cid, 15644, 80) then local tier = math.random(2, 4) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 80 Mighty Tokens.") end return true elseif op == 4 then if doPlayerRemoveItem(cid, 15644, 150) then local tier = math.random(4, 6) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 150 Mighty Tokens.") end return true elseif op == 5 then if doPlayerRemoveItem(cid, 15646, 10) then local tier = math.random(3, 3) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 10 Hornored Tokens.") end return true elseif op == 6 then if doPlayerRemoveItem(cid, 15646, 30) then local tier = math.random(3, 5) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 30 Hornored Tokens.") end return true elseif op == 7 then if doPlayerRemoveItem(cid, 15646, 300) then local tier = math.random(5, 7) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 300 Hornored Tokens.") end return true elseif op == 8 then if doPlayerRemoveItem(cid, 15646, 100) then doPlayerAddItem(cid, 14188, 1) else doSendMsg(cid, "Necesitas de 100 Hornored Tokens.") end return true elseif op == 9 then if doPlayerRemoveItem(cid, 15644, 10) then doPlayerAddItem(cid, 12832, 1) else doSendMsg(cid, "Necesitas de 10 Mighty Tokens.") end return true elseif op == 10 then if doPlayerRemoveItem(cid, 15644, 1) then doPlayerAddItem(cid, 15677, 10) doPlayerAddItem(cid, 15676, 10) doPlayerAddItem(cid, 15678, 10) doPlayerAddItem(cid, 15680, 10) doPlayerAddItem(cid, 15673, 10) doPlayerAddItem(cid, 15674, 10) doPlayerAddItem(cid, 15675, 10) doPlayerAddItem(cid, 15679, 10) doPlayerAddItem(cid, 15681, 10) else doSendMsg(cid, "Necesitas de 1 Mighty Tokens.") end return true elseif op == 11 then if doPlayerRemoveItem(cid, 15644, 10) then doPlayerAddItem(cid, 15130, 1) else doSendMsg(cid, "Necesitas de 10 Mighty Tokens.") end return true elseif op == 12 then if doPlayerRemoveItem(cid, 15644, 120) then doPlayerAddItem(cid, 12227, 1) else doSendMsg(cid, "Necesitas de 120 Mighty Tokens.") end return true elseif op == 13 then if doPlayerRemoveItem(cid, 15644, 50) then setPlayerStorageValue(cid, 99990, 1) else doSendMsg(cid, "Necesitas de 50 Mighty Tokens.") end return true elseif op == 14 then if doPlayerRemoveItem(cid, 15644, 10) then doPlayerAddItem(cid, 11641, 1) else doSendMsg(cid, "Necesitas de 10 Mighty Tokens.") end return true elseif op == 15 then if doPlayerRemoveItem(cid, 15644, 1) then doPlayerAddItem(cid, 6569, 1) else doSendMsg(cid, "Necesitas de 1 Mighty Token.") end return true end end end function getSlot(strings, slot) local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] local ret, flag = "", false for a, b in pairs(fotos) do if getItemInfo(fotos[a]).clientId == tonumber(slot1) and slot == 1 then ret = doCorrectString(a) flag = true elseif getItemInfo(fotos[a]).clientId == tonumber(slot2) and slot == 2 then ret = doCorrectString(a) flag = true elseif getItemInfo(fotos[a]).clientId == tonumber(slot3) and slot == 3 then ret = doCorrectString(a) flag = true end if flag then break end end return ret end function saveSlot(strings, slot, poke) local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] local finalSlots = (slot == 1 and poke .. "|" or slot1 .. "|") .. (slot == 2 and poke .. "|" or slot2 .. "|") .. (slot == 3 and poke .. "|" or slot3) return finalSlots end function isPokeInSlots(strings, poke) if not fotos[poke] then return false end poke = getItemInfo(fotos[poke]).clientId local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] if tonumber(slot1) == poke then return true elseif tonumber(slot2) == poke then return true elseif tonumber(slot3) == poke then return true end return false end Tenho certeza que se alguém conseguir resolver isso vai ajudar muitas outras pessoas, o serv eu baixei aqui no Tibia King e era um dos mais baixados tbm.
Postado Março 20, 2018 7 anos Este tópico foi movido para a área correta. Esta é uma mensagem automática!Pedimos que leia as regras do fórum! Spoiler This topic has been moved to the correct area. This is an automated message!Please read the forum rules.
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.