Jump to content

Search the Community

Showing results for tags 'ianelli'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • OpenTibia
    • Promoted Projects
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
    • Divulgação de Servidores
    • Projetos e Formações de Equipes
  • Outros
    • Design

Found 8 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. Colisão de Magias

    Nome: Sistema de Colisão de Magias V. 1.0 Autor: Ramza (Ricardo Ianelli) Versão Testada: TFS 0.3.6PL1 (8.54) Introdução Olá a todos! Depois de muito insistir, me chamar de lindo, me oferecer um rim, trabalho escravo, video imitando sidney magal, resolvi liberar a versão primitiva do tão misterioso 'Sistema de Colisão de Magias' pro Iunix e alguns outros que me mandavam PM's o tempo todo querendo saber como funcionava o sistema. Pra quem não conhece ainda, eis um video: Caso não carregue o video: Constantemente vinham pessoas me perguntarem como funcionava, se eu precisei mexer nas sources, querendo comprar, isso e aquilo. Dai, eu falava: "Cara, esse sistema é simples, o forte dele foi a criatividade, mas o sistema em si é algo ridículo" e as pessoas ficavam bravas achando que eu tava mentindo, que era tudo história minha, isso e aquilo. Bem, aqui está a prova de que criatividade é a PRINCIPAL ferramenta de qualquer programador, e que um sistema SIMPLES pode se tornar algo aparentemente tão complexo. Funcionamento Do ponto de vista do jogador: Do ponto de vista do scripter: (chora Iunix, te falei que era simples KKKK) Instalação Na pasta Data, crie um arquivo chamado colisionLIB.lua. Dentro dele, cole isto: function checkColision(cid) -- Function by Ramza (Ricardo Ianelli) if getCreatureTarget(cid) ~= 0 then setPlayerStorageValue(cid, 9001, 'casting') local ppos, enemy = getCreaturePosition(cid), getCreatureTarget(cid) local epos = getCreaturePosition(enemy) if getPlayerStorageValue(enemy, 9001) == 'casting' and getCreatureTarget(enemy) == cid then setPlayerStorageValue(enemy, 9001, 'colision') setPlayerStorageValue(cid, 9001, 'colision') if ppos.x > epos.x and ppos.y > epos.y then cpos = {x = ppos.x - ((ppos.x - epos.x) / 2), y = ppos.y - ((ppos.y - epos.y) / 2), z = ppos.z} elseif ppos.x > epos.x and ppos.y < epos.y then cpos = {x = ppos.x - ((ppos.x - epos.x) / 2), y = epos.y - ((epos.y - ppos.y) / 2), z = ppos.z} elseif ppos.x < epos.x and ppos.y < epos.y then cpos = {x = epos.x - ((epos.x - ppos.x) / 2), y = epos.y - ((epos.y - ppos.y) / 2), z = ppos.z} elseif ppos.x < epos.x and ppos.y > epos.y then cpos = {x = epos.x - ((epos.x - ppos.x) / 2), y = ppos.y - ((ppos.y - epos.y) / 2), z = ppos.z} end doSendDistanceShoot(ppos, cpos, CONST_ANI_ENERGY) doSendDistanceShoot(epos, cpos, CONST_ANI_ENERGYBALL) local value = math.random(1, 3) doSendMagicEffect(cpos, 27+value) return true else return false end end end Agora vamos pegar uma magia bem básica como exemplo para teste. Vamos usar a magia energy strike. Abra o arquivo da magia, estará mais ou menos assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Vamos modificar um pouco para o nosso sistema. Deixe-a assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) local function spell(cid, var) if getPlayerStorageValue(cid, 9001) ~= 'colision' then doCreatureSay(cid, 'Strike!', TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, 9001, nil) return doCombat(cid, combat, var) end end function onCastSpell(cid, var) checkColision(cid) doCreatureSay(cid, 'Energy...', TALKTYPE_ORANGE_1) addEvent(spell, 2000, cid, var) end Hora de testar, a hora mais difícil! Bem, pra testar esse sistema você precisa de um amigo pra te ajudar, ou de ferramentas ilegais e agilidade. Vamos tomar como exemplo caso você fosse com um amigo testar. Simplesmente usem exori vis um no outro, e vejam o que acontece Comentários Quem já é mais experiente já deve ter sacado o tanto de possibilidades que isso abre, como fazer com magias mais avançadas, comparar magic level, fazer com que caso o ML de um seja maior que o do outro, ela anule a do inimigo mas a sua ainda acerte, fazer sistemas no estilo 'disputa de kame-hame-has' usando spriters sem ser as do tibia, e muitas outras coisas, só vai depender de você usar a sua CRIATIVIDADE. Esse sistema, apesar de simples, é considerado pra mim um dos meus sistemas mais avançados, pois como dizia o sábio programador: "O verdadeiro gênio não é aquele que usa pilhas, ponteiros, matrizes ou funções complexas, e sim aquele que usa a criatividade." Muita gente ofereceu grana preta nesse sistema já, mas eu postei aqui pra lembrar à todos vocês que o que faz um grande programador não é o quão complexas são as funções que você usa e os codes que você faz, e sim, o quão criativas e inovadoras são suas criações. É isso ai galera, deixo meu abraço pra todos vocês, qualquer dúvida é só me perguntar, e eu quero que vocês lembrem que o melhor code é sempre, de longe, aquele mais criativo, não importa se tenha 3, 100 ou 10.000 linhas. Lembrem-se disso, sempre. Abraços, Ramza.
  3. Vocês jogariam um ATS de Pokemon em batalha tática, estilo final fantasy tactics, dofus, tactics ogre, etc?
  4. 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! [Hidden Content] Abraços a todos, espero que gostem. Atenciosamente, Rick (Ramza). Obs.: O site está hospedado na empresa [Hidden Content] , que por sinal é muito boa e BARATA. Pra quem tiver precisando de uma hospedagem boa e barata pra site, eu recomendo dar uma olhada =)
  5. 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: [Hidden Content] Abraços a todos, espero que gostem. Atenciosamente, Rick (Ramza).
  6. 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!
  7. Criar Conta (Apenas se o acc manager não funcionar in-game): [Hidden Content] Edit: Link para download do client: [Hidden Content] 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: [Hidden Content] Enquanto está off: [Hidden Content]
  8. 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)
×