/// <summary> /// this event will trigger when punkbuster get new player connect and run "pb_sv_plist" to list player. /// <para>1, MUST wait "admin.listPlayers all" finished (<see cref="hasListPlayers"/>)</para> /// <para>2, Only get new punkbuster player info (<see cref="isNewConnection"/>)</para> /// <para>3, If first enable plugin,get all punkbuster player info (<see cref="isFirstEnable"/>)</para> /// </summary> /// <param name="playerInfo"></param> public override void OnPunkbusterPlayerInfo(CPunkbusterInfo playerInfo) { if (!isEnable) { return; } base.OnPunkbusterPlayerInfo(playerInfo); if ((isNewConnection || isFirstEnable) && hasListPlayers) { string soldierName = playerInfo.SoldierName; if (!FrostbitePlayerInfoList.ContainsKey(soldierName) || FrostbitePlayerInfoList[soldierName].GUID.Length != 35 || playerInfo.GUID.Length != 32) { return; } CPlayerInfo info = FrostbitePlayerInfoList[soldierName]; Func <object, object> NullChecker = o => o ?? DBNull.Value; DbParameter[] parameters = new DbParameter[] { new MySqlParameter("@ipaddress", NullChecker(playerInfo.Ip)), new MySqlParameter("@clantag", NullChecker(info.ClanTag)), new MySqlParameter("@soldiername", NullChecker(soldierName)), new MySqlParameter("@eaguid", NullChecker(info.GUID)), new MySqlParameter("@pbguid", NullChecker(playerInfo.GUID)), new MySqlParameter("@country", NullChecker(playerInfo.PlayerCountry)), new MySqlParameter("@countrycode", NullChecker(playerInfo.PlayerCountryCode)), }; InsertPbInfo(parameters); } }
public void OnCommandSwapTeam(string strSpeaker, string strText, MatchCommand mtcCommand, CapturedCommand capCommand, CPlayerSubset subMatchedScope) { ExecuteCommand("procon.protected.events.write", "Plugins", "PluginAction", String.Format("Initiated a swap team"), strSpeaker); List <int> teamIds = FrostbitePlayerInfoList.Values.Select(_ => _.TeamID).Distinct().ToList(); Output.Information("TeamIds:" + string.Join(",", teamIds)); for (int i = 0; i < FrostbitePlayerInfoList.Count; i++) { var player = FrostbitePlayerInfoList.ElementAt(i).Value; var name = player.SoldierName; var dstTeamId = teamIds[((teamIds.IndexOf(player.TeamID) + 1) < teamIds.Count) ? (teamIds.IndexOf(player.TeamID) + 1) : 0]; var dstSquadId = player.SquadID; ExecuteCommand("procon.protected.tasks.add", ClassName + strSpeaker, 10.ToString(), "1", "1", "procon.protected.send", "admin.movePlayer", name, dstTeamId.ToString(), dstSquadId.ToString(), true.ToString()); Output.Information("{0} {1} {2} {3} {4}", "admin.movePlayer", name, dstTeamId.ToString(), dstSquadId.ToString(), true.ToString()); } }