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.