Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local default_avatar = Material("vgui/avatar_default.vtf")
- local cache_path = "assets/%s.png"
- local profile_url = "http://steamcommunity.com/profiles/%s/?xml=1"
- local cached_avatars = {}
- local cached_materials = {}
- local avatar_patterns = setmetatable({
- [32] = "<avatarIcon><!%[CDATA%[(.*)%]%]></avatarIcon>",
- [64] = "<avatarMedium><!%[CDATA%[(.*)%]%]></avatarMedium>",
- [184] = "<avatarFull><!%[CDATA%[(.*)%]%]></avatarFull>",
- }, {
- __index = function(self, n)
- n = tonumber(n)
- if (not n or n <= 32) then
- return self[32]
- elseif (n <= 64) then
- return self[64]
- else
- return self[184]
- end
- end,
- })
- local FetchImage, FetchAvatar do
- function FetchImage(url, params)
- local url_hash = util.SHA1(url)
- if (not cached_materials[url_hash]) then
- local path = string.format(cache_path, url_hash)
- cached_materials[url_hash] = Material("data/" .. path, params)
- http.Fetch(url, function(data)
- file.CreateDir("assets")
- file.Write(path, data)
- local new = Material("data/" .. path, params)
- cached_materials[url_hash]:SetTexture("$basetexture", new:GetName())
- end)
- end
- return cached_materials[url_hash]
- end
- function FetchAvatar(id, size, params)
- if (type(id) == "Player") then
- id = id:SteamID64()
- end
- if (id == "BOT") then
- return default_avatar
- end
- local size_id = string.format("%s_%i", id, size)
- if (not cached_avatars[size_id]) then
- cached_avatars[size_id] = Material("Avatar " .. size_id, params)
- cached_avatars[size_id]:SetTexture("$basetexture", default_avatar:GetName())
- http.Fetch(string.format(profile_url, id), function(data)
- local link = string.match(data, avatar_patterns[size])
- if (not link) then return end
- local new = FetchImage(link, params)
- cached_avatars[size_id]:SetTexture("$basetexture", new:GetName())
- end)
- end
- return cached_avatars[size_id]
- end
- end
- local SetImage, GetImage, SetAvatar, GetAvatar do
- function SetImage(...)
- surface.SetMaterial(FetchImage(...))
- end
- function GetImage(...)
- return FetchImage(...)
- end
- function SetAvatar(...)
- surface.SetMaterial(FetchAvatar(...))
- end
- function GetAvatar(...)
- return FetchAvatar(...)
- end
- end
- local WebImage, AvatarImage do
- function WebImage(url, x, y, w, h, col)
- SetImage(url)
- surface.SetDrawColor(col or color_white)
- surface.DrawTexturedRect(x, y, w, h)
- end
- function AvatarImage(id, x, y, w, h, col)
- SetAvatar(id)
- surface.SetDrawColor(col or color_white)
- surface.DrawTexturedRect(x, y, w, h)
- end
- end
- return {
- FetchImage = FetchImage,
- FetchAvatar = FetchAvatar,
- SetImage = SetImage,
- GetImage = GetImage,
- SetAvatar = SetAvatar,
- GetAvatar = GetAvatar,
- WebImage = WebImage,
- AvatarImage = AvatarImage,
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement