private static void WriteMonsterData() { var inPath = Path.Combine(path, "Monsters.csv"); var tempPath = Path.Combine(Path.GetTempPath(), "Monsters.csv"); //copy in case file is locked File.Copy(inPath, tempPath, true); var monSpawns = GetSpawnEntries(); var maps = GetMapList(); monSpawns = monSpawns.Where(m => maps.Any(m2 => m2.Code == m.Map)).ToList(); using (var tr = new StreamReader(tempPath) as TextReader) using (var csv = new CsvReader(tr, CultureInfo.CurrentCulture)) { var monsters = csv.GetRecords <CsvMonsterData>().ToList(); var mData = new List <MonsterClassData>(monsters.Count); foreach (var monster in monsters) { if (monster.Id >= 4000 && monSpawns.All(m => m.Class != monster.Code)) { continue; } var mc = new MonsterClassData() { Id = monster.Id, Name = monster.Name, SpriteName = monster.ClientSprite, Offset = monster.ClientOffset, ShadowSize = monster.ClientShadow, Size = monster.ClientSize }; mData.Add(mc); } var dbTable = new DatabaseMonsterClassData(); dbTable.MonsterClassData = mData; JsonSerializerOptions options = new JsonSerializerOptions(); options.SetupExtensions(); var json = JsonSerializer.Serialize(dbTable, options); var monsterDir = Path.Combine(outPath, "monsterclass.json"); File.WriteAllText(monsterDir, json); } File.Delete(tempPath); }
private ServerControllable PrefabMonster(MonsterClassData mData, ref MonsterSpawnParameters param) { var prefabName = mData.SpriteName.Replace(".prefab", ""); var split = prefabName.Split('/'); prefabName = split.Last(); //Debug.Log(prefabName); var obj = GameObject.Instantiate(Resources.Load <GameObject>(prefabName)); var control = obj.AddComponent <ServerControllable>(); control.CharacterType = CharacterType.NPC; control.SpriteMode = ClientSpriteType.Prefab; control.EntityObject = obj; control.ConfigureEntity(param.ServerId, param.Position, param.Facing); return(control); }