Esempio n. 1
0
        public double GetQuota(Func <Account, double> producedSelector,
                               Func <Account, double> usedSelector,
                               Func <RoleType, double?> quotaSelector,
                               Func <Faction, double> factionResources)
        {
            var total = producedSelector(this) - usedSelector(this);

            if (total < 0)
            {
                total = 0;
            }

            if (Faction != null)
            {
                var factionQratio = Math.Min(1, AccountRolesByAccountID.Where(x => !x.RoleType.IsClanOnly).Select(x => x.RoleType).Max(quotaSelector) ?? 0);
                var facRes        = factionResources(Faction);

                if (factionQratio >= 0)
                {
                    total += facRes * factionQratio;
                }
            }

            return(Math.Floor(total));
        }
Esempio n. 2
0
 public bool CanRecall(Account targetAccount, RoleType roleType)
 {
     if (targetAccount.AccountID != AccountID && targetAccount.FactionID == FactionID &&
         (!roleType.IsClanOnly || targetAccount.ClanID == ClanID))
     {
         return
             (AccountRolesByAccountID.Any(
                  x => x.RoleType.RoleTypeHierarchiesByMasterRoleTypeID.Any(y => y.CanRecall && y.SlaveRoleTypeID == roleType.RoleTypeID)));
     }
     else
     {
         return(false);
     }
 }
Esempio n. 3
0
        public double GetQuota(Func <Account, double> producedSelector,
                               Func <Account, double> usedSelector,
                               Func <RoleType, double?> quotaSelector,
                               Func <Faction, double> factionResources)
        {
            var total = producedSelector(this) - usedSelector(this);

            if (total < 0)
            {
                total = 0;
            }

            if (Faction != null)
            {
                var clanQratio    = AccountRolesByAccountID.Where(x => x.RoleType.IsClanOnly).Select(x => x.RoleType).Max(quotaSelector) ?? 0;
                var factionQratio = AccountRolesByAccountID.Where(x => !x.RoleType.IsClanOnly).Select(x => x.RoleType).Max(quotaSelector) ?? 0;

                var facRes = factionResources(Faction);

                if (factionQratio >= clanQratio)
                {
                    total += facRes * factionQratio;
                }
                else
                {
                    if (clanQratio > 0 && Clan != null)
                    {
                        var sumClanProd = Clan.Accounts.Sum(producedSelector);
                        var sumFacProd  = Faction.Accounts.Sum(producedSelector);
                        if (sumFacProd > 0)
                        {
                            var clanRes = facRes * sumClanProd / sumFacProd;
                            total += clanRes * clanQratio + (facRes - clanRes) * factionQratio;
                        }
                    }
                }
            }

            return(Math.Floor(total));
        }
Esempio n. 4
0
 public bool HasFactionRight(Func <RoleType, bool> test)
 {
     return(AccountRolesByAccountID.Where(x => !x.RoleType.IsClanOnly).Select(x => x.RoleType).Any(test));
 }