Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 04/01/16 em todas áreas

  1. Fly System BETA Fala galera, hoje eu estou aqui para mostrar o fly system que eu desenvolvi inteiramente nas sources. Uma observação sobre o vídeo, o tile branco que vocês vão ver é apenas para demonstração. Sobre o sistema: Este sistema é totalmente desenvolvido dentro das sources, e sua funcionalidade depende apenas de 1 tile, diferentemente das versões já criadas que usam 9 tiles (1 para o player ficar em cima, e os outros 8 em volta do jogador para captação do próximo passo), assim diminuindo o consumo desnecessário de memória.
    6 pontos
  2. Inicia-se hoje a primeira etapa dos updates que estão por vir. Gostaria de agradecer ao apoio de membros da comunidade com sugestões, criticas e também por acompanhar nosso trabalho. Esta etapa trata-se de uma questão que vem sido debatida diversas vezes, cargos e funções administrativas. Parece ou pelo menos estamos certos de que encontramos uma estrutura estável para os cargos e para que permaneçam lapidados pelo resto do período de 2016. Ressaltando que não houve mudanças diretas nos cargos, apenas uma reforma (vai moura!) na utilização destes e algumas novas regulamentações para as funções administrativas que passarão a ser adotadas a partir desta quarta, 06/04. Hoje, está sendo feito o processo inicial para ocupar as novas normas, disponíveis em anexo a este tópico. • • • Quero introduzir de uma forma resumida as mudanças iniciadas hoje e no dia 06. Informações mais completas estarão disponíveis no anexo abaixo. Coordenador fora dividido em 4 bases; Coordenadores agora são remunerados; Expansão em permissões de moderadores nos fóruns; Plataforma de agendamento de tarefas e desenvolvimento interno mudada para Google+. XTIBIANORMASPARACARGOS.pdf Coordenador Coordenador de Equipe @Danihcv Coordenador de Desenvolvimento @Night Wolf Coordenador de Eventos @Skulls Coordenador de Vias Sociais Moderador Moderador Global @Caronte Moderador de Infraestrutura @Beeki Moderador de Mapping @SamueLGuedes Rapazes, mostrem a cara! Bem vindos! Espero grandes coisas de vocês e também espero que os membros da comunidade fiquem satisfeitos com as mudanças que estão por vir. Não caprichei no tópico, mas foi falado o que tinha pra falar. Grande abraço a todos! :XTibia_smile: XTIBIANORMASPARACARGOS.pdf
    4 pontos
  3. Caronte

    [aula 1] lógica de programação

    Aula - Lógica de programação fala pessoal, essa aula é a primeira do conjunto que estarei criando para ensinar programação através da linguagem LUA, e depois, aprender como aplicar no tibia. as informações apresentadas a seguir são fundamentais para o apropriado entendimento da logica de programação, porém... Caso você esteja buscando a parte mais prática, pule para: Criando Algoritmos Sem mais delongas, precisamos entender o que é o conceito de lógica de programação, Lógica está contida em um conjunto de atitudes/eventos que tem um sentido por trás, lógica pode tomar várias formas e definições, porém, a que vamos aprender é Lógica de Computador, ela é EXTREMAMENTE necessária para você poder criar scripts, e programar códigos de qualquer tipo e linguagem. A lógica de computador não pode ser argumentada, essa lógica tudo é ou não é, não existe o meio termo ou argumento, ela pode ser entendida na Lógica de Aristóteles com a lei da não contradição, ou é verdadeiro, ou falso. Nós somos quase totalmente diferentes de máquinas, apesar do nosso cérebro funcionar também por eletricidade, a voltagem é fraca e ele não depende só de eletricidade, mas isso não vem ao caso, o que interessa é a nossa maneira de pensar e agir, aí sim, é totalmente diferente de um computador, Porque Será? Ao pensarmos, nosso cérebro trabalha no consciente e inconsciente, alguns cientistas acreditam que a decisão acontece já no inconsciente, através de experiências já vividas e considerações, ou seja, você não sabe que seu cérebro já tomou a decisão, até ficar consciente dela (não acredito 100% nisso, essa informação não tem muita base, tem deduções), mas o que temos que entender é que a gente avalia de acordo com o nosso conhecimento já adquirido, e por meio disso, a decisão é tomada através do nosso conhecimento de certo ou errado, e a decisão não precisa ser exata. Já o computador trabalha através de instruções de linguagens não sofisticadas (códigos de máquina, exemplo: código binário, 0 ou 1), algo que é praticamente incompreensível para os humanos (se não fosse compreensível, não existiria computador), por causa da dificuldade de programar em código de máquina foi criada uma linguagem chamada Assembly que torna muito mais fácil programar, e depois dessa linguagem, foram criadas outras mais sofisticadas. Criando Algoritmos. Agora o que precisamos entender é que a nossa maneira de pensar na resolução de problemas é diferente de como devemos escrever para um computador entender, o computador é muito mais burro na hora de interpretar as ideias, pois ele não tem quase nada para se basear além das suas instruções. Para explicar, vou criar um algoritmo simples para mandar um humano fazer uma determinada tarefa, comprar pão, e depois, vou explicar porque um computador não pode usar o mesmo algoritmo. Vou usar os seguintes substantivos: Pão Dinheiro Troco Casa Padaria Compra Vou usar os seguintes verbos: Pegar Ir / Voltar Fazer Dar Essas são as palavras chaves. Os verbos numa linguagem normal são geralmente chamados de Sintaxe (ou parte dela), ela é quem dirige a logica, e que faz o script ter sentido. Já os substantivos são dados valiosos, são variáveis! , variável é uma incógnita sobre o qual você tem controle, e sabe o valor , ela serve para você resumir dados e guardar, vão ser muito usadas se você quiser programar bastante, ela ajuda a identificar dados, e tornar o programa mais legível. • Vamos ao algoritmo: Bom, uma tarefa com instruções tão gerais não poderia ser seguida por um computador. A menos que sejam funções, porém isso não é assunto para agora. O fato é que essas instruções são bem mais do que a quantidade necessária para um humano, você pode falar: “Vá à padaria comprar pão”, e ele irá executar perfeitamente. Porém, se você quer dar um algoritmo de como ir para a padaria para um computador executar terá que ser bem mais específico e falar todas as tarefas que ficam subentendidas para um humano, mas que não são nem um pouco claras para um computador. Para o computador entender algo parecido do que o humano entende, seria necessária muita inteligência artificial, o que não contamos quando vamos programar em LUA, novamente falo, o computador é burro. Agora vamos ao algoritmo mais próximo do que um computador precisa, vamos precisar adicionar mais termos ao nosso vocabulário: Expressões condicionais: E alguns verbos e termos a mais. Vamos ao algoritmo: As expressões condicionais servem para verificar antes de fazer alguma tarefa, assim, evitamos possíveis erros, por exemplo, caso não tenha dinheiro! Se você mandar o computador pegar o dinheiro e o valor dinheiro não existe, irá gerar erros no seu script. Expressões condicionais não servem somente para verificar, servem para selecionar também, por exemplo, uma Quest que precise de level 20 para entrar. Esse algoritmo acima já dá uma parte de script, se escrito como LUA. A expressão condicional que acabei de passar é considerada fácil, mas para uma Quest é simplesmente isso e mais algumas coisas simples. Bom, esse é o final da aula de algoritmos, gostaria de saber se fui claro em relação ao tutorial e se alguma coisa passou despercebida que merece alguma atenção a mais, assim posso editar o tópico para ficar melhor. Exercício: Resposta: [Aula 2] Booleanos e Operadores ---->>
    1 ponto
  4. valakas

    Mutacaosv (high exp)

    Mutacaosv (High Exp) Eae galera alguém se lembra do mutacaosv? um servidor baseado em elfen war 99999x antigamente ele era na versão 854.Hoje eu trago a vocês o servidor na versao 8.60 utilizando a source 0.4 , servidor totalmente estavel com uptime de 30 dias inteiros na vps com jogadores, o servidor possui 4 SET e um SET custom donate. tem mais de 20 magias diferentes e editadas, o servidor foi feito por min de uma trunk não contém poluição de scripts e está totalmente liso mais possui alguns sistemas como o antigo repsystem, na distro possui sistema de antiDivulgação, o servidor também possui sistema de upgrade system, do +1 a +20 configuravel, o crystal dropa na criatura mais forte chamada undead morgaroth o servidor também possui reset system para saber os comandos digite / commands não possui bugs propositais de nuker ou free items vip VIDEO PRINTS ID do SET donate /i vip axe,blade, wand, bow, arrow e club /i vip cloak, vip hat, vip legs, vip boots, vip shield Download e scanner Download: MediaFire Scan: VirusTotal
    1 ponto
  5. Skulls

    Personalizando Ataques Básicos

    Boa noite pessoal, tudo bem? Introdução Venho até vocês hoje postar um sistema que desenvolvi para customização de ataques básicos. Basicamente ele permite que você defina as características visuais do ataque básico de um player qualquer: efeito, tipo de dano e range. As modificações de itens ainda se sobrepõe ao mesmo, seguindo as regras: 1. A range do item só sobrepõe a range base do jogador se, e somente SE, esta for última for menor do que a primeira. 2. O efeito e o tipo de dano do item se sobrepõem ao base sempre que estes existirem. Códigos: 1. Definição da função lua responsável por chamar a alteração O primeiro passo é definir a função lua que será responsável pela alteração do ataque basico: player:setFistConditions(range, combatType, distanceEffect) Abra o arquivo luascript.h e cole isso dentro dos métodos protegidos de LuaScriptInterface: static int luaPlayerSetFistConditions(lua_State* L); Em seguida, abra luascript.cpp para configurarmos a implementação do método. Junto aos demais registros do tipo player cole este: registerMethod("Player", "setFistConditions", LuaScriptInterface::luaPlayerSetFistConditions); Junto às demais funções do metadata "Player" coloque: int LuaScriptInterface::luaPlayerSetFistConditions(lua_State* L) { // player:setFistConditions(range, combatType, distanceEffect) Player* player = getUserdata<Player>(L, 1); if (player) { player->setFistConditions(getNumber<uint8_t>(L, 2), getNumber<CombatType_t>(L, 3), getNumber<ShootType_t>(L, 4)); } else { lua_pushnil(L); } return 1; } Pronto, a sua função lua está configurada. 2. Configurar os atributos que definem o novo ataque base do player Nessa etapa vamos alterar a classe "Player" para receber os atributos referentes ao range, tipo de combate e efefeito do ataque base, bem como funções para definí-los e recebê-los (getters and setters). Em player.h, dentro de variáveis protegidas (protected:), cole: ShootType_t fistDistanceEffect; uint8_t fistRange; CombatType_t fistCombatType; Na parte publica (public:) defina os getters and setters: void setFistConditions(uint8_t range, CombatType_t combatType, ShootType_t distanceEffect) { fistRange = range; fistCombatType = combatType; fistDistanceEffect = distanceEffect; } uint8_t getFistRange() { return fistRange; } CombatType_t getFistCombatType() { return fistCombatType; } ShootType_t getFistDistanceEffect() { return fistDistanceEffect; } Agora, em player.cpp, dentro do construtor (Player::Player(ProtocolGame_ptr p) : Creature(), inventory(), client(p), varSkills(), varStats(), inventoryAbilities()) coloque: fistDistanceEffect = ShootType_t::CONST_ANI_NONE; fistRange = 1; fistCombatType = CombatType_t::COMBAT_PHYSICALDAMAGE; Pronto, mais uma etapa concluída. A sua classe player está pronta para receber as variáveis referentes à customização do ataque básico. 3. Configuração da Classe Weapon e suas subClasses Chegou a hora de configurar a classe Weapon e suas subClasses, responsáveis pela execução do dano base. Primeiramente, abra o arquivo Weapons.h e, dentro do public da classe Weapons coloque: virtual void Weapon::setFistDistanceParams(Player* player, CombatParams& params) const Em Weapons.cpp, vá até o método Weapons::useFist(Player* player, Creature* target) e substitua: if (!Position::areInRange<1, 1>(player->getPosition(), target->getPosition())) { return false; } Por: Position playerPos = player->getPosition(); Position targetPos = target->getPosition(); if (playerPos.z != targetPos.z) { return false; } if (std::max<uint32_t>(Position::getDistanceX(playerPos, targetPos), Position::getDistanceY(playerPos, targetPos)) > player->getFistRange()) { return false; } Após params.blockedByShield = true; cole: params.distanceEffect = player->getFistDistanceEffect(); params.combatType = player->getFistCombatType(); Pronto o script já é funcional. Isto é, seu ataque base tem efeito, dano e range customizáveis. Porém, qualquer item que for equipado irá sobrepor seu ataque base. Se você quer assim, pare por aqui. Caso você queira que a sobreposição do item sobre a sua customização tenha regras faça o próximo passo. 4. Criando regras Bom, já estamos quase concluindo o tutorial. Agora vamos definir as regras de sobreposição dos itens sobre o ataque base. Volte a Weapons.cpp e defina o método que dita as regras de efeito e tipo do ataque: void Weapon::setFistDistanceParams(Player* player, CombatParams& params) const { params.distanceEffect = params.distanceEffect != ShootType_t::CONST_ANI_NONE ? params.distanceEffect : player->getFistDistanceEffect(); params.combatType = params.combatType != CombatType_t::COMBAT_NONE ? params.combatType : player->getFistCombatType(); } Explicando: Aqui você determina quando o parâmetro final de dano vai ter as caracteríticas da sua arma e quando vai ter de ataque básico. No nosso caso, vai sobrescrever sempre que a arma tiver um efeito e um tipo de dano próprio, isto é, for diferente de CONST_ANI_NONE e COMBAT_NONE. Fique a vontade para modificar este método ao seu gosto. Exemplo: sobrescrever o tipo de dano somente se ele for do tipo físico; sobrescrever o efeito somente se ele ainda não existe; etc, use a criatividade. Bom, para essas configurações de regras valerem, temos agora que substituir o método Weapon::internalUseWeapon por: void Weapon::internalUseWeapon(Player* player, Item* item, Creature* target, int32_t damageModifier) const { if (scripted) { LuaVariant var; var.type = VARIANT_NUMBER; var.number = target->getID(); executeUseWeapon(player, var); } else { CombatDamage damage; WeaponType_t weaponType = item->getWeaponType(); if (weaponType == WEAPON_AMMO || weaponType == WEAPON_DISTANCE) { damage.origin = ORIGIN_RANGED; } else { damage.origin = ORIGIN_MELEE; } CombatParams paramsCheck = params.copyParams(); setFistDistanceParams(player, paramsCheck); damage.primary.type = paramsCheck.combatType; damage.primary.value = (getWeaponDamage(player, target, item) * damageModifier) / 100; damage.secondary.type = getElementType(); damage.secondary.value = getElementDamage(player, target, item); Combat::doCombatHealth(player, target, damage, paramsCheck); } onUsedWeapon(player, item, target->getTile()); } Além disso, devemos ir em combat.h e, dentro da struct CombatParams, criar o seguinte 'método': CombatParams CombatParams::copyParams() const { CombatParams newParams; newParams.dispelType = dispelType; newParams.combatType = combatType; newParams.blockedByArmor = blockedByArmor; newParams.blockedByShield = blockedByShield; newParams.targetCasterOrTopMost = targetCasterOrTopMost; newParams.aggressive = aggressive; newParams.itemId = itemId; newParams.impactEffect = impactEffect; newParams.distanceEffect = distanceEffect; newParams.useCharges = useCharges; newParams.origin = origin; return newParams; } A última modificação é a definição da regra de range. De volta ao Weapons.cpp e no método Weapon::playerWeaponCheck logo após: if (playerPos.z != targetPos.z) { return 0; } Cole: shootRange = player->getFistRange() <= shootRange ? shootRange : player->getFistRange(); No caso, a regra é para substituir a range base pela range do item SE esta for menor que a primeira. Outro exemplo seria só substituir a range base pela do item SE a range base for maior que 1 (para que knights não possam usar ranged itens, por exemplo). Enfim pessoal, isso é tudo. Espero que gostem. Abraços e boa noite. Editado: Criado um tópico em scripting ilustrando a utilização do sistema: Exemplificando Customização de Ataque
    1 ponto
  6. PokeTournament

    Poke Tournament (Pokemon Arena)

    POKE TOURNAMENT lute em arenas por fama e premiações, participe de campeonatos e faça amigos em poke tournament. sobre: Em poke tournament você encontrara um novo estilo de jogo entre os Poketibias, nele você poderá controlar seu pokemon diretamente, fazer fases PVE fechadas tanto individual como em grupo, lutar PVP com seus amigo em arenas fechadas rankiado ou não, personalizar os combos dos seus pokemons e se divertir de montão com uma jogabilidade facil e competitiva! estilo: O Poke Tournament pode ser considerado um jogo do estilo M.O.B.A. (Multiplayer Online Battle Arena) apesar do jogo não contar com fases no estilo do jogo DOTA, o PkT tem como foco principal as batalhas pvp levando um novo estilo de jogo de luta 2D com a variedade estrategica de cada pokemon da serie. graficos: Alem desse novo estilo de jogo tambem estamos trabalhando em graficos novos para interface do client e movimentos de combate no pokemon, então você irá encontrar telas que facilitam a jogabilidade e movimentos para todos os ataques dos pokemons do jogo. Por enquanto estamos trabalhando somente com pokemons não evoluidos "pequenos". jogabilidade: A jogabilidade do PkT é um pouco baseada nos jogos de luta, com combos e contra ataques você terá a experiencia da adrenalina enquanto joga. Alem de poder customizar os combos de seus pokemons ao seu gosto o jogo conta com varios sistemas de batalhas inovadores, entre eles vocês encontrarão sistema de movimento ao bater, contra ataque, defesa, avanço rapido, sistema de dor, sistema de Special e muito mais. historia: A historia do jogo e baseada na primeira versão da serie de games pokemon rpg (Pokemon Red/Green), sem diferenças relevantes, a unica diferença e que depois de pallet o seu personagem irá para um Lobby onde será sua unica cidade para sempre. quests: Apesar do Pkt ser um jogo de Arena PVP, não podiamos deixar de ter aquelas quests premiadas não e mesmo? alem de quests de historia você tambem poderá fazer missões diarias, missões premiadas e missões secretas. premios: Depois de tudo isso ainda temos premios diarios para quem marcar presança, permanecer online e ate uma quantidade de Vip Points por participar de batalhas PVP Rankiadas. Progresso Final: 65% Fases (mapa): 50% prontas - (Route1, Viridian Forest, MT. Moon, Bills Route,Rock Tunel) Pokemons: 60% falta - (os pokemons que vem vem depois do numero 105) Ataques: 60% falta - (a maioria dos pokemons ainda faltam 1 ou 2 ataques) Sistemas: 95% falta - (testes e ajuste de danos e seleção de premios) Client: 60% falta - (novo designer base, recompilação do client, nova janela de health bar, equipamentos, nova janela de skills pro pokemon e nova pokedex). Prints: alguns golpes Escolhendo a fase tela pvp rankiada - fases e oponentes são sorteados tela de conversa com npc equipando skill no combo nosso mascote e premio especial Lucky Draw Sistema de Colisão Videos Pokeball System Vídeo da primeira fase Vídeo de um pokemon exclusivo - Machop Ryu
    1 ponto
  7. OTServlist.org contra a diversidade? Aparentemente, de acordo com relatórios de diversos usuários do site e opiniões públicas, sabe-se que a OTServlist.org tem repudiado servidores derivados nos últimos períodos. Vários servidores, conhecidos pela categoria "Custom" estão sendo banidos da lista. Entendo de minha parte que, este, é um ato errôneo na comunidade open tibia. Parte destes servidores deverão passar a utilizar a otserv-list.com. Esta dispõe de um espaço exclusivo para a(s) categoria(s). A lista de servidores do xtibia, otserv-list.com, apoia a diversidade. E você, o que pensa sobre isso?
    1 ponto
  8. Realmente.. Até o rotz foi banido.. Otservlists.com chegou na hora certa, não é mesmo?
    1 ponto
  9. Agora sim o esquadrão de elite está em peso hahahaha, boa sorte para nós e muito sucesso ao Ekz. #CARONTEPARAADMINISTRADOR
    1 ponto
  10. Night Wolf

    [2016] Update - O Novo Xtibia #01/3

    uma rodada pra geral no barzinho do Ékz por minha conta!
    1 ponto
  11. 1 ponto
  12. 1 ponto
  13. Excelente notícia!
    1 ponto
  14. Tony Araujo

    Fly System BETA - 100% sources

    Obrigado ^^ Por hora, para uso próprio. Valeu brother ^^
    1 ponto
  15. Vá em Data/Npcs > delete a pasta LIB . Agora troque por essa > Download Eu estava tendo este erro e resolveu na época!!
    1 ponto
  16. Furabio

    WebSite ZatchTibia (Show OFF)

    Usa uma fonte diferente, tenta melhorar a estrutura da layout. Deu até vontade de iniciar um projeto de tibia zath bell, pena que não sou spriter hahaha
    1 ponto
  17. Hahaha muito obrigado! Pois é, na medida do possível eu tento. Uma pena a sessão de cpp estar morta Abraços!
    1 ponto
  18. em /data/lib/core/player.lua adicione isso no final do script : function Player.getResets(self) local result = db.storeQuery("SELECT `resets` FROM `players` WHERE `id` = ".. self:getId()) if result == false then resets = 0 else resets = result end return resets end agora em /data/npc/lib/npcsystem/modules.lua troque seu Stdmodule.travel por esse : function StdModule.travel(cid, message, keywords, parameters, node) local npcHandler = parameters.npcHandler if npcHandler == nil then error("StdModule.travel called without any npcHandler instance.") end if not npcHandler:isFocused(cid) then return false end local player = Player(cid) if player:isPremium() or not parameters.premium then if player:isPzLocked() then npcHandler:say("First get rid of those blood stains! You are not going to ruin my vehicle!", cid) elseif parameters.level and player:getLevel() < parameters.level then npcHandler:say("You must reach level " .. parameters.level .. " before I can let you go there.", cid) elseif not player:removeMoney(parameters.cost) then npcHandler:say("You don't have enough money.", cid) elseif player:getResets() < parameters.reset then npcHandler:say("You must reach reset " .. parameters.reset .. " before I can let you go there.", cid) else npcHandler:say(parameters.msg or "Set the sails!", cid) npcHandler:releaseFocus(cid) local destination = Position(parameters.destination) local position = player:getPosition() player:teleportTo(destination) position:sendMagicEffect(CONST_ME_TELEPORT) destination:sendMagicEffect(CONST_ME_TELEPORT) end else npcHandler:say("I'm sorry, but you need a premium account in order to travel onboard our ships.", cid) end npcHandler:resetNpc(cid) return true end Pronto para usar, adicione o parametro reset= numero de resets.
    1 ponto
  19. Obrigado Daniel! Achei mt útil fazer algo do tipo no meu contexto, uma vez que vou ressuscitar o fist fight como a base do dano básico do player. Sim, as vezes eu mesmo me surpreendo com as possibilidades. Grande abraço.
    1 ponto
  20. Voce provavelmente trocou de distro ou seu server veio com o distro errado. Baixe um server de mesmo distro que o seu e subistitua as pastas npcs/lib e npcs/scripts/lib pelas pastas baixadas.
    1 ponto
  21. Danihcv

    Erro SQL

    Executa esse comando na sua data base: INSERT INTO "player_statements" ("player_id", "channel_id", "text", "date") VALUES (946, 0, "-", 1459273839) Vê se resolve.
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...