Ir para conteúdo

VaizardX

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    VaizardX deu reputação a xWhiteWolf em Novo Sistema de Trainer [0.36~0.4]   
    Olá meus caros do Tibia King, hoje vim trazer pra vocês um sistema que bolei pra um concurso em outro fórum mas acabei ficando descontente e nunca cheguei a disponibilizar.
    Eu gostaria de agradecer inicialmente à três acontecimentos que sem eles não seriam possíveis a criação desse sistema.
    - A otlist obrigar que os servidores utilizem anti idle 
    - Os mages do meu servidor reclamarem que não dava pra treinar ml nos trainers
    - Ao @Storm Night, que embora tenha me irritado muito nesse tópico aqui , botou a sementinha dessa idéia na minha cabeça. 
     

     
    Explicação É a combinação de dois sistemas que eu ja havia feito, o primeiro escolhe entre todas as salas de treiner aquela que está vazia pra te alocar e o segundo te mantém alimentado e rodando pra simular o anti idle. (Nota: ele não impede o anti idle de fato, se vc quiser fazer isso vc vai precisar editar o script de anti idle que vc utiliza pra ignorar players com determinado storage e adicionar o storage no player quando ele entrar na sala e tirar ao sair.. mas não sei até que ponto isso pode provocar ban da OTservlist por isso decidi não ensinar isso aqui.)

    Sem mais delongas, talk is cheap, show me the code. 
     
    Idéia Basicamente dá pra reduzir toda a idéia do código nessa foto aqui:
     

    Você tem diversas salas com trainers nesse formato (pode ser em linha reta horizontal ou vertical tb, mas assim fica melhor distribuído). Você inclusive pode criar salas no meio do void  de forma que a distancia de uma vc nao consiga ver a outra e vai ser uma experiencia muito amigável para o player ver que está treinando sozinho na paz. Ao entrar no tp ele te aloca na primeira sala vazia, se não houverem salas vazias ele retorna que não tem posições livres

     
    Instalação Você precisa criar as salinhas dos trainers equidistantemente, ou seja, tendo a mesma distância A em X e mesma distância B em Y. Sério, se vc errar nessa parte é porque vc não sabe oque significa equidistante. Vai pesquisar preguiçoso!! Já aviso que não vou dar suporte quanto à isso.

    Você vai precisar criar salas parecidas com isso daqui:
     

    Perceba que não tem como ter acesso a essa sala, não tem como ser puxado pra fora do trainer, não tem dor de cabeça nenhuma e quando o player quiser sair ele só entra no tp e volta pro templo ou pra onde vc definir.

    Nesse teleport da sala vc adiciona o actionid 14877 e não bota nenhuma posição nele.
    Naquele tile que o player irá ficar que inclusive tem id diferente vc bota actionid 14878.
    Agora seleciona a area dessa sala no rme e vai copiando e colando percebendo sempre se vc tá criando as salas com mesma distância em X. Se o ponto inicial de uma sala é 140 e vc quer que todas tenham 12 sqm de distancia vc cria em 152, 164, 178.. por aí vai. 

    Quando terminar as salas que quiser e tiver montado as linhas e colunas da forma que desejou, vc vai criar um tp principal pra alocar os players nessa sala:


    Lembrando que ele não deve ter posição no rme, vc só bota o actionID 14876 e deixa a toPos dele 0, 0, 0. Ele não tem q te teleportar pra nenhum lugar pois a posição será decidida por script.

    Se você fez tudo certo até agora vc deve ter algo +- assim:
     


    O importante é manter a distancia certinha entre cada sala. Aí no caso eu fiz rX = 11 e rY = 8 (é a terceira ou quarta vez q eu to falando isso, se vcs errarem pqp eu vou ficar muito irritado);

    Vc não bota os trainers, e ali embaixo do spawn vc tem que botar um outro obstáculo pra impedir que o player ande pra baixo e dê a sala como livre.


    Feito isso só adicionar os scripts abaixo:
    movements.xml
        <movevent type="StepIn" actionid="14876" event="script" value="trainertp.lua"/>     <movevent type="StepIn" actionid="14877" event="script" value="trainertp2.lua"/>     <movevent type="StepIn" actionid="14878" event="script" value="foodtrainer.lua"/>
    movements/scripts/trainertp.lua:

    movements/scripts/trainertp2.lua:
     


    movements/scripts/foodtrainer.lua:
     

    FIM, qualquer dúvida ou comentário ou sugestão coloquem abaixo. Se gostou REP+, se não gostou REP+ pq deu trabalho e vai ser útil pra alguém, mesmo que de estudo. 
    Abraços do Lobo. 

    E ao cara do outro fórum que ficou falando que ia dar erro e quis ficar me corrigindo e mandando scripts sem noção pra "mostrar" que sabia de lua: 
  2. Gostei
    VaizardX deu reputação a BrunoMaia em Old Tibia tirando limite de 255 efeitos   
    Foi testado no TheForgottenServer 0.3.6 no Tibia 8.54
     
    Como o client já está modificado, precisamos modificar a parte do servidor que envia os dados para o client.
    Vamos modificar dois métodos, addMagicEffect e sendMagicEffect.
    Entre na sua source 0.3.6
    Encontre o arquivo protocolgamer.cpp
    Você vai encontrar esse código
    void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint8_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddByte(type + 1); } Percebeu esse parametro uint8_t type?
    Vamos modificar para uint16_t type.
    Mas isso não vai adiantar nada se o msg->AddByte(type + 1) continuar desse jeito...
    Modifique ele para msg->AddU16(type + 1).
    O código modificado deve ficar desse jeito
     
    void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint16_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddU16(type + 1); } Você já deve ter pegado a lógica...
    Onde tiver um método addMagicEffect com o parametro uint8_t type, tem que trocar por uint16_t type, o mesmo serve para sendMagicEffect.
    Mas como sei que tem pessoas que não gostam de trabalhar um pouco, vamos continuar com os arquivos para modificar.
    No mesmo arquivo procure por esse código
    void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } Temos alguém conhecido nos parametros, o uint8_t type, já sabemos o que devemos fazer, modifique ele para uint16_t type,
    Código deve está desse jeito
    void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } As alterações desse arquivos terminaram, salva as alterações.
    Vamos para outro arquivo, o protocolgamer.h
    Procure por esse código
    void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint8_t type); Novamente troque o uint8_t type por uint16_t type
    Código devera ficar desse jeito
    void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint16_t type); Procure por esse código
     
    void sendMagicEffect(const Position& pos, uint8_t type); Troque o uint8_t type por uint16_t type
    Código devera ficar desse jeito
    void sendMagicEffect(const Position& pos, uint16_t type); Salve as alterações e vamos para o outro arquivo, está cançado de modificar os códigos? é assim mesmo, se quer alguma coisa tem que se esforçar por ela.
    Vamos para o arquivo game.cpp
    Procure por esses códigos
    void Game::addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Troque os parametros uint8_t effect por uint16_t effect
    Dexando-os assim
    void Game::addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Salve as alterações e vamos para o outro arquivo, game.h
    Procure por esse códigos, está ficando repetitivo, mas é assim mesmo
    void addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode = false); Troque o uint8_t effect por uint16_t effect
    Código tem que ficar desse jeito
    void addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode = false); Essa foi rápido, salve as alterações e vamos para o outro arquivo, player.h
    Procure por esse código
    void sendMagicEffect(const Position& pos, uint8_t type) const Troque por esse código
    void sendMagicEffect(const Position& pos, uint16_t type) const Salve as alterações, esse foi o último arquivo
    Agora compile!
    Uma coisa que você deve saber, se você tentar entrar com o client que não esteja esperando valores do tipo uint16 e algum efeito for executado, vai da um erro no client, não da para jogar...
    Vamos baixar o client modificado.
     
    Download cliente com as seguintes configurações.
    Port:      7171
    IP:         127.0.0.1
    Version: 8.54
    Clique aqui para baixar esse cliente
    Virus total desse client
     
    Download cliente com as seguintes configurações.
    Port:      7272
    IP:         127.0.0.1
    Version: 8.54
    Clique aqui para baixar esse cliente
    Virus total desse client
     
    Modificações dos clientes foram feitos por mim.
    Reporte qualquer bug que ocorrer.
    Esse tutorial ensina como tirar o limite de 255 efeitos do tibia, se você não tiver mais de 255 efeitos colocados em sua source, então coloque para testar, não precisa colocar agora, e se você quiser pode colocar depois e já deixar seu client preparado para suporta mais de 255 efeitos.
    Tutorial para adicionar efeitos na sua source.
     
    Não deixe de agradecer...
  3. Gostei
    VaizardX deu reputação a KotZletY em [Narutibia] Jinchuuriki System - Distro 0.4   
    Salve rápázyádá, recentemente estava de rolê pelo tk, e vi um tópico com o seguinte pedido: "Jinchuuriki System", pra que não conhece irei da um breve resumo.
     
    Para quem conhece o anime naruto sabe sobre as bijuus, e que elas foram seladas em shinobis destinados a carregar tamanha responsabilidade devido a cada biju ter um poder destruidor, como por exemplo a bijuu raposa de nove caldas(Kyuubi), selada dentro do personagem principal chamado de Naruto Uzumaki, a Kyuubi quando dominada, dá ao usuário uma grotesca quantidade de chakra, assim como jutsus e muito mais, cada bijuu tem sua especialidade, jutsus de defesa, assim como a própia defesa e resistência do usuário a tais jutsus, mas claro para você ter a bijuu, é necessário que você sele-a dentro de você, através de um dos jutsus proibidos, como o Shiki Fuujin usado por Minato o 4º Hokage e também pai de naruto, ao usar o selo ele consome a alma de quem usa levando-o a morte após o termino do jutsu, minato como hokage não poderia deixar a kyuubi destruir a vila, então ele invoca o Selo Consumidor do Demônio Morto(Shiki Fuujin) conhecido também como Selo Ceifeiro da Morte, e sela a kyuubi dentro de seu própio filho salvando a vila e morrendo como herói, e naruto desde então passa a ser o Jinchuuriki da raposa de nove caldas.
     
     
    Tendo uma ideia básica de como funciona, vamos a explicação do sistema, que não é diferente.
     
    Ao usar um jutsu(spell) de selo em algum bijuu(monstro), você terá ele selado dentro de você e obterá os jutsus de acordo com cada bijuu, mas para isso, a vida(hp) da bijuu deve está menor que 20%(configurável), e então você durante 2(configurável) dias, terá ele selado dentro de você e poderá usar os jutsus, ao acabar esse tempo você irá perdelo, assim como os jutsus.
    Sistema criado e testado na versão 8.60 usando uma distro na versão 0.4, mesmo assim pode funcionar em versões inferiores!!
     
    Siga os passos corretamente que é sucesso.
     
    Vá em data/lib e crie um arquivo chamado JinchuurikiSystem.lua e coloque o seguinte code dentro:
     
    A tabela está de acordo com a ordem de bijuus existente desde o bijuu de 1 calda, até a biju de nove caldas, então você irá mexer somente em qual ou quais jutsus(spells) cada bijuu irá usar, mais precisamente aqui:
    spells = {""} entre aspas coloque a quantidade que seja de jutsus(spell), como por exemplo:
    Tk no Jutsu 1- Tk no jutsu 2, separados por virgula, assim:
    spells = {"Tk no jutsu 1", "Tk no jutsu 2"} Lembrando que o nome das spells não é a que fica em words, é que  fica em name na xml, por exemplo:
    eu tenho um jutsu chamado kai, quem joga narutibia sabe pra que serve, para usar ela, usamos o nome que está em words, e a que fica em name, será que vai ser mostrada quando for usar, entretanto a função que faz o player aprender a spell, segui pelo nome:
    <instant name="Kai!" words="kai" note que contém uma exclamação no nome da spell, então vai ter que ir exclamação e tudo junto, ficando assim:
    spells = {"Tk no jutsu 1", "Tk no jutsu 2", "Kai!"} e então quando o player for usar a spell pelo words kai, a spell será usada.
     
    Agora vá em data/spells/scripts crie um arquivo chamado selojin.lua e coloque o seguinte code dentro:
     
    Agora vá em data/spells/scripts crie um arquivo chamado buff bijuu.lua e coloque o seguinte code dentro:
     
     
    a tag que você irá colocar na spells.xml para esse jutsu(spell) será a seguinte:
    <instant name="Shiki Fuujin" words="shiki fuujin" lvl="1" mana="1" prem="0" exhaustion="10" enabled="1" needtarget="1" event="script" value="selojin.lua"> </instant> <instant name="Buff Jin" words="buff jin" lvl="1" mana="0" prem="0" selftarget="1" exhaustion="1000" enabled="1" event="script" value="buff bijuu.lua"> </instant>  
     
    Agora vá em data/talkactions/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro:
     
    Nota: esse comando serve para você checar quanto tempo você tem de Jinchuuriki, e qual bijuu está selado dentro de você.
    A tag da talkactions.xml para esse jutsu(spell) é a seguinte:
    <talkaction words="!jincheck" event="script" value="jincheck.lua"/>  
    Agora vá em data/globalevents/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro:
     
    Nota: esse script checa a cada um minuto, os players online na qual o tempo de Jinchuuriki já expirou, e então remove, para assim ele não continuar com os jutsus.
     
    A tag do globalevents.xml desse script é a seguinte:
    <globalevent name="JinSystem" interval="60000" script="jincheck.lua"/>  
    Agora pra finalizar vá em data/creaturescripts/scripts e crie um arquivo chamado jinsystem.lua e adicione o seguinte code:
     
    e a tag do creaturescripts.xml desse script é a seguinte:
    <!-- Jinchuuriki System --> <event type="look" name="JinSystemLook" event="script" value="jinsystem.lua"/> <event type="death" name="JinSystemDeath" event="script" value="jinsystem.lua"/> <event type="login" name="JinSystemLogin" event="script" value="jinsystem.lua"/> <event type="logout" name="JinSystemLogout" event="script" value="jinsystem.lua"/>  
    Nota: na spells.xml que não precisam ter uma vocação especifica para ser usada e devem conter a tag:
    needlearn="1" contendo essa tag, a spell não irá aparecer para nenhum player e não poderá ser usado até que o player sele a bijuu, após ser aprendida quando o player sela a bijuu, irá aparecer no comando !jutsus que em servidores normais é o spellbook e o !spells, em quanto o player não selar, ele não ver e nem pode usar.
     
    bijuu_outfit é o id da looktype que o player vai ganhar ao usar o buff(se você tem outro buff ou speel que faça o mesmo, remova-o ou então remova a função doSetCreatureOutfit da minha buff, assim não gerando conflito e ficando o outfit que deseja).
    skill_p é a quantidade de pontos que ao usar o buff da bijuu, vai add no player.
    time_buff é quanto tempo o buff vai ficar no player valendo também para a looktype.
    effBuff é o id do efeito que vai sair em cima do player quando ele usar o buff.
     
    Pronto, basta configura a spells que cada bijuu(monstro), e pronto.
    Acho que não preciso explicar como configurar, no própio script deixei umas observações.
     
    É totalmente proibido levar meu sistema para outro blog, site ou fórum, fiz esse sistema exclusivamente para membros da comunidade do TibiaKing.
     
     
    Quaisquer erros, sugestões, críticas(construtivas), fiquem a vontade, caso tenha alguma duvida sobre tal parte do script, ou não entendeu alguma parte de como configurar, basta comentar que estarei dando suporte.
     
    Script feito por mim.
     
     
     
    Abraços, bom uso, e boa noite! xD
  4. Gostei
    VaizardX deu reputação a D i M i T r E s C u em (Resolvido)Sistema Jinchuuriki   
    Meu script ta assim em data/creaturescript/script/showvoc.lua
    function onLook(cid, thing, position, lookDistance) if isPlayer(thing.uid) and getPlayerGroupId(thing.uid) >= 1 then local type = getPlayerStorageValue(thing.uid, 89745) local type2 = getPlayerStorageValue(thing.uid, 89759) doPlayerSetSpecialDescription(thing.uid, "\n" ..(getPlayerSex(cid) == 0 and "Ele(a)" or "Ele(a)").." é um "..(type < 0 and "Shinobi" or type == 1 and "Genin" or type == 2 and "Chunin" or type == 3 and "Jounin" or type == 4 and "Anbu" or type == 5 and "Captain Anbu" or type == 6 and "Sennin" or type == 7 and "Akatsuki" or type == 8 and "Taka" or type == 9 and "Hokage").."\n".. (getPlayerSex(cid) == 0 and "Ele(a)" or "Ele(a)")..(type2 < 0 and " [Não é Jinchuuriki]" or type2 == 1 and " [é um Jinchuuriki]"))                                                                                                                                                         end return true end                                                                                                                                                                                                                                                                                             Edite apenas as graduações. ah se virem kkkkkkk agora ta facil           
  5. Gostei
    VaizardX deu reputação a Deadpool em [C++] Cor das mensagens nos channels   
    Bom, postarei como colocar para gm, adm, cm falar em red nos channels e tutores e senior tutores em orange.
     
    testado em: tfs 0.3.6 |854| pl
     
    Em chat.cpp procure por: 
    bool ChatChannel::talk(Player* player, SpeakClasses type, const std::string& text, uint32_t _time/* = 0 e vai ter uma linha assim: if(it == m_users.end()) return false;  de 2 quebra de linhas e adicione em baixo:
    SpeakClasses ntype = type; uint16_t channelId = getId(); if (channelId == 5) { if (player->getGroupId() == 6) { ntype = SPEAK_CHANNEL_RN; } else if (player->getGroupId() == 5) { ntype = SPEAK_CHANNEL_RN; } else if (player->getGroupId() == 4) { ntype = SPEAK_CHANNEL_RN; } else if(player->getGroupId() >= 2) { ntype = SPEAK_CHANNEL_O; } } Agora, um pouco em baixo disso que você adicionou, tem essa função:
    it->second->sendToChannel(player, type, text, m_id, _time); troque por essa:
    it->second->sendToChannel(player, ntype, text, m_id, _time); ou, é só adiciona um "n", no type da primeira linha rs
     
     
    Como Editar os Groups ?
    (player->getGroupId() == 5) "5" -> Grupo do player, no caso aqui seria CM
     
  6. Gostei
    Bom galera, tem uma coisa bem simples que nem o tibia global fez e que eu to trazendo aqui pra vocês. Trata-se de um pequeno sistema que fará você sempre virar pra direção do seu target ao atacar.
    Testado em TFS 0.3.6 Cliente 8.54.

    Imagem auto explicativa:




    Chega de atacar de costas! 

    Agora pra instalar é bem tranquilo. Abra um arquivo .lua em data\creaturescripts\scripts chamado target e coloque o seguinte conteudo dentro dele:




    Feito isso adicione essa linha no creaturescripts.xml:
    <event type="attack" name="targetCreature" script="target.lua"/> E para finalizar adicione a seguinte tag em creaturescripts\scripts\login.lua:
    registerCreatureEvent(cid, "targetCreature") Espero que vcs tenham curtido, é algo bem simples mas ninguém havia pensado nisso antes (nem o próprio Tibia), é uma coisa bem básica e que torna o jogo bem mais importante e sério. 


    EDIT:: Usem essa versão que está mais completa, na anterior se o target estivesse na diagonal ele não virava.



  7. Gostei
    VaizardX deu reputação a chaito.soft em [8.60] Exp Weekend Event   
    Olá pessoal, este sistema já existe nas versões +9.86, porém para 8.60 ainda não existia então decidimos por faze-lo e distribuir ele para a comunidade.
     
    Criticas construtivas são sempre bem vindas
     
    Imagem da Página Web
    A imagem da página web que acompanha o sistema já explica como o sistema funciona e como ele está pré-instalado.
     

     
    Arquivos
    Crie uma arquivo em data/lib chamado weekend_exp.lua e insira o código abaixo dentro:
    config_weekend_exp = { dates = {"Tuesday", "Wednesday"}, -- Dias da semana que será ativo rates = { {1, 1.05}, -- {quantidade de jogador online, taxa de bonus} {200, 1.10}, {300, 1.15}, }, storage_bonus = 30303, } function get_bonus_weekend_exp() for _, rate in ipairs(config_weekend_exp.rates) do if #getPlayersOnline() >= rate[1] then if getGlobalStorageValue(config_weekend_exp.storage_bonus) ~= 1 then doBroadcastMessage("[Weekend Exp Event] The server reached "..rate[1].." players online! The bonus of exp is now "..((rate[2] - 1)*100).."%!") end setGlobalStorageValue(config_weekend_exp.storage_bonus, 1) --Bonus ativado return rate[2] --retornando a taxa de exp que deve ser adicionada else setGlobalStorageValue(config_weekend_exp.storage_bonus, -1) end end return 1 end function set_bonus_weekend_exp(cid, monster_name) local rate_bonus = get_bonus_weekend_exp() local monster = getMonsterInfo(monster_name) if getGlobalStorageValue(config_weekend_exp.storage_bonus) == 1 then if getConfigValue("experienceStages") == true then doPlayerAddExp(cid, (monster.experience * getExperienceStage(getPlayerLevel(cid))) * rate_bonus) doPlayerSendTextMessage(cid, 25, "[Weekend Exp Event] Voce esta com "..((rate_bonus - 1)*100).."% de bonus experiencia.") end end return true end Crie uma arquivo em data/creaturescripts chamado weekend_exp.lua e insira o código abaixo dentro:
    function onKill(cid, target, lastHit) if lastHit and isMonster(target) then local master = getCreatureMaster(target) if not master or master == target then set_bonus_weekend_exp(cid, getCreatureName(target)) end end return true end  
    Crie uma arquivo em data/globalevents chamado weekend_exp.lua e insira o código abaixo dentro:
    function onThink() if table.find(config_weekend_exp.dates, os.date("%A")) then get_bonus_weekend_exp() end return true end Siga até o diretório data/creaturescripts e adiciona a linha abaixo no arquivo login.lua:
    registerCreatureEvent(cid, "weekend_exp")  
    Tags XML
    Adicione cada tag em seu respectivo lugar.
     
    creaturescripts.xml
        
    <event type="kill" name="weekend_exp" event="script" value="weekend_exp.lua"/> globalevents.xml
        
    <globalevent name="weekend_exp" interval="55000" event="script" value="weekend_exp.lua"/> Páǵina PHP
     
    Compatível com versões gesior.
    <?php $main_content .= ' <center> <h2>Weekend Experience Event</h2> </br> Este é um <b>evento automático</b> que é ativado todo final de semana, começando no sábado e terminando no final de domingo. Quando o server atingir uma determinada quantidade de jogadores online, irá ativar um bonus de exp específico, O mesmo vale para quando o servidor diminuir de players, o bonus irá diminuir de acordo com a tabela, confira a seguir. </center> </br> <table width="100%" border="0" cellpadding="4" cellspacing="1"> <tbody> <tr> <td colspan="3" bgcolor="#d4c0a1"> A partir de <b>50 jogadores online</b>, o bonus de exp será de <b>2%</b>. </td> </tr> <tr> <td colspan="3" bgcolor="#f1e0c6"> A partir de <b>100 jogadores online</b>, o bonus de exp será de <b>5%</b>. </td> </tr> <tr> <td colspan="3" bgcolor="#d4c0a1"> A partir de <b>150 jogadores online</b>, o bonus de exp será de <b>10%</b>. </td> </tr> <tr> <td colspan="3" bgcolor="#f1e0c6"> A partir de <b>200 jogadores online</b>, o bonus de exp será de <b>15%</b>. </td> </tr> <tr> <td colspan="3" bgcolor="#d4c0a1"> A partir de <b>300 jogadores online</b>, o bonus de exp será de <b>20%</b>. </td> </tr> </tbody> </table> </br> Quando atingir determinada quantidade de players online, uma mensagem automática será enviada, por exemplo quando atingir 1000:<br><br> <b>Weekend Event:</b> The server reached 1000 players online! The bonus of exp is now 2%!.<br><br> Se vocês forem calcular a porcentagem, podem ver que não é nada exagerado, por exemplo, bonus de 6%: Se ao matar um monstro você for ganhar 2000 de exp, com 6% de bonus você irá ganhar 2120.</font> </br> <center>Desenvolvido por <a href="http://chaitosoft.com/">ChaitoSoft.com</a>.</center> '; ?>  
    Acho que não tem créditos, se alguém souber o nome do idealizador do sistema deixe no comentário.
  8. Gostei
    VaizardX deu reputação a lango rullez em Mega Evolution (PxG) PDA   
    Oi. 
    Antes de tudo, este sistema foi escrito para o servidor PDA by Slicer, versão 1.9. A adaptação para outras bases pode ser bem simples, dependendo do seu conhecimento em Lua (que na verdade nem precisa ser grande).
    Resolvi escrever este simples sistema porque me deu um certo desgosto ver vários servidores onde a mega evolução é literalmente uma evolução (inclusive o que estive jogando, onde alguns jogadores também concordaram com minha opinião). Quero dizer, o pokémon fica transformado direto, para sempre, forever, algo que contraria a ideia original.
    Optei por fazer o sistema igual (ou semelhante, já que me baseei apenas nas informações disponíveis no Blog PxG, que aliás são poucas) ao da PokeXGames. Mais futuramente, no entanto, posso fazer uma outra versão voltada a ideia de uma mega evolução temporária.
    Para quem não conhece o sistema, bem, estou com preguiça de explicar, logo recomendo acessar este link. A diferença é que a pedra (mega stone) não ocupa o espaço de um Held Item tier Y (visto que não são todos os servidores que possuem este sistema).
    O sistema, como poderão notar, possui muitos detalhes. O motivo é que tenho a tendência de deixar a configuração o menor possível. Ou seja, basta configurar o efeito no código da spell e a tabela das mega evoluções.
    Nossa, que textão.
     
    TL;DR: Igual ao sistema da PxG; PDA; muitos detalhes mas pouquíssima configuração.
    data/lib:
    cooldown bar.lua:
    Troque o código da função getNewMoveTable(table, n) por este:
    function getNewMoveTable(table, n) if table == nil then return false end local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} local returnValue = moves if n then returnValue = moves[n] end return returnValue end No código da função doUpdateMoves(cid), troque o segundo:
    table.insert(ret, "n/n,") Por:
    local mEvolve if not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then if not isInArray(ret, "Mega Evolution,") then table.insert(ret, "Mega Evolution,") mEvolve = true end end if not mEvolve then table.insert(ret, "n/n,") end Depois, em pokemon moves.lua: Troque: min = getSpecialAttack(cid) * table.f * 0.1 --alterado v1.6 por:
    min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1 --alterado v1.6 Código da spell:
    elseif spell == "Mega Evolution" then local effect = xxx --Efeito de mega evolução. if isSummon(cid) then local pid = getCreatureMaster(cid) if isPlayer(pid) then local ball = getPlayerSlotItem(pid, 8).uid if ball > 0 then local attr = getItemAttribute(ball, "megaStone") if attr and megaEvolutions[attr] then local oldPosition, oldLookdir = getThingPos(cid), getCreatureLookDir(cid) doItemSetAttribute(ball, "poke", megaEvolutions[attr][2]) doSendMagicEffect(getThingPos(cid), effect) doRemoveCreature(cid) doSummonMonster(pid, megaEvolutions[attr][2]) local newPoke = getCreatureSummons(pid)[1] doTeleportThing(newPoke, oldPosition, false) doCreatureSetLookDir(newPoke, oldLookdir) adjustStatus(newPoke, ball, true, false) if useKpdoDlls then addEvent(doUpdateMoves, 5, pid) end end end end end Depois, em configuration.lua:
    megaEvolutions = { --[itemid] = {"poke_name", "mega_evolution"}, [11638] = {"Charizard", "Mega Charizard X"}, [11639] = {"Charizard", "Mega Charizard Y"}, } Agora, em data/actions/scripts, código da mega stone:
    function onUse(cid, item) local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid if not mEvolution then return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.") elseif ball < 1 then return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.") elseif #getCreatureSummons(cid) > 0 then return doPlayerSendCancel(cid, "Return your pokemon.") elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.") elseif getItemAttribute(ball, "megaStone") then return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.") end doItemSetAttribute(ball, "megaStone", item.itemid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".") doRemoveItem(item.uid) return true end Depois, em goback.lua: Abaixo de: if not pokes[pokemon] then return true end coloque:
    if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end Depois, em data/creaturescripts/scripts, look.lua: Abaixo de: local boost = getItemAttribute(thing.uid, "boost") or 0 coloque:
    local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone") if megaStone then extraInfo = getItemNameById(megaStone) if pokename:find("Mega") then pokename = megaEvolutions[megaStone][1] end end Depois, acima de:
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) coloque:
    if extraInfo ~= "" then table.insert(str, "\nIt's holding a(n) "..extraInfo..".") end Já em data/talkactions/scripts, move1.lua: Troque:    if not move then         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")         return true     end por:
    if not move then local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") if not isMega or name:find("Mega") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local moveTable, index = getNewMoveTable(movestable[name]), 0 for i = 1, 12 do if not moveTable[i] then index = i break end end if tonumber(it) ~= index then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local needCds = true --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown. if needCds then for i = 1, 12 do if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.") end end end move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} end E troque:
    doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) por:
    local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!" if move.name == "Mega Evolution" then spellMessage = "Mega Evolve!" end doCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY) Se quiser que o "Mega" não apareça no nome do pokémon, vá em data/lib, level system.lua: Acima de: if getItemAttribute(item, "nick") then nick = getItemAttribute(item, "nick") end coloque:
    if nick:find("Mega") then nick = nick:match("Mega (.*)") if not pokes[nick] then nick = nick:explode(" ")[1] end end E, caso o seu servidor possua pokémons evoluídos permanentemente na forma mega, em data/actions/scripts, goback.lua: Troque: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end por:
    if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if not normalPoke then local megaStone for itemid, table in pairs(megaEvolutions) do if table[2] == pokemon then megaStone = itemid break end end if not megaStone then return doPlayerSendTextMessage(cid, 27, "Your pokemon is bugged. Please, talk to the administrator.") end doItemSetAttribute(item.uid, "megaStone", megaStone) normalPoke = megaEvolutions[megaStone][1] end doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end Bom pessoal é isso!
    Espero que ajude !
    Creditos:
    zipter98  (Pela criação)
    Eu Lango Rullez (Por Divulgar ^_^)
     
  9. Gostei
    VaizardX deu reputação a Wend II em xPoketibia [Open source]   
    Novos remake sendo adicionado 
     

     

     

  10. Gostei
    VaizardX recebeu reputação de Wend II em xPoketibia [Open source]   
    Servidor muito bom !
    REP+ para incentivar o projeto e compilação em linux
  11. Gostei
    VaizardX deu reputação a Wend II em xPoketibia [Open source]   
    Olá Galera do Tibiaking!   Venho apresentar para vocês um novo projeto, o xPoketibia, o poketibia se trata de um servidor que está sendo desenvolvido para tentar substituir o PDA em termos de uso dos OT-admin (sair dessa mesmice de servidores PDA) , o mesmo será disponibilizado aqui no fórum com suas devidas versões\atualizações.     Estamos usando uma base antiga que está um pouco desatualizada e com muitos bugs , não editamos o mapa ainda por isso o mapa que está sendo usado é o do dash , tentaremos ao máximo trazer incríveis mapas e sistemas.   Andamento do servidor Level System: 90% Caught System: 50% Go-Back System: 50% Portrait System: 50% Evolution System: 100% NPC Nurse System: 50% Pokedex System: 50% Ghost System: 50% Wild Pokemon Passive: 50% Moves System: 90% Limite de 6 Pokemons: 50% Duel System (Pela Party) 50% Tv / Cam System 50%   Próximos sistemas Order System (Com todas as habilidades [Fly, Surf, Ride, Blink, Cut, Light, Transform, Control Mind, Dig, Move]) All Pokemon Spells Boat System (Vermilion - Cinnabar) Gym System NPC's de batalha espalhados pelo mapa Vários outros sistemas que tenho em mente.   Changelog do servidor:  

          Prints:            Downloads:    Servidor > http://www.4shared.com/rar/VAp3P-nwba/xPoketibia_Project.html? Client > http://www.4shared.com/rar/l5iti909ba/Client_xP.html? Source > http://www.4shared.com/rar/Cb_mNAJvba/sources_xP.html? Repositório no GitHub > Quase lá ~~   creio que não precise de scan, pois o próprio 4shared faz escaneia e diz se tem vírus    Equipe: Wend Silva < eu Daniel   Créditos: avuenja por está ajudando com o Github   é isso Galera vou indo fazendo com o tempo , não me cobrem , tenho vida social também , não é todo o dia que vou está disponível pra mexer no servidor , mas é isso nada de novo , mas apenas outro distro totalmente diferente com source , creio que vai ajudar muitas pessoas que curte o PDA, Lembrando que ele não vai ser livre de bugs , peço ajuda também para a galera que ajudem no projeto com sugestões e relatando os bugs que encontrarem.   Thank you ~~ 

Informação Importante

Confirmação de Termo