Ir para conteúdo
  • 0

Magia de trap Bugada


Fjinst

Pergunta

  Olá a todos, eu possuo um script de trap no qual se utilizar a pessoa fica presa, só que esse script possui um erro, queria saber se vocês podem me ajudar a solicionar, o erro consiste no qual se uma pessoa usar uma trap dentro de outra trap, elas vão se estacando, fazendo assim, duas pessoas conseguirem trapar uma pessoa infinitamente, gostaria de pedir a ajuda no qual colocasse algo para impedir que a pessoa consiga usar duas traps no mesmo sqm, segue uma foto mostrando o error

 

lX4qGEG.png

 

Vou postar o script abaixo, qualquer dúvida pode deixar mensagem no tópico, que auxilio, o script não é de minha autoria, apenas peguei na internet e adaptei  do modo que eu sei.

obs: ambas as magias são o mesmo script, só muda o id

 

local config = {	gatesTime = 5, -- tempo em segundos	exhaustStorage = 41000,	exhaustTime = 5,	createGates = {2730, 2730, 2730, 2730, 2730,2730, 2730, 2730, 2730, 2730,2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730} -- ID dos portoes na ordem certa}local combat = createCombatObject()setCombatArea(combat, createCombatArea({{0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0},{0, 3, 3, 3, 0, 0},{0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0},}))local permittedPos = {}function onTargetTile(cid, pos)	table.insert(permittedPos[cid], pos)endsetCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")local function doSpell(cid, var)	if(not isCreature(cid)) then		return true	end	doCombat(cid, combat, var)	for n, pos in ipairs(permittedPos[cid]) do		doSendMagicEffect(pos, 130)		doCreateItem(config.createGates[n], 1, pos)		addEvent(function()			if(getTileItemById(pos, config.createGates[n]).uid > 0) then				doRemoveItem(getTileItemById(pos, config.createGates[n]).uid, 1)			end		end, config.gatesTime*1000)	end	return trueendfunction onCastSpell(cid, var)	permittedPos[cid] = {}	if(isPlayer(cid) and exhaustion.check(cid, config.exhaustStorage)) then		doPlayerSendCancel(cid, "Aguarde "..exhaustion.get(cid, config.exhaustStorage).." segundo"..(exhaustion.get(cid, config.exhaustStorage) > 1 and "s" or "").." para usar novamente.")		doSendMagicEffect(getThingPos(cid), 2)		return false	end	return doSpell(cid, var)end

 

 

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 1

Em algum arquivo de data/lib:

TRAP_IDS = {itemid, itemid, ...}                --IDs dos items que exercem a função de trap.

Nos códigos das traps, troque:

for n, pos in ipairs(permittedPos[cid]) do    doSendMagicEffect(pos, 130)    doCreateItem(config.createGates[n], 1, pos)    addEvent(function()        if(getTileItemById(pos, config.createGates[n]).uid > 0) then            doRemoveItem(getTileItemById(pos, config.createGates[n]).uid, 1)        end    end, config.gatesTime*1000)end

por:

for n, pos in ipairs(permittedPos[cid]) do    local break_scope    for i = 1, #TRAP_IDS do        if getTileItemById(pos, TRAP_IDS[i]).uid > 0 then            break_scope = true            break        end    end        if not break_scope then        doSendMagicEffect(pos, 130)        doCreateItem(config.createGates[n], 1, pos)        addEvent(function()            if(getTileItemById(pos, config.createGates[n]).uid > 0) then                doRemoveItem(getTileItemById(pos, config.createGates[n]).uid, 1)            end        end, config.gatesTime*1000)    endend

Deve haver alguma maneira mais elegante de evitar esse problema de acumulação de traps, mas meu cérebro trabalha mal de madrugada.

Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou perfeitamente @zipter98,

Você pode me tirar uma dúvida em questão desse mesmo script?, é possivel colocar uma espécie de silence para que o usuario atingido não consiga utilizar magias?, uma espécie de muted por segundos ou algo do tipo?, agradeço pela ajuda

Link para o comentário
Compartilhar em outros sites

  • 0

Faz tempo que não programo em Tibia, então não me recordo bem se há alguma condition de silence. Entretanto, se não me engano, é necessário fazer uma condição em cada código de spell para bloquear o uso delas.

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Poccnn disse:

exaustion.get

exaustion.set

 

Como não entendo muito de script, teria como você me ajudar? parei de mexer na versão 8.10, então a partir dai tudo é novo, estou tentando me adaptar, as funções mudaram, muita coisa mudou ahuiahuai, mas com o tempo eu vou me adaptando.

Link para o comentário
Compartilhar em outros sites

  • 0

exaustion.get(cid), pega o valor (tempo) de exaustão (cansaço) do personagem.

exaustion.set(cid,value), insere no personagem um tempo de exaustão (cansaço).

 

Espero que tenha entendido.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...