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 = { [32] = "", [64] = "", [184] = "", } 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 if (not size or size > 64) then size = 184 elseif (size > 32) then size = 64 else size = 32 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, SetAvatar do function SetImage(...) surface.SetMaterial(FetchImage(...)) end function SetAvatar(...) surface.SetMaterial(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, math.max(w, h)) surface.SetDrawColor(col or color_white) surface.DrawTexturedRect(x, y, w, h) end end return { FetchImage = FetchImage, FetchAvatar = FetchAvatar, SetImage = SetImage, GetImage = FetchImage, SetAvatar = SetAvatar, GetAvatar = FetchAvatar, WebImage = WebImage, DrawImage = WebImage, AvatarImage = AvatarImage, DrawAvatar = AvatarImage, }