Ir para conteúdo
  • Cadastre-se

(Resolvido)[Statues] Morar na cidade.


Ir para solução Resolvido por Skydrowz,

Posts Recomendados

Olá, pessoal! Alguém saberia como faço para que quando o player clique na estatua no templo de uma cidade ele fique morando nela? Até quando ele morrer volte para a cidade.

 

Muito obrigado!

Link para o post
Compartilhar em outros sites

Na pasta data\actions\scripts\ crie um arquivo chamado morador.lua e adicione cole isso:

Citar

 function onUse(cid, item, frompos, item2, topos)
local townid = 4 ---- id da town
if isPlayer(cid) == TRUE then
if (item.actionid == ) then -- action id
doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") -------- msg que o player ira receber
doPlayerSetTown(cid,townid)
end
end
end

 

Em actions.xml cole isso

 

Citar

<action actionid="14701" event="script" value="morador.lua"/>

 

Depois coloque o action id na statua => 14701

 

 

Não testei, se tiver algum problema me fale;

 

abraços!

Link para o post
Compartilhar em outros sites
18 horas atrás, FlavioHulk disse:

Qual TFS?

The OTX Server Version: (3.7

 

17 horas atrás, Cricket disse:

Na pasta data\actions\scripts\ crie um arquivo chamado morador.lua e adicione cole isso:

 

Em actions.xml cole isso

 

 

Depois coloque o action id na statua => 14701

 

 

Não testei, se tiver algum problema me fale;

 

abraços!

 

Opa, apareceu esse error: 

 

[Warning - Event::checkScript] Can not load script: scripts/morador.lua
data/actions/scripts/morador.lua:4: unexpected symbol near ')'

 

 

Link para o post
Compartilhar em outros sites

Desculpeee...

Tente assim:

 

 function onUse(cid, item, frompos, item2, topos)
local townid = 4 ---- id da town
if isPlayer(cid) == TRUE then
doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") -------- msg que o player ira receber
doPlayerSetTown(cid,townid)
end
end
end
Link para o post
Compartilhar em outros sites
4 minutos atrás, Cricket disse:

Desculpeee...

Tente assim:

 


 function onUse(cid, item, frompos, item2, topos)
local townid = 4 ---- id da town
if isPlayer(cid) == TRUE then
doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") -------- msg que o player ira receber
doPlayerSetTown(cid,townid)
end
end
end

 

Agora apareceu esse:

 

[Warning - Event::checkScript] Can not load script: scripts/morador.lua
data/actions/scripts/morador.lua:8: '<eof>' expected near 'end'

Link para o post
Compartilhar em outros sites

Hmm, desculpe meus erros não sou programador só entendo um pouco, mas vou tentar ajudar rs pera ai

 

Citar

function onUse(cid, item, frompos, item2, topos)
local townid = 4 ---- id da town
if isPlayer(cid) == TRUE then
doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") -------- msg que o player ira receber
doPlayerSetTown(cid,townid)
return true
end

 

Link para o post
Compartilhar em outros sites
2 minutos atrás, Cricket disse:

Hmm, desculpe meus erros não sou programador só entendo um pouco, mas vou tentar ajudar rs pera ai

 

 

 

Capaz mesmo, agradeço demais pela sua ajuda!

 

Apareceu isso:

 

[Warning - Event::checkScript] Can not load script: scripts/morador.lua
data/actions/scripts/morador.lua:9: 'end' expected (to close 'function' at line 1) near '<eof>'

Link para o post
Compartilhar em outros sites
function onUse(cid, item, frompos, item2, topos)
local townid = 4 ---- id da town
if isPlayer(cid) == TRUE then
doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") -------- msg que o player ira receber
doPlayerSetTown(cid,townid)
return true
end

Bom, vamos lá. Sobre esse código.

O script tem callback de variáveis que nunca vão ser usadas, então podem ser removidas, ficando assim:

Ah, e o erro aqui é que o @Cricket não fechou o if.

 

function onUse(cid, item)
local townid = 4 ---- id da town
if isPlayer(cid) == TRUE then
doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") -------- msg que o player ira receber
doPlayerSetTown(cid,townid)
end
return true
end

 

Não sei qual TFS você está usando, mas vou adaptar o código ao meu TFS e corrigir os erros que esse cara cometeu.

 

function onUse(player, item)

	local townId = 4
  	local townName = town:getName(townId)
	if player:getTown() == townId then
		player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você já é morador desta cidade.")
    	return false
	else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Parabéns! Você agora é morador de " .. townName .. ".")
        player:setTown(townId)
    	player:sendMagicEffect(CONST_ME_YELLOW_RINGS)
	end

return true
end

 

Apenas corrigi os erros e acrescentei algumas coisas, mas se você pretende usar o mesmo script em outras estátuas, recomendo que use uma tabela. Caso contrário, você vai ter que criar vários scripts com o mesmo código, apenas mudando o townId. :(

Editado por Skydrowz (veja o histórico de edições)

Master yourself, master the enemy.

Link para o post
Compartilhar em outros sites

pronto deu certo

 

 

Citar

function onUse(cid, item, frompos, item2, topos)

local config = {
        townid = 1, -- change to your own storage value :)
}

        if isPlayer(cid) == TRUE then
                doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade" ) -------- msg que o player ira receber
                doPlayerSetTown(cid,townid)
                end
        return TRUE
end 

 

Como disse, não sou programador, apenas entendo um pouco da linguagem lua... kkkk

Obrigado irmão, vou prestar atenção no if nas próximas vezes .

Problema e que criei o script sem testar, mas fazendo aqui no meu servidor e testando consegui fazer corretamente.

@Skydrowz

Link para o post
Compartilhar em outros sites
6 minutos atrás, Skydrowz disse:

function onUse(cid, item, frompos, item2, topos)
local townid = 4 ---- id da town
if isPlayer(cid) == TRUE then
doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") -------- msg que o player ira receber
doPlayerSetTown(cid,townid)
return true
end

Bom, vamos lá. Sobre esse código.

O script tem callback de variáveis que nunca vão ser usadas, então podem ser removidas, ficando assim:

Ah, e o erro aqui é que o @Cricket não fechou o if.

 


function onUse(cid, item)
local townid = 4 ---- id da town
if isPlayer(cid) == TRUE then
doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") -------- msg que o player ira receber
doPlayerSetTown(cid,townid)
end
return true
end

 

Não sei qual TFS você está usando, mas vou adaptar o código ao meu TFS e corrigir os erros que esse cara cometeu.

 


function onUse(player, item)

	local townId = 4
  	local townName = town:getName(townId)
	if player:getTown() == townId then
		player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você já é morador desta cidade.")
    	return false
	else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Parabéns! Você agora é morador de " .. townName .. ".")
        player:setTown(townId)
    	player:sendMagicEffect(CONST_ME_YELLOW_RINGS)
	end

return true
end

 

Apenas corrigi os erros e acrescentei algumas coisas, mas se você pretende usar o mesmo script em outras estátuas, recomendo que use uma tabela. Caso contrário, você vai ter que criar vários scripts com o mesmo código, apenas mudando o townId. :(

 

Boa noite, Sky! Maravilha! Como seria essa tabela? A principio são seis cidades.

 

4 minutos atrás, Cricket disse:

pronto deu certo

 

 

 

 

Opa, agora apareceu a mensagem em verde, vou testar e ver se está tudo ok. MUITO obrigado!

Link para o post
Compartilhar em outros sites
Agora, Maste disse:

 

Boa noite, Sky! Maravilha! Como seria essa tabela? A principio são seis cidades.

 

 

Opa, agora apareceu a mensagem em verde, vou testar e ver se está tudo ok. MUITO obrigado!

 

local config = {
	estatuas = {
	[1] = {townId = X, positionEstatua = Position(X), townName = "X"},
	[2] = {townId = Y, positionEstatua = Position(Y), townName = "Y"}
    }
} 

 

A ideia é fazer o código por posições. Se a estátua estiver na posição X, significa que aquela estátua é a estátua de número 1 na Tabela. Deu pra entender?

Master yourself, master the enemy.

Link para o post
Compartilhar em outros sites
2 minutos atrás, Skydrowz disse:

 


local config = {
	estatuas = {
	[1] = {townId = X, positionEstatua = Position(X), townName = "X"},
	[2] = {townId = Y, positionEstatua = Position(Y), townName = "Y"}
    }
} 

 

A ideia é fazer o código por posições. Se a estátua estiver na posição X, significa que aquela estátua é a estátua de número 1 na Tabela. Deu pra entender?

Testando o seu apareceu isso:

 

Lua Script Error: [Action Interface]
data/actions/scripts/morador.lua:onUse
data/actions/scripts/morador.lua:4: attempt to index global 'town' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/actions/scripts/morador.lua:4: in function <data/actions/scripts/morador.lua:1>

 

Essa procedimento de tabela seria para não criar vários arquivos 'iguais'? Esse local config pode ser colocar em qualquer lugar do script?

Link para o post
Compartilhar em outros sites
7 minutos atrás, Maste disse:

Testando o seu apareceu isso:

 

Lua Script Error: [Action Interface]
data/actions/scripts/morador.lua:onUse
data/actions/scripts/morador.lua:4: attempt to index global 'town' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/actions/scripts/morador.lua:4: in function <data/actions/scripts/morador.lua:1>

 

Essa procedimento de tabela seria para não criar vários arquivos 'iguais'? Esse local config pode ser colocar em qualquer lugar do script?

 

O config seria uma tabela local antes da função. Caso você queira usar a tabela, vai ter que alterar um pouquinho o código. Mas é muito melhor mesmo.

Sobre o erro, é só trocar town por Town. Acabei me confundindo olhando as funções no Luascripts. xD

 

function onUse(player, item)

	local townId = 4
  	local townName = Town(townId):getName()
	if player:getTown() == townId then
		player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você já é morador desta cidade.")
    	return false
	else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Parabéns! Você agora é morador de " .. townName .. ".")
        player:setTown(townId)
    	player:sendMagicEffect(CONST_ME_YELLOW_RINGS)
	end

return true
end

 

@Maste Havia outro erro sim, acabei de corrigir. Pode testar agora. :)

Editado por Skydrowz (veja o histórico de edições)

Master yourself, master the enemy.

Link para o post
Compartilhar em outros sites
5 minutos atrás, Skydrowz disse:

 

O config seria uma tabela local antes da função. Caso você queira usar a tabela, vai ter que alterar um pouquinho o código. Mas é muito melhor mesmo.

Sobre o erro, é só trocar town por Town. Acabei me confundindo olhando as funções no Luascripts. xD

 


function onUse(player, item)

	local townId = 4
  	local townName = Town:getName(townId)
	if player:getTown() == townId then
		player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você já é morador desta cidade.")
    	return false
	else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Parabéns! Você agora é morador de " .. townName .. ".")
        player:setTown(townId)
    	player:sendMagicEffect(CONST_ME_YELLOW_RINGS)
	end

return true
end

 

 

Entendi! Vou ver o que posso fazer. Obrigado! =D

 

Apareceu isso: 

 

[Warning - Event::checkScript] Can not load script: scripts/morador.lua
data/actions/scripts/morador.lua:14: '=' expected near 'return'

Link para o post
Compartilhar em outros sites
3 minutos atrás, Maste disse:

 

Entendi! Vou ver o que posso fazer. Obrigado! =D

 

Apareceu isso: 

 

[Warning - Event::checkScript] Can not load script: scripts/morador.lua
data/actions/scripts/morador.lua:14: '=' expected near 'return'

 

Havia atualizado o código.

Dá uma olhada de novo lá.

Mudei em:

local townName = Town(townId):getName()

Acho que você pegou o código antes da edição ?

Master yourself, master the enemy.

Link para o post
Compartilhar em outros sites
5 minutos atrás, Skydrowz disse:

 

Havia atualizado o código.

Dá uma olhada de novo lá.

Mudei em:


local townName = Town(townId):getName()

Acho que você pegou o código antes da edição ?

 

Desculpe pelo transtorno, mas o error continua:

 

[Warning - Event::checkScript] Can not load script: scripts/morador.lua
data/actions/scripts/morador.lua:14: '=' expected near 'return'

 

 

Link para o post
Compartilhar em outros sites
  • Solução
function onUse(player, item)

	local townId = 4
  	local townName = Town(townId):getName()
	if player:getTown():getId() == townId then
		player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você já é morador desta cidade.")
    	return false
	else
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Parabéns! Você agora é morador de " .. townName .. ".")
        player:setTown(townId)
    	player:getPosition():sendMagicEffect(CONST_ME_YELLOW_RINGS)
	end

return true
end

 

Agora vai.

Desculpa, é que não tô testando. Tô fazendo de cabeça. xD

São só erros de função mesmo. Sempre esqueço algumas...

Editado por Skydrowz (veja o histórico de edições)

Master yourself, master the enemy.

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo