não precisa colocar um broadcast, basta colocar um doPlayerSendTextMessage pros jogadores q estão na area.
- Fórum
- OTServ
- Pedidos
- Resolvidos
- [Resolvido] Broadcast em área específica
6
2.3k
info
Grupo: Visconde
Registrado: 26/04/08
Posts: 251
Reputação: +36
Gênero: Masculino
Char no Tibia: Senhor Mithril

07 de setembro de 2019 às 12:56
07 de setembro de 2019 às 21:14
e como eu determino essa área? é oq eu precisava saber tbm
info
Grupo: Diretor
Registrado: 12/05/12
Posts: 818
Reputação: +578
Gênero: Masculino
Char no Tibia: [ADM] Night

07 de setembro de 2019 às 21:28
Melhor resposta
local config = { city = 1, -- Agenda: [1] Prontera, [2] Alberta landing1 = {x=1644,y=1570,z=0}, -- Local de desembarque do aeroplano landing2 = {x=1645,y=1570,z=0}, -- Local de desembarque do aeroplano toProntera1 = {x=1486,y=1525,z=7}, -- Coordenadas de Prontera toProntera2 = {x=1486,y=1526,z=7}, -- Coordenadas de Prontera toAlberta1 = {x=1492,y=1522,z=7}, -- Coordenadas de Alberta toAlberta2 = {x=1492,y=1523,z=7}, -- Coordenadas de Alberta area = {{x=100, y=100, z=7},{x=111, y=111, z=7}}, -- Superior esquerdo e inferior direito } function onThink(cid, interval, lastExecution) -- Talvez não seja a função correta (?) if (config.city == 1) then -- Cria o portal para Prontera doCreateTeleport(1387, config.toProntera1, config.landing1) doCreateTeleport(1387, config.toProntera2, config.landing2) for _, cid in pairs(getPlayersOnline()) do if isInRange(getPlayerPosition(cid), config.area[1], config.area[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "O aeroplano pousou na cidade de Prontera, mas partira novamente em 20 segundos.") end end addEvent(deleteTp, 20000) -- Remove o portal em 20 segundos addEvent(leftProntera, 20000) config.city = config.city + 1 -- Avança a agenda elseif (config.city == 2) then -- Cria o portal para Alberta doCreateTeleport(1387, config.toAlberta1, config.landing1) doCreateTeleport(1387, config.toAlberta2, config.landing2) for _, cid in pairs(getPlayersOnline()) do if isInRange(getPlayerPosition(cid), config.area[1], config.area[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "O aeroplano pousou na cidade de Alberta, mas partira novamente em 20 segundos.") end end addEvent(deleteTp, 20000) -- Remove o portal em 20 segundos addEvent(leftAlberta, 20000) config.city = 1 -- Retorna a agenda para o início end return true end function deleteTp() local delete1 = getTileItemById(config.landing1, 1387) local delete2 = getTileItemById(config.landing2, 1387) doRemoveItem(delete1.uid, 1) doRemoveItem(delete2.uid, 1) doSendMagicEffect(config.landing1, CONST_ME_TELEPORT) doSendMagicEffect(config.landing2, CONST_ME_TELEPORT) end function leftProntera() doBroadcastMessage("O aeroplano partiu. Proximo destino: Alberta") end function leftAlberta() doBroadcastMessage("O aeroplano partiu. Proximo destino: Prontera") end
07 de setembro de 2019 às 22:00
@Yan Liima
Acabei de testar e funciona perfeitamente, MUITO OBRIGADO!
só tive que modificar as funções leftProntera e leftAlberta de acordo também.
function leftProntera() for _, cid in pairs(getPlayersOnline()) do if isInRange(getPlayerPosition(cid), config.area[1], config.area[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "O aeroplano partiu. Proximo destino: Alberta.") end end end function leftAlberta() for _, cid in pairs(getPlayersOnline()) do if isInRange(getPlayerPosition(cid), config.area[1], config.area[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "O aeroplano partiu. Proximo destino: Prontera.") end end end
Reputado, podem fechar o tópico
info
Grupo: Diretor
Registrado: 12/05/12
Posts: 818
Reputação: +578
Gênero: Masculino
Char no Tibia: [ADM] Night

07 de setembro de 2019 às 22:24
O pedido neste tópico de foi atendido e/ou o autor do tópico resolveu sua duvida. Este tópico está fechado e foi movido para Pedidos - Resolvidos. Se você tiver outros pedidos, crie um novo tópico.




info
Grupo: Campones
Registrado: 18/08/19
Posts: 4
Reputação: 0
Oi, tudo bom pessoal?
Bom, estou desenvolvendo um event, mas falta nele algo essencial que não sei como fazer ainda...
Queria poder usar o doBroadcastMessage(message, type), mas que não fosse pro servidor inteiro, já q o intervalo seria de 2 em 2 minutos, e ia encher o saco de muita gente.
Tem que ser apenas para os players que estiverem em uma determinada área, parecido com a função getSpectators(centerPos, rangex, rangey[, multifloor = false]) que eu encontrei, mas não precisa ser essa.
Vou deixar meu código aqui pra terem uma ideia melhor. (obs: não manjo mt de c++, então se tiver algo errado e quiser corrigir, agradeço se o fizer e tbm explicar porque ta errado)
globalevents.xml
schedule.lua
Editado Setembro 6 por Inari