Jump to content
  • 0

Lurar monstros em um item


Hiquez

Question

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 to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 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
Edited by underewarr
rev02
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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

Edited by Hiquez
Acabei de chegar em casa e testei o novo codigo, mas não funcionou.
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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

 

Edited by lSainty
Link to comment
Share on other 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 to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...