FJ
tfs 0.3

Magia de trap Bugada

Por Fjinst, 28 de jul. de 2016 em Scripts

magia
trap
bug
ajuda
11
1.8k
FjinstF
28 de julho de 2016 às 22:08

  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

 

 

zipter98Z
29 de julho de 2016 às 01:42

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.

FjinstF
29 de julho de 2016 às 10:43

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

zipter98Z
29 de julho de 2016 às 18:35

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.

FjinstF
29 de julho de 2016 às 19:05

@zipter98 Você pode me ajudar a fazer isso? se possivel é claro.

PoccnnP
30 de julho de 2016 às 09:16

exaustion.get

exaustion.set

 

FjinstF
30 de julho de 2016 às 10:57
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.

PoccnnP
30 de julho de 2016 às 13:13

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.

FjinstF
30 de julho de 2016 às 15:20

Mas como posso fazer essa magia funcionar dessa maneira?, no caso que se eu atingir uma pessoa essa pessoa tomar exhaust

PoccnnP
30 de julho de 2016 às 15:26

Use como parametro o target.

exaustion.set(target,value)

exaustion.get(target)

FjinstF
30 de julho de 2016 às 20:43

Teria como você fazer isso para mim? por gentileza.