├── CHANGELOG ├── LICENSE ├── README ├── plugins └── gameme.smx ├── scripting ├── gameme.sp ├── gameme_messages.sp └── include │ └── gameme.inc └── translations ├── da └── gameme.phrases.txt ├── de └── gameme.phrases.txt ├── es └── gameme.phrases.txt ├── fr └── gameme.phrases.txt ├── gameme.phrases.txt ├── pl └── gameme.phrases.txt ├── pt └── gameme.phrases.txt ├── rs └── gameme.phrases.txt └── ru └── gameme.phrases.txt /CHANGELOG: -------------------------------------------------------------------------------- 1 | /** 2 | * gameME Plugin 3 | * http://www.gameme.com 4 | * Copyright (C) 2007-2020 TTS Oetzel & Goerz GmbH 5 | * 6 | * This program is free software; you can redistribute it and/or 7 | * modify it under the terms of the GNU General Public License 8 | * as published by the Free Software Foundation; either version 2 9 | * of the License, or (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 19 | */ 20 | 21 | Current work [V5.0.0] 22 | --------------------------------------------------------------------------------------------------------------------------------------------- 23 | + Added more weapon logging for Insurgency 24 | - Updated scripting syntax to match latest stable SM branch v1.10 25 | - Removed some unnecessary code 26 | - Minor changes and fixes 27 | - Compiled against 1.10.0.6453 28 | 29 | 30 | Internal Release [V4.9.0] 31 | --------------------------------------------------------------------------------------------------------------------------------------------- 32 | + Added Auto-Team-Balancer support for CSGO 33 | - Fixed: Handling for CSGO cvar "mp_disconnect_kills_players" 34 | - Fixed: Wrong reset of spectator timers 35 | - Fixed: Raw Message interface "global skill" parameter handling 36 | - Updated example plugin for raw message interface 37 | - Compiled against 1.9.0.6275 38 | 39 | 40 | 5th June 2018 [V4.8.1] 41 | --------------------------------------------------------------------------------------------------------------------------------------------- 42 | + Added CSGO steam community clantag logging 43 | + Added capture/destroy logging for Insurgency 44 | + Added new weapon bowie knife for CSGO 45 | + Added Danish translation of ingame menus 46 | - Minor syntax changes 47 | - Compiled against 1.8.0.6046 48 | 49 | 50 | 3rd January 2016 [V4.7.2] 51 | --------------------------------------------------------------------------------------------------------------------------------------------- 52 | - Fixed: Wrong weapon logging constant 53 | - Compiled against 1.7.3-dev+5280 54 | 55 | 56 | 3rd January 2016 [V4.7.1] 57 | --------------------------------------------------------------------------------------------------------------------------------------------- 58 | + Added new weapons for CSGO 59 | - Fixed: Accuracy tracking for CSGO 60 | - Minor changes 61 | - Compiled against 1.7.3-dev+5280 62 | 63 | 64 | 13th November 2015 [V4.6.1] 65 | --------------------------------------------------------------------------------------------------------------------------------------------- 66 | + Added new weapons for Insurgency 2014 67 | + Added Portuguese translations of ingame menus 68 | - Minor changes 69 | - Compiled against 1.7.3-dev+5275 70 | 71 | 72 | 5th March 2015 [V4.5.1] 73 | --------------------------------------------------------------------------------------------------------------------------------------------- 74 | + Added game support for Insurgency 2014 (headshots, accuracy, kill-assists and more) 75 | + Completed csgo role logging 76 | + Enabled csgo motd support 77 | + Added Spanish translations of ingame menus 78 | - Removed support of mod Insurgency: Modern Infantry Combat 79 | - Minor changes 80 | 81 | 82 | 4th May 2014 [V4.4.2] 83 | --------------------------------------------------------------------------------------------------------------------------------------------- 84 | Fixed: Wrong ingame menu usage 85 | 86 | 87 | 2nd May 2014 [V4.4.1] 88 | --------------------------------------------------------------------------------------------------------------------------------------------- 89 | + Added client query of variable "cl_connectmethod" to know how the players 90 | have connected 91 | + Added "Reset Statistics" to player menu (gameME menu) 92 | + Added Polish/Russian/Serbian translations of ingame menus 93 | - Allow weapon damage display panels to be closed with every number key (0-9) 94 | - Replaced deprecated function "GuessSDKVersion" with "GetEngineVersion" 95 | - Fixed: Hook events too often for some games on map change 96 | - Minor changes 97 | 98 | 99 | 23th January 2013 [V4.3] 100 | --------------------------------------------------------------------------------------------------------------------------------------------- 101 | - CSGO: Added support for new protobuf user messages 102 | - Fixed: Wrong syntax in gameme include file 103 | - Minor changes 104 | 105 | 106 | 21th August 2012 [V4.2] 107 | --------------------------------------------------------------------------------------------------------------------------------------------- 108 | + Added French translation of ingame menus 109 | - Fixed: Kill assists triggered on team-kills 110 | - Fixed: Spectator display requests if display is deactivated 111 | - Fixed: Some warnings 112 | - Minor changes 113 | 114 | 115 | 30th July 2012 [V4.1] 116 | --------------------------------------------------------------------------------------------------------------------------------------------- 117 | + TF2/CSS/DODS/HL2MP: Added support for custom colored ingame messages 118 | + CSS/CSGO/DODS: Added damage display on player-death 119 | + CSGO: Added game support 120 | + CSGO: Added spectator displaying 121 | + CSS/CSGO: Connected spectators see rank info now as well 122 | + CSS/CSGO: Added player role tracking 123 | + Added custom/gg wins and kill/death streaks to raw message interface 124 | - Raw Message interface now uses "DataPacks" to submit data 125 | - Fixed: Weaponstats logging on round-end 126 | - Parts refactored and rewritten for further usage 127 | - Minor changes 128 | 129 | 130 | 31th March 2012 [V4.0] 131 | --------------------------------------------------------------------------------------------------------------------------------------------- 132 | + Added dynamic support to block ingame commands 133 | - Minor changes 134 | 135 | 136 | 8th July 2011 [V3.9] 137 | --------------------------------------------------------------------------------------------------------------------------------------------- 138 | - Block messages with "!" command prefix 139 | - Updated "gameme.inc" to mark functions as optional if not required 140 | - Fixed: Deprecated warning on compile 141 | - Minor changes 142 | 143 | 144 | 26th April 2011 [V3.8] 145 | --------------------------------------------------------------------------------------------------------------------------------------------- 146 | + Added "gameME" Tag to gameserver tags 147 | + Left 4 Dead II: New player action "level_a_charge" 148 | - Fixed: Weapon Accuracy not always dumped 149 | - Minor changes 150 | 151 | 152 | 11th January 2011 [V3.7] 153 | --------------------------------------------------------------------------------------------------------------------------------------------- 154 | - Team Fortress 2: Removed kill weapon logging for 155 | mini-sentrygun 156 | 157 | 158 | 8th January 2011 [V3.6] 159 | --------------------------------------------------------------------------------------------------------------------------------------------- 160 | + Team Fortress 2: Added action "steak" 161 | - Team Fortress 2: Removed special weapon logging 162 | - Minor changes 163 | - Fixed: Minor bugs 164 | 165 | 166 | 13th December 2010 [V3.5] 167 | --------------------------------------------------------------------------------------------------------------------------------------------- 168 | + Register as "gameme" library on plugin load 169 | - Fixed: Spectator displaying for css deathmatch 170 | - Fixed: Mini-Sentrygun "killedobject" event not triggered 171 | - Fixed: Location Logging disabled after plugin load 172 | - Fixed: Some SourceMod warnings 173 | - Fixed: Minor bugs 174 | - Removed: Compiled example for raw message interface 175 | 176 | 177 | 29th October 2010 [V3.4] 178 | --------------------------------------------------------------------------------------------------------------------------------------------- 179 | + Added raw message interface for ingame message customization 180 | and direct access to gameME Stats, documentation is available 181 | at http://www.gameme.com/docs/api/rawmessages 182 | + Added steam language detection and display ingame messages 183 | in steam language 184 | + Counter-Strike: Source: Added cool spectator stats reporting ingame 185 | + Counter-Strike: Source: Added actions "domination", "revenge" and "mvp" 186 | + Team Fortress 2: Added weapons "bushwacka", "glovesurgent", "blackbox" 187 | and "sydneysleeper" 188 | + Team Fortress 2: Support for mini sentryguns 189 | + Team Fortress 2: Added multiple new player actions 190 | + Team Fortress 2: Fixed various point exploits 191 | + Added weapon accuracy logging for Team Fortress 2, Half-Life 2: Deathmatch 192 | and Zombie Panic! Source 193 | + CSPromod: Added round events 194 | + Left4Dead2: Added "spit_hurt" action 195 | - Refactored base game handling 196 | - Fixed: Minor bugs 197 | 198 | 199 | 8th February 2010 [V3.3] 200 | --------------------------------------------------------------------------------------------------------------------------------------------- 201 | + Added game support for CSProMod 202 | + Location Logging for Day of Defeat: Source and Half-Life 2: Deathmatch 203 | + New player actions for Team Fortress 2 204 | + Message coloring for Half-Life 2: Deathmatch 205 | - gameME Menu is available on "!settings" menu 206 | Fixed: Some actions triggered on suicides 207 | 208 | 209 | 2nd December 2009 [V3.2] 210 | --------------------------------------------------------------------------------------------------------------------------------------------- 211 | + Left 4 Dead: Added player/teams actions 212 | + Left 4 Dead: Added team colored ingame messages 213 | + Left 4 Dead II: Added weapon accuracy logging 214 | + Left 4 Dead II: Added melee weapon logging 215 | + Left 4 Dead II: Added team colored ingame messages 216 | + Insurgency: Adding Team objective logging 217 | + Insurgency: Updated accuracy logging 218 | + Team Fortress 2: Added player actions 219 | - Added support for SourceMod v1.3 220 | - Minor enhancements 221 | Fixed: Some minor bugs 222 | 223 | 224 | 25th October 2009 [V3.1] 225 | --------------------------------------------------------------------------------------------------------------------------------------------- 226 | + Improved Performance 227 | - Removed log hook 228 | - Changed player events logging 229 | - Removed multiple plugin detection 230 | - Removed check if vote is in progress 231 | Fixed: Blocking of chat commands on multiple hooks on say/say_team commands 232 | Fixed: Messages rarely not displayed properly 233 | Fixed: Coloring of some player names 234 | Fixed: Usage hint for gameme_player_action 235 | 236 | 237 | 16th June 2009 [V3.0] 238 | --------------------------------------------------------------------------------------------------------------------------------------------- 239 | + Plugin is now called "gameME Plugin" 240 | + Major performance improvements 241 | + Multiple recipients for ingame messages 242 | + Added new tf2 log event "player_teleported" 243 | + Integrated functions of "weapon_logging" plugin, just one plugin is now needed 244 | + Added weapon logging for Insurgency 245 | + New cvar "gameme_log_hook" to be able to disable log hook 246 | + Added check if plugins are loaded multiple times 247 | - Fixed wrong coloring on player names 248 | - Refactoring: Removed legacy code 249 | - Minor changes 250 | Fixed: Wrong accuracy tracking 251 | 252 | 253 | 10th March 2009 [V2.9] 254 | --------------------------------------------------------------------------------------------------------------------------------------------- 255 | - Internal Release 256 | 257 | 258 | 30th November 2008 [V2.8] 259 | --------------------------------------------------------------------------------------------------------------------------------------------- 260 | + Added game detection for "Left4Dead", "Fortress Forever", 261 | "Zombie Panic! Source" and "Age of Chivalry" 262 | + Added "Round_Win" events for "Insurgency" and "Age of Chivalry" 263 | + Added recognition of chat commands for the game "Zombie Panic! Source" 264 | - Minor changes 265 | Fixed: Logging of team names for "Insurgency" 266 | 267 | 268 | 05. October 2008 [V2.7] 269 | --------------------------------------------------------------------------------------------------------------------------------------------- 270 | + Added recognition of chat commands for the game "Insurgency" 271 | - Minor changes 272 | 273 | 274 | 02. August 2008 [V2.6] 275 | --------------------------------------------------------------------------------------------------------------------------------------------- 276 | + Added recognition of game "Insurgency" 277 | + Removed default message prefix and introduce a new cvar to define the prefix manually 278 | - Improved mod detection to ensure game-specific features are enabled 279 | 280 | 281 | 17. July 2008 [V2.5] 282 | --------------------------------------------------------------------------------------------------------------------------------------------- 283 | - Reenabled team-color check for colored messages 284 | - Disabled location logging for Half-Life 2: Deathmatch 285 | 286 | 287 | 08. July 2008 [V2.4] 288 | --------------------------------------------------------------------------------------------------------------------------------------------- 289 | + Improved performance of player location logging 290 | + Enabled location logging for Half-Life 2: Deathmatch 291 | - Removed team-check for colored messages 292 | - Refactoring 293 | - Minor changes 294 | Fixed: Player location logging for the event "suicide" 295 | 296 | 297 | 25. May 2008 [V2.3] 298 | --------------------------------------------------------------------------------------------------------------------------------------------- 299 | + Enable "hlx_sm_psay2"-command for Day of Defeat: Source to allow green colored messages 300 | 301 | 302 | 12. May 2008 [V2.2] 303 | --------------------------------------------------------------------------------------------------------------------------------------------- 304 | + Extend logging with locations for kill, suicides and player events 305 | Fixed: Commands "hlx_sm_msay" and "hlx_sm_hint" are not aborted for Half-Life 2: Deathmatch 306 | 307 | 308 | 16. March 2008 [V2.1] 309 | --------------------------------------------------------------------------------------------------------------------------------------------- 310 | Fixed: Plugin crashes with Half-Life 2: Deathmatch 311 | 312 | 313 | 8. March 2008 [V2.0] 314 | --------------------------------------------------------------------------------------------------------------------------------------------- 315 | + Added HLstatsX address protection system 316 | + Improved performance 317 | + Menus are not displayed during a running vote 318 | - Removed the requirement of the file hlstatsx.sdktools.txt 319 | - Switched to native team swap/detection functions 320 | Fixed: Death players won't be spawned alive by the swap function 321 | 322 | 323 | 9. December 2007 [V1.9] 324 | --------------------------------------------------------------------------------------------------------------------------------------------- 325 | - Team colors are checked on every call 326 | - The function to color players only uses one global array now 327 | Fixed: Handle the comma on splitted messages properly 328 | Fixed: Check now if the client is ingame for all HLstatsX commands 329 | 330 | 331 | 26. November 2007 [V1.8] 332 | --------------------------------------------------------------------------------------------------------------------------------------------- 333 | - Removed native network messages and switched to internal sourcemod commands where possible 334 | Fixed: Reenabled message cache 335 | 336 | 337 | 26. October 2007 [V1.7] 338 | --------------------------------------------------------------------------------------------------------------------------------------------- 339 | + Added support for games of the orange box 340 | + Added coloring in the chat area for Team Fortress 2 341 | + Added headshot/backstab kill events for Team Fortress 2 342 | Fixed: Browsing wrong URL if only one parameter is submitted 343 | 344 | 345 | 22. September 2007 [V1.6] 346 | --------------------------------------------------------------------------------------------------------------------------------------------- 347 | Fixed: Invalid handle created from function CreateArray() because the handles are not closed properly 348 | 349 | 350 | 16. September 2007 [V1.5] 351 | --------------------------------------------------------------------------------------------------------------------------------------------- 352 | - Added support for the inbuilt "AskConnect" dialog type 353 | Fixed: Some debug messages displayed 354 | 355 | 356 | 9. September 2007 [V1.4] 357 | --------------------------------------------------------------------------------------------------------------------------------------------- 358 | + Added cache for colored message to avoid unnecessary parsing 359 | + Team names are colored in private say messages 360 | - Changed way of coloring player names (first name in team color, all others in green) 361 | Fixed: Headshot event is triggered on team-kills 362 | Fixed: Various name display bugs 363 | Fixed: Some other minor bugs 364 | 365 | 366 | 3. September 2007 [V1.3] 367 | --------------------------------------------------------------------------------------------------------------------------------------------- 368 | + Added commands to trigger player/team/world action from sourcemod plugins and rcon interface 369 | + Introduction of command "hlx_sm_redirect" to redirect players with the new engine (Unused yet) 370 | + Added server status command to the HLstatsX ingame menu 371 | - Ingame menu is now callable with "hlx_menu", "hlstatsx" and "hlx" in the chat area 372 | - Added SetModel call to ensure the right player model is displayed after team swap 373 | - New blocked commands "gstats" and "global_stats" by default 374 | 375 | 376 | 23. July 2007 [V1.2] 377 | --------------------------------------------------------------------------------------------------------------------------------------------- 378 | - Initial Release 379 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc. 5 | 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Library General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License 307 | along with this program; if not, write to the Free Software 308 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 309 | 310 | 311 | Also add information on how to contact you by electronic and paper mail. 312 | 313 | If the program is interactive, make it output a short notice like this 314 | when it starts in an interactive mode: 315 | 316 | Gnomovision version 69, Copyright (C) year name of author 317 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 318 | This is free software, and you are welcome to redistribute it 319 | under certain conditions; type `show c' for details. 320 | 321 | The hypothetical commands `show w' and `show c' should show the appropriate 322 | parts of the General Public License. Of course, the commands you use may 323 | be called something other than `show w' and `show c'; they could even be 324 | mouse-clicks or menu items--whatever suits your program. 325 | 326 | You should also get your employer (if you work as a programmer) or your 327 | school, if any, to sign a "copyright disclaimer" for the program, if 328 | necessary. Here is a sample; alter the names: 329 | 330 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 331 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 332 | 333 | , 1 April 1989 334 | Ty Coon, President of Vice 335 | 336 | This General Public License does not permit incorporating your program into 337 | proprietary programs. If your program is a subroutine library, you may 338 | consider it more useful to permit linking proprietary applications with the 339 | library. If this is what you want to do, use the GNU Library General 340 | Public License instead of this License. 341 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | gameME Plugin 2 | Webpage: http://www.gameme.com 3 | Docs: http://www.gameme.com/docs/plugins/gameme 4 | Copyright (C) 2007-2020 TTS Oetzel & Goerz GmbH 5 | 6 | This program is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU General Public License 8 | as published by the Free Software Foundation; either version 2 9 | of the License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program; if not, write to the Free Software 18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 | -------------------------------------------------------------------------------- /plugins/gameme.smx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gamemedev/plugin-sourcemod/98f1126fbebd8c02a0c45a8c2f21e562f4e9b832/plugins/gameme.smx -------------------------------------------------------------------------------- /scripting/gameme_messages.sp: -------------------------------------------------------------------------------- 1 | /** 2 | * gameME Plugin - Raw Messages Interface 3 | * http://www.gameme.com 4 | * Copyright (C) 2007-2020 TTS Oetzel & Goerz GmbH 5 | * 6 | * This program is free software; you can redistribute it and/or 7 | * modify it under the terms of the GNU General Public License 8 | * as published by the Free Software Foundation; either version 2 9 | * of the License, or (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 19 | * 20 | * 21 | * This file demonstrates the access to the raw message 22 | * interface of gameME Stats. Documentation is available 23 | * at http://www.gameme.com/docs/api/rawmessages 24 | * 25 | */ 26 | 27 | #pragma semicolon 1 28 | #include 29 | #include 30 | 31 | 32 | // plugin information 33 | #define GAMEME_MESSAGES_PLUGIN_VERSION "1.3" 34 | public Plugin:myinfo = { 35 | name = "gameME Raw Message Plugin", 36 | author = "TTS Oetzel & Goerz GmbH", 37 | description = "gameME Plugin", 38 | version = GAMEME_MESSAGES_PLUGIN_VERSION, 39 | url = "http://www.gameme.com" 40 | }; 41 | 42 | 43 | /* Example to define query contants to be able to distinct gameME Stats queries. The 44 | * payload is given as cell on query function call 45 | */ 46 | 47 | #define QUERY_TYPE_OTHER 0 48 | #define QUERY_TYPE_ONCLIENTPUTINSERVER 1 49 | 50 | 51 | public OnPluginStart() 52 | { 53 | LogToGame("gameME Raw Messages Example Plugin %s (http://www.gameme.com), copyright (c) 2007-2014 by TTS Oetzel & Goerz GmbH", GAMEME_MESSAGES_PLUGIN_VERSION); 54 | 55 | QueryGameMEStatsTop10("top10", -1, QuerygameMEStatsTop10Callback); 56 | } 57 | 58 | 59 | public OnClientPutInServer(client) 60 | { 61 | // example on how to retrieve data from gameME Stats if player put in server 62 | if (client > 0) { 63 | if (!IsFakeClient(client)) { 64 | QueryGameMEStats("playerinfo", client, QuerygameMEStatsCallback, QUERY_TYPE_ONCLIENTPUTINSERVER); 65 | QueryGameMEStatsNext("next", client, QuerygameMEStatsNextCallback); 66 | } 67 | } 68 | } 69 | 70 | 71 | public Action: QuerygameMEStatsCallback(int command, int payload, int client, Handle datapack) 72 | { 73 | if ((client > 0) && (command == RAW_MESSAGE_CALLBACK_PLAYER)) { 74 | 75 | new Handle: data = CloneHandle(datapack); 76 | ResetPack(data); 77 | 78 | // total values 79 | new rank = ReadPackCell(data); 80 | new players = ReadPackCell(data); 81 | new skill = ReadPackCell(data); 82 | new kills = ReadPackCell(data); 83 | new deaths = ReadPackCell(data); 84 | new Float: kpd = ReadPackFloat(data); 85 | new suicides = ReadPackCell(data); 86 | new headshots = ReadPackCell(data); 87 | new Float: hpk = ReadPackFloat(data); 88 | new Float: accuracy = ReadPackFloat(data); 89 | new connection_time = ReadPackCell(data); 90 | new kill_assists = ReadPackCell(data); 91 | new kills_assisted = ReadPackCell(data); 92 | new points_healed = ReadPackCell(data); 93 | new flags_captured = ReadPackCell(data); 94 | new custom_wins = ReadPackCell(data); 95 | new kill_streak = ReadPackCell(data); 96 | new death_streak = ReadPackCell(data); 97 | 98 | // session values 99 | new session_pos_change = ReadPackCell(data); 100 | new session_skill_change = ReadPackCell(data); 101 | new session_kills = ReadPackCell(data); 102 | new session_deaths = ReadPackCell(data); 103 | new Float: session_kpd = ReadPackFloat(data); 104 | new session_suicides = ReadPackCell(data); 105 | new session_headshots = ReadPackCell(data); 106 | new Float: session_hpk = ReadPackFloat(data); 107 | new Float: session_accuracy = ReadPackFloat(data); 108 | new session_time = ReadPackCell(data); 109 | new session_kill_assists = ReadPackCell(data); 110 | new session_kills_assisted = ReadPackCell(data); 111 | new session_points_healed = ReadPackCell(data); 112 | new session_flags_captured = ReadPackCell(data); 113 | new session_custom_wins = ReadPackCell(data); 114 | new session_kill_streak = ReadPackCell(data); 115 | new session_death_streak = ReadPackCell(data); 116 | 117 | decl String: session_fav_weapon[32]; 118 | ReadPackString(data, session_fav_weapon, 32); 119 | 120 | // global values 121 | new global_rank = ReadPackCell(data); 122 | new global_players = ReadPackCell(data); 123 | new global_skill = ReadPackCell(data); 124 | new global_kills = ReadPackCell(data); 125 | new global_deaths = ReadPackCell(data); 126 | new Float: global_kpd = ReadPackFloat(data); 127 | new global_headshots = ReadPackCell(data); 128 | new Float: global_hpk = ReadPackFloat(data); 129 | 130 | decl String: player_country_code[2]; 131 | ReadPackString(data, player_country_code, 2); 132 | 133 | CloseHandle(data); 134 | 135 | // only write this message to gameserver log if client has connected 136 | if (payload == QUERY_TYPE_ONCLIENTPUTINSERVER) { 137 | LogToGame("Player %L is on rank %d with %d points", client, rank, skill); 138 | } 139 | 140 | } 141 | } 142 | 143 | 144 | public Action: QuerygameMEStatsTop10Callback(int command, int payload, Handle datapack) 145 | { 146 | if ((command == RAW_MESSAGE_CALLBACK_TOP10)) { 147 | 148 | new Handle: data = CloneHandle(datapack); 149 | ResetPack(data); 150 | new total_count = ReadPackCell(data); // total_players 151 | 152 | if (total_count == -1) { 153 | 154 | LogToGame("-----------------------------------------------------------"); 155 | LogToGame("No Players ranked"); 156 | LogToGame("-----------------------------------------------------------"); 157 | 158 | } else { 159 | 160 | LogToGame("-----------------------------------------------------------"); 161 | LogToGame("Current Top10-Players"); 162 | for (new i = 0; (i < total_count); i++) { 163 | 164 | new rank = ReadPackCell(data); // rank 165 | new skill = ReadPackCell(data); // skill 166 | 167 | decl String: name[64]; // name 168 | ReadPackString(data, name, 64); 169 | 170 | new Float: kpd = ReadPackFloat(data); // kpd 171 | new Float: hpk = ReadPackFloat(data); // hpk 172 | 173 | LogToGame("%02d %d %s", rank, skill, name); 174 | } 175 | LogToGame("-----------------------------------------------------------"); 176 | 177 | } 178 | 179 | CloseHandle(data); 180 | } 181 | } 182 | 183 | 184 | public Action: QuerygameMEStatsNextCallback(int command, int payload, int client, Handle datapack) 185 | { 186 | if ((client > 0) && (command == RAW_MESSAGE_CALLBACK_NEXT)) { 187 | 188 | new Handle: data = CloneHandle(datapack); 189 | ResetPack(data); 190 | new total_count = ReadPackCell(data); // total_players 191 | 192 | if (total_count == -1) { 193 | 194 | LogToGame("-----------------------------------------------------------"); 195 | LogToGame("No next players available"); 196 | LogToGame("-----------------------------------------------------------"); 197 | 198 | } else { 199 | 200 | LogToGame("-----------------------------------------------------------"); 201 | LogToGame("Next players for %L", client); 202 | 203 | new prev_skill = -1; 204 | for (new i = 0; (i < total_count); i++) { 205 | 206 | new rank = ReadPackCell(data); // rank 207 | new skill = ReadPackCell(data); // skill 208 | 209 | decl String: name[64]; // name 210 | ReadPackString(data, name, 64); 211 | 212 | new Float: kpd = ReadPackFloat(data); // kpd 213 | new Float: hpk = ReadPackFloat(data); // hpk 214 | 215 | new diff = -1; 216 | if (prev_skill > -1) { 217 | diff = skill - prev_skill; 218 | } 219 | 220 | if (i == 0) { 221 | LogToGame("%02d %d - %s", rank, skill, name); 222 | } else { 223 | LogToGame("%02d %d +%04d %s", rank, skill, diff, name); 224 | } 225 | 226 | if (prev_skill == -1) { 227 | prev_skill = skill; 228 | } 229 | } 230 | LogToGame("-----------------------------------------------------------"); 231 | 232 | } 233 | 234 | CloseHandle(data); 235 | } 236 | } 237 | 238 | 239 | // helper function to format timestamps 240 | format_time(timestamp, String: formatted_time[192]) { 241 | Format(formatted_time, 192, "%dd %02d:%02d:%02dh", timestamp / 86400, timestamp / 3600 % 24, timestamp / 60 % 60, timestamp % 60); 242 | } 243 | 244 | 245 | public onGameMEStatsRank(command, client, String: message_prefix[], &Handle: datapack) 246 | { 247 | if ((client > 0) && (command == RAW_MESSAGE_RANK)) { 248 | new time = 15; 249 | new need_handler = 0; 250 | 251 | new Handle: data = CloneHandle(datapack); 252 | ResetPack(data); 253 | 254 | // total values 255 | new rank = ReadPackCell(data); 256 | new players = ReadPackCell(data); 257 | new skill = ReadPackCell(data); 258 | new kills = ReadPackCell(data); 259 | new deaths = ReadPackCell(data); 260 | new Float: kpd = ReadPackFloat(data); 261 | new suicides = ReadPackCell(data); 262 | new headshots = ReadPackCell(data); 263 | new Float: hpk = ReadPackFloat(data); 264 | new Float: accuracy = ReadPackFloat(data); 265 | new connection_time = ReadPackCell(data); 266 | new kill_assists = ReadPackCell(data); 267 | new kills_assisted = ReadPackCell(data); 268 | new points_healed = ReadPackCell(data); 269 | new flags_captured = ReadPackCell(data); 270 | new custom_wins = ReadPackCell(data); 271 | new kill_streak = ReadPackCell(data); 272 | new death_streak = ReadPackCell(data); 273 | 274 | // session values 275 | new session_pos_change = ReadPackCell(data); 276 | new session_skill_change = ReadPackCell(data); 277 | new session_kills = ReadPackCell(data); 278 | new session_deaths = ReadPackCell(data); 279 | new Float: session_kpd = ReadPackFloat(data); 280 | new session_suicides = ReadPackCell(data); 281 | new session_headshots = ReadPackCell(data); 282 | new Float: session_hpk = ReadPackFloat(data); 283 | new Float: session_accuracy = ReadPackFloat(data); 284 | new session_time = ReadPackCell(data); 285 | new session_kill_assists = ReadPackCell(data); 286 | new session_kills_assisted = ReadPackCell(data); 287 | new session_points_healed = ReadPackCell(data); 288 | new session_flags_captured = ReadPackCell(data); 289 | new session_custom_wins = ReadPackCell(data); 290 | new session_kill_streak = ReadPackCell(data); 291 | new session_death_streak = ReadPackCell(data); 292 | 293 | decl String: session_fav_weapon[32]; 294 | ReadPackString(data, session_fav_weapon, 32); 295 | 296 | // global values 297 | new global_rank = ReadPackCell(data); 298 | new global_players = ReadPackCell(data); 299 | new global_kills = ReadPackCell(data); 300 | new global_deaths = ReadPackCell(data); 301 | new Float: global_kpd = ReadPackFloat(data); 302 | new global_headshots = ReadPackCell(data); 303 | new Float: global_hpk = ReadPackFloat(data); 304 | 305 | CloseHandle(data); 306 | 307 | 308 | decl String: formatted_time[192]; 309 | format_time(connection_time, formatted_time); 310 | decl String: formatted_session_time[192]; 311 | format_time(session_time, formatted_session_time); 312 | 313 | new String: message[1024]; 314 | if (rank < 1) { 315 | Format(message, 1024, "Not yet available"); 316 | } else { 317 | // total 318 | decl String: total_message[512]; 319 | Format(total_message, 512, "->1 - Total\\n Position %d of %d\\n %d Points\\n %d:%d Frags (%.2f)\\n %d (%.0f%%) Headshots\\n %.0f%% Accuracy\\n Time %s\\n\\n", 320 | rank, players, skill, kills, deaths, kpd, headshots, hpk * 100, accuracy * 100, formatted_time); 321 | strcopy(message[strlen(message)], 512, total_message); 322 | 323 | // session 324 | decl String: session_message[512]; 325 | Format(session_message, 512, "->2 - Session\\n %d Positions\\n %d Points\\n %d:%d Frags (%.2f)\\n %d (%.0f%%) Headshots\\n %.0f%% Accuracy\\n %s\\n Time %s\\n", 326 | session_pos_change, session_skill_change, session_kills, session_deaths, session_kpd, session_headshots, session_hpk * 100, session_accuracy * 100, session_fav_weapon, formatted_session_time); 327 | strcopy(message[strlen(message)], 512, session_message); 328 | 329 | // global 330 | if (global_rank < 1) { 331 | decl String: global_message[512]; 332 | Format(global_message, 512, "%s", "->3 - Global\\n Not yet available"); 333 | strcopy(message[strlen(message)], 512, global_message); 334 | } else { 335 | decl String: global_message[512]; 336 | Format(global_message, 512, "->3 - Global\\n Position %d of %d\\n %d Points\\n %d:%d Frags (%.2f)\\n% %d (%.0f%%) Headshots", 337 | global_rank, global_players, global_kills, global_deaths, global_kpd, global_headshots, global_hpk * 100); 338 | strcopy(message[strlen(message)], 512, global_message); 339 | } 340 | } 341 | 342 | if ((!IsFakeClient(client)) && (IsClientInGame(client))) { 343 | DisplayGameMEStatsMenu(client, time, message, need_handler); 344 | } 345 | } 346 | } 347 | 348 | 349 | public onGameMEStatsPublicCommand(command, client, String: message_prefix[], &Handle: datapack) 350 | { 351 | if ((client > 0) && ((command == RAW_MESSAGE_PLACE) || (command == RAW_MESSAGE_KDEATH) || (command == RAW_MESSAGE_SESSION_DATA))) { 352 | 353 | new Handle: data = CloneHandle(datapack); 354 | ResetPack(data); 355 | 356 | // total values 357 | new rank = ReadPackCell(data); 358 | new players = ReadPackCell(data); 359 | new skill = ReadPackCell(data); 360 | new kills = ReadPackCell(data); 361 | new deaths = ReadPackCell(data); 362 | new Float: kpd = ReadPackFloat(data); 363 | new suicides = ReadPackCell(data); 364 | new headshots = ReadPackCell(data); 365 | new Float: hpk = ReadPackFloat(data); 366 | new Float: accuracy = ReadPackFloat(data); 367 | new connection_time = ReadPackCell(data); 368 | new kill_assists = ReadPackCell(data); 369 | new kills_assisted = ReadPackCell(data); 370 | new points_healed = ReadPackCell(data); 371 | new flags_captured = ReadPackCell(data); 372 | new custom_wins = ReadPackCell(data); 373 | new kill_streak = ReadPackCell(data); 374 | new death_streak = ReadPackCell(data); 375 | 376 | // session values 377 | new session_pos_change = ReadPackCell(data); 378 | new session_skill_change = ReadPackCell(data); 379 | new session_kills = ReadPackCell(data); 380 | new session_deaths = ReadPackCell(data); 381 | new Float: session_kpd = ReadPackFloat(data); 382 | new session_suicides = ReadPackCell(data); 383 | new session_headshots = ReadPackCell(data); 384 | new Float: session_hpk = ReadPackFloat(data); 385 | new Float: session_accuracy = ReadPackFloat(data); 386 | new session_time = ReadPackCell(data); 387 | new session_kill_assists = ReadPackCell(data); 388 | new session_kills_assisted = ReadPackCell(data); 389 | new session_points_healed = ReadPackCell(data); 390 | new session_flags_captured = ReadPackCell(data); 391 | new session_custom_wins = ReadPackCell(data); 392 | new session_kill_streak = ReadPackCell(data); 393 | new session_death_streak = ReadPackCell(data); 394 | 395 | decl String: session_fav_weapon[32]; 396 | ReadPackString(data, session_fav_weapon, 32); 397 | 398 | // global values 399 | new global_rank = ReadPackCell(data); 400 | new global_players = ReadPackCell(data); 401 | new global_kills = ReadPackCell(data); 402 | new global_deaths = ReadPackCell(data); 403 | new Float: global_kpd = ReadPackFloat(data); 404 | new global_headshots = ReadPackCell(data); 405 | new Float: global_hpk = ReadPackFloat(data); 406 | 407 | CloseHandle(data); 408 | 409 | decl String: client_message[192]; 410 | switch (command) { 411 | case RAW_MESSAGE_PLACE: 412 | Format(client_message, 192, "%N is on rank %d of %d with %d points", client, rank, players, skill); 413 | case RAW_MESSAGE_KDEATH: 414 | Format(client_message, 192, "%N has %d:%d (%.2f) kills with %d (%.2f) headshots", client, kills, deaths, kpd, headshots, hpk); 415 | case RAW_MESSAGE_SESSION_DATA: 416 | Format(client_message, 192, "%N has %d:%d (%.2f) kills, %d (%.2f) headshots, %d skill change", client, session_kills, session_deaths, session_kpd, session_headshots, session_hpk, session_skill_change); 417 | } 418 | 419 | 420 | decl String: message[192]; 421 | if (strcmp(message_prefix, "") == 0) { 422 | Format(message, 192, "\x01%s", client_message); 423 | } else { 424 | gameMEStatsColorEntities(message_prefix); 425 | Format(message, 192, "\x04%s\x01 %s", message_prefix, client_message); 426 | } 427 | 428 | // display message 429 | if ((!IsFakeClient(client)) && (IsClientInGame(client))) { 430 | PrintToChatAll(message); 431 | } 432 | } 433 | } 434 | 435 | 436 | public onGameMEStatsTop10(command, client, String: message_prefix[], &Handle: datapack) 437 | { 438 | if ((client > 0) && (command == RAW_MESSAGE_TOP10)) { 439 | new time = 15; 440 | new need_handler = 0; 441 | new String: message[1024]; 442 | 443 | new Handle: data = CloneHandle(datapack); 444 | ResetPack(data); 445 | new total_count = ReadPackCell(data); // total_players 446 | 447 | if (total_count == -1) { 448 | 449 | Format(message, 1024, "->1 - Top Players\\n Not yet available"); 450 | 451 | } else { 452 | 453 | decl String: start_message[192]; 454 | Format(start_message, 192, "->1 - Top Players\\n"); 455 | strcopy(message[strlen(message)], 192, start_message); 456 | 457 | for (new i = 0; (i < total_count); i++) { 458 | 459 | new rank = ReadPackCell(data); // rank 460 | new skill = ReadPackCell(data); // skill 461 | 462 | decl String: name[64]; // name 463 | ReadPackString(data, name, 64); 464 | 465 | new Float: kpd = ReadPackFloat(data); // kpd 466 | new Float: hpk = ReadPackFloat(data); // hpk 467 | 468 | decl String: entry_message[192]; 469 | Format(entry_message, 192, " %02d %d %s\\n", rank, skill, name); 470 | strcopy(message[strlen(message)], 192, entry_message); 471 | } 472 | } 473 | CloseHandle(data); 474 | 475 | if ((!IsFakeClient(client)) && (IsClientInGame(client))) { 476 | DisplayGameMEStatsMenu(client, time, message, need_handler); 477 | } 478 | } 479 | } 480 | 481 | 482 | public onGameMEStatsNext(command, client, String: message_prefix[], &Handle: datapack) 483 | { 484 | if ((client > 0) && (command == RAW_MESSAGE_NEXT)) { 485 | new time = 15; 486 | new need_handler = 0; 487 | new String: message[1024]; 488 | 489 | new Handle: data = CloneHandle(datapack); 490 | ResetPack(data); 491 | new total_count = ReadPackCell(data); // total_players 492 | 493 | if (total_count == -1) { 494 | 495 | Format(message, 1024, "->1 - Next Players\\n Not yet available"); 496 | 497 | } else { 498 | 499 | decl String: start_message[192]; 500 | Format(start_message, 192, "->1 - Next Players\\n"); 501 | strcopy(message[strlen(message)], 192, start_message); 502 | 503 | new prev_skill = -1; 504 | for (new i = 0; (i < total_count); i++) { 505 | 506 | new rank = ReadPackCell(data); // rank 507 | new skill = ReadPackCell(data); // skill 508 | 509 | decl String: name[64]; // name 510 | ReadPackString(data, name, 64); 511 | 512 | new Float: kpd = ReadPackFloat(data); // kpd 513 | new Float: hpk = ReadPackFloat(data); // hpk 514 | 515 | new diff = -1; 516 | if (prev_skill > -1) { 517 | diff = skill - prev_skill; 518 | } 519 | 520 | decl String: entry_message[192]; 521 | if (i == 0) { 522 | Format(entry_message, 192, " %02d %d - %s\\n", rank, skill, name); 523 | } else { 524 | Format(entry_message, 192, " %02d %d +%04d %s\\n", rank, skill, diff, name); 525 | } 526 | strcopy(message[strlen(message)], 192, entry_message); 527 | 528 | if (prev_skill == -1) { 529 | prev_skill = skill; 530 | } 531 | } 532 | } 533 | CloseHandle(data); 534 | 535 | if ((!IsFakeClient(client)) && (IsClientInGame(client))) { 536 | DisplayGameMEStatsMenu(client, time, message, need_handler); 537 | } 538 | } 539 | } 540 | -------------------------------------------------------------------------------- /scripting/include/gameme.inc: -------------------------------------------------------------------------------- 1 | /** 2 | * gameME Plugin 3 | * http://www.gameme.com 4 | * Copyright (C) 2007-2020 TTS Oetzel & Goerz GmbH 5 | * 6 | * This program is free software; you can redistribute it and/or 7 | * modify it under the terms of the GNU General Public License 8 | * as published by the Free Software Foundation; either version 2 9 | * of the License, or (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 19 | */ 20 | 21 | 22 | #if defined _gameme_included_ 23 | #endinput 24 | #endif 25 | #define _gameme_included_ 26 | 27 | 28 | // raw message handling 29 | #define RAW_MESSAGE_RANK 1 30 | #define RAW_MESSAGE_PLACE 2 31 | #define RAW_MESSAGE_KDEATH 3 32 | #define RAW_MESSAGE_SESSION_DATA 4 33 | #define RAW_MESSAGE_TOP10 5 34 | #define RAW_MESSAGE_NEXT 6 35 | 36 | // callbacks 37 | #define RAW_MESSAGE_CALLBACK_PLAYER 101 38 | #define RAW_MESSAGE_CALLBACK_TOP10 102 39 | #define RAW_MESSAGE_CALLBACK_NEXT 103 40 | 41 | 42 | forward onGameMEStatsRank(command, client, String: message_prefix[], &Handle: datapack); 43 | forward onGameMEStatsPublicCommand(command, client, String: message_prefix[], &Handle: datapack); 44 | forward onGameMEStatsTop10(command, client, String: message_prefix[], &Handle: datapack); 45 | forward onGameMEStatsNext(command, client, String: message_prefix[], &Handle: datapack); 46 | 47 | typedef gameMEStatsCallback = function Action(int command, int payload, int client, Handle datapack); 48 | /** 49 | * Query gameME Stats data from a client 50 | * 51 | * @param request Request type (only 'playerinfo' available) 52 | * @param client Client index. 53 | * @param func Callback function. 54 | * @param payload Payload to distinct queries. 55 | * @noreturn 56 | */ 57 | native QueryGameMEStats(String: request[], client, gameMEStatsCallback: callback, payload = 0); 58 | 59 | 60 | typedef gameMEStatsTop10Callback = function Action(int command, int payload, Handle datapack); 61 | /** 62 | * Query Top10 players from gameME Stats 63 | * 64 | * @param request Request type (currently only 'top10' available) 65 | * @param client Client index. 66 | * @param func Callback function. 67 | * @param payload Payload to distinct queries. 68 | * @noreturn 69 | */ 70 | native QueryGameMEStatsTop10(String: request[], client, gameMEStatsTop10Callback: callback, payload = 0); 71 | 72 | 73 | typedef gameMEStatsNextCallback = function Action(int command, int payload, int client, Handle datapack); 74 | /** 75 | * Query next players from gameME Stats for s specified client 76 | * 77 | * @param request Request type (currently only 'next' available) 78 | * @param client Client index. 79 | * @param func Callback function. 80 | * @param payload Payload to distinct queries. 81 | * @noreturn 82 | */ 83 | native QueryGameMEStatsNext(String: request[], client, gameMEStatsNextCallback: callback, payload = 0); 84 | 85 | typedef QuerygameMEStatsIntCallback = function Action(int command, int payload, int caller[MAXPLAYERS + 1], int target[MAXPLAYERS + 1], char[] message_prefix, char[] message); 86 | /** 87 | * Query internal (preformatted) gameME Stats data 88 | * 89 | * @param request Request type. 90 | * @param client Client index. 91 | * @param func Callback function. 92 | * @param payload Payload to distinct queries. 93 | * @noreturn 94 | */ 95 | native QueryIntGameMEStats(String: request[], client, QuerygameMEStatsIntCallback: callback, payload = 0, limit = 0); 96 | 97 | 98 | /** 99 | * Display internal gameME Stats menu. 100 | * 101 | * @param client The client index the menu is displayed to. 102 | * @param time How long should the menu be displayed. 103 | * @param message The menu message. 104 | * @param need_handler Define, if a menu handler is needed. 105 | * @noreturn 106 | */ 107 | native DisplayGameMEStatsMenu(client, time, String: message[], need_handler); 108 | 109 | 110 | /** 111 | * Color gameME entitites 112 | * 113 | * @param message String. 114 | */ 115 | native gameMEStatsColorEntities(String: message[]); 116 | 117 | 118 | public SharedPlugin:__pl_gameme = 119 | { 120 | name = "gameme", 121 | file = "gameme.smx", 122 | #if defined REQUIRE_PLUGIN 123 | required = 1, 124 | #else 125 | required = 0, 126 | #endif 127 | } 128 | 129 | #if !defined REQUIRE_PLUGIN 130 | public __pl_gameme_SetNTVOptional() 131 | { 132 | MarkNativeAsOptional("QueryGameMEStats"); 133 | MarkNativeAsOptional("QueryGameMEStatsTop10"); 134 | MarkNativeAsOptional("QueryGameMEStatsNext"); 135 | MarkNativeAsOptional("QueryIntGameMEStats"); 136 | MarkNativeAsOptional("DisplayGameMEStatsMenu"); 137 | MarkNativeAsOptional("gameMEStatsColorEntities"); 138 | } 139 | #endif 140 | -------------------------------------------------------------------------------- /translations/da/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "da" "gameME - Hovedmenu" 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "da" "Vis Rank" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "da" "Næste Spillere" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "da" "Top10 Spillere" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "da" "Auto Ranking" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "da" "Chat-Begivenheder" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "da" "Til/Fra Rank Visning" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "da" "Clan Rank" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "da" "Server Status" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "da" "Statsme" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "da" "Våben Brug" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "da" "Våben Sigtbarhed" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "da" "Våben Mål" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "da" "Spillere Dræbte" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "da" "Banliste" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "da" "Vis Hjælp" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "da" "Nulstil Statistik" 71 | } 72 | 73 | 74 | "AutoMenu_Caption" 75 | { 76 | "da" "gameME - Auto-Ranking" 77 | } 78 | "AutoMenu_Menu1" 79 | { 80 | "da" "Aktiver ved runde-start" 81 | } 82 | "AutoMenu_Menu2" 83 | { 84 | "da" "Aktiver ved runde-afslutning" 85 | } 86 | "AutoMenu_Menu3" 87 | { 88 | "da" "Aktiver ved spiller død" 89 | } 90 | "AutoMenu_Menu4" 91 | { 92 | "da" "Deaktiver" 93 | } 94 | 95 | 96 | "ConsoleMenu_Caption" 97 | { 98 | "da" "gameME - Chat-Begivenheder" 99 | } 100 | "ConsoleMenu_Menu1" 101 | { 102 | "da" "Aktiver Begivenheder" 103 | } 104 | "ConsoleMenu_Menu2" 105 | { 106 | "da" "Deaktiver Begivenheder" 107 | } 108 | "ConsoleMenu_Menu3" 109 | { 110 | "da" "Aktiver Global Chat" 111 | } 112 | "ConsoleMenu_Menu4" 113 | { 114 | "da" "Deaktiver Global Chat" 115 | } 116 | 117 | 118 | "DamagePanel_Attackers" 119 | { 120 | "da" "Angribere" 121 | } 122 | "DamagePanel_Killed" 123 | { 124 | "da" "Dræbte" 125 | } 126 | "DamagePanel_Wounded" 127 | { 128 | "da" "Sårede" 129 | } 130 | "DamagePanel_Killer" 131 | { 132 | "da" "Morder" 133 | } 134 | "DamagePanel_Dmg" 135 | { 136 | "da" "Skade" 137 | } 138 | "DamagePanel_Hit" 139 | { 140 | "da" "Ramt" 141 | } 142 | "DamagePanel_Hits" 143 | { 144 | "da" "Ramte" 145 | } 146 | "DamagePanel_Hp" 147 | { 148 | "da" "Liv" 149 | } 150 | 151 | } -------------------------------------------------------------------------------- /translations/de/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "de" "gameME - Hauptmenü" 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "de" "Eigene Platzierung" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "de" "Nächsten Spieler" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "de" "Top10-Spieler" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "de" "Auto-Ranking" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "de" "Chat-Ereignisse" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "de" "Rankingteilnahme ein-/ausschalten" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "de" "Clan Rangliste" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "de" "Server-Status" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "de" "Statsme" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "de" "Waffenbenutzung" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "de" "Waffengenauigkeit" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "de" "Trefferstatistiken" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "de" "Kills gegen Spieler" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "de" "Bannliste" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "de" "Hilfe anzeigen" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "de" "Statistiken zurücksetzen" 71 | } 72 | 73 | 74 | "AutoMenu_Caption" 75 | { 76 | "de" "gameME - Auto-Ranking" 77 | } 78 | "AutoMenu_Menu1" 79 | { 80 | "de" "Aktivieren bei Rundenstart" 81 | } 82 | "AutoMenu_Menu2" 83 | { 84 | "de" "Aktivieren bei Rundenende" 85 | } 86 | "AutoMenu_Menu3" 87 | { 88 | "de" "Aktivieren bei eigenem Tod" 89 | } 90 | "AutoMenu_Menu4" 91 | { 92 | "de" "Deaktivieren" 93 | } 94 | 95 | 96 | "ConsoleMenu_Caption" 97 | { 98 | "de" "gameME - Chat-Ereignisse" 99 | } 100 | "ConsoleMenu_Menu1" 101 | { 102 | "de" "Chatanzeige aktivieren" 103 | } 104 | "ConsoleMenu_Menu2" 105 | { 106 | "de" "Chatanzeige deaktivieren" 107 | } 108 | "ConsoleMenu_Menu3" 109 | { 110 | "de" "Globale Chatanzeige aktivieren" 111 | } 112 | "ConsoleMenu_Menu4" 113 | { 114 | "de" "Globale Chatanzeige deaktivieren" 115 | } 116 | 117 | 118 | "DamagePanel_Attackers" 119 | { 120 | "de" "Angreifer" 121 | } 122 | "DamagePanel_Killed" 123 | { 124 | "de" "Getötet" 125 | } 126 | "DamagePanel_Wounded" 127 | { 128 | "de" "Verwundet" 129 | } 130 | "DamagePanel_Killer" 131 | { 132 | "de" "Killer" 133 | } 134 | "DamagePanel_Dmg" 135 | { 136 | "de" "Dmg" 137 | } 138 | "DamagePanel_Hit" 139 | { 140 | "de" "Hit" 141 | } 142 | "DamagePanel_Hits" 143 | { 144 | "de" "Hits" 145 | } 146 | "DamagePanel_Hp" 147 | { 148 | "de" "hp" 149 | } 150 | 151 | "DamageChat_Killedyou" 152 | { 153 | "de" "Von {1} getötet mit {2} dmg, noch {3} hp" 154 | } 155 | 156 | } -------------------------------------------------------------------------------- /translations/es/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "es" "gameME - Menu Principal" 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "es" "Mostrar Ranking" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "es" "Siguientes Jugadores" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "es" "Top10 Jugadores" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "es" "Clasificación Automática" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "es" "Avisos en Chat" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "es" "Alternar Clasificación" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "es" "Ranking de Clan" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "es" "Estado de Servidor" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "es" "Statsme" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "es" "Uso de Armas" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "es" "Precisión de Armas" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "es" "Objetivos de Armas" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "es" "Muertes de Jugador" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "es" "Lista de Bans" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "es" "Mostrar Ayuda" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "es" "Resetear Estadisticas" 71 | } 72 | 73 | 74 | "AutoMenu_Caption" 75 | { 76 | "es" "TrolStats - Clasificación Automática" 77 | } 78 | "AutoMenu_Menu1" 79 | { 80 | "es" "Activar al Iniciar la Ronda" 81 | } 82 | "AutoMenu_Menu2" 83 | { 84 | "es" "Activar al Final de la Ronda" 85 | } 86 | "AutoMenu_Menu3" 87 | { 88 | "es" "Activar a la Muerte del Jugador" 89 | } 90 | "AutoMenu_Menu4" 91 | { 92 | "es" "Desactivar" 93 | } 94 | 95 | 96 | "ConsoleMenu_Caption" 97 | { 98 | "es" "gameME - Avisos en el Chat" 99 | } 100 | "ConsoleMenu_Menu1" 101 | { 102 | "es" "Activar Mensajes / Eventos" 103 | } 104 | "ConsoleMenu_Menu2" 105 | { 106 | "es" "Desactivar Mensajes / Eventos" 107 | } 108 | "ConsoleMenu_Menu3" 109 | { 110 | "es" "Activar Chat Global" 111 | } 112 | "ConsoleMenu_Menu4" 113 | { 114 | "es" "Desactivar Chat Global" 115 | } 116 | 117 | 118 | "DamagePanel_Attackers" 119 | { 120 | "es" "Atacantes" 121 | } 122 | "DamagePanel_Killed" 123 | { 124 | "es" "Muertes" 125 | } 126 | "DamagePanel_Wounded" 127 | { 128 | "es" "Heridos" 129 | } 130 | "DamagePanel_Killer" 131 | { 132 | "es" "Asesinos" 133 | } 134 | "DamagePanel_Dmg" 135 | { 136 | "es" "Dmg" 137 | } 138 | "DamagePanel_Hit" 139 | { 140 | "es" "Tiro" 141 | } 142 | "DamagePanel_Hits" 143 | { 144 | "es" "Tiros" 145 | } 146 | "DamagePanel_Hp" 147 | { 148 | "es" "Vida" 149 | } 150 | 151 | "DamageChat_Killedyou" 152 | { 153 | "es" "{1} te ha matado con {2} dmg, {3} vida restante" 154 | } 155 | 156 | } -------------------------------------------------------------------------------- /translations/fr/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "fr" "gameME - Menu Principal" 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "fr" "Afficher le classement" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "fr" "Joueurs suivants" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "fr" "Top10 Joueurs" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "fr" "Classement auto" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "fr" "Chat-Actions" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "fr" "Changer l'affichage du classement" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "fr" "Classement des clans" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "fr" "Status du serveur" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "fr" "Statsme" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "fr" "Utilisation des armes" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "fr" "Précision des armes" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "fr" "Cibles des armes" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "fr" "Kills des joueurs" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "fr" "Liste des Bans" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "fr" "Afficher l'aide" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "fr" "Reinitialiser les statistiques" 71 | } 72 | 73 | "AutoMenu_Caption" 74 | { 75 | "fr" "gameME - Classement auto" 76 | } 77 | "AutoMenu_Menu1" 78 | { 79 | "fr" "Activer au début du round" 80 | } 81 | "AutoMenu_Menu2" 82 | { 83 | "fr" "Activer à la fin du round" 84 | } 85 | "AutoMenu_Menu3" 86 | { 87 | "fr" "Activer à la mort du joueur" 88 | } 89 | "AutoMenu_Menu4" 90 | { 91 | "fr" "Désactiver" 92 | } 93 | 94 | 95 | "ConsoleMenu_Caption" 96 | { 97 | "fr" "gameME - Chat-Actions" 98 | } 99 | "ConsoleMenu_Menu1" 100 | { 101 | "fr" "Activer les actions" 102 | } 103 | "ConsoleMenu_Menu2" 104 | { 105 | "fr" "Désactiver les actions" 106 | } 107 | "ConsoleMenu_Menu3" 108 | { 109 | "fr" "Activer le chat global" 110 | } 111 | "ConsoleMenu_Menu4" 112 | { 113 | "fr" "Désactiver le chat global" 114 | } 115 | 116 | 117 | "DamagePanel_Attackers" 118 | { 119 | "fr" "Attaqueurs" 120 | } 121 | "DamagePanel_Killed" 122 | { 123 | "fr" "Tués" 124 | } 125 | "DamagePanel_Wounded" 126 | { 127 | "fr" "Blessés" 128 | } 129 | "DamagePanel_Killer" 130 | { 131 | "fr" "Tueurs" 132 | } 133 | "DamagePanel_Dmg" 134 | { 135 | "fr" "Dmg" 136 | } 137 | "DamagePanel_Hit" 138 | { 139 | "fr" "Hit" 140 | } 141 | "DamagePanel_Hits" 142 | { 143 | "fr" "Hits" 144 | } 145 | "DamagePanel_Hp" 146 | { 147 | "fr" "HP" 148 | } 149 | 150 | "DamageChat_Killedyou" 151 | { 152 | "fr" "{1} vous a tué avec {2} dmg, {3} HP restants" 153 | } 154 | 155 | } -------------------------------------------------------------------------------- /translations/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "en" "gameME - Main Menu" 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "en" "Display Rank" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "en" "Next Players" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "en" "Top10 Players" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "en" "Auto Ranking" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "en" "Chat-Events" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "en" "Toggle Ranking Display" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "en" "Clan Ranking" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "en" "Server Status" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "en" "Statsme" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "en" "Weapon Usage" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "en" "Weapons Accuracy" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "en" "Weapons Targets" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "en" "Player Kills" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "en" "Banlist" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "en" "Display Help" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "en" "Reset Statistics" 71 | } 72 | 73 | 74 | "AutoMenu_Caption" 75 | { 76 | "en" "gameME - Auto-Ranking" 77 | } 78 | "AutoMenu_Menu1" 79 | { 80 | "en" "Enable on round-start" 81 | } 82 | "AutoMenu_Menu2" 83 | { 84 | "en" "Enable on round-end" 85 | } 86 | "AutoMenu_Menu3" 87 | { 88 | "en" "Enable on player death" 89 | } 90 | "AutoMenu_Menu4" 91 | { 92 | "en" "Disable" 93 | } 94 | 95 | 96 | "ConsoleMenu_Caption" 97 | { 98 | "en" "gameME - Chat-Events" 99 | } 100 | "ConsoleMenu_Menu1" 101 | { 102 | "en" "Enable Events" 103 | } 104 | "ConsoleMenu_Menu2" 105 | { 106 | "en" "Disable Events" 107 | } 108 | "ConsoleMenu_Menu3" 109 | { 110 | "en" "Enable Global Chat" 111 | } 112 | "ConsoleMenu_Menu4" 113 | { 114 | "en" "Disable Global Chat" 115 | } 116 | 117 | 118 | "DamagePanel_Attackers" 119 | { 120 | "en" "Attackers" 121 | } 122 | "DamagePanel_Killed" 123 | { 124 | "en" "Killed" 125 | } 126 | "DamagePanel_Wounded" 127 | { 128 | "en" "Wounded" 129 | } 130 | "DamagePanel_Killer" 131 | { 132 | "en" "Killer" 133 | } 134 | "DamagePanel_Dmg" 135 | { 136 | "en" "Dmg" 137 | } 138 | "DamagePanel_Hit" 139 | { 140 | "en" "Hit" 141 | } 142 | "DamagePanel_Hits" 143 | { 144 | "en" "Hits" 145 | } 146 | "DamagePanel_Hp" 147 | { 148 | "en" "hp" 149 | } 150 | 151 | "DamageChat_Killedyou" 152 | { 153 | "#format" "{1:s},{2:d},{3:d}" 154 | "en" "{1} killed you with {2} dmg, {3} hp left" 155 | } 156 | 157 | } -------------------------------------------------------------------------------- /translations/pl/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "pl" "gameME - Strona Główna 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "pl" "Wyświetl Ranking" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "pl" "Następni Gracze" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "pl" "Top10 Graczy" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "pl" "Ustawienia automatycznego wyświetlania" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "pl" "Opcje czatu" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "pl" "Ustawienia wyświetlania w rankingu" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "pl" "Ranking Klanów" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "pl" "Status Serwera" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "pl" "Twoje Statystyki" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "pl" "Używane bronie" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "pl" "Celność" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "pl" "Cele Broni" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "pl" "Zabicia przez graczy" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "pl" "Lista Banów" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "pl" "Wyświetl Pomoc" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "pl" "Restart Statystyk" 71 | } 72 | 73 | 74 | "AutoMenu_Caption" 75 | { 76 | "pl" "Automatyczne Wyświetlanie Rankungu" 77 | } 78 | "AutoMenu_Menu1" 79 | { 80 | "pl" "Wyświetl przy starcie rundy" 81 | } 82 | "AutoMenu_Menu2" 83 | { 84 | "pl" "Wyświetl przy końcu rundy" 85 | } 86 | "AutoMenu_Menu3" 87 | { 88 | "pl" "Wyświetl po śmierci" 89 | } 90 | "AutoMenu_Menu4" 91 | { 92 | "pl" "Wyłącz" 93 | } 94 | 95 | 96 | "ConsoleMenu_Caption" 97 | { 98 | "pl" "Wydarzenia czatu" 99 | } 100 | "ConsoleMenu_Menu1" 101 | { 102 | "pl" "Włącz wyświetlanie punktów na czacie" 103 | } 104 | "ConsoleMenu_Menu2" 105 | { 106 | "pl" "Wyłącz wyświetlanie punktów na czacie" 107 | } 108 | "ConsoleMenu_Menu3" 109 | { 110 | "pl" "Włącz globalny czat" 111 | } 112 | "ConsoleMenu_Menu4" 113 | { 114 | "pl" "Wyłącz globalny czat" 115 | } 116 | 117 | 118 | "DamagePanel_Attackers" 119 | { 120 | "pl" "Atakujący" 121 | } 122 | "DamagePanel_Killed" 123 | { 124 | "pl" "Zgonów" 125 | } 126 | "DamagePanel_Wounded" 127 | { 128 | "pl" "Zranionych" 129 | } 130 | "DamagePanel_Killer" 131 | { 132 | "pl" "Zabójca" 133 | } 134 | "DamagePanel_Dmg" 135 | { 136 | "pl" "Obrażeń" 137 | } 138 | "DamagePanel_Hit" 139 | { 140 | "pl" "Strzał" 141 | } 142 | "DamagePanel_Hits" 143 | { 144 | "pl" "Strzałów" 145 | } 146 | "DamagePanel_Hp" 147 | { 148 | "pl" "hp" 149 | } 150 | 151 | "DamageChat_Killedyou" 152 | { 153 | "pl" "{1} zabił Cię z {2} dmg, {3} hp zostało" 154 | } 155 | 156 | } -------------------------------------------------------------------------------- /translations/pt/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "pt" "gameME - Menu Principal" 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "pt" "Exibicao Terminou" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "pt" "Proximos Jogadores" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "pt" "Top10 Jogadores" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "pt" "Auto Ranking" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "pt" "Chat-Eventos" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "pt" "Alternar Ranking de Exibicao" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "pt" "Clan Ranking" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "pt" "Server Status" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "pt" "Statsme" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "pt" "Arma usada" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "pt" "Precisao Armas" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "pt" "Metas de Armas" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "pt" "Morte de Jogadores" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "pt" "Bans listas" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "pt" "Exibir a ajuda" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "pt" "Resetar Estatisticas" 71 | } 72 | 73 | 74 | "AutoMenu_Caption" 75 | { 76 | "pt" "gameME - Auto-Ranking" 77 | } 78 | "AutoMenu_Menu1" 79 | { 80 | "pt" "Ativar em round-start" 81 | } 82 | "AutoMenu_Menu2" 83 | { 84 | "pt" "Ativar em round-end" 85 | } 86 | "AutoMenu_Menu3" 87 | { 88 | "pt" "Ativar na morte de jogadores" 89 | } 90 | "AutoMenu_Menu4" 91 | { 92 | "pt" "Desativado" 93 | } 94 | 95 | 96 | "ConsoleMenu_Caption" 97 | { 98 | "pt" "gameME - Chat-Eventos" 99 | } 100 | "ConsoleMenu_Menu1" 101 | { 102 | "pt" "Ativar Eventos" 103 | } 104 | "ConsoleMenu_Menu2" 105 | { 106 | "pt" "Desativar Eventos" 107 | } 108 | "ConsoleMenu_Menu3" 109 | { 110 | "pt" "Ativar Global Chat" 111 | } 112 | "ConsoleMenu_Menu4" 113 | { 114 | "pt" "Desativar Global Chat" 115 | } 116 | 117 | 118 | "DamagePanel_Attackers" 119 | { 120 | "pt" "Ataques" 121 | } 122 | "DamagePanel_Killed" 123 | { 124 | "pt" "Assasinado" 125 | } 126 | "DamagePanel_Wounded" 127 | { 128 | "pt" "Feridos" 129 | } 130 | "DamagePanel_Killer" 131 | { 132 | "pt" "Assasino" 133 | } 134 | "DamagePanel_Dmg" 135 | { 136 | "pt" "Dmg" 137 | } 138 | "DamagePanel_Hit" 139 | { 140 | "pt" "Bater" 141 | } 142 | "DamagePanel_Hits" 143 | { 144 | "pt" "Acessos" 145 | } 146 | "DamagePanel_Hp" 147 | { 148 | "pt" "hp" 149 | } 150 | 151 | "DamageChat_Killedyou" 152 | { 153 | "pt" "{1} voce matou com {2} dmg, {3} hp esquerda" 154 | } 155 | 156 | } 157 | -------------------------------------------------------------------------------- /translations/rs/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "rs" "gameME - Glavni meni" 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "rs" "Prikaži rank" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "rs" "Sledeći igrači" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "rs" "Top10 Igrači" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "rs" "Auto Ranking" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "rs" "Chat-Events" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "rs" "Promeni prikaz ranka" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "rs" "Rank klanova" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "rs" "Status servera" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "rs" "Moja statistika" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "rs" "Upotreba oružja" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "rs" "Preciznost oružja" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "rs" "Pogoci oružja" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "rs" "Ubistva igrača" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "rs" "Banlista" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "rs" "Prikaži pomoć" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "rs" "Reset Statistics" 71 | } 72 | 73 | 74 | "AutoMenu_Caption" 75 | { 76 | "rs" "gameME - Auto-Ranking" 77 | } 78 | "AutoMenu_Menu1" 79 | { 80 | "rs" "Uključi na početku runde" 81 | } 82 | "AutoMenu_Menu2" 83 | { 84 | "rs" "Uključi na kraju runde" 85 | } 86 | "AutoMenu_Menu3" 87 | { 88 | "rs" "Uključi kad igrač pogine" 89 | } 90 | "AutoMenu_Menu4" 91 | { 92 | "rs" "Isključi" 93 | } 94 | 95 | 96 | "ConsoleMenu_Caption" 97 | { 98 | "rs" "gameME - Ispisivanje u chatu" 99 | } 100 | "ConsoleMenu_Menu1" 101 | { 102 | "rs" "Uključi ispisivanje u chatu" 103 | } 104 | "ConsoleMenu_Menu2" 105 | { 106 | "rs" "Isključi ispisivanje u chatu" 107 | } 108 | "ConsoleMenu_Menu3" 109 | { 110 | "rs" "Uključi globalni chat" 111 | } 112 | "ConsoleMenu_Menu4" 113 | { 114 | "rs" "Isključi globalni chat" 115 | } 116 | 117 | 118 | "DamagePanel_Attackers" 119 | { 120 | "rs" "Napadači" 121 | } 122 | "DamagePanel_Killed" 123 | { 124 | "rs" "Ubio" 125 | } 126 | "DamagePanel_Wounded" 127 | { 128 | "rs" "Ranio" 129 | } 130 | "DamagePanel_Killer" 131 | { 132 | "rs" "Ubica" 133 | } 134 | "DamagePanel_Dmg" 135 | { 136 | "rs" "Šteta" 137 | } 138 | "DamagePanel_Hit" 139 | { 140 | "rs" "Pogodak" 141 | } 142 | "DamagePanel_Hits" 143 | { 144 | "rs" "Pogoci" 145 | } 146 | "DamagePanel_Hp" 147 | { 148 | "rs" "hp" 149 | } 150 | 151 | "DamageChat_Killedyou" 152 | { 153 | "rs" "{1} te je ubio sa {2} dmg, {3} hp ostalo" 154 | } 155 | 156 | } -------------------------------------------------------------------------------- /translations/ru/gameme.phrases.txt: -------------------------------------------------------------------------------- 1 | "Phrases" 2 | { 3 | 4 | "IngameMenu_Caption" 5 | { 6 | "ru" "gameME - Гл. меню" 7 | } 8 | "IngameMenu_Menu1" 9 | { 10 | "ru" "Показать ранг" 11 | } 12 | "IngameMenu_Menu2" 13 | { 14 | "ru" "Следующие игроки" 15 | } 16 | "IngameMenu_Menu3" 17 | { 18 | "ru" "Топ 10 игроков" 19 | } 20 | "IngameMenu_Menu4" 21 | { 22 | "ru" "Авто-показ ранга" 23 | } 24 | "IngameMenu_Menu5" 25 | { 26 | "ru" "События чата" 27 | } 28 | "IngameMenu_Menu6" 29 | { 30 | "ru" "Скрыть/показать себя в статистике" 31 | } 32 | "IngameMenu_Menu7" 33 | { 34 | "ru" "Ранг кланов" 35 | } 36 | "IngameMenu_Menu8" 37 | { 38 | "ru" "Статус сервера" 39 | } 40 | "IngameMenu_Menu9" 41 | { 42 | "ru" "Моя статистика" 43 | } 44 | "IngameMenu_Menu10" 45 | { 46 | "ru" "Использование оружия" 47 | } 48 | "IngameMenu_Menu11" 49 | { 50 | "ru" "Точность оружия" 51 | } 52 | "IngameMenu_Menu12" 53 | { 54 | "ru" "Цели оружия" 55 | } 56 | "IngameMenu_Menu13" 57 | { 58 | "ru" "Убийства игроков" 59 | } 60 | "IngameMenu_Menu14" 61 | { 62 | "ru" "Бан-лист" 63 | } 64 | "IngameMenu_Menu15" 65 | { 66 | "ru" "Показать помощь" 67 | } 68 | "IngameMenu_Menu16" 69 | { 70 | "ru" "Сбросить статистику" 71 | } 72 | 73 | 74 | "AutoMenu_Caption" 75 | { 76 | "ru" "Авто-показ ранга" 77 | } 78 | "AutoMenu_Menu1" 79 | { 80 | "ru" "Включить в начале раунда" 81 | } 82 | "AutoMenu_Menu2" 83 | { 84 | "ru" "Включить в конце раунда" 85 | } 86 | "AutoMenu_Menu3" 87 | { 88 | "ru" "Включить при смерти игрока" 89 | } 90 | "AutoMenu_Menu4" 91 | { 92 | "ru" "Выключить" 93 | } 94 | 95 | 96 | "ConsoleMenu_Caption" 97 | { 98 | "ru" "События чата" 99 | } 100 | "ConsoleMenu_Menu1" 101 | { 102 | "ru" "Включить события" 103 | } 104 | "ConsoleMenu_Menu2" 105 | { 106 | "ru" "Выключить события" 107 | } 108 | "ConsoleMenu_Menu3" 109 | { 110 | "ru" "Включить глобальный чат" 111 | } 112 | "ConsoleMenu_Menu4" 113 | { 114 | "ru" "Выключить глобальный чат" 115 | } 116 | 117 | 118 | "DamagePanel_Attackers" 119 | { 120 | "ru" "Атакующие" 121 | } 122 | "DamagePanel_Killed" 123 | { 124 | "ru" "Убито" 125 | } 126 | "DamagePanel_Wounded" 127 | { 128 | "ru" "Ранены" 129 | } 130 | "DamagePanel_Killer" 131 | { 132 | "ru" "Вас убил" 133 | } 134 | "DamagePanel_Dmg" 135 | { 136 | "ru" "урона" 137 | } 138 | "DamagePanel_Hit" 139 | { 140 | "ru" "попадание" 141 | } 142 | "DamagePanel_Hits" 143 | { 144 | "ru" "попаданий" 145 | } 146 | "DamagePanel_Hp" 147 | { 148 | "ru" "хп" 149 | } 150 | 151 | "DamageChat_Killedyou" 152 | { 153 | "ru" "{1} имея {3} hp убил вас нанеся {2} урона" 154 | } 155 | 156 | } --------------------------------------------------------------------------------