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)); }
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); } }
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)); }
public bool HasFactionRight(Func <RoleType, bool> test) { return(AccountRolesByAccountID.Where(x => !x.RoleType.IsClanOnly).Select(x => x.RoleType).Any(test)); }