Fulqrum Publishing Home   |   Register   |   Today Posts   |   Members   |   UserCP   |   Calendar   |   Search   |   FAQ

Go Back   Official Fulqrum Publishing forum > Fulqrum Publishing > IL-2 Sturmovik: Cliffs of Dover > FMB, Mission & Campaign builder Discussions

Reply
 
Thread Tools Display Modes
  #1  
Old 05-19-2012, 05:12 AM
Smokeynz Smokeynz is offline
Approved Member
 
Join Date: Apr 2011
Posts: 106
Default

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
Attached Files
File Type: zip MisTimer.zip (4.5 KB, 2 views)
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 12:31 AM.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.