예제 #1
0
    public static void ParseData(string content, string fileName)
    {
        metaData = new Dictionary <int, EmployeeQuestSkillData> ();
        CSVParser parser = new CSVParser();

        if (!parser.Parse(content))
        {
            ClientLog.Instance.LogError("EmployeeQuestSkillData" + ConfigLoader.Instance.csvext + "解析错误");
            return;
        }

        int recordCounter           = parser.GetRecordCounter();
        EmployeeQuestSkillData data = null;

        for (int i = 0; i < recordCounter; ++i)
        {
            data       = new EmployeeQuestSkillData();
            data.id_   = parser.GetInt(i, "SkillID");
            data.name_ = parser.GetString(i, "SkillName");

            data.SkillTypeArr[EmployeeSkillType.EKT_GroupDamage]     = parser.GetInt(i, "EKT_GroupDamage");
            data.SkillTypeArr[EmployeeSkillType.EKT_DeadlyDamage]    = parser.GetInt(i, "EKT_DeadlyDamage");
            data.SkillTypeArr[EmployeeSkillType.EKT_BattleTimeLimit] = parser.GetInt(i, "EKT_BattleTimeLimit");
            data.SkillTypeArr[EmployeeSkillType.EKT_Thump]           = parser.GetInt(i, "EKT_Thump");
            data.SkillTypeArr[EmployeeSkillType.EKT_SiegeDamage]     = parser.GetInt(i, "EKT_SiegeDamage");
            data.SkillTypeArr[EmployeeSkillType.EKT_SuperMagic]      = parser.GetInt(i, "EKT_SuperMagic");
            data.SkillTypeArr[EmployeeSkillType.EKT_Debuff]          = parser.GetInt(i, "EKT_Debuff");
            data.SkillTypeArr[EmployeeSkillType.EKT_PhysicalDefense] = parser.GetInt(i, "EKT_PhysicalDefense");


            if (metaData.ContainsKey(data.id_))
            {
                ClientLog.Instance.LogError("EmployeeQuestSkillData" + ConfigLoader.Instance.csvext + "ID重复");
                return;
            }
            metaData[data.id_] = data;
        }
        parser.Dispose();
        parser = null;
    }
예제 #2
0
    public static float CalcSuccessRate(int questId, List <int> employees)
    {
        EmployeeQuestData quest = EmployeeQuestData.GetData(questId);

        if (null == quest)
        {
            return(0.0F);
        }

        List <EmployeeContext> contexts = new List <EmployeeContext>();

        for (int i = 0; i < employees.Count; ++i)
        {
            Employee employee = GamePlayer.Instance.GetEmployeeById(employees[i]);
            if (null == employee)
            {
                //ACE_DEBUG((LM_ERROR,"EmployeeQuestSystem::CalcSuccessRate [[ player(%d) not haved employee(%d) at employee quest(%d)\n",playerId,questInst.usedEmployees_[i],questInst.questId_));
                continue;
            }

            for (int j = 0; j < employee.SkillInsts.Count; ++j)
            {
                if (employee.SkillInsts[j] == null)
                {
                    continue;
                }
                EmployeeContext c = new EmployeeContext();
                c.star_    = (int)employee.star_;
                c.color_   = (int)employee.quality_;
                c.skId_    = (int)employee.SkillInsts[j].skillID_;
                c.skLevel_ = (int)employee.SkillInsts[j].skillLevel_;
                contexts.Add(c);
            }
        }

        if (contexts.Count == 0)
        {
            //	ACE_DEBUG((LM_ERROR,"EmployeeQuestSystem::CalcSuccessRate [[ player(%d) empty employee at employee quest(%d)\n",playerId,questInst.questId_));
            return(0.0F);
        }

        float maxRate = 0.0F;

        for (int i = 0; i < quest.monsterList.Count; ++i)
        {
            EmployeeMonsterData monster = EmployeeMonsterData.GetData(quest.monsterList[i]);
            if (null == monster)
            {
                continue;
            }

            for (int k = 0; k < monster.skills.Count; ++k)
            {
                int   usedIndex = -1;
                float usedRate  = 0.0F;
                for (int j = 0; j < contexts.Count; ++j)
                {
                    int   successRate = EmployeeQuestSkillData.GetData(contexts[j].skId_, (EmployeeSkillType)monster.skills[k]);
                    float rate        = CalcEmployeeQuestSuccessRate(contexts[j].skLevel_, contexts[j].star_, contexts[j].color_, successRate, quest.monsterList.Count);
                    if (rate > usedRate)
                    {
                        usedRate  = rate;
                        usedIndex = j;
                    }
                }

                if (usedIndex != -1)
                {
                    contexts.RemoveAt(usedIndex);
                }
                maxRate += usedRate;
            }
        }

        return(maxRate + quest.successRate_);
    }