Ir para conteúdo

gabrielsaintz

Membro
  • Registro em

  • Última visita

Tudo que gabrielsaintz postou

  1. Consegui adicionar galera. De qualquer forma obrigado! Para adicionar quiver ao tfs 1.4.2 sem mudar para versão 12.x, você tem que fazer essas alterações na source: https://github.com/otland/forgottenserver/pull/4105/files Exceto as alterações dos arquivos networkmessage.cpp/player.h E Também essas linhas não devem ser adicionadas: weapon.cpp player->sendQuiverUpdate(); player.cpp // update quiver if (actorPlayer) { actorPlayer->sendQuiverUpdate(g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)); } Compilar: caso dê erro no <boost/filesystem.hpp>. Tente fazer isso: https://github.com/otland/forgottenserver/pull/3990/files créditos: Ranieri Althoff:https://github.com/otland/forgottenserver/pull/3990 Evil Punker: https://github.com/otland/forgottenserver/pull/4105
  2. Consegui arrumar uma solução!! Depois de muito tempo fazendo testes cheguei a esse resultado: local combat = Combat() combat:setArea(createCombatArea(AREA_CIRCLE5X5)) function getRandomPositions(cid) local player = Player(cid) local playerPos = player:getPosition() local areaCircle5x5 = {} -- cria uma nova AREA_CIRCLE5X5 com base na posição do meu personagem for i = -5, 5 do for j = -5, 5 do local dist = math.sqrt(i^2 + j^2) if dist <= 5 then table.insert(areaCircle5x5, {x=playerPos.x+i, y=playerPos.y+j, z=playerPos.z}) end end end local randomPosition = {} for i = 1, 1 do local index = math.random(1, #areaCircle5x5) table.insert(randomPosition, areaCircle5x5[index]) end return randomPosition end function spellCallback(cid, position, count, maxCount) if Creature(cid) and count < maxCount then if count == 0 and math.random(0, 1) == 1 or math.random(0, 15) == 1 then position:sendMagicEffect(CONST_ME_MORTAREA) doAreaCombat(cid, COMBAT_DEATHDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT) end count = count + 1 local area = getRandomPositions(cid) -- pega uma nova posição aleatoria com base na posição do meu personagem local positionAreaCircle = {x= area[1].x, y= area[1].y, z= area[1].z} local position1 = Position(positionAreaCircle) if count > 1 and count < 81 or count > 81 and count < 145 then addEvent(spellCallback,50, cid, position1, count, maxCount) else addEvent(spellCallback,math.random(1000, 2000) , cid, position1, count, maxCount) end if count > 141 then addEvent(spellCallback,math.random(600, 3000) , cid, position1, count, maxCount) end end end function onTargetTile(creature, position) local maxCount = 145 -- quantidade de execuções spellCallback(creature:getId(), position, 0, maxCount) end combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(creature, variant, isHotkey) return combat:execute(creature, variant) end Dentro do game: @FeeTads de qualquer forma obrigado pela ajuda!
  3. Eu tentei mas quando compilei, não tava abrindo as backpacks. Acho que porque a versão do codigo que peguei como referencia já estava na versão 12.x... Vou tentar dnv depois... valeu gente!😁
  4. Eu tentei dessa forma também, porém não funcionou... Depois de um tempo printando o que vem de informação em cada parte, eu entendi o que é passado no position da combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile"). Explicação: function spellCallback(cid, position, count) if Creature(cid) then --[[ TEXTO 3 Sendo executada 4 vezes ao mesmo tempo e passando uma posição diferente a cada execução. Ela gera aquela primeira explosão do exemplo gif. Perceba que no gif a primeira explosão sai de forma aleatoria e não na AREA_CIRCLE5X5 como uma AOE(exevo gran mas frigo). Explicação: TEXTO 4 --]] if count > 0 or math.random(0, 1) == 1 then --[[ TEXTO 4 Esse if torna a primeira explosão aleatoria pois ele só executa a doAreaCombat se o math.random(0, 1) for igual a 1, assim fazendo com q, mesmo ela sendo executada varias vezes ao mesmo tempo, ele só dispara o dano e o efeito quando ela entrar aqui, nesse if. Caso eu mude esse if para: if count >= 0 then Ai sim ela vai excutar na AREA_CIRCLE5X5 completa... EXPLICAÇÃO BASEADA NO GIF. --]] position:sendMagicEffect(CONST_ME_MORTAREA) doAreaCombat(cid, COMBAT_DEATHDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT) end if count < 3 then -- QUANTIDADE DE VEZES count = count + 1 --[[ TEXTO 5 Aqui é gerado os hits aletorios depois da primeira execução. me baseando na area que eu passei com 4 posições de hit, a partir o momento em que você usar a magia esse addEvent será executado 4 vezes ao mesmo tempo e passando uma posição diferente a cada execução. Porém como da pra ver a baixo no delay usamos tempo aleatorio que é dado pelo math.random(1000, 4000). Isso gera um loop de hits aleatorios dentro da area setada, até que o count chegue ao valor desejado. No caso desse código ele vai ser executado até que o count seja 3, isso faz com que a função spellCallback seja executada 20 vezes passando as mesmas posições dentro da area passada no inicio, porém o que torna aleatorio onde vai o efeito e dano é justamente o tempo em que ela vai ser executada. --]] addEvent(spellCallback, math.random(1000, 4000), cid, position, count) end end end function onTargetTile(creature, position) --[[ TEXTO 2 Aqui recebemos o creature e position da combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile"). creature = seu personagem position = { {0,1,0}, execução 1 {1,3,0}, execução 2 e 3 {0,1,0} execução 4 } Sendo assim ele vai executar a função spellCallback 4 vezes, e cada vez que for executada ela vai passar uma posição diferente, dentro da area que eu passei. --]] spellCallback(creature:getId(), position, 0) end local combat = Combat() combat:setArea(createCombatArea(AREA_CIRCLE5X5)) combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") --[[ TEXTO 1 A CALLBACK_PARAM_TARGETTILE vai executar a onTargetTile varias vezes, isso depende do tamanho da área que você passou na combat:setArea(createCombatArea(AREA_CIRCLE5X5)). Exemplo: Se ao invés de AREA_CIRCLE5X5 eu passar uma área menor como: local area { {0,1,0}, <- 1 = posição de dano #1 {1,3,0}, <- 1,3 = posição de dano #2 e #3 {0,1,0} <- 1 = posição de dano #4 } combat:setArea(createCombatArea(area)) Ela vai ser executada 4 vezes ao mesmo tempo porque na area que eu passei existem 4 posições de dano. A cada vez que ela executar ela vai passar as areas, uma de cada vez, sendo #1, #2, #3 e por ultimo #4. --]] function onCastSpell(creature, variant, isHotkey) return combat:execute(creature, variant) end Então não adianta eu pegar o position assim cid:getPosition() e nem assim player:getPosition() porque a position é a posição onde vai hit se eu usar a posição do meu personagem o hit vai sempre nele mesmo... Espero que consiga entender, dei meu maximo na explicação...😅 Para resolver o problema, eu preciso arrumar uma forma de pegar uma posição aleatoria com base na posição do meu personagem toda vez antes de executar a spellCallback.
  5. eai galera! Quero adicionar o sistema de quivers ao meu servidor, estou usando tfs 1.4.2 e quero manter compativel com a versão 1098. Tentei me basear uma pull request, até deu certo mas mudou a versão do meu jogo para 12.87, e quero que continue 1098.
  6. Bom... a magia ficou me seguindo, porém ela deixou de ser em area e ficou dando hits no meu sqm function spellCallback(cid, position, count) if Creature(cid) then local player = Player(cid) if count > 0 or math.random(0, 1) == 1 then position:sendMagicEffect(CONST_ME_HITBYFIRE) doAreaCombat(cid, COMBAT_FIREDAMAGE, player:getPosition(), 0, -100, -100, CONST_ME_EXPLOSIONHIT) end if count < 5 then count = count + 1 addEvent(spellCallback, math.random(1000, 4000), cid, player:getPosition(), count) end end end function onTargetTile(creature, position) spellCallback(creature:getId(), creature:getPosition() , 0) end local combat = Combat() combat:setArea(createCombatArea(AREA_CIRCLE5X5)) combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(creature, variant, isHotkey) return combat:execute(creature, variant) end no game:
  7. Eai galera! Tenho uma Spell porém queria que ela seguisse meu personagem, alguém pode me dizer uma forma de fazer isso? A magia ta assim: function spellCallback(cid, position, count) if Creature(cid) then if count > 0 or math.random(0, 1) == 1 then position:sendMagicEffect(CONST_ME_HITBYFIRE) doAreaCombat(cid, COMBAT_FIREDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT) end if count < 5 then count = count + 1 addEvent(spellCallback, math.random(1000, 4000), cid, position, count) end end end function onTargetTile(creature, position) spellCallback(creature:getId(), position, 0) end local combat = Combat() combat:setArea(createCombatArea(AREA_CIRCLE5X5)) combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(creature, variant, isHotkey) return combat:execute(creature, variant) end Dentro do game: Quando ando para a esquerda ela continua na posição de onde eu fiz o cast dela. Até entendo o porque disso, ela só esta sendo executada 1 vez, com isso ela só registra a posição do meu personagem na hora que é castada. Meu objetivo é manter essa aleatoriedade nos hits porém quero que ela acompanhe meu personagem.
  8. Qual servidor ou website você utiliza como base? theforgottenserver 1.4.2 Qual o motivo deste tópico? Preciso de ajuda para criar uma nova vocação, tenho algumas dúvidas. Tentei criar para a vocação treinar skill club mais rápido, porém não consegui. Está surgindo algum erro? Se sim coloque-o aqui. Não consigo fazer a nova vocação treinar skill club mais rápido Exemplo: <vocation id="9" clientid="9" name="nova vocação" description="a nova vocação" gaincap="25" gainhp="15" gainmana="5" gainhpticks="2" gainhpamount="10" gainmanaticks="4" gainmanaamount="10" manamultiplier="3.0" attackspeed="2000" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="9"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.1" /> <skill id="1" multiplier="1.1" /> <skill id="2" multiplier="1.1" /> <skill id="3" multiplier="1.1" /> <skill id="4" multiplier="1.4" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> Seria uma vocação parecida com o knight porém quero que ela consiga treinar apenas club mais rápido. Porém não consigo achar nos arquivos do servidor onde que eu defino qual skill a vocação vai upar mais rápido. Já tentei mexer no xml, mas nada acontece no game, continua tudo a mesma coisa, o que me leva a conclusão de que o treino é com base na vocação e não no xml. Alguém pode me ajudar???

Informação Importante

Confirmação de Termo