private static void LoadLoadout(string path, ILogController log) { var ini = new FLDataFile(path, true); foreach (FLDataFile.Section sec in ini.Sections) { string sectionName = sec.SectionName.ToLowerInvariant(); if (sectionName == "loadout") { var loadout = new Loadout(); uint hpid = 34; foreach (FLDataFile.Setting set in sec.Settings) { if (set.SettingName == "nickname") { loadout.Nickname = set.Str(0); loadout.LoadoutID = FLUtility.CreateID(loadout.Nickname); } else if (set.SettingName == "equip") { var item = new ShipItem { arch = ArchetypeDB.Find(FLUtility.CreateID(set.Str(0))) }; if (item.arch == null) { continue; // TODO: log } item.hpname = ""; if (set.NumValues() > 1) { item.hpname = set.Str(1); } item.health = 1.0f; item.mission = false; item.mounted = true; item.count = 1; item.hpid = hpid++; loadout.Items.Add(item); } else if (set.SettingName == "cargo") { var item = new ShipItem { arch = ArchetypeDB.Find(FLUtility.CreateID(set.Str(0))) }; if (item.arch == null) { continue; // TODO: log } item.hpname = ""; item.health = 1.0f; item.mission = false; item.mounted = false; item.count = set.UInt(1); item.hpid = hpid++; loadout.Items.Add(item); } } Loadouts[loadout.LoadoutID] = loadout; } } }
public override void HandleTimerEvent(double deltaSeconds) { if (runner.system == UniverseDB.FindSystem("li01")) { //TODO: AI debug here for (int i = 0; i < 1; i++) { var npc = new Ship.Ship(runner); npc.AI = new AI.DebugAI(npc); npc.Arch = ArchetypeDB.Find(FLUtility.CreateID("dsy_csv")); if (npc.Arch == null) { return; } npc.Position = new Vector(-30000 + i * 300, i * 100, -25000); //npc.orientation = ; npc.Rank = 20; npc.System = runner.system; npc.Health = 1.0f; npc.faction = UniverseDB.FindFaction("fc_wild"); Loadout loadout = UniverseDB.FindLoadout("fc_j_ge_csv_loadout01"); if (loadout != null) { uint hpid = 34; foreach (ShipItem item in loadout.Items) { var new_item = new ShipItem(); new_item.arch = item.arch; new_item.count = item.count; new_item.health = 1.0f; new_item.hpid = hpid++; new_item.hpname = item.hpname; new_item.mounted = item.mounted; npc.Items.Add(new_item.hpid, new_item); } } npc.InitialiseEquipmentSimulation(); runner.CreateSimObject(npc); } } // int total = 0; // if (runner.players.Count > 0) // { // if (delta_seconds > 1.5) // runner.log.AddLog(LogType.FL_MSG, "bad delta " + delta_seconds); // // wow, this'll really suck if there are lots of NPCs // foreach (Zone z in runner.system.zones) // { // if (z.shape != null && z.density > 0) // { // while (z.interference < z.density) // borrow this // { // Ship npc = new Ship(runner); // npc.position = z.shape.position; // npc.orientation = z.shape.orientation; // npc.rank = 20; // npc.arch = ArchetypeDB.Find(FLUtility.CreateID("dsy_csv")); // npc.system = runner.system; // npc.health = 1.0f; // runner.CreateSimObject(npc); // z.interference++; // total++; // } // } // } // int working_npcs = 0; // foreach (SimObject o in runner.objects.Values) // { // if (o.health > 0) // { // working_npcs++; // foreach (Player player in runner.players.Values) // { // if (player.ship != o) // { // Vector position = player.ship.position; // position.x += rand.Next(100); // position.z += rand.Next(100); // o.SetUpdateObject(position, player.ship.orientation, 1.0f, 0); // } // } // } // } // runner.log.AddLog(LogType.GENERAL, "system={0} npcs={1} objects={2} running={3}", // runner.system.nickname, total, runner.objects.Count, working_npcs)); // } // ExpireAfter(1); }