-
Total de itens
2187 -
Registro em
-
Última visita
-
Dias Ganhos
58
Tudo que Yan Oliveira postou
-
Quais são as ocasiões que ele funciona e não funciona? Que tipo de ação?
-
Esse erro acontece quando você executa alguma ação específica?
-
Eu criei um NPC de Task aqui, porém eu fiz em uma base Poketibia TFS 0.3.6, pois não tenho outra base com versão de TFS diferente. Porém olhei as funções do TFS 1.0 (que é a que você descreveu) e as funções que utilizei nos scripts tem no TFS 1.0. Vai em Data/NPC e cria um arquivo xml chamado Billie.xml e adicione o código dentro: <?xml version="1.0" encoding="UTF-8"?> <npc name="Billie" script="Billie.lua" walkinterval="10000" floorchange="0" speed="100"> <health now="150" max="150"/> <look type="1421" head="114" body="119" legs="114" feet="114" corpse="2212"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I need a service... Say {help} or {task} to more informations."/> </parameters> </npc> Agora em Data/NPC/Scripts crie um arquivo chamado Billie.lua e insira o código dentro: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end -- VARIÁVEIS -- local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid msg = string.lower(msg) local id_item = 2160 -- ITEM QUE VAI GANHAR AO CONCLUIR A TASK local quantidade_item = 1 -- QUANTIDADE DE ITENS QUE VAI GANHAR local exp = 500000 -- EXPERIÊNCIA QUE VAI GANHAR local monstro = "Magmar" -- NOME DO MONSTRO local quantidade_monstro = 50 -- QUANTIDADE DE MONSTROS local storage = 32500 -- STORAGE DO NPC local storage_npc = 34900 -- STORAGE QUE O NPC DA PARA O PLAYER PARA COMEÇAR A TASK local storage_quantidade = 32510 -- STORAGE QUE CONTÉM A QUANTIDADE DE MONSTROS DERROTADOS PELO PLAYER local storage_task = 32600 -- STORAGE DE CONCLUSÃO DA TASK local storage_mensagem = 32505 -- STORAGE PARA DEIXAR O DIALOGO MAIS BONITO local restante = (quantidade_monstro - getPlayerStorageValue(cid, storage_quantidade)) + 1 ----------------------------------- [ DIALOGO COM NPC] ----------------------------------- if msgcontains(msg, 'task') then if getPlayerStorageValue(cid, storage) == 1 then selfSay("You have already done my task.", cid) talkState[talkUser] = 0 return true else if getPlayerStorageValue(cid, storage_npc) < 1 then selfSay("I need you kill " ..quantidade_monstro.. " " ..monstro.. ". Do you accept my task?", cid) else selfSay("Have you already finished my task?", cid) end talkState[talkUser] = 1 return true end elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then if getPlayerStorageValue(cid, storage_mensagem) < 1 and getPlayerStorageValue(cid, storage_npc) < 1 then selfSay("Ok, go to complete my task.", cid) talkState[talkUser] = 0 setPlayerStorageValue(cid, storage_mensagem, 1) setPlayerStorageValue(cid, storage_npc, 1) setPlayerStorageValue(cid, storage_quantidade, 1) return true end if getPlayerStorageValue(cid, storage_task) < 1 then selfSay("You don't finish my task yet. You need to kill " ..restante.. " " ..monstro.. " yet." , cid) talkState[talkUser] = 0 return true else selfSay("Congratulations! You finished my task! Receive your reward.", cid) doSendMagicEffect(getThingPos(cid), 27) doPlayerAddExp(cid, exp) doPlayerAddItem(cid, id_item, quantidade_item) setPlayerStorageValue(cid, storage, 1) talkState[talkUser] = 0 return true end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Agora vai em Data/Creaturescripts/Scripts e crie um arquivo chamado task_billie e adicione o código dentro: local monstro = "Magmar" -- NOME DO MONSTRO local quantidade = 50 -- QUANTIDADE DO MONSTRO local storage_npc = 34900 -- NÃO MEXE local storage_quantidade = 32510 -- NÃO MEXE local storage_task = 32600 -- NÃO MEXE function onKill(cid, target, lasthit) if getPlayerStorageValue(cid, storage_npc) > 0 then if getPlayerStorageValue(cid, storage_task) < 1 then if getPlayerStorageValue(cid, storage_quantidade) < quantidade then if isPlayer(cid) and getCreatureName(target) == monstro then local restantes = quantidade - getPlayerStorageValue(cid, storage_quantidade) doPlayerSendTextMessage(cid, 27, "Billie: " ..restantes.. " " ..monstro.. " restantes para derrotar." ) setPlayerStorageValue(cid, storage_quantidade, getPlayerStorageValue(cid, storage_quantidade) + 1) return true end elseif getPlayerStorageValue(cid, storage_quantidade) == quantidade then doPlayerSendTextMessage(cid, 27, "Billie: You don't have more " ..monstro.. " to defeat. Come back to get your reward.") setPlayerStorageValue(cid, storage_quantidade, -1) setPlayerStorageValue(cid, storage_task, 1) return true end else return true end else return true end end Ainda em Data/Creaturescripts/Scripts abra o arquivo login.lua e vá procure pela parte onde fica os registros de eventos no código, e adicione a seguinte linha embaixo do último evento: registerCreatureEvent(cid, "task_billie") E por último, em Data/Creaturescripts abra o creaturescripts.xml e adicione a tag: <event type="kill" name="task_billie" script="task_billie.lua"/> Explicação: Deixei comentado as variáveis e cada parte, no arquivo Billie.lua coloque o nome do monstro na variável monstro e a quantidade na variável quantidade_monstro, e o coloque o id e quantidade do item que o player vai ganhar nas variáveis conforme deixei comentado, está bem simples de ver. No arquivo task_billie a mesma coisa, só que lá só vai precisar colocar nome do monstro e quantidade. O player irá ganhar o item conforme o id que está na variável, a quantidade e experiência definida no Billie.lua, só alterar lá as recompensas. O resto não precisa mexer. Eu testei aqui e funcionou normal, mas teste e me fale se der algum problema.
-
Sim entendi. Bom, eu fiz outro script: local itens_grupo1 = { [1] = {id = 2152}, [2] = {id = 2160}, [3] = {id = 17214, quantidade = 1}, [4] = {id = 17215, quantidade = 1}, } local itens_grupo2 = { [1] = {id = 2152}, [2] = {id = 2466, quantidade = 1}, [3] = {id = 2497, quantidade = 1}, [4] = {id = 7730, quantidade = 1}, } local itens_grupo3 = { [1] = {id = 2152}, [2] = {id = 2195, quantidade = 1}, [3] = {id = 2492, quantidade = 1}, [4] = {id = 2498, quantidade = 1}, } local itens_grupo4 = { [1] = {id = 2392, quantidade = 1}, [2] = {id = 16116, quantidade = 1}, [3] = {id = 17214, quantidade = 1}, } local storage_time = 55000 ---------- CÓDIGO ---------- function onUse(cid, item, fromPosition, itemEx, toPosition) local index_item = 0 -- VARIÁVEL PARA PEGAR UM INDICE ALEATÓRIO DA TABELA NA VERIFICAÇÃO local random = 1 -- VARIÁVEL PARA GERAR O RANDOM DOS ITEMS QUE A QUANTIDADE É RANDOM if getPlayerStorageValue(cid, storage_time) <= os.time() then ------ SE FOR LEVEL MENOR QUE 25 NÃO PODERÁ RECEBER A RECOMPENSA ------ if getPlayerLevel(cid) < 25 then doPlayerSendTextMessage(cid, 27, "You need to be at least level 25 or more to open this chest.") return true ------ RECOMPENSA SE FOR LEVEL ENTRE 25 E 49 ------ elseif getPlayerLevel(cid) >= 25 and getPlayerLevel(cid) < 50 then index_item = math.random(1, #itens_grupo1) random = math.random(1, 20) if itens_grupo1[index_item].id == 2152 or itens_grupo1[index_item].id == 2160 then doPlayerAddItem(cid, itens_grupo1[index_item].id, random) doSendMagicEffect(getThingPos(cid), 27) if random > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..random.. " " ..getItemNameById(itens_grupo1[index_item].id).. ".") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(itens_grupo1[index_item].id).. ".") end doRemoveItem(item.uid, 1) setPlayerStorageValue(cid, storage_time, os.time() + 24 * 60 * 60) return true else doPlayerAddItem(cid, itens_grupo1[index_item].id, itens_grupo1[index_item].quantidade) doSendMagicEffect(getThingPos(cid), 27) if itens_grupo1[index_item].quantidade > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..itens_grupo1[index_item].quantidade.. " " ..getItemNameById(itens_grupo1[index_item].id).. ".") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(itens_grupo1[index_item].id).. ".") end doRemoveItem(item.uid, 1) setPlayerStorageValue(cid, storage_time, os.time() + 24 * 60 * 60) return true end ----- RECOMPENSA SE FOR LEVEL ENTRE 50 E 99 ----- elseif getPlayerLevel(cid) >= 50 and getPlayerLevel(cid) < 100 then index_item = math.random(1, #itens_grupo2) random = math.random(1, 50) if itens_grupo2[index_item].id == 2152 then doPlayerAddItem(cid, itens_grupo2[index_item].id, random) doSendMagicEffect(getThingPos(cid), 27) if random > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..random.. " " ..getItemNameById(itens_grupo2[index_item].id).. ".") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(itens_grupo2[index_item].id).. ".") end doRemoveItem(item.uid, 1) setPlayerStorageValue(cid, storage_time, os.time() + 24 * 60 * 60) return true else doPlayerAddItem(cid, itens_grupo2[index_item].id, itens_grupo2[index_item].quantidade) doSendMagicEffect(getThingPos(cid), 27) if itens_grupo2[index_item].quantidade > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..itens_grupo2[index_item].quantidade.. " " ..getItemNameById(itens_grupo2[index_item].id).. ".") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(itens_grupo2[index_item].id).. ".") end doRemoveItem(item.uid, 1) setPlayerStorageValue(cid, storage_time, os.time() + 24 * 60 * 60) return true end ----- RECOMPENSA SE FOR LEVEL ENTRE 100 E 200 ----- elseif getPlayerLevel(cid) >= 100 and getPlayerLevel(cid) < 200 then index_item = math.random(1, #itens_grupo3) random = math.random(20, 50) if itens_grupo3[index_item].id == 2152 then doPlayerAddItem(cid, itens_grupo3[index_item].id, random) doSendMagicEffect(getThingPos(cid), 27) if random > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..random.. " " ..getItemNameById(itens_grupo3[index_item].id).. ".") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(itens_grupo3[index_item].id).. ".") end doRemoveItem(item.uid, 1) setPlayerStorageValue(cid, storage_time, os.time() + 24 * 60 * 60) return true else doPlayerAddItem(cid, itens_grupo3[index_item].id, itens_grupo3[index_item].quantidade) doSendMagicEffect(getThingPos(cid), 27) if itens_grupo3[index_item].quantidade > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..itens_grupo3[index_item].quantidade.. " " ..getItemNameById(itens_grupo3[index_item].id).. ".") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(itens_grupo3[index_item].id).. ".") end doRemoveItem(item.uid, 1) setPlayerStorageValue(cid, storage_time, os.time() + 24 * 60 * 60) return true end ----- RECOMPENSA SE FOR LEVEL ACIMA DE 200 ----- else index_item = math.random(1, #itens_grupo4) doPlayerAddItem(cid, itens_grupo4[index_item].id, itens_grupo4[index_item].quantidade) doSendMagicEffect(getThingPos(cid), 27) if itens_grupo4[index_item].quantidade > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..itens_grupo4[index_item].quantidade.. " " ..getItemNameById(itens_grupo4[index_item].id).. ".") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(itens_grupo4[index_item].id).. ".") end doRemoveItem(item.uid, 1) setPlayerStorageValue(cid, storage_time, os.time() + 24 * 60 * 60) return true end else doPlayerSendTextMessage(cid, 27, "You need to wait " ..getTime(getPlayerStorageValue(cid, storage_time) - os.time()).. " to get the reward again.") return true end end No PDA 1.9, na em Data/Lib nos arquivos de funções tem uma função chamada getTimeDiff que retorna o tempo restante (horas, minutos e segundos). Porém na concatenação a palavra horas, segundos e minutos estão grudados com os valores, então eu separei criando outra função para que fique mais fácil para você, então vá em Data/Lib/SomeFunctions ou outro arquivo contendo as funções e adicione essa função: function getTime(diff) local dateFormat = { {' hour', diff / 60 / 60}, {' minute', diff / 60 % 60}, {' second', diff % 60}, } local out = {} local prefix = '' for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if v > 0 then prefix = #out == 0 and '' or k < #dateFormat and ' ' or ' and ' table.insert(out, prefix .. v .. '' .. (v <= 1 and t[1] or t[1].."s")) end end return table.concat(out) end Ou se preferir, procure a getTimeDiff e dê um espaço nas strings: "hour, minute e second" que irá funcionar. Mas lembrando que se alterar na função getTimeDiff tem que ir nesta linha do script: doPlayerSendTextMessage(cid, 27, "You need to wait " ..getTime(getPlayerStorageValue(cid, storage_time) - os.time()).. " to get the reward again.") E trocar por: doPlayerSendTextMessage(cid, 27, "You need to wait " ..getTimeDiff(getPlayerStorageValue(cid, storage_time) - os.time()).. " to get the reward again.") Também reparei que na tabela do script que postou aqui, a última tabela estava com level mínimo 80, mas na tabela anterior o level mínimo era 100 e máximo 200, talvez poderia ser isso que estava bugando, já que provavelmente o char que estava testando devia ser level maior que 100. Mas eu testei aqui e está funcionando normalmente, já deixei também para o jogador poder pegar novamente a recompensa a cada 24 horas. Testa e se der alguma problema me fale.
-
Entendi, você quer que a recompensa também seja um item aleatório de acordo com a tabela, igual no outro script que fiz para você?
-
Só para entender, você quer um baú que dê recompensa uma vez por dia e a recompensa varia de acordo com o level do jogador? A quantidade também deve variar ou é fixa?
-
local id_box = 16900 -- ID DA BOX local level = 10 -- LEVEL MINIMO PARA ABRIR A BOX -- ITENS -- local normal = {16901, 16902, 16903} local raro = {111} local epico = {222} local lendario = {333} ------------------------- CÓDIGO ------------------------- function onUse(cid, item, frompos, item2, topos) local chance = math.random(1, 100) local item_box = 0 if item.itemid == id_box then if getPlayerLevel(cid) < level then doPlayerSendTextMessage(cid, 27, "You need to be at least level " ..level.. " to open the box.") doPlayerSendCancel(cid, "You need to be at least level " ..level.. " to open the box.") return true else if chance >= 60 then item_box = normal[math.random(1, #normal)] doPlayerAddItem(cid, item_box) doSendMagicEffect(getThingPos(cid), 27) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(item_box).. ".") doRemoveItem(item.uid, 1) return true elseif chance >= 40 and chance < 60 then item_box = raro[math.random(1, #raro)] doPlayerAddItem(cid, item_box) doSendMagicEffect(getThingPos(cid), 27) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(item_box).. ".") doRemoveItem(item.uid, 1) return true elseif chance >= 20 and chance < 40 then item_box = epico[math.random(1, #epico)] doPlayerAddItem(cid, item_box) doSendMagicEffect(getThingPos(cid), 27) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(item_box).. ".") doRemoveItem(item.uid, 1) return true else item_box = lendario[math.random(1, #lendario)] doPlayerAddItem(cid, item_box) doSendMagicEffect(getThingPos(cid), 27) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations! You received " ..getItemNameById(item_box).. ".") doRemoveItem(item.uid, 1) return true end return true end end end Pelo que entendi você quer que tenha uma chance para que o item ganhado seja entre uma dessas tabelas, e dentro de cada tabela tenha outra chance para ganhar tal item. Está correto? Pois o script que fiz é baseado nesse entendimento, então se não for isso avise para eu refazer. Explicação: Pensei em trabalhar com random com chance pré-definida para que dentre uma as tabelas uma seja escolhida, e ao ser escolhida uma tabela, tenha uma outra chance para escolher o item de acordo com a tabela, porém essa chance é totalmente aleatória, não é pré-definida como as das tabelas. Caso queira chance do item pré-definida igual das tabelas, me avisa que faço. E você também pode alterar a chance das tabelas caso queira, está bem simples. Deixei 40% de chance para os itens normais e 20% para os três restante (raro, épico e lendário). Testei aqui e funcionou, mas qualquer problema só falar.
-
Sei que está trabalhando com Digimon, mas por que no evolution.lua você colocou "[5/5]" na evolução do Digimon? Eu não entendo de Digimon, mas pode ser que isso esteja bugando, o que faz esse valor junto com o nome do monstro? [digiev] = {"Agumon[5/5]", "Greymon[5/5]", "Metal Greymon[5/5]"},
-
Qual é o nome do pokémon que está tentando evoluir?
-
Você criou a stone no ItemEditor (colocou como usável) e adicionou a Sprite dela no Object Builder? E qual ID dessa stone e quais pokémons não está conseguindo evoluir?
-
client (URGENTE) Nao Consigo Abrir meu OTCLIENT. Object Builder & Item Editor.
pergunta respondeu ao TonhoDoGas de Yan Oliveira em Scripts
Qual a versão do Object Builder? -
client (URGENTE) Nao Consigo Abrir meu OTCLIENT. Object Builder & Item Editor.
pergunta respondeu ao TonhoDoGas de Yan Oliveira em Scripts
Está abrindo as sprites no ObjectBuilder e ItemEditor com as opções Extend e Transparência? Se não tiver, pode ser esse o problema. -
Poste o arquivo moveItem.lua em Data/Creaturescripts/Player.
-
Haha que longe em, mas que bom que deu certo ?.
-
Estranho isso, pode ser algo da source... Mas você removeu itens que já estava registrado na base que pegou?
-
Como assim?
-
Sobre a moto, você testou com o script que fiz ou já tinha conseguido? Sobre o surf, esse número ai não é o Lookytype... Eu ainda não descobri como que faz para saber, mas a forma que eu faço para adicionar e usar o looktype, eu insiro uma sprite próxima de outra do tipo que quero, por exemplo eu adicionei fly do Scyther e Shiny Scyther, então coloquei em um slot livre para os dois e fui no configuration.lua em Data/Lib e procurei o looktype da sprite próxima que coloquei, confira na imagem: Como pode ver, o fly mais próximo é o do Shiny Crobat, e o Looktype dele está como 1149, mas se olhar no Object Builder está como 1500 ali, mas se você mudar o tipo de sprite ali onde está "Roupa" para Item, Efeito ou Míssil, vai ver que todos eles começam do 0 as sprites, por isso não da para considerar por ali. Voltando para as sprites de fly, eu fiz as contas ali, no Object Builder estão a 13 slots de diferença do Scyther e 12 do Shiny Scyther, e no configuration eles também estão 13 e 12. Fazendo as contas bate, e no meu servidor o fly dos dois funcionam. Procure seguir esse procedimento que eu utilizo, ele funciona. Insira a sprite do Snorlax surfando perto de outra com slot livre e conta a diferença de slot. Ou se não quiser mudar de local a sprite, conte a partir do último surf no Object Builder, e insira a diferença no configuration.lua
-
Acho que não é uma boa fazer isso, porque se ele não tem nível para usar o ataque, já vai estar bloqueado o ataque na barra de ataques, não faz sentido ocultar. Até porque o player vai ter o pokémon na pokédex e ele vai saber os ataques que tem, então o que vai adiantar ocultar a informação para o player? Com o ataque bloqueado por ele não ter level, o player sabe que não pode usar, agora imagina quando ele avança de nível e do nada aparece o ataque na barra, não faz sentido.
-
Me passe todos os ID das vocações, o nome delas e qual vocações são depois de cada. E também me fale qual level tem que ter em determinada vocação para ir para próxima.
-
Sobre o Shiny Snorlax surfar, eu respondi um tópico essa semana sobre essa mesma dúvida, e não sei se era seu, mas vamos lá novamente. Se sua base for PDA, e tendo em mente o ID (looktype) da sprite dele no surf, vai em Data/Lib/Configuration.lua e procure pela habilidade Surf: ["surf"] = {"Swampert", "Sealeo", "Walrein","Crawdaunt", "Lombre", "Ludicolo", 'Poliwag', 'Poliwhirl', 'Seaking', 'Milotic', 'Dewgong', 'Wailord', 'Blastoise', 'Tentacruel', 'Lapras', 'Gyarados', 'Omastar', 'Kabutops', 'Vaporeon', 'Staryu', 'Starmie', 'Goldeen', 'Seadra', 'Golduck', 'Squirtle', 'Wartortle', 'Tentacool', 'Snorlax', 'Poliwrath', 'Shiny Blastoise', 'Shiny Tentacruel', 'Shiny Gyarados', 'Shiny Vaporeon', 'Shiny Seadra', 'Shiny Tentacool', 'Shiny Snorlax', "Mantine", "Totodile", "Croconow", "Feraligatr", "Marill", "Azumarill", "Quagsire", "Wooper", "Octillery", "Kingdra", "Shiny Snorlax"}, E registre o Shiny Snorlax nessa tabela, eu já registrei nessa acima caso queira, só precisa verificar se existem todos esses pokémons no seu server, e se tem mais do que isso recomendo registrar manualmente no seu arquivo só o Shiny Snorlax. Em seguida, ainda em configuration.lua, procure por: surfs = { ["Poliwag"] = {lookType=278, speed = 10}, ["Poliwhirl"] = {lookType=137, speed = 40}, ["Seaking"] = {lookType=269, speed = 40}, ["Dewgong"] = {lookType=183, speed = 80}, ["Blastoise"] = {lookType=184, speed = 80}, ["Tentacruel"] = {lookType=185, speed = 80}, ["Lapras"] = {lookType=186, speed = 80}, ["Gyarados"] = {lookType=187, speed = 80}, ["Omastar"] = {lookType=188, speed = 80}, ["Kabutops"] = {lookType=189, speed = 80}, ["Poliwrath"] = {lookType=190, speed = 80}, ["Vaporeon"] = {lookType=191, speed = 50}, ["Staryu"] = {lookType=266, speed = 30}, ["Starmie"] = {lookType=267, speed = 70}, ["Goldeen"] = {lookType=268, speed = 20}, ["Seadra"] = {lookType=270, speed = 50}, ["Golduck"] = {lookType=271, speed = 70}, ["Squirtle"] = {lookType=273, speed = 20}, ["Wartortle"] = {lookType=275, speed = 40}, ["Tentacool"] = {lookType=277, speed = 20}, ["Snorlax"] = {lookType=300, speed = 80}, ----------------Shiny---------------------- ["Shiny Blastoise"] = {lookType=658, speed = 600}, ["Shiny Tentacruel"] = {lookType=1014, speed = 600}, ["Shiny Gyarados"] = {lookType=1030, speed = 600}, ["Shiny Vaporeon"] = {lookType=1032, speed = 600}, --alterado v1.6 ["Shiny Seadra"] = {lookType=1025, speed = 600}, ["Shiny Tentacool"] = {lookType=1013, speed = 600}, ["Shiny Snorlax"] = {lookType=1035, speed = 600}, ["Shiny Feraligatr"] = {lookType=1175, speed = 600}, ["Shiny Snorlax"] = {lookType=ID DA SPRITE DO SNORLAX, speed = 600}, ----------------Johto---------------------- ["Mantine"] = {lookType=636, speed = 80}, ["Totodile"] = {lookType=637, speed = 20}, ["Croconow"] = {lookType=638, speed = 40}, ["Feraligatr"] = {lookType=645, speed = 80}, ["Marill"] = {lookType=639, speed = 30}, ["Azumarill"] = {lookType=642, speed = 40}, ["Quagsire"] = {lookType=643, speed = 70}, ["Kingdra"] = {lookType=644, speed = 100}, ["Octillery"] = {lookType=641, speed = 70}, ["Wooper"] = {lookType=640, speed = 30}, ["Milotic"] = {lookType=1290, speed = 40}, ["Wailord"] = {lookType=1305, speed = 60}, ["Lombre"] = {lookType=1470, speed = 30}, ["Ludicolo"] = {lookType=1469, speed = 80}, ["Crawdaunt"] = {lookType=1479, speed = 70}, ["Sealeo"] = {lookType=1480, speed = 80}, ["Walrein"] = {lookType=1481, speed = 70}, ["Swampert"] = {lookType=1495, speed = 90}, } E insira o Shiny Snorlax nessa tabela com seu respectivo Looktype, e depois coloque a velocidade. Eu já deixei ele na parte dos Shiny e só precisa colocar o looktype dele onde está: "ID DA SPRITE DO SNORLAX". Se colocar a looktype correta, irá funcionar. Sobre não pescar montado em moto/skate, eu dei uma olhada no código e ambos trabalham com a mesma storage, isso não é muito bom e nem ideal, mas ok, vamos lá. Vá em Data/Actions/Scripts e tem que procurar o script fishing.lua (ou pesca.lua dependendo da sua base) geralmente ficam no diretório Data/Actions/Scripts/Basic em PDA. Outra coisa, precisa ver se tem vários script de fishing no seu server, alguns PDA vem com uns dois ou três scripts de fishing e isso não é bom, precisa deixar somente um. Encontrado o script de pescar, embaixo de: function onUse(cid, item, fromPos, itemEx, toPos) Você vai colocar esse código, ficando assim: function onUse(cid, item, fromPos, itemEx, toPos) ----- VERIFICAÇÃO PARA MOTO/SKATE ----- if getPlayerStorageValue(cid, 5700) >= 1 then doPlayerSendTextMessage(cid, 27, "You cannot fish while riding in a motorcycle or skate.") return true end Teste e me diga se funcionou, se colocar certinho é para funcionar, mas qualquer problema me avisa. Caso não consiga colocar, poste o arquivo de fishing que eu coloco para você.
-
Baixei o seu items.xml e depois do id 13000 nem tem itens mais.
-
De nada ! ^^
-
Sobre os 7 players, foi o limite estabelecido pelos desenvolvedores da source, agora o porque essa quantidade limite eu não sei... Sobre a configuração que falou, não faz muito sentido seu pedido, já que os pokémons ou monstros no tibia alvejam apenas jogadores quando eles estão dentro do raio de visão (tela). O que você pode fazer é verificar se há muitos pokémons no respawn e tentar diminuir, mas não é para a quantidade ser problema de lag, só o computador (ou máquina virtual) realmente não aguentar processar muitos pokémons ou monstros na tela. Mas é testando para saber.
-
Olá, vá na pasta Data/Globalevents/Scripts e crie um arquivo lua chamado boss e adicione o código dentro: ----------------------------------- EVENTO SUMMON BOSS FEITO POR YAN18 ----------------------------------------- local minutos = 20 ---- COLOCA OS MINUTOS AQUI PARA OS BOSS SUMIREM CASO NINGUÉM OS MATE ---- NOME DOS MONTROS ---- local monsters = { [1] = "Magmar" , [2] = "Electabuzz", [3] = "Scizor", } ---- POSIÇÃO DA ARENA ONDE APARECERÁ OS MONSTROS ---- local position_arena = { from_pos = {x= 964, y = 993, z= 7}, -- VARIÁVEL QUE TEM A COORDENADA INICIAL DO LUGAR ONDE VAI APARECER OS MONSTROS to_pos = {x= 978, y = 1009, z= 7}, -- VARIÁVEL QUE TEM A COORDENADA FINAL DO LUGAR ONDE VAI APARECER OS MONSTROS } ---------------------------------- CÓDIGO ---------------------------------------------- function onThink(cid, words, interval, lastExecution) ----- CRIA OS BOSS ----- for i, j in ipairs(monsters) do ----- VARIÁVEL RANDOM_POSITION GERA O SPAWN ALEATÓRIO DOS BOSS ----- local random_position = {x= math.random(position_arena.from_pos.x, position_arena.to_pos.x), y= math.random(position_arena.from_pos.y, position_arena.to_pos.y), z= math.random(position_arena.from_pos.z, position_arena.to_pos.z)} doSummonCreature(j, random_position) end doBroadcastMessage(#monsters == 1 and "A monster have been arrived in this world. Don't arrive near!" or "Some monsters have been arrived in this world. Don't arrive near by them!", 22) ---- VERIFICAÇÃO SE TEM MONSTROS NA ARENA PARA REMOVER ---- addEvent(function() local position = {} for i = position_arena.from_pos.x, position_arena.to_pos.x do for j = position_arena.from_pos.y, position_arena.to_pos.y do position[#position+1] = {x= i, y = j, z= position_arena.from_pos.z, stackpos = 0} end end for i= 1, #position do for j = 0, 255 do position[i].stackpos = j local monster = getTileThingByPos(position[i]) if isMonster(monster.uid) then for d, n in ipairs(monsters) do if getCreatureName(monster.uid) == n then doRemoveCreature(monster.uid) if d == #monsters then doBroadcastMessage(#monsters == 1 and "The monster left this world. But it will return soon...." or "The monsters left this world. But they will return soon....", 22) end end end end end end end, minutos * 60 * 1000) return true end Agora em Data/Globalevents abra o globalevents.xml e adicione a tag: <globalevent name="boss" interval="3600" event="script" value="boss.lua"/> <!-- TEMPO EM SEGUNDOS, JÁ DEIXEI 1 HORA --> Explicação: No código, eu criei 3 monstros genéricos para testar, só adicionar o nome deles igual está na tabela, e se quiser só 1 monstro, apague os outros dois e insira o desejado (lembrando de colocar a vírgula no final igual como está). Na variável minutos já deixei 20 como pediu, mas caso queira trocar, só alterar o valor dela (lembrando que o valor dela tem que ser menor que o intervalo do evento no xml). E na tabela position_arena, precisa colocar as coordenadas iniciais e finais da arena, já deixei pronto ali também e é só substituir. Deixei para eles nascerem em posições aleatórias dentro das coordenadas da arena, caso queira spawns fixos, só ir na variável random_position e colocar x, y e z desejados. Agora na parte do Xml como deixei o comentário na tag, já deixei 1 hora como pediu (3600 segundos), caso queira outro valor só alterar lá, lembrando que ali é em segundos. Deixei tudo comentado e explicadinho, mas qualquer dúvida só falar. Eu testei muito aqui e deu certo, mas qualquer problema só me dizer.
-
Explica como ele funciona que posso tentar criar.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.