Ejemplo n.º 1
0
        public static uiTables.ShipEquipDataTable GetTable(Character curCharacter, LogDispatcher.LogDispatcher log)
        {
            var eqList = new uiTables.ShipEquipDataTable();

            var shipHP = Universe.Gis.Ships.FindByHash(curCharacter.ShipArch);

            if (shipHP != null)
            {
                foreach (var hp in shipHP.GetHardpointsRows())
                {
                    eqList.AddShipEquipRow(hp.Name, hp.EquipType, "", hp.HPType);
                }
            }


            foreach (var equip in curCharacter.EquipmentList)
            {
                var    eq = Universe.Gis.Equipment.FindByHash(equip.Item1);
                string eqNick;
                var    eqType = "";
                if (eq == null)
                {
                    eqNick = equip.Item1.ToString(CultureInfo.InvariantCulture);
                    if (!Universe.IsAttached)
                    {
                        log.NewMessage(LogType.Warning, "Equip {0} not found while reading character {1}!", equip.Item1,
                                       curCharacter.Name);
                    }
                }
                else
                {
                    eqNick = eq.Nickname;
                    eqType = eq.Type;
                }


                //ID,HP,health

                //internal HP
                if (equip.Item2 == "")
                {
                    eqList.AddShipEquipRow("", eqType, eqNick, "");
                    continue;
                }

                var firstOrDefault = eqList.FirstOrDefault(w => w.HPName == equip.Item2);
                if (firstOrDefault != null)
                {
                    firstOrDefault[2] = eqNick;
                }
                else
                {
                    eqList.AddShipEquipRow(equip.Item2, eqType, eqNick, "");
                }
            }

            return(eqList);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Cleans DB queue, closes the connection and attempts to initiate new database @ specified location.
        /// </summary>
        /// <param name="path1"></param>
        /// <param name="path2"></param>
        /// <param name="log"></param>
        public static void ReloadDB(string path1, string path2, LogDispatcher.LogDispatcher log)
        {
            //var path = _accDB.AccPath;
            if (IsDBAvailable())
            {
                AccDB.CloseDB();
            }

            InitiateDB(0, path1, path2, log);
        }
Ejemplo n.º 3
0
        public static uiTables.ShipEquipDataTable GetTable(Character curCharacter,LogDispatcher.LogDispatcher log)
        {
            var eqList = new uiTables.ShipEquipDataTable();

            var shipHP = Universe.Gis.Ships.FindByHash(curCharacter.ShipArch);
            if (shipHP != null)
                foreach (var hp in shipHP.GetHardpointsRows())
                {
                    eqList.AddShipEquipRow(hp.Name, hp.EquipType, "",hp.HPType);
                }

            foreach (var equip in curCharacter.EquipmentList)
            {
                var eq = Universe.Gis.Equipment.FindByHash(equip.Item1);
                string eqNick;
                var eqType = "";
                if (eq == null)
                {
                    eqNick = equip.Item1.ToString(CultureInfo.InvariantCulture);
                    if (!Universe.IsAttached)
                        log.NewMessage(LogType.Warning, "Equip {0} not found while reading character {1}!", equip.Item1,
                            curCharacter.Name);
                }
                else
                {
                    eqNick = eq.Nickname;
                    eqType = eq.Type;
                }

                //ID,HP,health

                //internal HP
                if (equip.Item2 == "")
                {
                    eqList.AddShipEquipRow("", eqType, eqNick, "");
                    continue;
                }

                var firstOrDefault = eqList.FirstOrDefault(w => w.HPName == equip.Item2);
                if (firstOrDefault != null)
                    firstOrDefault[2] = eqNick;
                else
                {
                    eqList.AddShipEquipRow(equip.Item2, eqType, eqNick, "");
                }
            }

            return eqList;
        }
Ejemplo n.º 4
0
        //TODO: select between FOS and NoSQL
        public static void InitiateDB(decimal dbType, string path1, string path2, LogDispatcher.LogDispatcher log)
        {
            _log = log;
            if (path1 == "" || path2 == "")
            {
                return;
            }

            if (AccDB != null)
            {
                AccDB.Scan.ProgressChanged -= _accDB_ProgressChanged;
                AccDB.StateChanged         -= _accDB_StateChanged;
                AccDB.CloseDB();
            }


            AccDB = new NoSQLDB(path1, path2, log);
            AccDB.Scan.ProgressChanged += _accDB_ProgressChanged;
            AccDB.StateChanged         += _accDB_StateChanged;
            AccDB.Retriever.GetFinish  += AccDB_OnGetFinish;
            AccDB.Queue.Committed      += Queue_Committed;
            AccDB.Queue.SetThreshold((int)Properties.Settings.Default.TuneQThreshold);
            AccDB.Queue.SetTimeout((int)Properties.Settings.Default.TuneQTimer);
            AccDB.Scan.AccountScanned += Scan_AccountScanned;
            _path1 = path1;


            if (!IsDBAvailable())
            {
                //Database not found/set up
                var set = new Settings(log);
                set.ShowDialog();
                return;
            }

            if (DBCountRows("Accounts") != 0)
            {
                return;
            }
            if (MessageBox.Show(
                    @"DB is not initialized. Initialize and scan now?",
                    @"Database is empty",
                    MessageBoxButtons.YesNo) != DialogResult.Yes)
            {
                return;
            }
            //Database is empty
            RescanDB(Properties.Settings.Default.DBAggressiveScan);
        }
Ejemplo n.º 5
0
        //TODO: select between FOS and NoSQL
        public static void InitiateDB(decimal dbType, string path1, string path2,LogDispatcher.LogDispatcher log)
        {
            _log = log;
            if (path1 == "" || path2 == "") return;

            if (AccDB != null)
            {
                AccDB.Scan.ProgressChanged -= _accDB_ProgressChanged;
                AccDB.StateChanged -= _accDB_StateChanged;
                AccDB.CloseDB();
            }

            AccDB = new NoSQLDB(path1, path2,log);
            AccDB.Scan.ProgressChanged += _accDB_ProgressChanged;
            AccDB.StateChanged += _accDB_StateChanged;
            AccDB.Retriever.GetFinish += AccDB_OnGetFinish;
            AccDB.Queue.Committed += Queue_Committed;
            AccDB.Queue.SetThreshold((int)Properties.Settings.Default.TuneQThreshold);
            AccDB.Queue.SetTimeout((int)Properties.Settings.Default.TuneQTimer);
            AccDB.Scan.AccountScanned += Scan_AccountScanned;
            _path1 = path1;

            if (!IsDBAvailable())
            {
                //Database not found/set up
                var set = new Settings(log);
                set.ShowDialog();
                return;
            }

            if (DBCountRows("Accounts") != 0) return;
            if (MessageBox.Show(
                @"DB is not initialized. Initialize and scan now?",
                @"Database is empty",
                MessageBoxButtons.YesNo) != DialogResult.Yes) return;
            //Database is empty
            RescanDB(Properties.Settings.Default.DBAggressiveScan);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Initiates the Universe DB. FLPath is the path to the Freelancer directory, not DATA\EXE etc.
        /// </summary>
        /// <param name="flPath"></param>
        /// <param name="log"></param>
        /// <param name="forceScan"></param>
        public static bool Parse(string flPath, LogDispatcher.LogDispatcher log, bool forceScan = false)
        {
            IsAttached = false;
            _log = log;
            Gis.Clear();
            if (flPath == "")
            {
                _log.NewMessage(LogType.Error, "Universe: Got empty FLPath!");
                if (DoneLoading != null)
                    DoneLoading(null, null);
                return false;
            }

            if (StartedLoading != null)
                StartedLoading(null, null);

            _log.NewMessage(LogType.Debug, "Universe: Parsing file {0} ...", flPath + @"\DataMaps.ini");
            if (!File.Exists(flPath + @"\DataMaps.ini"))
            {
                log.NewMessage(LogType.Error, "Universe: Can't find DataMaps.ini!");
                if (DoneLoading != null)
                    DoneLoading(null, null);
                return false;
            }
            var dMapIni = new DataFile(flPath + @"\DataMaps.ini");

            HpMap.Clear();
            foreach (var set in dMapIni.GetSettings("HPMap", "map"))
            {
                EquipTypes eqType;
                if (!Enum.TryParse(set[1], out eqType))
                {
                    log.NewMessage(LogType.Error, "Can't parse equipment type in DataMaps.ini: {0} {1}", set[0], set[1]);
                    continue;
                }
                HpMap.Add(set[0], eqType);
            }

            log.NewMessage(LogType.Debug, "Parsing file {0} ...", flPath + @"\EXE\Freelancer.ini");
            if (!File.Exists(flPath + @"\EXE\Freelancer.ini"))
            {
                log.NewMessage(LogType.Error, "Universe: Can't find Freelancer.ini!");
                if (DoneLoading != null)
                    DoneLoading(null, null);
                return false;
            }
            var flIni = new DataFile(flPath + @"\EXE\Freelancer.ini");
            _flDataPath = Path.GetFullPath(Path.Combine(flPath + @"\EXE", flIni.GetSetting("Freelancer", "data path")[0]));

            // Load the infocard map
            var ini = new DataFile(_flDataPath + @"\interface\infocardmap.ini");
            foreach (var set in ini.Sections.SelectMany(section => section.Settings))
            {
                uint map0, map1;
                if (!uint.TryParse(set[0], out map0) || !uint.TryParse(set[1], out map1))
                {
                    log.NewMessage(LogType.Error, "Can't parse infocard map: {0}", set.String());
                    continue;
                }

                //throw new Exception("Can't parse infocard map: " + set.String());
                InfocardMap[map0] = map1;
            }

            if (Properties.Settings.Default.FLDataUseCache & !forceScan)
            {
                if (File.Exists(flPath + @"/FLSAM_Data.xml"))
                {
                    _log.NewMessage(LogType.Info, "Universe: Loading game cache...");
                    Gis.ReadXml(flPath + @"/FLSAM_Data.xml");
                    IsAttached = true;
                    if (DoneLoading != null)
                        DoneLoading(null, null);

                    _log.NewMessage(LogType.Info, "Universe: Game cache loaded.");
                    return true;
                }
            }

            var bgw = new BackgroundWorker();
            bgw.DoWork += _bgw_DoWork;
            bgw.RunWorkerCompleted += _bgw_RunWorkerCompleted;
            bgw.RunWorkerAsync(new object[] { flIni,flPath});

            return true;
        }
Ejemplo n.º 7
0
 public static void ReloadDB(LogDispatcher.LogDispatcher log)
 {
     ReloadDB(Properties.Settings.Default.DBPath,Properties.Settings.Default.FLDBPath,log);
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Cleans DB queue, closes the connection and attempts to initiate new database @ specified location.
        /// </summary>
        /// <param name="path1"></param>
        /// <param name="path2"></param>
        /// <param name="log"></param>
        public static void ReloadDB(string path1,string path2,LogDispatcher.LogDispatcher log)
        {
            //var path = _accDB.AccPath;
            if (IsDBAvailable())
                AccDB.CloseDB();

            InitiateDB(0,path1,path2,log);
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Connects Hook's transport.
 /// </summary>
 /// <param name="addr"></param>
 /// <param name="port"></param>
 /// <param name="password"></param>
 /// <param name="log"></param>
 public static void InitiateHook(string addr, int port, string password,LogDispatcher.LogDispatcher log)
 {
     HookTransport = new Transport(log);
     HookTransport.OpenSocket(addr, port, password);
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Initiates the Universe DB. FLPath is the path to the Freelancer directory, not DATA\EXE etc.
        /// </summary>
        /// <param name="flPath"></param>
        /// <param name="log"></param>
        /// <param name="forceScan"></param>
        public static bool Parse(string flPath, LogDispatcher.LogDispatcher log, bool forceScan = false)
        {
            IsAttached = false;
            _log       = log;
            Gis.Clear();
            if (flPath == "")
            {
                _log.NewMessage(LogType.Error, "Universe: Got empty FLPath!");
                if (DoneLoading != null)
                {
                    DoneLoading(null, null);
                }
                return(false);
            }

            if (StartedLoading != null)
            {
                StartedLoading(null, null);
            }



            _log.NewMessage(LogType.Debug, "Universe: Parsing file {0} ...", flPath + @"\DataMaps.ini");
            if (!File.Exists(flPath + @"\DataMaps.ini"))
            {
                log.NewMessage(LogType.Error, "Universe: Can't find DataMaps.ini!");
                if (DoneLoading != null)
                {
                    DoneLoading(null, null);
                }
                return(false);
            }
            var dMapIni = new DataFile(flPath + @"\DataMaps.ini");

            HpMap.Clear();
            foreach (var set in dMapIni.GetSettings("HPMap", "map"))
            {
                EquipTypes eqType;
                if (!Enum.TryParse(set[1], out eqType))
                {
                    log.NewMessage(LogType.Error, "Can't parse equipment type in DataMaps.ini: {0} {1}", set[0], set[1]);
                    continue;
                }
                HpMap.Add(set[0], eqType);
            }


            log.NewMessage(LogType.Debug, "Parsing file {0} ...", flPath + @"\EXE\Freelancer.ini");
            if (!File.Exists(flPath + @"\EXE\Freelancer.ini"))
            {
                log.NewMessage(LogType.Error, "Universe: Can't find Freelancer.ini!");
                if (DoneLoading != null)
                {
                    DoneLoading(null, null);
                }
                return(false);
            }
            var flIni = new DataFile(flPath + @"\EXE\Freelancer.ini");

            _flDataPath = Path.GetFullPath(Path.Combine(flPath + @"\EXE", flIni.GetSetting("Freelancer", "data path")[0]));

            // Load the infocard map
            var ini = new DataFile(_flDataPath + @"\interface\infocardmap.ini");

            foreach (var set in ini.Sections.SelectMany(section => section.Settings))
            {
                uint map0, map1;
                if (!uint.TryParse(set[0], out map0) || !uint.TryParse(set[1], out map1))
                {
                    log.NewMessage(LogType.Error, "Can't parse infocard map: {0}", set.String());
                    continue;
                }

                //throw new Exception("Can't parse infocard map: " + set.String());
                InfocardMap[map0] = map1;
            }


            if (Properties.Settings.Default.FLDataUseCache & !forceScan)
            {
                if (File.Exists(flPath + @"/FLSAM_Data.xml"))
                {
                    _log.NewMessage(LogType.Info, "Universe: Loading game cache...");
                    Gis.ReadXml(flPath + @"/FLSAM_Data.xml");
                    IsAttached = true;
                    if (DoneLoading != null)
                    {
                        DoneLoading(null, null);
                    }

                    _log.NewMessage(LogType.Info, "Universe: Game cache loaded.");
                    return(true);
                }
            }


            var bgw = new BackgroundWorker();

            bgw.DoWork             += _bgw_DoWork;
            bgw.RunWorkerCompleted += _bgw_RunWorkerCompleted;
            bgw.RunWorkerAsync(new object[] { flIni, flPath });


            return(true);
        }
Ejemplo n.º 11
0
 public Transport(LogDispatcher.LogDispatcher log)
 {
     _log = log;
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Connects Hook's transport.
 /// </summary>
 /// <param name="addr"></param>
 /// <param name="port"></param>
 /// <param name="password"></param>
 /// <param name="log"></param>
 public static void InitiateHook(string addr, int port, string password, LogDispatcher.LogDispatcher log)
 {
     HookTransport = new Transport(log);
     HookTransport.OpenSocket(addr, port, password);
 }
Ejemplo n.º 13
0
 public static void ReloadDB(LogDispatcher.LogDispatcher log)
 {
     ReloadDB(Properties.Settings.Default.DBPath, Properties.Settings.Default.FLDBPath, log);
 }
Ejemplo n.º 14
0
        /// <summary>
        /// Initiate the legacy NoSQL Freelancer storage.
        /// </summary>
        /// <param name="dbPath">Path to the SQLite database file. DB will be created if file is nonexistent.</param>
        /// <param name="accPath">Path to accounts' directory.</param>
        /// <param name="log"></param>
        public NoSQLDB(string dbPath, string accPath, LogDispatcher.LogDispatcher log)
        {
            //One-shot event assignment; NoSQLDB-Retriever
            Logger.LogDisp = log;
            //Retriever = new MetaRetriever(this);
            AccPath = accPath;

            if (!File.Exists(dbPath))
            {
                SQLiteConnection.CreateFile(dbPath);

                _conn = new SQLiteConnection();
                var conString = new SQLiteConnectionStringBuilder
                {
                    DataSource = dbPath
                };
                _conn.ConnectionString = conString.ToString();
                    try
                    {
                        _conn.Open();
                    }
                    catch (Exception e)
                    {
                        Logger.LogDisp.NewMessage(LogType.Fatal, "NoSQLDB: Can't connect to new player DB. Reason: " + e.Message);
                        throw;
                    }

                    // Create data base structure
                    var createDataBase = _conn.CreateCommand();    // Useful method
                createDataBase.CommandText = CreateDBString.Replace("@Table", "Accounts");
                createDataBase.ExecuteNonQuery();

                createDataBase.CommandText = CreateDBString.Replace("@Table", "DelAccounts");
                createDataBase.ExecuteNonQuery();

                    createDataBase.CommandText = @"CREATE TABLE LoginIP(
             AccID TEXT NOT NULL,
             IP TEXT NOT NULL,
             LogTime DATETIME NOT NULL,
             PRIMARY KEY (AccID, IP) ON CONFLICT REPLACE
            );";
                    createDataBase.ExecuteNonQuery();

                    createDataBase.CommandText = @"CREATE TABLE LoginID(
             AccID TEXT NOT NULL,
             ID1 TEXT NOT NULL,
             ID2 TEXT NOT NULL
            );";
                    createDataBase.ExecuteNonQuery();

                    createDataBase.CommandText = @"CREATE TABLE Bans(
             AccID TEXT NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
             Reason TEXT NOT NULL,
             DateStarting DATETIME NOT NULL,
             DateFinishing DATETIME NOT NULL
            );";
                    createDataBase.ExecuteNonQuery();

                    createDataBase.CommandText = "CREATE INDEX AccLookup ON LoginIP(AccID ASC);";
                    createDataBase.ExecuteNonQuery();

                    createDataBase.CommandText = "CREATE INDEX CharLookup ON Accounts(CharName ASC);";
                    createDataBase.ExecuteNonQuery();

                    _conn.Close();
                    Logger.LogDisp.NewMessage(LogType.Warning, "Created new player DB.");

            }

            // Base created fo sho
            _conn = new SQLiteConnection();
            var cs = new SQLiteConnectionStringBuilder {DataSource = dbPath};
            _conn.ConnectionString = cs.ToString();
            _conn.Open();
            Logger.LogDisp.NewMessage(LogType.Info, "NoSQLDB: Connected.");

            Queue = new DBQueue(_conn,  "NoSQLDB.Main");

            LoginDB = new LoginDatabase( _conn, Queue);

            Bans = new BanDB(this);
            //TODO: might need to use non-hardcoded paths
            BansID = new IniBan(accPath + @"\loginidbans.ini");
            BansIP = new IniBan(accPath + @"\ipbans.ini");

            Scan = new Scanner(_conn,this);

            Retriever = new DBCrawler(_conn);

            Scan.StateChanged += Scan_StateChanged;

            if (StateChanged != null)
                StateChanged(DBStates.Ready);
        }
Ejemplo n.º 15
0
 public Transport(LogDispatcher.LogDispatcher log)
 {
     _log = log;
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Returns a Player object associated with the charfile.
        /// </summary>
        /// <param name="path"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static Character GetAccount(string path,LogDispatcher.LogDispatcher log)
        {
            if (!File.Exists(path)) return null;
            var flFile = new DataFile(path);
            var player = new Character
            {
                Created = System.IO.File.GetCreationTime(path)
            };

            foreach (var set in flFile.GetFirstOf("Player").Settings)
                {
                    switch (set.Name)
                    {
                        case "money":
                            player.Money = uint.Parse(set[0]);
                            break;
                        case "name":
                            var name = "";
                            while (set[0].Length > 0)
                             {
                                 name += (char)Convert.ToUInt16(set[0].Substring(0, 4), 16);
                                 set[0] = set[0].Remove(0, 4);
                             }
                            player.Name = name;
                            break;
                        case "rank":
                            player.Rank = byte.Parse(set[0]);
                            break;
                        case "house":
                            player.Reputation.Add(
                                new ReputationItem(set[1],
                                    float.Parse(set[0], Nfi))
                                );
                            break;
                        case "description":
                            break;
                        case "tstamp":
                            long high = uint.Parse(set[0]);
                            long low = uint.Parse(set[1]);
                            player.LastOnline = DateTime.FromFileTimeUtc(high << 32 | low);
                            break;
                        case "rep_group":
                            player.ReputationIFF = set[0];
                            break;
                        case "system":
                            player.System = set[0];
                            break;
                        case "base":
                            player.Base = set[0];
                            break;
                        case "ship_archetype":
                            uint res;
                        if (uint.TryParse(set[0], out res))
                        {
                            player.ShipArch = res;
                            break;
                        }

                        if (Logger.LogDisp != null)
                            Logger.LogDisp.NewMessage(LogType.Warning, "Garbage shiparch: " + set[0] + " for " + flFile.Path);
                            return null;
                        case "base_hull_status":
                            player.Health = float.Parse(set[0], Nfi);
                            break;
                        case "equip":
                            player.EquipmentList.Add(
                                new Tuple<uint, string, float>(
                                    uint.Parse(set[0]),
                                    set[1],
                                    float.Parse(set[2], Nfi)
                                    )
                                    );
                            break;
                        case "cargo":
                            if (set[1].StartsWith("-"))
                                log.NewMessage(LogType.Error,"Player {0} bad setting: {1}",player.Name,set.String());
                            else
                                player.Cargo.Add(new WTuple<uint, uint>(uint.Parse(set[0]), uint.Parse(set[1])));
                            break;
                        case "last_base":
                            player.LastBase = set[0];
                            break;
                            //TODO: voice, com_body etc
                        case "pos":
                            player.Position = new[]
                            {
                                float.Parse(set[0],Nfi),
                                float.Parse(set[1],Nfi),
                                float.Parse(set[2],Nfi)
                            };
                            break;
                        case "rotate":
                            player.Rotation = new[]
                            {
                                float.Parse(set[0],Nfi),
                                float.Parse(set[1],Nfi),
                                float.Parse(set[2],Nfi)
                            };
                            break;
                        case "visit":
                            player.Visits.Add(uint.Parse(set[0]),byte.Parse(set[1]));
                            break;

                    }

            }

            foreach (var set in flFile.GetFirstOf("mPlayer").Settings)
            {
                switch (set.Name)
                {
                    case "sys_visited":
                        player.VisitedSystems.Add(uint.Parse(set[0]));
                        break;
                    case "base_visited":
                        player.VisitedBases.Add(uint.Parse(set[0]));
                        break;
                    case "total_time_played":
                        player.OnlineTime = Convert.ToUInt32(float.Parse(set[0], Nfi));
                        break;
                }
            }

            player.AccountID = path.Substring(path.Length - 26, 11);
            player.CharID = path.Substring(path.Length - 14, 11);
            player.CharPath = path.Substring(path.Length - 26, 23);

            return player;
        }