Are you sure you want to report the post shown below? This will send an email to the ATVO administrators. Please include a short reason for reporting.
Users reporting for no reason may be locked out.
using System; 
using ATVO.ThemesSDK; 
using ATVO.ThemesSDK.Data.Entity; 
using ATVO.ThemeEditor.ThemeModels; 
using ATVO.ThemeEditor.Controls; 
using ATVO.ThemeEditor.Scripting.DotNET;
using ATVO.ThemesSDK.Data.Enums;
using ATVO.ThemesSDK.Data.Results;
using System.Linq;
using System.Data;
using System.Collections.Generic;
namespace Scripts
{
    public class Script : IScript
    {
    
    	ChampDriver driver;
    	
       
        int[] PointStructure = new int[] { 0, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
		private Dictionary<int, ChampDriver> _standings = new Dictionary<int, ChampDriver>();
        
         
        public object Execute(ThemeContentItem item, object value, string parameter, ISimulation sim)
        {
        	UpdateSessionStandings(sim);
        	LoadStandings(item.Theme);
            IEntitySessionResult result = (IEntitySessionResult) value;
    
            var pos = result.LivePosition;
            int CurrentPoints = PointStructure[pos];
          	       
            //Lap Led Point
            if (result.LapsLed > 0)
            { 
            CurrentPoints++;
            }
            //Pole Position Point
            if (result.StartPosition == 1)
            {
            CurrentPoints++;
            }
            //Winner Point
            if (result.LivePosition == 1)
            {
            CurrentPoints++;
            }
            
            int TotalPoints = CurrentPoints + driver.ChampPoints;
            
            return TotalPoints;
            
}  
/////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
     private void LoadStandings(Theme theme)
        {
            if (_standings.Count == 0)
            {
                // Read current standings from embedded csv
                // Columns: customer_id, position, carnumber, drivername, points
                var sheet = theme.Spreadsheets.Find("Champ_Standings.csv");
                foreach (var row in sheet.Table.Data.Rows.OfType<DataRow>())
                {
                    var custid = row[1];
                    var position = row[0];
                    var carnum = row[11];
                    var name = row[2];
                    var points = row[9];
                    
                    var driver = new ChampDriver();
                    driver.CustomerId = Convert.ToInt32(custid);
                    driver.ChampPosition = Convert.ToInt32(position);
                    driver.CarNumber = carnum.ToString();
                    driver.Name = name.ToString();
                    driver.ChampPoints = Convert.ToInt32(points);
                    _standings.Add(driver.CustomerId, driver);
                }
 			}
		}
		
private void UpdateSessionStandings(ISimulation sim)
        {
            // Loop through entity results in the session and update the standings
            foreach (var result in sim.Session.Current.Results)
            {
                // Check if there is a driver in the session who was NOT in the standings csv
                if (!_standings.ContainsKey(result.Entity.Id))
                {
                    // This driver isn't in the standings yet, let's add him
                    driver = new ChampDriver();
                    driver.CustomerId = result.Entity.Id;
                    driver.Name = result.Entity.Name;
                    driver.CarNumber = result.Entity.Car.Number;
                    driver.ChampPoints = 0;
                    _standings.Add(driver.CustomerId, driver);
                }
                else 
                {
                    // Otherwise, grab him from memory
                    driver = _standings[result.Entity.Id];
                }
                
                // Link him to the session entity
                driver.Entity = result.Entity;
            }
      }
		 public class ChampDriver
        {
            public IEntity Entity {get;set;}
            public int CustomerId {get;set;}
            public string CarNumber {get;set;}
            public string Name {get;set;}
            public int ChampPosition {get;set;}
            public int ChampPoints {get;set;}
            public int LiveChampPosition {get;set;}
            public int LiveChampPoints {get;set;}
        }
	}
}