setPlayerStorageValue

DeCarvalho
em Scripts
  • 1
  • 2

DeCarvalho

Procurando Host
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 28/10/10Posts: 206Char no Tibia: Mage Junkie

Estou usando esse script para fazer um portal aparecer e setar uma storage após o monstro morrer... o portal abre, fica la pelos 'x' segungos mas a storage não esta sendo setada.. ja tentei pesquisar mas .. enfim.. alguém poderia corrigir e me explicar o motivo de não estar setando a storage?

(tfs 1.2)

local tpId = 1387
local tps = {
	["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30},
}

function removeTp(tp)
	local t = getTileItemById(tp.pos, tpId)
	if t then
		doRemoveItem(t.uid, 1)
		doSendMagicEffect(tp.pos, CONST_ME_POFF)
	end
end

function onDeath(cid)
	local tp = tps[getCreatureName(cid)]
	if tp then
		doCreateTeleport(tpId, tp.toPos, tp.pos)
		doCreatureSay(cid, "A teleport appeared near and will disappear in  "..tp.time.." seconds.", TALKTYPE_ORANGE_1)
		doCreatureSay(cid, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1)
		setPlayerStorageValue(cid, 21321, 1)
		addEvent(removeTp, tp.time*1000, tp)
	end
	return TRUE
end

Grato

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Você está setando a storage no monstro que está morrendo (cid).

local tpId = 1387
local tps = {
	["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30},
}
 
function removeTp(tp)
	local t = getTileItemById(tp.pos, tpId)
	if t then
		doRemoveItem(t.uid, 1)
		doSendMagicEffect(tp.pos, CONST_ME_POFF)
	end
end
 
function onDeath(cid, corpse, deathList)
	local tp = tps[getCreatureName(cid)]
	if tp then
		doCreateTeleport(tpId, tp.toPos, tp.pos)
		doCreatureSay(cid, "A teleport appeared near and will disappear in  "..tp.time.." seconds.", TALKTYPE_ORANGE_1)
		doCreatureSay(cid, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1)
		setPlayerStorageValue(deathList[1], 21321, 1)
		addEvent(removeTp, tp.time*1000, tp)
	end
	return true
end

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

DeCarvalho

Procurando Host
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 28/10/10Posts: 206Char no Tibia: Mage Junkie

 

Você está setando a storage no monstro que está morrendo (cid).

local tpId = 1387
local tps = {
	["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30},
}
 
function removeTp(tp)
	local t = getTileItemById(tp.pos, tpId)
	if t then
		doRemoveItem(t.uid, 1)
		doSendMagicEffect(tp.pos, CONST_ME_POFF)
	end
end
 
function onDeath(cid, corpse, deathList)
	local tp = tps[getCreatureName(cid)]
	if tp then
		doCreateTeleport(tpId, tp.toPos, tp.pos)
		doCreatureSay(cid, "A teleport appeared near and will disappear in  "..tp.time.." seconds.", TALKTYPE_ORANGE_1)
		doCreatureSay(cid, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1)
		setPlayerStorageValue(deathList[1], 21321, 1)
		addEvent(removeTp, tp.time*1000, tp)
	end
	return true
end

Eu havia imaginado isso e até havia usado assim

 

function onDeath(cid, corpse, killer)
[...]
setPlayerStorageValue(killer[1], 21321, 1)
[...]

baseado em 2 scripts que tem aqui no forum, mas não funcionou.. para ter certeza testei esse seu e nada.. fui no phpmyadmin para ver se tinha alguma storage setada no player_storage e nada tbm..

 

essa storage libera uma tile, tentei passar pela tile e não posso passar por não ter a storage setada no char..

 

grato de qualquer maneira por ter vindo prestar ajuda, alguma outra opção?

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Uma opção é converter o código para outro callback, como, por exemplo, onKill.

local tpId = 1387
local tps = {
	["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30},
}
 
function removeTp(tp)
	local t = getTileItemById(tp.pos, tpId)
	if t then
		doRemoveItem(t.uid, 1)
		doSendMagicEffect(tp.pos, CONST_ME_POFF)
	end
end
 
function onKill(cid, target)
    local tp = tps[getCreatureName(target)]
    if isPlayer(cid) and isMonster(target) and tp then
        doCreateTeleport(tpId, tp.toPos, tp.pos)
        doCreatureSay(target, "A teleport appeared near and will disappear in  "..tp.time.." seconds.", TALKTYPE_ORANGE_1)
        doCreatureSay(target, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1)
        setPlayerStorageValue(cid, 21321, 1)
        addEvent(removeTp, tp.time*1000, tp)
    end
    return true
end

É possível fazer por onStatsChange também.

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

DeCarvalho

Procurando Host
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 28/10/10Posts: 206Char no Tibia: Mage Junkie

Bem eu alterei a tag em creaturescripts

	<event type="death" name="tp" script="questpassagenewbie.lua"/>

para

	<event type="kill" name="tp" script="questpassagenewbie.lua"/>

no xml do monstro tenho

	<script>
	<event name="tp"/>
	</script>

Usei com esse onKill que você fez mas ao matar o monstro o console retorna essa msg

[Warning - Monster::Monster] Unknown event name: tp

Eu ainda estou naquela de tentar entender o funcionamento das coisas.. por isso desculpe se estou a fazer alguma besteira :p

 

// não pude curtir pois estou sem likes no momento mas assim que tiver eu irei curtir.. e claro assim que o script, se dentro das suas possibilidades, estiver funcionando darei como respsta válida :) como sei que toda ajuda é gratuida e de bom grado.. não tenha pressa :) sei que todos têm coisas a fazer :)

 

de qualquer maneira grato pelo suporte

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Registre esse evento em login.lua, não no arquivo do monstro. Esqueci de avisar, foi mal.

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

DeCarvalho

Procurando Host
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 28/10/10Posts: 206Char no Tibia: Mage Junkie

Desculpa a minha ignorância.. em creaturescripts/scripts/login.lua adicionei

    registerCreatureEvent(cid, "tp")

por encargo de dúvida testei também com

player:registerEvent("tp")

mas a msg de warning continua ...

 

Imagino que o correto seja o CreatureEvent mas enfim..

 

[edit] eu havia esquecido de remover do mostro, mas ao remover do monstro não acontece nada quando o mato.. o erro é quando o monstro é criado..

 

/m little corym charlatan e o console retorna a warning

Alayen

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 30/04/15Posts: 60

Você está tentando pegar o teleport pelo nome do killer, não do target. Outro ponto é que você está tentando usar 0.4 em 1.0 e isso não costuma dar certo. Tá aqui como devia ser:

 

local tps = {
	["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30},
}
 
function onKill(killer, target)
    local tp = tps[target:getName()]
    if tp and killer:isPlayer() and target:isMonster() then
    	local item = Game.createItem(1387, 1, tp.pos)
	item:setDestination(tp.toPos)
	
	target:say("A teleport appeared near and will disappear in  "..tp.time.." seconds.", TALKTYPE_MONSTER_SAY)
        target:say("You have killed the disorder and proved be trustworthy", TALKTYPE_MONSTER_SAY)
        
        killer:setStorageValue(21321, 1)

        local function removeTeleport()
            item:remove()
            Position(tp.pos):sendMagicEffect(MAGIC_EFFECT_POFF)
        end
        addEvent(item:remove, tp.time * 1000)
    end
    return true
end

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Ah sim, esqueci de modificar o parâmetro. Bem lembrado.

Sobre o uso de metamétodos e afins do TFS 1.x+, não adaptei pois, como o autor mesmo disse, o problema era só na storage.

o portal abre, fica la pelos 'x' segungos mas a storage não esta sendo setada..

 

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

DeCarvalho

Procurando Host
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 28/10/10Posts: 206Char no Tibia: Mage Junkie

Você está tentando pegar o teleport pelo nome do killer, não do target. Outro ponto é que você está tentando usar 0.4 em 1.0 e isso não costuma dar certo. Tá aqui como devia ser:

 

local tps = {
	["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30},
}
 
function onKill(killer, target)
    local tp = tps[target:getName()]
    if tp and killer:isPlayer() and target:isMonster() then
    	local item = Game.createItem(1387, 1, tp.pos)
	item:setDestination(tp.toPos)
	
	target:say("A teleport appeared near and will disappear in  "..tp.time.." seconds.", TALKTYPE_MONSTER_SAY)
        target:say("You have killed the disorder and proved be trustworthy", TALKTYPE_MONSTER_SAY)
        
        killer:setStorageValue(21321, 1)

        local function removeTeleport()
            item:remove()
            Position(tp.pos):sendMagicEffect(MAGIC_EFFECT_POFF)
        end
        addEvent(item:remove, tp.time * 1000)
    end
    return true
end

 

Ola, testei aqui.. primeiro ele disse que na linha 20 perto do, deveria haver alguma função.. imaginei que estivesse faltando os parenteses e adicionei..

Estava assim

        addEvent(item:remove, tp.time * 1000)

coloquei assim

        addEvent(item:remove(), tp.time * 1000) 

enfim cai novamente no warning do tp

[Warning - Monster::Monster] Unknown event name: tp

Testei adicionando ao login.lua o registro, usando no xml da criatura mas ai nada acontece.. nem mesmo erro no console..

 

como no outro post, testei das duas maneiras no login.lua e nada..

 

No script inicial o teleport estava funcionando.. o que não esta funcionando é o storage.. testei o script só setando storage e também nada...

 

Como informado é tfs 1.2

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Sobre meu código, você disse que não estava acontecendo nada quando o monstro morria, certo?

Modifiquei o script. Agora vai funcionar direitinho.

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

DeCarvalho

Procurando Host
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 28/10/10Posts: 206Char no Tibia: Mage Junkie

Sobre meu código, você disse que não estava acontecendo nada quando o monstro morria, certo?

Modifiquei o script. Agora vai funcionar direitinho.

 

Bem vou colocar todas as informações aqui pois pode ser algum erro meu, pois mesmo com esse novo continua sem acontecer coisa alguma, não aparece msg, não aparece tp, não da erro no console.. nada

 

bem estou usando seu script atualizado,

 

o xml do monstro não contem referência ao evento como você havia informado para retirar..

 

em creaturescripts.xml tenho isso

	<event type="kill" name="tp" script="questpassagenewbie.lua"/>

em login.lua testei das duas formas

	player:registerEvent("tp")
	registerCreatureEvent(cid, "tp")

estou usando o 1.2 daqui https://github.com/brunominervino/forgottenserver

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Tente esse e informe se alguma coisa é imprimida no console (1/2):

local tpId = 1387
local tps = {
	["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30},
}
 
function removeTp(tp)
	local t = getTileItemById(tp.pos, tpId)
	if t then
		doRemoveItem(t.uid, 1)
		doSendMagicEffect(tp.pos, CONST_ME_POFF)
	end
end
 
function onKill(cid, target)
    print(1)
    local tp = tps[getCreatureName(target)]
    if isPlayer(cid) and isMonster(target) and tp then
        print(2)
        doCreateTeleport(tpId, tp.toPos, tp.pos)
        doCreatureSay(target, "A teleport appeared near and will disappear in  "..tp.time.." seconds.", TALKTYPE_ORANGE_1)
        doCreatureSay(target, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1)
        setPlayerStorageValue(cid, 21321, 1)
        addEvent(removeTp, tp.time*1000, tp)
    end
    return true
end

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

DeCarvalho

Procurando Host
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 28/10/10Posts: 206Char no Tibia: Mage Junkie

 

Tente esse e informe se alguma coisa é imprimida no console (1/2):

local tpId = 1387
local tps = {
	["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30},
}
 
function removeTp(tp)
	local t = getTileItemById(tp.pos, tpId)
	if t then
		doRemoveItem(t.uid, 1)
		doSendMagicEffect(tp.pos, CONST_ME_POFF)
	end
end
 
function onKill(cid, target)
    print(1)
    local tp = tps[getCreatureName(target)]
    if isPlayer(cid) and isMonster(target) and tp then
        print(2)
        doCreateTeleport(tpId, tp.toPos, tp.pos)
        doCreatureSay(target, "A teleport appeared near and will disappear in  "..tp.time.." seconds.", TALKTYPE_ORANGE_1)
        doCreatureSay(target, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1)
        setPlayerStorageValue(cid, 21321, 1)
        addEvent(removeTp, tp.time*1000, tp)
    end
    return true
end

 

nadinha de nada.. é como se ele não estivesse carregando o script.. quando morre ele não mostra 1 e nem o 2 que deveria aparecer logo depois pela criação do tp e envio de storage

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Há algum outro evento com nome "tp"?

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

  • 1
  • 2