Ir para conteúdo

[OtClient] Mensagem Personalizada


Gengo

Posts Recomendados

8 horas atrás, Gengo disse:

 

Hoje venho trazer um sistema que pode deixar seu servidor com um diferencial dos demais, espero que vocês possam aprender algo com esse sistema e criar outros tipos de personalização nas mensagens.

 

 

O que seria essa personalização?

Seria uma personalização da mensagem do broadcast, em vez de ficar aquela mensagem vermelha no meio da tela, você pode escolher sua própria cor para a mensagem, no fim do tópico demonstrarei com imagens para que você possa entender melhor.

 

 

Script:
Procure pela pasta no seu otclient em modules/game_textmessage e abra o arquivo textmessage.otui e substitua por esse:

  Mostrar conteúdo oculto


TextMessageLabel < UILabel
  font: verdana-11px-rounded
  text-align: center
  text-wrap: true
  text-auto-resize: true
  margin-bottom: 2
  visible: false

Panel
  anchors.fill: gameMapPanel
  focusable: false

  Panel
    id: centerTextMessagePanel
    layout:
      type: verticalBox
      fit-children: true
    width: 360
    anchors.centerIn: parent

    TextMessageLabel
      id: highCenterLabel
    TextMessageLabel
      id: middleCenterLabel
    TextMessageLabel
      id: lowCenterLabel

  TextMessageLabel
    id: privateLabel
    anchors.top: parent.top
    anchors.bottom: centerTextMessagePanel.top
    anchors.horizontalCenter: parent.horizontalCenter
    text-auto-resize: false
    width: 275

  TextMessageLabel
    id: statusLabel
    anchors.bottom: parent.bottom
    anchors.left: parent.left
    anchors.right: parent.right

  TextMessageLabel
    id: customMessage
    height: 32
    anchors.top: parent.top
    anchors.horizontalCenter: parent.horizontalCenter
    background-color: #00000890
    border: 1 #cc0c0c
    margin-top: 80
    text-auto-resize: false
    text-wrap: false

 

 

Agora na mesma pasta abra o arquivo textmessage.lua e procure pela função displayMessage e debaixo de:


if msgtype == MessageSettings.none then return end

Coloque o seguinte script:

  Ocultar conteúdo


  if mode == MessageModes.Warning then
	local label = messagesPanel:recursiveGetChildById('customMessage')
	local color = msgtype.color
	
	if ( text:find('|') ) then
		color = text:explode('|')[1]
		text  = text:explode('|')[2]
	end

	label:setText(text)
	label:setColor(color)
	label:setBorderColor(color)
	label:setWidth(label:getTextSize().width+110)
	label:show()
	
	addEvent(function() g_effects.fadeIn(label, 250) end)
    removeEvent(label.hideEvent)
    label.hideEvent = scheduleEvent(function() 
		addEvent(function() g_effects.fadeOut(label, 250) end)
		scheduleEvent(function() label:hide() end, 250) 
	end, calculateVisibleTime(text))
	return 
  end

 

 

 

 Feito essas alterações a personalização já deve estar funcionando, para testar você pode utilizar o seguinte comando:
 


/bc green | O torneio mundial da Elite Four se iniciará em 15min.

 Onde /bc é o comando broadcast 

 green é a cor que deseja personalizar, pode ser tanto em hexa como o nome da cor 

 mensagem qualquer
 É necessário colocar o pipeline |  caso queira colocar uma outra cor, senão ele assumirá como padrão a cor vermelha do broadcast.

 

Caso você não tenha o script do broadcast, porem é impossivel não ter já que é padrão nos servidores, vou deixar disponível aqui:

  Mostrar conteúdo oculto

 

Coloque na pasta do seu servidor em talkaction com o nome de broadocast.lua e coloque o seguinte:
 



function onSay(cid, words, param, channel)
	if(param == '') then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
		return true
	end
	local t = string.explode(param, " ", 1)
	doBroadcastMessage(param)
	return true
end

Coloque a tag no arquivo talkaction.xml:



<talkaction log="yes" words="/bc" access="4" event="script" value="broadcastclass.lua"/>

 

 

 

 

Imagens de como fica in-game:

  Ocultar conteúdo

phLMbIM.pngVU9rPkN.png

 

Eai, vai ficar de fora? 
Implemente já essa personalização e torne-se um servidor diferenciado dos demais.

Show! irei usar com certeza. ^^ 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Thalles Vitor disse:

REP+.

È possível eu substituir esse bagulho verde, por imagem certo?

 


label:setColor(color)

label:setImageSource('imagem.png')

 

Sim é possível, o céu e o limite do qu3 pode ser feito kkkk.

Link para o comentário
Compartilhar em outros sites

Em 22/06/2019 em 12:57, Gengo disse:

 

Hoje venho trazer um sistema que pode deixar seu servidor com um diferencial dos demais, espero que vocês possam aprender algo com esse sistema e criar outros tipos de personalização nas mensagens.

 

 

O que seria essa personalização?

Seria uma personalização da mensagem do broadcast, em vez de ficar aquela mensagem vermelha no meio da tela, você pode escolher sua própria cor para a mensagem, no fim do tópico demonstrarei com imagens para que você possa entender melhor.

 

 

Script:
Procure pela pasta no seu otclient em modules/game_textmessage e abra o arquivo textmessage.otui e substitua por esse:

  Ocultar conteúdo


TextMessageLabel < UILabel
  font: verdana-11px-rounded
  text-align: center
  text-wrap: true
  text-auto-resize: true
  margin-bottom: 2
  visible: false

Panel
  anchors.fill: gameMapPanel
  focusable: false

  Panel
    id: centerTextMessagePanel
    layout:
      type: verticalBox
      fit-children: true
    width: 360
    anchors.centerIn: parent

    TextMessageLabel
      id: highCenterLabel
    TextMessageLabel
      id: middleCenterLabel
    TextMessageLabel
      id: lowCenterLabel

  TextMessageLabel
    id: privateLabel
    anchors.top: parent.top
    anchors.bottom: centerTextMessagePanel.top
    anchors.horizontalCenter: parent.horizontalCenter
    text-auto-resize: false
    width: 275

  TextMessageLabel
    id: statusLabel
    anchors.bottom: parent.bottom
    anchors.left: parent.left
    anchors.right: parent.right

  TextMessageLabel
    id: customMessage
    height: 32
    anchors.top: parent.top
    anchors.horizontalCenter: parent.horizontalCenter
    background-color: #00000890
    border: 1 #cc0c0c
    margin-top: 80
    text-auto-resize: false
    text-wrap: false

 

 

Agora na mesma pasta abra o arquivo textmessage.lua e procure pela função displayMessage e debaixo de:


if msgtype == MessageSettings.none then return end

Coloque o seguinte script:

  Ocultar conteúdo


  if mode == MessageModes.Warning then
	local label = messagesPanel:recursiveGetChildById('customMessage')
	local color = msgtype.color
	
	if ( text:find('|') ) then
		color = text:explode('|')[1]
		text  = text:explode('|')[2]
	end

	label:setText(text)
	label:setColor(color)
	label:setBorderColor(color)
	label:setWidth(label:getTextSize().width+110)
	label:show()
	
	addEvent(function() g_effects.fadeIn(label, 250) end)
    removeEvent(label.hideEvent)
    label.hideEvent = scheduleEvent(function() 
		addEvent(function() g_effects.fadeOut(label, 250) end)
		scheduleEvent(function() label:hide() end, 250) 
	end, calculateVisibleTime(text))
	return 
  end

 

 

 

 Feito essas alterações a personalização já deve estar funcionando, para testar você pode utilizar o seguinte comando:
 


/bc green | O torneio mundial da Elite Four se iniciará em 15min.

 Onde /bc é o comando broadcast 

 green é a cor que deseja personalizar, pode ser tanto em hexa como o nome da cor 

 mensagem qualquer
 É necessário colocar o pipeline |  caso queira colocar uma outra cor, senão ele assumirá como padrão a cor vermelha do broadcast.

 

Caso você não tenha o script do broadcast, porem é impossivel não ter já que é padrão nos servidores, vou deixar disponível aqui:

  Ocultar conteúdo

 

Coloque na pasta do seu servidor em talkaction com o nome de broadocast.lua e coloque o seguinte:
 



function onSay(cid, words, param, channel)
	if(param == '') then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
		return true
	end
	local t = string.explode(param, " ", 1)
	doBroadcastMessage(param)
	return true
end

Coloque a tag no arquivo talkaction.xml:



<talkaction log="yes" words="/bc" access="4" event="script" value="broadcastclass.lua"/>

 

 

 

 

Imagens de como fica in-game:

  Ocultar conteúdo

phLMbIM.pngVU9rPkN.png

 

Eai, vai ficar de fora? 
Implemente já essa personalização e torne-se um servidor diferenciado dos demais.

Cada dia um code melhor que o outro , parabéns meu mano ♥

Link para o comentário
Compartilhar em outros sites

Em 22/06/2019 em 12:57, Gengo disse:

 

Hoje venho trazer um sistema que pode deixar seu servidor com um diferencial dos demais, espero que vocês possam aprender algo com esse sistema e criar outros tipos de personalização nas mensagens.

 

 

O que seria essa personalização?

Seria uma personalização da mensagem do broadcast, em vez de ficar aquela mensagem vermelha no meio da tela, você pode escolher sua própria cor para a mensagem, no fim do tópico demonstrarei com imagens para que você possa entender melhor.

 

 

Script:
Procure pela pasta no seu otclient em modules/game_textmessage e abra o arquivo textmessage.otui e substitua por esse:

  Ocultar conteúdo


TextMessageLabel < UILabel
  font: verdana-11px-rounded
  text-align: center
  text-wrap: true
  text-auto-resize: true
  margin-bottom: 2
  visible: false

Panel
  anchors.fill: gameMapPanel
  focusable: false

  Panel
    id: centerTextMessagePanel
    layout:
      type: verticalBox
      fit-children: true
    width: 360
    anchors.centerIn: parent

    TextMessageLabel
      id: highCenterLabel
    TextMessageLabel
      id: middleCenterLabel
    TextMessageLabel
      id: lowCenterLabel

  TextMessageLabel
    id: privateLabel
    anchors.top: parent.top
    anchors.bottom: centerTextMessagePanel.top
    anchors.horizontalCenter: parent.horizontalCenter
    text-auto-resize: false
    width: 275

  TextMessageLabel
    id: statusLabel
    anchors.bottom: parent.bottom
    anchors.left: parent.left
    anchors.right: parent.right

  TextMessageLabel
    id: customMessage
    height: 32
    anchors.top: parent.top
    anchors.horizontalCenter: parent.horizontalCenter
    background-color: #00000890
    border: 1 #cc0c0c
    margin-top: 80
    text-auto-resize: false
    text-wrap: false

 

 

Agora na mesma pasta abra o arquivo textmessage.lua e procure pela função displayMessage e debaixo de:


if msgtype == MessageSettings.none then return end

Coloque o seguinte script:

  Ocultar conteúdo


  if mode == MessageModes.Warning then
	local label = messagesPanel:recursiveGetChildById('customMessage')
	local color = msgtype.color
	
	if ( text:find('|') ) then
		color = text:explode('|')[1]
		text  = text:explode('|')[2]
	end

	label:setText(text)
	label:setColor(color)
	label:setBorderColor(color)
	label:setWidth(label:getTextSize().width+110)
	label:show()
	
	addEvent(function() g_effects.fadeIn(label, 250) end)
    removeEvent(label.hideEvent)
    label.hideEvent = scheduleEvent(function() 
		addEvent(function() g_effects.fadeOut(label, 250) end)
		scheduleEvent(function() label:hide() end, 250) 
	end, calculateVisibleTime(text))
	return 
  end

 

 

 

 Feito essas alterações a personalização já deve estar funcionando, para testar você pode utilizar o seguinte comando:
 


/bc green | O torneio mundial da Elite Four se iniciará em 15min.

 Onde /bc é o comando broadcast 

 green é a cor que deseja personalizar, pode ser tanto em hexa como o nome da cor 

 mensagem qualquer
 É necessário colocar o pipeline |  caso queira colocar uma outra cor, senão ele assumirá como padrão a cor vermelha do broadcast.

 

Caso você não tenha o script do broadcast, porem é impossivel não ter já que é padrão nos servidores, vou deixar disponível aqui:

  Ocultar conteúdo

 

Coloque na pasta do seu servidor em talkaction com o nome de broadocast.lua e coloque o seguinte:
 



function onSay(cid, words, param, channel)
	if(param == '') then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
		return true
	end
	local t = string.explode(param, " ", 1)
	doBroadcastMessage(param)
	return true
end

Coloque a tag no arquivo talkaction.xml:



<talkaction log="yes" words="/bc" access="4" event="script" value="broadcastclass.lua"/>

 

 

 

 

Imagens de como fica in-game:

  Ocultar conteúdo

phLMbIM.pngVU9rPkN.png

 

Eai, vai ficar de fora? 
Implemente já essa personalização e torne-se um servidor diferenciado dos demais.

eu nao consegui adicionar no meu, mas sabe o qe seria legal, lembra do msn plus? que vc escrevia em varias cores...exemplo:

 

/bc green |Oláaaaaaaa| /bc yellow |jogadores

 

ele iria escrever em verde e amarelo

Link para o comentário
Compartilhar em outros sites

37 minutos atrás, WlyssesNegao disse:

por que aqui só fico o vermelho não fico o amarelo é nem o verde

 

Segue o descrito no tutorial:

/bc green | O torneio mundial da Elite Four se iniciará em 15min.

 Onde /bc é o comando broadcast 

 green é a cor que deseja personalizar, pode ser tanto em hexa como o nome da cor 

 mensagem qualquer
 É necessário colocar o pipeline |  caso queira colocar uma outra cor, senão ele assumirá como padrão a cor vermelha do broadcast.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Gengo disse:

 

Segue o descrito no tutorial:


/bc green | O torneio mundial da Elite Four se iniciará em 15min.

 Onde /bc é o comando broadcast 

 green é a cor que deseja personalizar, pode ser tanto em hexa como o nome da cor 

 mensagem qualquer
 É necessário colocar o pipeline |  caso queira colocar uma outra cor, senão ele assumirá como padrão a cor vermelha do broadcast.

O que ele quis dizer que ele escreve /bc Green | blablabla lá e mesmo assim não funciona

Link para o comentário
Compartilhar em outros sites

17 horas atrás, Gengo disse:

 

Segue o descrito no tutorial:


/bc green | O torneio mundial da Elite Four se iniciará em 15min.

 Onde /bc é o comando broadcast 

 green é a cor que deseja personalizar, pode ser tanto em hexa como o nome da cor 

 mensagem qualquer
 É necessário colocar o pipeline |  caso queira colocar uma outra cor, senão ele assumirá como padrão a cor vermelha do broadcast.

Sim desse modo troquei o broadcast mais mesmo assim não fico as cores amarelo ou verde Screenshot_1.png.d19283448472fdfd9efea62fb98301b4.png

Link para o comentário
Compartilhar em outros sites

59 minutos atrás, WlyssesNegao disse:

Sim desse modo troquei o broadcast mais mesmo assim não fico as cores amarelo ou verde Screenshot_1.png.d19283448472fdfd9efea62fb98301b4.png

Posta aqui seu arquivo textmessage.lua e seu broadcast.lua

Link para o comentário
Compartilhar em outros sites

Aqui funcionou mas só em vermelho, quando colocava a cor e aquela barrinha aparecia msg verde normal no meio da tela.

 

textmessage.lua

 



MessageSettings = {
  none            = {},
  consoleRed      = { color = TextColors.red,    consoleTab='Default' },
  consoleOrange   = { color = TextColors.orange, consoleTab='Default' },
  consoleBlue     = { color = TextColors.blue,   consoleTab='Default' },
  centerRed       = { color = TextColors.red,    consoleTab='Server Log', screenTarget='lowCenterLabel' },
  centerGreen     = { color = TextColors.green,  consoleTab='Server Log', screenTarget='highCenterLabel',   consoleOption='showInfoMessagesInConsole' },
  centerWhite     = { color = TextColors.white,  consoleTab='Server Log', screenTarget='middleCenterLabel', consoleOption='showEventMessagesInConsole' },
  bottomWhite     = { color = TextColors.white,  consoleTab='Server Log', screenTarget='statusLabel',       consoleOption='showEventMessagesInConsole' },
  status          = { color = TextColors.white,  consoleTab='Server Log', screenTarget='statusLabel',       consoleOption='showStatusMessagesInConsole' },
  statusSmall     = { color = TextColors.white,                           screenTarget='statusLabel' },
  private         = { color = TextColors.lightblue,                       screenTarget='privateLabel' }
}

MessageTypes = {
  [MessageModes.MonsterSay] = MessageSettings.consoleOrange,
  [MessageModes.MonsterYell] = MessageSettings.consoleOrange,
  [MessageModes.BarkLow] = MessageSettings.consoleOrange,
  [MessageModes.BarkLoud] = MessageSettings.consoleOrange,
  [MessageModes.Failure] = MessageSettings.statusSmall,
  [MessageModes.Login] = MessageSettings.bottomWhite,
  [MessageModes.Game] = MessageSettings.centerWhite,
  [MessageModes.Status] = MessageSettings.status,
  [MessageModes.Warning] = MessageSettings.centerRed,
  [MessageModes.Look] = MessageSettings.centerGreen,
  [MessageModes.Loot] = MessageSettings.centerGreen,
  [MessageModes.Red] = MessageSettings.consoleRed,
  [MessageModes.Blue] = MessageSettings.consoleBlue,
  [MessageModes.PrivateFrom] = MessageSettings.consoleBlue,

  [MessageModes.DamageDealed] = MessageSettings.status,
  [MessageModes.DamageReceived] = MessageSettings.status,
  [MessageModes.Heal] = MessageSettings.status,
  [MessageModes.Exp] = MessageSettings.status,

  [MessageModes.DamageOthers] = MessageSettings.none,
  [MessageModes.HealOthers] = MessageSettings.none,
  [MessageModes.ExpOthers] = MessageSettings.none,

  [MessageModes.TradeNpc] = MessageSettings.centerWhite,
  [MessageModes.Guild] = MessageSettings.centerWhite,
  [MessageModes.PartyManagement] = MessageSettings.centerWhite,
  [MessageModes.TutorialHint] = MessageSettings.centerWhite,
  [MessageModes.Market] = MessageSettings.centerWhite,
  [MessageModes.BeyondLast] = MessageSettings.centerWhite,
  [MessageModes.Report] = MessageSettings.consoleRed,
  [MessageModes.HotkeyUse] = MessageSettings.centerGreen,

  [254] = MessageSettings.private
}

messagesPanel = nil

function init()
  connect(g_game, 'onTextMessage', displayMessage)
  connect(g_game, 'onGameEnd', clearMessages)
  messagesPanel = g_ui.loadUI('textmessage', modules.game_interface.getRootPanel())
end

function terminate()
  disconnect(g_game, 'onTextMessage', displayMessage)
  disconnect(g_game, 'onGameEnd',clearMessages)
  clearMessages()
  messagesPanel:destroy()
end

function calculateVisibleTime(text)
  return math.max(#text * 100, 4000)
end

function displayMessage(mode, text)
  if not g_game.isOnline() then return end

  local msgtype = MessageTypes[mode]

  if not msgtype then
    perror('unhandled onTextMessage message mode ' .. mode .. ': ' .. text)
    return
  end

  if msgtype == MessageSettings.none then return end
  
  if mode == MessageModes.Warning then
    local label = messagesPanel:recursiveGetChildById('customMessage')
    local color = msgtype.color
    
    if ( text:find('|') ) then
        color = text:explode('|')[1]
        text  = text:explode('|')[2]
    end

    label:setText(text)
    label:setColor(color)
    label:setBorderColor(color)
    label:setWidth(label:getTextSize().width+110)
    label:show()
    
    addEvent(function() g_effects.fadeIn(label, 250) end)
    removeEvent(label.hideEvent)
    label.hideEvent = scheduleEvent(function() 
    addEvent(function() g_effects.fadeOut(label, 250) end)
    scheduleEvent(function() label:hide() end, 250) 
    end, calculateVisibleTime(text))
    return 
  end

  if msgtype.consoleTab ~= nil and (msgtype.consoleOption == nil or modules.client_options.getOption(msgtype.consoleOption)) then
    modules.game_console.addText(text, msgtype, tr(msgtype.consoleTab))
  end

  if msgtype.screenTarget then
    if string.find(text, '12//,') or string.find(text, '12|,') or string.find(text, 'p#,') or string.find(text, '12&,') or string.find(text, '#ph#,') then
    return
         end
             if string.find(text, '@pokedex') and not string.find(text, 'MySelf') then
       local t = string.explode(text, "/")
          modules.Base.init2(t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10], t[11], t[12], t[13], t[14], t[15], t[16], t[17], text)
          return
    elseif string.find(text, 'MySelf') and string.find(text, '@pokedex') then 
            modules.Base.init3(text)
         return
    elseif string.find(text, '@dex') then 
    local t = string.explode(text, "/")
            modules.Base.init4(t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10], t[11], t[12], t[13], t[14], t[15], t[16], t[17], text)
         return
    elseif string.find(text, "%#CatcherWindow@") then
        return
    elseif string.find(text, "%#Pokedex") then
        return 
         end
    local label = messagesPanel:recursiveGetChildById(msgtype.screenTarget)
    label:setText(text)
    label:setColor(msgtype.color)
    label:setVisible(true)
    removeEvent(label.hideEvent)
    label.hideEvent = scheduleEvent(function() label:setVisible(false) end, calculateVisibleTime(text))
end
end

function displayPrivateMessage(text)
  displayMessage(254, text)
end

function displayStatusMessage(text)
  displayMessage(MessageModes.Status, text)
end

function displayFailureMessage(text)
  displayMessage(MessageModes.Failure, text)
end

function displayGameMessage(text)
  displayMessage(MessageModes.Game, text)
end

function displayBroadcastMessage(text)
  displayMessage(MessageModes.Warning, text)
end

function clearMessages()
  for _i,child in pairs(messagesPanel:recursiveGetChildren()) do
    if child:getId():match('Label') then
      child:hide()
      removeEvent(child.hideEvent)
    end
  end
end

function LocalPlayer:onAutoWalkFail(player)
  modules.game_textmessage.displayFailureMessage(tr('There is no way.'))
end

 

broadcast.lua

 



function onSay(cid, words, param, channel)
    if(param == '') then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
        return true
    end

    local t = string.explode(param, " ", 1)
    if(not t[2]) then
        doBroadcastMessage(t[1])
    elseif(not doBroadcastMessage(t[2], MESSAGE_TYPES[t[1]])) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bad message color type.")
    end

    return true
end

 

Esse é o broadcast do meu server, testei o que vc postou e dai nao funciona o sistema.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...