
Histórico de Curtidas
-
lordzetros recebeu reputação de gustavoadp em [Simples] Texto piscando no OTTexto piscando no seu OT server
Primeiramente pessoal, deverão criar um arquivo.lua com o nome 'texto.lua' sem as aspas. Logo depois, vão colar esse texto dentro do seu arquivo.lua
Explicação do script: Feito isso pessoal, vão em data/globalevents/globalevents.xml <- E cole esse código lá dentro: Imagem: É só isso pessoal -
lordzetros recebeu reputação de Nerivalhs em Alavanca de troca [X itens por Y itens]Olá,
Bom... teve um pedido no Discord da TK feito por algum usuário (não estou recordando o nome) que estava tendo dificuldades em fazer determinado script, então decidi fazê-lo. É algo simples, eu já tinha enviado lá no canal de suporte, porém, como já de conhecimento por muitos, o canal foi removido. Decidi refazer de uma forma melhor e mais prática.
* Sobre o Script *
Quando o jogador utilizar a alavanca para ganhar determinado(s) item(s), ele terá que ter deixado em POSIÇÕES DEFINIDAS alguns itens, sendo assim, possível efetuar a troca. Simples, não? Caso ainda não tenha entendido, tem imagem abaixo de como funciona o mesmo.
* Imagens demonstração *
Tentando efetuar a troca sem tá com os itens posicionados de forma correta...
Efetuando a troca de forma correta.
* Instalando o Script *
Em data/actions/scripts/ crie um arquivo chamado alavanca_troca.lua e cole isto dentro:
--[[ Lordzetros - TK ]] local config_itens = { {id = 2666, pos = {144,63,6}, count = 1}, -- ID DO ITEM NECESSÁRIO, POSIÇÃO QUE DEVE FICAR, QUANTIDADE DE ITEM NECESSÁRIO {id = 2667, pos = {145,63,6}, count = 1}, {id = 2671, pos = {146,63,6}, count = 1}, -- Caso queira colocar outro item, basta seguir esse modelo (ctrl + c) } local config_troca = { msg_falha = "Falha na troca do item. Necessario: %dx %s em sua devida posicao!", msg_sucesso = "A troca foi efetuada com sucesso!", recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}} -- Para deixar apenas uma recompensa, apenas deixe recompensas = {{id = ID_DO_ITEM_A_GANHAR, count = QUANTIDADE_A_GANHAR}} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local ax_t = {} for i, v in ipairs(config_itens) do local vt = Tile(Position(v.pos[1], v.pos[2], v.pos[3])) local item_t = vt:getItemById(v.id) if (not item_t or item_t:getCount() < v.count) then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(36, config_troca.msg_falha:format(v.count, ItemType(v.id):getName())) return false end table.insert(ax_t, {item_t, v.count}) end for i, v in ipairs(ax_t) do v[1]:remove(v[2]) end for i, v in ipairs(config_troca.recompensas) do player:addItem(v.id, v.count) end player:sendTextMessage(36, config_troca.msg_sucesso) player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED) return true end Em seguida, coloque esta linha de código abaixo de uma semelhante em data/actions/actions.xml
<action actionid="30258" script="alavanca_troca.lua" />
Para finalizar, abre seu editor de mapa e coloque em algum alavanca o actionID = 30258
* Configurando o Script *
Tá tudo comentado no código, portanto, vou falar só por cima.
{id = 2666, pos = {144,63,6}, count = 1}
Nesta parte, você deve colocar o id do item necessário, a posição que ele deve ficar e a quantidade.
E nesta parte você configura a recompensa do jogador
recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}}
Id do item que ele ganhará e quantidade
Enfim, script simples, porém, pode ser útil para muitos, assim como acredito que será para o usuário que solicitou, :). Abraços.
-
lordzetros recebeu reputação de Teddy Ursa em Alavanca que troca itensOlá pessoal da comunidade de Tibia!
Bom, hoje trouxe um pequeno e simples script, mas que pode ajudar muita gente. Vi alguns posts referindo aos NPCs que trocam determinados itens por outros, então tive a ideia de fazer algo que possa ter uma função semelhante e que funcione de uma maneira rápida. Fique à vontade em utilizá-la da maneira que quiser.
Como funciona?
O usuário vai usar a alavanca e irá adicionar um item em troca de outra item que você configurou no script. Em outras palavras, o usuário irá ganhar uma determinada quantidade de um item em troca de outra quantidade de um item diferente. (Tudo configurável)
VERSÃO TESTADA: 8.60 - OTX
--> Começando...
Crie um arquivo com nome de changeItem.lua no diretório data/actions/scripts/
Logo após, adicione esse código dentro do arquivo criado:
-- Script por Lordzetros para o forum Tibia King. local config = { itemNec = 2160, -- ID do item que necessita para efetuar a troca qtNec = 50, -- Quantidade do item que necessita para efetuar a troca itemNovo = 10137, -- ID do item que sera adicionado ao efetuar a troca qtNova = 1, -- Quantidade do item que sera adicionado ao efetuar a troca stor = 25869, -- Storage, ou seja, a numeracao que identificara se o usuario fez ou nao fez a quest ainda } function onUse(cid, item, fromPosition, itemEx, toPosition) pos = getPlayerPosition(cid) if getPlayerStorageValue(cid,config.stor) ~= -1 then doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"So eh permitido fazer a troca de itens apenas uma vez!") doSendMagicEffect(pos, CONST_ME_POFF) elseif getPlayerStorageValue(cid,config.stor) == -1 then if item.itemid == 1945 then if getPlayerItemCount(cid,config.itemNec) >= config.qtNec then doPlayerAddItem(cid, config.itemNovo,config.qtNova) doPlayerRemoveItem(cid,config.itemNec,config.qtNec) doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Voce acabou de trocar "..config.qtNec.." "..getItemNameById(config.itemNec).." por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_HOLYAREA) setPlayerStorageValue(cid, config.stor, 1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "Voce nao tem "..config.qtNec.." "..getItemNameById(config.itemNec).." para trocar por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_POFF) end end end end Em seguida, abra o arquivo com nome actions.xml que está localizada em data/actions/
E adicione essa linha de código no mesmo:
<action actionid="9139" event="script" value="changeItem.lua"/> Preste atenção, pois o actionid será o número que irá colocar na alavanca em seu editor de mapa, ou seja, no caso acima está como 9139, logo, na alavanca terá que está como a seguinte imagem:
Obs1.: Reparem que na imagem tem outro número destacado, que é o ID 1945, CERTIFIQUE-SE que a alavanca que irá utilizar no seu OT tenha esse mesmo ID, caso não tenha, basta mudar o número no código do script para o que irá utilizar no seu servidor.
Obs2.: O código está configurado para que o usuário efetue a troca APENAS 1 VEZ, caso queira que ele troque quantas vezes quiser, apenas remova o seguinte comando do código:
setPlayerStorageValue(cid, config.stor, 1) Obs3.: O resto que tinha que explicar está no próprio código, apenas faça um esforço de ler, agradeço.
É isso, pessoal, espero que goste e aproveite. Como falei antes, é um código simples, pois comecei agora com Script, pretendo avançar no nível e funções que os mesmos desempenham, isso é só o começo, leve isso como uma prática de uma atividade para iniciante em scripts.
-
lordzetros recebeu reputação de kingdj22 em Alavanca de troca [X itens por Y itens]Olá,
Bom... teve um pedido no Discord da TK feito por algum usuário (não estou recordando o nome) que estava tendo dificuldades em fazer determinado script, então decidi fazê-lo. É algo simples, eu já tinha enviado lá no canal de suporte, porém, como já de conhecimento por muitos, o canal foi removido. Decidi refazer de uma forma melhor e mais prática.
* Sobre o Script *
Quando o jogador utilizar a alavanca para ganhar determinado(s) item(s), ele terá que ter deixado em POSIÇÕES DEFINIDAS alguns itens, sendo assim, possível efetuar a troca. Simples, não? Caso ainda não tenha entendido, tem imagem abaixo de como funciona o mesmo.
* Imagens demonstração *
Tentando efetuar a troca sem tá com os itens posicionados de forma correta...
Efetuando a troca de forma correta.
* Instalando o Script *
Em data/actions/scripts/ crie um arquivo chamado alavanca_troca.lua e cole isto dentro:
--[[ Lordzetros - TK ]] local config_itens = { {id = 2666, pos = {144,63,6}, count = 1}, -- ID DO ITEM NECESSÁRIO, POSIÇÃO QUE DEVE FICAR, QUANTIDADE DE ITEM NECESSÁRIO {id = 2667, pos = {145,63,6}, count = 1}, {id = 2671, pos = {146,63,6}, count = 1}, -- Caso queira colocar outro item, basta seguir esse modelo (ctrl + c) } local config_troca = { msg_falha = "Falha na troca do item. Necessario: %dx %s em sua devida posicao!", msg_sucesso = "A troca foi efetuada com sucesso!", recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}} -- Para deixar apenas uma recompensa, apenas deixe recompensas = {{id = ID_DO_ITEM_A_GANHAR, count = QUANTIDADE_A_GANHAR}} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local ax_t = {} for i, v in ipairs(config_itens) do local vt = Tile(Position(v.pos[1], v.pos[2], v.pos[3])) local item_t = vt:getItemById(v.id) if (not item_t or item_t:getCount() < v.count) then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(36, config_troca.msg_falha:format(v.count, ItemType(v.id):getName())) return false end table.insert(ax_t, {item_t, v.count}) end for i, v in ipairs(ax_t) do v[1]:remove(v[2]) end for i, v in ipairs(config_troca.recompensas) do player:addItem(v.id, v.count) end player:sendTextMessage(36, config_troca.msg_sucesso) player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED) return true end Em seguida, coloque esta linha de código abaixo de uma semelhante em data/actions/actions.xml
<action actionid="30258" script="alavanca_troca.lua" />
Para finalizar, abre seu editor de mapa e coloque em algum alavanca o actionID = 30258
* Configurando o Script *
Tá tudo comentado no código, portanto, vou falar só por cima.
{id = 2666, pos = {144,63,6}, count = 1}
Nesta parte, você deve colocar o id do item necessário, a posição que ele deve ficar e a quantidade.
E nesta parte você configura a recompensa do jogador
recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}}
Id do item que ele ganhará e quantidade
Enfim, script simples, porém, pode ser útil para muitos, assim como acredito que será para o usuário que solicitou, :). Abraços.
-
lordzetros recebeu reputação de Capitao wyz em Baú SAO - Sistema de Quest* Sobre o Sistema da Quest *
Para quem já assistiu Sword Art Oline vai ficar fácil de entender. Jogadores poderão fazer uma quest simples, porém, diferenciada. Funciona da seguinte forma:
1 - Jogador terá que possuir uma chave para abrir o caminho de uma sala misteriosa e aparentemente cheia de tesouros e recompensas dentro de um baú
2 - Abrindo a passagem, ele vai se deparar com um baú em sua espera, o interesse do ser humano é devastador, ele irá abrir sim!
3 - Ao tentar abrir o baú, monstros serão invocados e a passagem será imediatamente fechada
4 - De todos os monstros que serão invocados, terá um chefe que será responsável por permitir a saída dos jogadores para sala de recompensa e sair daquele lugar, APENAS matando ele, isso será possível
5 - Após a morte do chefe, TODOS players na sala da quest serão teleportados para a área de recompensa configurada no script.
Obs.: A quest tá configurada para ser feita em X minutos para TODO servidor, ou seja, se uma guild fez a quest e você configurou para ela ser feita novamente em 10 minutos, então, nenhum outro player poderá fazer a quest nesse intervalo, pois a storage armazenada é a do servidor.
* Instalação *
VERSÃO TESTADA: 8.6 - TFS 0.4
Para agilizar o processo, deixei como anexo todos os arquivos necessários, devidamente separados e organizados, caso queira baixar, o ViruScan dele está logo abaixo.
Em data/actions/scripts/
1° - Crie um arquivo chamado keySAO.lua e cole o seguinte código dentro:
--[[ Script - Lordzetros Tibiaking - Lordzetros ]]-- local config = { parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente tempoFechar = 1, -- MINUTOS para a passagem fechar, caso não entrem APÓS abrirem a passagem } function remover_parede(conf) local parede = getTileItemById(conf.parede.pos, conf.parede.id) if (parede) then doRemoveItem(parede.uid, 1) doSendMagicEffect(conf.parede.pos, 10) end return true end function adicionar_parede(conf) local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end return true end function onUse(cid, item, fromPos, item2, toPos) if (item2.itemid == config.parede.id) then if (getGlobalStorageValue(config.strPassagem.storage) >= os.time()) then return doCreatureSay(cid, 'Precisa esperar ' .. config.strPassagem.tempo .. ' minuto para fazer a quest!', TALKTYPE_ORANGE_1) end doRemoveItem(item2.uid, 1) doSendMagicEffect(config.parede.pos, 10) doCreatureSay(cid, "A passagem foi aberta por "..getPlayerName(cid).."! Peguem a recompensa no bau, depressa!", TALKTYPE_ORANGE_1) doPlayerSendCancel(cid, "A passagem ira fechar em " ..config.tempoFechar.. " minuto!") addEvent(function() adicionar_parede(config) end, config.tempoFechar * 60 * 1000) doRemoveItem(item.uid, 1) end return true end
Em seguida, crie outro arquivo no mesmo local com o nome de bauSAO.lua e cole o código dentro:
--[[ Script - Lordzetros Tibiaking - Lordzetros ]] local mti = { [1] = {nome = 'Demon', pos = {x=955, y=935, z=6}}, -- [numero] = {nome = 'Nome Monstro', pos = 'POSICAO QUE IRÁ RESPAWNAR O MONSTRO'} [2] = {nome = 'Demon', pos = {x=955, y=936, z=6}}, [3] = {nome = 'Demon', pos = {x=955, y=937, z=6}}, [4] = {nome = 'Demon', pos = {x=955, y=938, z=6}}, [5] = {nome = 'Demon', pos = {x=955, y=939, z=6}}, [6] = {nome = 'Demon', pos = {x=955, y=940, z=6}}, [7] = {nome = 'Demon', pos = {x=964, y=935, z=6}}, [8] = {nome = 'Demon', pos = {x=964, y=936, z=6}}, [9] = {nome = 'Demon', pos = {x=964, y=937, z=6}}, [10] = {nome = 'Demon', pos = {x=964, y=938, z=6}}, [11] = {nome = 'Demon', pos = {x=964, y=939, z=6}}, [12] = {nome = 'Demon', pos = {x=964, y=940, z=6}}, [13] = {nome = 'Loki', pos = {x=959, y=940, z=6}}, } local config = { unique = 17458, -- uniqueID que vai colocar no BAÚ no seu EDITOR DE MAPA! parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente } function adicionar_parede(conf) local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end return true end function onUse(cid, item, fromPos, item2, toPos) if (item.uid == config.unique) then if (getGlobalStorageValue(config.strPassagem.storage) >= os.time()) then return doCreatureSay(cid, 'Precisa esperar ' .. config.strPassagem.tempo .. ' minuto para fazer a quest!', TALKTYPE_ORANGE_1) end doCreatureSay(cid, "Argh!! Sala com armadilha.", TALKTYPE_ORANGE_1) adicionar_parede(config) for _, cf in pairs(mti) do doSummonCreature(cf.nome, cf.pos) end setGlobalStorageValue(config.strPassagem.storage, os.time() + config.strPassagem.tempo * 60) end return true end Adicione as seguintes linhas de código em data/actions/actions.xml
<action uniqueid="17458" event="script" value="bauSAO.lua"/> <action itemid="IDdaKEY" event="script" value="keySAO.lua" /> 2° - Agora em data/creaturescripts/scripts
Crie um arquivo chamado tpSAO.lua e cole o código dentro:
--[[ Script - Lordzetros Tibiaking - Lordzetros ]] local config = { SupEsquerdo = {x=953, y=930, z=6}, -- posicao do canto SUPERIOR ESQUERDO da área que ficará a quest InfDireito = {x=966, y=941, z=6}, -- posicao do canto INFERIOR DIREITO da área que ficará a quest chefe = "Loki", -- Nome do BOSS, responsável por abrir passagem e liberar a recompensa no baú parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- id da parede ||||| posicao dela posPremio = {x = 1263, y = 1128, z = 7}, -- posicao para area de recompensa quando os players matarem o boss msgSucesso = "Parabéns por passarem do desafio! Agora permitirei pegar algumas recompensas como reconhecimento de um otimo guerreiros que es!" -- Mensagem quando os players conseguirem matar o boss da sala } function getAllPlayersInArea(fromPosition, toPosition) local players = {} for _, pid in ipairs(getPlayersOnline()) do local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z} local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z} local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z) for index = 0, math.abs(toPosition.z - fromPosition.z) do f.z = min + index t.z = min + index if (isInRange(getPlayerPosition(pid), f, t)) then table.insert(players, pid) end end end return players end function remover_parede(conf) local parede = getTileItemById(conf.parede.pos, conf.parede.id) if (parede) then doRemoveItem(parede.uid, 1) doSendMagicEffect(conf.parede.pos, 10) end return true end function adicionar_parede(conf) local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end return true end function onDeath(cid) local boss = getCreatureName(cid) == config.chefe if boss then doCreatureSay(cid, config.msgSucesso, TALKTYPE_ORANGE_1) doSendMagicEffect(getCreaturePosition(cid), 49) addEvent(function() local players = getAllPlayersInArea(config.SupEsquerdo, config.InfDireito) for _, jogador in ipairs(players) do doTeleportThing(jogador, config.posPremio) doSendMagicEffect(getPlayerPosition(jogador), 11) end end, 7000) end return true end Adicione a seguinte linha de código em data/creaturescripts/creaturescripts.xml
<event type="death" name="tpSao" script="tpSAO.lua"/> Em data/creaturescripts/scripts/login.lua adicione esta linha de código abaixo do último registerCreatureEvent
3° - Por fim, agora escolhe um monstro que será o chefe responsável por permitir que os jogadores saiam do local e que leve-os até a sala de recompensa após o derrotarem.
Escolheu? Show, agora vá até o diretório dele em data/monster/pastaDoSeumonstro/arquivoDoSeuMonstro.xml e adicione essas linhas de códigos abaixo de alguma tag, no meu caso, utilizei abaixo da tag flags
<script> <event name="tpSao"/> </script> Segue foto para melhor entendimento:
* Explicação da configuração *
Bom, apesar de está TUDO COMENTADO e AJUSTÁVEL, acho importante dá algumas explicações:
1 - Configurou tudo nas pastas corretamente, colocou todas linhas de códigos necessárias e explicadas? Beleza, você tá quase lá.
2 - Coloque em um baú no seu editor de mapa um UNIQUEID que será responsável por identificar que aquele BAÚ é da quest, segue imagem:
Aconselho não modificar o valor, pois é muito improvável que já esteja sendo utilizado em seu servidor.
3 - Agora entrando na parte dos scripts:
No arquivo keySAO.lua localizado em data/actions/scripts/
local config = { parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente tempoFechar = 1, -- MINUTOS para a passagem fechar, caso não entrem APÓS abrirem a passagem } Configure o id da parede que impedirá a passagem dos players e o jogador utilizará a chave nela para passar! Não esqueça de configurar a posição dela também, deixe a mesma que você colocou no mapa.
Configure o storage que será responsável por permitir ou não jogadores fazerem a quest em X minutos.
Configure o tempo que o player terá para passar para dentro da sala antes que a passagem se feche, no script tá 1 minuto.
No arquivo bauSAO.lua localizado em data/actions/scripts/
local mti = { [1] = {nome = 'Demon', pos = {x=955, y=935, z=6}}, -- [numero] = {nome = 'Nome Monstro', pos = 'POSICAO QUE IRÁ RESPAWNAR O MONSTRO'} [2] = {nome = 'Demon', pos = {x=955, y=936, z=6}}, [3] = {nome = 'Demon', pos = {x=955, y=937, z=6}}, [4] = {nome = 'Demon', pos = {x=955, y=938, z=6}}, [5] = {nome = 'Demon', pos = {x=955, y=939, z=6}}, [6] = {nome = 'Demon', pos = {x=955, y=940, z=6}}, [7] = {nome = 'Demon', pos = {x=964, y=935, z=6}}, [8] = {nome = 'Demon', pos = {x=964, y=936, z=6}}, [9] = {nome = 'Demon', pos = {x=964, y=937, z=6}}, [10] = {nome = 'Demon', pos = {x=964, y=938, z=6}}, [11] = {nome = 'Demon', pos = {x=964, y=939, z=6}}, [12] = {nome = 'Demon', pos = {x=964, y=940, z=6}}, [13] = {nome = 'Loki', pos = {x=959, y=940, z=6}}, } local config = { unique = 17458, -- uniqueID que vai colocar no BAÚ no seu EDITOR DE MAPA! parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente } Configure os nomes e posições que os monstros irão respawnar, e repare que deixei apenas 1 diferenciado chamado 'Loki', pois foi o monstro que escolhi como CHEFE
Configure o uniqueID que será utilizado no baú, recomendo não mexer nessa parte
Configure novamente o ID da parede que irá bloquear a passagem e a mesma posição (use a mesma coisa da configuração anterior)
Configure novamente o storage e tempo que permitirá os jogadores fazerem a quest em X minutos (use a mesma coisa da configuração anterior)
No arquivo tpSAO.lua em data/creaturescripts/scripts/
local config = { SupEsquerdo = {x=953, y=930, z=6}, -- posicao do canto SUPERIOR ESQUERDO da área que ficará a quest InfDireito = {x=966, y=941, z=6}, -- posicao do canto INFERIOR DIREITO da área que ficará a quest chefe = "Loki", -- Nome do BOSS, responsável por abrir passagem e liberar a recompensa no baú parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- id da parede ||||| posicao dela posPremio = {x = 1263, y = 1128, z = 7}, -- posicao para area de recompensa quando os players matarem o boss msgSucesso = "Parabéns por passarem do desafio! Agora permitirei pegar algumas recompensas como reconhecimento de um otimo guerreiros que es!" -- Mensagem quando os players conseguirem matar o boss da sala } Configure o canto superior esquerdo e inferior direito, é de EXTREMA importância isso, pois será responsável por verificar os jogadores na sala da quest e teleportá-los, segue imagem:
Coloque as posições corretamente de cada canto.
Configure o nome do chefe que você escolheu para completar a quest, o monstro diferenciado que falamos lá em cima, certo?
Configure novamente o ID da parede que irá bloquear a passagem e a mesma posição (use a mesma coisa da configuração anterior)
Configure a posição do prêmio, isto é, a posição que o player será teleportado quando matar o CHEFE, a posição da SALA DE RECOMPENSAS ou seja lá o que queira fazer após os jogadores matarem o chefe.
Configure a mensagem, caso queira, de quando os jogadores matarem o CHEFE da sala.
* Observações finais e anexos para download *
Digo logo que é um script simples, porém bastante trabalhoso de ser configurado, visto que faz-se necessário a instalação de alguns arquivos, mas não deixa de ser simples!
A ideia que tive foi quando estava lembrando do anime, e como estou voltando aos poucos com Tibia (aprendendo bastante), tive a ideia de fazer isso, pois como gostava bastante de jogar em Baiak e modos semelhantes, isso daqui pode ser bastante útil. Ah! E deixe-me alertá-lo, é um sistema simples que não está 100% como eu desejava, portanto, quando tiver tempo estarei atualizando e deixando com mínimo de incoerência possível no funcionamento dele.
POR FAVOR, faça o trabalho de ler as configurações do script, está tudo organizadinho para que você configure lá e deixe da maneira mais prática possível. Acredito que isso é tudo, abraços, \o.
Download dos arquivos zipados: Arquivos - Quest Baú SAO - Lordzetros.zip
Scan do arquivo: https://www.virustotal.com/pt/file/10e6bf2be0ccb33838a75198e5f822c1c8888f4c8652dcfc5235f87260a7582a/analysis/1540133843/
-
lordzetros recebeu reputação de PokeWR em Remover item de um playerBom, como o título já informa, o script faz com que você remova um item do inventário de algum player online.
Versão: 8.6 - TFS 0.4
Em data\talkactions\scripts crie um arquivo chamado removerItem (lembrando que deve ser .lua, caso não saiba criar um, copie algum já existente e cole, após isso, mude o nome do arquivo e cole o código dentro)
--[[ Script feito por Lordzetros para o fórum Tibia King ]] function onSay(cid, words, param) pos = getPlayerPosition(cid) if (param == '') then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O comando necessita de parametros (nomePlayer,idItem,quantidade). Ex.: /remover Bugador,2160,100") if (not isPlayerGhost(cid)) then doSendMagicEffect(pos, CONST_ME_POFF) end return true end local aux = string.explode(param, ",") local pid = getPlayerByNameWildcard(aux[1]) if (not pid) then return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player " .. aux[1] .. " nao encontrado.") elseif (getPlayerAccess(pid) > getPlayerAccess(cid)) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce nao pode remover itens de um superior seu.") doPlayerSendTextMessage(pid, MESSAGE_INFO_DESCR, "O membro da staff " ..getCreatureName(cid).. " tentou remover um item de voce!") return true end aux[1] = aux[1]:lower() local qntd = 1 if(aux[3]) then if (tonumber(aux[3]) <= 0) then return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Nao eh permitido valores nulos/negativos! Caso queira remover apenas 1x, use /remover Player,idItem") else qntd = aux[3] end end if (doPlayerRemoveItem(pid, tonumber(aux[2]), qntd) == TRUE) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Removido " ..qntd.. "x " ..getItemNameById(aux[2]).. " do player "..aux[1]) posPlayer = getCreaturePosition(pid) doSendMagicEffect(posPlayer, CONST_ME_PLANTATTACK) doCreatureSay(pid,"O membro da staff " ..getCreatureName(cid).. " removeu " ..qntd.. "x " ..getItemNameById(aux[2]).." de seu inventario!", TALKTYPE_ORANGE_1) return true else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O Player " ..aux[1].. " nao tem o item ou a quantidade do item informada em seu inventario.") end return true end Salve o arquivo no qual colocou o código, após isso navegue até data\talkactions\ e abra o arquivo talkactions.lua, e coloque este trecho de código onde quiser:
<talkaction log="yes" access="3" words="/remover" event="script" value="removerItem.lua"/> Feito isso, salve o mesmo e já pode testar no seu servidor.
Obs1.: Repare que o acesso está definido como 3, ou seja, GM para cima. (mude se quiser)
Comando na prática: /remover nomePlayer,idItem,qntd
Imagens:
1
2
3
4
Enfim, é isso pessoal, script simples, porém, pode servir para algum tibiano interessado.
-
lordzetros recebeu reputação de cs007 em Fly System com modal 1.3Introdução
Estive procurando no fórum e não encontrei esse sistema de TP para versões com modal, aliás, até achei um semelhante, só que possuía algumas instabilidades e também com uma ideia de waypoints (que estava também fazendo dessa forma, mas não vem ao caso o motivo disso não ser viável no Tibia). O que trago aqui é algo mais simples, porém o necessário.
O sistema de TP é muito importante em alguns servidores que fogem um pouco de RPG (não que seja exclusivamente para estes), ele possibilita viagens de um local para outro em instantes, como por exemplo, do Templo para o Depot ou para qualquer outra localização configurada no script (a seu gosto). Uma coisa adicional que coloquei no script, foi de listar também a house do jogador que utilizar o comando, onde você poderá configurar se será necessário pagar ou não para o mesmo ser teleportado, enfim, dê uma olhada no código depois, tá tudo comentado.
Informações do sistema
- Locais configuráveis
- Configurável se é necessário pagar ou não para determinado local
- Configurável a quantidade de dinheiro de cada local
- Condições ao utilizar o comando (Protect Zone e tempo para utilizar o comando novamente)
- É requisitado o jogador está possuindo a quantia necessária para o teleport
Instalação
1 - crie um arquivo chamado teleportSystem.lua em data/talkactions/scripts/ e cole o código abaixo:
2 - Em seguida, cole este trecho de código em data/talkactions/talkactions.xml abaixo de algum semelhante:
3 - Agora crie um arquivo chamado modalTpSystem.lua em data/creaturescripts/scripts/ e cole o código abaixo nele:
4 - E para finalizar, cole este código em data/creaturescripts/creaturescripts.xml abaixo de um semelhante:
Explicação do script
A única coisa que você vai mexer é no teleportSystem, onde terá a opção de configurar os preços, locais, etc.
Configurando as houses:
houses_modal = Se será habilitado o player teleportar para a house dele
house_pago = Se será pago o teleport para a house
house_custo = Custo do teleport para a house, caso seja pago
Configurando o local:
nome = Nome do local a ser mostrado na janela
pago = Se ele vai ser pago ou não, coloque false caso queira que não cobre nada do jogador
custo = Caso tenha colocado como pago, o custo do teleport para o local
pos = Posição do local (X,Y,Z)
Quando for adicionar outro, copie esta mesma parte acima e altera o número [3] para [4] e os outros dados também, assim por diante.
O restante também tá explicado no script, basta ler.
Demonstração
UTILIZE O COMANDO !fly
Enfim, script simples, tem para outras versões, mas como falei, não tinha encontrado ainda para 1.x com esse funcionamento. Qualquer coisa, só comentar, .
-
lordzetros recebeu reputação de nizin em [Pedido] Clickar Item vira outro itemCrie um arquivo em data/actions/scripts/ chamado de trocaItem.lua com o seguinte código:
-- Lordzetros p/ Forum Tibia King local config = { oldItem = 2152, -- ID do item antigo que ira ser transformado oldCount = 100, -- Quantidade necessaria para transformar o antigo item newItem = 2160, -- ID do novo item ao ser transformado 100 unidades newCount = 1, -- quantidade que ira ser adicionado do novo item } function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == config.oldItem and item.type == config.oldCount then doPlayerAddItem(cid,config.newItem,config.newCount) doRemoveItem(item.uid,item.type) doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Voce transformou "..item.type.." "..getItemNameById(item.itemid).." em "..config.newCount.." "..getItemNameById(config.newItem)..".") doSendMagicEffect(getPlayerPosition(cid),25) else return false end return true end E em seguida vá em data/actions e abra actions.xml. Adicione esse código no mesmo:
<action itemid="IDdoItemParaTransformar" script="trocaItem.lua" /> IDdoItemParaTransformar -> No script tá 2152, é só alterar para o que você colocou aí, enfim, tá tudo explicado no script.
Qualquer dúvida só falar, :).
-
lordzetros recebeu reputação de Seitron em [TFS 1.3] TARO EVENT - Novo evento para OT* Apresentação *
Bom, galera, tá tudo explicado no vídeo de como funciona o evento [Manual e Automático], como configurar o arquivo e tudo mais.
Arquivos do evento estão anexado no tópico, assim como o vírus scan também, :).
* Vídeo *
* Comandos *
!taro abrir
Utilizado por staffs para abrir o evento [Manual]
!taro fechar
Utilizado por staffs para fechar o evento [Manual]
!taro encerrar
Utilizado por staffs para encerrar o evento [Manual]
!taro kick,nome_jogador
Utilizado por staffs e PLAYERS para kickar alguém do evento
* Links *
Vírus scan: https://www.virustotal.com/pt/file/7b30879de2745ef020a06de135dae7bd80673eb0d5d2f80b22b1f2a6db5158e0/analysis/1548894947/
Download: Taro Event - Lordzetros.zip
Dúvidas, sugestões, críticas ou bugs? Deixe abaixo,
-
lordzetros recebeu reputação de Delkdors em Problema com sistema de tp via Modal WindowSubstitua seu talkaction por este:
-- Em talkactions local modaldialog = { title = "Quick Access", message = "Where are you going?", buttons = { { id = 1, text = "Go" }, { id = 2, text = "Cancel" }, }, buttonEnter = 1, buttonEscape = 2, choices = { { id = 1, text = "Dorion" }, { id = 2, text = "Thais" }, { id = 3, text = "Mirand Theraan" }, { id = 4, text = "Saari" }, { id = 5, text = "Alfon" }, { id = 6, text = "Venonh" }, { id = 7, text = "Infernium" }, { id = 8, text = "Anknor" }, { id = 9, text = "Yalahar" }, { id = 10, text = "Smallville" }, { id = 11, text = "Flam" }, { id = 12, text = "Farmine" }, { id = 13, text = "Roshamuul" }, { id = 14, text = "Gray Island" }, { id = 15, text = "Goroma" } }, popup = false } function onSay(player, words, param) if (Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE)) then modalWindow = ModalWindow(1003, modaldialog.title, modaldialog.message) if modalWindow:getId() == 1003 then for _, v in ipairs(modaldialog.buttons) do modalWindow:addButton(v.id, v.text) end for _, v in ipairs(modaldialog.choices) do modalWindow:addChoice(v.id, v.text) end modalWindow:setDefaultEnterButton(modaldialog.buttonEnter) modalWindow:setPriority(modaldialog.popup) modalWindow:setDefaultEscapeButton(modaldialog.buttonEscape) end modalWindow:sendToPlayer(player) player:registerEvent("ModalTP") else player:sendCancelMessage("You need to be in a safe zone to use teleport system.") end return false end
-
lordzetros recebeu reputação de robson pablo dos san em [TFS 1.3] TARO EVENT - Novo evento para OT* Apresentação *
Bom, galera, tá tudo explicado no vídeo de como funciona o evento [Manual e Automático], como configurar o arquivo e tudo mais.
Arquivos do evento estão anexado no tópico, assim como o vírus scan também, :).
* Vídeo *
* Comandos *
!taro abrir
Utilizado por staffs para abrir o evento [Manual]
!taro fechar
Utilizado por staffs para fechar o evento [Manual]
!taro encerrar
Utilizado por staffs para encerrar o evento [Manual]
!taro kick,nome_jogador
Utilizado por staffs e PLAYERS para kickar alguém do evento
* Links *
Vírus scan: https://www.virustotal.com/pt/file/7b30879de2745ef020a06de135dae7bd80673eb0d5d2f80b22b1f2a6db5158e0/analysis/1548894947/
Download: Taro Event - Lordzetros.zip
Dúvidas, sugestões, críticas ou bugs? Deixe abaixo,
-
lordzetros recebeu reputação de ITALOx em Alavanca que troca itensOlá pessoal da comunidade de Tibia!
Bom, hoje trouxe um pequeno e simples script, mas que pode ajudar muita gente. Vi alguns posts referindo aos NPCs que trocam determinados itens por outros, então tive a ideia de fazer algo que possa ter uma função semelhante e que funcione de uma maneira rápida. Fique à vontade em utilizá-la da maneira que quiser.
Como funciona?
O usuário vai usar a alavanca e irá adicionar um item em troca de outra item que você configurou no script. Em outras palavras, o usuário irá ganhar uma determinada quantidade de um item em troca de outra quantidade de um item diferente. (Tudo configurável)
VERSÃO TESTADA: 8.60 - OTX
--> Começando...
Crie um arquivo com nome de changeItem.lua no diretório data/actions/scripts/
Logo após, adicione esse código dentro do arquivo criado:
-- Script por Lordzetros para o forum Tibia King. local config = { itemNec = 2160, -- ID do item que necessita para efetuar a troca qtNec = 50, -- Quantidade do item que necessita para efetuar a troca itemNovo = 10137, -- ID do item que sera adicionado ao efetuar a troca qtNova = 1, -- Quantidade do item que sera adicionado ao efetuar a troca stor = 25869, -- Storage, ou seja, a numeracao que identificara se o usuario fez ou nao fez a quest ainda } function onUse(cid, item, fromPosition, itemEx, toPosition) pos = getPlayerPosition(cid) if getPlayerStorageValue(cid,config.stor) ~= -1 then doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"So eh permitido fazer a troca de itens apenas uma vez!") doSendMagicEffect(pos, CONST_ME_POFF) elseif getPlayerStorageValue(cid,config.stor) == -1 then if item.itemid == 1945 then if getPlayerItemCount(cid,config.itemNec) >= config.qtNec then doPlayerAddItem(cid, config.itemNovo,config.qtNova) doPlayerRemoveItem(cid,config.itemNec,config.qtNec) doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Voce acabou de trocar "..config.qtNec.." "..getItemNameById(config.itemNec).." por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_HOLYAREA) setPlayerStorageValue(cid, config.stor, 1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "Voce nao tem "..config.qtNec.." "..getItemNameById(config.itemNec).." para trocar por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_POFF) end end end end Em seguida, abra o arquivo com nome actions.xml que está localizada em data/actions/
E adicione essa linha de código no mesmo:
<action actionid="9139" event="script" value="changeItem.lua"/> Preste atenção, pois o actionid será o número que irá colocar na alavanca em seu editor de mapa, ou seja, no caso acima está como 9139, logo, na alavanca terá que está como a seguinte imagem:
Obs1.: Reparem que na imagem tem outro número destacado, que é o ID 1945, CERTIFIQUE-SE que a alavanca que irá utilizar no seu OT tenha esse mesmo ID, caso não tenha, basta mudar o número no código do script para o que irá utilizar no seu servidor.
Obs2.: O código está configurado para que o usuário efetue a troca APENAS 1 VEZ, caso queira que ele troque quantas vezes quiser, apenas remova o seguinte comando do código:
setPlayerStorageValue(cid, config.stor, 1) Obs3.: O resto que tinha que explicar está no próprio código, apenas faça um esforço de ler, agradeço.
É isso, pessoal, espero que goste e aproveite. Como falei antes, é um código simples, pois comecei agora com Script, pretendo avançar no nível e funções que os mesmos desempenham, isso é só o começo, leve isso como uma prática de uma atividade para iniciante em scripts.
-
lordzetros recebeu reputação de Lyu em Bot Discord Integrado com ServidorBacana! Quando estava ligado a um projeto, pensei em fazer algo bem semelhante, isso vai se tornar algo banal daqui alguns anos, acho importante servidores fazerem esse tipo de integração o quanto antes, sem contar que hoje em dia é um diferencial e muitos players utilizam Discord. Parabéns.
-
lordzetros deu reputação a mastof em Bot Discord Integrado com ServidorSistema de Denuncias no servidor, faz verificação para ver se o Player realmente existe no servidor do PokeTibia e a verificação se o player esta no servidor do Discord
Funcionamento:
O player reporta um jogador, podendo por provas, e o player reportado pode se defender da mesma forma atualizando a denuncia
-
lordzetros recebeu reputação de Katiau em [TFS 1.3] Teleport com janelaTFS 1.3 - TESTADO EM VERSÃO 10.98
* Introdução *
Bom, estive navegando no Fórum e vi que o usuário @Cleiton Felipi pediu um script que ao player entrasse no teleport de um X monstro, um Demon por exemplo, listasse qual hunt o jogador queria entrar. Achei interessante, e resolvi desenvolver e postar no TK, já que não tinha ainda, :).
* Sobre o sistema *
Você utiliza diversas hunts com vários tps criados no mapa no seu servidor do mesmo monstro? Bom, este script será muito útil para você! Pois ele permitirá que você habilite ao jogador em qual hunt ele quer caçar, por exemplo, se tiver Demon 01, Demon 02, Demon 03, Demon X, basta apenas você criar um tp indicando o monstro e que uma janela irá aparecer com a lista de opções de hunts, prático, né? Segue imagens de demonstração:
OBS¹.: Você pode colocar TODOS OS MONSTROS neste script, contando que tenha o actionID que ficará no teleporte, não é de uma quantidade limitada, em outras palavras, você pode adicionar as hunts de Demon, Frost Dragon, Dragon, ..., tudo aqui, apenas mudando o actionID (tudo configurável, não se preocupe).
* Instalação *
Em data/movements/scripts/ crie um arquivo chamado mov_janela_hunts.lua e adicione dentro:
--[[ Script - Lordzetros Fórum Tibia King ]] 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) 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:
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.
Enfim, algo simples, porém não encontrei no TK.
Abraços.
-
lordzetros deu reputação a WooX em Classic-Yurots [8.60] - Push Cruzado + Cast com SetasClassic Yurots
V 8.60
Eu acompanhei de perto o desenvolvimento deste servidor e sabia que sairia coisa boa dali, mas só quando obtive acesso aos arquivos que pude entender a dimensão do negocio, sendo assim, eu posso afirmar que este é um dos se não o melhor datapack baseado no antigo YurOTS. O datapack está limpo, você não vai encontrar um script em qualquer uma das pastas que não esteja em uso no servidor, alem disto muito tempo foi gasto reescrevendo e revisando os scripts do servidor para garantir máxima performance.
Os mais novos em OpenTibia talvez não saibam, mas os famosos Baiaks e Styllers de hoje em dia foram baseados neste mapinha que teve seu inicio já na versão 7.5 e seu declínio nas versões 8.4 onde foi visto pela ultima vez devido ao surgimento de derivados do mesmo (Baiak e Styller). Devido ao fato dos mapas Baiak e Styller serem derivados do YurOTS, se você tem um projeto de mapa Baiak ou Styller, este é um excelente datapack para você usar como base.
Por que o servidor está sendo postado?
Este servidor foi desenvolvido ao longo de 2 anos pelo Wesley (conhecido aqui no fórum como @KOLISAO), alguns meses atrás o servidor foi finalizado e colocado online, embora hoje em dia, sem contato com times de jogadores, é difícil popular um servidor novo e sem nome logo na abertura, com isso a inauguração não foi como esperado e conseguiu uma média de apenas 30 jogadores. Frustado por 2 anos de muito trabalho não dar o resultado esperado, ele decidiu desistir do servidor, foi então que eu fiz uma proposta em troca do servidor e obtive acesso ao mesmo.
O que eu não sabia na época era que outras duas pessoas alem de mim tiveram acesso a todos os arquivos, uma dessas pessoas é um amigo do próprio Wesley na vida real, ele conversou com este amigo e deletou os arquivos do computador dele. A segunda pessoa em questão, eu não tenho certeza de como obteve estes arquivos, mas ele atualmente está vendendo estes arquivos sem autorização.
Quando fiquei ciente disto, entrei em contato com o Wesley e o informei sobre o que estava acontecendo, ele ficou surpreso e revoltado por alguém estar lucrando em cima de seus esforços. Neste momento pedi permissão a ele para postar o servidor aqui no fórum, e ele me concedeu.
Informações sobre o servidor
Como dito anteriormente, muito tempo foi gasto neste servidor e tudo foi feito com o maior cuidado possivel. Vou deixar aqui as informações sobre o que contem no servidor, informações que foram divulgadas pelo próprio Wesley na data de inauguração.
Vídeo com algumas Quests do servidor
Outras informações podem ser encontradas no tópico de show-off do período em que o servidor ainda estava em desenvolvimento.
Extra + Créditos
Juntamente com o servidor estarei postando a source e o site do mesmo, porem o site será postado em um tópico diferente devido a esta não ser a área correta do fórum para isso. A source do servidor é OTX2, foram feitas pequenas modificações na source para melhor formatação em partes do datapack, como QuestLog e outros.
Edit 29/11
Além disto, a source também possui 2 sistemas muito procurados que até o presente momentos não eram públicos, sendo estes Push Cruzado e Cast com Setas. Ambos os sistemas já estão instalados na source, porem futuramente irei postar ambos os códigos juntamente com tutorial de instalação para os que quiserem adicionar por si mesmos.
Créditos
Como já mencionei diversas vezes neste tópico, o responsável pelo desenvolvimento do servidor e site foi o @KOLISAO, portanto todos os créditos nesta parte vão para ele.
Eu fui o responsável por adicionar o Push Cruzado na source e fazer uma pequena modificação no Cast com Setas.
Obs: quando eu obtive acesso aos arquivos o Cast com Setas já estava instalado na source, eu não tenho informação se o código foi desenvolvido por ele ou por um terceiro.
Links para Download
Servidor
Download - Scan
Source
Download - Scan
Distro compilada para Windows
32x - TheOTXServer.exe - Scan
64x - TheOTXServer_64.exe - Scan
DLLs
dll.zip - Scan
Site
-
lordzetros deu reputação a Cat em Sistema de teleports por waypoints (descobrir áreas no mapa)Waypoint teleport system é um dispositivo de teletransporte. O principal objetivo de um waypoint é fornecer viagens rápidas entre as áreas que um jogador descobriu. Esse sistema foi desenvolvido por Oen432. (Apenas traduzi)
Demonstração:
Instalação
Abra data/movements/movements.xml. Adicione XML: <movevent event="StepIn" actionid="4236" script="waypoints.lua" /> Abra data/creaturescripts/creaturescripts.xml. Adicione XML: <event type="ModalWindow" name="WaypointsModal" script="modal_windows.lua"/> Faça o Download de waypoints.rar abaixo, no final do tópico. Copie waypoints.lua para data/movements/scripts/waypoints.lua. Copie modal_windows.lua para data/creaturescripts/scripts/modal_windows.lua.
Configuração Todas as configurações estão em - data/movements/scripts/waypoints.lua.
WINDOW_ID - ignore.
BUTTON_ACCEPT - ignore.
BUTTON_CLOSE - ignore.
WAYPOINTS_STORAGE - base storage id, mude se já está sendo usado esse (garanta que de WAYPOINTS_STORAGE para WAYPOINTS_STORAGE + Number of waypoints, as storages não estejam sendo utilizadas em outro código).
WAYPOINTS - lista de waypoints disponíveis
name - nome que será mostrado na lista e quando o waypoint for ativado
position - posição do piso no mapa, aqui é onde o jogador será teleportado
Download
waypoints-1_0_0.rar
-
lordzetros deu reputação a Pedriinz em Auto Loot Sytem for TFS 1.3 + revscriptsDepois de milhões de anos sem programar porcaria nenhuma... Eu desenvolvi este sistema como um método de estudo. (C++)
Este sistema foi inspirado no Auto Loot System por @psychonaut. (OTland)
Criei o mesmo na versão mais recente do tfs.
Auto Loot System for TFS 1.3
Como funciona?
Simples, quando você mata um monstro e abre o corpo (você precisa clicar no corpo), os itens vão para o seu personagem.
Instalando
em actions.cpp, encontre:
if (corpseOwner != 0 && !player->canOpenCorpse(corpseOwner)) { return RETURNVALUE_YOUARENOTTHEOWNER; } e mude isso para:
if (corpseOwner != 0 && !player->canOpenCorpse(corpseOwner)) { return RETURNVALUE_YOUARENOTTHEOWNER; } else { if (player->canOpenCorpse(corpseOwner) && player->autoLootList.size() != 0) { if (player->getCapacity() > 100 * 100) { //Minimum of Capacity for autoloot works. (100 CAP) for (Item* item : container->getItemList()) { if (player->getItemFromAutoLoot(item->getID())) { std::ostringstream msgAutoLoot; msgAutoLoot << "You looted a " << item->getItemCount() << "x " << item->getName() << "."; g_game.internalMoveItem(container, player, CONST_SLOT_WHEREEVER, item, item->getItemCount(), nullptr); player->sendTextMessage(MESSAGE_INFO_DESCR, msgAutoLoot.str()); } } } else { player->sendTextMessage(MESSAGE_INFO_DESCR, "Sorry, you don't have enough capacity to use auto loot, so it has been disabled. (100+ capacity is required)"); } } } em player.h, abaixo de:
std::unordered_set<uint32_t> VIPList; adicione isso:
std::set<uint32_t> autoLootList; ainda em player.h encontre:
bool hasLearnedInstantSpell(const std::string& spellName) const; adicione em baixo:
void addItemToAutoLoot(uint16_t itemId); void removeItemFromAutoLoot(uint16_t itemId); bool getItemFromAutoLoot(uint16_t itemId); em player.cpp no final do arquivo, adicione:
void Player::addItemToAutoLoot(uint16_t itemId) { autoLootList.insert(itemId); } void Player::removeItemFromAutoLoot(uint16_t itemId) { autoLootList.erase(itemId); } bool Player::getItemFromAutoLoot(const uint16_t itemId) { return autoLootList.find(itemId) != autoLootList.end(); } em luascript.cpp encontre:
registerMethod("Player", "getFightMode", LuaScriptInterface::luaPlayerGetFightMode); e adicione em baixo:
registerMethod("Player", "addItemToAutoLoot", LuaScriptInterface::luaPlayerAddItemToAutoLoot); registerMethod("Player", "removeItemFromAutoLoot", LuaScriptInterface::luaPlayerRemoveItemFromAutoLoot); registerMethod("Player", "getItemFromAutoLoot", LuaScriptInterface::luaPlayerGetItemFromAutoLoot); registerMethod("Player", "getAutoLootList", LuaScriptInterface::luaPlayerGetAutoLootList); ainda em luascript.cpp encontre essa função:
int LuaScriptInterface::luaPlayerGetFightMode(lua_State* L) { // player:getFightMode() Player* player = getUserdata<Player>(L, 1); if (player) { lua_pushnumber(L, player->fightMode); } else { lua_pushnil(L); } return 1; }
abaixo dela, adicione:
int LuaScriptInterface::luaPlayerAddItemToAutoLoot(lua_State* L) { // player:addItemToAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } player->addItemToAutoLoot(itemId); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerRemoveItemFromAutoLoot(lua_State* L) { // player:removeItemFromAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } player->removeItemFromAutoLoot(itemId); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerGetItemFromAutoLoot(lua_State* L) { // player:getItemFromAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } if (player->getItemFromAutoLoot(itemId)) { pushBoolean(L, true); } else { pushBoolean(L, false); } return 1; } int LuaScriptInterface::luaPlayerGetAutoLootList(lua_State* L) { // player:getAutoLootList() Player* player = getUserdata<Player>(L, 1); if (player) { std::set<uint32_t> value = player->autoLootList; if (value.size() == 0) { lua_pushnil(L); return 1; } int index = 0; lua_createtable(L, value.size(), 0); for(auto i : value) { lua_pushnumber(L, i); lua_rawseti(L, -2, ++index); } } else { lua_pushnil(L); } return 1; }
em luascript.h encontre:
static int luaPlayerGetFightMode(lua_State* L);
adicione a baixo:
static int luaPlayerAddItemToAutoLoot(lua_State* L); static int luaPlayerRemoveItemFromAutoLoot(lua_State* L); static int luaPlayerGetItemFromAutoLoot(lua_State* L); static int luaPlayerGetAutoLootList(lua_State* L);
em iologindata.cpp encontre:
//load storage map query.str(std::string()); query << "SELECT `key`, `value` FROM `player_storage` WHERE `player_id` = " << player->getGUID(); if ((result = db.storeQuery(query.str()))) { do { player->addStorageValue(result->getNumber<uint32_t>("key"), result->getNumber<int32_t>("value"), true); } while (result->next()); }
e adicione em baixo:
query.str(std::string()); query << "SELECT `autoloot_list` FROM `player_autoloot` WHERE `player_id` = " << player->getGUID(); if ((result = db.storeQuery(query.str()))) { unsigned long lootlistSize; const char* autolootlist = result->getStream("autoloot_list", lootlistSize); PropStream propStreamList; propStreamList.init(autolootlist, lootlistSize); int16_t value; int16_t item = propStreamList.read<int16_t>(value); while (item) { player->addItemToAutoLoot(value); item = propStreamList.read<int16_t>(value); } }
acima de:
//save inbox items adicione:
query.str(std::string()); query << "DELETE FROM `player_autoloot` WHERE `player_id` = " << player->getGUID(); if (!db.executeQuery(query.str())) { return false; } PropWriteStream propWriteStreamAutoLoot; for (auto i : player->autoLootList) { propWriteStreamAutoLoot.write<uint16_t>(i); } size_t lootlistSize; const char* autolootlist = propWriteStreamAutoLoot.getStream(lootlistSize); query.str(std::string()); DBInsert autolootQuery("INSERT INTO `player_autoloot` (`player_id`, `autoloot_list`) VALUES "); query << player->getGUID() << ',' << db.escapeBlob(autolootlist, lootlistSize); if (!autolootQuery.addRow(query)) { return false; } if (!autolootQuery.execute()) { return false; }
em sua database, execute esta query
CREATE TABLE player_autoloot ( id int NOT NULL AUTO_INCREMENT, player_id int NOT NULL, autoloot_list blob, PRIMARY KEY (id) );
agora vá em data/scripts/talkactions e crie esse arquivo LUA
autoloot.lua
local talk = TalkAction("!autoloot") function talk.onSay(player, words, param) local i = player:getAutoLootList() local cache = "Check your loot list: " local split = param:split(",") local action = split[1] if param == "list" then if i then for _, item in ipairs(i) do cache = cache .. (ItemType(item)):getName() .. ", " end else player:sendTextMessage(MESSAGE_INFO_DESCR, "Your list is empty! Add some item and try again.") return false end player:sendTextMessage(MESSAGE_INFO_DESCR, cache:sub(1, -3)) return false end if action == "add" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getName() == '' then player:sendCancelMessage("There is no item with that id or name.") return false end end if player:getItemFromAutoLoot(itemType:getId()) then player:sendCancelMessage("You're already autolooting this item.") return false end player:addItemToAutoLoot(itemType:getId()) player:sendTextMessage(MESSAGE_INFO_DESCR, "You're now auto looting " .. itemType:getName()) return false elseif action == "remove" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getName() == '' then player:sendCancelMessage("There is no item with that id or name.") return false end end if player:getItemFromAutoLoot(itemType:getId()) then player:removeItemFromAutoLoot(itemType:getId()) player:sendTextMessage(MESSAGE_INFO_DESCR, "You removed the " .. itemType:getName() .. " from your loot list.") else player:sendCancelMessage("This item does not exist in your loot list.") end return false end player:sendTextMessage(MESSAGE_EVENT_ORANGE, "Auto Loot commands (items are automatically moved to your bp if you open monster corpse):"..'\n'.."!addloot add, nameItem - add item to auto loot by name"..'\n'.."!autoloot remove, itemName - remove item from auto loot by name"..'\n'.."!autoloot list - list your current auto loot items") return false end talk:separator(" ") talk:register()
É isso, espero que gostem do sisteminha
Se você encontrar algum bug, deixe-me saber.
Falta fazer:
Optimizar a mensagem de loot.
Adicionar ModalWindow.
Cheers~
-
lordzetros recebeu reputação de nyedsonnyel em [TFS 1.3] Teleport com janelaTFS 1.3 - TESTADO EM VERSÃO 10.98
* Introdução *
Bom, estive navegando no Fórum e vi que o usuário @Cleiton Felipi pediu um script que ao player entrasse no teleport de um X monstro, um Demon por exemplo, listasse qual hunt o jogador queria entrar. Achei interessante, e resolvi desenvolver e postar no TK, já que não tinha ainda, :).
* Sobre o sistema *
Você utiliza diversas hunts com vários tps criados no mapa no seu servidor do mesmo monstro? Bom, este script será muito útil para você! Pois ele permitirá que você habilite ao jogador em qual hunt ele quer caçar, por exemplo, se tiver Demon 01, Demon 02, Demon 03, Demon X, basta apenas você criar um tp indicando o monstro e que uma janela irá aparecer com a lista de opções de hunts, prático, né? Segue imagens de demonstração:
OBS¹.: Você pode colocar TODOS OS MONSTROS neste script, contando que tenha o actionID que ficará no teleporte, não é de uma quantidade limitada, em outras palavras, você pode adicionar as hunts de Demon, Frost Dragon, Dragon, ..., tudo aqui, apenas mudando o actionID (tudo configurável, não se preocupe).
* Instalação *
Em data/movements/scripts/ crie um arquivo chamado mov_janela_hunts.lua e adicione dentro:
--[[ Script - Lordzetros Fórum Tibia King ]] 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) 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:
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.
Enfim, algo simples, porém não encontrei no TK.
Abraços.
-
lordzetros recebeu reputação de Semideus em SHOW OFF - Launcher 'Kamity'Bem bacana, cara. ?
-
lordzetros deu reputação a Kamity em SHOW OFF - Launcher 'Kamity'Eae galera do TK, vim mostrar para vocês um projeto meu que esta em andamento Launcher Update baseado na temática do Cliente 12 do global.
Contato
Discord: Guilherme#3515
Github: Yokaito
Features
▸ Mostrando numero real de players online do servidor.
▸ Autoupdate
▪ Verifica no seu site se existe uma nova versão caso exista o launcher baixa o zip e extrai na pasta do usuário.
◈ PS: Ou seja não precisa colocar todo o cliente em si para baixar de novo apenas os arquivos modificados.
▸ Barra de progresso de download e extração com % em real time.
▸ Tag dentro do launcher mostrando a versão atual do cliente do seu servidor.
▸ Box (Direita) de Boss spawnado no servidor.
▸ Ultima newsticker lançada no seu site.
▸ Box (Esquerda) de Top level do servidor com outfit.
▸ Nome ot, background, logo, lista do boss com horário para cada dia da semana, todo totalmente configuráveis.
Upcoming Features
▸ Botão para saber o horário do próximo boss (atualmente aparece apenas o que foi spawnado).
PS: Estou em processo de finalização de edição do layout do Launcher junto com as features que citei logo acima.
Versão Final do launcher. Essa e a primeira release dele. Tudo que for implementado daqui pra frente sao novas features. Todas que citei acima foram implementadas com sucesso.
Créditos
Base: Launcher AutoUpdate C# (Usei como inspiração para o back-end reescrevendo o código e adicionando novas funcionalidades e validações para erros).
Kamity: Novas validações, novo layout e novas features.
-
lordzetros recebeu reputação de Semideus em [TFS 1.3] TARO EVENT - Novo evento para OT* Apresentação *
Bom, galera, tá tudo explicado no vídeo de como funciona o evento [Manual e Automático], como configurar o arquivo e tudo mais.
Arquivos do evento estão anexado no tópico, assim como o vírus scan também, :).
* Vídeo *
* Comandos *
!taro abrir
Utilizado por staffs para abrir o evento [Manual]
!taro fechar
Utilizado por staffs para fechar o evento [Manual]
!taro encerrar
Utilizado por staffs para encerrar o evento [Manual]
!taro kick,nome_jogador
Utilizado por staffs e PLAYERS para kickar alguém do evento
* Links *
Vírus scan: https://www.virustotal.com/pt/file/7b30879de2745ef020a06de135dae7bd80673eb0d5d2f80b22b1f2a6db5158e0/analysis/1548894947/
Download: Taro Event - Lordzetros.zip
Dúvidas, sugestões, críticas ou bugs? Deixe abaixo,
-
lordzetros recebeu reputação de bim em Fly System com modal 1.3Introdução
Estive procurando no fórum e não encontrei esse sistema de TP para versões com modal, aliás, até achei um semelhante, só que possuía algumas instabilidades e também com uma ideia de waypoints (que estava também fazendo dessa forma, mas não vem ao caso o motivo disso não ser viável no Tibia). O que trago aqui é algo mais simples, porém o necessário.
O sistema de TP é muito importante em alguns servidores que fogem um pouco de RPG (não que seja exclusivamente para estes), ele possibilita viagens de um local para outro em instantes, como por exemplo, do Templo para o Depot ou para qualquer outra localização configurada no script (a seu gosto). Uma coisa adicional que coloquei no script, foi de listar também a house do jogador que utilizar o comando, onde você poderá configurar se será necessário pagar ou não para o mesmo ser teleportado, enfim, dê uma olhada no código depois, tá tudo comentado.
Informações do sistema
- Locais configuráveis
- Configurável se é necessário pagar ou não para determinado local
- Configurável a quantidade de dinheiro de cada local
- Condições ao utilizar o comando (Protect Zone e tempo para utilizar o comando novamente)
- É requisitado o jogador está possuindo a quantia necessária para o teleport
Instalação
1 - crie um arquivo chamado teleportSystem.lua em data/talkactions/scripts/ e cole o código abaixo:
2 - Em seguida, cole este trecho de código em data/talkactions/talkactions.xml abaixo de algum semelhante:
3 - Agora crie um arquivo chamado modalTpSystem.lua em data/creaturescripts/scripts/ e cole o código abaixo nele:
4 - E para finalizar, cole este código em data/creaturescripts/creaturescripts.xml abaixo de um semelhante:
Explicação do script
A única coisa que você vai mexer é no teleportSystem, onde terá a opção de configurar os preços, locais, etc.
Configurando as houses:
houses_modal = Se será habilitado o player teleportar para a house dele
house_pago = Se será pago o teleport para a house
house_custo = Custo do teleport para a house, caso seja pago
Configurando o local:
nome = Nome do local a ser mostrado na janela
pago = Se ele vai ser pago ou não, coloque false caso queira que não cobre nada do jogador
custo = Caso tenha colocado como pago, o custo do teleport para o local
pos = Posição do local (X,Y,Z)
Quando for adicionar outro, copie esta mesma parte acima e altera o número [3] para [4] e os outros dados também, assim por diante.
O restante também tá explicado no script, basta ler.
Demonstração
UTILIZE O COMANDO !fly
Enfim, script simples, tem para outras versões, mas como falei, não tinha encontrado ainda para 1.x com esse funcionamento. Qualquer coisa, só comentar, .
-
lordzetros recebeu reputação de Pedro. em [Link Quebrado] Teleports Room | 10.98Ae, DdJs, acho que você precisa postar mais mapas para ver se anima mais o @Yinz, viu, ( ͡° ͜ʖ ͡°).
Ah, e valeu pelos mapas, gente boa.
-
lordzetros recebeu reputação de DdJs em [Link Quebrado] Teleports Room | 10.98Ae, DdJs, acho que você precisa postar mais mapas para ver se anima mais o @Yinz, viu, ( ͡° ͜ʖ ͡°).
Ah, e valeu pelos mapas, gente boa.