/// <summary> /// 根据角色id获取怪物的位置 /// </summary> static public List <Vector3> GetMonsterPositionsByActorId(uint actorId, Neptune.Data data = null) { if (data == null) { data = Neptune.DataManager.Instance.Data; } Dictionary <int, Neptune.BaseGenericNode> monsters = data.GetData <Neptune.MonsterBase>().Data; List <Vector3> retPositions = new List <Vector3>(); retPositions.Clear(); if (monsters != null) { foreach (var monsterBase in monsters.Values) { if (monsterBase is Neptune.Monster) { Neptune.Monster monster = (Neptune.Monster)monsterBase; if (monster != null && monster.ExcelId == actorId) { retPositions.Add(monster.Position); } } else if (monsterBase is Neptune.MonsterGroup) { Neptune.MonsterGroup monsterGroup = (Neptune.MonsterGroup)monsterBase; if (monsterGroup != null) { List <string> strs = DBManager.Instance.QuerySqliteField <string>(GlobalConfig.DBFile, "data_monster", "id", monsterGroup.ExcelId.ToString(), "actor"); foreach (string str in strs) { uint ret = 0; uint.TryParse(str, out ret); if (ret == actorId) { retPositions.Add(monsterGroup.Position); break; } } } } } } return(retPositions); }
uint CalcTargetNum(uint instanceId, string targetStr) { uint targetNum = 0; Neptune.Data levelData = xc.Dungeon.LevelManager.Instance.LoadLevelFileTemporary(SceneHelp.GetFirstStageId(instanceId)); if (levelData == null) { return(targetNum); } if (targetStr == "kill_all") { Dictionary <int, Neptune.BaseGenericNode> monsters = levelData.GetData <Neptune.MonsterBase>().Data; foreach (var monsterBase in monsters.Values) { if (monsterBase is Neptune.Monster) { ++targetNum; } else if (monsterBase is Neptune.MonsterGroup) { Neptune.MonsterGroup monsterGroup = (Neptune.MonsterGroup)monsterBase; DBMonster dbMonster = DBManager.Instance.GetDB <DBMonster>(); DBMonster.MonsterInfo monsterInfo = dbMonster.GetMonsterInfo(monsterGroup.ExcelId); if (monsterInfo != null) { targetNum += monsterInfo.Num; } } } } else { var matchs = System.Text.RegularExpressions.Regex.Matches(targetStr, @"\{kill,(\S+)\}"); foreach (System.Text.RegularExpressions.Match match in matchs) { if (match.Success) { List <uint> ids = DBTextResource.ParseArrayUint(match.Groups[1].Value, ","); foreach (uint id in ids) { Dictionary <int, Neptune.BaseGenericNode> monsters = levelData.GetData <Neptune.MonsterBase>().Data; foreach (var monsterBase in monsters.Values) { if (monsterBase.Id == id) { if (monsterBase is Neptune.Monster) { ++targetNum; } else if (monsterBase is Neptune.MonsterGroup) { Neptune.MonsterGroup monsterGroup = (Neptune.MonsterGroup)monsterBase; DBMonster dbMonster = DBManager.Instance.GetDB <DBMonster>(); DBMonster.MonsterInfo monsterInfo = dbMonster.GetMonsterInfo(monsterGroup.ExcelId); if (monsterInfo != null) { targetNum += monsterInfo.Num; } } } } } } } } return(targetNum); }