Jump to content

Search the Community

Showing results for tags 'ramza'.



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 20 results

  1. [TFS 0.3.6] onSpawn (Corrigido)

    Olá! Tenho visto alguns códigos pra função "onSpawn" em alguns forums, porém, nenhuma funcionando direito ou de uma forma boa. Resolvi postar a versão do jeito que eu fiz, funcionando 100% pra todos os casos e de forma mais "Limpa". Primeiro, vá para creatureevent.h e procure por: uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Abaixo disto, cole: uint32_t executeSpawn(Creature* creature); Então, procure por: CREATURE_EVENT_PREPAREDEATH, E abaixo disto, cole: CREATURE_EVENT_SPAWN, Agora vá para creatureevent.cpp e procure por: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; E abaixo disto, cole: else if(tmpStr == "spawn") m_type = CREATURE_EVENT_SPAWN; Procure por: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; E abaixo disto, cole: case CREATURE_EVENT_SPAWN: return "onSpawn"; Então, procure por: case CREATURE_EVENT_LOGIN: return "cid"; E troque por: case CREATURE_EVENT_LOGIN: case CREATURE_EVENT_SPAWN: return "cid"; Então, no fim do arquivo (creatureevent.cpp), cole isto: uint32_t CreatureEvent::executeSpawn(Creature* creature) { //onSpawn(cid) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ std::stringstream desc; desc << creature->getName(); env->setEventDesc(desc.str()); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); bool result = m_interface->callFunction(1); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeSpawn] Call stack overflow." << std::endl; return 0; } } Então vá para monsters.h e procure por: private: ACIMA disto, cole: void alertSpawn(); Agora vá para monsters.cpp e procure por: void Monster::onCreatureAppear(const Creature* creature) ACIMA disto, cole: void Monster::alertSpawn() { CreatureEventList onSpawnEvents = getCreatureEvents(CREATURE_EVENT_SPAWN); for(CreatureEventList::iterator it = onSpawnEvents.begin(); it != onSpawnEvents.end(); ++it) (*it)->executeSpawn(this); } Agora vá para spawn.cpp e procure por esta função: bool Spawn::spawnMonster(uint32_t spawnId, MonsterType* mType, const Position& pos, Direction dir, bool startup /*= false*/) No fim dela, onde estará assim: return true; } Troque por isto: monster->alertSpawn(); return true; } Agora compile e veja se está tudo OK. Agora vamos para data/creaturescripts/creaturescripts.xml, abra e adicione isto lá dentro: <event type="spawn" name="spawn" event="script" value="spawn.lua"/> Agora crie um arquivo dentro de data/creaturescripts/scripts chamado spawn.lua e cole isto: function onSpawn(cid) print("Spawned monster - Name: ".. getCreatureName(cid)) end Você pode mudar pra fazer o que quiser, deixei esse código assim pra você ter como testar ao iniciar seu server, mas não é uma boa ideia deixar assim. Para registrar isso nos monstros, vá para data/monsters/scripts, abra o arquivo do monstro que você quer e deixe o fim do arquivo assim: <script> <event name="spawn"/> </script> </monster> E pronto, deverá tudo funcionar perfeitamente. Espero ter ajudado, e qualquer coisa é só falar. Abraços! Ramza (Ricardo Ianelli)
  2. Vocês jogariam um ATS de Pokemon em batalha tática, estilo final fantasy tactics, dofus, tactics ogre, etc?
  3. Fala galera, tudo bom? Hoje foi ao ar o Website Prévia do Shinobi Online, contendo informações sobre alguns Clans! Não deixem de dar uma olhada, curtir a página e ficarem atentos, o Alpha Test está cada dia mais próximo e você ainda pode garantir sua vaga! (Obs.: Previsão de 1 mês no máximo até o lançamento do Alpha) Clique no link abaixo para ir pro site, e não esqueça de postar aqui sua opinião! http://www.ShinobiOnline.com.br Abraços a todos, espero que gostem. Atenciosamente, Rick (Ramza). Obs.: O site está hospedado na empresa http://www.unlhost.com , que por sinal é muito boa e BARATA. Pra quem tiver precisando de uma hospedagem boa e barata pra site, eu recomendo dar uma olhada =)
  4. Fala galera, tudo bom? Depois de um tempo parado, finalmente voltamos para dar noticias pra vocês! Estamos cada vez mais perto de fazermos o Alpha Test, que será privado com apenas alguns convidados que ganharam/estão ganhando as promoções que sempre postamos na página do Facebook (colocarei um link no final do tópico). Ontem, nosso membro da equipe Rizzou Hachiki, que toma conta da página do facebook, surpreendeu todo mundo que achava que o projeto estava parado com um super video pra mostrar que ainda estamos ativos: Para concorrer a uma vaga no Alpha Test, curta nossa página no Facebook, participe das promoções que surgirem e compartilhem o post do video: "Dream to Reality", e não esqueçam de comentar com suas dúvidas, sugestões, críticas e elogios! Para ir pro post do video "Dream to Reality", clique AQUI! Não esqueçam de curtir nossa página no Facebook, que é onde postamos novidades e promoções: http://www.facebook.com/ShinobiOnline Abraços a todos, espero que gostem. Atenciosamente, Rick (Ramza).
  5. Yoooooooo Peopleee! Depois de muito tempo sumido, perdido, abandonado, jogado às baratas comedoras de suchrilhos com yogurte de morango, eis que volto a dar noticias! :aawyeah: Venho aqui dessa vez pra pedir ajuda de vocês, e espero que ajudem pq se não eu dou uma coça quando o Zodiac ficar ON, ou no mínimo crio uns Crocodiles inusitados pelos cantos com meu summoner hi-lv :trollface: Vamos ao que interessa. O Zodiac acabou, não vai mais ter nada, cansei de fazer aquela bosta, tava muito ruim, eu não matava nem um rat, adeus. wtf :cerealguy2: :argh: :omg: :xzibithuh: :what: :domal: Briiiiiiiiiiiiiiiiiiiiiiiinks, venho dar boas noticias! :xzibitlaugh: Enfim, nesse meio tempo eu fiz algumas 'mudancinhas' no Zodiac, entre elas: Formulas de dano modificadas, dessa vez a fórmula é tão simples que vocês podem calcular facilmente o dano, já que eu tirei o sistema de armor do tibia, e agora os equips dão (+HP), que é HP adicional enquanto você os usa, e o sistema de shield não é mais o do tibia, portanto, não tem formula alguma de 'diminuir' o dano, portanto dá pra calcular certinho seu minimo dano (0, sempre) e o máximo (skill * (ataque * 0.1)). Obs.: Pra quem não sabe, ' * ' significa "vezes". 2 * 2 = 4. Fora isso, haste e haste2 agora também aumentam a velocidade de ataque além da velocidade de movimento, a forja está modificada, free accounts poderão forjar items pré-determinados (os que já existem no jogo, descobrindo a receita deles) e os premmium accounts terão a opção de forjarem itens custom (como tava o sistema de forja antigo). Cada ore dá um bonus diferente pro seu equipamento, alguns dão +HP, outros DEF, outros ATK, outros +AttackSpeed, outros +Durabilidade, etc. Talvez eu mude o sistema de forja (sim, de novo), mas é que quero sempre deixar melhor, e cada hora tá melhorando Todos os jobs poderão usar as runas de Black Mage novamente, como no primeiro TS. Necromancers terão uma nova magia chamada 'Death Impact', na qual você precisa de uma runa em branco e vários corpos de demon skeleton (sem ser summon) pra fazê-la, sendo o dano altíssimo e todos os jobs podem usar. O mapa é finalmente um mapa novo e grande (:megusta:), porém eu não devo colocar muitos NPC's e quests no TS porque se não perde a graça, quero testar a jogabilidade nos TS's White Mages criarão runas de cura, e todos poderão usar as runas. Talvez eu mude o sistema de fishing temporáriamente. Loot dos monstros diminuído, agora volta a ser praticamente como no primeiro TS, raramente monstros vão dropar algo, você vai ter de tirar tudo com skill de hunting se quiser fazer grana através de caçadas Enfim, tem muita coisa nova Entre elas, está também o sistema de signos. Como sabemos, nosso Zodiaco consiste em 12 signos: Aries Touro Gêmeos Câncer Leão Virgem Libra Escorpião Sagitário Capricórnio Aquário Peixes E pra ficar mais interessante, o sistema funciona da seguinte forma: Você cria seu char, e não sabe qual é seu signo. Depois de algum tempo jogando (pode ser 5 minutos, ou 5 horas) você recebe o 'sinal' de qual é seu signo, aparecendo o simbolo do signo em cima de você brilhando durante um tempo. (Pra quem já leu Percy Jackson, sabe +/- do que eu tô falando). A partir do momento em que você descobre seu signo, os efeitos dele passam a reger sobre você. E é exatamente sobre esses efeitos que quero discutir com vocês. Não sei se vocês sabem o que é um brainstorm, mas generalizando, todo mundo fala várias doideras, e dai depois a gente junta tudo e vê no que vai dar, selecionando os melhores. Bem, o que eu quero de vocês é: Dêem idéias dos efeitos que cada um dos signos podem dar sobre a pessoa, seja eles +10% de atk speed permamente, imunidade à poison, diminuição de dano, O QUE FOR. Dica: Podem viajar também, falar coisa que pareça impossivel, o objetivo do brainstorm é exatamente esse. E podem postar quantas coisas quiserem, porém, peço que não floodem o tópico, e que tentem fazer em 1 post só a idéia pra todos, exemplo: Post 1: Ai, se depois você quiser dar mais idéias pra sei lá, Sagitário. Ai você cria outro post, com TODOS OS SIGNOS, escreve sua idéia no sagitário e escreve outras idéias, mesmo que ruims ou malucas, nos outros signos. Acreditem, isso dá resultado. Bem, vamos lá, espero que ajudem, conto com vocês gogogogogogo zodiac brainstorm!
  6. Criar Conta (Apenas se o acc manager não funcionar in-game): http://forums.otserv.com.br/showthread.php?201271-Cria%E7%E3o-de-Conta-e-Personagem Edit: Link para download do client: http://www.multiupload.nl/KWI831B4YJ O quarto Test Server do Zodiac Legacy abrirá na Sexta, dia 20/04/2012, às 13:30. 30 minutos antes de abrir, este tópico será editado e o link para download do client será inserido. Quaisquer bugs encontrados, favor postar nesse tópico AQUI (clique para ser redirecionado). Classes Disponíveis: Warrior, Knight, Archer, Wizard, Dragoon e Blue Mage. Mudanças: Jobs Refeitas Skill Scrolls sumiram. Agora se aprende direto do NPC. Certos tipos de equipamentos (armas, armaduras, etc) só podem ser utilizadas por jobs específicas, a menos que o jogador utilize habilidades especiais como Equip Knight Sword, Equip Bow, etc. Para mais detalhes, clique AQUI. Leiam isto: http://forums.otserv.com.br/showthread.php?201266-Zodiac-Legacy-B%E1sicos&p=1417216#post1417216 Enquanto está off: http://xat.com/zodiaclegacy
  7. HERE I AM, ROCK YOU LIKE A HURRICANE! LOL FALA GALERA \O\ Bem, a algum tempo voltei a trabalhar num projeto antigo que eu havia perdido, chamado TIBS, e dessa vez já tive um avanço significativo, comecei a 5 dias e já fiz todo o sistema praticamente, falta só adicionar monstros, porém, PvP já está 90% pronto. Em breve, farei um TS com 16 pessoas (incluindo eu), 8 pra cada time, vocês poderão escolher entre 3 classes, e já virão no lv 20 e com stats bonzinhos: - Fighter: Classe focada em artes marciais. Utiliza socos e chutes pra lutar. - Magic: 1 - Atk: 8 - Def: 8 - Speed: 10 - Luck: 5 - HP: 70 - Mana: 10 - AP: 6 - MP: 4 - Wizard: Classe focada em magias. - Magic: 10 - Atk: 3 - Def: 3 - Speed: 7 - Luck: 8 - HP: 50 - Mana: 60 - AP: 6 - MP: 3 - Ninja: Classe mista. Foca em ataques físicos e mágicos. - Magic: 5 - Atk: 5 - Def: 5 - Speed: 15 - Luck: 15 - HP: 60 - Mana: 20 - AP: 5 - MP: 5 Pra quem já jogou Final Fantasy Tactics, Tactics Ogre, Dofus, ou algo do tipo, sabe como é o sistema de batalha. O sistema de batalha é por turnos, cada equipe pode ter até 8 membros. A ordem de batalha varia de acordo com a Speed dos membros, e se um membro por algum acaso usar alguma magia pra aumentar a speed dele durante os turnos, pode ter seu turno mais rápido. Os skills são por icones, e gastam AP. Seu AP e seu MP se renovam todo turno, seus MP servem pra andar. Pra cada MP, você pode dar 1 passo. Todos os chars tem um "CT" (Charge Time) que é o que verifica quando o player terá seu turno. Quanto maior sua speed, mais rápido seu CT sobe, e quando ele atinge 100, é seu turno. Quando um player morre, ele não sai da arena. Seu corpo fica lá, ele não tem mais seu turno pra jogar, mas ainda assim pode assistir a luta. Caso tenha alguma classe de cura ou item que possa reviver, o jogador poderá ser revivido. Se você for morto, mas seu time vencer, você volta vivo da batalha, e ainda reparte os 'lucros'. Os lucros (que ainda não estarão implementados no TS pq não haverá monstros) serão divididos entre os vencedores da batalha, e quanto maior sua Luck, maiores as chances de conseguir coisas melhores. Alguns itens só dropam se a Luck do grupo atingir um certo nível, exemplo: Platinum Sword, precisa de no mínimo 80 de Luck pra dropar. Ou seja, somando a Luck de todos do grupo, tem de dar 80 pra poder TER UMA CHANCE de dropar a Platinum, isso não quer dizer que VÁ dropar ela. Attack é o seu dano. Magias e armas dão dano adicional ao seu attack. Defense é sua defesa, ela que diminuirá o dano levado. Equipamentos dão HP adicional, e escudos dão +def. O dano é calculado da seguinte forma: (Attack + Ataque_da_arma/skill ) - Defesa do inimigo Ou seja: Com ataque 8, usando uma skill de Ataque 4, lutando contra um inimigo com Def 6, você daria: (8 + 4) - 6 No caso, daria 6 de dano. Porém, dependendo da sua Luck, você pode dar de 10 a 50% mais dano. Então, se você desse um critical hit com 100% de poder, seu dano seria aumentado em 50%, sendo então 9 de dano. Sua speed influencia, além da sua rapidez nos turnos, na sua chance de se esquivar. Você pode se esquivar tanto de ataques mágicos quanto físicos. Bem, a seguir, postarei uma fotinha só pra vocês verem um pouquinho: Enfim, muito em breve eu devo dar mais noticias, portanto, fiquem ligados Abração, Ramza (Ricardo Ianelli)
  8. E ai galera, beleza? =) A pouco tempo fiz uma enquete pra escolher o primeiro novo job do Zodiac Legacy, um servidor que venho fazendo por diversão à algum tempo. Agora, venho lhes dar uma prévia de como serão alguns dos jobs do servidor, e como será o sistema de job - subjob. Lembrando que não explicarei totalmente sobre os jobs, apenas darei uma PEQUENA introdução. Obs.: Lembrando que aqui não falarei de todos os Jobs, ou seja, existem OUTROS além desses que falarei aqui. Sistema Resumindo ao máximo, o sistema consiste na seguinte afirmação: "Só se pode usar um skill caso possua o job ou subjob da classe à qual ele pertence, e caso tenha o aprendido." Ou seja, caso queira usar os "Jump's" do job Dragoon, terá de possuir Dragoon como seu job ou sub-job, e ter aprendido tal skill. Knights Knights possuem técnicas de quebramendo, sendo especializados em combate defensivo e ofensivo. Possuem skills como "Break Armor" ou "Break Shield". Archers Archers são especialistas em combate à distância. Suas flechas são sua arma mais fatal, e algumas histórias contam que alguns Archers conseguiam atravessar escamas de Dragões com tremenda facilidade. Archers aprendem Shoot-types, como Normal Shoot, Triple Shoot, Leg Aim, e Penetrating Arrow. O Shoot-type pode ser mudado in-game falando: " shoot-type normal shoot " por exemplo. Fighter "No pain, no gain", esse é o ditado dos Fighters. Combatentes natos que treinam seus corpos até o limite, visando sempre conseguir mais e mais resistência. Fighters não treinam para conseguir poder de ataque, e sim, resistência, pois como diria o velho treinador Royck: "It's not about how hard you hit, it's about how hard you can get hit, how much you can take and keep moving forward. That's how winning is done." Fighters possuem os mais váriados golpes, como Spin Fist, Wave Fist, Earth Slash, Right Kick, Left Kick, etc. Dragoon Dragon Knights, como são conhecidos. Não se sabe ao certo se ainda existem, mas lendas contam que para se tornar um, deverieis matar um Dragão sozinho. Haha, como se alguém conseguisse. Mas enfim, segundo as lendas, os Dragoons tem seu corpo duro como escamas de dragão, e são especialistas nas "Jump's", conseguindo acertar até o inimigo mais protegido. Time Mage Aí está outra lenda. Os livros dizem que um dos Zodiac Braves, e talvez, o responsável pelos sobreviventes, era um Time Mage. Especialistas em manipular o tempo-espaço, nas histórias eles são capazes de acelerar o tempo, desacelerar, abrir portais, conjurar buracos negros ligando um ponto a outro, e outras coisas absurdas. Como pode algum mago poder fazer isso? E algumas crianças ainda dizem ter visto um ou outro por aí, haha, hilário! Priest Priests são especializados em Cura. Um grupo de guerreiros sem um priest é como bacon frio. Se você está encrencado, sangrando, com um urso selvagem atrás de ti, não vá chorar e rezar para que um time mage apareça pra lhe resgatar, ou um Dragoon transformar o urso em bola de pelo, ou gritar pelo nome de algum Holy Knight, ou quando é picado por uma aranha ou escorpião, e sente que a luz some de seus olhos. Nessas horas geralmente são Priests que lhe salvam. Com poderes curativos formidáveis, eles salvarão sua bunda muitas vezes, pode ficar certo disto. Thief "Ho Ho Hills! Tragam o rum e escondam os Gil's". Talvez o job mais perigoso de todos. Se tem algo que os descreve, é a música dos famosos CDCA: " So lock up your daughter, and lock up your wife, lock up your back door, and run for your life. The man is back in toooooown so don't you mess around! ". Thiefs podem roubar seu dinheiro enquanto assobia, faz um truque de mágica e finge ser uma donzela, e você nem vai perceber. Existem relatos de Thief's que foram pegos desarmados, roubaram as armas dos atacantes durante a luta, e ainda chutou a bunda deles pra longe.
  9. table.compare

    Fala galera! Vim aqui postar uma funçãozinha que vai ser muito útil pra muita gente que sofre tentando comparar tabelas, incluindo posições, etc. Essa funçãozinha minha compara tabelas, tabelas dentro de tabelas, strings, numeros, etc. Instalação Apenas cole isto em alguma lib sua ou no final do arquivo constant.lua que fica geralmente na pasta data/lib do seu servidor. Identação feita pelo IuniX noob KKK function table.compare(table1, table2) -- Function by Ramza(Ricardo Ianelli) local count = 0 for _,v in pairs(table1) do for j,k in pairs(table2) do if type(v) == 'table' and type(k) == 'table' then count = count + table.compare(v,k) else if v == k then count = count + 1 break end end end end return count == #table1 and 1 or 0 end Identação minha function table.compare(table1, table2) -- Function by Ramza(Ricardo Ianelli) local count = 0 for _,v in pairs(table1) do for j,k in pairs(table2) do if type(v) == 'table' and type(k) == 'table' then count = count + table.compare(v,k) else if v == k then count = count + 1 break end end end end return count == #table1 and 1 or 0 end Espero que seja útil, abraços, Ramza.
  10. Obs.: Arrumei a imagem do outfit 2! Fala ai galera, venho aqui hoje pedir a opinião de vocês sobre o outfit de Vampire, e explicar um pouco sobre algumas coisas da história que o povo pode ter estranhado. Pra quem não se lembra, uma pequena descrição sobre os vampires: Vamos lá, primeiro os outfits! Outfit 1 Outfit 2 Votem na enquete para eu escolher qual outfit usar! Agora vamos lá! Algumas pessoas em pediram explicações sobre a história, e por que a história do Zodiac fala de cidades como Suno e a pequena Hyrule, mas no tópico sobre o mapa fala de Thais, Venore, e outras cidades do Tibia. Como dito na história, a guerra aconteceu 1000 anos no futuro, ou seja, MUITAS coisas haviam mudado no continente Tibiano, que agora se chamava "Ivalice" devido à junção dos reinos de Carlin e Thais. Thais, que havia sido totalmente destruida pelos constantes ataques dos Orcs, foi reconstruida sobre o império do último rei da geração Tibianus, com ajuda do reino de Carlin, que também vinha sofrendo constantes ataques. O mundo estava se tornando um caos, a terra tremia e o mal queria poder, e estava conseguindo. Ambos os reinos decidiram juntar seus poderes para a criação de uma fortaleza indestrutível, na qual pudessem se preparar para a guerra que estava para vir. Suno, que era uma grande capital construida sobre as ruinas de Outlaw Camp, com investimento de Thais para treinamento e aperfeiçoamento de novas magias e um exército poderosíssimo de Black Mages, agora já rendendo altos lucros ao império devido ao seu incrivel poder destrutivo, também ajudara na construção da fortaleza. Aquele era o centro da esperança dos humanos, aquilo era a grande arma deles, e eles nunca poderiam ser destruidos lá. Com a união dos reinos, a cidade de Thais passou a se chamar 'Neo-Thais', e as obras foram iniciadas para a criação da maior fortaleza já sonhada. Algumas vilas vizinhas também tiveram seus nomes modificados, como Greenshore que passou a ser o centro da produção agrícola para suprir a construção da fortaleza, e teve seu nome modificado para 'Hyrule'. A maior parte da população vivia agora em Carlin e Suno, que eram até agora os lugares mais seguros enquanto a construção da Neo-Thais não terminava. Porém, algo aconteceu. Algo que eles não planejavam. Durante 1 mês, NENHUMA invasão ocorreu em nenhuma das cidades dos reinos. Antes, os ataques eram constantes, e as vezes ocorriam até duas invasões por dia em diversas cidades espalhadas pelo continente. Grupos de identificação enviados para descobrir informações, não voltavam. Algo estava errado, e eles descobriram mais rápido do que desejavam. De cima das torres de Carlin, via-se apenas a poeira sendo lançada ao céu. Em algumas horas, sentia-se o chão tremendo, e o desespero dos moradores. Até que enfim, a batalha se iniciou. "Anjos rebeldes, aliados a Orcs, Trolls e Gremlins, começaram a atacar as principais cidades do continente de Ivalice. Eles eram chamados de "Birds", pois achavam que iriam ganhar a liberdade ao dominar a terra, onde poderiam agir da forma que bem entendessem." O resto, vocês podem ler no tópico da história. Obs.: Sobre o sol, muitos me perguntaram: Se o sol apagou, como ainda tem plantas, como as pessoas vivem, como tudoi não está congelado? Bem, o planeta tem dois sois, porém, um deles só pega uma parte desconhecida do planeta, por isso, Ivalice agora sem um sol é sempre sombra, mas não totalmente congelada. Dizem que existe uma ilha chamada 'Holya' onde o sol brilha, pássaros cantam e a escuridão não existe. Abraços, Ramza.
  11. Servidor testado: TFS 0.3.6 (Provavelmente funciona em anteriores) Autor: Ramza (Rick / Ricardo Ianelli) Idéia de: Dartier Versão: 1.0 Olá a todos! Muitos de vocês não me conhecem, eu sou o Rick :yes: Bem, reparei que algumas pessoas estavam dando idéias sobre um sistema em que o cap (peso) influenciasse (acabei de descobrir que essa palavra é um saco pra escrever, escrevam ai e comprovem :fuu:) na velocidade do char. Pois bem, tentei fazer um sisteminha aqui, acho que ficou legal, testei e funcionou, mas... nada nunca está perfeito, vocês sabem como é :hmm: Bem, é meu primeiro post, espero que gostem, e não esqueçam que não sou que nem o Mock, o Flatronez, o Nord ou o Skyen, sou apenas um "aprendiz" :fail: Vamos lá! Primeiramente, vá até creaturescripts\scripts , faça uma cópia de qualquer arquivo contido lá, apague tudo e cole isto: --[[ FUNCTION MADE BY RICARDO IANELLI FOR THE AVATAR ONLINE ATS - For more informations, check: http://forums.otserv.com.br/f19/avatar-online-avatar-ats-134459 ]] function onThink(cid, interval) local speed, base, peso = getCreatureSpeed(cid), getCreatureBaseSpeed(cid), getPlayerFreeCap(cid) local nspeed = (math.floor([color=Red]((peso / 5 ) + (base))[/color])) if speed ~= nspeed then doChangeSpeed(cid, (nspeed - speed)) end end Repare que eu deixei em vermelho uma parte do script, que é a fórmula usada pra calcular quanto de velocidade aumenta/diminui dependendo do quanto sua capacidade está. Se for mecher, lembre-se de mecher APENAS NA PARTE VERMELHA, a menos que saiba bem o que está fazendo. Agora, vamos para a segunda parte! Abra o arquivo "login.lua" e adicione isto logo abaixo de "function onLogin(cid)" : registerCreatureEvent(cid, "getspeed") Agora, vamos para a parte final! Volte para data\creaturescripts e abra o arquivo creaturescripts.lua, e adicione esta tag ao arquivo: <event type="think" name="getspeed" event="script" value="getspeed.lua"/> E pronto, está feito! Caso esteja com dúvida se está funcionando ou não, pode adicionar a seguinte tag em baixo de if speed ~= nspeed then: doPlayerSendTextMessage(cid, TALKTYPE_ORANGE_1, "Sua velocidade foi trocada com sucesso de "..speed.." para "..nspeed..".") Espero que tenham gostado, desculpe fiz algo "noob" ai no script, mas é que ainda to aprendendo, tá duro, mas to aprendendo (no pain, no gain :fist:) E a propósito, esse script é um dos vários que fiz pro "Avatar Legends". Para conhecerem mais sobre ele é só clicar na minha assinatura Abraços a todos, e tenham uma boa noite, e quem gostou, se quiser doar V$, eu aceito xD OBS.: O SISTEMA ATUALIZA DIRETO, SE VC JOGAR UMA TOCHA NO CHÃO, VAI MUDAR SUA SPEED, NÃO É SÓ QUANDO LOGA NO JOGO NÃO! :yes:
  12. Olá a todos! Venho aqui iniciar um concurso bem legal, que durará 1 mês. O concurso é relacionado ao servidor Zodiac Legacy (caso não conheça, clique no nome do servidor na minha assinatura), e tem a ver com MAPS! O concurso vai funcionar da seguinte forma: - Você criará um map usando a versão 8.54 do tibia, um map de uma cidade medieval, podendo ser pequena, média ou grande. - A cidade deve ter obrigatóriamente uma taverna, uma loja de armas, um depot e um templo. - Você escolherá o nome da cidade. - Você fará uma lista dos NPC's da cidade, e suas respectivas funções. - Em algum lugar da cidade, você deverá colocar uma estátua ou algo do tipo escrito "Nomedacidade - Constructed by Seunome", assim, todos saberão que foi você que criou quando jogarem e passarem poor ela. " Passarem por ela? " Sim, isso mesmo. As cidades escolhidas serão colocadas in-game no servidor, e passarão a fazer parte do conjunto de cidades do continente principal. Assim, os jogadores poderão fazer parte da criação do jogo, e assim, criar uma cidade que o agrade, e ainda conseguir uma boa auto-propaganda. Não há um numero certo de vencedores, se 20 fizerem cidades boas, 20 ganharão, e uma pessoa pode fazer mais de uma cidade ou vila. Os prêmios são: - Uma vaga no primeiro test server. - 1 mês de VIP. - Sua cidade dentro do jogo, o que é uma honra. - Um item chamado "Nomedacidade Key", que será a chave da cidade que você criou. - Seu nome numa seção do site, dizendo a cidade (ou cidades) que você criou. Lembre-se de que uma cidade com muitos detalhes não quer dizer uma cidade boa. Thais ainda é considerada a cidade mais bem bolada, mesmo não tendo tantos detalhes quanto Ab'dendriel ou sendo tão complexa quanto Kazzordoon. A dica que eu dou é: Deixe a imaginação fluir. Com certeza todos já imaginaram uma cidade de um jeito especial, com moradores, uma história interna, toda uma trama. Deixem isso fluir, pois isso pode contar MUITOS pontos. Sua cidade pode ser uma mera vila de pescadores, mas se houver uma trama boa, ela já ganha pontos que talvez o leve à vitória. Essa é a dica, e lembrem-se de que o servidor é algo sério, com um bom RPG e praticamente só falta maps pra ser lançado. E eu como jogador de tibia desde pequeno, sei o que era a amizade no Tibia antigo. Sei o que era fugir de uma GS lurada, sei o que era explorar uma área nova quando lançava, junto com mais 20 cabeças tremendo de medo sem saber o que encontraria. E é por isso que eu acho que pra fazer um jogo que todos joguem juntos, todos precisamos pensar juntos. E assim espero, um grande abraço, Ramza.
  13. Exiva + minimap.

    [b]Nome:[/b] Exiva player [b]Autor:[/b] Ramza (Ricardo Ianelli) [b]Idéia de:[/b] Dartier [b]Versão Testada:[/b] TFS 0.3.6 (Crying Damson) Atendendo à pedidos, um sisteminha "básico" de exiva aparecendo a posição do player procurado no minimap! :happy2: Eu sei fazer a mark desaparecer, PORÉM, teria de ser criada uma nova função, e tem que mecher nas sources, e muita gente não saberia compilar depois... Então vamos ao script básico mesmo! Ele adiciona uma mark no minimapa com comentários dizendo "The player NOMEDOPLAYER was here." Já é algo útil :yes: É bem simples, vá em data\talkactions\scripts, faça uma cópia de qualquer arquivo, apague tudo que está dentro e cole isto: function onSay(cid, words, param, channel) player = getPlayerByName(param) if isPlayer(player) then if getCreatureMana(cid) >= 20 then doPlayerAddMapMark(cid, getCreaturePosition(player), 9, "The player "..param.." was here.") doPlayerAddSpentMana(cid, 20) return true else doPlayerSendCancel(cid, "You do not have enough mana to use this spell.") end else doPlayerSendCancel(cid, "There is no player with this name.") end end Depois, vá em data\talkactions e abra o arquivo talkactions.xml, e adicione a seguinte tag: <talkaction log="yes" words="exiva" event="script" value="exiva.lua"/> Agora ponha pra rodar o servidor, e fale "Exiva player" e veja o resultado Obs.: Você precisa de 20 ou mais de mana para usar a magia (Y) Obs².: Para melhores resultados, retire a magia exiva do seu spells.xml Lembrando que a grande idéia foi do nosso querido "Dartier", parabéns pela idéia Dartier! :fist: Abração, espero que seja útil à vocês!
  14. [b]Nome:[/b] Sistema de Monster Sleep + Sistema de walk/run [b]Autor:[/b] Ramza (Ricardo Ianelli) [b]Versão Testada:[/b] TFS 0.3.6 (Crying Damson) Introdução Olá a todos! Bem, antes que venham dizer "Carai esse cara roubou a idéia do Dokmos, tnc nobbão :fail:", quem viu o script do Dokmos direitinho sabe que eu que dei a idéia, pois eu estava na época tentando fazer esse sistema que estou postando aqui hoje, para o concurso, porém não obtive a tempo, e deixei que ele usasse minha idéia pra fazer um script dele. E ele criou um bem legal Porém... Eis que finalizei o meu sistema de monstros tirarem uma "soneca" de vez enquanto, e eu digo: Tá muito maneiro! :fist: Todavia, não pense que não dará trabalho introduzir esse sistema no seu servidor, pois dará sim, não vou negar que esse sistema tá meio "POG", pois não conheço as diversas funções que os grandes scripters desse forum conhecem, devido a isso tenho de "improvisar". Funcionamento Para o sistema funcionar, você precisará mecher nos monstros que você quer que durmam, terá de criar uma magia, um creaturescript, duas talkactions, e ter a OTAL instalada para usar a função "hasSqm(pos)". Sim, eu sei que é bastante coisa, mas o sistema envolve outros sistemas que se mostrarão necessários para o bom funcionamento e diferencial do script, como as talkactions walk! e run! O sistema funciona da seguinte forma, as vezes os monstros estão tão cansados que tiram uma soneca, porém, como sabemos, soneca é apenas um breve cochilo, uma dormida "de leve". Então, caso você esteja explorando uma caverna cheia de monstros terríveis, você não irá querer acorda-los fazendo barulho, vai? Portanto, você terá de se aproximar beeeem devagar, andando bem devagarzinho para não fazer barulho, e assim, não acorda-los. Por isso incrementei o sistema de walk (andar) e run (correr) :yes: Instalando Vá até data\creaturescripts\scripts , faça uma cópia de qualquer arquivo, renomeie-o para sleeping.lua, apague tudo que estiver dentro e cole isto, depois salve: function onCombat(cid, target) if getPlayerStorageValue(cid, 9070) == 2 then doCreatureSetLookDir(cid, getPlayerStorageValue(cid, 9071)) return false else return true end end Agora vá em data\creaturescripts e abra o arquivo creaturescripts.xml . Em seguida, adicione a seguinte tag ao arquivo e salve: <event type="combat" name="sleeping" event="script" value="sleeping.lua"/> Agora o próximo passo é ir às talkactions adicionar as funções walk! e run! Vá em data\talkactions\scripts, faça DUAS cópia de qualquer arquivo, renomeie-os para walk.lua e run.lua . Em walk.lua, apague tudo que tiver dentro e cole isto: function onSay(cid, words, param, channel) if getPlayerStorageValue(cid, 9050) == 2 then doChangeSpeed(cid, getCreatureBaseSpeed(cid)-300) doPlayerSendCancel(cid, "You are now walking") setPlayerStorageValue(cid, 9050, 1) else doPlayerSendCancel(cid, "You are already walking") end end E em run.lua, apague tudo que tiver dentro e cole isto: function onSay(cid, words, param, channel) if getPlayerStorageValue(cid, 9050) ~= 2 then doChangeSpeed(cid, getCreatureBaseSpeed(cid) - getCreatureSpeed(cid)) doPlayerSendCancel(cid, "You are now running") setPlayerStorageValue(cid, 9050, 2) else doPlayerSendCancel(cid, "You are already running") end end Agora vá em data\talkactions , abra o arquivo talkactions.xml e adicione as seguintes tags: <talkaction log="yes" words="walk!" event="script" value="walk.lua"/> e <talkaction log="yes" words="run!" event="script" value="run.lua"/> Pronto, estamos quase no final! Agora vá em data\spells\scripts , crie um arquivo chamado sleep.lua e cole isto dentro, depois salve e feche. -- FUNCTION BY RAMZA (RICARDO IANELLI) - DO NOT COPY WITHOUT PERMISSION. local function onSleep(monster, pos, speed) players = getSpectators(pos, 16, 16) for i = 1,#players do if isPlayer(players[i]) then if getPlayerStorageValue(players[i], 9050) == 1 then setPlayerStorageValue(monster, 9071, getPlayerLookPos(monster)) doChangeSpeed(monster, -speed) doSendMagicEffect(getCreaturePosition(monster), 32) setPlayerStorageValue(monster, 9070, 2) addEvent(onSleep, 1000, monster, pos, speed) else doSendMagicEffect(pos, 29) doChangeSpeed(monster, getCreatureBaseSpeed(monster) - speed) doSendAnimatedText(getCreaturePosition(monster), "!", TEXTCOLOR_DARKRED) setPlayerStorageValue(monster, 9070, 1) break end end end end function onCastSpell(cid, var) registerCreatureEvent(cid, "sleeping") if getPlayerStorageValue(cid, 9070) ~= 2 then local pos, vida, speed = getCreaturePosition(cid), getCreatureHealth(cid), getCreatureSpeed(cid) onSleep(cid, pos, speed) return TRUE else return false end end Depois vá em data\spells e adicione isto ao arquivo spells.xml : <instant name="sleep" words="sleep" enabled="0" script="sleep.lua"/> Agora é só ir nos monstros que você quer que durmam, no meu exemplo, fiz no monstro "Monk" e onde estiver assim: <defenses armor="20" defense="22"> <defense name="healing" interval="1000" chance="17" min="30" max="50"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="1000" chance="10" speedchange="300" duration="3000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> Você adiciona esta tag: <defense name="sleep" interval="1000" chance="[b][color=Red]15[/color][/b]"> </defense> Ficando assim, no caso do Monk: <defenses armor="20" defense="22"> <defense name="sleep" interval="1000" chance="[b][color=Red]15[/color][/b]"> </defense> <defense name="healing" interval="1000" chance="17" min="30" max="50"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="1000" chance="10" speedchange="300" duration="3000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> Reparem que botei '15' ali no chance, pois é um número que eu achei legal, a chance dele durmir. Porém, pra testar, aconselho colocar algo em torno de 30-50. Testando Bem, assim que tiver colocado em todos os monstros que quiser, ou no monstro que quiser usar pra testar, apenas salve tudo e vamos entrar no jogo para que você teste! Faça o seguinte: Entre num char que não seja GM. Use o comando walk! para fazer seu player "andar", para que você não acorde o monstro. Vá andando em direção ao monstro, e caso ele não esteja durmindo, fique de longe esperando que em menos de 1 minuto ele deva durmir. Assim que ele durmir, pode chegar bem pertinho dele para constatar que ele não se meche, não olha pra você, e nem te atacar. Agora, experimente falar run! e saia correndo, pois ele irá acordar e virá te atacar furioso! Agradecimentos Eu gostaria de agradecer ao meu amigo Mock, que me disponibilizou sua função getPosByAreaMOCK(pos, arr). Mesmo eu não a usando mais no sistema, obrigado ursão :yes: Bem, é isso galera, espero que gostem! E POR FAVOR, sugestões, críticas, são MUITO bem vindas, pois me fazem crescer. Agradeço desde já, Ricardo Ianelli. Obs.: Editei o sistema para melhorar o sistema devido à sugestão do usuário "Conde2". Obrigado Conde!
  15. A pedidos, fiz uma talkaction pra mandar uma mensagem à um determinado player sem aparecer o nome do GM, aparecendo apenas "Gamemaster", para que o player não floode o GM. Pode ser útil, então, aqui vai. Coloque isso num script dentro de talkactions\scripts e salve com o nome de amsg.lua function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o nome do personagem e a mensagem.") return true end local t = string.explode(param, ",") msg = t[2] tid = getPlayerByNameWildcard(t[1]) if(not tid or (isPlayerGhost(tid) and getPlayerGhostAccess(tid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[1] .. " not found.") return true end doPlayerSendTextMessage(tid, MESSAGE_STATUS_CONSOLE_ORANGE, "Gamemaster: "..msg.."") return true end Depois vá em talkactions.xml e adicione essa tag: <talkaction log="yes" words="/amsg" access="3" event="script" value="amsg.lua"/> E pronto, dai é só falar: /amsg player, msg Abraços a todos!
  16. E ai galera, só vim aqui mostrar pra vocês um sisteminha legalzinho, que todo mundo AMA, principalmente quem eu boto pra testar comigo, pois vicia :3 DSAHUDSAUDSAHUDSAHDS É o meu sistema de colisão *-* deu trabaaaaaaaalho, mas ficou legal deixem seus comments! Ele funciona assim: Quando uma pessoa usa um feitiço junto comigo, nossos feitiços se colidem e explodem no ar.
  17. INTRODUÇÃO Olá galera, vim aqui divulgar uma informação que pouquíssimos sabem. (Apenas alguns amigo como Notorious, Dokmos e Adobe) A muuuuuito tempo (pensem em algo como 4-5 anos atrás) eu havia começado um OT chamado "Zodiac Legends", que baseava-se na mesma história do Final Fantasy Tactics de PS1, porém, com classes diferentes, mapas diferentes, etc. Ou seja, apenas o que se mantia do FFT eram as "Zodiac Stones" e a lenda dos "Zodiac Braves", além de algumas poucas classes. Porém, por falta de idade, maturidade, conhecimento e força de vontade, parei com o projeto. Afinal, tudo o que eu tinha eram idéias, mas não fazia idéia de como executá-las, até porque na época os OT's eram realmente sem opções, e a menos que você fosse um gênio da gambiarra, não havia muito o que se fazer. Anos se passaram, e no começo do ano, após uns problemas pessoais e de eu ter quase fudid* minha vida inteira por causa de depressão (diagnosticada), acabei me levantando novamente e repensando no que fazer. Com isso, resolvi fazer algo meu, algo que me deixasse feliz, sem pressão, sem nada. Apenas por diversão mesmo. Um lugar onde eu pudesse expor minhas idéias, sonhos, críticas, todas juntas. Foi aí que me veio a idéia de voltar com o projeto, que agora já se chamaria 'Zodiac Legacy', algo como 'Legado do Zodiaco', devido ao fato de ter permanecido por tanto tempo a idéia. Porém, dessa vez tentando manter ao mesmo tempo a simplicidade e a diversão, ao mesmo tempo que fatores que divertem na jogabilidade e influenciam no humor dos jogadores, e na interação entre eles. O jogo possui diversas referências à outras coisas, como filmes, produtos, alimentos, desenhos, jogos, revistas, etc. Portanto, não se assuste caso encontre um maluco careca querendo sua ajuda para roubar o grande castelo de magia, o grande Erodelbmud, dizendo coisas como "Esse castelo ainda será meu, MEEUU!", ou um grupo de guerreiros coloridos usando roupas estranhas que dizem ser "Herois da Justiça", ou algum musico arranhando costelas e arrepiando cabelos com solos surreais de Banjo em alguma taverna local, usando cartola e roupa preta. Imagine a si mesmo correndo nú pelas ruas da grande cidade de Hyral, ou sendo atacado por um urso selvagem ao explorar a grande floresta de Naidirev, ou encontrar a fórmula da poção mais desejada de todo o reino, a grande Poção Tlukay. Só não se esqueça de causar boa impressão aos cidadãos pois alguns podem ter segredos a contar aos amigos, outros, podem lhe achar tão corajoso que poderão lhe parabenizar por tamanha insanidade. Imagine a si mesmo sendo um cavaleiro, e fazendo cursos de aperfeiçoamento em outras áreas como magia ou na própria área bélica. Imagine viajar através de desertos para encontrar musicos que possam lhe ensinar como chutar bundas com o seu Rock 'n Roll. As possibilidades são infinitas, e nessa nova versão do Zodiac Legacy, uma nova característica do FFT ira emergir junto à jogabilidade: A possibilidade de ter um Job e um Sub-Job, e de poder muda-los a vontade, além de habilidades inatas como "Dragon Spirit", "Regen" ou "Meatbone Slash". O jogo, apesar de ter muitas possibilidades, mantém a simplicidade do velho tibia, como magias sendo faladas por suas palavras mágicas por exemplo, menos a classe summoner, que tem de conjurar magias/invocações por versos. As classes atualmente estão 90% completas, e são as seguintes: Squire Knight Thief Archer Dragoon Time Mage Priest Fighter Samurai Wizard Summoner Bard Dark Knight Holy Knight E mais duas secretas. Porém, agora peço a ajuda de vocês para pedir a opinião da escolha da primeira nova classe, uma de muitas que ainda irão vir com updates futuros após o lançamento. Darei-lhes as escolhas, a explicação de cada classe, e peço que votem, pois o voto de vocês que vai decidir, ou seja, VOCÊS irão escolher qual classe eu farei. Não se preocupem se gostarem de mais de uma, todas as classes indicadas aqui irão ser colocadas in-game com o tempo, além de outras. Escolhas Vampire Vampiros aqui não serão como nos recentes filmes. Vampiros são guerreiros fortes, que não tem medo da lâmina de uma espada, muito menos de ter seu braço arrancado fora. Vampiros gostam de sangue, e em uma batalha, quanto mais sangue eles sentem quente no corpo deles, mais cresce sua frênesi de sede de sangue, e seu espírito de batalha. Vampiros não caem fácil, e não gostam que lhes encham a paciência, portanto, tome muito cuidado ao zombar de um, pode ser a última vez que irá abrir a boca sem ser para gritar. Druid Druidas, diferentes de alguns jogos, são guerreiros natos, especializados no contato com a natureza. Frágil é a última palavra que define um Druida, pois quando seus olhos chamuscam de fúria, seu corpo pode assumir diversas formas, desde um grande urso até uma pequena aranha. Druidas são especialistas em reconhecimento de territórios, pelo fato de se camuflarem como ninguém. São os únicos que conseguem entrar em um ninho de lobos selvagens e sair sem ao menos ser visto. Druidas são a natureza, portanto, assim como os Vampiros, não são fáceis na queda. Quando você achar que o pegou, ele se transforma em algo diferente completamente inesperado e desperta terror no coração de quem antes o caçava, e agora o teme. Necromancer Necromancers são seres que dominam a morte. Trazem de volta à vida guerreiros de outras gerações, estudam sobre novas técnicas, sobre lendas, sobre armas antigas, e sobre tudo que possa ser utilizado em combate. Mas nem por isso Necromancers são pessoas ruims. Óbviamente que são temidos, e que a maioria dos grandes Necromancers na história do reino de Hyrule ou Ivalice eram pessoas ruims. Porém, não se esqueçam que um dos lendários guerreiros, os Zodiac Braves, era um Necromancer, e graças à ele e ao guerreiro Zed, o mago do tempo, os outros Zodiac Braves conseguiram sair vivos do submundo criado por St.Ajora. Necromancers brincam com a morte, riem do perigo, zombam do medo e amam um desafio, seguindo sempre o seu lema: "Mais vale morrer sorrindo do que viver temendo. A morte não é pior do que a vida, e a vida não é menos interessante que a morte."
  18. Obs.: Não funciona nas versões novas, pois elas não tem a função getPlayerFrags(cid) :fuu: Caso alguém consiga transformar aquela query em sql que tem em talkactions\scripts\frags.lua em uma função, eu edito aqui pra funfar nas versões mais novas de TFS :fist: Abração! Olá galera! Reparei que muitos estavam tendo problemas com frags, já que agora não se configura mais o tempo delas pelo config.lua, então a pedidos, resolvi criar um global event que remova todas as frags de 5 em 5 horas. Você pode configurar o tempo que quiser, se quiser fazer isso de 1 em 1 hora, ou de 2 em 2 dias, aí é com você O script é simples, porém bem útil (Y) Vamos lá, faça uma cópia de qualquer arquivo dentro da pasta globalevents\scripts e renomeie para "removeFrags.lua" Agora abra o arquivo, apague tudo que tiver dentro e coloque isso: [b]function onThink(interval, lastExecution, thinkInterval)[/b] [b] l[color=indigo]ocal players = getPlayersOnline()[/color][/b] [b][color=indigo] for _, pid in ipairs(players) do[/color][/b] [b][color=darkslategray]doPlayerSetRedSkullTicks(pid, (getPlayerRedSkullTicks(pid) + getConfigInfo('timeToDecreaseFrags')) * (- getPlayerFrags(pid)))[/color][/b] [color=darkred][b]doCreatureSetSkullType(pid, 0)[/b][/color] [b] end[/b] [b] [color=sienna] doBroadcastMessage("All frags have been removed. Next remotion in [/color][color=red][color=sienna]5 [/color]hours[/color][color=sienna].")[/color][/b] [b] return true[/b] [b]end[/b] Para quem não conseguir, o dragonlorde deu uma ajuda! Use isso: Obs.: Andei estudando LuaSQL e mudei a funçãozinha do dragonlorde, agora deve funcionar [color=#000000][color=#007700]function [/color][color=#0000bb]onThink[/color][color=#007700]([/color][color=#0000bb]interval[/color][color=#007700])[/color] [color=#0000bb]db[/color][color=#007700].[/color][color=#0000bb]executeQuery[/color][color=#007700]([/color][color=#dd0000]"DELETE * FROM `killers`;"[/color][color=#007700])[/color] [color=#0000bb]db[/color][color=#007700].[/color][color=#0000bb]executeQuery[/color][color=#007700]([/color][color=#dd0000]"UPDATE `players` SET skull = 0, skulltime = 0;"[/color][color=#007700])[/color] [color=#0000bb]doBroadcastMessage[/color][color=#007700]([/color][color=#dd0000]"All frags have been removed. Next remotion in 5 hours."[/color][color=#007700])[/color] [color=#007700] return [/color][color=#0000bb]true[/color] [color=#0000bb]end [/color][/color] Agora vá em globalevents.xml e adicione isso: <globalevent name="removeFrags" interval="[color=red]18000[/color]" event="script" value="removeFrags.lua"/> Pronto, agora é só rodar Agora vou explicar o script: Onde está em... Vermelho: É o tempo de intervalo entre uma remoção e outra. 18000 são 5 horas pois 18000 ai está em segundos, e 18000 segundos = 5 horas (Y) Caso queira mudar, já sabe como fazer né? Mas não se esqueça de mudar a mensagem também caso vá mudar o intervalo. Roxo: É uma função pra pegar todos os players online pra mim, e fazer uma ação em cada um deles. Pra quem não entende muito bem, o "pid" ali é o ID do player na qual ela está checando. Verde: É a função que é executada em todos os players. Marrom: É a mensagem que é mandada após a remoção. Bem, é isso, espero ter ajudado, não quero que isso seja apenas um script pra colocarem no OT, quero que seja também um método de aprendizagem para futuros scripts, e quem sabe alguém não pega o meu script e faz um ainda melhor? Abraços, e um bom desenvolvimento a vocês.
  19. Escola de Scripting - Aula 1

    Olá a todos. Constantemente venho recebendo pedidos de ajuda com dúvidas, ou pedindo para que eu ensine scripting, e assumo que adicionei algumas pessoas no msn com o intuito de ajudar, e ajudei bastante. Porém, a cada dia o número cresce, e muitos não entendem as aulas aqui da OTnet. Portanto, pensei em fazer aulas mais bem explicadas, com suporte meu para dúvidas, e de uma forma que as aulas da OTnet podem ser usadas como "Aulas fixadoras". Portanto, criarei uma lista com os alunos que forem participar DE TODAS AS AULAS, e esses poderão tirar dúvidas comigo a hora que for, e deverão me enviar seus exercícios por MP para correção, e eu divulgarei as notas aqui de cada aula, assim, poderemos ter uma breve avaliação no fim do curso. Pretendo fazer algo pequeno, entre 5 a 15 aulas, porém fazendo com que ao término do 'curso' vocês saiam fazendo scripts bons, inteligentes, e sempre querendo aprender mais. Quem quiser doar V$, eu aceito, claro, porém as aulas são de graça, com o intuito apenas de criar novos scripters para a OTnet. Peço apenas que os interessados em se inscrever para o curso completo, para avaliações e tal, me enviem MP dizendo que querem participar, para que eu coloque o nome na lista, que será atualizada com notas a cada nova aula. A aula 1 é EXTREMAMENTE CHATA, sou sincero, mas é a decisiva para vocês se tornarem bons scripters, no futuro vocês me agradecerão :fist: Aula 1 - Alunos: - Mickfern Nota: 9,0 - 4458638 Nota: 6,0 - Uchimaru1 Nota: 7,0 - Dehko Nota: - daniel9878 Nota: - Fryen Nota: 10,0 - ShufflezOr Nota: 6,0 ______________________________________________________ Aula 1 Lógica de programação para Scripters Lua Por: Ramza Em qualquer script que seja, sempre deve-se seguir uma ordem lógica, que determinará os passos do inicio ao fim do seu script. Isso tudo pode ser facilitado de inicio usando fluxogramas, que são desenhos ou simbolos usados para determinar uma ordem lógica, e logo em seguida escrever em pseudocódigo, para depois escrevem em código. Não entendeu? Pense o seguinte: Você está sentado no sofá, de frente pra televisão. O que você faria, em ordem, para mudar de canal? Provavelmente, primeiro checaria se o controle está perto de você, certo? Se sim -> Você o pegaria, e então apertaria o botão para mudar o canal. Se não -> Você levantaria, depois andaria até a TV, depois apertaria o botão para mudar de canal. Um fluxograma disso seria: Após isso, criariamos um pseudocódigo-OT, que nada mais é do que narrar um fluxograma, porém vou fazer voltado ao open tibia, que é o que interessa. Ficaria algo como: Mudar canal [color=Indigo]tv = televisão controle = controle remoto [color=DarkRed]se controle == perto então mudar canal senão andar até a tv mudar canal return TRUE fim return TRUE [color=Teal]fim[/color][/color][/color] Aqui temos o inicio de nossa função, onde dizemos o nome dela. Aqui nós definimos os objetos que vamos usar no código, afinal, você tem como pegar um controle, caso não saiba o que é um? Portanto, definimos. Esses objetos podem ser chamados de "VÁRIAVEIS". Uma variável pode ser um nome, um objeto, um número, um texto, uma posição, e assim por diante. Variáveis têm tipos, que são eles: - Tipos Inteiros: São números inteiros como na matemática, ou seja, qualquer número positivo ou negativo, desde que não seja fracionário (desde que não tenha ' , ') - Tipos Reais: É qualquer tipo de número, positivos, negativos, com vírgula, sem vírgula. - Strings: São uma sequência de caracteres, entenda como um texto. Strings são determinadas por " " entre algo. Exemplo: "69" é uma string, já 69 é um número inteiro ou/e real. Exemplos de strings: "rua do pão", "123", "eu-como-morango", "mock dá o ... riaria" - Booleanos ou lógicos: São TRUE ou FALSE. Comum ver em códigos. Podem ser tanto maíusculos quanto minúsculos. Coisas que você precisa saber sobre variáveis: · Nomes de variáveis poderão ser atribuídos com um ou mais caracterres; · O primeiro caractere do nome de uma variável não poderá ser em hipótese alguma, um número, sempre deverá ser uma letra; · O nome de uma variável não poderá possuir espaços em branco; · Não poderá ser nome de uma variável, uma instrução de programa; · Não poderão ser utilizados outros caracteres a não ser letras e números. Obs.: o caracter “_” Under-line ou sub-linha é considerado uma letra. Aqui vem a parte mais complicadinha, em que fazemos algumas 'operações'. Primeiro, checamos se o controle está perto, certo? Para isso usamos um "Se". Em inglês, que é usado no open tibia, usamos "If". Logo em seguida vemos um " == ", que significa checagem. Em códigos vocês irão se deparar com ' == ' e com ' = ', portanto vou logo explicar a diferença: == é usado para CHECAGEM. = é usado para atribuir um valor. Exemplo, se você quiser checar se o mock é gay, use if mock == gay then Porém, se quiser dizer que ele É gay, use mock = gay Entenderam? Esse return TRUE é para retornar um dado ou informação. No caso ai ele retorna a informação de que você teve sucesso no que queria, por isso retorna TRUE (true = verdadeiro). Caso você estivesse tentando fazer um cálculo de média por exemplo, que retornasse sua média no colégio. Você teria definido como variáveis as suas 4 notas, e feito o cálculo de média, então retornaria a média, com um return ou um print, mas o print não é muito utilizado em OTservers, pois ele só aparece no console (aquela janelinha de quando vc poe o OT pra rodar). Ficaria assim o código: calculo de media nota1 = 7 nota2 = 4 nota3 = 9 nota4 = 9 media = (nota1 + nota2 + nota3 + nota4) / 4 return media fim Ou caso queira usar o print (que terão de usar em alguns exercícios) ficará assim: calculo de media nota1 = 7 nota2 = 4 nota3 = 9 nota4 = 9 media = (nota1 + nota2 + nota3 + nota4) / 4 print(media) fim Ok, repare que tem um ' fim ' ali. Toda vez que você usar um ' se ' (if) tem de por um 'fim' (end) para fechar o se. Logo em seguida, vamos que tem outro ' fim ' no código, que é para fechar a sua função. Toda função deve ter um ' fim ', assim como todo ' se ' deve ter um ' fim '. A partir da próxima aula começarei a usar as palavras apenas em inglês, como é no open-tibia, nessa estou usando em português para ajudar quem não entende NADA de inglês. Na programação open tibia, temos os seguintes operadores aritméticos (usados na matemática) para fazer cálculos: - É usado para subtrair. + É usado para somar. / É usado para dividir. * É usado para multiplicar. ^ É usado para exponênciação (exemplo: 2 elevado a 3) % É um operador de módulo, que vocês só aprenderão lá pras últimas aulas por ser extremamente confuso. Você pode fazer até fórmulas matemáticas com isso, portanto, são infinitas as possibilidades :yes: Dicas finais do Ramza: - Nunca esqueça de fechar as funções com o ' fim ' (pode por end, fica até melhor.) - Não tentem usar uma variável sem antes defini-la! - Caso se depare com " -- " em um código, não se assuste! É como definimos que uma linha é apenas um comentário, ou seja, ela não irá ser lida pelo script! Comentários são criados para organizar o script, apenas! Você pode comentar mais de uma linha da seguinte forma: --[[ oi essa linha é um comentário e essa também essa outra linha também tá, chega! ]] - Como a aula de hoje é bem básica, não tem muito o que falar, quero apenas que treinem algumas coisinhas básicas. Exercícios! 1 – Indique o tipo de variável que poderão armazenar os valores abaixo. I : inteiro R : real S : String L : Lógico ou Booleano ( )1000 ( ) “0” ( ) “-900” ( )TRUE ( )-456 ( )34 ( )”Casa 8” ( )0 ( )-1.56 ( )”FALSE” ( )1.87 ( )FALSE 2 – Assinale com X os nomes válidos de uma variável ( )Endereco ( )21brasil ( )NomeUsuario ( )Nome_usuario ( )End-A ( )Cidade3 ( )#Cabec ( )23 ( )N23 3 – Desenvolva a lógica de um programa que efetue o cálculo da área de uma circunferência, retornando a medida da área calculada. Fórmula: Area=Pi*Raio^2 4 – Ler dois valores A e B, efetuar a troca dos valores de forma que a variável A passe a possuir o valor da variável B e que a variável B passe a possuir o valor da variável A. Apresentar os valores trocados com um ou mais print ao invés de returns. 5 – Ler dois valores A e B, efetuar as operações de adição, subtração, multiplicação e divisão de A por B, apresentando no final os quatro resultados obtidos com prints ao invés de returns. - DESAFIO – Elaborar um algoritmo que calcule o salário de um professor onde o usuário deverá entrar com o número de aulas dadas, o valor da hora aula e o percentual de desconto do INSS. Para fazer essa, podem usar o google para descobrir o valor de percentual de desconto do INSS! Quem ficar com a maior nota nessa primeira aula ganha 10 V$ ! Então quero só ver hein! Até a próxima aula, que eu prometo que vai ser 10x melhor. Essa aula é CHATA, mas é necessária! Com as próximas você já poderá e deverá começar a fazer scripts básicos, e o próximo desafio vai ser bom também! Abraços, e mandem suas respostas para mim caso queiram participar das aulas, que corrigirei e tirarei dúvidas! Abraços a todos!
×