Jump to content

Search the Community

Showing results for tags 'revscript'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • Projetos Open Source
    • MyAAC
    • OTServBR-Global
    • Mehah OTClient
    • Projetos Arquivados
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
    • Divulgação de Servidores
  • Outros
    • Design

Found 15 results

  1. Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: TFS1.3 Global Full. otbr 12.64 Qual é a sua pergunta? Estou com um problema, peguei a Wand of Remedy (Overcharged) e coloquei vários atributos nela porém não reconhece nenhum, apenas o ataque dela esta correto, visto que fiz o aumento e troquei o dano para ice. gostaria de saber se tem algo errado ou se precisa fazer outra coisa além de modificar os arquivos que vou mostrar aqui Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Items.xml /scripts/movements/equipment/sunscripted_equipments.lua { itemid = 29276, type = "equip", slot = "hand", level = 8, vocation = { {"Sorcerer", true}, {"Druid", true, true}, {"Master Sorcerer"}, {"Elder Druid"} } }, -- King wand { itemid = 29276, type = "deequip", slot = "hand", }, -- King Wand /scripts/weapons/unscripted_weapons.lua { itemId = 29276, type = WEAPON_WAND, wandType = "ice", level = 8, mana = 21, damage = {350, 500}, vocation = { {"Sorcerer", true}, {"Druid", true, true}, {"Master Sorcerer"}, {"Elder Druid"} } }, -- King wand Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  2. Scripting Brodcast Revscript

    Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: Qual é a sua pergunta? alguem consegue converter esse script para revscript ? , quero esse tipo de script automatico pra ficar falando as msg de tempo em tempo Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: function onThink(interval, lastExecution) local messages = { "[COMANDOS] !report - !pz - !kills - !bless - !aol - !buyhouse - !sellhouse - !serverinfo - !online - !uptime - !outfit.", "[BUGS] problemas ou sugestões? Entre em nosso site e mande um Ticket!\nA cada Report válido de BUG's você recebe um bonus!", "[Contato] Email: [email protected] >> Discord: discord.gg/Q82megV", "[Evento]: Draptor Quest! a draptor quest fica no andar de cima dos Trainers na Adventure's Guild voce pode acessar ela pelos trainers, com Adventures Stone ou usando o comando !temple dentro do templo de thais! divirta-se e traga seus amigos!", "[TICKETS]: Utilize nosso atendimento por tickets para falar com um membro superior.", "[REGRAS]: Evite ser punido, não viole nossas regras.", "[SISTEMA]: O global save do servidor ocorre todos os dias às 06:00hrs.", "[SEGURANÇA]: Nunca use a mesma senha de outros servidores, pois você estará facilitando a vida dos hackers.", "[SEGURANÇA]: Proteja sua senha. Use-a apenas em nosso website oficial.", } Game.broadcastMessage(messages[math.random(#messages)], MESSAGE_EVENT_ADVANCE) return true end Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  3. Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: OtserverBR Qual é a sua pergunta? Boa noite pessoal, alguem teria um sistema de task para tfs 1.3x que posso disponibilizar? exemplo da imagem abaixo? Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  4. Scripting Erro Script

    Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: OTServerBR Qual é a sua pergunta? Fala pessoal beleza? converti um script do 0.4 para a tfs 1.3 porém ele esta me apresentando um erro. O Script é uma wand que troca de elementos atraves de comandos. vou postar o script abaixo. o erro é o seguinte cada hit que a wand da no monster aparece o seguinte erro na distro. Lua Script Error: [Scripts Interface] C:\Users\Leonardo Macedo\Desktop\otservbr-global\data\scripts\weapons\scripts\wand_elements.lua:callback LuaScriptInterface::luaAddEvent(). Argument #3 is unsafe stack traceback: [C]: in function 'addEvent' ...br-global\data\scripts\weapons\scripts\wand_elements.lua:23: in function <...br-global\data\scripts\weapons\scripts\wand_elements.lua:15> sempre da da um hit sobe o erro a linha 15 seria esta addEvent(doAreaCombatHealth, 100, cid, wx.dmg, getThingPos(target), 0, -min, -max, wx.ef) o script completo esta abaixo. Caso funcione pode até deixar disponivel para o pessoal usar. pois para servidor custom é um otimo script! Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  5. Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: OTServerBR Qual é a sua pergunta? Fala pessoal beleza? eu estou usando esse sistema de reset postado no forum. funciona perfeitamente, eu só gostaria de saber se podem me ajudar com uma coisa. Quando o player vai resetar o npc fala Voce quer resetar seu personagem? vai custar um total de 5000000 gp's! Nesse 5000000 gp's é possivel deixar ele falando 5kks? O sistema funciona assim no primeiro reset é cobrado 5kk no segundo acrescenta mais 5kk assim sucessivamente. Queria saber se podem me ajudar a colocar o npc pra falar 5KKs 10KKs 15KKs 20KKs etc... Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  6. Scripting [AJUDA] reward chest

    Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: OTServerBR Qual é a sua pergunta? Fala pessoal é possivel criar um script para todas as quests do servidor? como o exemplo abaixo? tipo a action 1300 ao 1302 seria para demon helmet quest ou apenas uma action para 1 recompensa? Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  7. Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: https://github.com/opentibiabr/otservbr-global Qual é a sua pergunta? Pessoal a mecanica do Ferumbras' Ascendant não esta funcionando? fui testar porém não esta funcinando, estava matando os Rift Invaders ao lado dos pilares azuis porém ele não ficava rosa de maneira alguma. Alguem pode me informar se realmente esta funcionando ou não? Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  8. Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: OTserverBR Qual é a sua pergunta? Fala pessoal beleza? então estou com um problema em meu servidor. Nenhuma criatura esta atacando os players como podem ver na foto abaixo, conseguem me ajudar com isso? Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  9. Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: Evento Monter Hunt TFS 1.X https://************.com/forums/topic/101143-evento-monster-hunt-tfs-1x/ Uso o https://github.com/opentibiabr/otservbr-global.git como base para meu servidor Qual é a sua pergunta? Fala pessoal beleza? peguei um script de evento em um outro fórum, consegui converter para revscript e esta funcionando quase 100%, eu estou com um problema no contador de monstros mortos que seria meu moveevent, vou postar o script abaixo para que deem uma olhada. Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  10. Scripting [AJUDA] monster.events

    Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: Otserver-BR Qual é a sua pergunta? Fala pessoal beleza? Gostaria de saber se é possivel colocar 2 monsters.events no mesmo monster.xml monster.events = { "LeidenHeal" } Como queria colocar monster.events = { "LeidenHeal", "LeidenDead" } eu criei uma função onde quando o boss leiden morrer nascer o boss principal, porem ja tem um evento setado ao leiden que é "LeidenHeal" e são duas funções diferentes. LeidenHeal = function leidenHeal.onHealthChange LeidenDead = function leidenDeath.onDeath vou postar os scripts abaixo com as duas funções e o monster.xml Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  11. Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: Servidor base: https://github.com/opentibiabr/otservbr-global.git Qual é a sua pergunta? Fala pessoal, alguem possue script de castle 24h em Revscripts e que posso disponibilizar? Ficarei muito agradecido! Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  12. [RevScript] Sistema vip

    Olá, venho compartilhar um sistema de VIP, para dar aquele upgrade no seu servidor. Lembrando que o sistema não é de minha autoria, porem eu adicionei algumas funções extras e converti pra atual versão RevScript. Baseado e compatível com o OTSERVER OTBR. Para começar vamos executar um comando MySQL na sua database. ALTER TABLE `accounts` ADD COLUMN `viplastday` int(10) NOT NULL DEFAULT 0 AFTER `lastday`, ADD COLUMN `vipdays` int(11) NOT NULL DEFAULT 0 AFTER `lastday`; Agora, vá até a pasta data/lib e crie um arquivo chamado vip_system.lua e adicione o script dentro. Após fazer isso, abra o arquivo lib.lua e adicione na ultima linha. dofile('data/lib/vip_system.lua') Pronto, agora vamos até a pasta data/scripts/custom. Essa pasta vamos usar para adicionar o restante dos arquivos, e caso você tenha que restaurar seu repositório, ficara mais fácil transferir os arquivo. Primeiramente vamos ao item que será usado para adicionar o vip ao player. Dentro da pasta custom crie um arquivo chamado vip_scroll.lua e adicione o script dentro. Agora vamos criar os comandos para os player e para o administrador, crie outro arquivo chamado vip_godTalkaction.lua e adicione o script dentro. Agora crie outro arquivo chamado vip_playerTalkaction.lua e adicione: Agora vamos para a parte final do sistema, vá até a pasta data/scripts/creaturescripts/others e abra o arquivo login.lua, procure pela linha function playerLogin.onLogin(player) e logo abaixo adicione. player:loadVipData() player:updateVipTime() player:addAddonMount() Pronto, o sistema esta finalizado. Agora algumas funções extras. Adicionar 20% de EXP para o player VIP. Vá até a pasta data/events/scripts e abra o arquivo player.lua, procure pela linha function Player:onGainExperience(source, exp, rawExp), vá até o final dessa function e ANTES do return exp adicione: if self:isVip() then exp = exp * 1.2 -- 20% exp end Adicionar 20% de LOOT para o player VIP. Vá até a pasta data/events/scripts e abra o arquivo monster.lua, dentro da function Monster:onDropLoot(corpse). Procure por local item = corpse:createLootItem(monsterLoot, boolCharm) e ANTES adicione: local vipPercentLoot = 0 if player:isVip() then local percent = 20 -- 20% mais loot if percent then vipPercentLoot = (percent / 100) end end monsterLoot[i].chance = monsterLoot[i].chance + (monsterLoot[i].chance * vipPercentLoot) Pronto! Logo adicionarei mais eventos e sistemas que fiz a conversão. Creditos: Printer e Numm / Otland
  13. Scripting Introdução ao Revscriptsys

    O que é a linguagem Lua? Antes de mais nada, deixarei vocês com uma pequena introdução do que é a linguagem Lua, veja neste link. Introdução ao Revscriptsys O que é revscriptsys? Antes de mais nada, você precisa saber que o revscriptsys é compatível apenas com: TFS 1.3. OTServbr-Global, que foi criado usando como base o TFS 1.3. OTX 5, que foi criado usando como base o TFS 1.3 e OTServBR-Global. O revscriptsys é uma nova forma de registrar scripts para que você não precise fazer isso via XML (apenas em Lua). Você só precisa colocar seus scripts Lua dentro de "data/scripts/" ou em qualquer subpasta dele, se desejar. Os scripts de monstro são colocados em um caminho diferente: data/monster também sendo possível colocar em qualquer subpasta e organizar como você bem entender. Este sistema suporta o uso de diferentes metatables no mesmo script (Actions, MoveEvents, GlobalEvents... Etc). Isso é muito útil se você fizer missões prolongadas (por exemplo), não necessitando criar arquivos separados para cada metatable. O script deve conter um cabeçalho e rodapé, confirme mostrado no exemplo a seguir. Exemplo de action: No exemplo acima, temos uma Action e um MoveEvent dentro do mesmo script, lembra da introdução? O revscriptsys suporta o uso de diferentes metatables no mesmo script. O "testAction" é uma variável (local), o que significa que você pode mudar ele para qualquer outro nome do seu gosto, por exemplo: local scythe = Action() Fazendo isso, você também precisa modificar a variável que fica na linha do function, ficando assim: function scythe.onUse(player, item, fromPosition, target, toPosition, isHotkey) Também precisa modificar a variável do "id", ficando assim: scythe:id(2550) E a do register, ficando assim: scythe:register() Créditos pela introdução e o tutorial acima são da forgottenserver, veja o tutorial completo aqui (está em inglês). Lá, também vai conter outros exemplos de metatable. Não irei colocar todos os exemplo de uso dos metatables aqui, pois, vou criar um tutorial para cada tipo de metatable, exemplificando cada um, o exemplo acima é apenas para explicar como funciona o sistema. Links úteis e FAQ's: Video Aulas de linguagem Lua Acima, deixo vocês com o link para ótimas vídeo aulas de linguagem Lua no YouTube. O que são variáveis globais e locais? O link acima direciona para a wikipedia. Basicamente, variável é onde você define uma função que poderá ser chamada várias vezes num só script No nosso exemplo, a variável é o "testAction", que é chamado 3 vezes (tirando o registro da própria variável na linha 2) O que são metatables? O link acima direciona para a wikipedia, é uma breve descrição do que é metatable em Lua, porém, é uma explicação generalizada, não tem nenhuma ligação com otserver. Mas, afinal, o que são os metatables? No nosso exemplo acima, metatable é uma função que declara as classes de scripts. Por exemplo: Action() Quais são os metatables disponíveis para o revscriptsys? Agradecimentos e créditos ao criador do revscriptsys, Evil Hero. Link para o pull request do revscriptsys no projeto theforgottenserver: revscriptsys by EvilHero90 · Pull Request #2558 · otland/forgottenserver · GitHub
  14. [RevScript] Sistema Guild Level

    Olá, venho compartilhar um sistema de GUILD LEVEL, para dar aquele upgrade no seu servidor. Lembrando que o sistema não é de minha autoria, porem editei e converti pra atual versão RevScript. Baseado e compatível com o OTSERVER OTBR. Para começar vamos executar um comando MySQL na sua database. Agora, vá até a pasta data/lib e jogue esse o script dentro. guildLevel.lua Após fazer isso, abra o arquivo lib.lua e adicione na ultima linha. Pronto, agora vamos até a pasta data/scripts/custom. Essa pasta vamos usar para adicionar o restante dos arquivos, e caso você tenha que restaurar seu repositório, ficara mais fácil transferir os arquivo. Adicione esse arquivo dentro. guild_Level.lua Agora vá até a pasta data/scripts/creaturescripts/others e abra o arquivo login.lua, procure pela linha function playerLogin.onLogin(player) e logo abaixo adicione. Vá até a pasta data/events/scripts e abra o arquivo player.lua, procure pela linha function Player:onGainExperience(source, exp, rawExp), vá até o final dessa function e ANTES do return exp adicione: Vá até a pasta data/events/scripts e abra o arquivo monster.lua, dentro da function Monster:onDropLoot(corpse). Procure por local item = corpse:createLootItem(monsterLoot, boolCharm) e ANTES adicione: Pronto, agora vamos as source, um pouco mais complicado. Abra o arquivo luascript.cpp Procure por e NA LINHA ABAIXO adicione: Procure por e NA LINHA ABAIXO adicione: Abra o arquivo luascript.h Procure por e NA LINHA ABAIXO adicione: Abra o arquivo guild.cpp Procure por e NA LINHA ABAIXO adicione: Abra o arquivo guild.h Procure por e NA LINHA ABAIXO adicione: Procure por e NA LINHA ABAIXO adicione: Abra o arquivo ioguild.cpp Procure por Substitua tudo por No final do arquivo adicione: Abra o arquivo ioguild.h Procure por e NA LINHA ABAIXO adicione: Após terminar de adicionar os codigos, compile as source e desfrute do sistema. Explicação: Sistema de guild vai até level 10 (você pode adicionar mais). Cada level conta com uma % de bônus diferente, lembrando que é acumulativo o bônus e você pode editar da maneira que preferir. Você pode editar a quantia de exp que a guild ira ganhar para cada criatura morta, quanto de exp necessita para upar o level da guild, e o level necessário que o player precisa para contabilizar o kill. Adicionei um comando (!guild) onde é possível ver o level da guild, exp adquirida e exp necessária pro próximo level. A guild ao passar de level, uma mensagem é mandada pra todos os players. Algumas prints do sistema Creditos: brunomaidana (conversão), eduardo dantas (base)
  15. Olá Quero ajudar com um comando em revscript Hoje trago um código que vai permitir que você execute o comando !Shop no jogo para receber os itens, para quem usa Znote Account, pois o código fornecido não funciona, mas este funciona perfeitamente com OtservBR tfs 1.3 doc: otservbr\data\scripts\talkactions\znoteshop.lua chame o documento znoteshop.lua Achei importante compartilhar com vocês, porque ninguém postou lá em nenhum fórum, exceto eu no otland, e muitos não conseguem fazer funcionar! A modificação feita é a palavra adicionada na frente de onUse, linha 81 de gameclient excluída e adicionada o znoteShop:separator(" ") Eles estão faltando no github znote e as alterações não foram feitas, eu relatei, mas enquanto isso aqui está o código!
×