Jump to content
Sign in to follow this  
ImportBot

HS Counter v1.0 (24 august 2010)

Recommended Posts

Originally Posted by Myriades*:

 

Hi all

I've wrote a little plugin that count players HeadShot and display them in global chat

 

*Description

Displays in global chat headshot kill streaks

 

 

* Changelog

 

* v1.0 http://www.phogue.net/forumvb/attach...1&d=1282642722

- complete re-write of the plugin

 

* v0.1procon_1.5.1.1.zipCHScounter.zip[/attachment:v2n35t5o]

- added : at the end of the round, it shows player(s) name's that had the longest HS kill streak

- added : reset counters at the end of the round

- added : some stuff stats to playerlist

- added : option to force display the player list in console

- modified : display player list in console when headshot is done, not at every kill (less stress for console)


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Athanasios2104*:

 

nice one mate, but i think you must put a basic version number, 0.0 is not a valid one in programming language :smile:

 

btw, is the counter reset after each round?


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Myriades*:

 

Hi

btw, is the counter reset after each round?

No, i forgot it, now fixed :ohmy:

* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by smootherman*:

 

Your plugin says 1 hs of 0 kills in the first kill, hmm. Is that correct?


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Myriades*:

 

Hi

Your plugin says 1 hs of 0 kills in the first kill, hmm. Is that correct?

Yes, i noticed it sometimes, but it depends on very particular conditions:

- not enough player on server (less than 4)

- player just (re)spawn (it seems there is a little spawnshield time)

 

Was it your case?


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by MissingPersons*:

 

I like this and tried it but don't want it sto spam the console. Need to be able to pick a value to start at. Like when some one gets 3 headshot in a row then it should display on the console. Not every head shot made by everyplayer. Or just give the player with the best headshot streak at the end of round. This would be good to catch some hackers as well.

 

I will test your next version when you update it. Thank you for your work. :biggrin: w


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Span*:

 

This plugin is neat. But its gets annoying fast. I think a setting is needed to not display it until they get so many headshots. Maybe create different modes.


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by mailvs*:

 

Nice plugin, but really it would be way better if it just said "Joe OWNED Nick", when Joe headshot Nick.

"OWNED" in large orange letters, just like in 2142 clanmode)

Is this possible?

The counter really becomes annoying after 5 minutes of playing.


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Myriades*:

 

Bump.

 

New version available. (v1.0)


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by MissingPersons*:

 

Works great! Just what I wanted!!! :biggrin:

 

Thank you :biggrin::biggrin:


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by MissingPersons*:

 

Ok, I have a good idea! What do you say you give us the option to ban/kick someone automatically for to many Head shots in a given amount of time or a just to many consecutive head shots period.

 

I try and admin as mush as possible but I can't be there all the time. When a hacker comes on a gets 19 of 20 headshots consecutively and everyone is screaming for an admin it would be nice to auto ban the sob and console it or yell it Admin has banned them. would make some people happy and they may come back again. If not they exit.exit exit then we have empty server.I've played on servers that kick for one team kill and EA can't give option to at least get rid of obvious hackers. If they're that good they need pay somewhere other then with me.

 

Of course, someone would have to be carefull not to set to low. but come on, I at most have seen 9 or 10 consecutive head shots maybe that might have been legit and the average for any given map is usually 2 or 3 maybe 4 on occasion.

 

I say we start a thread on this subject. What is the average most people are seeing. Have you noticed when you having a good time and look at the chat log that the head shot amount is pretty sparse and random and sometimes a the end of the round it will spike. lol i wish bp screen shots worked.

 

Anyway we need to be able to auto ban for at least 10 and above. maybe Auto kick option, I'm a grumpy old man I wouldn't use that option but some may be more nieve and want it. If that person gets pissed and never comes back so be it!!!!! if they weren't hacking. They're to good to play with me and there is 100,000 more people that will come on my server. Maybe more if they think someone is always there to insure there falsely safe from hackers.

 

Thank you!


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by mailvs*:

 

Dude, could you PLEASE write 1 more plugin?

 

We have hundreds of players in Russia wanting a HEADSHOT plugin that would work just like in B2142 clanmode. Displaying every headshot WITHOUT the counter. Just "Joe OWNED Jane". OWNED in big orange letters, the fukk withe orange, if it ain't possible, let them just be uppercase :P

 

WE REALY WANT THIS PLUGIN.

PLEASE HELP!

 

Players of Russia salute you!

Thab

PS if I knew how to write plugins I would already writen this plugin.


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by cruz777*:

 

Just wondering if you could get this to work for Headshot counts, so instead of it being the person with the highest in a row, the person with the most or perhaps best ratio please :smile:


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by mailvs*:

 

Dude, could you PLEASE write 1 more plugin?

 

We have hundreds of players in Russia wanting a HEADSHOT plugin that would work just like in B2142 clanmode. Displaying every headshot WITHOUT the counter. Just "Joe OWNED Jane". OWNED in big orange letters, the fukk withe orange, if it ain't possible, let them just be uppercase :P

 

WE REALY WANT THIS PLUGIN.

PLEASE HELP!

 

Players of Russia salute you!

Thab

PS if I knew how to write plugins I would already writen this plugin.


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Flyswamper*:

 

Would it be possible to add the following functionality to this plugin?

 

 

- Add abiilty for admins to request a summary of headshot/kill stats for all players currently in the server. It would go something like this....

 

 

 

Admin chat: @list_headshot_data

 

Server: Listing headshot/kill data

Server: Player, headshots, kills, ratio

Server: Flyswamper, 3, 10, 0.33

Server: Morpheus, 4, 20, 0.20

Server: FredDead, 10, 20, 0.5

......

 

 

The output from this in-game command would only be sent to the requesting admin. And this would only be sent on-demand....not spammed regularly at any time.

 

 

Another nice addition might be the ability for an admin to turn on what I'll describe as "tracking mode" of a particular player. The admin would request via ingame chat for the plugin to "track" a particular player. The plugin would then simply report every kill that the tracked player makes and send the requesting admin a text/chat message showing each kill and indicate the weapon and whether or not it was headshot.

 

It would go something like this...

 

Admin chat: @headshot_track suspect_player

Server chat: Tracking kills/headshots for "suspect_player"

Server chat: suspect_player killed victim player with _this_weapon?

Server chat: suspect_player killed victim player with _this_weapon? [Headshot]

Server chat: suspect_player killed victim player with _this_weapon?

 

(maybe also reporting the time of the kill would be nice....to see how quickly they are coming)

 

Tracking would be turned off upon request of the admin, e.g.

 

admin chat: @headshot_track

server chat: "Stopping tracking of kills/headshots for suspect_player"

 

or... the tracking would turn itself off if the forgetful admin logs out of the game.

 

 

I hope you'll give some consideration to these ideas (or someone else will maybe make a separate plugin to accomplish the same thing). The central theme of all these ideas/thoughts is to display useful information to admins via the in-game text-chat window and to do it "upon demand."


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Old-Grump*:

 

I am a Medal of Honor server admin. This works well in Medal of Honor. We like this plugin. Could you please fix the download link so we can download it?

 

Thanks.


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by codepimp*:

 

I got this working with the latest BF4 patch and procon v 1.4.2.4 if anyone is interested.


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by moacco07*:

 

Sweet i try it out and give you feedback.


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by moacco07*:

 

I got this working with the latest BF4 patch and procon v 1.4.2.4 if anyone is interested.

Could you provide the download link. That will be great.

* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by codepimp*:

 

Could you provide the download link. That will be great.

not sure how to do that....i can give you the modified .cs file. ?

* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by moacco07*:

 

not sure how to do that....i can give you the modified .cs file. ?

Sure, that will be great too.

* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by codepimp*:

 

[07:58:57 31] CHScounter.cs (Line: 18, C: 18) CS0535: "PRoConEvents.CHScounter" implementiert den Schnittstellenmember "PRoCon.Core.Plugin.IPRoConPluginInterface.ClassNa me" nicht.

 

 

Hmm not loading why in all games the same info.

The latest fix is not out there yet...coming soon. I am trying to figure out how to put it out there.

I love the plugin.


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by codepimp*:

The latest fix is not out there yet...coming soon. I am trying to figure out how to put it out there.I love the plugin.

Code:
using System;
using System.IO;
using System.Text;
using System.Reflection;
using System.Collections.Generic;
using System.Data;
using System.Text.RegularExpressions;

using PRoCon.Core;
using PRoCon.Core.Plugin;
using PRoCon.Core.Plugin.Commands;
using PRoCon.Core.Players;
using PRoCon.Core.Players.Items;
using PRoCon.Core.Battlemap;
using PRoCon.Core.Maps;

namespace PRoConEvents {
    public class CHScounter : PRoConPluginAPI, IPRoConPluginInterface {

        #region Plugin VARS & INIT
		private string m_strHostName;
		private string m_strPort;
		private string m_strPRoConVersion;

		private int m_MaxHSKSinRound;
		private string m_MaxHSPlayerName;
		private int i_ChatSpamAt;
		private string str_ChatMSG;
		private string str_EORM;
		private Dictionary<string, CHScounter.PlayerData>D_PlayerDatas = new Dictionary<string, CHScounter.PlayerData>();
		
		private class PlayerData{
			public int i_PlKill;
			public int i_PlHsKs;
			public int i_PlHsCount;
			
			public PlayerData(){
				this.i_PlHsCount = 0;
				this.i_PlHsKs = 0;
				this.i_PlKill = 0;
			}
		}
		
		public CHScounter() {
			this.m_MaxHSKSinRound = 0;
			this.m_MaxHSPlayerName = "";
			this.i_ChatSpamAt = 3;
			this.str_ChatMSG = "%pn% has a %hsks% headshot kill streak and a total of %ths% over %kill% kills";
			this.str_EORM = "%pns% had the best HS kill streak with %mhsks%";
        }
		#endregion

        #region Plugin details
		public string GetPluginName() {
            return "Head Shot Counter";
        }

        public string GetPluginVersion() {
            return "1.0";
        }

        public string GetPluginAuthor() {
            return "Myriades";
        }

        public string GetPluginWebsite() {
            return "www.phogue.net/forum/viewtopic.php_f=18&t=841";
        }

        // A note to plugin authors: DO NOT change how a tag works, instead make a whole new tag.
        public string GetPluginDescription() {
            return @"<h2>Description</h2>
This plugin displays head shots in global chat
<h2>Settings</h2>
	<h3>Chat spam</h3>
		<blockquote>
			<h4>Start @ :</h4>
			Minimum head shot kill streak before display
		</blockquote>
		<blockquote>
			<h4>Message :</h4>
			The displayed message :)
		</blockquote>
		<blockquote>
			<h4>End of round message :</h4>
			The end of round displayed message :)
		</blockquote>
		<blockquote>
			<h4>Messages vars :</h4>
			<ul>
				<li>%pn% : the player name. The one that did a head shot kill streak.</li>
				<li>%hsks% : the current head shot kill streak of %pn%</li>
				<li>%ths% : the total head shot of %pn%</li>
				<li>%kill% : the number of kill done by %pn%</li>
				<li>%pns% : the player names that have the best head shot serie</li>
				<li>%mhsks% : the maximum head shot serie value</li>
			</ul>
		</blockquote>
";
        }
		#endregion

        #region Plug load/enable/disable
		public void OnPluginLoaded(string strHostName, string strPort, string strPRoConVersion) {
			this.m_strHostName = strHostName;
			this.m_strPort = strPort;
			this.m_strPRoConVersion = strPRoConVersion;
        }

        public void OnPluginEnable() {
			this.ExecuteCommand("procon.protected.pluginconsole.write", "^bHS counter ^2Enabled!");
        }

        public void OnPluginDisable() {
            this.ExecuteCommand("procon.protected.pluginconsole.write", "^bHS counter ^1Disabled =(");
        }
		#endregion

        #region plugin graphic controls
		public List<CPluginVariable> GetDisplayPluginVariables() {
            List<CPluginVariable> lstReturn = new List<CPluginVariable>();

			//	Chat
			lstReturn.Add(new CPluginVariable("Chat spam|Start @", typeof(int), this.i_ChatSpamAt));
			lstReturn.Add(new CPluginVariable("Chat spam|Message", typeof(string), this.str_ChatMSG));
			lstReturn.Add(new CPluginVariable("Chat spam|End of round message", typeof(string), this.str_EORM));
			
            return lstReturn;
        }

        // Lists all of the plugin variables.
        public List<CPluginVariable> GetPluginVariables() {
            List<CPluginVariable> lstReturn = new List<CPluginVariable>();

			lstReturn.Add(new CPluginVariable("Start @", typeof(int), this.i_ChatSpamAt));
			lstReturn.Add(new CPluginVariable("Message", typeof(string), this.str_ChatMSG));
			lstReturn.Add(new CPluginVariable("End of round message", typeof(string), this.str_EORM));
			
            return lstReturn;
        }

        public void SetPluginVariable(string strVariable, string strValue) {
			int TmpInt_1 = 0;
			switch(strVariable){
				case "Start @":
					if(int.TryParse(strValue, out TmpInt_1))
						this.i_ChatSpamAt = TmpInt_1;
					break;
				case "Message":
					this.str_ChatMSG = strValue;
					break;
				case  "End of round message":
					this.str_EORM = strValue;
					break;
            }
       }
		#endregion

        #region Account created
        public void OnAccountCreated(string strUsername) {
        }

        public void OnAccountDeleted(string strUsername) {
        }

        public void OnAccountPrivilegesUpdate(string strUsername, CPrivileges cpPrivs) {
        }
        
        public void OnReceiveProconVariable(string strVariableName, string strValue) {
        }

        // Connection
        public void OnConnectionClosed() {
        }
		#endregion

        #region Player events
        public void OnPlayerJoin(string strSoldierName) {
        	this.D_PlayerDatas.Add(strSoldierName, new PlayerData());
        }

        public void OnPlayerAuthenticated(string strSoldierName, string strGuid) {
        }

        public void OnPlayerLeft(string strSoldierName) {
        	this.D_PlayerDatas.Remove(strSoldierName);
        }

        public void OnPlayerKilled(string strKillerSoldierName, string strVictimSoldierName){
        }
		#endregion

        #region (un peu de tout)
		// Will receive ALL chat global/team/squad in R3.
        public void OnGlobalChat(string strSpeaker, string strMessage) {
        }

        // Place holder, non-functioning in R3.  It recieves the same data as OnGlobalChat though so look out for now.
        public void OnTeamChat(string strSpeaker, string strMessage, int iTeamID) {
        }

        // Place holder, non-functioning in R3.  It recieves the same data as OnGlobalChat though so look out for now.
        public void OnSquadChat(string strSpeaker, string strMessage, int iTeamID, int iSquadID) {
        }

        public void OnLoadingLevel(string strMapFileName) {
        }

        public void OnLevelStarted() {
        }

        public void OnPunkbusterMessage(string strPunkbusterMessage) {
        }

        public void OnPunkbusterBanInfo(CBanInfo cbiPunkbusterBan) {
        }

        public void OnPunkbusterPlayerInfo(CPunkbusterInfo cpbiPlayer) {
        }

        // Global or misc..
        public void OnResponseError(List<string> lstRequestWords, string strError) {
        }

        // Login events
        public void OnLogin() {
        }

        public void OnLogout() {
        }

        public void OnQuit() {
        }

        public void OnVersion(string strServerType, string strVersion) {
        }

        public void OnHelp(List<string> lstCommands) {
        }

        public void OnRunScript(string strScriptFileName) {
        }

        public void OnRunScriptError(string strScriptFileName, int iLineError, string strErrorDescription) {
        }

        // Query Events
        public void OnServerInfo(CServerInfo csiServerInfo) {
        }
		#endregion

        #region Communication Events
        public void OnYelling(string strMessage, int iMessageDuration, CPlayerSubset cpsSubset) {
        }

        public void OnSaying(string strMessage, CPlayerSubset cpsSubset) {
        }
		#endregion

        #region Level Events
        public void OnRunNextLevel() {
        }

        public void OnCurrentLevel(string strCurrentLevel) {
        }

        public void OnSetNextLevel(string strNextLevel) {
        }

        public void OnRestartLevel() {
        }
		#endregion

        #region Does not work in R3, never called for now.
        public void OnSupportedMaps(string strPlayList, List<string> lstSupportedMaps) {
        }

        public void OnPlaylistSet(string strPlaylist) {

        }

        public void OnListPlaylists(List<string> lstPlaylists) {

        }
		#endregion

        #region Player Kick/List Events
        public void OnPlayerKicked(string strSoldierName, string strReason) {

        }

        public void OnPlayerTeamChange(string strSoldierName, int iTeamID, int iSquadID) {

        }

        public void OnPlayerSquadChange(string strSpeaker, int iTeamID, int iSquadID) {

        }

        public void OnListPlayers(List<CPlayerInfo> lstPlayers, CPlayerSubset cpsSubset) {
			foreach(CPlayerInfo playerInfos in lstPlayers){
        		if(!this.D_PlayerDatas.ContainsKey(playerInfos.SoldierName))
        			this.D_PlayerDatas.Add(playerInfos.SoldierName, new PlayerData());
			}
        }
		#endregion

        #region Banning and Banlist Events
        public void OnBanList(List<CBanInfo> lstBans) {

        }

        public void OnBanAdded(CBanInfo cbiBan) {

        }

        public void OnBanRemoved(CBanInfo cbiUnban) {

        }

        public void OnBanListClear() {

        }

        public void OnBanListLoad() {

        }

        public void OnBanListSave() {

        }
		#endregion

        #region Reserved Slots Events
        public void OnReservedSlotsConfigFile(string strConfigFilename) {

        }

        public void OnReservedSlotsLoad() {

        }

        public void OnReservedSlotsSave() {

        }

        public void OnReservedSlotsPlayerAdded(string strSoldierName) {

        }

        public void OnReservedSlotsPlayerRemoved(string strSoldierName) {

        }

        public void OnReservedSlotsCleared() {

        }

        public void OnReservedSlotsList(List<string> lstSoldierNames) {

        }
		#endregion

        #region Maplist Events
        public void OnMaplistConfigFile(string strConfigFilename) {

        }

        public void OnMaplistLoad() {

        }

        public void OnMaplistSave() {

        }

        public void OnMaplistMapAppended(string strMapFileName) {

        }

        public void OnMaplistMapRemoved(int iMapIndex) {

        }

        public void OnMaplistCleared() {

        }

        public void OnMaplistList(List<string> lstMapFileNames) {

        }

        public void OnMaplistNextLevelIndex(int iMapIndex) {

        }

        public void OnMaplistMapInserted(int iMapIndex, string strMapFileName) {

        }
		#endregion

        #region Game Vars
        public void OnGamePassword(string strGamePassword) {

        }

        public void OnPunkbuster(bool blEnabled) {

        }

        public void OnHardcore(bool blEnabled) {

        }

        public void OnRanked(bool blEnabled) {

        }

        public void OnRankLimit(int iRankLimit) {

        }

        public void OnTeamBalance(bool blEnabled) {

        }

        public void OnFriendlyFire(bool blEnabled) {

        }

        public void OnMaxPlayerLimit(int iMaxPlayerLimit) {

        }

        public void OnCurrentPlayerLimit(int iCurrentPlayerLimit) {

        }

        public void OnPlayerLimit(int iPlayerLimit) {

        }

        public void OnBannerURL(string strURL) {

        }

        public void OnServerDescription(string strServerDescription) {

        }

        public void OnKillCam(bool blEnabled) {

        }

        public void OnMiniMap(bool blEnabled) {

        }

        public void OnCrossHair(bool blEnabled) {

        }

        public void On3dSpotting(bool blEnabled) {

        }

        public void OnMiniMapSpotting(bool blEnabled) {

        }

        public void OnThirdPersonVehicleCameras(bool blEnabled) {

        }
		#endregion

        #region IPRoConPluginInterface2

        //
        // IPRoConPluginInterface2
        //
        public void OnPlayerKilled(Kill kKillerVictimDetails){
        	if(this.D_PlayerDatas.Count >= 4){	//	Server started
        		this.D_PlayerDatas[kKillerVictimDetails.Killer.SoldierName].i_PlKill++;
				if(kKillerVictimDetails.Headshot){
		        	this.D_PlayerDatas[kKillerVictimDetails.Killer.SoldierName].i_PlHsCount++;
		        	this.D_PlayerDatas[kKillerVictimDetails.Killer.SoldierName].i_PlHsKs++;
		        	//	Messages datas
		        	if(this.D_PlayerDatas[kKillerVictimDetails.Killer.SoldierName].i_PlHsKs > this.m_MaxHSKSinRound){
		        		 this.m_MaxHSKSinRound = this.D_PlayerDatas[kKillerVictimDetails.Killer.SoldierName].i_PlHsKs;
		        		 this.m_MaxHSPlayerName = kKillerVictimDetails.Killer.SoldierName;
		        	}
		        	else if(this.D_PlayerDatas[kKillerVictimDetails.Killer.SoldierName].i_PlHsKs == this.m_MaxHSKSinRound && !this.m_MaxHSPlayerName.Contains(kKillerVictimDetails.Killer.SoldierName)){
		        		 this.m_MaxHSPlayerName += " & " + kKillerVictimDetails.Killer.SoldierName;
		        	}
		        	if(this.D_PlayerDatas[kKillerVictimDetails.Killer.SoldierName].i_PlHsKs >= this.i_ChatSpamAt){
		        		this.ExecuteCommand("procon.protected.send", "admin.say", this.MSGConverter(kKillerVictimDetails.Killer.SoldierName, this.str_ChatMSG), "all");
		        	}
		    	}
	        	else{
		        	this.D_PlayerDatas[kKillerVictimDetails.Killer.SoldierName].i_PlHsKs = 0;
	        	}
	        	this.D_PlayerDatas[kKillerVictimDetails.Victim.SoldierName].i_PlHsKs = 0;
        	}
        }

        public void OnPlayerLeft(CPlayerInfo cpiPlayer){

        }

        public void OnServerName(string strServerName){

        }

        public void OnTeamKillCountForKick(int iLimit) {

        }

        public void OnTeamKillValueIncrease(int iLimit) {

        }

        public void OnTeamKillValueDecreasePerSecond(int iLimit) {

        }

        public void OnTeamKillValueForKick(int iLimit) {

        }

        public void OnIdleTimeout(int iLimit) {

        }

        public void OnProfanityFilter(bool isEnabled) {

        }

        public void OnEndRound(int iWinningTeamID) {
        }

        public void OnRoundOverTeamScores(List<TeamScore> lstTeamScores) {

        }

        public void OnRoundOverPlayers(List<string> lstPlayers) {

        }

        public void OnRoundOver(int iWinningTeamID) {
        	if(this.m_MaxHSPlayerName != ""){
        		this.ExecuteCommand("procon.protected.send", "admin.say", this.MSGConverter("Server", this.str_EORM), "all");
			}
			this.m_MaxHSPlayerName = "";
			this.m_MaxHSKSinRound = 0;
			List<string>PlName = new List<string>();
			foreach(KeyValuePair<string, PlayerData>kvp_PlayerDatas in D_PlayerDatas){
				PlName.Add(kvp_PlayerDatas.Key);
			}
        	foreach(string str_PlayerDatas in PlName){
        		this.D_PlayerDatas[str_PlayerDatas] = new PlayerData();
        	}
			PlName.Clear();
        }

        public void OnPlayerSpawned(string soldierName, Inventory spawnedInventory) {

        }

        public void OnLevelVariablesList(LevelVariable lvRequestedContext, List<LevelVariable> lstReturnedValues) {

        }

        public void OnLevelVariablesEvaluate(LevelVariable lvRequestedContext, LevelVariable lvReturnedValue) {

        }

        public void OnLevelVariablesClear(LevelVariable lvRequestedContext) {

        }

        public void OnLevelVariablesSet(LevelVariable lvRequestedContext) {

        }

        public void OnLevelVariablesGet(LevelVariable lvRequestedContext, LevelVariable lvReturnedValue) {

        }

        #endregion

        #region IPRoConPluginInterface3

        //
        // IPRoConPluginInterface3
        //
        public void OnAnyMatchRegisteredCommand(string strSpeaker, string strText, MatchCommand mtcCommand, CapturedCommand capCommand, CPlayerSubset subMatchedScope) {
            
        }

        public void OnZoneTrespass(CPlayerInfo cpiSoldier, ZoneAction action, MapZone sender, Point3D pntTresspassLocation, float flTresspassPercentage) {

        }

        public void OnRegisteredCommand(MatchCommand mtcCommand) {

        }

        public void OnUnregisteredCommand(MatchCommand mtcCommand) {

        }

        public void OnLoadingLevel(string mapFileName, int roundsPlayed, int roundsTotal) {

        }

        public void OnMaplistList(List<MaplistEntry> lstMaplist) {

        }

        #endregion

        #region IPRoConPluginInterface4

        public void OnZoneTrespass(CPlayerInfo cpiSoldier, ZoneAction action, MapZone sender, Point3D pntTresspassLocation, float flTresspassPercentage, object trespassState) {

        }
        #endregion
		
		#region MY functions
		private string MSGConverter(string SoldierName, string TheMSG){
			if(SoldierName != "Server")
				TheMSG = TheMSG.Replace("%pn%", SoldierName).Replace("%hsks%", this.D_PlayerDatas[SoldierName].i_PlHsKs.ToString()).Replace("%ths%", this.D_PlayerDatas[SoldierName].i_PlHsCount.ToString()).Replace("%kill%", this.D_PlayerDatas[SoldierName].i_PlKill.ToString());
			this.ExecuteCommand("procon.protected.pluginconsole.write", TheMSG.Replace("%pns%", this.m_MaxHSPlayerName).Replace("%mhsks%", this.m_MaxHSKSinRound.ToString()));
			return TheMSG.Replace("%pns%", this.m_MaxHSPlayerName).Replace("%mhsks%", this.m_MaxHSKSinRound.ToString());
		}
		#endregion

    }
}

* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by SmokeMyWeed*:

 

download Notepad++ , or open with editor

open cs file with notepad++ go to line 18

edit line 18

old version: public class CHScounter : CPRoConMarshalByRefObject, IPRoConPluginInterface4 {

new version: public class CHScounter : PRoConPluginAPI, IPRoConPluginInterface {

 

thats all

;-) have a nice day


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by HARDCOREBF*:

 

please fix download link ,404 Not Found


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Chilace*:

 

please fix download link ,404 Not Found

1. Create text file

2. Copy/paste code from post #24 to that file myrcon.net/...hs-counter-v10#entry2026

3. Rename that file to "CHScounter.cs" ( note that the file extension is .cs)

4. Profit!


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Mamba334*:

 

When I saved this with Notepad, it saved it as a .txt?

 

When I save it, I put .cs at the end out it. I don't know how to do this. Can someone shoot me a downloable link please?


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Originally Posted by Chilace*:

 

CHScounter.zip

When I saved this with Notepad, it saved it as a .txt?

 

When I save it, I put .cs at the end out it. I don't know how to do this. Can someone shoot me a downloable link please?

You need to turn on the display of file extensions in Windows Explorer (F1).

 

Don't use standart Notepad but Notepad++ (because UTF-8 without BOM):

https://en.wikipedia.org/wiki/Notepad%2B%2B

 

Here CHScounter.cs:

CHScounter.zip


* Restored post. It could be that the author is no longer active.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
  • Our picks

    • I wanted I let you know that I am starting to build out the foundation for the hosting services that I talked about here. The pricing model I was originally going for wasn't going to be suitable for how I want to build it. So instead I decided to offer each service as it's own product instead of a package deal. In the future, hopefully, I will be able to do this and offer discounts to those that choose it.

      Here is how the pricing is laid out for each service as well as information about each. This is as of 7/12/2020.

      Single MySQL database (up to 30 GB) is $10 USD per month.



      If you go over the 30 GB usage for the database then each additional gigabyte is charged at $0.10 USD each billing cycle. If you're under 30GB you don't need to worry about this.


      Databases are replicated across 3 zones (regions) for redundancy. One (1) on the east coast of the USA, One (1) in Frankfurt, and One (1) in Singapore. Depending on the demand, this would grow to more regions.


      Databases will also be backed up daily and retained for 7 days.




      Procon Layer will be $2 USD per month.


      Each layer will only allow one (1) game server connection. The reason behind this is for performance.


      Each layer will also come with all available plugins installed by default. This is to help facilitate faster deployments and get you up and running quickly.


      Each layer will automatically restart if Procon crashes. 


      Each layer will also automatically restart daily at midnight to make sure it stays in tip-top shape.


      Custom plugins can be installed by submitting a support ticket.




      Battlefield Admin Control Panel (BFACP) will be $5 USD per month


      As I am still working on building version 3 of the software, I will be installing the last version I did. Once I complete version 3 it will automatically be upgraded for you.





      All these services will be managed by me so you don't have to worry about the technical side of things to get up and going.

      If you would like to see how much it would cost for the services, I made a calculator that you can use. It can be found here https://ezrcon.com/calculator.html

       
      • 10 replies
    • I have pushed out a new minor release which updates the geodata pull (flags in the playerlisting). This should be way more accurate now. As always, please let me know if any problems show up.

       
      • 6 replies
×
×
  • Create New...

Important Information

Please review our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.