<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alliedmods.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BenefitOfLaughing</id>
	<title>AlliedModders Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alliedmods.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BenefitOfLaughing"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/Special:Contributions/BenefitOfLaughing"/>
	<updated>2026-05-09T14:45:40Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Counter-Strike:_Global_Offensive_UserMessages&amp;diff=9734</id>
		<title>Counter-Strike: Global Offensive UserMessages</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Counter-Strike:_Global_Offensive_UserMessages&amp;diff=9734"/>
		<updated>2014-11-14T14:06:01Z</updated>

		<summary type="html">&lt;p&gt;BenefitOfLaughing: Change the source from mercurial to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Counter-Strike: Global Offensive uses Google's [[Protobuf|Protocol Buffers]] instead of Valve's traditional UserMessages.&lt;br /&gt;
&lt;br /&gt;
The data on this page was read from [https://github.com/alliedmodders/hl2sdk/blob/csgo/public/game/shared/csgo/protobuf/cstrike15_usermessages.proto#L68].  The initial versions of these files were provided by Valve and updated by the AlliedModders staff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;//====== Copyright (c) 2013, Valve Corporation, All rights reserved. ========//&lt;br /&gt;
//&lt;br /&gt;
// Redistribution and use in source and binary forms, with or without &lt;br /&gt;
// modification, are permitted provided that the following conditions are met:&lt;br /&gt;
//&lt;br /&gt;
// Redistributions of source code must retain the above copyright notice, this&lt;br /&gt;
// list of conditions and the following disclaimer.&lt;br /&gt;
// Redistributions in binary form must reproduce the above copyright notice, &lt;br /&gt;
// this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
// and/or other materials provided with the distribution.&lt;br /&gt;
//&lt;br /&gt;
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot;&lt;br /&gt;
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE &lt;br /&gt;
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE &lt;br /&gt;
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE &lt;br /&gt;
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR &lt;br /&gt;
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF &lt;br /&gt;
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS &lt;br /&gt;
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN &lt;br /&gt;
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) &lt;br /&gt;
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF &lt;br /&gt;
// THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
//===========================================================================//&lt;br /&gt;
//&lt;br /&gt;
// Purpose: The file defines our Google Protocol Buffers which are used in over &lt;br /&gt;
// the wire messages for the Source engine.&lt;br /&gt;
//&lt;br /&gt;
//=============================================================================&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VGUIMenu ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|SubKey|string}}&lt;br /&gt;
{{hl2msg|string|name|}}&lt;br /&gt;
{{hl2msg|string|str|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|VGUIMenu|string}}&lt;br /&gt;
{{hl2msg|string|name|}}&lt;br /&gt;
{{hl2msg|bool|show|}}&lt;br /&gt;
{{hl2msg|repeated SubKey|subkeys|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== Geiger ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|Geiger|string}}&lt;br /&gt;
{{hl2msg|int32|range|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== Train ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|Train|string}}&lt;br /&gt;
{{hl2msg|int32|train|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== HudText ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|HudText|string}}&lt;br /&gt;
{{hl2msg|string|text|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== SayText ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|SayText|string}}&lt;br /&gt;
{{hl2msg|int32|ent_idx|}}&lt;br /&gt;
{{hl2msg|string|text|}}&lt;br /&gt;
{{hl2msg|bool|chat|}}&lt;br /&gt;
{{hl2msg|bool|textallchat|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== SayText2 ==&lt;br /&gt;
{{qnotice|As of this writing, params requires four empty strings or it will crash the client}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|SayText2|string}}&lt;br /&gt;
{{hl2msg|int32|ent_idx|}}&lt;br /&gt;
{{hl2msg|bool|chat|}}&lt;br /&gt;
{{hl2msg|string|msg_name|}}&lt;br /&gt;
{{hl2msg|repeated string|params|}}&lt;br /&gt;
{{hl2msg|bool|textallchat|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== TextMsg ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|TextMsg|string}}&lt;br /&gt;
{{hl2msg|int32|msg_dst|}}&lt;br /&gt;
{{hl2msg|repeated string|params|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== HudMsg ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|HudMsg|string}}&lt;br /&gt;
{{hl2msg|int32|channel|}}&lt;br /&gt;
{{hl2msg|CMsgVector2D|pos|}}&lt;br /&gt;
{{hl2msg|CMsgRGBA|clr1|}}&lt;br /&gt;
{{hl2msg|CMsgRGBA|clr2|}}&lt;br /&gt;
{{hl2msg|int32|effect|}}&lt;br /&gt;
{{hl2msg|float|fade_in_time|}}&lt;br /&gt;
{{hl2msg|float|fade_out_time|}}&lt;br /&gt;
{{hl2msg|float|hold_time|}}&lt;br /&gt;
{{hl2msg|float|fx_time|}}&lt;br /&gt;
{{hl2msg|string|text|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== Shake ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|Shake|string}}&lt;br /&gt;
{{hl2msg|int32|command|}}&lt;br /&gt;
{{hl2msg|float|local_amplitude|}}&lt;br /&gt;
{{hl2msg|float|frequency|}}&lt;br /&gt;
{{hl2msg|float|duration|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== Fade ==&lt;br /&gt;
{{qnotice|fade HUD in/out}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|Fade|string}}&lt;br /&gt;
{{hl2msg|int32|duration|}}&lt;br /&gt;
{{hl2msg|int32|hold_time|}}&lt;br /&gt;
{{hl2msg|int32|flags|fade type (in / out)}}&lt;br /&gt;
{{hl2msg|CMsgRGBA|clr|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== Rumble ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|Rumble|string}}&lt;br /&gt;
{{hl2msg|int32|index|}}&lt;br /&gt;
{{hl2msg|int32|data|}}&lt;br /&gt;
{{hl2msg|int32|flags|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== CloseCaption ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|CloseCaption|string}}&lt;br /&gt;
{{hl2msg|uint32|hash|}}&lt;br /&gt;
{{hl2msg|int32|duration|}}&lt;br /&gt;
{{hl2msg|bool|from_player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== CloseCaptionDirect ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|CloseCaptionDirect|string}}&lt;br /&gt;
{{hl2msg|uint32|hash|}}&lt;br /&gt;
{{hl2msg|int32|duration|}}&lt;br /&gt;
{{hl2msg|bool|from_player|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== SendAudio ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|SendAudio|string}}&lt;br /&gt;
{{hl2msg|string|radio_sound|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== RawAudio ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|RawAudio|string}}&lt;br /&gt;
{{hl2msg|int32|pitch|}}&lt;br /&gt;
{{hl2msg|int32|ent_index|}}&lt;br /&gt;
{{hl2msg|float|duration|}}&lt;br /&gt;
{{hl2msg|string|voice_filename|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== VoiceMask ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|PlayerMask|string}}&lt;br /&gt;
{{hl2msg|int32|game_rules_mask|}}&lt;br /&gt;
{{hl2msg|int32|ban_masks|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|VoiceMask|string}}&lt;br /&gt;
{{hl2msg|repeated PlayerMask|player_masks|}}&lt;br /&gt;
{{hl2msg|bool|player_mod_enable|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== Damage ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|Damage|string}}&lt;br /&gt;
{{hl2msg|int32|amount|}}&lt;br /&gt;
{{hl2msg|CMsgVector|inflictor_world_pos|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== RadioText ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|RadioText|string}}&lt;br /&gt;
{{hl2msg|int32|msg_dst|}}&lt;br /&gt;
{{hl2msg|int32|client|}}&lt;br /&gt;
{{hl2msg|string|msg_name|}}&lt;br /&gt;
{{hl2msg|repeated string|params|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== HintText ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|HintText|string}}&lt;br /&gt;
{{hl2msg|string|text|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== KeyHintText ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|KeyHintText|string}}&lt;br /&gt;
{{hl2msg|string|hints|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== ProcessSpottedEntityUpdate ==&lt;br /&gt;
{{qnotice|gurjeets - Message below is slightly bigger in size than the non-protobuf version, by around 8 bits. }}&lt;br /&gt;
{{begin-hl2msg|SpottedEntityUpdate|string}}&lt;br /&gt;
{{hl2msg|int32|entity_idx|}}&lt;br /&gt;
{{hl2msg|int32|class_id|}}&lt;br /&gt;
{{hl2msg|int32|origin_x|}}&lt;br /&gt;
{{hl2msg|int32|origin_y|}}&lt;br /&gt;
{{hl2msg|int32|origin_z|}}&lt;br /&gt;
{{hl2msg|int32|angle_y|}}&lt;br /&gt;
{{hl2msg|bool|defuser|}}&lt;br /&gt;
{{hl2msg|bool|player_has_defuser|}}&lt;br /&gt;
{{hl2msg|bool|player_has_c4|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ProcessSpottedEntityUpdate|string}}&lt;br /&gt;
{{hl2msg|repeated SpottedEntityUpdate|entity_updates|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== ReloadEffect ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ReloadEffect|string}}&lt;br /&gt;
{{hl2msg|int32|entidx|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== AdjustMoney ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|AdjustMoney|string}}&lt;br /&gt;
{{hl2msg|int32|amount|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== KillCam ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|KillCam|string}}&lt;br /&gt;
{{hl2msg|int32|obs_mode|}}&lt;br /&gt;
{{hl2msg|int32|first_target|}}&lt;br /&gt;
{{hl2msg|int32|second_target|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== DesiredTimescale ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|DesiredTimescale|string}}&lt;br /&gt;
{{hl2msg|float|desired_timescale|}}&lt;br /&gt;
{{hl2msg|float|duration_realtime_sec|}}&lt;br /&gt;
{{hl2msg|int32|interpolator_type|}}&lt;br /&gt;
{{hl2msg|float|start_blend_time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== CurrentTimescale ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|CurrentTimescale|string}}&lt;br /&gt;
{{hl2msg|float|cur_timescale|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== AchievementEvent ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|AchievementEvent|string}}&lt;br /&gt;
{{hl2msg|int32|achievement|}}&lt;br /&gt;
{{hl2msg|int32|count|}}&lt;br /&gt;
{{hl2msg|int32|user_id|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== MatchEndConditions ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|MatchEndConditions|string}}&lt;br /&gt;
{{hl2msg|int32|fraglimit|}}&lt;br /&gt;
{{hl2msg|int32|mp_maxrounds|}}&lt;br /&gt;
{{hl2msg|int32|mp_winlimit|}}&lt;br /&gt;
{{hl2msg|int32|mp_timelimit|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== PlayerStatsUpdate ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|Stat|string}}&lt;br /&gt;
{{hl2msg|int32|idx|}}&lt;br /&gt;
{{hl2msg|int32|delta|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|PlayerStatsUpdate|string}}&lt;br /&gt;
{{hl2msg|int32|version|}}&lt;br /&gt;
{{hl2msg|int32|official_server|}}&lt;br /&gt;
{{hl2msg|repeated Stat|stats|}}&lt;br /&gt;
{{hl2msg|int32|user_id|}}&lt;br /&gt;
{{hl2msg|int32|crc|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== DisplayInventory ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|DisplayInventory|string}}&lt;br /&gt;
{{hl2msg|bool|display|}}&lt;br /&gt;
{{hl2msg|int32|user_id|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== XRankGet ==&lt;br /&gt;
{{qnotice|Get ELO Rank Value from Client}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|XRankGet|string}}&lt;br /&gt;
{{hl2msg|int32|mode_idx|}}&lt;br /&gt;
{{hl2msg|int32|controller|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== XRankUpd ==&lt;br /&gt;
{{qnotice|Update ELO Rank Value on Client}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|XRankUpd|string}}&lt;br /&gt;
{{hl2msg|int32|mode_idx|}}&lt;br /&gt;
{{hl2msg|int32|controller|}}&lt;br /&gt;
{{hl2msg|int32|ranking|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== CallVoteFailed ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|CallVoteFailed|string}}&lt;br /&gt;
{{hl2msg|int32|reason|}}&lt;br /&gt;
{{hl2msg|int32|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== VoteStart ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|VoteStart|string}}&lt;br /&gt;
{{hl2msg|int32|team|}}&lt;br /&gt;
{{hl2msg|int32|ent_idx|}}&lt;br /&gt;
{{hl2msg|int32|vote_type|}}&lt;br /&gt;
{{hl2msg|string|disp_str|}}&lt;br /&gt;
{{hl2msg|string|details_str|}}&lt;br /&gt;
{{hl2msg|string|other_team_str|}}&lt;br /&gt;
{{hl2msg|bool|is_yes_no_vote|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== VotePass ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|VotePass|string}}&lt;br /&gt;
{{hl2msg|int32|team|}}&lt;br /&gt;
{{hl2msg|int32|vote_type|}}&lt;br /&gt;
{{hl2msg|string|disp_str|}}&lt;br /&gt;
{{hl2msg|string|details_str|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== VoteFailed ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|VoteFailed|string}}&lt;br /&gt;
{{hl2msg|int32|team|}}&lt;br /&gt;
{{hl2msg|int32|reason|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== VoteSetup ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|VoteSetup|string}}&lt;br /&gt;
{{hl2msg|repeated string|potential_issues|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== SendLastKillerDamageToClient ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|SendLastKillerDamageToClient|string}}&lt;br /&gt;
{{hl2msg|int32|num_hits_given|}}&lt;br /&gt;
{{hl2msg|int32|damage_given|}}&lt;br /&gt;
{{hl2msg|int32|num_hits_taken|}}&lt;br /&gt;
{{hl2msg|int32|damage_taken|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== ServerRankUpdate ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|RankUpdate|string}}&lt;br /&gt;
{{hl2msg|int32|account_id|}}&lt;br /&gt;
{{hl2msg|int32|rank_old|}}&lt;br /&gt;
{{hl2msg|int32|rank_new|}}&lt;br /&gt;
{{hl2msg|int32|num_wins|}}&lt;br /&gt;
{{hl2msg|float|rank_change|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ServerRankUpdate|string}}&lt;br /&gt;
{{hl2msg|repeated RankUpdate|rank_update|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== ItemPickup ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ItemPickup|string}}&lt;br /&gt;
{{hl2msg|string|item|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== ShowMenu ==&lt;br /&gt;
{{qnotice|show hud menu}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ShowMenu|string}}&lt;br /&gt;
{{hl2msg|int32|bits_valid_slots|}}&lt;br /&gt;
{{hl2msg|int32|display_time|}}&lt;br /&gt;
{{hl2msg|string|menu_string|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== BarTime ==&lt;br /&gt;
{{qnotice|For the C4 progress bar.}}&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|BarTime|string}}&lt;br /&gt;
{{hl2msg|string|time|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== AmmoDenied ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|AmmoDenied|string}}&lt;br /&gt;
{{hl2msg|int32|ammoIdx|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== MarkAchievement ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|MarkAchievement|string}}&lt;br /&gt;
{{hl2msg|string|achievement|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== MatchStatsUpdate ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|MatchStatsUpdate|string}}&lt;br /&gt;
{{hl2msg|string|update|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== ItemDrop ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ItemDrop|string}}&lt;br /&gt;
{{hl2msg|int64|itemid|}}&lt;br /&gt;
{{hl2msg|bool|death|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== GlowPropTurnOff ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|GlowPropTurnOff|string}}&lt;br /&gt;
{{hl2msg|int32|entidx|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Messages where the data seems to e irrelevant}}&lt;br /&gt;
&lt;br /&gt;
== ResetHud ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ResetHud|string}}&lt;br /&gt;
{{hl2msg|bool|reset|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== GameTitle ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|GameTitle|string}}&lt;br /&gt;
{{hl2msg|int32|dummy|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== RequestState ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|RequestState|string}}&lt;br /&gt;
{{hl2msg|int32|dummy|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== StopSpectatorMode ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|StopSpectatorMode|string}}&lt;br /&gt;
{{hl2msg|int32|dummy|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== DisconnectToLobby ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|DisconnectToLobby|string}}&lt;br /&gt;
{{hl2msg|int32|dummy|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== WarmupHasEnded ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|WarmupHasEnded|string}}&lt;br /&gt;
{{hl2msg|int32|dummy|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== ClientInfo ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ClientInfo|string}}&lt;br /&gt;
{{hl2msg|int32|dummy|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== ServerRankRevealAll ==&lt;br /&gt;
&lt;br /&gt;
{{begin-hl2msg|ServerRankRevealAll|string}}&lt;br /&gt;
{{hl2msg|int32|dummy|}}&lt;br /&gt;
{{end-hl2msg}}&lt;br /&gt;
&lt;br /&gt;
== UpdateTeamMoney ==&lt;br /&gt;
{{qnotice|This UserMessage no longer exists }}&lt;/div&gt;</summary>
		<author><name>BenefitOfLaughing</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Protobuf&amp;diff=9733</id>
		<title>Protobuf</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Protobuf&amp;diff=9733"/>
		<updated>2014-11-14T14:04:45Z</updated>

		<summary type="html">&lt;p&gt;BenefitOfLaughing: Change the source from mercurial to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Intro==&lt;br /&gt;
Unlike the serial bitbuffer-backed usermessages in older games, newer games such as CS:GO (and DOTA 2) now use Google's [https://code.google.com/p/protobuf/ Protocol Buffers] or &amp;quot;protobuf&amp;quot; to back net messages and usermessages.&lt;br /&gt;
&lt;br /&gt;
==Differences==&lt;br /&gt;
Instead of having to be read or written in order, the protobuf usermessages use defined fields, accessible by name, in any order.&lt;br /&gt;
&lt;br /&gt;
Starting, ending, and hooking usermessages remains unchanged. Reading and writing values to/from them is done using the Pb* set of natives in protobuf.inc instead of the Bf* natives in bitbuffer.inc.&lt;br /&gt;
&lt;br /&gt;
You can tell which usermessage system is in use for the current game by checking GetUserMessageType(). Possible returns are UM_BitBuf and UM_Protobuf.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basic fields (&amp;quot;optional&amp;quot; or &amp;quot;required&amp;quot;) are single values and use the PbRead*/PbSet* natives.&lt;br /&gt;
&lt;br /&gt;
Repeated fields are arrays of values, accessible by their 0-based index with the PbReadRepeated* natives or added with the PbAdd* natives. You can get the count of values in a repeated field with PbGetRepeatedFieldCount.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For message and field names, see the [https://github.com/alliedmodders/hl2sdk/blob/csgo/public/game/shared/csgo/protobuf/cstrike15_usermessages.proto#L68 CS:GO Usermessages] as defined in protobuf's proto format, the [[Counter-Strike: Global Offensive UserMessages]] page, or the [[DOTA 2 UserMessages]] page.&lt;br /&gt;
&lt;br /&gt;
==Protobuf natives==&lt;br /&gt;
See [https://github.com/alliedmodders/sourcemod/blob/master/plugins/include/protobuf.inc protobuf.inc]&lt;br /&gt;
&lt;br /&gt;
==Multi-game usermessages example==&lt;br /&gt;
From funcommands' drug.sp, using the [http://hg.alliedmods.net/hl2sdks/hl2sdk-csgo/file/9a3c7f5049b6/public/game/shared/csgo/protobuf/cstrike15_usermessages.proto#l204 Fade] usermessage:&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
	new clients[2];&lt;br /&gt;
	clients[0] = client;	&lt;br /&gt;
	&lt;br /&gt;
	new duration = 255;&lt;br /&gt;
	new holdtime = 255;&lt;br /&gt;
	new flags = 0x0002;&lt;br /&gt;
	new color[4] = { 0, 0, 0, 128 };&lt;br /&gt;
	color[0] = GetRandomInt(0,255);&lt;br /&gt;
	color[1] = GetRandomInt(0,255);&lt;br /&gt;
	color[2] = GetRandomInt(0,255);&lt;br /&gt;
&lt;br /&gt;
	new Handle:message = StartMessageEx(g_FadeUserMsgId, clients, 1);&lt;br /&gt;
	&lt;br /&gt;
	if (GetUserMessageType() == UM_Protobuf)&lt;br /&gt;
	{&lt;br /&gt;
		PbSetInt(message, &amp;quot;duration&amp;quot;, duration);&lt;br /&gt;
		PbSetInt(message, &amp;quot;hold_time&amp;quot;, holdtime);&lt;br /&gt;
		PbSetInt(message, &amp;quot;flags&amp;quot;, flags);&lt;br /&gt;
		PbSetColor(message, &amp;quot;clr&amp;quot;, color);&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		BfWriteShort(message, duration);&lt;br /&gt;
		BfWriteShort(message, holdtime);&lt;br /&gt;
		BfWriteShort(message, flags);&lt;br /&gt;
		BfWriteByte(message, color[0]);&lt;br /&gt;
		BfWriteByte(message, color[1]);&lt;br /&gt;
		BfWriteByte(message, color[2]);&lt;br /&gt;
		BfWriteByte(message, color[3]);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	EndMessage();&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Embedded message example==&lt;br /&gt;
&lt;br /&gt;
This example sends a VGUIMenu usermessage, adding values to a repeated field &amp;quot;subkeys&amp;quot; that uses the [http://hg.alliedmods.net/hl2sdks/hl2sdk-csgo/file/tip/public/game/shared/csgo/protobuf/cstrike15_usermessages.proto#l137 Subkey message type] defined in the [http://hg.alliedmods.net/hl2sdks/hl2sdk-csgo/file/tip/public/game/shared/csgo/protobuf/cstrike15_usermessages.proto#l132 VGUIMenu message].&lt;br /&gt;
&lt;br /&gt;
Once an embedded message handle is retrieved with ReadMessage, you can read or write to its fields with the normal PbRead/Set natives. GetRepeatedMessage or AddMessage will retrieve the handle for reading or writing respectively if it is a repeated field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;SendSourceModMOTD(client)&lt;br /&gt;
{	&lt;br /&gt;
	new Handle:pb = StartMessageOne(&amp;quot;VGUIMenu&amp;quot;, client);&lt;br /&gt;
	&lt;br /&gt;
	PbSetString(pb, &amp;quot;name&amp;quot;, &amp;quot;info&amp;quot;);&lt;br /&gt;
	PbSetBool(pb, &amp;quot;show&amp;quot;, true);&lt;br /&gt;
	&lt;br /&gt;
	new Handle:subkey;&lt;br /&gt;
	&lt;br /&gt;
	subkey = PbAddMessage(pb, &amp;quot;subkeys&amp;quot;);&lt;br /&gt;
	PbSetString(subkey, &amp;quot;name&amp;quot;, &amp;quot;type&amp;quot;);&lt;br /&gt;
	PbSetString(subkey, &amp;quot;str&amp;quot;, &amp;quot;2&amp;quot;); // MOTDPANEL_TYPE_URL&lt;br /&gt;
	&lt;br /&gt;
	subkey = PbAddMessage(pb, &amp;quot;subkeys&amp;quot;);&lt;br /&gt;
	PbSetString(subkey, &amp;quot;name&amp;quot;, &amp;quot;title&amp;quot;);&lt;br /&gt;
	PbSetString(subkey, &amp;quot;str&amp;quot;, &amp;quot;TESTING&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	subkey = PbAddMessage(pb, &amp;quot;subkeys&amp;quot;);&lt;br /&gt;
	PbSetString(subkey, &amp;quot;name&amp;quot;, &amp;quot;msg&amp;quot;);&lt;br /&gt;
	PbSetString(subkey, &amp;quot;str&amp;quot;, &amp;quot;http://www.sourcemod.net&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	EndMessage();&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;/div&gt;</summary>
		<author><name>BenefitOfLaughing</name></author>
		
	</entry>
</feed>