redeindependent 1 Posted December 4, 2018 Share Posted December 4, 2018 Cara é bom demais no script REPUTADO+ Link to comment Share on other sites More sharing options...
boxxer321 67 Posted February 6, 2019 Share Posted February 6, 2019 (edited) a minha nurse joy não tem esses extended opcode, e ocorreu esse erro na parte do login... heal.lua (nurse joy) https://hastebin.com/aketokiqen.rb login.lua https://hastebin.com/iwuwepanaq.php erro que deu no console: [06/02/2019 19:50:26] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï' [06/02/2019 19:50:26] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/login.lua) [06/02/2019 19:50:26] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï' se puder me ajudar, agradeço mt Edited February 6, 2019 by boxxer321 Link to comment Share on other sites More sharing options...
Gengo 199 Posted February 7, 2019 Author Share Posted February 7, 2019 17 horas atrás, boxxer321 disse: a minha nurse joy não tem esses extended opcode, e ocorreu esse erro na parte do login... heal.lua (nurse joy) https://hastebin.com/aketokiqen.rb login.lua https://hastebin.com/iwuwepanaq.php erro que deu no console: [06/02/2019 19:50:26] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï' [06/02/2019 19:50:26] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/login.lua) [06/02/2019 19:50:26] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï' se puder me ajudar, agradeço mt 1º Seu otserv precisa ter opcodes. 2º Antes de sair copiando e colando, favor confira se não vem caracteres especiais, pois quando você copia algo daqui do forum e cola num editor de texto, eles vem com alguns caracteres indevido, é o que da para perceber no seu código. Caso não seja isso, a 1ª opção que falei é valida. steelpzeza 1 Link to comment Share on other sites More sharing options...
boxxer321 67 Posted February 7, 2019 Share Posted February 7, 2019 (edited) 2 horas atrás, Gengo disse: 1º Seu otserv precisa ter opcodes. 2º Antes de sair copiando e colando, favor confira se não vem caracteres especiais, pois quando você copia algo daqui do forum e cola num editor de texto, eles vem com alguns caracteres indevido, é o que da para perceber no seu código. Caso não seja isso, a 1ª opção que falei é valida. Não é nenhuma das duas, meu server possui opcodes e o código foi copiado devidamente... Tem ideia do qye pode ser? @Gengo por eu dizer que a minha nurse joy não tem essa parte de opcodes, quis dizer na parte do tutorial de substituir... por que o servidor possui o opcodes, porém, a NPC Nurse Joy, não usa Edited February 7, 2019 by boxxer321 Link to comment Share on other sites More sharing options...
Gengo 199 Posted February 7, 2019 Author Share Posted February 7, 2019 Mano no onLogin pelo que erro que você printou do console, me parece que é um carácter especial disso está explicito no erro; No npc da Nurse Joy basta colocar a função doSendPlayerExtendedOpcode, veja de exemplo como o meu está. Spoiler local posis = { --[storage da city] = {pos da nurse na city}, [897530] = {x = 1054, y = 1050, z = 7}, --saffron --alterado v1.9 \/ [897531] = {x = 1061, y = 900, z = 7}, --cerulean [897532] = {x = 1203, y = 1040, z = 7}, --lavender [897533] = {x = 1213, y = 1321, z = 7}, --fuchsia [897534] = {x = 860, y = 1094, z = 6}, --celadon [897535] = {x = 706, y = 1083, z = 7}, --viridian [897536] = {x = 1073, y = 1233, z = 7}, --vermilion [897537] = {x = 723, y = 844, z = 7}, --pewter [897538] = {x = 848, y = 1394, z = 7}, --cinnabar [897539] = {x = 1429, y = 1597, z = 6}, --snow [897540] = {x = 258, y = 429, z = 7}, --golden [897541] = {x = 243, y = 1028, z = 7}, -- Hammlin [897542] = {x = 268, y = 1163, z = 7}, -- Shamouti [897543] = {x = 252, y = 1260, z = 6}, -- Ascordbia [897544] = {x = 2612, y = 985, z = 7}, -- Vip 1 [897545] = {x = 2680, y = 675, z = 7}, -- Vip 2 [897546] = {x = 2559, y = 444, z = 5}, -- Vip 3 [897546] = {x = 2559, y = 444, z = 5}, -- Pallet [897546] = {x = 652, y = 1171, z = 7}, -- Coliseum [897546] = {x = 1163, y = 1450, z = 13}, -- Outland north [897546] = {x = 1509, y = 1290, z = 13}, -- outland west [897546] = {x = 1152, y = 1068, z = 13}, -- outland sul } function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Good bye sir!') focus = 0 talk_start = 0 end end function onCreatureTurn(creature) end function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onCreatureSay(cid, type, msg) local msg = string.lower(msg) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid for a, b in pairs(gobackmsgs) do local gm = string.gsub(b.go, "doka!", "") local bm = string.gsub(b.back, "doka!", "") if string.find(string.lower(msg), string.lower(gm)) or string.find(string.lower(msg), string.lower(bm)) then return true end end if((msgcontains(msg, 'hi') or msgcontains(msg, 'heal') or msgcontains(msg, 'oi')) and (getDistanceToCreature(cid) <= 3)) then if exhaustion.get(cid, 9211) then selfSay('Por Favor espere um momento para eu por curar novamente seus Pokemons!') return true end if not getTileInfo(getThingPos(cid)).protection and nurseHealsOnlyInPZ then selfSay("Por Favor, entre no Centro Pokemon para eu poder curar seus Pokemons!") return true end if isInDuel(cid) then selfSay("Não possu curar seus Pokemons enquanto você está em Duel!") --alterado v1.6.1 return true end exhaustion.set(cid, 9211, 1) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid)) doCureStatus(cid, "all", true) doSendMagicEffect(getThingPos(cid), 103) local mypb = getPlayerSlotItem(cid, 8) doSetItemAttribute(mypb.uid, "hpToDraw", 0) if isRiderOrFlyOrSurf(cid) then demountPokemon(cid, true) doRemoveCondition(cid, CONDITION_OUTFIT) doRegainSpeed(cid) end local s = getCreatureSummons(cid) local healthMax = 0 if #s >= 1 then healthMax = getCreatureMaxHealth(s[1]) doReturnPokemon(cid, s[1], mypb, pokeballs[getPokeballType(mypb.itemid)].effect) doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador")) end if mypb.itemid ~= 0 and isPokeball(mypb.itemid) then --alterado v1.3 doSetItemAttribute(mypb.uid, "hpToDraw", 0) doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, mypb).."|"..getBallMaxHealth(cid, mypb).."|"..getItemAttribute(mypb.uid, "identificador")) for c = 1, 15 do local str = "move"..c setCD(mypb.uid, str, 0) end if getItemAttribute(mypb.uid, "happy") and getItemAttribute(mypb.uid, "happy") < baseNurseryHappiness then doItemSetAttribute(mypb.uid, "happy", baseNurseryHappiness) end if getPlayerStorageValue(cid, 17000) <= 0 and getPlayerStorageValue(cid, 17001) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then for a, b in pairs (pokeballs) do if isInArray(b.all, mypb.itemid) then doTransformItem(mypb.uid, b.on) end end end end local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) local balls = getPokeballsInContainer(bp.uid) if #balls >= 1 then for _, uid in ipairs(balls) do doItemSetAttribute(uid, "hp", 1) doSetItemAttribute(uid, "hpToDraw", 0) for c = 1, 15 do local str = "move"..c setCD(uid, str, 0) end if getItemAttribute(uid, "hunger") and getItemAttribute(uid, "hunger") > baseNurseryHunger then doItemSetAttribute(uid, "hunger", baseNurseryHunger) end if getItemAttribute(uid, "happy") and getItemAttribute(uid, "happy") < baseNurseryHappiness then doItemSetAttribute(uid, "happy", baseNurseryHappiness) end local this = getThing(uid) for a, b in pairs (pokeballs) do if isInArray(b.all, this.itemid) then doTransformItem(uid, b.on) end end end end for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end sendDialogNpc(cid, getNpcCid(),'Todos os seus Pokemons foram curados, boa Sorte em sua jornada!') doCreatureSetSkullType(cid, 0) end end Obs: Seu link não estão mostrando mais nada. Link to comment Share on other sites More sharing options...
boxxer321 67 Posted February 8, 2019 Share Posted February 8, 2019 8 horas atrás, Gengo disse: Mano no onLogin pelo que erro que você printou do console, me parece que é um carácter especial disso está explicito no erro; No npc da Nurse Joy basta colocar a função doSendPlayerExtendedOpcode, veja de exemplo como o meu está. Mostrar conteúdo oculto local posis = { --[storage da city] = {pos da nurse na city}, [897530] = {x = 1054, y = 1050, z = 7}, --saffron --alterado v1.9 \/ [897531] = {x = 1061, y = 900, z = 7}, --cerulean [897532] = {x = 1203, y = 1040, z = 7}, --lavender [897533] = {x = 1213, y = 1321, z = 7}, --fuchsia [897534] = {x = 860, y = 1094, z = 6}, --celadon [897535] = {x = 706, y = 1083, z = 7}, --viridian [897536] = {x = 1073, y = 1233, z = 7}, --vermilion [897537] = {x = 723, y = 844, z = 7}, --pewter [897538] = {x = 848, y = 1394, z = 7}, --cinnabar [897539] = {x = 1429, y = 1597, z = 6}, --snow [897540] = {x = 258, y = 429, z = 7}, --golden [897541] = {x = 243, y = 1028, z = 7}, -- Hammlin [897542] = {x = 268, y = 1163, z = 7}, -- Shamouti [897543] = {x = 252, y = 1260, z = 6}, -- Ascordbia [897544] = {x = 2612, y = 985, z = 7}, -- Vip 1 [897545] = {x = 2680, y = 675, z = 7}, -- Vip 2 [897546] = {x = 2559, y = 444, z = 5}, -- Vip 3 [897546] = {x = 2559, y = 444, z = 5}, -- Pallet [897546] = {x = 652, y = 1171, z = 7}, -- Coliseum [897546] = {x = 1163, y = 1450, z = 13}, -- Outland north [897546] = {x = 1509, y = 1290, z = 13}, -- outland west [897546] = {x = 1152, y = 1068, z = 13}, -- outland sul } function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Good bye sir!') focus = 0 talk_start = 0 end end function onCreatureTurn(creature) end function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onCreatureSay(cid, type, msg) local msg = string.lower(msg) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid for a, b in pairs(gobackmsgs) do local gm = string.gsub(b.go, "doka!", "") local bm = string.gsub(b.back, "doka!", "") if string.find(string.lower(msg), string.lower(gm)) or string.find(string.lower(msg), string.lower(bm)) then return true end end if((msgcontains(msg, 'hi') or msgcontains(msg, 'heal') or msgcontains(msg, 'oi')) and (getDistanceToCreature(cid) <= 3)) then if exhaustion.get(cid, 9211) then selfSay('Por Favor espere um momento para eu por curar novamente seus Pokemons!') return true end if not getTileInfo(getThingPos(cid)).protection and nurseHealsOnlyInPZ then selfSay("Por Favor, entre no Centro Pokemon para eu poder curar seus Pokemons!") return true end if isInDuel(cid) then selfSay("Não possu curar seus Pokemons enquanto você está em Duel!") --alterado v1.6.1 return true end exhaustion.set(cid, 9211, 1) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid)) doCureStatus(cid, "all", true) doSendMagicEffect(getThingPos(cid), 103) local mypb = getPlayerSlotItem(cid, 8) doSetItemAttribute(mypb.uid, "hpToDraw", 0) if isRiderOrFlyOrSurf(cid) then demountPokemon(cid, true) doRemoveCondition(cid, CONDITION_OUTFIT) doRegainSpeed(cid) end local s = getCreatureSummons(cid) local healthMax = 0 if #s >= 1 then healthMax = getCreatureMaxHealth(s[1]) doReturnPokemon(cid, s[1], mypb, pokeballs[getPokeballType(mypb.itemid)].effect) doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador")) end if mypb.itemid ~= 0 and isPokeball(mypb.itemid) then --alterado v1.3 doSetItemAttribute(mypb.uid, "hpToDraw", 0) doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, mypb).."|"..getBallMaxHealth(cid, mypb).."|"..getItemAttribute(mypb.uid, "identificador")) for c = 1, 15 do local str = "move"..c setCD(mypb.uid, str, 0) end if getItemAttribute(mypb.uid, "happy") and getItemAttribute(mypb.uid, "happy") < baseNurseryHappiness then doItemSetAttribute(mypb.uid, "happy", baseNurseryHappiness) end if getPlayerStorageValue(cid, 17000) <= 0 and getPlayerStorageValue(cid, 17001) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then for a, b in pairs (pokeballs) do if isInArray(b.all, mypb.itemid) then doTransformItem(mypb.uid, b.on) end end end end local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) local balls = getPokeballsInContainer(bp.uid) if #balls >= 1 then for _, uid in ipairs(balls) do doItemSetAttribute(uid, "hp", 1) doSetItemAttribute(uid, "hpToDraw", 0) for c = 1, 15 do local str = "move"..c setCD(uid, str, 0) end if getItemAttribute(uid, "hunger") and getItemAttribute(uid, "hunger") > baseNurseryHunger then doItemSetAttribute(uid, "hunger", baseNurseryHunger) end if getItemAttribute(uid, "happy") and getItemAttribute(uid, "happy") < baseNurseryHappiness then doItemSetAttribute(uid, "happy", baseNurseryHappiness) end local this = getThing(uid) for a, b in pairs (pokeballs) do if isInArray(b.all, this.itemid) then doTransformItem(uid, b.on) end end end end for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end sendDialogNpc(cid, getNpcCid(),'Todos os seus Pokemons foram curados, boa Sorte em sua jornada!') doCreatureSetSkullType(cid, 0) end end Obs: Seu link não estão mostrando mais nada. fiz umas mudanças aqui, e não botei a nurse por enquanto... mas apareceu esses erros ao tentar logar com o personagem: [08/02/2019 04:54:27] [Error - CreatureScript Interface] [08/02/2019 04:54:27] data/creaturescripts/scripts/login.lua:onLogin [08/02/2019 04:54:27] Description: [08/02/2019 04:54:27] data/lib/some functions.lua:84: attempt to perform arithmetic on local 'pokeLifeMax' (a nil value) [08/02/2019 04:54:27] stack traceback: [08/02/2019 04:54:27] data/lib/some functions.lua:84: in function 'doSetAttributesBallsByPokeName' [08/02/2019 04:54:27] data/lib/some functions.lua:95: in function 'getBallHealth' [08/02/2019 04:54:27] data/lib/some functions.lua:43: in function 'sendPokeOTC' [08/02/2019 04:54:27] data/creaturescripts/scripts/login.lua:280: in function <data/creaturescripts/scripts/login.lua:6> eu venho tentando pegar as functions do dxp, por exemplo: 'doSetAttributesBallsByPokeName', 'getBallHealth' mas esse 'pokeLifeMax', eu não consegui achar e fica esse erro Se puder ajudar, ficarei grato Link to comment Share on other sites More sharing options...
Gengo 199 Posted February 8, 2019 Author Share Posted February 8, 2019 Mano tem que seguir o tutorial com atenção, em nenhum momento uso essa variavel pokeLifeMax e doSetAttributesBallsByPokeName, se vc está com problemas nessa variável e na função, isso não tem nada haver com o modulo de estar dando erros, veja a estrutura de como eu envio o nome, portrait, health e veja quais funções no seu servidor faz para pegar essas informações e por fim substitua para adaptar. O que não faz sentido é lotar o tópico com bugs do servidor que não tem muito haver com o modulo. Para não deixar vc na mão vou mostrar minhas function que pega o health e o nome do pokemon. Spoiler function getPokeballName(ball) return getItemAttribute(ball.uid, "poke") end function getBallHealth(cid, ball) for a, b in pairs (pokeballs) do if ball.itemid == b.off then return 0 end end if not getItemAttribute(ball.uid, "hpNow") then doSetAttributesBallsByPokeName(cid, ball.uid, getItemAttribute(ball.uid, "poke")) end local healthNow = getItemAttribute(ball.uid, "hpNow") return math.floor(healthNow) end function getBallMaxHealth(cid, ball) if not getItemAttribute(ball.uid, "hpMax") then doSetAttributesBallsByPokeName(cid, ball.uid, getItemAttribute(ball.uid, "poke")) end local healthNow = getItemAttribute(ball.uid, "hpMax") return math.floor(healthNow) end Link to comment Share on other sites More sharing options...
MT21 1 Posted March 12, 2019 Share Posted March 12, 2019 Em 27/10/2018 em 21:07, Gengo disse: Eai galera do xtibia, hoje venho por meio desse post trazer para vocês uma pokebar, sei que já existe porém este é um pouco diferente do que costumamos ver. Antes de tudo faça o download do arquivo e vamos a configuração. OBS: Seu otClient precisa ter opcodes para poder funcionar. 1) Coloque o module na pasta do seu otClient em /modules. 2) No arquivo do seu servidor em data/lib/106-mainfunctions.lua coloque o seguinte trecho de código: Mostrar conteúdo oculto function sendPokeOTC(cid) local pokemon = {} for indice, value in pairs(getPlayerPokeballs(cid)) do local Name = getPokeballName(value.uid) doItemSetAttribute(value.uid, "identificador", value.uid) pokemon[indice] = { ball = value.uid, portrait = getPortraitClientID(Name), name = Name, health = getBallHealth(cid, value), maxHealth = getBallMaxHealth(cid,value) } end return doSendPlayerExtendedOpcode(cid, 122, table.serialize(pokemon)) end 3) Ainda no mesmo arquivo 106-mainfunctions.lua procure pela função doOTCSendPokemonHealth e substitua ela pelo trecho a seguir: Mostrar conteúdo oculto function doOTCSendPokemonHealth(cid) local ball = getPlayerSlotItem(cid, CONST_SLOT_FEET) local pokemon = getCreatureSummons(cid) if not ball.uid or ball.uid <= 1 then return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, "0|0") end if #pokemon >= 1 then return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getCreatureHealth(pokemon[1]).."|"..getCreatureMaxHealth(pokemon[1]).."|".. getItemAttribute(ball.uid, "identificador")) end return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, ball).."|"..getBallMaxHealth(cid, ball).."|"..getItemAttribute(ball.uid, "identificador")) end 4) Caso seu servidor não tenha a função table.serialize, adicione ela no arquivo do servidor em data/lib/012-table.lua: Mostrar conteúdo oculto table.serialize = function(x, recur) local t = type(x) recur = recur or {} if(t == nil) then return "nil" elseif(t == "string") then return string.format("%q", x) elseif(t == "number") then return tostring(x) elseif(t == "boolean") then return t and "true" or "false" elseif(getmetatable(x)) then error("Can not serialize a table that has a metatable associated with it.") elseif(t == "table") then if(table.find(recur, x)) then error("Can not serialize recursive tables.") end table.insert(recur, x) local s = "{" for k, v in pairs(x) do s = s .. "[" .. table.serialize(k, recur) .. "]" s = s .. " = " .. table.serialize(v, recur) .. "," end s = s .. "}" return s else error("Can not serialize value of type '" .. t .. "'.") end end 5) No arquivo do seu servidor data/creaturescripts/script/login.lua coloque o seguinte trecho no final do onLogin antes do return sendPokeOTC(cid) 6) Abrindo o arquivo do npc Nurse Joy em especifico o script.lua, procure o trecho de codigo: doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax) Substitui por esse: doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador")) E no finalzinho da função do mesmo arquivo lua, antes do end, coloque o seguinte codigo: for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end 7) E por ultimo no arquivo opcodes.lua localizado na pasta data/creaturescript/script/opcodes.lua procure por: if buffer == "refresh" then doOTCSendPokemonHealth(cid) end E substitui por: if buffer == "refresh" then for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end end Bom é basicamente isso, a unica coisa que estará faltando e que vou deixar para vocês fazerem é quando o player colocar ou retirar outro pokemon na bag fazer com que o servidor chame a função sendPokeOTC(cid), não estarei ensinando essa parte pq o meu é bem diferente e não adiantaria eu mostrar como se faz, mas também não é um bixo de 7 cabeças fazer essa parte. Fazendo esse tutorial certinho e tudo mais, ficará assim no game: Espero que gostem e que entendam, desculpe-me por qualquer coisa não sou muito de explicar e ficar escrevendo tutorial. Download do arquivo: Hidden Content Reply to this topic to see the hidden content. Scan do arquivo: Hidden Content Reply to this topic to see the hidden content. bom Link to comment Share on other sites More sharing options...
MT21 1 Posted March 12, 2019 Share Posted March 12, 2019 Em 27/10/2018 em 21:07, Gengo disse: Eai galera do xtibia, hoje venho por meio desse post trazer para vocês uma pokebar, sei que já existe porém este é um pouco diferente do que costumamos ver. Antes de tudo faça o download do arquivo e vamos a configuração. OBS: Seu otClient precisa ter opcodes para poder funcionar. 1) Coloque o module na pasta do seu otClient em /modules. 2) No arquivo do seu servidor em data/lib/106-mainfunctions.lua coloque o seguinte trecho de código: Mostrar conteúdo oculto function sendPokeOTC(cid) local pokemon = {} for indice, value in pairs(getPlayerPokeballs(cid)) do local Name = getPokeballName(value.uid) doItemSetAttribute(value.uid, "identificador", value.uid) pokemon[indice] = { ball = value.uid, portrait = getPortraitClientID(Name), name = Name, health = getBallHealth(cid, value), maxHealth = getBallMaxHealth(cid,value) } end return doSendPlayerExtendedOpcode(cid, 122, table.serialize(pokemon)) end 3) Ainda no mesmo arquivo 106-mainfunctions.lua procure pela função doOTCSendPokemonHealth e substitua ela pelo trecho a seguir: Mostrar conteúdo oculto function doOTCSendPokemonHealth(cid) local ball = getPlayerSlotItem(cid, CONST_SLOT_FEET) local pokemon = getCreatureSummons(cid) if not ball.uid or ball.uid <= 1 then return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, "0|0") end if #pokemon >= 1 then return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getCreatureHealth(pokemon[1]).."|"..getCreatureMaxHealth(pokemon[1]).."|".. getItemAttribute(ball.uid, "identificador")) end return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, ball).."|"..getBallMaxHealth(cid, ball).."|"..getItemAttribute(ball.uid, "identificador")) end 4) Caso seu servidor não tenha a função table.serialize, adicione ela no arquivo do servidor em data/lib/012-table.lua: Mostrar conteúdo oculto table.serialize = function(x, recur) local t = type(x) recur = recur or {} if(t == nil) then return "nil" elseif(t == "string") then return string.format("%q", x) elseif(t == "number") then return tostring(x) elseif(t == "boolean") then return t and "true" or "false" elseif(getmetatable(x)) then error("Can not serialize a table that has a metatable associated with it.") elseif(t == "table") then if(table.find(recur, x)) then error("Can not serialize recursive tables.") end table.insert(recur, x) local s = "{" for k, v in pairs(x) do s = s .. "[" .. table.serialize(k, recur) .. "]" s = s .. " = " .. table.serialize(v, recur) .. "," end s = s .. "}" return s else error("Can not serialize value of type '" .. t .. "'.") end end 5) No arquivo do seu servidor data/creaturescripts/script/login.lua coloque o seguinte trecho no final do onLogin antes do return sendPokeOTC(cid) 6) Abrindo o arquivo do npc Nurse Joy em especifico o script.lua, procure o trecho de codigo: doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax) Substitui por esse: doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador")) E no finalzinho da função do mesmo arquivo lua, antes do end, coloque o seguinte codigo: for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end 7) E por ultimo no arquivo opcodes.lua localizado na pasta data/creaturescript/script/opcodes.lua procure por: if buffer == "refresh" then doOTCSendPokemonHealth(cid) end E substitui por: if buffer == "refresh" then for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end end Bom é basicamente isso, a unica coisa que estará faltando e que vou deixar para vocês fazerem é quando o player colocar ou retirar outro pokemon na bag fazer com que o servidor chame a função sendPokeOTC(cid), não estarei ensinando essa parte pq o meu é bem diferente e não adiantaria eu mostrar como se faz, mas também não é um bixo de 7 cabeças fazer essa parte. Fazendo esse tutorial certinho e tudo mais, ficará assim no game: Espero que gostem e que entendam, desculpe-me por qualquer coisa não sou muito de explicar e ficar escrevendo tutorial. Download do arquivo: Hidden Content Reply to this topic to see the hidden content. Scan do arquivo: Hidden Content Reply to this topic to see the hidden content. bom Link to comment Share on other sites More sharing options...
Taiger 286 Posted March 24, 2019 Share Posted March 24, 2019 Consegui adicionar no servidor que estou mechendo, porem clico na pokebar e nao acontece nada. Nao sei se é normal cada poke na pokebar da para arrastar para algum lugar da tela individualmente, nao fica em uma unica barra colados. Link to comment Share on other sites More sharing options...
Gengo 199 Posted March 24, 2019 Author Share Posted March 24, 2019 40 minutos atrás, Taiger disse: Consegui adicionar no servidor que estou mechendo, porem clico na pokebar e nao acontece nada. Nao sei se é normal cada poke na pokebar da para arrastar para algum lugar da tela individualmente, nao fica em uma unica barra colados. Se vc clicar na pokebar, não é pra acontecer nada mesmo, não fiz ela pra ser clicado e chamar o pokemon. Fiz para poder arrastar individualmente sim. Na verdade isso é só um módulo para outros poderem ter uma noção de como fazer uma pokebar para seus pokemons. Link to comment Share on other sites More sharing options...
Taiger 286 Posted March 24, 2019 Share Posted March 24, 2019 3 horas atrás, Gengo disse: Se vc clicar na pokebar, não é pra acontecer nada mesmo, não fiz ela pra ser clicado e chamar o pokemon. Fiz para poder arrastar individualmente sim. Na verdade isso é só um módulo para outros poderem ter uma noção de como fazer uma pokebar para seus pokemons. Ah entendi, obrigado. Link to comment Share on other sites More sharing options...
Deadpool 862 Posted March 24, 2019 Share Posted March 24, 2019 Em 06/02/2019 em 18:57, boxxer321 disse: a minha nurse joy não tem esses extended opcode, e ocorreu esse erro na parte do login... heal.lua (nurse joy) https://hastebin.com/aketokiqen.rb login.lua https://hastebin.com/iwuwepanaq.php erro que deu no console: [06/02/2019 19:50:26] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï' [06/02/2019 19:50:26] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/login.lua) [06/02/2019 19:50:26] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï' se puder me ajudar, agradeço mt Abre no notepad e vai em formatar converter para ANSI, dai os carater vao aparecer em forma de "???" so remover Link to comment Share on other sites More sharing options...
ZeNit91 11 Posted August 27, 2019 Share Posted August 27, 2019 Opa desculpe reviver o topico =/ estou com um problema, fui tentar add no server que estou utilizado e me retornou o seguinte erro no console : Spoiler Link to comment Share on other sites More sharing options...
Ayron5 40 Posted October 26, 2019 Share Posted October 26, 2019 Em 27/10/2018 em 21:07, Gengo disse: Eai galera do xtibia, hoje venho por meio desse post trazer para vocês uma pokebar, sei que já existe porém este é um pouco diferente do que costumamos ver. Antes de tudo faça o download do arquivo e vamos a configuração. OBS: Seu otClient precisa ter opcodes para poder funcionar. 1) Coloque o module na pasta do seu otClient em /modules. 2) No arquivo do seu servidor em data/lib/106-mainfunctions.lua coloque o seguinte trecho de código: Ocultar conteúdo function sendPokeOTC(cid) local pokemon = {} for indice, value in pairs(getPlayerPokeballs(cid)) do local Name = getPokeballName(value.uid) table.insert(pokemon, "{".. "portrait = '"..getPortraitClientID.."',".. "name = '"..Name.."',".. "health = '"..getBallHealth(cid, value).."',".. "maxHealth = '"..getBallMaxHealth(cid,value).."',".. "},") end return doSendPlayerExtendedOpcode(cid, 122, table.concat(pokemon)) end 3) Ainda no mesmo arquivo 106-mainfunctions.lua procure pela função doOTCSendPokemonHealth e substitua ela pelo trecho a seguir: Ocultar conteúdo function doOTCSendPokemonHealth(cid) local ball = getPlayerSlotItem(cid, CONST_SLOT_FEET) local pokemon = getCreatureSummons(cid) if not ball.uid or ball.uid <= 1 then return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, "0|0") end if #pokemon >= 1 then return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getCreatureHealth(pokemon[1]).."|"..getCreatureMaxHealth(pokemon[1]).."|".. getItemAttribute(ball.uid, "identificador")) end return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, ball).."|"..getBallMaxHealth(cid, ball).."|"..getItemAttribute(ball.uid, "identificador")) end 4) Caso seu servidor não tenha a função table.serialize, adicione ela no arquivo do servidor em data/lib/012-table.lua: Ocultar conteúdo table.serialize = function(x, recur) -- REMOVIDO DEVIDO HA ERROS NÃO SE PREOCUPE, SEGUE O TUTORIAL POIS JÁ FOI ALTERADO PARA FUNCIONAR SEM ESSA FUNÇÃO --- end 5) No arquivo do seu servidor data/creaturescripts/script/login.lua coloque o seguinte trecho no final do onLogin antes do return sendPokeOTC(cid) 6) Abrindo o arquivo do npc Nurse Joy em especifico o script.lua, procure o trecho de codigo: doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax) Substitui por esse: doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador")) E no finalzinho da função do mesmo arquivo lua, antes do end, coloque o seguinte codigo: for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end 7) E por ultimo no arquivo opcodes.lua localizado na pasta data/creaturescript/script/opcodes.lua procure por: if buffer == "refresh" then doOTCSendPokemonHealth(cid) end E substitui por: if buffer == "refresh" then for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end end Bom é basicamente isso, a unica coisa que estará faltando e que vou deixar para vocês fazerem é quando o player colocar ou retirar outro pokemon na bag fazer com que o servidor chame a função sendPokeOTC(cid), não estarei ensinando essa parte pq o meu é bem diferente e não adiantaria eu mostrar como se faz, mas também não é um bixo de 7 cabeças fazer essa parte. Fazendo esse tutorial certinho e tudo mais, ficará assim no game: Espero que gostem e que entendam, desculpe-me por qualquer coisa não sou muito de explicar e ficar escrevendo tutorial. Download do arquivo: https://www.mediafire.com/file/p8wch1fogveh48e/game_poke.rar/file Scan do arquivo: https://www.virustotal.com/#/file/d88b33ad27520ddd28afdaeb7d17af26805fa3bf39400f1a30813a0da3ca1695/detection Tive esse erro no terminal OTC. Spoiler ERROR: protected lua call failed: LUA ERROR: /game_poke/poke.lua:50: attempt to call a nil value stack traceback: [C]: ? /game_poke/poke.lua:50: in function 'createPokeWidget' /game_poke/poke.lua:7: in function 'callback' /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14> ERROR: protected lua call failed: LUA ERROR: /game_poke/poke.lua:50: attempt to call a nil value stack traceback: [C]: ? /game_poke/poke.lua:50: in function 'createPokeWidget' /game_poke/poke.lua:7: in function 'callback' /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14> Link to comment Share on other sites More sharing options...
Recommended Posts