Tudo que gabriel28 postou
-
Wand Vip trocadora de Elemento.
@Pifafa Muda aqui: min, max = 575, 695 Troca os valores por uma fórmula, ficando assim: min, max = (level * x + maglevel * y), (level * w + maglevel * z) Você decide quais os valores ou se vai somar, subtrair, etc...
-
(Resolvido)Ajuda com criação de item que some após uso e aumenta a XP por tempo determinado.
@jakons https://tibiaking.com/forums/topic/54736-double-exp-potion-completa/?tab=comments#comment-321361
-
(Resolvido)Monstros nao atacar summon
Alterar a source pra fazer os monstros poderem executar o onTarget e fazer um script que retorne falso caso o target seja um summon.
-
Corrigindo bugs relacionados a containers
@Celulose Acrescentarei. Mas essa mudança já é o suficiente pra desencorajar quem queira prejudicar o server, fora que não mudará em nada as funcionalidades dos NPCs de venda, qualquer outro item que não esteja na tabela, será vendido normalmente.
-
Corrigindo bugs relacionados a containers
Desculpem pelo título chamativo e/ou pela área está incorreta, mas enfim, lhes trago a solução definitiva pros problemas de bug relacionados a conteiners, como ficar comprando bp's infinitamente até crashar o server, stackar várias bps dentro de bps, jogar dentro da casa e usar o comando !leavehouse (ou algo do tipo) o que causa lag (talvez crash?) por conta da database ter que processar tantos itens saindo da house pro dp ou qualquer outra merda desse tipo.Vá em ...\data\npc\lib\npcsystem procure por: -- Handles onBuy events. If you wish to handle this yourself, use the CALLBACK_ONBUY callback. Substitua toda a função por: Explicando: Se o player tentar comprar mais de X itens de id Y, o npc não irá vender. Quando o player comprar uma quantidade menor que X, ganhará um cooldown de Z segundos até poder comprar novamente. Tudo isso configurável na tabela.Pra te prejudicar com esse tipo de bug agora, só se o "player" tiver com uma puta vontade de te foder.Testado e totalmente funcional em TFS 0.4 rev 3884, mas qualquer coisa é só adaptar pra outras versões que tenho certeza que funciona.EDIT: Não sei se já tem script similar por ai, mas esse ai é de minha autoria. Pra quem usa OTX, tem esse fix na source: https://github.com/mattyx14/otxserver/tree/otxserv2/path_8_6x Créditos ao Celulose que mandou.
-
Problema com golpes (spells)
@Theoo Posta o script do Confusion que está nesse caminho: data/spells/scripts/Confusion.lua Pelo que vi, todos os erros estão sendo no mesmo lugar, o valor mínimo do dano não está sendo encontrado.
-
Erro ao por exaust no script de magia de heal
Problema resolvido. Era um monstro usando a spell, o que acabou ocasionando o erro.
-
Deixar o Guerreiro com apenas Skill Melle, tirar os Skilss Sword Axe e Club?
@xxgrylloxx Cara, manjo nada de OtClient, melhor procurar algum tutorial de como modificar as skills.
-
Deixar o Guerreiro com apenas Skill Melle, tirar os Skilss Sword Axe e Club?
Faz como o Fir3lement disse, muito mais prático e terá o mesmo efeito. Só vai precisar mudar todos os axes e clubes no items.xml pra sword e mudar o nome das skills no cliente. Sword fica sendo a melhor skill pra se tornar a sua Melee skill, já que possuem a mesma quantidade de letras, deixando menos complicado na hora de mudar o nome, caso você use Old Client.
-
[Error - CreatureScript Interface]
@GuiKatSevero Na pasta de scripts do creatureevents.
-
Mexendo com Sources e etc..
@xxgrylloxx Link não. Mas se você for pra aba de downloads de servidor global, terá várias opções lá.
-
Mexendo com Sources e etc..
@xxgrylloxx A burst arrow só tem um arquivo em weapons porque ela usa efeito em área, dai tem que fazer um arquivo lá. Mas pra uma magia que você queira pegar o valor do ataque da arma também, é só fazer como eu disse ali em cima quando mostrei as fórmulas. Criar um arquivo em weapons, só se você quiser que essa arma de Kina tenha um efeito quando atacar um player. Eu gosto muito do TFS 0.4, o Global que mexo de vez em quando é nessa versão e tem script de enchant. Mas hoje em dia, a maioria dos Globais, se não todos, são na versão 1.0 pra cima, devido a maior possibilidade de scripts entre outras coisas. Por isso deixei o meu de lado, por já ter mexido muito, nas source inclusive, mas estar numa versão bem antiga e não atualizo ele por não manjar de scripts nessas novas versões do TFS e ter que adaptar os códigos da source, que modifiquei, pra nova versão. Por isso acabei indo pros derivados onde a 0.4 está de bom tamanho. Se você tiver começando um projeto agora, recomendo ir pra um TFS 1.0 pra cima.
-
Mexendo com Sources e etc..
@xxgrylloxx É noos arquivos das spells. De cada spell que você quer que use essa formula, você terá que acrescentá-la dentro do .lua da spell. Exemplo de como fica na spell (Exevo mas san): Essa fórmula (setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.25, -30, -1.7, 0) ) que vem nas spells, você pode simplesmente apagar ou deixar em forma de comentário.
-
Mexendo com Sources e etc..
@xxgrylloxx Se é só isso que você quer alterar, basta usar essa formula: function onGetFormulaValues(cid, level, skill, attack, factor) min = -(level * 0.6 + skill * 1) * 1.4 max = -(level * 0.7 + skill * 1.2) * 1.6 return min, max end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE,"onGetFormulaValues") Essa é pra Kina ou pra magia de Pally que seja ataque físico, já que essa formula leva em consideração o level e a skill do personagem. Você também pode acrescentar o ataque da arma na fórmula, ficando assim: min = -(level * 0.6 + skill * 1 + attack * 1) * 1.4, por exemplo. Ou pra Mages, magias que usam o ML,: function onGetFormulaValues(cid, level, maglevel) min = -(level * 1.2 + maglevel * 1.5) * 1.2 max = -(level * 1.5 + maglevel * 2) * 1.6 return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") E claro que você pode alterar os valores ao seu gosto. E desse jeito da pra você saber o dano sem nem precisar ir testar em game, só usar uma calculadora pra fazer a multiplicação, que nem eu fazia quando mexia no meu Global. Só de exemplo, essa formula que usa level e ml, é a que uso na magia Exevo mas san. Considerando um Pally de level 250 ml 25, vai tirar no mínimo 405 e no máximo 680.
-
[CREATURESCRIPT] Como eu tiro esse error?
@poko360 Ta registrado no login.lua também? Vê ai: Se ainda tiver erro no script de cima, testa esse: Nova tag: <event type="death" name="pvpenf" event="script" value="pvpenf.lua"/> No login.lua: registerCreatureEvent(cid, "pvpenf")
-
Mexendo com Sources e etc..
@xxgrylloxx Respondendo cada pergunta, respectivamente: 1: Você terá que saber que tipo de servidor queres. Um de Tibia Global? Tibia Baiak? NarutoTibia? DragonBallTibia? PokemonTibia? Algum outro? Depois que você souber o que quer, vai atrás e baixa um dos tantos servers que tem por ai. Literalmente virá o servidor completo pra você mexer, nos monstros, magias, ações, etc... Baixando um server, ele já vem bonitinho (Com o "server" já compilado), só executar o executável e pronto, seu server estará rodando, dai bastará você ir aprender a como deixar online pra outras pessoas. 2: Esses arquivos a qual você se refere, são os responsáveis pelo executável do servidor, o que vai lê todos os arquivos da pasta do server que você baixou e por pra funcionar. Vendo que você ainda é muito iniciante nesse mundo, recomendo primeiro a aprender a mexer nos arquivos da pasta do servidor pra depois ir aprender a sobre modificar os arquivos do executável do server, compilação e etc.. .
-
[CREATURESCRIPT] Como eu tiro esse error?
function onKill(cid, target, lastHit) local exp1 = 1 local exp11 = 2 local exp2 = 3 local exp22 = 6 local exp3 = 9 local exp33 = 18 local exp4 = 27 local exp44 = 54 local exp5 = 81 local exp55 = 162 local exp6 = 243 local target = getCreatureTarget(cid) local lvl = getPlayerLevel(target) if isPlayer(cid) and isPlayer(target) then if getPlayerIp(cid) == getPlayerIp(target) then doCreatureSay(cid, "Voce nao recebe EXP por matar MC", TALKTYPE_ORANGE_1) return true end if getPlayerLevel(target) >= 1 and getPlayerLevel(target) <= 4999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "10000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp1 * lvl) elseif getPlayerLevel(target) >= 5000 and getPlayerLevel(target) <= 9999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "20000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp11 * lvl) elseif getPlayerLevel(target) >= 10000 and getPlayerLevel(target) <= 14999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "30000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp2 * lvl) elseif getPlayerLevel(target) >= 15000 and getPlayerLevel(target) <= 19999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "40000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp22 * lvl) elseif getPlayerLevel(target) >= 20000 and getPlayerLevel(target) <= 24999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "50000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp3 * lvl) elseif getPlayerLevel(target) >= 25000 and getPlayerLevel(target) <= 29999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "60000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp33 * lvl) elseif getPlayerLevel(target) >= 30000 and getPlayerLevel(target) <= 34999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "70000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp4 * lvl) elseif getPlayerLevel(target) >= 35000 and getPlayerLevel(target) <= 39999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "80000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp44 * lvl) elseif getPlayerLevel(target) >= 40000 and getPlayerLevel(target) <= 44999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "90000000", 215) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp5 * lvl) elseif getPlayerLevel(target) >= 45000 and getPlayerLevel(target) <= 49999 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "100000000", 210) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp55 * lvl) elseif getPlayerLevel(target) >= 50000 and getPlayerLevel(target) <= 90000 and getPlayerLevel(cid) >= 1 then doSendAnimatedText(getPlayerPosition(cid), "110000000", 210) doPlayerAddExperience(cid, getPlayerLevel(cid) * exp6 * lvl) end end return true end
-
Como executar vários addEvent sem erro?
Como diz o título, minha dúvida é em como executar mais de um addEvent sem retornar erro no console. Uso script de spells com mais de um attack, e pro efeito sair certinho em cima do target eu pego a pos dele, e, como é de se esperar, se o target morrer antes da spell terminar, retorna erro no console. Script de uma das spells: Agradeço desde já.
-
[SPELLS] COOLDOWN DE SPELLS
Se o cooldown ficar em 0, na primeira vez que atacar, irá sair todas as spells de uma vez. O certo é pelo menos deixar 500 no exaust.
-
TFS 0.4 rev 3884 em Linux
É por conta disso mesmo. Eu podia pegar uma 3777, mas já fiz tanta alteração nela, com códigos de vários outros fóruns, que não lembro mais quais foram as alterações, exatamente. Vou testar rodar ela em Linux, se der ruim, vai ter que ser numa vps windows mesmo.
-
[SPELLS] COOLDOWN DE SPELLS
Provavelmente o exaust na tag da spell no xml está em 0, fazendo com que não haja exauste entra elas, dai saem juntas.
-
TFS 0.4 rev 3884 em Linux
Olá, gostaria de saber se tem como rodar o TFS 0.4 rev 3884 em Linux sem problemas. Grato desde já.
-
[Pedido] Colocar numeração em spell de cura
@adolfbig Isso é em config.lua que faz. Você procura por showHealingDamage e muda o false pra true.
-
(Resolvido)Adicionar posição do efeito
@leozincorsair local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_HITCOLOR, COLOR_PINK) setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, 44) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -35.0, 0, -35.8, 0) local function onCastSpell1(cid, var) local target = getCreatureTarget(cid) local monsterpos = getCreaturePosition(target) local position = {x=monsterpos.x+2, y=monsterpos.y+2, z=monsterpos.z} -- muda os valores aqui (valor positivo no 'x', vai pra direita e positivo no 'y' vai pra baixo doSendMagicEffect(position, 29) doCombat(cid, combat1, var) end function onCastSpell(cid, var) for k = 1, 8 do addEvent(function() if isCreature(cid) then addEvent(onCastSpell1, 0, cid, var) end end, 1 + ((k-1) * 275)) end return true end
-
Como configurar a chance de dar hit critico
@Beloria Qual a versão do TFS?