brun123 369 Postado Maio 27, 2011 Share Postado Maio 27, 2011 (editado) • nome: Sistema de Ginásio / GYM para pokemon. • autor: brun123 (mastercraft) • versão testada: TFS 0.36 pl 1 (8.54) Acredito que todos saibam do que estou falando, e como é um script de certo modo "avançado" e muito procurado, decidi fazer um. Enfim: Em servidores de pokemon, líderes de ginásios são NPCs em que os players possam lutar no estilo 1 contra 1, com máximo de 6 pokemons. No sistema, não há limite de pokemons, ou seja, fazer um NPC com 200 pokemons é possível, mas saiba que é trabalhoso e demorado. Detalhes: Como cada servidor de pokemon é bem diferente, acredito que muitos erros vão aparecer devido a diferença de IDs das pokebolas por exemplo, mas vou ajudar no que posso. Primeiro passo: crie um arquivo com o nome gymlib.lua na pasta data/lib/, e coloque isso dentro do arquivo: funcpokemon = {2220, 2222} -- ID das pokebolas (o pokemon tem que estar vivo nessas IDs) bpslot = CONST_SLOT_BACKPACK --em outros servers, pode ser que seja CONST_SLOT_AMMO o lugar onde fica a backpack no inventory ginasios = { ["Brock"] = { storage = 990, msgdefeat = "You lost! You aren't strong enough yet, don't come back until you get stronger!", msgafk = "Go away if you don't have any pokemons!", msgwin = "Congratulations, you were strong enough to win this battle fairly! Take this Earth Badge as reward.", [1] = { msggo = "Lets fight then! I choose you, Geodude!", msgba = "That's enough, Geodude!", pokem = "Brock Geodude", nextp = "Brock Graveler"}, [2] = { msggo = "It's your turn, Graveler!", msgba = "Come back, Graveler!", pokem = "Brock Graveler", nextp = "Brock Golem"}, [3] = { msggo = "Crush'em, Golem!", msgba = "You did well, Golem!", pokem = "Brock Golem", nextp = "finish"} } } function noPokeAtAll(cid, gympoke, npcname, msgafk) if not isCreature(cid) then return false end if not isCreature(gympoke) then return false end if #getCreatureSummons(cid) == 0 and getPlayerStorageValue(cid, 991) == 0 and getPlayerStorageValue(cid, ginasios[npcname].storage) ~= 2 then setPlayerStorageValue(cid, 991, -1) doCreatureSay(getCreatureByName(npcname), msgafk, 1) doSendMagicEffect(getThingPos(gympoke), 10) setPlayerStorageValue(cid, ginasios[npcname].storage, 0) doRemoveCreature(gympoke) return true end end function gymChecker(cid, duel, nb, npcname) if not isCreature(cid) then return true end if not isCreature(duel) then doSendMagicEffect(getThingPos(cid), 10) doRemoveCreature(cid) return true end if getDistanceBetween(getThingPos(getCreatureByName(npcname)), getThingPos(duel)) >= 8 then doSendMagicEffect(getThingPos(cid), 10) doRemoveCreature(cid) setPlayerStorageValue(duel, ginasios[npcname].storage, 0) return true end if isCreature(duel) and getPlayerStorageValue(duel, 991) == 0 then addEvent(noPokeAtAll, 6000, duel, cid, npcname, ginasios[npcname].msgafk) end if isCreature(duel) and getPlayerStorageValue(duel, 991) == -1 then doSendMagicEffect(getThingPos(cid), 10) doRemoveCreature(cid) setPlayerStorageValue(duel, ginasios[npcname].storage, 0) doCreatureSay(getCreatureByName(npcname), ginasios[npcname].msgdefeat, 1) return true end if isCreature(duel) and not hasPokemon(duel) then setPlayerStorageValue(duel, 991, -1) end if not isCreature(getCreatureTarget(cid)) then if nb == 0 then addEvent(gymChecker, 200, cid, duel, 1, npcname) else doSendMagicEffect(getThingPos(cid), 10) doRemoveCreature(cid) if isCreature(duel) then setPlayerStorageValue(duel, ginasios[npcname].storage, 0) end end return true end addEvent(gymChecker, 1000, cid, duel, 0, npcname) end function hasPokemon(cid) if #getCreatureSummons(cid) >= 1 then return true end if isInArray(funcpokemon, getPlayerSlotItem(cid, CONST_SLOT_FEET).itemid) then return true end local bp = getPlayerSlotItem(cid, bpslot) for cc = 1, #funcpokemon do if #getItemsInContainerById(bp.uid, funcpokemon[cc]) >= 1 then return true end end return false end function doGymBattle(npcname, gympoke, cid, turn) doCreatureSay(getCreatureByName(npcname), ginasios[npcname][turn].msggo, 1) local x = doSummonCreature(gympoke, getThingPos(getCreatureByName(npcname))) registerCreatureEvent(x, "Gym1") registerCreatureEvent(x, "Gym2") registerCreatureEvent(x, "Gym3") registerCreatureEvent(x, "Gym4") setPlayerStorageValue(x, 201, ".") setPlayerStorageValue(x, 201, npcname) setPlayerStorageValue(x, 202, turn) doSendMagicEffect(getThingPos(x), 10) setPlayerStorageValue(x, ginasios[npcname].storage, 1) addEvent(gymChecker, 1000, x, cid, 0, npcname) end --ex: doGymBattle("Brock", "Brock Geodude", cid, 1) Segundo passo: crie um arquivo chamado gym.lua na pasta data/creaturescripts/scripts/ e coloque isso dentro: function onDeath(cid, corpse) doSendMagicEffect(getThingPos(cid), 10) local npc = ""..getPlayerStorageValue(cid, 201).."" local turn = getPlayerStorageValue(cid, 202) local nturn = ((turn) + 1) local nxt = ginasios[npc][turn].nextp doCreatureSay(getCreatureByName(npc), ginasios[npc][turn].msgba, 1) if nxt == "finish" then local killer = getItemAttribute(corpse.uid, "corpseowner") addEvent(doCreatureSay, 1200, getCreatureByName(npc), ginasios[npc].msgwin, 1) setPlayerStorageValue(getCreatureMaster(killer), ginasios[npc].storage, 2) --local item = getPlayerItemById(killer, true, 2307) --doTransformItem(item.uid, 2294) doRemoveCreature(cid) return false end local function summonNext(poke, pos, gym, msg, cid) local x = doSummonCreature(poke, pos) addEvent(gymChecker, 1000, x, cid, 0) doSendMagicEffect(getThingPos(x), 10) doCreatureSay(getCreatureByName(gym), msg, 1) end local killer = getItemAttribute(corpse.uid, "corpseowner") addEvent(doGymBattle, 1200, npc, ginasios[npc][turn].nextp, killer, nturn) doRemoveCreature(cid) return false end local fightconditionnn = createConditionObject(CONDITION_INFIGHT) setConditionParam(fightconditionnn, CONDITION_PARAM_TICKS, 18 * 1000) function onAttack(cid, target) if getPlayerStorageValue(getCreatureMaster(target), ginasios[getPlayerStorageValue(cid, 201)].storage) ~= 1 then doMonsterChangeTarget(cid) doChangeSpeed(cid, -getCreatureSpeed(cid)) return true end if isPlayer(target) then if #getCreatureSummons(target) == 0 then doMonsterChangeTarget(cid) doChangeSpeed(cid, -getCreatureSpeed(cid)) return true end if #getCreatureSummons(target) >= 1 then doMonsterSetTarget(cid, getCreatureSummons(target)[1]) end end if getCreatureSpeed(cid) == 0 then doChangeSpeed(cid, -getCreatureSpeed(cid)) doChangeSpeed(cid, 200) end doAddCondition(getCreatureMaster(target), fightconditionnn) return true end function onCast(cid, target) if isPlayer(target) then return false end local targete = getCreatureTarget(cid) if isPlayer(getCreatureMaster(targete)) and getPlayerStorageValue(getCreatureMaster(targete), ginasios[getPlayerStorageValue(cid, 201)].storage) ~= 1 then return false end return true end function onDirection(cid, old, current) if isCreature(getCreatureTarget(cid)) and not isPlayer(getCreatureTarget(cid)) and getPlayerStorageValue(getCreatureMaster(getCreatureTarget(cid)), ginasios[getPlayerStorageValue(cid, 201)].storage) == 1 then return true end return false end Terceiro passo: abra o arquivo creaturescripts.xml (localizado em data/creaturescripts) e adicione essas 4 tags: <event type="cast" name="Gym1" event="script" value="gym.lua"/> <event type="attack" name="Gym2" event="script" value="gym.lua"/> <event type="direction" name="Gym3" event="script" value="gym.lua"/> <event type="death" name="Gym4" event="script" value="gym.lua"/> Quarto passo: crie um arquivo chamado brock.xml em data/npc e crie um chamado brock.lua em data/npc/scripts e coloque isso dentro: local focus = 0 local talk_start = 0 local target = 0 local following = false local attacking = false local talkState = {} 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 if getPlayerStorageValue(cid, ginasios["Brock"].storage) >= 1 then return true end if (msgcontains(msg, 'hi') and (focus == 0) and (focus ~= cid) and (getDistanceToCreature(cid) <= 4)) then focus = cid talkState[talkUser] = 1 selfSay("Welcome to the gym of Pewter City. My name is Brock and I am the leader of this gym. Would you like to battle me?") elseif (msgcontains(msg, "no") or msgcontains(msg, "bye")) and focus == cid and talkState[talkUser] ~= 3 then selfSay("Bye then, tell strong friends to come here and try to beat me!") focus = 0 elseif (msgcontains(msg, "yes") or msgcontains(msg, "battle")) and focus == cid and talkState[talkUser] == 1 then if not hasPokemon(cid) then selfSay("You don't have any pokemon to battle me!") focus = 0 return true end talkState[talkUser] = 3 doGymBattle("Brock", "Brock Geodude", cid, 1) setPlayerStorageValue(cid, ginasios["Brock"].storage, 1) setPlayerStorageValue(cid, 991, 0) local function focusCheck(cid) if not isCreature(cid) then focus = 0 return true end if getPlayerStorageValue(cid, 991) == -1 then focus = 0 return true end addEvent(focusCheck, 500, cid) end addEvent(focusCheck, 1000, cid) end end function onThink() if focus ~= 0 then a, b, c = selfGetPosition() if c ~= getThingPos(focus).z then focus = 0 end end if focus ~= 0 then if getDistanceToCreature(focus) > 6 then focus = 0 end end return true end Quinto passo: se você usar o pokemon dash, vá no arquivo playerattack.lua (data/creatureevents/scripts) e adicione esses códigos embaixo da linha "function onAttack(cid, target)": if getPlayerStorageValue(target, 201) ~= -1 then for a, b in pairs(ginasios) do if getPlayerStorageValue(target, ginasios[getPlayerStorageValue(target, 201)].storage) == 1 then if getPlayerStorageValue(cid, ginasios[getPlayerStorageValue(target, 201)].storage) ~= 1 then doPlayerSendCancel(cid, "You can't attack this pokemon.") return false end end end end end Se você não usa o pokemon dash, crie um arquivo chamado playerattack.lua na pasta data/creatureevents/scripts e coloque isso dentro: function onAttack(cid, target) if getPlayerStorageValue(target, 201) ~= -1 then for a, b in pairs(ginasios) do if getPlayerStorageValue(target, ginasios[getPlayerStorageValue(target, 201)].storage) == 1 then if getPlayerStorageValue(cid, ginasios[getPlayerStorageValue(target, 201)].storage) ~= 1 then doPlayerSendCancel(cid, "You can't attack this pokemon.") return false end end end end return true end e adicione essa tag no creaturescripts.xml (data/creaturescripts): <event type="attack" name="PlayerAttack" event="script" value="playerattack.lua"/> e ainda, abra o arquivo login.lua e embaixo dessa linha: "function onLogin(cid)" adicione esse código: registerCreatureEvent(cid, "PlayerAttack") Último passo: vá em data/creaturescripts/scripts e abra o arquivo goback.lua (aqui por exemplo, pode ser que haja uma particulariedade de servidor para servidor), e procure pela linha: function onDeath(cid, deathList) e abaixo dela, adicione esse código: local owner = getCreatureMaster(cid) for x, y in pairs(ginasios) do if getPlayerStorageValue(owner, y.storage) == 1 then if getPlayerStorageValue(owner, 991) == 5 or not hasPokemon(owner) then setPlayerStorageValue(owner, 991, -1) else local number = tonumber(getPlayerStorageValue(owner, 991)) setPlayerStorageValue(owner, 991, number + 1) end end end Configuração dos NPCs: Abrindo o arquivo brock.lua na pasta data/npc/scripts, procure por esta linha: "doGymBattle("Brock", "Brock Geodude", cid, 1)" o "Brock" precisa ser o nome do NPC e o "Brock Geodude" precisa ser o nome do primeiro pokemon a ser usado. Agora nessa parte, no script do seu NPC, você também deve editar o nome do NPC no lugar de "brock". Se quiser que o player possa lutar com o NPC mesmo depois de tê-lo vencido, é só remover a mesma parte: if getPlayerStorageValue(cid, ginasios["Brock"].storage) >= 1 then return true end Ao abrir o arquivo gymlib.lua, você encontra essas duas linhas (são as primeiras): funcpokemon = {2220, 2222} -- ID das pokebolas (o pokemon tem que estar vivo nessas IDs) bpslot = CONST_SLOT_BACKPACK --em outros servers, pode ser que seja CONST_SLOT_AMMO o lugar onde fica a backpack no inventory Onde está funcpokemon, você coloca o ID de todas as pokebolas do seu server, mas esse ID tem que ser o ID da pokebola com algum pokemon vivo dentro, e esses IDs devem ser separados por vírgula. Onde está bpslot, você escreve onde fica a BACKPACK do seu server de pokemon. Se ficar no lugar normal de BPs, deixe como está, mas se sua BP fica no slot da munição (ammunition), você deve estar para CONST_SLOT_AMMO. Isso é tudo, agora vocês podem configurar os IDs e localização da BP facilmente, sem precisar conhecimentos mais avançados sobre scripting, e evitar erros no sistema. Abrindo o arquivo gymlib.lua, localizado em data/lib/ você encontra essa tabela: ginasios = { ["Brock"] = { storage = 900, msgdefeat = "You lost! You aren't strong enough yet, don't come back until you get stronger!", msgafk = "Go away if you don't have any pokemons!", msgwin = "Congratulations, you were strong enough to win this battle fairly! Take this Earth Badge as reward.", [1] = { msggo = "Lets fight then! I choose you, Geodude!", msgba = "That's enough, Geodude!", pokem = "Brock Geodude", nextp = "Brock Graveler"}, [2] = { msggo = "It's your turn, Graveler!", msgba = "Come back, Graveler!", pokem = "Brock Graveler", nextp = "Brock Golem"}, [3] = { msggo = "Crush'em, Golem!", msgba = "You did well, Golem!", pokem = "Brock Golem", nextp = "finish"} } } • storage significa a única storage que deve variar de NPC para NPC, tenha certeza de que essa storage não está sendo usada, é você não deve usar a storage 901 aqui, pois a mesma já está em uso pelo próprio sistema. • msgdefeat significa o que o NPC irá dizer quando o player perder o duelo. • msgafk significa o que o NPC irá dizer caso o player comece o duelo, mas não faça nada depois. • msgwin significa o que o NPC irá dizer quando o player vencer o duelo. • msggo / msgba significam os textos que o NPC irá dizer ao sumonar o pokemon dele, ou quando o mesmo morrer, respectivamente.• pokem / nextp significam o nome do pokemon que será utilizado, e o próximo pokemon a ser sumonado pelo NPC, respectivamente. Caso o nextp seja especificado como "finish", não haverá um próximo pokemon. • o número entre [] significa a ordem utilizada pelo líder para usar o tal pokemon, sendo 1 o primeiro pokemon, 2 o segundo e assim vai... Uma tabela detalhada sobre a configuração: ginasios = { ["nome do npc"] = { storage = xxx (algum número para a storage), msgdefeat = "texto quando o player perder", msgafk = "texto caso o player fique afk", msgwin = "texto caso o player ganhe", [1] = { msggo = "texto quando o npc sumonar o primeiro pokemon", msgba = "texto quando o primeiro pokemon morrer", pokem = "nome do primeiro pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [2] = { msggo = "texto quando o npc sumonar o segundo pokemon", msgba = "texto quando o segundo pokemon morrer", pokem = "nome do segundo pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [3] = { msggo = "texto quando o npc sumonar o terceiro pokemon", msgba = "texto quando o terceiro pokemon morrer", pokem = "nome do terceiro pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [4] = { msggo = "texto quando o npc sumonar o quarto pokemon", msgba = "texto quando o quarto pokemon morrer", pokem = "nome do quarto pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [5] = { msggo = "texto quando o npc sumonar o quinto pokemon", msgba = "texto quando o quinto pokemon morrer", pokem = "nome do quinto pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [6] = { msggo = "texto quando o npc sumonar o sexto pokemon", msgba = "texto quando o sexto pokemon morrer", pokem = "nome do sexto pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado (finish, caso queria que só hajam 6"}, }, ["nome de outro npc"] = { storage = xxx (algum número para a storage), msgdefeat = "texto quando o player perder", msgafk = "texto caso o player fique afk", msgwin = "texto caso o player ganhe", [1] = { msggo = "texto quando o npc sumonar o primeiro pokemon", msgba = "texto quando o primeiro pokemon morrer", pokem = "nome do primeiro pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [2] = { msggo = "texto quando o npc sumonar o segundo pokemon", msgba = "texto quando o segundo pokemon morrer", pokem = "nome do segundo pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [3] = { msggo = "texto quando o npc sumonar o terceiro pokemon", msgba = "texto quando o terceiro pokemon morrer", pokem = "nome do terceiro pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [4] = { msggo = "texto quando o npc sumonar o quarto pokemon", msgba = "texto quando o quarto pokemon morrer", pokem = "nome do quarto pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [5] = { msggo = "texto quando o npc sumonar o quinto pokemon", msgba = "texto quando o quinto pokemon morrer", pokem = "nome do quinto pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, [6] = { msggo = "texto quando o npc sumonar o sexto pokemon", msgba = "texto quando o sexto pokemon morrer", pokem = "nome do sexto pokemon a ser sumonado", nextp = "nome do próximo pokemon a ser sumonado"}, } } Importante: caso for testar o sistema como foi postado aqui, é necessário criar antes os monstros Brock Geodude, Brock Graveler e Brock Golem, assim como adicioná-los no monsters.xml. Recomendações: é bom você impedir que o pokemon consiga retornar para a pokebola durante duelos (assim como foi feito no SvkE), para isso, basta adicionar esse código no arquivo goback.lua (data/actions) na parte inicial de retornar o pokemon: for a, b in pairs(ginasios) do if getPlayerStorageValue(cid, b.storage) == 1 then -- GYM doPlayerSendCancel(cid, "You can't return your pokemon during gym battles.") return true end end Aconselho fazer o mesmo caso seu server tenha script de revive. Deve-se também checar pelos storages usado em players, somente o 990 e o 991. No servidor testado, é utilizado apenas pokeballs e ultraballs, com IDs 2220 e 2222 (outra particularidade). Após ter instalado os arquivos, entre no jogo e use o comando /n Brock para testar o NPC. Último aviso: o prêmio ainda não foi adicionado (que seria a badge), pois esse sim é bem variado de servidor pra servidor. Já que nenhum servidor base já vem com os IDs das badges, cada um adicionou elas de modo diferente, por isso não pude fazer, mas existe uma parte sobre um prêmio no arquivo gym.lua (data/creaturescripts/scripts), procure por isso: --local item = getPlayerItemById(killer, true, 2307) --doTransformItem(item.uid, 2294) Você pode modificar para adicionar dinheiro ou outra coisa, e pode também desenvolver um sistema de badges. Eu não vou fazer badge aqui, mas se vocês tentarem, posso ajudar com problemas. Quaisquer erros, tentarei responder o mais rápido possível. Editado Junho 3, 2011 por brun123 Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/ Compartilhar em outros sites More sharing options...
superdrako 10 Postado Maio 27, 2011 Share Postado Maio 27, 2011 Bom , eu estava testando no meu servidor que é o pokemon dash e quando derrotei o geodude do Brock , quando ele soltou o graveler no mesmo tempo graveler morreu e deu esse erro: [27/05/2011 17:05:37] [Error - CreatureScript Interface] [27/05/2011 17:05:37] data/creaturescripts/scripts/gym.lua:onDeath [27/05/2011 17:05:37] Description: [27/05/2011 17:05:37] (luaGetItemAttribute) Item not found Se puder ajudar agradeço ^.^ Rep + Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038556 Compartilhar em outros sites More sharing options...
Daimonium 5 Postado Maio 27, 2011 Share Postado Maio 27, 2011 Sistema muito bom, ja lhe dei o rep... Achei que voce tinha parado com pokemon , tomare que volte, pois ninguem mais se interessou em avançar o projeto. Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038558 Compartilhar em outros sites More sharing options...
Huntre 1 Postado Maio 27, 2011 Share Postado Maio 27, 2011 vo testa e ja edito ;D Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038597 Compartilhar em outros sites More sharing options...
brun123 369 Postado Maio 27, 2011 Autor Share Postado Maio 27, 2011 @Drdrake9 Use esse código no xml do seu Graveler: <?xml version="1.0" encoding="UTF-8"?> <monster name="Graveler" nameDescription="brock's graveler" race="rock" experience="0" speed="179" manacost="0"> <health now="8900" max="8900"/> <look type="247" corpse="6516"/> <targetchange interval="10000" chance="0"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="1"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="1"/> <flag convinceable="1"/> <flag pushable="1"/> <flag canpushitems="0"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="1800" min="-145" max="-185"/> <attack name="rock throw" interval="2400" chance="19" min="-240" max="-255"> </attack> <attack name="rock tomb" interval="2800" range="1" chance="20" min="-242" max="-270"> </attack> <attack name="sand attack" interval="2150" range="1" chance="17" min="-227" max="-235"> </attack> <attack name="harden" interval="3300" range="10" chance="21" min="-156" max="-172"> </attack> <attack name="rock slide" interval="3300" range="10" chance="21" min="-306" max="-372"> </attack> <attack name="falling rocks" interval="3300" range="10" chance="21" min="-256" max="-272"> </attack> </attacks> <defenses armor="0" defense="8"> </defenses> <voices interval="5000" chance="10"> <voice sentence="GRAVELER!"/> <voice sentence="GRAVE!"/> <voice sentence="LER!"/> </voices> <script> <event name="Exp"/> </script> </monster> Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038598 Compartilhar em outros sites More sharing options...
superdrako 10 Postado Maio 27, 2011 Share Postado Maio 27, 2011 (editado) O erro ainda persiste , acho q ta bugado em alguma coisa , e quando graveler morre , ele nao fala + com o player assim tem q criar outro pra duelar :S Agora ta dando otro erro olha : [27/05/2011 20:26:39] [Error - CreatureScript Interface] [27/05/2011 20:26:39] data/creaturescripts/scripts/playerattack.lua:onAttack [27/05/2011 20:26:39] Description: [27/05/2011 20:26:39] data/creaturescripts/scripts/playerattack.lua:3: attempt to index field '?' (a nil value) [27/05/2011 20:26:39] stack traceback: [27/05/2011 20:26:39] data/creaturescripts/scripts/playerattack.lua:3: in function <data/creaturescripts/scripts/playerattack.lua:1> Editado Maio 27, 2011 por Drdrake9 Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038624 Compartilhar em outros sites More sharing options...
brun123 369 Postado Maio 27, 2011 Autor Share Postado Maio 27, 2011 você tá testando com GM ou com player? acabei de testar denovo aqui e sem problemas... Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038627 Compartilhar em outros sites More sharing options...
superdrako 10 Postado Maio 27, 2011 Share Postado Maio 27, 2011 Estou testando com player e com o GM , ambos da erro , nao sei pq ta dando isso configurei os monstros e botei tudo certinho , nao esqueci de nada. Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038636 Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Maio 27, 2011 Share Postado Maio 27, 2011 Congratulações pelo sistema! Muito obrigado por compartilhar com o fórum, com certeza vai ajudar muito a comunidade. Vou dar uma olhadinha no script quando puder, mas me pareceu muito bom. Parabéns! Abraços. Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038644 Compartilhar em outros sites More sharing options...
brun123 369 Postado Maio 28, 2011 Autor Share Postado Maio 28, 2011 Arrumei a parte do player attack, atualize o seu de acordo com o tópico, sobre o onDeath e o problema de getItemAttribute, isso acontece porque o monstro não tinha corpse, era só arrumar no xml. Eu testei inúmeras vezes aqui, o seu erro então deve ser na configuração, verifique essa parte no arquivo gymlib.lua funcpokemon = {2220, 2222} -- ID das pokebolas (o pokemon tem que estar vivo nessas IDs) bpslot = CONST_SLOT_BACKPACK --em outros servers, pode ser que seja CONST_SLOT_AMMO o lugar onde fica a backpack no inventory Eu esqueci de explicar ela no tópico, já vou atualizar... Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038662 Compartilhar em outros sites More sharing options...
glugluguga 11 Postado Maio 28, 2011 Share Postado Maio 28, 2011 :smile_positivo: Boa garoto. Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038668 Compartilhar em outros sites More sharing options...
Reiser 0 Postado Maio 28, 2011 Share Postado Maio 28, 2011 Olá o que pedes modificado para pokemon flash plx =) Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038849 Compartilhar em outros sites More sharing options...
superdrako 10 Postado Maio 28, 2011 Share Postado Maio 28, 2011 (editado) @brun123 Arrumei o corpo do golem q botei como segundo pokemon e coloquei o player attack que voce mandou atualizar , ainda assim o pokemon quando sai morre e tambem ageitei as balls , ate coloquei a nova do servidor mas nada :S Edit : Consegui , era o geodude q tava sem corpo '.' nem percebi isso tinha trocado xml dele pelo aberto q era o geodude normal ^^^ Rep+ Dnv Editado Maio 28, 2011 por Drdrake9 Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038850 Compartilhar em outros sites More sharing options...
deglorio 44 Postado Maio 28, 2011 Share Postado Maio 28, 2011 Vlw Brunin, mto bom Tem como vc add a função de qdo estiver no duel não conseguir jogar nenhum pokeball no chão e nem da trade? Obrigado pelo contribuição Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038891 Compartilhar em outros sites More sharing options...
infernity 9 Postado Maio 29, 2011 Share Postado Maio 29, 2011 (editado) Fiz tudo certo como ele diz o tutorial mas da um erro,se eu tiver sem nenhum pokemon solto ele larga o brock geodude e puxa rapidamente depois nao pode batalha denovo,e outra se o meu pokemon estiver solto da para batalha contra o geodude mas quando eu mato o geodude ele solta o graveler e o graveler morre sozinho quando sai da poke ball, teria comoo arruma isso? no Tfs da o seguinte erro: [28/05/2011 23:25:09] [Error - CreatureScript Interface] [28/05/2011 23:25:09] data/creaturescripts/scripts/gym.lua:onDeath [28/05/2011 23:25:09] Description: [28/05/2011 23:25:09] (luaGetItemAttribute) Item not found eu uso pokemon dash, na versão fight! Ajuda? obrigado! -EDIT- O geodude tava sem corpose por isso dava dando erro! Ganho meu rep+ :button_ok: teria como da pra batalha com ele mais de uma vez? quando um player batalha com ele e perde ele não batalha mais. Editado Maio 29, 2011 por infernity Link para o comentário https://xtibia.com/forum/topic/157382-sistema-npc-gym-para-pokemon/#findComment-1038949 Compartilhar em outros sites More sharing options...
Posts Recomendados