Ir para conteúdo
  • Cadastre-se

Pedido [pedido] teleport que da e retira level do player


Posts Recomendados

.Qual servidor ou website você utiliza como base?  Otserv Global 12x

 

Qual o motivo deste tópico? 

 

Olá pessoas, vim aqui pedir ajuda a vocês.

Eu não sou programador e não entendo nada de programar, apenas sei alterar uns scripts ou outros. 

Tendo isso em mente, eu fui atras de um script que fosse possivel dar level quando o player entrasse num tp, e quando ele saísse ele voltava pro level que ele tava antes de entrar no tp.

Basicamente assim : Antes do player pular no tp, ele vai estar level 300. Dai quando ele entrar no tp, ele vai passar do 300 pro 600. E quando ele for sair dessa area, ele volta do 600 pro 300.


Tentei procurar algo parecido com isso nos forum, mas n soube pesquisar direito ou então realmente n encontrei nada parecido com isso.

O ot que estou usando é versão 12x. Creio q seja TFS 1.3

Grato desde já

Link para o post
Compartilhar em outros sites

Cara, inicialmente você precisa montar um script de movements, que seria os dois teleportes (ida e volta).
Segundo você grava a experiencia que adicionar para o novo level em uma storage quando ele entrar no primeiro teleporte.

Terceiro, a volta do teleporte, você retira a experiencia que adicionou (o valor salvo na storage).

 

Funções que você pode usar:

local function getExpForLevel(level)
	level = level - 1
	return ((50 * level * level * level) - (150 * level * level) + (400 * level)) / 3
end

player:getExperience()

player:addExperience()

player:getLevel()

 

Link para o post
Compartilhar em outros sites
5 horas atrás, luanluciano93 disse:

Cara, inicialmente você precisa montar um script de movements, que seria os dois teleportes (ida e volta).
Segundo você grava a experiencia que adicionar para o novo level em uma storage quando ele entrar no primeiro teleporte.

Terceiro, a volta do teleporte, você retira a experiencia que adicionou (o valor salvo na storage).

 

Funções que você pode usar:


local function getExpForLevel(level)
	level = level - 1
	return ((50 * level * level * level) - (150 * level * level) + (400 * level)) / 3
end

player:getExperience()

player:addExperience()

player:getLevel()

 

Então, teria como dar uma luz ai ? eu realmente n entendo de programação kk

N sei fazer um script desses.

Eu consigo editar um script no maximo.

 

E essas paradas de storage eu tb nao tenho conhecimento.

 

Enqt o movement eu pretendo usar esse script

Spoiler

local config = {
    [xxxxx] = Position(xxxx, xxxx, x),
    [xxxxx] = Position(xxxx, xxxx, x),
}

function onStepIn(creature, item, position, fromPosition)
    local player = creature:getPlayer()
    if not player then
        return false
    end

    local teleport = config[item.actionid]
    if teleport then
        player:teleportTo(teleport)
        fromPosition:sendMagicEffect(CONST_ME_TELEPORT)
        teleport:sendMagicEffect(CONST_ME_TELEPORT)
    end
end

 

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

Primeiro aprenda o que é storage

 

Então, eu dei uma olhada e acho que entendi oq é storage.

Basicamente é um valor unico que vai salvar algo no banco de dados pra dar "acesso" ao player quando ele tiver esse valor. (pelo oq eu pude entender foi isso)

 

Mas ainda n sei ao certo como eu deveria aplicar isso em um script.

O codigo seria esse getPlayerStorageValue(uid, chave), certo ?

Mas oq viria depois ? onde eu aplico ele ? seria no script de movements ?

Link para o post
Compartilhar em outros sites

Aqui você acha todas as funções do TFS atual: https://github.com/otland/forgottenserver/wiki/Script-Interface

Se clica em players nesse link irá ter as funções usadas nos players: https://github.com/otland/forgottenserver/wiki/Metatable%3APlayer

Se estudar um pouco de lógica de programação e algoritmos irá perceber que no TFS (e na maioria das coisas na programação) as funções são basicamente escritas em inglês, e no TFS você verifica no início delas o que ela faz: GET (puxa um valor da database), SET (muda algo na database), ADD (adiciona algo na database) e etc.

No link que te passei se você procurar por storage vai achar a função que puxa o valor database e a que muda o valor na database ... 

A tabela da storage na database é formada basicamente pelo chave da storage e pelo valor dela, tudo indicando para determinado player, POR EXEMPLO:
O player de ID 1 fez uma quest, você programou para quando ele clicar na quest mudar o valor da chave 2000 para 1, então a chave 2000 terá valor 1 para o PLAYER de ID 1.

Se você entender a lógica vai ver que dá para fazer milhares de coisas ... 

getStorageValue(key)

setStorageValue(key, value)

Editado por luanluciano93 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 28/06/2020 em 20:38, Npc Bugado disse:

@schibuola 

 

Eu estou no celular e não pude testar, mas veja se lhe agrada e me reporte qualquer bug, usei como base o sistema de teleport do membro lordzetros, dito isso, vamos lá:

Em data/movements/scripts/ crie um arquivo chamado mov_janela_hunts.lua e adicione dentro:


-- Devidos créditos  pelo uso da base: lordzetros 

local config = {
	titulo = "BEM VINDO(A) A JANELA DE HUNTS!", -- Título da Janela
	mensagem = "Selecione qual hunt voce deseja ir:", -- Mensagem abaixo do título da janela
}

CONFIG_TPS_JANELA = {
	[19090] = { -- ID do action que ficará no portal da hunt
		{nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado
		{nome = "Demon 02", pos = {x = 93, y = 144, z = 7}},
		{nome = "Demon 03", pos = {x = 91, y = 140, z = 7}},
		{nome = "Demon 04", pos = {x = 94, y = 138, z = 7}},
		{nome = "Demon 05", pos = {x = 95, y = 136, z = 7}},
	},
	[19091] = { 
		{nome = "Frost 01", pos = {x = 98, y = 140, z = 7}},
		{nome = "Frost 02", pos = {x = 93, y = 145, z = 7}},
		{nome = "Frost 03", pos = {x = 91, y = 141, z = 7}},
		{nome = "Frost 04", pos = {x = 94, y = 139, z = 7}},
		{nome = "Frost 05", pos = {x = 95, y = 137, z = 7}},
	},
}

function onStepIn(creature, item, pos, fromPosition)
	if ((CONFIG_TPS_JANELA[item:getActionId()]) and creature:isPlayer()) then
		JANELA_TP_ACTION = item:getActionId()
		creature:teleportTo(fromPosition, true)
		creature:registerEvent("janela hunts")
		local janela = ModalWindow(1000, config.titulo, config.mensagem)
		
		for i, v in ipairs(CONFIG_TPS_JANELA[JANELA_TP_ACTION]) do
			janela:addChoice(i, v.nome)
      		doPlayerAddExp(cid,500000)
			doPlayerSay(cid,"Eu ganhei esse exp ai de cima até passar pelo portal novamente :)",1)
		end
		
		janela:addButton(100, "Confirmar")
		janela:addButton(101, "Fechar")
		janela:setDefaultEnterButton(100)
		janela:setDefaultEscapeButton(101)
		janela:sendToPlayer(creature)
	end
	return true
end

 

Em data/movements/movements.xml adicione o seguinte código abaixo de um semelhante:


<movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" />

 

Agora em data/creaturescripts/scripts/ crie um arquivo chamado creature_janela_hunts.lua e adicione dentro:


function onModalWindow(player, modalWindowId, buttonId, choiceId)
	player:unregisterEvent("janela hunts")
	if (modalWindowId == 1000) then
		if (buttonId == 100) then
			local tele_pos = CONFIG_TPS_JANELA[JANELA_TP_ACTION][choiceId].pos
			player:teleportTo(tele_pos)
			local pos_t = Position(tele_pos)
			pos_t:sendMagicEffect(CONST_ME_MAGIC_BLUE)
		end
	end
	return true
end

 

Em data/creaturescripts/creaturescripts.xml adicione o seguinte código abaixo de um semelhante:


<event type="ModalWindow" name="janela hunts" script="creature_janela_hunts.lua"/>

* Configuração *

    Bom, apesar de que não seja difícil de configurar, é necessário uma explicação, vamos lá...

1 - 


[19090] = { -- ID do action que ficará no portal da hunt
		{nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado
		{nome = "Demon 02", pos = {x = 93, y = 144, z = 7}},
		{nome = "Demon 03", pos = {x = 91, y = 140, z = 7}},
		{nome = "Demon 04", pos = {x = 94, y = 138, z = 7}},
		{nome = "Demon 05", pos = {x = 95, y = 136, z = 7}},
	},

Em [19090] este número de dentro é o actionID que ficará no portal. Com ele será identificado de qual monstro se trata, bastando apenas configurar este número e o nome das opções de monstros que você quer aparecendo na janela, em seguida, a posição na qual o jogador será teleportado, seguindo a ordem. Segue imagem de como deve ficar o seu portal:

Screenshot_71.png.d5bd967d26e4cd1b17c63f4a82e38a5d.png

 

 

OBS²: VOCÊ EDITA O ACTIONID NO SEU EDITOR DE MAPA COLOCANDO NO ID DO ITEM DE TELEPORTE.

OBS³: PARA ADICIONAR NOVAS HUNTS NO SCRIPT, BASTA SEGUIR O PADRÃO QUE ESTÁ NO CÓDIGO, DO 19090 PARA O 19091.

 

2 - (por fim)

Em data/movements/movements.xml

 


<movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" />

itemID = Id do item que o player andará para abrir a janela de hunt

Está como 5023 por conta que o magic forcefield é 5023, no qual utilizei para teste, aconselho você deixar da mesma forma (caso seja o mesmo id no seu servidor), ou mude, mas cuidado para não cometer algum erro.

 

Olá,

    Primeiramente obrigado pela ajuda.

 

eu fiz os passos que vc descreveu ai e qnd eu tento pular no tp, o boneco apenas anda pra tras do tp como se estivesse sendo empurrado, e nada acontece.

 

Fui olhar a distro e ta dando esse error lá

Spoiler

Lua Script Error: [MoveEvents Interface]
data/movements/scripts/others/mov_janela_hunts.lua:onStepIn
data/movements/scripts/others/mov_janela_hunts.lua:35: attempt to call global 'doPlayerSay' <a nil value>
stack traceback:
    [C]: in function 'doPlayerSay'
    data/movements/scripts/others/mov_janela_hunts.lua:35: in function <data/movements/scripts/others/mov_janela_hunts.lua:25>

Pelo oq eu pude observar, foi o unico error q deu.

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por LasseXeterno
      Então, estou tentando adicionar uma nova "race" no meu Ot de base Cyan, tentei seguir 3 tutoriais aqui do tibiaking, um sobre race, porém nos códigos do meu servidor não tem o constant.h e nem o monster.cpp. E o outro tutorial, eu fiz tudo que ele pediu e quando entrei no game para testar, funcionava os golpes e as imunidades, porém não aparecia o número do dano e nem a cor.  Usei esse tutorial como base: 
      Pois ele é derivado. E o outro tutorial que usei foi: 
      Porém nesse, não consegui achar a const.h, e quando fui nos arquivos do creaturescript e adicionei uma cor nova a "COLOR_FAIRY", quando abro o jogo, os pokemons que seriam teoricamente "fada", o que eu usei de teste foi a Clefable. A Clefable tomava IK e dava IK no seu atk do tipo fada. 
      Além de que, o meu erro principal é esse: Warning - Monsters::loadMonster] Unknown race type fairy. (data/monster/pokes/geracao 1/Clefable.xml)
       Pois como eu já disse, não consigo achar onde adicionar uma nova race.

    • Por yuriowns
      Salve rapazes, tranquilo? Preciso de ajuda pra colocar para os npc's que vendem pots verificarem quantos itens possuem no tile em que o player está e se tiver com +80 itens no sqm, o npc avisa e não vende nada até o player ir em um sqm com menos de 80 itens no chão.
       
    • Por A.Mokk
      .Qual servidor ou website você utiliza como base? 
      TFS 0.4
      Qual o motivo deste tópico? 
      Bom pessoal, a algumas semanas atras eu joguei um servidor que havia sistema de imbuimento sendo 8.60, no servidor se utilizava a spellwand para encantar as armas, os comandos eram dado no canal Imbuiment... Gostaria de saber se alguém teria como disponibilizar algum sistema de imbuimento, já procurei pra caramba aqui no fórum mas tudo que encontro é pra versões acima da que eu uso.
       
    • Por Mateus Robeerto
      Não sei se aqui é a área ou algum local para solicitar a alteração do email antigo... Não lembro mais a senha dele, nem a resposta secreta para acessar. Peço a algum administrador ou moderador para, por favor, alterar o email para o novo.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo