Report post

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.


Post

Posted by Nicolas C
on
using System;
using ATVO.ThemesSDK;
using ATVO.ThemeEditor.ThemeModels;
using ATVO.ThemeEditor.Scripting.DotNET;
using ATVO.ThemesSDK.Data;
using ATVO.ThemesSDK.Data.Results;
using ATVO.ThemesSDK.Data.Entity;
using ATVO.ThemesSDK.Data.Enums;
using System.ComponentModel;
using System.Data;

namespace Scripts
{
public class SC03_CalculUnofficial : IScript
{
public object Execute(ThemeContentItem item, object value, string parameter, ISimulation sim)
{
int[] _PointOfChamp = new int[]{0,40,39,38,37,36,35,34,33,32,31,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};

bool _iCourseOK = false;

int _DriverMostPositionUp=0;
int _iMostPositionUp=0;

int _DriverMostLapLead=0;
int _iMostLapLead=0;

int _Poleman=0;

float _iPoleTime107=0;
float _i107Pourcent = float.Parse("1,07");

DataRow _iDriverSpreadsheet = null;
DataTable _iUnofficialResult = null;

Spreadsheet _iUnoff_Spread = item.Theme.Spreadsheets.Find("IFRN_Unofficial.csv");

// search driver in spreadsheet
foreach (DataRow row in _iUnoff_Spread.Table.Data.Rows)
{

row[2] = row[2].ToString().Replace("\"", "");
row[4] = row[4].ToString().Replace("\"", "");
row[5] = row[5].ToString().Replace("\"", "");
row[9] = row[9].ToString().Replace("\"", "");

}


// Get qual and race results
ISessionResult _Course = sim.Session.GetLatestRace();
ISessionResult _Qualif = sim.Session.GetQualification();


//_iUnofficialResult = item.Theme.Spreadsheets.Find("IFRN_Unofficial.csv").Table.Data.Copy();

Console.WriteLine("SC03.1");

// Check if Session is null
if (sim.Session == null)
{
Console.WriteLine("Session is null.");
return value;
}

// Check for null
if (_Qualif == null)
{
Console.WriteLine("Qual session is null.");
return value;
}
if (_Course == null)
{
Console.WriteLine("Race session is null.");
return value;
}

// Check FastestLapDriver
if (_Qualif.Leader == null)
{
Console.WriteLine("Leader is null.");
return value;
}


Console.WriteLine("Poleman: " + _Qualif.Leader.Name);
_Poleman = _Qualif.Leader.Id;
_iPoleTime107 = _Qualif.FastestLapTime * _i107Pourcent;
_iCourseOK = true;




Console.WriteLine("SC03.2");

// Race Information
if(_iCourseOK)
{
foreach (IEntitySessionResult _EntitySessionResult in _Course.Results)
{
int _nbPointAdd = 0;
_iDriverSpreadsheet=null;


IEntity _iPiloteTraite = _EntitySessionResult.Entity;
// Check Pilote traité is not null
if (_iPiloteTraite == null)
{
Console.WriteLine("Pilote Traité is null.");
return value;
}


float _DriverFastQualifyLap;

IEntitySessionResult _iPiloteTraite_Qualif = _iPiloteTraite.Results.GetResult(SessionType.Qualify);
// Check Driver Qualif is not null
if (_iPiloteTraite_Qualif == null)
{
Console.WriteLine("Pilote Traité Qualify is null for " + _iPiloteTraite.Name);
_DriverFastQualifyLap = 999;
}
else
{
_DriverFastQualifyLap = _iPiloteTraite_Qualif.FastestLapTime;
}


_iDriverSpreadsheet = _iUnoff_Spread.FindRow(_EntitySessionResult.Entity.Id.ToString(), 0);


if (_iDriverSpreadsheet == null)
{
_iDriverSpreadsheet = _iUnofficialResult.NewRow();
_iDriverSpreadsheet[0]=_iPiloteTraite.Id;
_iDriverSpreadsheet[1]=_iPiloteTraite.Car.Id;
_iDriverSpreadsheet[2]=_iPiloteTraite.Car.Number;
_iDriverSpreadsheet[9]=_iPiloteTraite.Name;
_iDriverSpreadsheet[10]=0;
_iDriverSpreadsheet[17]=0;
_iUnofficialResult.Rows.Add(_iDriverSpreadsheet);
}



// part of point of most position up (qualify time != 0 and 107% of pole time)
if(_DriverFastQualifyLap > 0)
{
if (_DriverFastQualifyLap <= _iPoleTime107)
{
if (_EntitySessionResult.StartPosition - _EntitySessionResult.LivePosition > _iMostPositionUp)
{
_iMostPositionUp = _EntitySessionResult.StartPosition - _EntitySessionResult.LivePosition;
_DriverMostPositionUp = _iPiloteTraite.Id;
}
}
}


// Point of lead lap (+1 point)
if(_EntitySessionResult.LapsLed > 0 )
{
_nbPointAdd += 1;
}


// points of most lead lap (+1 point)
if(_EntitySessionResult.LapsLed > _iMostLapLead)
{
_DriverMostLapLead = _iPiloteTraite.Id;
_iMostLapLead =_EntitySessionResult.LapsLed;
}


// points of race
_nbPointAdd += _PointOfChamp[_EntitySessionResult.Position];


// qualify pole
if (_Poleman!=0)
{
if (_Poleman == _iPiloteTraite.Id)
{
_nbPointAdd += 1;
}
}


// add previous point
if ( _iDriverSpreadsheet[17].ToString() != "0")
{
if (_iDriverSpreadsheet[10].GetType() == typeof(int))
{
_iDriverSpreadsheet[10] = int.Parse(_iDriverSpreadsheet[10].ToString()) + _nbPointAdd;
}
else
{
_iDriverSpreadsheet[10] =_nbPointAdd;
}
}
else
{
_iDriverSpreadsheet[10] = 0;
}
}
}


Console.WriteLine("SC03.3");
// add point of most lap lead and most position up
foreach (DataRow row in _iUnoff_Spread.Table.Data.Rows)
{
int _id =0;
if (int.TryParse(row[0].ToString(), out _id))
{
if (_DriverMostLapLead==_id )
{
Console.WriteLine("Best Tour Mené : " + row[9].ToString());
if (row[17].ToString() != "0")
{
row[10] = int.Parse(row[10].ToString()) + 1;
}
}
if (_DriverMostPositionUp == _id )
{
Console.WriteLine("Meilleur rémonté : " + row[9].ToString());
if (row[17].ToString() != "0")
{
row[10] = int.Parse(row[10].ToString()) + 1;
}
}
}
}


Console.WriteLine("SC03.4");
// sort spreadsheet
DataView _dv = _iUnoff_Spread.Table.Data.DefaultView;
_dv.Sort = _iUnoff_Spread.Table.Data.Columns[10].ColumnName + " DESC";
DataTable _sortedDT = _dv.ToTable();


Console.WriteLine("SC03.5");
int _i = 1;
int _PointLeader = 0;
foreach (DataRow row in _sortedDT.Rows)
{
DataRow _RowDriver = _iUnoff_Spread.FindRow(row[0].ToString(),0);

if (_PointLeader==0)
{
try
{
_PointLeader = int.Parse(_RowDriver[10].ToString());
} catch {}
}
else
{
try{
_RowDriver[10] = int.Parse(_RowDriver[10].ToString()) - _PointLeader;
} catch {}
}

try
{
_RowDriver[18] = int.Parse(_RowDriver[8].ToString()) - _i;

if (_RowDriver[18].ToString() == "0")
{
_RowDriver[18] = "";
_RowDriver[19] = "egal";
}
else if (int.Parse(_RowDriver[18].ToString()) < 0 )
{
_RowDriver[18] = int.Parse(_RowDriver[18].ToString()) * -1;
_RowDriver[19] = "moins";
}
else if (int.Parse(_RowDriver[18].ToString()) > 0 )
{
_RowDriver[19] = "plus";
}
}
catch
{
_RowDriver[18] = "";
_RowDriver[19] = "new";
}

_RowDriver[8] = _i;
_i += 1;
}




Console.WriteLine("SC03.6");
//item.Theme.Spreadsheets.Find("IFRN_Unofficial.csv").Table.Data.Clear();
_iUnoff_Spread.SortColumnIndex = 8;
_iUnoff_Spread.SortDirection = ListSortDirection.Ascending;
_iUnoff_Spread.Table.Sort();

//item.Theme.Widgets.Find("W17_UnofficialRankingPosGain").Ticker.UpdateRepeatedSubWidgets(true,false);
//item.Theme.Widgets.Find("W17_UnofficialRankingData1").Ticker.UpdateRepeatedSubWidgets(true,false);
//item.Theme.Widgets.Find("W17_UnofficialRankingData2").Ticker.UpdateRepeatedSubWidgets(true,false);

Console.WriteLine("Calcul Unofficial OK");

return value;
}
}
}