Postado Junho 11, 2017 7 anos Este é um post popular. Salve rápázyádá, recentemente estava de rolê pelo tk, e vi um tópico com o seguinte pedido: "Jinchuuriki System", pra que não conhece irei da um breve resumo. Para quem conhece o anime naruto sabe sobre as bijuus, e que elas foram seladas em shinobis destinados a carregar tamanha responsabilidade devido a cada biju ter um poder destruidor, como por exemplo a bijuu raposa de nove caldas(Kyuubi), selada dentro do personagem principal chamado de Naruto Uzumaki, a Kyuubi quando dominada, dá ao usuário uma grotesca quantidade de chakra, assim como jutsus e muito mais, cada bijuu tem sua especialidade, jutsus de defesa, assim como a própia defesa e resistência do usuário a tais jutsus, mas claro para você ter a bijuu, é necessário que você sele-a dentro de você, através de um dos jutsus proibidos, como o Shiki Fuujin usado por Minato o 4º Hokage e também pai de naruto, ao usar o selo ele consome a alma de quem usa levando-o a morte após o termino do jutsu, minato como hokage não poderia deixar a kyuubi destruir a vila, então ele invoca o Selo Consumidor do Demônio Morto(Shiki Fuujin) conhecido também como Selo Ceifeiro da Morte, e sela a kyuubi dentro de seu própio filho salvando a vila e morrendo como herói, e naruto desde então passa a ser o Jinchuuriki da raposa de nove caldas. Tendo uma ideia básica de como funciona, vamos a explicação do sistema, que não é diferente. Ao usar um jutsu(spell) de selo em algum bijuu(monstro), você terá ele selado dentro de você e obterá os jutsus de acordo com cada bijuu, mas para isso, a vida(hp) da bijuu deve está menor que 20%(configurável), e então você durante 2(configurável) dias, terá ele selado dentro de você e poderá usar os jutsus, ao acabar esse tempo você irá perdelo, assim como os jutsus. Sistema criado e testado na versão 8.60 usando uma distro na versão 0.4, mesmo assim pode funcionar em versões inferiores!! Siga os passos corretamente que é sucesso. Vá em data/lib e crie um arquivo chamado JinchuurikiSystem.lua e coloque o seguinte code dentro: Spoiler jin_bijuus = { ["shukaku"] = {sto = 1, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 30, effBuff = 3}, ["nibi"] = {sto = 2, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 60, effBuff = 3}, ["sanbi"] = {sto = 3, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 60, effBuff = 3}, ["yonbi"] = {sto = 4, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 60, effBuff = 3}, ["gobi"] = {sto = 5, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 60, effBuff = 3}, ["rokubi"] = {sto = 6, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 60, effBuff = 3}, ["shichibi"] = {sto = 7, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 60, effBuff = 3}, ["hachibi"] = {sto = 8, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 60, effBuff = 3}, ["kyuubi"] = {sto = 9, spells = {""}, bijuu_outfit = 323, skill_p = 10, time_buff = 15, effBuff = 3} } id_name = { -- id da storage refrente ao monstro na primeira tabela, lembrando que se for adicionar mais, a variável sto tem que dar um valor de storage referente ao novo monstro adicionado [1] = "Shukaku", [2] = "Nibi", [3] = "Sanbi", [4] = "Yonbi", [5] = "Gobi", [6] = "Rokubi", [7] = "Shichibi", [8] = "Hachibi", [9] = "Kyuubi" } jin_Storage = 1234255 -- Storage que armazena o Jinchuuriki jin_StorageTime = 1234256 -- Storage de quanto tempo o player tem de Jinchuuriki jin_TimeDay = 2 -- Tempo em dias que o player ficará com a Bijuu selada nele jin_percentHp = 20 -- Porcentagem que precisa para selar o Bijuu jin_cond_id = 23 -- Sub-Id da condição do buff, assim não da conflito com outros buffs. jin_cond_id = 24 -- Sub-Id da condição do outfit, assim não da conflito com outros buffs. jin = { -- jin.getPlayerBijuu(uid) getPlayerBijuu = function(uid) -- retorna o nome da biju do player em string. if getPlayerStorageValue(uid, jin_Storage) == -1 then return 0 end return id_name[getPlayerStorageValue(uid, jin_Storage)] end, -- jin.setPlayerBijuu(uid, BijuuId) setPlayerBijuu = function(uid, BijuuId) -- Set no player a Bijuu tornando-o um Jinchuuriki. return doCreatureSetStorage(uid, jin_Storage, BijuuId) end, -- jin.setBijuuTime(uid, days) setBijuuTime = function(uid, days) -- Seta a quantidade de dias que o player ficará com a bijuu. return doCreatureSetStorage(uid, jin_StorageTime, os.time()+days*24*60*60) end, -- jin.getPlayerBijuuTime(uid) getPlayerBijuuTime = function(uid) -- Retorna tempo e hora que falta pra acabar o Jinchuuriki do Player. if getPlayerStorageValue(uid, jin_StorageTime)-os.time() <= 0 then return "Tempo restante é de 0 dias, 0 horas e 0 segundos." end local tempo = getPlayerStorageValue(uid, jin_StorageTime)-os.time() local segundos = tempo % 60 local minutos = math.floor(tempo%3600/60) local horas = math.floor(tempo%86400/3600) local dias = math.floor(tempo%604800/86400) return "Tempo restante é de "..dias.." dia"..(dias > 1 and "s" or "")..", "..horas.." hora"..(horas > 1 and "s" or "")..", "..minutos.." minuto"..(minutos > 1 and "s"or "").." e "..segundos.." segundo"..(segundos > 1 and "s" or "").."" end, -- jin.doPlayerSetSpells(uid, spells) doPlayerSetSpells = function(uid, spells) -- Faz o player aprender mais de 1 spells. if type(spells) == "table" then for i = 1, #spells do doPlayerLearnInstantSpell(uid, spells[i]) end else doPlayerLearnInstantSpell(uid, spells) end end, -- jin.doPlayerRemoveSpells(uid, spells) doPlayerRemoveSpells = function(uid, spells) -- Remove todas as spells aprendidas do player. if type(spells) == "table" then for i = 1, #spells do doPlayerUnlearnInstantSpell(uid, spells[i]) end else doPlayerUnlearnInstantSpell(uid, spells) end end, -- jin.doPlayerRemoveJinchuuriki(uid) doPlayerRemoveJinchuuriki = function(uid) -- Remove o Jinchuuriki do player. if jin.getPlayerBijuu(uid) ~= 0 then jin.doPlayerRemoveSpells(uid, jin_bijuus[jin.getPlayerBijuu(uid):lower()].spells) doCreatureSetStorage(uid, jin_StorageTime, -1) doCreatureSetStorage(uid, jin_Storage, -1) end end } A tabela está de acordo com a ordem de bijuus existente desde o bijuu de 1 calda, até a biju de nove caldas, então você irá mexer somente em qual ou quais jutsus(spells) cada bijuu irá usar, mais precisamente aqui: spells = {""} entre aspas coloque a quantidade que seja de jutsus(spell), como por exemplo: Tk no Jutsu 1- Tk no jutsu 2, separados por virgula, assim: spells = {"Tk no jutsu 1", "Tk no jutsu 2"} Lembrando que o nome das spells não é a que fica em words, é que fica em name na xml, por exemplo: eu tenho um jutsu chamado kai, quem joga narutibia sabe pra que serve, para usar ela, usamos o nome que está em words, e a que fica em name, será que vai ser mostrada quando for usar, entretanto a função que faz o player aprender a spell, segui pelo nome: <instant name="Kai!" words="kai" note que contém uma exclamação no nome da spell, então vai ter que ir exclamação e tudo junto, ficando assim: spells = {"Tk no jutsu 1", "Tk no jutsu 2", "Kai!"} e então quando o player for usar a spell pelo words kai, a spell será usada. Agora vá em data/spells/scripts crie um arquivo chamado selojin.lua e coloque o seguinte code dentro: Spoiler local selo_effect = 4 -- Efeito do selo que vai sair em cima do monstro selando ele. function onCastSpell(cid, var) if getPlayerStorageValue(cid, jin_Storage) <= 0 then if isMonster(getCreatureTarget(cid)) then if jin_bijuus[getCreatureName(getCreatureTarget(cid)):lower()] then if getCreatureHealth(getCreatureTarget(cid)) <= getCreatureMaxHealth(getCreatureTarget(cid))/100*jin_percentHp then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você agora é Jinchuuriki do "..getCreatureName(getCreatureTarget(cid)):gsub("^%l", string.upper)..", use tamanho poder com sabedoria!!") jin.setPlayerBijuu(cid, jin_bijuus[getCreatureName(getCreatureTarget(cid)):lower()].sto) jin.setBijuuTime(cid, jin_TimeDay) jin.doPlayerSetSpells(cid, jin_bijuus[getCreatureName(getCreatureTarget(cid)):lower()].spells) doSendMagicEffect(getThingPosition(getCreatureTarget(cid)), selo_effect) doRemoveCreature(getCreatureTarget(cid)) return true else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Você só pode selar o bijuu quando o hp dele estiver menor ou igual a "..jin_percentHp..".") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Esse monstro não é um Bijuu.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Você só pode selar as Bijuus como Jinchuuriki.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Você não pode selar mais bijuu, atualmente você é Jinchuuriki do "..jin.getPlayerBijuu(cid)..", espere o tempo acabar.") end return false end Agora vá em data/spells/scripts crie um arquivo chamado buff bijuu.lua e coloque o seguinte code dentro: Spoiler function buff_bijuu(cid, pointsSkill, time, subId) local buff_bijuu = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(buff_bijuu, CONDITION_PARAM_TICKS, time*1000) setConditionParam(buff_bijuu, CONDITION_PARAM_STAT_MAGICLEVEL, pointsSkill) setConditionParam(buff_bijuu, CONDITION_PARAM_SKILL_FIST, pointsSkill) setConditionParam(buff_bijuu, CONDITION_PARAM_SKILL_SWORD, pointsSkill) setConditionParam(buff_bijuu, CONDITION_PARAM_SKILL_AXE, pointsSkill) setConditionParam(buff_bijuu, CONDITION_PARAM_SKILL_CLUB, pointsSkill) setConditionParam(buff_bijuu, CONDITION_PARAM_SKILL_DISTANCE, pointsSkill) setConditionParam(buff_bijuu, CONDITION_PARAM_SKILL_SHIELD, pointsSkill) setConditionParam(buff_bijuu, CONDITION_PARAM_SUBID, subId) return doAddCondition(cid, buff_bijuu) end function onCastSpell(cid, var) if jin.getPlayerBijuu(cid) ~= 0 then if not getCreatureCondition(cid, CONDITION_ATTRIBUTES, jin_cond_id) then doSetCreatureOutfit(cid, {lookType = jin_bijuus[jin.getPlayerBijuu(cid):lower()].bijuu_outfit} , jin_bijuus[jin.getPlayerBijuu(cid):lower()].time_buff*1000) buff_bijuu(cid, jin_bijuus[jin.getPlayerBijuu(cid):lower()].skill_p, jin_bijuus[jin.getPlayerBijuu(cid):lower()].time_buff, jin_cond_id) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Bijuu Buff Mode Ativado!!") doSendMagicEffect(getThingPosition(cid), jin_bijuus[jin.getPlayerBijuu(cid):lower()].effBuff) else return false, doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Você já está com o buff de sua bijuu.") end else return false, doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Você precisa selar algum bijuu para usar seu buff.") end return true end a tag que você irá colocar na spells.xml para esse jutsu(spell) será a seguinte: <instant name="Shiki Fuujin" words="shiki fuujin" lvl="1" mana="1" prem="0" exhaustion="10" enabled="1" needtarget="1" event="script" value="selojin.lua"> </instant> <instant name="Buff Jin" words="buff jin" lvl="1" mana="0" prem="0" selftarget="1" exhaustion="1000" enabled="1" event="script" value="buff bijuu.lua"> </instant> Agora vá em data/talkactions/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro: Spoiler function onSay(cid, words, param, channel) if jin.getPlayerBijuu(cid) ~= 0 then doPlayerPopupFYI(cid, "[====== Jinchuuriki System ======]\n\nVocê Jinchuuriki de ["..jin.getPlayerBijuu(cid).."]\n"..jin.getPlayerBijuuTime(cid)) else doPlayerPopupFYI(cid, "[====== Jinchuuriki System ======]\n\nVocê não é Jinchuuriki.\n"..jin.getPlayerBijuuTime(cid)) end return true end Nota: esse comando serve para você checar quanto tempo você tem de Jinchuuriki, e qual bijuu está selado dentro de você. A tag da talkactions.xml para esse jutsu(spell) é a seguinte: <talkaction words="!jincheck" event="script" value="jincheck.lua"/> Agora vá em data/globalevents/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro: Spoiler function onThink(interval, lastExecution) for _, ons in pairs(getPlayersOnline()) do if getPlayerStorageValue(ons, jin_StorageTime)-os.time() <= 0 and jin.getPlayerBijuu(ons) ~= 0 then jin.doPlayerRemoveJinchuuriki(ons) doPlayerSendTextMessage(ons, MESSAGE_STATUS_CONSOLE_RED, "O selo do Jinchuuriki foi desfeito, e você perdeu o bijuu, você sela-lo novamente, ou selar outro.") end end return TRUE end Nota: esse script checa a cada um minuto, os players online na qual o tempo de Jinchuuriki já expirou, e então remove, para assim ele não continuar com os jutsus. A tag do globalevents.xml desse script é a seguinte: <globalevent name="JinSystem" interval="60000" script="jincheck.lua"/> Agora pra finalizar vá em data/creaturescripts/scripts e crie um arquivo chamado jinsystem.lua e adicione o seguinte code: Spoiler function onLook(cid, thing, position, lookDistance) if isPlayer(thing.uid) then if jin.getPlayerBijuu(thing.uid) ~= 0 then doPlayerSetSpecialDescription(thing.uid, "\nJinchuuriki de: ["..jin.getPlayerBijuu(thing.uid).."]") else doPlayerSetSpecialDescription(thing.uid, "\nNão é um Jinchuuriki.") end end return true end function onDeath(cid) if getPlayerStorageValue(cid, jin_StorageTime)-os.time() <= 0 and jin.getPlayerBijuu(cid) ~= 0 then jin.doPlayerRemoveJinchuuriki(cid) end return true end function onLogin(cid) registerCreatureEvent(cid, "JinSystemLook") registerCreatureEvent(cid, "JinSystemDeath") if getPlayerStorageValue(cid, jin_StorageTime)-os.time() <= 0 and jin.getPlayerBijuu(cid) ~= 0 then jin.doPlayerRemoveJinchuuriki(cid) end return true end function onLogout(cid) if getPlayerStorageValue(cid, jin_StorageTime)-os.time() <= 0 and jin.getPlayerBijuu(cid) ~= 0 then jin.doPlayerRemoveJinchuuriki(cid) end return true end e a tag do creaturescripts.xml desse script é a seguinte: <!-- Jinchuuriki System --> <event type="look" name="JinSystemLook" event="script" value="jinsystem.lua"/> <event type="death" name="JinSystemDeath" event="script" value="jinsystem.lua"/> <event type="login" name="JinSystemLogin" event="script" value="jinsystem.lua"/> <event type="logout" name="JinSystemLogout" event="script" value="jinsystem.lua"/> Nota: na spells.xml que não precisam ter uma vocação especifica para ser usada e devem conter a tag: needlearn="1" contendo essa tag, a spell não irá aparecer para nenhum player e não poderá ser usado até que o player sele a bijuu, após ser aprendida quando o player sela a bijuu, irá aparecer no comando !jutsus que em servidores normais é o spellbook e o !spells, em quanto o player não selar, ele não ver e nem pode usar. bijuu_outfit é o id da looktype que o player vai ganhar ao usar o buff(se você tem outro buff ou speel que faça o mesmo, remova-o ou então remova a função doSetCreatureOutfit da minha buff, assim não gerando conflito e ficando o outfit que deseja). skill_p é a quantidade de pontos que ao usar o buff da bijuu, vai add no player. time_buff é quanto tempo o buff vai ficar no player valendo também para a looktype. effBuff é o id do efeito que vai sair em cima do player quando ele usar o buff. Pronto, basta configura a spells que cada bijuu(monstro), e pronto. Acho que não preciso explicar como configurar, no própio script deixei umas observações. É totalmente proibido levar meu sistema para outro blog, site ou fórum, fiz esse sistema exclusivamente para membros da comunidade do TibiaKing. Quaisquer erros, sugestões, críticas(construtivas), fiquem a vontade, caso tenha alguma duvida sobre tal parte do script, ou não entendeu alguma parte de como configurar, basta comentar que estarei dando suporte. Script feito por mim. Abraços, bom uso, e boa noite! xD
Postado Junho 11, 2017 7 anos Perfeito Mano !!!!!!!!!!!! Supera a Perfeiçao xD vlw todos querem esse system O rei de seu proprio destino é aquele que luta pela gloria do amanhã! Discord : ZoR#9373
Postado Junho 12, 2017 7 anos Autor @leozincorsair kkkkk nada pow, meu server também é um narutibia. Kkkk xD
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.