Ir para conteúdo
  • 0

setPlayerStorageValue


DeCarvalho

Pergunta

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

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

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
Link para o comentário
Compartilhar em outros sites

  • 0

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
Link para o comentário
Compartilhar em outros sites

  • 0

 

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?

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

  • 0

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.

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

  • 0

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

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

  • 0

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

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

  • 0

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
Editado por Alayen
Link para o comentário
Compartilhar em outros sites

  • 0

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..

 

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

  • 0

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

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

  • 0

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

Modifiquei o script. Agora vai funcionar direitinho.

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

 

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

Link para o comentário
Compartilhar em outros sites

  • 0

Há algum outro evento com nome "tp"?

 

Todos os eventos em login.lua

 

 

 

	player:registerEvent("smith_modal")
    player:registerEvent("smelt_modal")
    player:registerEvent("tan_modal")
	
	player:registerEvent("PlayerDeath")
	player:registerEvent("DropLoot")
	
	
	player:registerEvent("modalDeath")
	player:registerEvent("deathMW")
	player:registerEvent("loginDeath")
	
	player:registerEvent("alchemy")
        player:registerEvent("PotRes")
    
	registerCreatureEvent(cid, "tp")

	registerCreatureEvent(cid, "AchievementLogin")
	registerCreatureEvent(cid, "AchievementThink")
 

 

 

 

Todos os eventos em creaturescript.xml

 

 

 

<creaturescripts>
	<event type="kill" name="tp" script="questpassagenewbie.lua"/>
<!--	<event type="death" name="StoraGe" script="StorageMonster.lua"/>-->
	<event type="login" name="PlayerLogin" script="login.lua"/>
	<event type="logout" name="PlayerLogout" script="logout.lua"/>
	<event type="login" name="FirstItems" script="firstitems.lua"/>
	<event type="login" name="RegenerateStamina" script="regeneratestamina.lua"/>
	<event type="death" name="PlayerDeath" script="playerdeath.lua"/>
	<event type="death" name="DropLoot" script="droploot.lua"/>
	<event type="extendedopcode" name="ExtendedOpcode" script="extendedopcode.lua"/>
	
	<event type="preparedeath" name="modalDeath" script="modaldeath.lua"/>
    <event type="modalwindow" name="deathMW" script="modaldeath.lua"/>
    <event type="login" name="loginDeath" script="modaldeath.lua"/>
	
	<event type="login" name="AchievementLogin" script="achievements.lua"/>
	<event type="think" name="AchievementThink" script="achievements.lua"/>
	
	<!-- alchemy system -->
	<event type="modalwindow" name="alchemy" script="alchemy.lua"/>
    <event type="healthchange" name="PotRes" script="potionResist.lua"/>
	
	<!-- crafting system -->
	<event type="modalwindow" name="smith_modal" script="smith.lua"/>
    <event type="modalwindow" name="smelt_modal" script="smelt.lua"/>
    <event type="modalwindow" name="tan_modal" script="tan.lua"/>
	
	<!-- advance system reward-->
	<event type="advance" name="onadvance_reward" script="onadvance_reward.lua"/>
	<event type="login" name="onadv_register" script="onadvance_reward.lua"/>
	
	<!-- advanced stats system -->
	<event type="login" name="statLogin" script="stats.lua"/>
    <event type="healthchange" name="statHP" script="stats.lua"/>
    <event type="manachange" name="statMP" script="stats.lua"/>
    <event type="preparedeath" name="statPVE" script="stats.lua"/>
    <event type="kill" name="statLoot" script="stats.lua"/>
    <event type="death" name="statDeath" script="stats.lua"/>
	
	
</creaturescripts>

 

 

Assim que eu tiver likes disponíveis irei 'distribuir' pela paciência e pela ajuda...

 

Após eu remover o sistema de achievements que não estava sendo usado.. 'sem querer, querendo' matei o monstro e reparei que o console informou 1 2 :) fui no tile e panz :) funcionando

 

Obrigado @zipter98 pela paciência e disponibilidade em ajudar e @Alayen também por ter vindo tentar prestar socorro :)

 

Estranhamente o sistema achievementes não tinha referência alguma relacionada tampouco usava a mesma storage.. enfim..

Não entendo o sistema para tentar compreender o ocorrido.. mas enfim.. está funcionando

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...