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];
|
int itemId = request.Items[i];
|
||||||
ItemData item = itemService.GetItem(itemId);
|
ItemData item = itemService.GetItem(itemId);
|
||||||
UserGameCurrency currency = achievementService.GetUserCurrency(viking);
|
UserGameCurrency currency = achievementService.GetUserCurrency(viking);
|
||||||
int coinCost = (int)Math.Round(0.8 * item.Cost); // 20% discount for members
|
int coinCost = (int)Math.Round(item.FinalDiscoutModifier * item.Cost);
|
||||||
int gemCost = (int)Math.Round(0.8 * item.CashCost);
|
int gemCost = (int)Math.Round(item.FinalDiscoutModifier * item.CashCost);
|
||||||
if (currency.GameCurrency - coinCost < 0 && currency.CashCurrency - gemCost < 0) {
|
if (currency.GameCurrency - coinCost < 0 && currency.CashCurrency - gemCost < 0) {
|
||||||
success = false;
|
success = false;
|
||||||
break;
|
break;
|
||||||
@ -819,8 +819,8 @@ public class ContentController : Controller {
|
|||||||
for (int i = 0; i < itemIdArr.Length; i++) {
|
for (int i = 0; i < itemIdArr.Length; i++) {
|
||||||
ItemData item = itemService.GetItem(itemIdArr[i]);
|
ItemData item = itemService.GetItem(itemIdArr[i]);
|
||||||
UserGameCurrency currency = achievementService.GetUserCurrency(viking);
|
UserGameCurrency currency = achievementService.GetUserCurrency(viking);
|
||||||
int coinCost = (int)Math.Round(0.8 * item.Cost); // 20% discount for members
|
int coinCost = (int)Math.Round(item.FinalDiscoutModifier * item.Cost);
|
||||||
int gemCost = (int)Math.Round(0.8 * item.CashCost);
|
int gemCost = (int)Math.Round(item.FinalDiscoutModifier * item.CashCost);
|
||||||
if (currency.GameCurrency - coinCost < 0 && currency.CashCurrency - gemCost < 0) {
|
if (currency.GameCurrency - coinCost < 0 && currency.CashCurrency - gemCost < 0) {
|
||||||
success = false;
|
success = false;
|
||||||
break;
|
break;
|
||||||
|
@ -97,4 +97,17 @@ public class ItemData
|
|||||||
|
|
||||||
[XmlElement(ElementName = "p", IsNullable = true)]
|
[XmlElement(ElementName = "p", IsNullable = true)]
|
||||||
public int? Points;
|
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,
|
SalesAtStore = s.SalesAtStore,
|
||||||
PopularItems = s.PopularItems
|
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]);
|
newStore.Items[i] = itemService.GetItem(s.ItemId[i]);
|
||||||
|
UpdateItemSaleModifier(newStore.Items[i], memberSales, normalSales);
|
||||||
}
|
}
|
||||||
stores.Add(s.Id, newStore);
|
stores.Add(s.Id, newStore);
|
||||||
}
|
}
|
||||||
@ -27,4 +30,39 @@ public class StoreService {
|
|||||||
public ItemsInStoreData GetStore(int id) {
|
public ItemsInStoreData GetStore(int id) {
|
||||||
return stores[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