Postado Janeiro 24, 2016 9 anos Este é um post popular. Olá, bom dia a todos. Como tenho visto muitíssimos pedidos neste sentido, lhes apresento o LMS - Last Man Standing com BroadCast Spoiler O que é o 'Last Man Standing Event'? Trata-se de um evento em que os 'player' lutam para sobreviver e ganharem algumas recompensas. No fim das contas, irá privilegiar aqueles que visam utilizar táticas e técnicas que possam ser utilizadas em batalhas. Ou seja, não seria para qualquer um. Este evento contém um 'broadcast' que avisa aos 'players' sobre o início do evento; Este evento se repete a cada 2 (duas) horas (pode ser modificado este valor, é claro); A cada 2 horas surge um 'teleport' por um prazo de 120 segundos (2 minutos) em determinado local; Tem um mínimo de 12 'players' para funcionar. Então vamos para o 'script'. Spoiler 1º - Vá na pasta 'data > globalevents > scripts' e crie outra pasta chamada 'LMS' dentro. 2º- Dentro desta pasta (a 'LMS') crie um arquivo chamado 'arena', salve com a extensão '.lua' e, dentro deste, coloque o seguinte: local t = { tmp = { {x = 382, y = 1343, z = 7}, -- quina à noroeste (acima e à esquerda) da area onde os players devem estar para ingressar no evento {x = 389, y = 1346, z = 7} -- quina à Sudeste (abaixo e à direita) }, arena = { {x = 349, y = 1338, z = 6}, -- Quina de cima e à esquerda {x = 368, y = 1352, z = 6}, -- quina de baixo e à direita {x = 358, y = 1345, z = 6} -- Centro da Arena }, noPlayers = {x=876, y=1025, z=7}, -- Para onde serão teleportados caso não haja campeão semChamps = {x=32345, y=32225, z=7}, -- Local para onde serão teleportados os 'players' caso passem os minutos sem campeão from = {x = 351, y = 1340, z = 6}, -- quina de cima e à esquerda de onde os players serão transportados (escolha será aleatória) to = {x = 366, y = 1350, z = 6}, -- quina de baixo e à direita de onde os players serão transportados (escolha será aleatória) minPlayers = 12, -- Número mínimo de players para iniciar o evento noPlayers = 1, -- Se houver este número de player na área o evento não começa prize = {6527} -- prêmio que o vencedor vai receber expRewChamps = 0 -- Coloque aqui a experiência que o campeão ganhará. Deixe zero se não quiser. expRewPart = 0 -- Coloque aqui a experiência que todos os 'players' que participarão ganharão. Deixe zero se não quiser. } local kick = 0 function onThink() local arenaPlayers = {} for x = t.arena[1].x, t.arena[2].x do for y = t.arena[1].y, t.arena[2].y do for z = t.arena[1].z, t.arena[2].z do local pos = {x = x, y = y, z = z} local n = getTileInfo(pos).creatures if n ~= 0 then pos.stackpos = 1 local c = getThingfromPos(pos) while c.uid ~= 0 do if c.itemid == 1 and c.type == 1 then table.insert(arenaPlayers, c.uid) if #arenaPlayers == n then break end end pos.stackpos = pos.stackpos + 1 c = getThingfromPos(pos) end end end end end if #arenaPlayers == 1 then local p = getPlayerMasterPos(arenaPlayers[1]) doTeleportThing(arenaPlayers[1], p) doSendMagicEffect(p, CONST_ME_TELEPORT) doPlayerSendTextMessage(arenaPlayers[1], MESSAGE_STATUS_CONSOLE_BLUE, "Voce ganhou este evento e recebeu este premio") doBroadcastMessage(getCreatureName(arenaPlayers[1]) .." venceu o Last Man Standing Event.") doPlayerAddItem(arenaPlayers[1], t.prize[math.random(#t.prize)], 10) if (t.expRewChamps > 0) then doPlayerAddExperience(arenaPlayers[1],t.expRewChamps) doSendMagicEffect(getPlayerPosition(arenaPlayers[1]), CONST_ME_MAGIC_RED) doSendAnimatedText(getPlayerPosition(arenaPlayers[1]), "Exp!", TEXTCOLOR_WHITE) end kick = 0 elseif #arenaPlayers > 1 then if kick == 0 then kick = os.time() else if os.time() - kick >= 840 then kick = 0 for i = 1, #arenaPlayers do doTeleportThing(arenaPlayers[i],t.semChamps) if (t.expRewPart > 0) then doPlayerAddExperience(arenaPlayers[1],t.expRewPart) end doPlayerSendTextMessage(arenaPlayers[i], MESSAGE_STATUS_WARNING, "Muito tarde, tente de novo mais tarde.") end end end elseif #arenaPlayers == 0 then kick = 0 local players = {} for x = t.tmp[1].x, t.tmp[2].x do for y = t.tmp[1].y, t.tmp[2].y do for z = t.tmp[1].z, t.tmp[2].z do local c = getTopCreature({x = x, y = y, z = z}) if c.type == 1 then table.insert(players, c.uid) end end end end if #players >= t.minPlayers then for i = 1, #players do local p = {x = math.random(t.from.x, t.to.x), y = math.random(t.from.y, t.to.y), z = math.random(t.from.z, t.to.z)} doTeleportThing(players[i], p) doSendMagicEffect(p, CONST_ME_TELEPORT) doPlayerSendTextMessage(players[i], MESSAGE_STATUS_WARNING, "A batalha começou. Sobrevivam para a glória!") end else for i = 1, #players do doTeleportThing(players[i],t.noPlayers) doPlayerSendTextMessage(players[i], MESSAGE_STATUS_WARNING, "O evento não começou porque não haviam player suficientes!") end end end return true end 3º -Na sequência, crie um outro arquivo chamado 'lastman', salve-o com a extensão '.lua' e, dentro dele, coloque o seguinte: local createpos = {x=273,y=1330,z=6} -- local onde, a cada 2 horas, o teleport irá aparecer local topos = {x=385,y=1345,z=7} -- Onde o teleport irá levar os players local msg = "O Last man standing Event Teleport acabou de fechar! Ele irá reaparecer de novo a cada 2 horas! Todos os participantes, preparem-se para a batalha!" local timetoclose = 120 -- valor em segundos de quanto tempo o portal ficará aberto local function remove() local tp = getTileItemById(createpos,1387).uid if tp ~= 0 then doRemoveItem(tp) doBroadcastMessage(msg) end end function onThink(interval) doCreateTeleport(1387, topos, createpos) doBroadcastMessage("Last man standing event Teleport esta aberto!\nCatch o teleport vai fechar dentro de "..timetoclose.." segundos! O teleport esta localizado na sala de Eventos.") addEvent(remove,timetoclose*1000) return true end 4º - Agora, vá ao arquivo 'data > globalevents > globalevents.xml', abra-o e procure por </globalevents>. 5º - Agora, antes deste texto adicione as seguintes linhas: <globalevent name="LastMan" interval="36000" event="script" value="lms/lastman.lua"/> <globalevent name="arena" interval="36150" event="script" value="lms/arena.lua"/> Pronto, feito isto vamos ver como configurar. Spoiler Dentro do 'script' que inseri dentro do 2º Passso havia algo mais ou menos assim: local t = { tmp = { {x = 1111, y = 1111, z = 7}, {x = 1111, y = 1111, z = 7} }, arena = { {x = 1111, y = 1111, z = 7}, {x = 1111, y = 1111, z = 7}, {x = 1111, y = 1111, z = 7} }, from = {x = 351, y = 1340, z = 6}, to = {x = 366, y = 1350, z = 6}, minPlayers = 2, noPlayers = 1, prize = {6527} } Assim como você pode ver há estas duas linhas (as abaixo): {x = 382, y = 1343, z = 7}, {x = 389, y = 1346, z = 7} Esta será a área onde os 'players' deverão estar para poder ingressar no evento. Isto significa que depois de entra no 'teleport' o jogador será teletransportado para uma 'sala de espera'. Depois disto o 'teleport' será fechado e, na sequência, todos que estavam nesta sala de esperar serão levados para a 'arena'. Depois da batalha o campeão vai tre que esperar no mínimo 30 segundos antes de receber o prêmio. Depois disto, preciso falar também destas 3 linhas: {x = 349, y = 1338, z = 6}, {x = 368, y = 1352, z = 6}, {x = 358, y = 1345, z = 6} }, Aqui você irá selecionar as coordenadas corretas da Arena em que os 'players' irão lutar para, caso sobrevivam, ganhar o prêmio. E, por fim, dentro do arquivo 'lastman.lua' (criado no 3º passo) há as seguintes linhas: local createpos = {x=273,y=1330,z=6} local topos = {x=385,y=1345,z=7} local msg = "O Last man standing Event Teleport acabou de fechar! Ele irá reaparecer de novo a cada 2 horas! Todos os participantes, preparem-se para a batalha!" local timetoclose = 120 Aqui você poderá configurar Na primeira linha: o local onde o 'Teleport' irá aparecer a cada 2 horas; Na segunda Linha: o local para onde o portal irá levar o 'player'; Na Terceira Linha: a mensagem que irá aparecer no 'broadcast' avisando que o evento irá começar; Na quarta linha: o tempo que o portal ficará disponível antes de desaparecer. Ajudei de alguma Forma? REP+. Edited: (25/01/2016 - 18h55min) Funcional em: TFS 0.3884 e 0.4 (Windows); FS 0.3777 (Linux); Obrigado @sirarcken @leozincorsair Spoiler Esta é a versão que consegui para o TFS 1.0+ Spoiler Este 'script' permite que você possa selecionar de 'quanto em quanto' tempo o evento será 'realizado'; É de simples instalação; Fornece premmiun points como recompensa (claro, pode ser editado o prêmio a ser fornecido); Checa a cada 10 (dez) segundos o que aconteceu na 'arena' Se houver somente 1 (um) 'player', este será o campeão do Evento; A área para ficar aguardando o evento começar deve ser PZ (Peace Zone) e, também, 'anti-LogOut'; A área para luta deve ser PvP ('Player Versus Player') e, também, 'Anti-LogOut'; No mais, os arquivos podem ser configurados com um mínimo de noção de programação. Vamos lá: Spoiler 1º Passo - Em primeiro lugar vá no arquivo 'data > globalevents > globalevents.xml' e adicione a seguinte linha (antes de </globalevents>). <globalevent name="Last Man Standing" interval="300000" script="scripts/lms.lua"/> 2º Passo - Na sequência vá até o arquivo 'data > movements > movements.xml' e, antes de </movements> adicione as seguintes linhas: <movevent event="StepIn" actionid="25001" script="scripts/lmsjoin.lua"/> <movevent event="StepIn" actionid="25002" script="scripts/lmsleave.lua"/> 3º Passo - Ato contínuo, tendo em vista que como são vários arquivos, faça o 'download' dos arquivos a seguir 4º Passo - Este download é um arquivo '.zip'. Abra-o. Dentro haverá duas pastas. Uma nomeada por 'globalevents' e a outra por 'movements'. 5º - Passo - Pegue o arquivo chamado 'lms.lua', que está dentro da pasta 'globalevents' (do arquivo '.zip' que você acabou de fazer o 'download') e coloque dentro da pasta: 'data > globalevents > scripts' 6º Passo - Pegue os dois arquivos chamados 'lmsjoin.lua' e 'lmsleave.lua', que estão dentro da pasta 'movements' (do arquivo '.zip' que você acabou de fazer o 'download') e coloque dentro da pasta: 'data > movements > scripts' 7º Passo - Está pronto. Editado Fevereiro 18, 2016 9 anos por Xagah (veja o histórico de edições) The Last Man Standing - 100% funcional
Postado Janeiro 25, 2016 9 anos Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP. Off; Formatação e organização perfeitos, díficil ver tópico assim. Editado Janeiro 25, 2016 9 anos por Azhaurn (veja o histórico de edições)
Postado Janeiro 25, 2016 9 anos Boa ,o que eu tenho os players são teleportados de volta e não se atacam. Funciona em qual tfs?? Editado Janeiro 25, 2016 9 anos por sirarcken (veja o histórico de edições) Links uteis: Spoiler Forúm Spoiler Ferramentas para tibia 11.40(objectbuilder-itemeditor-rme) RME 3.3 Atualizado com animações. Pagina de addons 10.90 Youtube Spoiler Cliente Próprio 11.00--11.56 (NOTPAD++) Configurando MAQUINA VIRTUAL GOOGLE(GRATUITA PARA TESTE VALIDADE 1 ANO) Configurando Puttygen-Fillezila(MAQUINA GOOGLE Compilando OTX-TFS 1.3 LINUX (MAQUINA GOOGLE) Object Builder , criação de items Adicionar imagens na Store.
Postado Janeiro 25, 2016 9 anos Autor Muito Obrigado, @Azhaurn, espero poder contribuir com outros tópicos diferenciados. Obrigado pela atenção @sirarcken, testei no TFS 0.3884 e 0.4 Windows. Meu amigo testou TFS .3777 em Linux e disse que funcionou também. The Last Man Standing - 100% funcional
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.