Pivity

Chat Indicator Images to text

Last read Never
#1

Would anyone know how to change the chat Indicators to text instead of an image above the players head?

I want the text to be like "Typing..." and "Speaking..."


local function drawIndicator(ply)
  if not ply:IsTyping() then
    if ply.indicator then
      ply.indicator:Remove()
      ply.indicator = nil
    end
    return
  end

  local indicator = ply.indicator
  if not IsValid(indicator) then
    indicator = ClientsideModel("models/extras/info_speech.mdl", RENDERGROUP_OPAQUE)
    if not IsValid(indicator) then return end -- In case the non networked entity limit is hit (still prints a red error message, but doesn't spam client console with lua errors)
    ply.indicator = indicator
  end
  indicator:SetNoDraw(true)
  indicator:SetModelScale(0.6)

  local ragdoll = ply:GetRagdollEntity()
  if IsValid(ragdoll) then
    local maxs = ragdoll:OBBMaxs()
    indicator:SetPos(ragdoll:GetPos() + Vector(0, 0, maxs.z) + Vector(0, 0, 12))
  else
    indicator:SetPos(ply:GetPos() + Vector(0, 0, 72 * ply:GetModelScale()) + Vector(0, 0, 12))
  end

  local curTime = CurTime()
  local angle = indicator:GetAngles()
  angle.y = (angle.y + (360 * (curTime - (indicator.lastDraw or 0)))) % 360
  indicator:SetAngles(angle)
  indicator.lastDraw = curTime

  indicator:SetupBones()
  indicator:DrawModel()
end

hook.Add("PostPlayerDraw", "DarkRP_ChatIndicator", drawIndicator)
hook.Add("CreateClientsideRagdoll", "DarkRP_ChatIndicator", function(ent, ragdoll)
  if not ent:IsPlayer() then return end

  local oldRenderOverride = ragdoll.RenderOverride -- Just in case - best be safe
  ragdoll.RenderOverride = function(self)
    if ent:IsValid() then
      drawIndicator(ent)
    end

    if oldRenderOverride then
      oldRenderOverride(self)
    else
      self:DrawModel()
    end
  end
end)

-- CSEnts aren't GC'd.
-- https://github.com/Facepunch/garrysmod-issues/issues/1387
gameevent.Listen("player_disconnect")
hook.Add("player_disconnect", "DarkRP_ChatIndicator", function(data)
  local ply = Player(data.userid)

  if not IsValid(ply) then return end -- disconnected while joining

  if ply.indicator then
    ply.indicator:Remove()
    ply.indicator = nil
  end
end)


#2

You cannot achieve what you are looking for by simply modifying the code above. It's done in a different way.

You will need to code it from the ground up, and for that you should post a job.

Users viewing this thread
Nobody