Ir para conteúdo
  • 0

Lurar monstros em um item


Hiquez

Pergunta

Bom dia pessoal do xtibia, estou desenvolvendo uma quest com bastante rpg e tive uma ideia para colocar na metade dessa quest.

Seria um item no qual consegueria ele apenas dentro daquela quest, ele irá funcionar por serca de uns 10 segundos apenas para os jogadores correrem.

por exemplo "jogar carne para pitbulls e passar ao lado deles sem que eles percebam".

pensei em adicionar a função do exeta res a um item, mas não tive êxito. Alguém poderia me ajudar por favor?

O item será basicamente um exeta res, o jogador ira jogar o item e um sqm no meio da sala, todos os monstro que estiver naquela sala irá correr pra perto do item e os players iriam passar correndo. 

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Qual tfs?

CreatureScript,onStatsChange

Impossivel fazer o monstrão não te atacar sem alterações na sources, mas ele pode não dar dano.

 

function onStatsChange(cid, attacker, type, combat, value)
local item = 2160
local pos = {x = 979, y = 1461, z = 4}
local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}    

 
    if not isMonster(attacker) then
        return true
    end
    if isInArray(monsters, getCreatureName(attacker):lower()) then
        player:setStorageValue(70065, os.time() + 120)
       if player:getStorageValue(70065) > os.time() and if getTileItemById(pos, item).uid > 0 then
            if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
                return false
            end
        end
    end
    return true
    end
end
Editado por underewarr
rev02
Link para o comentário
Compartilhar em outros sites

  • 0
Agora, underewarr disse:

Qual tfs?

CreatureScript,onStatsChange

Impossivel fazer o monstrão não te atacar sem alterações na sources, mas ele pode não dar dano.

 


function onStatsChange(cid, attacker, type, combat, value)
local item = 2160
local pos = {x = 979, y = 1461, z = 4}    

 
    if not isMonster(attacker) then
        return true
    end
    if isInArray(monsters, getCreatureName(attacker):lower()) then
        player:setStorageValue(70065, os.time() + 120)
       if player:getStorageValue(70065) > os.time() then and if getTileItemById(pos, item).uid > 0 then
            if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
                return false
            end
        end
    end
    return true
end

@underewarr Uso Otx mano
deixa eu ver se entendi, esse script que você fez vai puxar os monstro até ele? 

 

Link para o comentário
Compartilhar em outros sites

  • 0
4 minutos atrás, Hiquez disse:

@underewarr Uso Otx mano
deixa eu ver se entendi, esse script que você fez vai puxar os monstro até ele? 

 

Este script detecta o item na posição, assim que for detectado ira adicionar storage quem possuir a storage nao tera a Life em a Mana atingida pelos mnstros, mas os monstros ainda irão executar a ação de atack e de follow no personagem.

só o dano será nulo

Link para o comentário
Compartilhar em outros sites

  • 0
1 minuto atrás, underewarr disse:

Este script detecta o item na posição, assim que for detectado ira adicionar storage quem possuir a storage nao tera a Life em a Mana atingida pelos mnstros, mas os monstros ainda irão executar a ação de atack e de follow no personagem.

só o dano será nulo

@underewarr, obrigado mano, isso ja da uma ajuda! mas me tira uma dúvida a storage sera retirada dos players assim que eles sairem da sala?

Link para o comentário
Compartilhar em outros sites

  • 0
7 minutos atrás, Hiquez disse:

@underewarr, obrigado mano, isso ja da uma ajuda! mas me tira uma dúvida a storage sera retirada dos players assim que eles sairem da sala?

Como você solicitou a storage dura 10 seconds.

Me enganei altera aqui para os sceonds que voce deseja

120)

Tinha um pequeno erro no código copie novamente do tópico ou use este

local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}

function onStatsChange(cid, attacker, type, combat, value)
local item = 2160
local pos = {x = 979, y = 1461, z = 4}    

 
    if not isMonster(attacker) then
        return true
    end
    if isInArray(monsters, getCreatureName(attacker):lower()) then
        player:setStorageValue(70065, os.time() + 120)
       if player:getStorageValue(70065) > os.time() and if getTileItemById(pos, item).uid > 0 then
            if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
                return false
            end
        end
    end
    return true
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
9 minutos atrás, underewarr disse:

Como você solicitou a storage dura 10 seconds.

Me enganei altera aqui para os sceonds que voce deseja


120)

Tinha um pequeno erro no código copie novamente do tópico ou use este


local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}

function onStatsChange(cid, attacker, type, combat, value)
local item = 2160
local pos = {x = 979, y = 1461, z = 4}    

 
    if not isMonster(attacker) then
        return true
    end
    if isInArray(monsters, getCreatureName(attacker):lower()) then
        player:setStorageValue(70065, os.time() + 120)
       if player:getStorageValue(70065) > os.time() and if getTileItemById(pos, item).uid > 0 then
            if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
                return false
            end
        end
    end
    return true
end

 

@underewarr está ocorrendo um erro na distro, estou tentando da reload e está acontecendo esse error.

 

testeerro.png

Link para o comentário
Compartilhar em outros sites

  • 0

Erro meu. Copie do tópico novamente ou este aqui.
 

function onStatsChange(cid, attacker, type, combat, value)
local item = 2160
local pos = {x = 979, y = 1461, z = 4}
local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}    

 
    if not isMonster(attacker) then
        return true
    end
    if isInArray(monsters, getCreatureName(attacker):lower()) then
        player:setStorageValue(70065, os.time() + 120)
       if player:getStorageValue(70065) > os.time() and if getTileItemById(pos, item).uid > 0 then
            if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
                return false
            end
        end
    end
    return true
    end
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, underewarr disse:

Erro meu. Copie do tópico novamente ou este aqui.
 


function onStatsChange(cid, attacker, type, combat, value)
local item = 2160
local pos = {x = 979, y = 1461, z = 4}
local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}    

 
    if not isMonster(attacker) then
        return true
    end
    if isInArray(monsters, getCreatureName(attacker):lower()) then
        player:setStorageValue(70065, os.time() + 120)
       if player:getStorageValue(70065) > os.time() and if getTileItemById(pos, item).uid > 0 then
            if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
                return false
            end
        end
    end
    return true
    end
end

 

@underewarr, mano, desculpa a demora pra responder, acabei de testar novamente o script que você atualizou e ainda continua dando o mesmo erro.
 

sdsdsdsds.png

Link para o comentário
Compartilhar em outros sites

  • 0
9 minutos atrás, Hiquez disse:

@underewarr, mano, desculpa a demora pra responder, acabei de testar novamente o script que você atualizou e ainda continua dando o mesmo erro.
 

sdsdsdsds.png

Me desculpa não estou em casa para testar.

Caso esse não funcione peço que espere até mais tarde para que eu possa te ajudar com mais eficiência.

 

function onStatsChange(cid, attacker, type, combat, value)
local item = 2160
local pos = {x = 979, y = 1461, z = 4}
local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}    

 
    if not isMonster(attacker) then
        return true
    end
    if isInArray(monsters, getCreatureName(attacker):lower()) and getTileItemById(pos, item).uid > 0 then
        player:setStorageValue(70065, os.time() + 120)
    if player:getStorageValue(70065) > os.time() then
            type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
                return false
            end
        end
        return true
    end
 

Estou de volta....

Qual versão otx esta usando?

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, underewarr disse:

Me desculpa não estou em casa para testar.

Caso esse não funcione peço que espere até mais tarde para que eu possa te ajudar com mais eficiência.

 



function onStatsChange(cid, attacker, type, combat, value)
local item = 2160
local pos = {x = 979, y = 1461, z = 4}
local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}    

 
    if not isMonster(attacker) then
        return true
    end
    if isInArray(monsters, getCreatureName(attacker):lower()) and getTileItemById(pos, item).uid > 0 then
        player:setStorageValue(70065, os.time() + 120)
    if player:getStorageValue(70065) > os.time() then
            type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
                return false
            end
        end
        return true
    end
 

Estou de volta....

Qual versão otx esta usando?

@underewarr boa noite mano, acabei de voltar. uso essa versão da otx

A segunda imagem é o error que está acontecendo atualmente mano, desculpa por não ter testado antes, acabei de chegar em casa também.

 

sdsdsdsds.png

sdsdsdsds.png

Editado por Hiquez
Acabei de chegar em casa e testei o novo codigo, mas não funcionou.
Link para o comentário
Compartilhar em outros sites

  • 0
Em 13/11/2020 em 18:29, Hiquez disse:

@underewarr boa noite mano, acabei de voltar. uso essa versão da otx

A segunda imagem é o error que está acontecendo atualmente mano, desculpa por não ter testado antes, acabei de chegar em casa também.

 

sdsdsdsds.png

sdsdsdsds.png

Na linha 13, está faltando um 'if' antes disso:

type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then

Ficando assim:

if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then

 

Link para o comentário
Compartilhar em outros sites

  • 0
Em 16/11/2020 em 15:08, lSainty disse:

Na linha 13, está faltando um 'if' antes disso:


type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then

Ficando assim:


if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then

 

@lSainty boa noite, desculpe-me a demora para responder, mas o error persiste. Adicionei o if e continuou dando erro. Se puder me ajudar com isso agradeço, muito obrigado!

erro.png.35c8062a9cd182ac0b761916c85fb87f.png

Link para o comentário
Compartilhar em outros sites

  • 0
12 horas atrás, Hiquez disse:

@lSainty boa noite, desculpe-me a demora para responder, mas o error persiste. Adicionei o if e continuou dando erro. Se puder me ajudar com isso agradeço, muito obrigado!

erro.png.35c8062a9cd182ac0b761916c85fb87f.png

Estava faltando um 'end' também:

function onStatsChange(cid, attacker, type, combat, value)
	local item = 2160
	local pos = {x = 979, y = 1461, z = 4}
	local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}    

	if not isMonster(attacker) then
		return true
	end

	if isInArray(monsters, getCreatureName(attacker):lower()) and getTileItemById(pos, item).uid > 0 then
		player:setStorageValue(70065, os.time() + 120)
		if player:getStorageValue(70065) > os.time() then
			if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
				return false
			end
		end
		return true
	end
end

 

Editado por lSainty
Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, lSainty disse:

Estava faltando um 'end' também:


function onStatsChange(cid, attacker, type, combat, value)
	local item = 2160
	local pos = {x = 979, y = 1461, z = 4}
	local monsters = {"dwarf", "dwarf guard", "dwarf geomancer"}    

	if not isMonster(attacker) then
		return true
	end

	if isInArray(monsters, getCreatureName(attacker):lower()) and getTileItemById(pos, item).uid > 0 then
		player:setStorageValue(70065, os.time() + 120)
		if player:getStorageValue(70065) > os.time() then
			if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
				return false
			end
		end
		return true
	end
end

 

@lSainty Boa tarde, acabei de testar. Não está dando mais erro nenhum, ja adicionei as cordenadas certa, adicionei o item e também o nome dos monstros. O problema é que não está acontecendo nada, coloco o item no chão e não acontece nada. O personagem ainda continua tomando dano, poderia da uma verificada no script por favor?

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...