forked from SoDOff-Project/sodoff
include discounts in purchase prices
This commit is contained in:
parent
5b8c952419
commit
80481713e3
@ -754,8 +754,8 @@ public class ContentController : Controller {
|
||||
int itemId = request.Items[i];
|
||||
ItemData item = itemService.GetItem(itemId);
|
||||
UserGameCurrency currency = achievementService.GetUserCurrency(viking);
|
||||
int coinCost = (int)Math.Round(0.8 * item.Cost); // 20% discount for members
|
||||
int gemCost = (int)Math.Round(0.8 * item.CashCost);
|
||||
int coinCost = (int)Math.Round(item.FinalDiscoutModifier * item.Cost);
|
||||
int gemCost = (int)Math.Round(item.FinalDiscoutModifier * item.CashCost);
|
||||
if (currency.GameCurrency - coinCost < 0 && currency.CashCurrency - gemCost < 0) {
|
||||
success = false;
|
||||
break;
|
||||
@ -819,8 +819,8 @@ public class ContentController : Controller {
|
||||
for (int i = 0; i < itemIdArr.Length; i++) {
|
||||
ItemData item = itemService.GetItem(itemIdArr[i]);
|
||||
UserGameCurrency currency = achievementService.GetUserCurrency(viking);
|
||||
int coinCost = (int)Math.Round(0.8 * item.Cost); // 20% discount for members
|
||||
int gemCost = (int)Math.Round(0.8 * item.CashCost);
|
||||
int coinCost = (int)Math.Round(item.FinalDiscoutModifier * item.Cost);
|
||||
int gemCost = (int)Math.Round(item.FinalDiscoutModifier * item.CashCost);
|
||||
if (currency.GameCurrency - coinCost < 0 && currency.CashCurrency - gemCost < 0) {
|
||||
success = false;
|
||||
break;
|
||||
|
@ -97,4 +97,17 @@ public class ItemData
|
||||
|
||||
[XmlElement(ElementName = "p", IsNullable = true)]
|
||||
public int? Points;
|
||||
|
||||
[XmlIgnore]
|
||||
public float NormalDiscoutModifier;
|
||||
|
||||
[XmlIgnore]
|
||||
public float MemberDiscountModifier;
|
||||
|
||||
[XmlIgnore]
|
||||
public float FinalDiscoutModifier {
|
||||
get {
|
||||
return Math.Min(1f, (1f - NormalDiscoutModifier) * (1f - MemberDiscountModifier));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,8 +17,11 @@ public class StoreService {
|
||||
SalesAtStore = s.SalesAtStore,
|
||||
PopularItems = s.PopularItems
|
||||
};
|
||||
for (int i=0; i<s.ItemId.Length; ++i) {
|
||||
IEnumerable<ItemsInStoreDataSale>? memberSales = s.SalesAtStore?.Where(x => x.ForMembers == true);
|
||||
IEnumerable<ItemsInStoreDataSale>? normalSales = s.SalesAtStore?.Where(x => x.ForMembers == false || x.ForMembers == null);
|
||||
for (int i = 0; i < s.ItemId.Length; ++i) {
|
||||
newStore.Items[i] = itemService.GetItem(s.ItemId[i]);
|
||||
UpdateItemSaleModifier(newStore.Items[i], memberSales, normalSales);
|
||||
}
|
||||
stores.Add(s.Id, newStore);
|
||||
}
|
||||
@ -27,4 +30,39 @@ public class StoreService {
|
||||
public ItemsInStoreData GetStore(int id) {
|
||||
return stores[id];
|
||||
}
|
||||
|
||||
private bool IsSaleOutdated(ItemsInStoreDataSale sale) {
|
||||
if (sale.EndDate == null)
|
||||
return false;
|
||||
return sale.EndDate < DateTime.Now;
|
||||
}
|
||||
|
||||
private void UpdateItemSaleModifier(ItemData item, IEnumerable<ItemsInStoreDataSale>? memberSales, IEnumerable<ItemsInStoreDataSale>? normalSales) {
|
||||
if (memberSales != null) {
|
||||
foreach (var memberSale in memberSales) {
|
||||
if (IsSaleOutdated(memberSale)) continue;
|
||||
if (item.Category != null && memberSale.CategoryIDs != null && item.Category.Any(x => memberSale.CategoryIDs.Contains(x.CategoryId))) {
|
||||
item.MemberDiscountModifier = memberSale.Modifier;
|
||||
break;
|
||||
}
|
||||
if (memberSale.ItemIDs != null && memberSale.ItemIDs.Contains(item.ItemID)) {
|
||||
item.MemberDiscountModifier = memberSale.Modifier;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (normalSales != null) {
|
||||
foreach (var normalSale in normalSales) {
|
||||
if (IsSaleOutdated(normalSale)) continue;
|
||||
if (item.Category != null && normalSale.CategoryIDs != null && item.Category.Any(x => normalSale.CategoryIDs.Contains(x.CategoryId))) {
|
||||
item.NormalDiscoutModifier = normalSale.Modifier;
|
||||
break;
|
||||
}
|
||||
if (normalSale.ItemIDs != null && normalSale.ItemIDs.Contains(item.ItemID)) {
|
||||
item.NormalDiscoutModifier = normalSale.Modifier;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user