Esempio n. 1
0
        private static void LoadSkillInformation(ref Character c)
        {
            var type_ids = new List<int>();
            c.skills.ForEach(x => type_ids.Add(x.type_id));

            var types = invTypeRepo.FindMany(type_ids);

            var group_ids = new List<int>();
            types.ForEach(x =>
            {
                if (x.groupID != null)
                {
                    group_ids.Add((int)x.groupID);
                }
            });

            var dgmTypeAttributeRepo = new dgmTypeAttributeRepository();
            var primaryAttributes = dgmTypeAttributeRepo.FindMany(180, type_ids);
            var secondaryAttributes = dgmTypeAttributeRepo.FindMany(181, type_ids);
            var ranks = dgmTypeAttributeRepo.FindMany(275, type_ids);
            var groups = invGroupRepo.FindMany(group_ids);

            var all_skills = new List<Skill>();
            all_skills.AddRange(c.skills);
            all_skills.AddRange(c.queue);

            foreach (var x in all_skills)
            {
                var matching_skill = types.FirstOrDefault(y => y.typeID == x.type_id);
                var matching_primary_attribute = primaryAttributes.FirstOrDefault(y => y.typeID == x.type_id);
                var matching_secondary_attribute = secondaryAttributes.FirstOrDefault(y => y.typeID == x.type_id);
                var matching_rank = ranks.FirstOrDefault(y => y.typeID == x.type_id);

                x.name = matching_skill != null ? matching_skill.typeName : "Unknown";

                if (matching_primary_attribute != null && matching_primary_attribute.valueInt != null)
                {
                    int attr = matching_primary_attribute.valueInt != null ? (int)matching_primary_attribute.valueInt : -1;

                    if (attributeDict.ContainsKey(attr))
                    {
                        x.primary_attribute = attributeDict[(int)matching_primary_attribute.valueInt];
                    }
                }
                if (matching_secondary_attribute != null)
                {
                    int attr = matching_primary_attribute.valueInt != null ? (int)matching_primary_attribute.valueInt : -1;

                    if (attributeDict.ContainsKey(attr))
                    {
                        x.secondary_attribute = attributeDict[(int)matching_secondary_attribute.valueInt];
                    }
                }
                x.rank = matching_rank != null ? (int)matching_rank.valueFloat : 1;

                if (x is TrainedSkill && matching_skill.groupID != null)
                {
                    var group = groups.FirstOrDefault(y => (y.groupID == (int)matching_skill.groupID));
                    if (group != null)
                    {
                        var ts = x as TrainedSkill;
                        ts.category = group.groupName;
                    }
                }
            }

            foreach (var x in c.queue)
            {
                var matching_skill = c.skills.FirstOrDefault(y => y.type_id == x.type_id);
                if (matching_skill != null)
                {
                    x.trained_level = matching_skill.current_level;

                    if (matching_skill.queued_level < x.queued_level)
                    {
                        matching_skill.queued_level = x.queued_level;
                    }
                }
            }
        }
Esempio n. 2
0
        public async Task<Character> Post([FromBody] CharacterCredentials credentials)
        {
            HttpClient httpClient = new HttpClient() { MaxResponseContentBufferSize = 1000000 };

            string param = "?characterID=" + credentials.characterID + "&keyID=" + credentials.keyID + "&vCode=" + credentials.vCode;

            Uri character_info_url = new Uri(base_url + "/eve/CharacterInfo.xml.aspx" + param);
            Uri character_sheet_url = new Uri(base_url + "/char/CharacterSheet.xml.aspx" + param);
            Uri character_queue_url = new Uri(base_url + "/char/SkillQueue.xml.aspx" + param);

            Task<HttpResponseMessage>[] requests = new Task<HttpResponseMessage>[]{
                httpClient.GetAsync(character_info_url),
                httpClient.GetAsync(character_sheet_url),
                httpClient.GetAsync(character_queue_url),
            };
            HttpResponseMessage[] responses = await Task.WhenAll(requests);

            if (!responses.All(x => x.IsSuccessStatusCode))
            {
                return null;
            }
            Character c = new Character();

            using (Stream character_info_data = await responses[0].Content.ReadAsStreamAsync())
            {
                LoadCharacterInfo(ref c, character_info_data);
            }
            using (Stream character_sheet_data = await responses[1].Content.ReadAsStreamAsync())
            {
                LoadCharacterSheet(ref c, character_sheet_data);
            }
            using (Stream character_queue_data = await responses[2].Content.ReadAsStreamAsync())
            {
                LoadSkillQueue(ref c, character_queue_data);
            }
            LoadSkillInformation(ref c);

            var skillGroupsDict = new Dictionary<string, TrainedSkillGroup>();

            DateTime currentDateTime;
            DateTime.TryParse(c.updated, out currentDateTime);

            foreach (var skill in c.queue)
            {
                DateTime? startTime = null;
                DateTime? endTime = null;

                if (!string.IsNullOrEmpty(skill.start_time))
                {
                    startTime = DateTime.Parse(skill.start_time);
                }
                if (!string.IsNullOrEmpty(skill.end_time))
                {
                    endTime = DateTime.Parse(skill.end_time);
                }
                if (startTime != null && endTime != null)
                {
                    if (startTime < DateTime.UtcNow)
                    {
                        if (skill.position == 0)
                        {
               
                            TimeSpan trainTime = (TimeSpan)(endTime - startTime);
                            TimeSpan elapsedTime = (TimeSpan)(currentDateTime - startTime);
                            double percent = (elapsedTime.TotalSeconds / trainTime.TotalSeconds);
                            int curSP = skill.start_skillpoints + ((int)(percent * (skill.end_skillpoints - skill.start_skillpoints)));

                            var matchingSkill = c.skills.FirstOrDefault(x => x.type_id == skill.type_id);
                            if (matchingSkill != null && matchingSkill.skillpoints < curSP)
                            {
                                matchingSkill.skillpoints = curSP;
                            }
                        }
                        skill.time = ((DateTime)endTime - DateTime.UtcNow).Describe();
                    }
                    else
                    {
                        skill.time = ((DateTime)endTime - (DateTime)startTime).Describe();
                    }
                }
            }

            foreach (var skill in c.skills)
            {
                int[] level_skillpoints = new int[]
                    {
                        0, 250*skill.rank,
                        1415*skill.rank,
                        8000*skill.rank,
                        45255*skill.rank,
                        256000*skill.rank
                    };
                if (skill.current_level < 5)
                {
                    int prevLevelPoints = level_skillpoints[skill.current_level];
                    int nextLevelPoints = level_skillpoints[skill.current_level + 1];
                    int curLevelPoints = nextLevelPoints - prevLevelPoints;
                    int curLevelProgress = skill.skillpoints - prevLevelPoints;
                    skill.progress = Math.Max(0, curLevelProgress / (1.0 * curLevelPoints));

                    var matching_queued_skill =  c.queue.FirstOrDefault(x => x.type_id == skill.type_id && x.queued_level == skill.current_level + 1);
                    if (matching_queued_skill != null)
                    {
                        matching_queued_skill.progress = skill.progress;
                    }
                }
                else
                {
                    skill.progress = 0.0;
                }

                if (!skillGroupsDict.ContainsKey(skill.category))
                {
                    skillGroupsDict[skill.category] = new TrainedSkillGroup();
                    skillGroupsDict[skill.category].groupName = skill.category;
                }
                skillGroupsDict[skill.category].Add(skill);
            }
            c.skill_groups = new List<TrainedSkillGroup>(skillGroupsDict.Values.ToList().OrderBy(x => x.groupName).ToList());
            foreach (var group in c.skill_groups)
            {
                group.Sort((a, b) => a.name.CompareTo(b.name));
            }

            c.queue.Sort((a, b) => a.position.CompareTo(b.position));
            c.paused = false;
            c.empty = false;
            QueuedSkill first = c.queue.FirstOrDefault();
            QueuedSkill last = c.queue.LastOrDefault();
            TimeSpan span = TimeSpan.FromSeconds(0);

            if (first != null && last != null)
            {
                var firstStartTime = DateTime.Parse(first.start_time);
                var firstEndTime = DateTime.Parse(first.end_time);
                var lastStartTime = DateTime.Parse(last.start_time);
                var lastEndTime = DateTime.Parse(last.end_time);

                if (firstStartTime != null && lastEndTime != null)
                {
                    if (firstStartTime < DateTime.UtcNow)
                    {
                        span = (lastEndTime - DateTime.UtcNow);
                    }
                    else
                    {
                        span = (lastEndTime - firstStartTime);
                    }
                    if (span.Ticks < 0)
                    {
                        c.queue_length_description = "Queue finished";
                        c.queue_length_short_description = "Finished";
                        c.queue_length_hours = 0;
                    }
                    else
                    {
                        c.queue_length_description ="Queue completes in " + span.Describe(); 
                        c.queue_length_short_description = span.Describe();
                        c.queue_length_hours = span.TotalHours;
                    }
                }
                else
                {
                    c.queue_length_description = "Queue is paused";
                    c.queue_length_short_description = "Paused";
                    c.queue_length_hours = 0;
                    c.paused = true;
                }
            }
            else
            {
                c.queue_length_description = "Queue is empty";
                c.queue_length_short_description = "Empty";
                c.queue_length_hours = 0;
                c.empty = true;
            }
            return c;
        }
Esempio n. 3
0
        private static void LoadCharacterSheet(ref Character c, Stream readStream)
        {
            var xmldoc = XDocument.Load(readStream);
            var char_sheet_response = xmldoc.Element("eveapi");
            var result = char_sheet_response.Element("result");
            var skills_rowset = result.RowSet("skills");
            c.date_of_birth = result.ElementString("DoB") + "Z";
            c.gender = result.ElementString("gender");
            c.wealth = result.ElementDouble("balance");
            c.clone_skillpoints = result.ElementInt("cloneSkillPoints");
            var attributes = result.Element("attributes");
            c.intelligence = attributes.ElementInt("intelligence");
            c.memory = attributes.ElementInt("memory");
            c.charisma = attributes.ElementInt("charisma");
            c.perception = attributes.ElementInt("perception");
            c.willpower = attributes.ElementInt("willpower");

            var attributeEnhancers = result.Element("attributeEnhancers");
            if (attributeEnhancers != null)
            {

                Func<string, int> bonusValue = (string bonusName) =>
                {
                    var bonus = attributeEnhancers.Element(bonusName + "Bonus");
                    if (bonus != null)
                    {
                        int augmentValue = bonus.ElementInt("augmentatorValue");
                        if (augmentValue != -1)
                        {
                            return augmentValue;
                        }
                    }
                    return 0;
                };

                c.intelligence += bonusValue("intelligence");
                c.perception += bonusValue("perception");
                c.charisma += bonusValue("charisma");
                c.memory += bonusValue("memory");
                c.willpower += bonusValue("willpower");
            }

            c.skills = new List<TrainedSkill>();

            var skills_list = skills_rowset.Elements("row");

            foreach (var skill in skills_list)
            {
                var cur = new TrainedSkill();
                cur.type_id = skill.AttributeInt("typeID");
                cur.current_level = skill.AttributeInt("level");
                cur.skillpoints = skill.AttributeInt("skillpoints");
                c.skills.Add(cur);
            }
        }
Esempio n. 4
0
        private static void LoadSkillQueue(ref Character c, Stream readStream)
        {
            var xmldoc = XDocument.Load(readStream);
            var skill_queue_response = xmldoc.Element("eveapi");

            c.updated = skill_queue_response.ElementString("currentTime");

            var skill_queue_rowset = skill_queue_response.Element("result").RowSet("skillqueue");
            var skill_queue = skill_queue_rowset.Elements("row");

            c.queue = new List<QueuedSkill>();

            foreach (var skill in skill_queue)
            {
                QueuedSkill cur = new QueuedSkill();
                cur.type_id = skill.AttributeInt("typeID");
                cur.queued_level = skill.AttributeInt("level");
                cur.position = skill.AttributeInt("queuePosition");
                cur.start_time = skill.AttributeString("startTime") + "Z";
                cur.end_time = skill.AttributeString("endTime") + "Z";
                cur.start_skillpoints = skill.AttributeInt("startSP");
                cur.end_skillpoints = skill.AttributeInt("endSP");

                c.queue.Add(cur);
            }
        }
Esempio n. 5
0
        private static void LoadCharacterInfo(ref Character c, Stream readStream)
        {
            var xmldoc = XDocument.Load(readStream);
            var char_info_response = xmldoc.Element("eveapi");
            var result = char_info_response.Element("result");
            c.id = result.ElementInt("characterID");
            c.name = result.ElementString("characterName");
            c.race = result.ElementString("race");
            c.skillpoints = result.ElementInt("skillPoints");
            c.active_ship = result.ElementString("shipTypeName");
            c.corporation = result.ElementString("corporation");
            c.joined = result.ElementString("corporationDate") + "Z";
            c.alliance = result.ElementString("alliance");
            c.location = result.ElementString("lastKnownLocation");
            c.security_status = result.ElementDouble("securityStatus");

        }