fixed temp evaluation of MAX and PROD for products

This commit is contained in:
Luca Montagna 2022-01-22 13:58:51 +01:00
parent bfa271881b
commit bd775f167e
3 changed files with 10 additions and 9 deletions

@ -174,8 +174,8 @@ export function SellProduct(product: Product, city: string, amt: string, price:
//Dynamically evaluated quantity. First test to make sure its valid //Dynamically evaluated quantity. First test to make sure its valid
let qty = amt.replace(/\s+/g, ""); let qty = amt.replace(/\s+/g, "");
qty = qty.replace(/[^-()\d/*+.MAXPROD]/g, ""); qty = qty.replace(/[^-()\d/*+.MAXPROD]/g, "");
let temp = qty.replace(/MAX/g, "1"); let temp = qty.replace(/MAX/g, product.maxsll.toString());
temp = temp.replace(/PROD/g, "1"); temp = temp.replace(/PROD/g, product.data[city][1].toString());
try { try {
temp = eval(temp); temp = eval(temp);
} catch (e) { } catch (e) {

@ -1188,8 +1188,7 @@ export class Industry implements IIndustry {
} }
} }
const maxSell = product.maxsll = 0.5 *
0.5 *
Math.pow(product.rat, 0.65) * Math.pow(product.rat, 0.65) *
marketFactor * marketFactor *
corporation.getSalesMultiplier() * corporation.getSalesMultiplier() *
@ -1200,7 +1199,7 @@ export class Industry implements IIndustry {
let sellAmt; let sellAmt;
if (product.sllman[city][0] && isString(product.sllman[city][1])) { if (product.sllman[city][0] && isString(product.sllman[city][1])) {
//Sell amount is dynamically evaluated //Sell amount is dynamically evaluated
let tmp = product.sllman[city][1].replace(/MAX/g, (maxSell + "").toUpperCase()); let tmp = product.sllman[city][1].replace(/MAX/g, (product.maxsll + "").toUpperCase());
tmp = tmp.replace(/PROD/g, product.data[city][1]); tmp = tmp.replace(/PROD/g, product.data[city][1]);
try { try {
tmp = eval(tmp); tmp = eval(tmp);
@ -1214,16 +1213,16 @@ export class Industry implements IIndustry {
city + city +
" office. Sell price is being set to MAX", " office. Sell price is being set to MAX",
); );
tmp = maxSell; tmp = product.maxsll;
} }
sellAmt = Math.min(maxSell, tmp); sellAmt = Math.min(product.maxsll, tmp);
} else if (product.sllman[city][0] && product.sllman[city][1] > 0) { } else if (product.sllman[city][0] && product.sllman[city][1] > 0) {
//Sell amount is manually limited //Sell amount is manually limited
sellAmt = Math.min(maxSell, product.sllman[city][1]); sellAmt = Math.min(product.maxsll, product.sllman[city][1]);
} else if (product.sllman[city][0] === false) { } else if (product.sllman[city][0] === false) {
sellAmt = 0; sellAmt = 0;
} else { } else {
sellAmt = maxSell; sellAmt = product.maxsll;
} }
if (sellAmt < 0) { if (sellAmt < 0) {
sellAmt = 0; sellAmt = 0;

@ -96,6 +96,8 @@ export class Product {
marketTa2 = false; marketTa2 = false;
marketTa2Price: IMap<number> = createCityMap<number>(0); marketTa2Price: IMap<number> = createCityMap<number>(0);
// Determines the maximum amount of this product that can be sold in one market cycle
maxsll = 0
constructor(params: IConstructorParams = {}) { constructor(params: IConstructorParams = {}) {
this.name = params.name ? params.name : ""; this.name = params.name ? params.name : "";
this.dmd = params.demand ? params.demand : 0; this.dmd = params.demand ? params.demand : 0;