Jump to content

(Resolvido)Kickar players nos Trainers


Go to solution Solved by jefersonzc,

Recommended Posts

TFS 1.3 - Mark Samman

 

Olá a todos,

Estou com esse problema e não consigo resolver: Quando o player dá exit nos trainers ele não leva kick

Já fiz várias pesquisas aqui e em outros fóruns, mas nenhuma das possibilidades apresentadas me serviu.

 

Tentei esse script:

Mas não funcionou porque aparentemente o meu TFS não possui a função getCreatureNoMove(cid).

 

Tentei também através do config.lua, mas ele não tem nenhuma dessas funções:

  • idleWarningTime
  • idleKickTime
  • stopAttackingAtExit

Tentei adicioná-las mas elas não funcionam.

 

Bom, tenho algumas ideias para resolver o problema, mas não sei por onde começar.

1- A melhor opção seria se eu de fato conseguisse fazer o char parar de atacar quando desse exit. Mas já que não consigo configurar isso pelo confi.lua, como poderia fazer?

2- Posso criar uma rotina que checa se o player está "dançando", mas como verifico se ele mudou de direção? Existe alguma função que verifica o movimento do char no mesmo sqm?

3-  Aceito ideias que não sejam complexas demais (rsrs).

Edited by jefersonzc (see edit history)
Link to post
Share on other sites

  • Solution

Bom, resolvi desenvolver eu mesmo uma solução, me baseando nos scripts que encontrei pelo caminho :) Segue abaixo.

 

1. Em data/creaturescripts/scripts/login.lua, acrescente:

player:registerEvent("Idle")

2. Em data/creaturescripts/creaturescripts.xml, acrescente:

<event type="think" name="Idle" script="idle.lua"/>

3. Na pasta data/creaturescripts/scripts, crie o arquivo idle.lua, com o seguinte código:

local room = {
	x1 = 1542,
	x2 = 1608,
	y1 = 1528,
	y2 = 1556,
	z1 = 8,
	z2 = 8
}

function onThink(player, interval)
	local target = player:getTarget()
	
	if (player:getIp() > 0) then
		return true
	else
		local pos = player:getPosition()
		if ((pos.x >= room.x1 and pos.x <= room.x2) and (pos.y >= room.y1 and pos.y <= room.y2) and (pos.z >= room.z1 and pos.z <= room.z2)) then
			doRemoveCreature(player)
		end
	end
	return true
end

 

Depois é só configurar o script com as coordenadas da sua room (onde ficam os trainers). Pronto, qualquer player que der quit ali dentro, esteja ele atacando os trainers ou não, vai levar kick alguns segundos depois.

 

Podem fechar como resolvido ;) 

Link to post
Share on other sites

você poderia resolver também da seguinte forma, se você não atacar o mob ele desloga, então é só parar o ataque ao da exit.

troca sua função onTargetCombat

function Creature:onTargetCombat(target)
    if not self then
        return true
    end
    if(self:getPlayer() and self:getPlayer():getIp() == 0) then
        self:setTarget(nil)
    end

Eu estava com o mesmo problema e um dançarino brabo me ajudou! @Lyu

Link to post
Share on other sites

10 horas atrás, Yinz disse:

você poderia resolver também da seguinte forma, se você não atacar o mob ele desloga, então é só parar o ataque ao da exit.

troca sua função onTargetCombat


function Creature:onTargetCombat(target)
    if not self then
        return true
    end
    if(self:getPlayer() and self:getPlayer():getIp() == 0) then
        self:setTarget(nil)
    end

Eu estava com o mesmo problema e um dançarino brabo me ajudou! @Lyu

 

Opa, bom saber dessa segunda saída. Poderá ser útil ainda. Obrigado. 

Link to post
Share on other sites

  • 1 year later...
Em 30/12/2018 em 12:39, Yinz disse:

você poderia resolver também da seguinte forma, se você não atacar o mob ele desloga, então é só parar o ataque ao da exit.

troca sua função onTargetCombat


function Creature:onTargetCombat(target)
    if not self then
        return true
    end
    if(self:getPlayer() and self:getPlayer():getIp() == 0) then
        self:setTarget(nil)
    end

Eu estava com o mesmo problema e um dançarino brabo me ajudou! @Lyu

 

 

Poderia me mandar uma pra tfs 1.3?

A minha está na data/lib/core/combat

está correta?

Ela está assim:

 

function Combat:getPositions(creature, variant)
    local positions = {}
    function onTargetTile(creature, position)
        positions[#positions + 1] = position
    end

    self:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile")
    self:execute(creature, variant)
    return positions
end

function Combat:getTargets(creature, variant)
    local targets = {}
    function onTargetCreature(creature, target)
        targets[#targets + 1] = target
    end

    self:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
    self:execute(creature, variant)
    return targets
end
 

Link to post
Share on other sites

  • 5 months later...
Em 30/12/2018 em 11:10, jefersonzc disse:

Bom, resolvi desenvolver eu mesmo uma solução, me baseando nos scripts que encontrei pelo caminho :) Segue abaixo.

 

1. Em data/creaturescripts/scripts/login.lua, acrescente:



player:registerEvent("Idle")

2. Em data/creaturescripts/creaturescripts.xml, acrescente:



<event type="think" name="Idle" script="idle.lua"/>

3. Na pasta data/creaturescripts/scripts, crie o arquivo idle.lua, com o seguinte código:



local room = {
	x1 = 1542,
	x2 = 1608,
	y1 = 1528,
	y2 = 1556,
	z1 = 8,
	z2 = 8
}

function onThink(player, interval)
	local target = player:getTarget()
	
	if (player:getIp() > 0) then
		return true
	else
		local pos = player:getPosition()
		if ((pos.x >= room.x1 and pos.x <= room.x2) and (pos.y >= room.y1 and pos.y <= room.y2) and (pos.z >= room.z1 and pos.z <= room.z2)) then
			doRemoveCreature(player)
		end
	end
	return true
end

 

Depois é só configurar o script com as coordenadas da sua room (onde ficam os trainers). Pronto, qualquer player que der quit ali dentro, esteja ele atacando os trainers ou não, vai levar kick alguns segundos depois.

 

Podem fechar como resolvido ;) 

Vc nao explicou direito como coloca os ids dos tiles?  (onde ficam os trainers). ?? onde coloca?

Poxa vida estou com esse problemas a meses e o pessoal aqui do Tibiaking nao ta nem ai pra essa pergunta parece que todos se esconde !!!!

Como resolver esse problemaaa????


Esssa duvida ainda nao foi resolvida como muitas desse TK de merda!

 

Edited by Heitorzera13 (see edit history)
Link to post
Share on other sites

18 horas atrás, Heitorzera13 disse:

Vc nao explicou direito como coloca os ids dos tiles?  (onde ficam os trainers). ?? onde coloca?

Poxa vida estou com esse problemas a meses e o pessoal aqui do Tibiaking nao ta nem ai pra essa pergunta parece que todos se esconde !!!!

Como resolver esse problemaaa????


Esssa duvida ainda nao foi resolvida como muitas desse TK de merda!

 

 

Opa! Então meu amigo, vc não precisa configurar ID de tile nenhum. Essa função é executada em tempo real, o que ela faz é ficar checando o player para ver se o IP de conexão dele é igual a 0. Se o IP for 0, significa que o player deu quit ou que a internet dele caiu, daí o script analisa a posição do player dentro do mapa e se essa posição estiver dentro da sala de treinamento significa que é preciso expulsar o player do jogo, forçando o logout. Agora, se ele estiver em qualquer outro canto do mapa, então ele não será expulso.

 

As coordenadas da sala de treinamento são definidas aqui, e vc precisa alterá-las de acordo com a sala de treinamento do seu servidor.

 

local room = {
	x1 = 1542,
	x2 = 1608,
	y1 = 1528,
	y2 = 1556,
	z1 = 8,
	z2 = 8
}

 

Link to post
Share on other sites

33 minutos atrás, Heitorzera13 disse:

Como são definidas essas cordenadas?
 




local room = {
	x1 = 1542,
	x2 = 1608,
	y1 = 1528,
	y2 = 1556,
	z1 = 8,
	z2 = 8
}

 

Essas coordenadas são a posição onde começa e termina a sua sala. O ideal é que vc abra o seu Map Editor e imagine um retângulo grande o suficiente para envolver toda a sua área de treino (já que nem sempre elas são retangulares, como no meu caso). O X1 e o Y1 são as coordenadas do canto superior esquerdo desse retângulo, e o X2 e o Y2 são as coordenadas do canto inferior direito.

 

Screenshot_2.thumb.png.7e2266144a096169f6b4968b8019359d.png

 

Já o Z1 e o Z2 são referentes aos andares. Como a minha sala só tem um andar, que fica no floor 8, eu coloco o valor 8 nos dois. Mas vamos supor que a minha área de treino fosse um prédio composto pelo térreo, dois andares pra cima e um no subsolo, nesse caso eu usaria Z1 = 6 e Z2 = 9.

 

Espero que tenha ficado mais claro agora ;)

 

Adendo: Se você quiser configurar mais de um "local de quick", que se encontram em lugares distantes um do outro no mapa, terá que configurar uma segunda room (ex.: local room2) e acrescentar um segundo IF relacionado a essa outra sala.

elsif ((pos.x >= room2.x1 and pos.x <= room2.x2) and (pos.y >= room2.y1 and pos.y <= room2.y2) and (pos.z >= room2.z1 and pos.z <= room2.z2)) then
			doRemoveCreature(player)
Edited by jefersonzc (see edit history)
Link to post
Share on other sites

RESOLVIDO , excelente explicação muito obrigado pela paciencia ^^
 

Obrigadoooooooooooo amigo 😄

ganhou meu respeito. Rep++++

4 horas atrás, jefersonzc disse:

 

Essas coordenadas são a posição onde começa e termina a sua sala. O ideal é que vc abra o seu Map Editor e imagine um retângulo grande o suficiente para envolver toda a sua área de treino (já que nem sempre elas são retangulares, como no meu caso). O X1 e o Y1 são as coordenadas do canto superior esquerdo desse retângulo, e o X2 e o Y2 são as coordenadas do canto inferior direito.

 

Screenshot_2.thumb.png.7e2266144a096169f6b4968b8019359d.png

 

Já o Z1 e o Z2 são referentes aos andares. Como a minha sala só tem um andar, que fica no floor 8, eu coloco o valor 8 nos dois. Mas vamos supor que a minha área de treino fosse um prédio composto pelo térreo, dois andares pra cima e um no subsolo, nesse caso eu usaria Z1 = 6 e Z2 = 9.

 

Espero que tenha ficado mais claro agora ;)

 

Adendo: Se você quiser configurar mais de um "local de quick", que se encontram em lugares distantes um do outro no mapa, terá que configurar uma segunda room (ex.: local room2) e acrescentar um segundo IF relacionado a essa outra sala.



elsif ((pos.x >= room2.x1 and pos.x <= room2.x2) and (pos.y >= room2.y1 and pos.y <= room2.y2) and (pos.z >= room2.z1 and pos.z <= room2.z2)) then
			doRemoveCreature(player)

 

 

 

Edited by Heitorzera13 (see edit history)
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Confirmação de Termo