Jump to content
Gengo

[OtClient] Mensagem Personalizada

Recommended Posts

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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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, "%#[email protected]") 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.





×
×
  • Create New...