![]() |
#12
|
|||
|
|||
![]()
Ok here is a mission timer (Attached)
Reports Mission design TIME value by reading mis data directly. Reports Ingame run timer, Mins, Seconds,Ticks Reports Time from Mission TIME + run time(in decimal mins) Note Config in system folder, Config: "timeIO", "ON" "timevalue", "15" set "timeIO", "ON" = runs timer, set "timeIO", "OFF" = turns off timer, set "timevalue", "15" = seconds between count and screen reporting. Rerun mission to activate new time values note download the attached Mistimer.zip, as it contains correct setup Note: drop MisTimer into missions folder and run from there. here is the script for those interested, Please report bugs if found. seems to work though. enjoy. Code:
/**MisTimer.cs**/ // //C# script for CLOD missions, //Features: //Configlist: for easy setup "ON" runs timer, "OFF" turns off timer, timevalue = seconds between count and screen reporting. // //By Smokeynz // //lastmod 19/5/2012 //Dedicated server compatible using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.IO; using maddox.game; using maddox.game.world; using maddox.GP; public class Mission : AMission { /*=========================================*/ #region Mission paths /*=========================================*/ static string userdocpath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); /*=========================================*/ // the following 2 items are for main mission folder path and mis name, edit for preference static string MISname = "MisTimer.mis"; //alter this to your mission name static string FILEname = "MisTimer"; //alter this to your mission folder name /*=========================================*/ static string filepackpath = userdocpath + @"\1C SoftClub\il-2 sturmovik cliffs of dover\missions\"; //path to mission file pack static string mainmissionpath = filepackpath + FILEname + @"\"; // main mission //configs static string syspath = mainmissionpath + @"system\"; // data path for system config static string configfile = syspath + "config.txt"; //loading mission path data static string timefile = mainmissionpath + MISname; /*=========================================*/ #endregion /*=========================================*/ #region Declarations, ints, doubles, bools /*=========================================*/ //Msgs To private const int All = -1; private const int Allies = 1; private const int Axis = 2; bool timeIO;// = true; //time indicator switch on/off double timevalue; double timeindicator; double MisHour; double MisMin; //config file indexing int idxIO; int idxTV; // Internal file creation public int idxlist; /*=========================================*/ #endregion /*=========================================*/ #region Mission Parse & Class /*=========================================*/ // mission config settings(Allows external configuration) List<Config> ConfigList = new List<Config>(); internal class Config { public string ConfigName { get; set; }//item name public string ConfigValue { get; set; }//item value public Config(string configName, string configValue) { this.ConfigName = configName; this.ConfigValue = configValue; } } public void ParseConfigFile(string confile) { if (!File.Exists(confile)) { GamePlay.gpLogServer(null, "File {0} not found!", new object[] { confile }); return; } using (StreamReader reader = new StreamReader(confile)) { string conline; int conlineNr = 0; while ((conline = reader.ReadLine()) != null) { conlineNr++; if (conline != "") { string[] tmpconPart; conline = conline.TrimStart('"'); // remove first " conline = conline.TrimEnd('"'); // remove last " tmpconPart = conline.Split(new string[] { "\", \"", "\",\"" }, StringSplitOptions.None); // split string on ", " or "," if (tmpconPart.Length < 2) { GamePlay.gpLogServer(null, "Error reading configlist file: {0} : {1}", new object[] { conlineNr, conline }); } else { if (tmpconPart[0].Equals("null")) tmpconPart[0] = null; if (tmpconPart[1].Equals("null")) tmpconPart[1] = null; ConfigList.Add(new Config(tmpconPart[0], tmpconPart[1])); } } } } idxIO = ConfigList.FindIndex(r => r.ConfigName.Equals("timeIO")); idxTV = ConfigList.FindIndex(s => s.ConfigName.Equals("timevalue")); double.TryParse(ConfigList[idxTV].ConfigValue, out timevalue); } public void ParseTimeDataFile(string Tfile) { if (!File.Exists(Tfile)) { GamePlay.gpLogServer(null, "File {0} not found!", new object[] { Tfile }); return; } using (StreamReader reader = new StreamReader(Tfile)) { string line; int lineNr = 0; while ((line = reader.ReadLine()) != null) { lineNr++; if (line != "") { if (line.Contains("TIME")) { string[] tmptime = line.Split(new string[] { " " }, StringSplitOptions.None); // split string if (tmptime.Length < 3) { GamePlay.gpLogServer(null, "Error reading Time object line : {0} : {1}", new object[] { lineNr, line }); } else { GamePlay.gpLogServer(null, "Time Line Split 0:{0} 1:{1} 2:{2} 3:{3}", new object[] { tmptime[0], tmptime[1], tmptime[2], tmptime[3] });//test reading string[] tmptime2 = tmptime[3].Split(new string[] { "." }, StringSplitOptions.None); // split string if (tmptime2.Length < 2) { double.TryParse(tmptime2[3], out MisHour); } else { GamePlay.gpLogServer(null, "Time Line Split 0:{0} 1:{1}", new object[] { tmptime2[0], tmptime2[1] }); double.TryParse(tmptime2[0], out MisHour); double.TryParse(tmptime2[1], out MisMin); if (MisMin < 10) { MisMin = MisMin / 10; } if (MisMin > 9) { MisMin = MisMin / 100; } } } } } } } } /*=========================================*/ #endregion /*=========================================*/ #region Main mission operation /*=========================================*/ //listen to events from all missions. public override void OnBattleStarted() { base.OnBattleStarted(); MissionNumberListener = -1; ParseConfigFile(configfile); ParseTimeDataFile(timefile); } public override void OnTickGame() { base.OnTickGame(); // Time.current() in seconds from Battle Start timeIO = (ConfigList[idxIO].ConfigValue == "ON" ? true : false); if (timeIO == true) { if (Time.current() >= timeindicator) { double MisTime = MisHour + MisMin; ScreenMsg(-1, "MisStart:: " + MisTime + " decimalhours"); Timeout(2.0, () => { ScreenMsg(-1, "Elapsed Time:Min:" + timeindicator / 60 + " Secs:" + timeindicator + " Ticks:" + timeindicator * 30); }); MisTime = Math.Round((MisHour + ((MisMin*60) + (timeindicator / 60)) / 60), 2); Timeout(4.0, () => { ScreenMsg(-1, "MisTime:: " + MisTime + " decimalhours"); }); } } if (Time.current() >= timeindicator) { timeindicator = timeindicator + timevalue; } } /*=========================================*/ #endregion /*=========================================*/ #region ScreenMsg screen message /*=========================================*/ private void ScreenMsg(int army, string msg, params object[] args) { List<Player> Consignees = new List<Player>(); if (GamePlay.gpPlayer() != null) Consignees.Add(GamePlay.gpPlayer()); if (GamePlay.gpRemotePlayers() != null) Consignees.AddRange(GamePlay.gpRemotePlayers()); if (army == -1) { GamePlay.gpHUDLogCenter(null, msg, args); GamePlay.gpLogServer(null, msg, args); } else if (Consignees.Exists(item => item.Army() == army)) { GamePlay.gpHUDLogCenter(Consignees.FindAll(item => item.Army() == army).ToArray(), msg, args); GamePlay.gpLogServer(Consignees.FindAll(item => item.Army() == army).ToArray(), msg, args); } } /* private void sendChatMessage(int army, string msg, params object[] args) { List<Player> Consignees = new List<Player>(); if (GamePlay.gpPlayer() != null) Consignees.Add(GamePlay.gpPlayer()); if (GamePlay.gpRemotePlayers() != null) Consignees.AddRange(GamePlay.gpRemotePlayers()); if (army == -1) GamePlay.gpLogServer(null, msg, args); else if (Consignees.Exists(item => item.Army() == army)) GamePlay.gpLogServer(Consignees.FindAll(item => item.Army() == army).ToArray(), msg, args); } */ /*=========================================*/ #endregion /*=========================================*/ } //note the last bracket wraps Amission |
|
|