Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
            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);
            }