-
Total de itens
2187 -
Registro em
-
Última visita
-
Dias Ganhos
58
Tudo que Yan Oliveira postou
-
Você está falando três coisas diferentes no mesmo tópico. Vamos lá! Sobre esse erro de banco que está dando na distro, é que, esse é um problema de query com o Sqlite. O Sqlite tem uma peculiaridade bem chata com LIMIT, para funcionar direto (sem sub-query), tem que compilar o Sqlite com um comando atribuindo aos comandos INSERT/SELECT/UPDATE/DELETE o LIMIT. Mas, a maioria dos Sqlite que vem nos Tibias e Derivados não vem com essa atribuição. Então para resolver o problema, você vai ter que fazer uma sub-query. Tem que achar o arquivo que faz essa query, e trocar a query para: UPDATE `players` SET `broadcasting` = 0, `viewers` = 0 WHERE id IN (SELECT `id` FROM `players` WHERE `id` = 24 LIMIT 1) Sobre o NPC, é fácil fazer, mas, não entendi muito bem o que quis dizer com "não quer por promotion", como você quer então? E esse erro de query na distro, não é para ter haver com mudar vocation de player, isso é quando você vai assistir outro player. Sobre o Account Manager, você tem que postar o arquivo login.lua e informar os id de cada classe para arrumar.
-
Então você quer uma "hunt diária" que pode ser de 1-5 players e que consiga ter acesso a área X ao clicar na alavanca?
-
Eu não entendi muito o que quis dizer. Mas, crie um tópico novo para sua dúvida, pois ela é sobre TFS 0.4, que não é o caso do autor do tópico que é 1.2. Cria um tópico novo, e explica direitinho o que quer que eu te ajudo.
-
otclient [OTClient] Sistema de Dialogo Otpokemon
tópico respondeu ao Gengo de Yan Oliveira em Tutoriais de Clients
Parabéns pelo conteúdo! Vai ser muito útil para vários servidores. Fico feliz que em pleno 2020 ainda há membros como você que trazem conteúdos e recursos novos para a comunidade do Xtibia, pois, muitas pessoas não ajudam em nada e não trazem conteúdos/recursos algum para o fórum, mas, para vir pegar conteúdos novos, aparecem rapidinho! Sendo que muitos desses, tem capacidade para contribuir. Enfim, fico feliz que ainda contribuam para a comunidade. -
adicionei funçao getPlayerLifeAbsorb(cid)
pergunta respondeu ao Senju uchira de Yan Oliveira em Scripts
Primeiro que você não pode colocar links de outros fóruns aqui, recomendo remover porque isso pode te gerar banimento. Sobre seu pedido, não tem como dar atributo para players, somente para itens. O seu pedido não faz muito sentido, usar uma spell para dar atributo ao player. Mas, você pode ao usar a spell, atribuir um atributo para algum item. -
adicionei funçao getPlayerLifeAbsorb(cid)
pergunta respondeu ao Senju uchira de Yan Oliveira em Scripts
Poste o script da spell. -
adicionei funçao getPlayerLifeAbsorb(cid)
pergunta respondeu ao Senju uchira de Yan Oliveira em Scripts
Acabei de fazer uma função para você que faz isso, é temporário (pois seta o valor para 0 depois de 10 segundos). -
Magia com dois efeitos saindo no mesmo lugar em tempos diferentes
pergunta respondeu ao Icaro Simoes de Yan Oliveira em Scripts
Tem algumas coisas estranhas no seu script, primeiramente, na função: function getDmg_Brush_2(cid, level, maglevel) return (50) * -1, (150) * -1 end Por que está passando parâmetros na função se você nem os usa ou retorna? E na função RunPart(c, cid, var, dirList, dirEmitPos), você passa 5 parâmetros, porém, quando você chama a função RunPart na função onCastSpell e no addEvent, você só passa três parâmetros: RunPart(combat0_Brush, cid, var) addEvent(RunPart, 2000, combat20_Brush_2, cid, var) E sobre o que disse em relação ao efeito sair em outro lugar quando o summon se movimenta, isso é porque, a spell está saindo baseado no posição que pega da criatura: -
Quando você fala que da reload, é dentro do jogo? Ou reiniciando a distro?
-
Tudo bem, sem problemas amigo! Sei que você é iniciante, porém tem que avisar para você saber.
-
Qual a versão da sua TFS?
-
A função setCombatFormula(combat, skill, valorA, valorB, valorC, valorD) funciona assim: O primeiro parâmetro (combat) é o combat como o nome diz O segundo parâmetro (skill) é o tipo da skill Agora o (terceiro) parâmetro, que é um conjunto de quatro parâmetros, que são na ordem: valorA = Multiplicador da skill. valorB = Dano mínimo que a skill vai causar. valorC = Multiplicador de acordo com o level do player. valorD = Dano máximo que a skill vai causar. No seu caso tem 8 parâmetros de valores, não sei porque, nunca vi assim. Lembrando que se quer fazer uma spell de heal (cura), o segundo e o quarto valor (parâmetro) não podem ser negativos, do contrário irá curar o inimigo.
-
Como fazer Lava subir em determinado tempo
pergunta respondeu ao Narutinbrzica de Yan Oliveira em Scripts
E essa lava é um item, tile, ground? -
adicionei funçao getPlayerLifeAbsorb(cid)
pergunta respondeu ao Senju uchira de Yan Oliveira em Scripts
Exatamente, está confuso principalmente pelo título do tópico, que não tem nada haver com o pedido. Você pode fazer um addEvent com a função doItemSetAttribute: local function setAttribute(item, value, time) if time > 0 then doItemSetAttribute(item, "lifeabsorb", value) addEvent(setAttribute, 1000, value, time - 1) else doItemSetAttribute(item, "lifeabsorb", 0) end end Fiz uma função para você, não sei se quer que isso aconteça ao clicar em um item, mas, só colocar essa função em cima da função principal (onUse por exemplo) e dentro da função principal chama a função feita setAttribute(item, value, time), na qual os parâmetros item, value e time são: Item = Id do item Value = Valor do atributo (pode deixar 100 mesmo como deixou no xml) Time = Duração em segundos (deixe 10 já que é o valor que quer) Pelo que entendi, é isso que quer. Veja se é isso mesmo. -
Conseguiu resolver o problema?
-
Qual erro gerou?
-
Que bom que funcionou. Obrigado ?.
-
Primeiramente, obrigado pelo elogio, procuro sempre deixar os scripts de maneira fácil, para que qualquer um entenda. Sobre não teleportar, eu não tinha visto que seu TFS é 1.3, achei que era 0.4. O 1.3 é mais fácil ainda de fazer, troque o script por esse: local item_id = 1945 -- ID DA ALAVANCA local action_id = 8756 -- ACTION ID QUE COLOCOU NA ALAVANCA NO REMERES -- POSIÇÃO QUE OS PLAYERS TEM QUE ESTAR AO CLICAR NA ALAVANCA -- local position_players = { Position(1082, 1050, 7), Position(1082, 1051, 7), Position(1082, 1052, 7), Position(1082, 1053, 7), Position(1082, 1054, 7) } -- TABELA DOS MONSTROS E SUAS RESPECTIVAS POSIÇÕES DE ACORDO COM A QUANTIDADE DE PLAYERS TELEPORTADOS local monsters = { {nome = "Rat", pos = Position(1208, 960, 7)}, -- MONSTRO QUE VAI NASCER SE SÓ 1 PLAYER FOR TELEPORTADO {nome = "Centipede", pos = Position(1208, 960, 7)}, -- MONSTRO QUE VAI NASCER SE 2 PLAYERS FOR TELEPORTADO {nome = "Cockroach", pos = Position(1208, 960, 7)}, -- MONSTRO QUE VAI NASCER SE 3 PLAYERS FOR TELEPORTADO {nome = "spider", pos = Position(1208, 960, 7)}, -- MONSTRO QUE VAI NASCER SE 4 PLAYERS FOR TELEPORTADO {nome = "Paterson macion", pos = Position(1208, 960, 7)} -- MONSTRO QUE VAI NASCER SE 5 PLAYERS FOR TELEPORTADO } local position_destino = Position(1202, 960, 7) -- POSIÇÃO ONDE OS PLAYERS SERÃO TELEPORTADOS storage_global_quest = 89578 -- STORAGE GLOBAL, NÃO PODE SER USADO ESSE VALOR PARA OUTRA STORAGE E NEM PARA PLAYER local cooldown_alavanca = 3 -- TEMPO EM MINUTOS PARA O COOLDOWN DA ALAVANCA Game.setStorageValue(storage_global_quest, os.time()) -- COMEÇA SETANDO A VARIÁVEL GLOBAL COM HORÁRIO PARA NÃO FICAR VALOR NIL NA VARIÁVEL(POIS NÃO FOI SETADA ANTES) -- NÃO MEXER, SÃO VARIÁVEIS PARA PEGAR O RADIUS E VERIFICAR TODOS OS PLAYERS DENTRO DO RAIO NA FUNÇÃO GETSPECTATOR -- local y_inicial = 1050 -- TILE INICIAL (RADIUS Y INICIAL) local y_final = 1054 -- TILE FINAL (RADIUS Y FINAL) local center = Position(1082, 1052, 7) -- COORDENADA ONDE PEGA O TILE QUE FICA NO CENTRO DA DISTÂNCIA TOTAL RADIUS X,Y MIN E MAX local y = math.floor((y_final + y_inicial) / 2) -- MÉDIA DO RADIUS (PARA IR ATÉ AS DISTÂNCIAS A PARTIR DA MÉDIA) ----------------------------------------- CÓDIGO ----------------------------------------- function onUse(cid, item, fromPos, itemEx, toPos) if (item.itemid == item_id) and (item.actionid == action_id) then if Game.getStorageValue(storage_global_quest) <= os.time() then local players = Game.getSpectators(center, false, true, 1, 1, y, y) count_players = #players for _, player in pairs (players) do player:teleportTo(position_destino) end if #players ==1 then Game.createMonster(monsters[1].nome, monsters[1].pos) elseif #players ==2 then Game.createMonster(monsters[2].nome, monsters[2].pos) elseif #players ==3 then Game.createMonster(monsters[3].nome, monsters[3].pos) elseif #players ==4 then Game.createMonster(monsters[4].nome, monsters[4].pos) elseif #players ==5 then Game.createMonster(monsters[5].nome, monsters[5].pos) end for _, player in pairs (players) do player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Good lucky!") end Game.setStorageValue(storage_global_quest, os.time() + (60 * cooldown_alavanca)) return true else return cid:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The switch is in cooldown. You need to wait.") end end end Já arrumei o valor das variáveis, das coordenadas e o nome dos mosntros para você. Testei aqui e funcionou.
-
Então cara, é estranho, porque olhei o revive em bases diferentes e todas usa o mesmo script de revive, que é o mesmo que o seu. Tem que ver se você não mexeu na tabela global pokeballs.
-
Mas, de qual maneira quer pegar a vida de outro jogador? Sobre o doSendMagicEffect(), é só na source para mexer nele. Mas, essa função executa o efeito das suas sprites, então se quer uma sprite longa, coloque animações maiores.
-
Obrigado pelo elogio. Então, não uso não, eu faço de cabeça mesmo. Mas, se é algum script parecido com algum que já fiz, eu adapto para poupar tempo.
-
Foi, por que?
-
Você já tinha criado esse mesmo tópico em outra seção (apesar de essa ser a correta para o seu caso). Não fique spamando tópicos, aguarde ser respondido. Eu fiz o script no outro tópico.
-
Qual é a base do seu servidor? É PDA ou DXP?
-
Vai em Data/Actions/Scripts e crie o arquivo quest_alavanca.lua (ou um nome que preferir), e adicione o código: local id_alavanca = 1945 -- ID DA ALAVANCA local action_id = 6542 -- ACTION ID QUE COLOCOU NA ALAVANCA NO REMERES -- POSIÇÃO QUE OS PLAYERS TEM QUE ESTAR AO CLICAR NA ALAVANCA -- local position_players = { {x= 1000, y= 1000, z=7}, {x= 1001, y= 1001, z=7}, {x= 1002, y= 1002, z=7}, {x= 1003, y= 1003, z=7}, {x= 1004, y= 1004, z=7} } -- TABELA DOS MONSTROS E SUAS RESPECTIVAS POSIÇÕES DE ACORDO COM A QUANTIDADE DE PLAYERS TELEPORTADOS local monsters = { {nome = "Ferumbras", pos = {x= 1500, y= 1050, z=7}}, -- MONSTRO QUE VAI NASCER SE SÓ 1 PLAYER FOR TELEPORTADO {nome = "Goblins", pos = {x= 1500, y= 1050, z=7}}, -- MONSTRO QUE VAI NASCER SE 2 PLAYERS FOR TELEPORTADO {nome = "Medusa", pos = {x= 1500, y= 1050, z=7}}, -- MONSTRO QUE VAI NASCER SE 3 PLAYERS FOR TELEPORTADO {nome = "Mage", pos = {x= 1500, y= 1050, z=7}}, -- MONSTRO QUE VAI NASCER SE 4 PLAYERS FOR TELEPORTADO {nome = "Skull", pos = {x= 1500, y= 1050, z=7}} -- MONSTRO QUE VAI NASCER SE 5 PLAYERS FOR TELEPORTADO } local position_destino = {x= 1500, y= 1020, z= 7} -- POSIÇÃO ONDE OS PLAYERS SERÃO TELEPORTADOS storage_global_quest = 87898 -- STORAGE GLOBAL, NÃO PODE SER USADO ESSE VALOR PARA OUTRA STORAGE E NEM PARA PLAYER local cooldown_alavanca = 3 -- TEMPO EM MINUTOS PARA O COOLDOWN DA ALAVANCA ----------------------------------------- CÓDIGO ----------------------------------------- function onUse(cid, item, fromPos, itemEx, toPos) local player = nil local count_players = 0 if (item.itemid == id_alavanca) and (item.actionid == action_id) then if getGlobalStorageValue(storage_global_quest) <= os.time() then for i = 1, #position_players do player = getTileThingByPos(position_players[i]) if isPlayer(player.uid) then doTeleportThing(player.uid, position_destino) count_players = count_players + 1 end if (i == #position_players) and (count_players == 0) then return true end end if count_players == 1 then doCreateMonster(monsters[1].nome, monsters[1].pos) elseif count_players == 2 then doCreateMonster(monsters[2].nome, monsters[2].pos) elseif count_players == 3 then doCreateMonster(monsters[3].nome, monsters[3].pos) elseif count_players == 4 then doCreateMonster(monsters[4].nome, monsters[4].pos) elseif count_players == 5 then doCreateMonster(monsters[5].nome, monsters[5].pos) end doPlayerSendTextMessage(player.uid, MESSAGE_STATUS_CONSOLE_BLUE, "Good lucky!") setGlobalStorageValue(storage_global_quest, os.time() + (60 * cooldown_alavanca)) return true else return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The switch is in cooldown. You need to wait.") end end end Deixei tudo comentado, então está bem fácil de identificar, coloquei variável para determinar tempo de cooldown em minutos da alavanca ao clicar novamente (lembrando que tem que colocar uma storage ali que não foi usada ainda, e nem pode ser usada para outra coisa, pois, ela é global). Você também precisa arrumar as coordenadas das posições e o nome dos monstros (igual está no xml dele). Agora abre o actions.xml e adicione a tag: <action actionid="6542" event="script" value="quest_alavanca.lua"/> Coloquei verificação por actionid porque provavelmente essa alavanca deve ser usada em outras quests, então, você tem que colocar uma actionid (ou a mesma que coloquei ali de exemplo, caso não esteja em uso) nessa alavanca no Remere's (mapa). Após colocar no mapa, arrume o id da action na tag xml e na variável action_id no script.lua. Então, o script vai criar os monstros de acordo com a quantidade de players, deixei o limite de 5, e não esqueça de arrumar as coordenadas, deixei tudo genérico. Teste e fale se der algum erro.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.