Exemple #1
0
 public void AddType(int id, EveType type)
 {
     if (!EveTypes.Any(kv => kv.Key == id))
     {
         EveTypes.Add(id, type);
     }
 }
    /// <summary>
    /// 消除某事件的回调
    /// </summary>
    /// <param name="evtName"></param>
    /// <param name="callback"></param>
    public void DropEvent(EveType evtName, EventDel callback)
    {
        List <EventDel> evtList = null;

        if (m_listeners.TryGetValue(evtName, out evtList))
        {//如果找到了这个事件的链表
            evtList.Remove(callback);
        }
    }
Exemple #3
0
     static public EveTypeInfo GetEveTypeInfo(EveType type)
     {
         if (!allTypes.ContainsKey(type))
         {
             allTypes[type] = new EveTypeInfo {
                 BaseType = type
             }
         }
         ;
         return(allTypes[type]);
     }
 }
    /// <summary>
    /// 注册事件
    /// </summary>
    /// <param name="evtName">事件类型</param>
    /// <param name="callback">事件回调</param>
    public void RegisterEvent(EveType evtName, EventDel callback)
    {
        List <EventDel> evtList = null;

        //如果有这个事件类型,直接在这个类型链表上添加事件回调
        if (m_listeners.TryGetValue(evtName, out evtList))
        {
            m_listeners[evtName].Add(callback);
        }
        else
        {//如果没有这个事件类型,新建链表再添加事件回调
            evtList = new List <EventDel>();
            evtList.Add(callback);
            m_listeners.Add(evtName, evtList);
        }
    }
Exemple #5
0
        public async Task <EveType> GetEveType(int typeId)
        {
            var cacheType = cache.GetType(typeId);

            if (cacheType != null)
            {
                return(cacheType);
            }

            string requestUri            = $"/v3/universe/types/{typeId}/";
            HttpResponseMessage response = await client.GetAsync(requestUri);

            response.EnsureSuccessStatusCode();

            using var responseStream = await response.Content.ReadAsStreamAsync();

            EveType type = await JsonSerializer.DeserializeAsync <EveType>(responseStream);

            cache.AddType(typeId, type);

            return(type);
        }
Exemple #6
0
 public bool IsCarrier(EveType type)
 {
     return(type.GroupId == 547);
 }
Exemple #7
0
 public bool IsForceAuxiliary(EveType type)
 {
     return(type.GroupId == 1538);
 }
Exemple #8
0
 public bool IsDreadnought(EveType type)
 {
     return(type.GroupId == 485);
 }
Exemple #9
0
 public bool IsRorqual(EveType type)
 {
     return(type.GroupId == 883);
 }
Exemple #10
0
 public bool IsCapital(EveType type)
 {
     return(IsRorqual(type) || IsDreadnought(type) || IsForceAuxiliary(type) || IsCarrier(type));
 }
Exemple #11
0
        public AggregateData IncrementAggregate(AggregateData data, EveType type, float value, int damage, bool kills)
        {
            if (kills)
            {
                data.KillsTotal       += 1;
                data.ISKKilledTotal   += value;
                data.DamageDealtTotal += damage;

                if (IsStructure(type.TypeId))
                {
                    data.KillsStructure       += 1;
                    data.ISKKilledStructure   += value;
                    data.DamageDealtStructure += damage;

                    if (IsMediumStructure(type.TypeId))
                    {
                        data.MediumStructureKills += 1;
                    }
                    else if (IsLargeStructure(type.TypeId))
                    {
                        data.LargeStructureKills += 1;
                    }
                    else if (IsXLargeStructure(type.TypeId))
                    {
                        data.XLStructureKills += 1;
                    }
                }
                else if (IsCapital(type))
                {
                    data.KillsCapital       += 1;
                    data.ISKKilledCapital   += value;
                    data.DamageDealtCapital += damage;

                    if (IsDreadnought(type))
                    {
                        data.DreadKills += 1;
                    }
                    else if (IsCarrier(type))
                    {
                        data.CarrierKills += 1;
                    }
                    else if (IsForceAuxiliary(type))
                    {
                        data.FaxesKills += 1;
                    }
                    else if (IsRorqual(type))
                    {
                        data.RorqualKills += 1;
                    }
                }
                else if (IsPod(type.TypeId))
                {
                    data.KillsPod       += 1;
                    data.ISKKilledPod   += value;
                    data.DamageDealtPod += damage;
                }
                else
                {
                    data.KillsSubCap       += 1;
                    data.ISKKilledSubCap   += value;
                    data.DamageDealtSubCap += damage;
                }
            }
            else
            {
                data.LossesTotal      += 1;
                data.ISKLostTotal     += value;
                data.DamageTakenTotal += damage;

                if (IsStructure(type.TypeId))
                {
                    data.LossesStructure      += 1;
                    data.ISKLostStructure     += value;
                    data.DamageTakenStructure += damage;

                    if (IsMediumStructure(type.TypeId))
                    {
                        data.MediumStructureLosses += 1;
                    }
                    else if (IsLargeStructure(type.TypeId))
                    {
                        data.LargeStructureLosses += 1;
                    }
                    else if (IsXLargeStructure(type.TypeId))
                    {
                        data.XLStructureLosses += 1;
                    }
                }
                else if (IsCapital(type))
                {
                    data.LossesCapital      += 1;
                    data.ISKLostCapital     += value;
                    data.DamageTakenCapital += damage;

                    if (IsDreadnought(type))
                    {
                        data.DreadLosses += 1;
                    }
                    else if (IsCarrier(type))
                    {
                        data.CarrierLosses += 1;
                    }
                    else if (IsForceAuxiliary(type))
                    {
                        data.FaxesLosses += 1;
                    }
                    else if (IsRorqual(type))
                    {
                        data.RorqualLosses += 1;
                    }
                }
                else if (IsPod(type.TypeId))
                {
                    data.LossesPod      += 1;
                    data.ISKLostPod     += value;
                    data.DamageTakenPod += damage;
                }
                else
                {
                    data.LossesSubCap      += 1;
                    data.ISKLostSubCap     += value;
                    data.DamageTakenSubCap += damage;
                }
            }

            return(data);
        }
Exemple #12
0
        public async Task ProcessKillmailValue(Killmail killmail, float value)
        {
            // Check wormmhole kill
            if (IsWormholeKill(killmail))
            {
                EveType victimType = await eSIService.GetEveType(killmail.Victim.ShipTypeId);

                // Process Victim
                if (killmail.Victim.CorporationId != null)
                {
                    _logger.LogDebug("Loss for corp: {0}", killmail.Victim.CorporationId);

                    var corp = await GetOrCreateCorporation(killmail.Victim.CorporationId.Value);

                    DailyAggregateCorporation victimAggregate = await GetOrCreateDailyAggregateCorporation(corp, killmail.KillmailTime.Date);

                    MonthlyAggregateCorporation victimAggregateMonthly = await GetOrCreateMonthlyAggregateCorporation(corp, killmail.KillmailTime.Date);

                    IncrementAggregate(victimAggregate, victimType, value, killmail.Victim.DamageTaken, false);
                    IncrementAggregate(victimAggregateMonthly, victimType, value, killmail.Victim.DamageTaken, false);
                }

                if (killmail.Victim.AllianceId != null)
                {
                    var alliance = await GetOrCreateAlliance(killmail.Victim.AllianceId.Value);

                    DailyAggregateAlliance victimAggregate = await GetOrCreateDailyAggregateAlliance(alliance, killmail.KillmailTime.Date);

                    MonthlyAggregateAlliance victimAggregateMonthly = await GetOrCreateMonthlyAggregateAlliance(alliance, killmail.KillmailTime.Date);

                    IncrementAggregate(victimAggregate, victimType, value, killmail.Victim.DamageTaken, false);
                    IncrementAggregate(victimAggregateMonthly, victimType, value, killmail.Victim.DamageTaken, false);
                }


                // Process Attackers
                var attackerCorporations = killmail.Attackers.Where(a => a.CorporationId != null && a.CorporationId != killmail.Victim.CorporationId).Select(a => a.CorporationId.Value).Distinct();
                foreach (var corporationId in attackerCorporations)
                {
                    var corp = await GetOrCreateCorporation(corporationId);

                    _logger.LogDebug("Kill for corp: {0}", killmail.Victim.CorporationId);
                    DailyAggregateCorporation attackerAggregate = await GetOrCreateDailyAggregateCorporation(corp, killmail.KillmailTime.Date);

                    MonthlyAggregateCorporation monthlyAggregateCorporation = await GetOrCreateMonthlyAggregateCorporation(corp, killmail.KillmailTime.Date);

                    IncrementAggregate(attackerAggregate, victimType, value, killmail.Attackers.Where(a => a.CorporationId == corp.Id).Sum(a => a.DamageDone), true);
                    IncrementAggregate(monthlyAggregateCorporation, victimType, value, killmail.Attackers.Where(a => a.CorporationId == corp.Id).Sum(a => a.DamageDone), true);
                }


                var attackerAlliances = killmail.Attackers.Where(a => a.AllianceId != null && a.AllianceId != killmail.Victim.AllianceId).Select(a => a.AllianceId.Value).Distinct();
                foreach (var allianceId in attackerAlliances)
                {
                    var alliance = await GetOrCreateAlliance(allianceId);

                    DailyAggregateAlliance attackerAggregate = await GetOrCreateDailyAggregateAlliance(alliance, killmail.KillmailTime.Date);

                    MonthlyAggregateAlliance monthlyAggregateAlliance = await GetOrCreateMonthlyAggregateAlliance(alliance, killmail.KillmailTime.Date);

                    IncrementAggregate(attackerAggregate, victimType, value, killmail.Attackers.Where(a => a.AllianceId == alliance.Id).Sum(a => a.DamageDone), true);
                    IncrementAggregate(monthlyAggregateAlliance, victimType, value, killmail.Attackers.Where(a => a.AllianceId == alliance.Id).Sum(a => a.DamageDone), true);
                }
                await context.SaveChangesAsync();
            }
        }
 public EventArgs(EveType t)
 {
     type = t;
 }
 /// <summary>
 /// 重载,参数为接收事件类型
 /// </summary>
 /// <param name="evtType"></param>
 public void TriggerEvent(EveType evtType)
 {
     TriggerEvent(new EventArgs(evtType));
 }
Exemple #15
0
 bool IEveRepository.TryGetEveTypeById(EveTypeId id, out EveType value)
 {
     throw new NotImplementedException();
 }
Exemple #16
0
 public static EveBlueprint NewBp(
     int id,
     EveType et,
     int quantity,
     IEnumerable <(EveType Type, int Quantity)> materials)