Tudo que Elwyn postou
-
Magia de imunidade
TFS 1.1: spell: local condition = Condition(CONDITION_ATTRIBUTES) condition:setParameter(CONDITION_PARAM_TICKS, 10000) condition:setParameter(CONDITION_PARAM_BUFF_SPELL, true) local combat = Combat() combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) combat:setParameter(COMBAT_PARAM_AGGRESSIVE, 0) combat:setCondition(condition) function onCastSpell(creature, var) creature:registerEvent("CustomSpell") local cid = creature:getId() addEvent( function() local player = Player(cid) if player then player:unregisterEvent("CustomSpell") end end, 10*1000 ) return combat:execute(creature, var) end creaturescript: function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if primaryType == COMBAT_HEALING or secondaryType == COMBAT_HEALING then return primaryDamage, primaryType, secondaryDamage, secondaryType end creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT) return false end
- Chain Lightning
- Chain Lightning
-
Chain Lightning
Isso acontece quando não encontra nenhuma criatura, ai essa linha: creature = possible[math.random(2, #possible)] o math.random() fica entre 2 e 1, o que não pode e dá esse erro. É só mudar o 2 por 1. Reprodução do erro: > index = math.random(2, 1) stdin:1: bad argument #2 to 'random' (interval is empty) stack traceback: [C]: in function 'random' stdin:1: in main chunk [C]: in ?
-
URGENTE Duas spells
case STAT_MAXHITPOINTS: stats[i] = static_cast<int32_t>(player->getMaxHealth() * ((statsPercent[i] - 100) / 100.f)); break; case STAT_MAXMANAPOINTS: stats[i] = static_cast<int32_t>(player->getMaxMana() * ((statsPercent[i] - 100) / 100.f)); break; for (int32_t i = STAT_FIRST; i <= STAT_LAST; ++i) { if (stats[i]) { needUpdateStats = true; player->setVarStats((stats_t)i, stats[i]); } } if (needUpdateStats) { player->sendStats(); } case STAT_MAXHITPOINTS: { if (getHealth() > getMaxHealth()) { Creature::changeHealth(getMaxHealth() - getHealth()); } else { g_game.addCreatureHealth(this); } break; } case STAT_MAXMANAPOINTS: { if (getMana() > getMaxMana()) { Creature::changeMana(getMaxMana() - getMana()); } break; } O que acontece no seu script, em ordem cronológica, são esses códigos. Como pode ver em: if (getHealth() > getMaxHealth()) { Creature::changeHealth(getMaxHealth() - getHealth()); } Toda vez que você muda o max health, ele checa se seu health atualmente é maior que seu max health. Por exemplo, você tem 100/100 de hp, usa a spell fica com 100/130. Se você usar a spell de novo, agora 130/130, ele vai ver: 130 > 100? Sim, muda health em (100 - 130); //-30 Então você volta a ter 100 de hp com 130 de max hp. "Por que não sobrepõe um em cima do outro? Por exemplo, uso uma vez 100/130, e outra vez e fico 100/169." Porquê esse buff é aplicado a seu max health real (100) e não seu max health aparente (130). ------------ Sobre sua segunda dúvida. Sim, dá para fazer isso. Pelo menos no TFS 1.0~1.1, basta você setar a condição dentro de onCastSpell. Exemplo: [..] function onCastSpell(cid, var) [...] setConditionParam(condition, CONDITION_PARAM_MANAGAIN, getPlayerLevel(cid)) setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, getPlayerLevel(cid)) [...] end [...] representa todo seu código, excluindo as duas linhas que foram movidas para onCastSpell.
-
exausted
É bem auto explicativo, essa callback vai definir o dano mínimo e máximo da spell.
-
exausted
timeBetweenExActions = 1000 Altera isso.
-
[Release] IP Changer - Ubuntu
Pra abrir o código fonte é só abrir PyIpChanger.py com um editor de texto.
-
monstros
spells.xml: <instant name="ghastly dragon curse" words="###1" aggressive="1" blockwalls="1" needtarget="1" needlearn="1" script="monster/ghastly dragon curse.lua"/> ghastly dragon.xml: <attack name="ghastly dragon curse" interval="2000" chance="5" range="5"/>
-
/attr não da nem um tipo de sinal!
No TFS 1.0, 1.1 não existe o comando /attr Para ir para uma certa posição no mapa é só usar o comando /pos x, y, z
-
(Resolvido)[Ajuda] CreatureScripts
Troca return false por true. No TFS 1.1 o seguinte código funcionou perfeitamente: function onPrepareDeath(cid, killer) local player = Player(cid) local town = player:getTown() local exit = town:getTemplePosition() if player then if player:addHealth(player:getMaxHealth()) then player:teleportTo(exit) end end return true end
- Python IPChanger
-
Buff por cima de outro buff
setConditionParam(condition, CONDITION_PARAM_SUBID, 1) Troca 1 para algum outro numero, de preferencia maior que 10.
-
bot 10.53 c++
Você está pegando o endereço na memória corretamente? Como você está fazendo? Você está tentando fazer algo como Cheat Engine? Teste pegar algo na memória que você tem certeza que está lá para ver a diferença e tentar consertar o algorítimo.
-
(Resolvido)ip change 10.41 para linux
https://github.com/gugahoa/ipchanger-otbr Você vai precisar de python 3.4 e python-ptrace, que pode ser instalado usando pip3. Se você usa Ubuntu então python3.4 e pip3 já vem instalado, pra instalar python-ptrace é só executar: $ sudo pip3 install python-ptrace Baixe o cliente para Linux, depois usando o terminal vá até a pasta do repositório e execute: $ python3.4 main.py Depois é só alterar o ip e dar "Change Ip". Esse ip-changer funciona para todas versões existentes de Tibia, apesar que ele não altera a porta para outra além de 7171.
- Magnus Challenger
-
Naruto White
Então, o Beeny tinha acesso aos arquivos deste servidor e resolveu liberar depois de falar com o Helton. Alguém me explica o que é que tem tanta gente falando besteira sobre uma contribuição? Detalhe que mesmo que ele não tenha programado tudo do começo ao fim, ele tinha os arquivos e permissão dos envolvidos.
-
erro ao compilar
Você precisa baixar a libeay32. Não sei como faz isso pelo windows. Recomendo procurar no google sobre essa lib, provável que seja fácil de se instalar.
-
erro ao compilar
Retire a parte do salt em IOLoginData::getInstance()->getPassword(id, hash, salt, character) Ficando só IOLoginData::getInstance()->getPassword(id, hash, character)
-
erro ao compilar
Qual a descrição do erro?
-
erro ao compilar
No final da linha std::clog << "> Using PLAIN Encryption" << Adicione um ;
-
Criador de magias InGame
É preciso por algumas restrições nisso. O que vai acontecer quando dois players diferentes fazem a mesma spell com nomes diferentes? E com nomes iguais e spells diferentes? Para uma versão beta seria bom começar apenas com uma estrutura fixa, por exemplo ser possível fazer apenas instant spell. A propósito, antes de criar restrição para quando player fizer spells iguais com nomes diferentes, nomes iguais spells diferentes ou spells totalmente iguais, temos que pensar em como vamos verificar tudo isso. Se formos fazer uma busca em todas as spells do servidor até encontrar uma igual ou não (apenas nome), precisamos de um método de busca eficiente que não pese no servidor para todas vez que o servidor precisar fazer uma busca. Existem algumas formas de ordenação que podemos adotar para fazer a busca ser muito rápida, mas para isso a inserção não vai ser tão rápida, então a melhor opção seria fazer a inserção de novas spells no arquivo de busca durante o server save, para não afetar o servidor enquanto players estiverem online. (Método de busca mencionado: Busca Binária ou Busca por Interpolação) Agora para fazer uma busca em todas as áreas de todas as spells criadas, eu não tenho ideia de um método de busca que seja muito rápido. Alguma ideia?
-
É possivel o triple bolt crossbow efetivamente atirar 3 bolts?
Dar /reload para todo novo spell não é aconselhado, esperar server save é melhor. E contanto que o sistema seja bem montado e bem testado, é difícil ser abusado. É verdade a questão da viabilidade desse sistema, se for feito de qualquer jeito vai abrir espaço para muito exploit, erros e etc. Mas como disse, não é nada impossível e se for bem montado é uma ideia muito interessante. Essa ideia inicial é um ótimo rascunho para discussões sobre o assunto e possível realização do sistema. Um tópico para discutir essa ideia seria bem legal.
-
É possivel o triple bolt crossbow efetivamente atirar 3 bolts?
Que dá, dá. Mas ele vai precisar ter uns conhecimentos mais avançados e vão existir vários casos que é necessário prevenir de acontecer, como dois players criarem exatamente o mesmo spell, ou apenas diferentes no nome. Ele vai precisar apenas de um arquivo template .lua que já é a magia feita, e depois para fazer a área da spell é só fazer como ele disse. Uma certa área quadrada que você sabe onde está, basta apenas ir de tile em tile verificando se tem uma caixa em cima e botando em uma tabela 0 caso não, 1 caso sim. Depois copia o template lua modificando apenas a variável de área para a que foi gerada e salva. Assim também você vai ter que registrar a tag no spells.xml, e a magia estaria em efeito no próximo server save. Um dos conhecimentos prévios necessários: http://www.lua.org/manual/5.1/manual.html#5.7
-
The Tales of Efferus
Creio que você está confundindo os usuários, eu sou programador. O Slec que é o mapper. ):