Ir para conteúdo

Featured Replies

Postado

Existe um script, no próprio repositório oficial da TFS que, pelos meus testes, não funciona. O script em questão é o que faz um player virar morador de uma cidade caso entre no teleport, porém, seguindo uma linha lógica de raciocinio, toda cidade tem (ou deveria ter), um teleport que faça essa função. Gostaria de ajuda em relação a isso.

 

Em data/movements/movements.xml temos a seguinte tag:

<movevent event="StepIn" itemid="1387" script="citizen.lua" />

 

Ao meu ver, isso está errado, então fiz testes também utilizando da seguinte forma:

<movevent event="StepIn" actionid="1387" script="citizen.lua" />

Porém, mesmo assim, ainda estaria errado, porque isso iria atribuir somente um teleport para uma cidade, a questão aqui também é funcionar em mais de uma cidade.

https://github.com/otland/forgottenserver/blob/master/data/movements/movements.xml

 

Obviamente, que eu coloquei a actionId no teleport, mas segue o script:

function onStepIn(creature, item, position, fromPosition)
	if item.actionid > actionIds.citizenship and item.actionid < actionIds.citizenshipLast then
		if not creature:isPlayer() then
			return false
		end
		local town = Town(item.actionid - actionIds.citizenship)
		if not town then
			return false
		end
		creature:setTown(town)
		creature:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You are now a citizen of " .. town:getName() .. ".")
	end
	return true
end

https://github.com/otland/forgottenserver/blob/master/data/movements/scripts/citizen.lua

 

Fico no aguardo.

Resolvido por Diego Rulez

Ir para solução
  • Diego Rulez mudou o título para [TFS 1x+] Problema com script de virar morador
Postado
  • Autor
  • Solução

@luanluciano93

Realmente faltava a lib, mas o @Breno Alves me ajudou no Discord, então vou deixar aqui a explicação.

 

O que acontece é que para funcionar é preciso adicionar o seguinte código no arquivo global.lua

actionIds = {
    citizenship = 30020, -- citizenship teleport
    citizenshipLast = 30050, -- citizenship teleport last
}

 

No RME, é preciso setar o actionID:

30021 - town 1

30022 - town 2

30022 - town 3

E assim por diante.

 

Já o script citizen.lua, recomendo usar o script abaixo. Foram adicionadas algumas funcionalidades como:  

- Não permite que o player que já é cidadão entre no teleport referente a cidade dele, somente a outras, impede de entrar e exibe uma mensagem

- Seta a direção do player ao virar cidadão

local towns = {
    [1] = SOUTH,
	[2] = NORTH,
}
function onStepIn(creature, item, position, fromPosition)
    if item.actionid > actionIds.citizenship and item.actionid < actionIds.citizenshipLast then
        if not creature:isPlayer() then
            return false
        end
        local town = Town(item.actionid - actionIds.citizenship)
        if not town then
            return false
        end
        if creature:getTown():getId() == town:getId() then
            creature:teleportTo(fromPosition, true)
            creature:sendTextMessage(MESSAGE_STATUS_SMALL, "You are already a citizen of " .. town:getName() .. ".")
            return false
        end
        creature:setTown(town)
        creature:sendTextMessage(MESSAGE_STATUS_SMALL, "You are now a citizen of " .. town:getName() .. ".")
        creature:teleportTo(town:getTemplePosition())
        creature:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
        creature:setDirection(towns[creature:getTown():getId()])
    end
    return true
end

 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo