add internal flag of if a roll is complex to add warning message to nominal
This commit is contained in:
		
							parent
							
								
									6162339942
								
							
						
					
					
						commit
						5b7ceb9f88
					
				| 
						 | 
				
			
			@ -11,6 +11,7 @@ export interface ReturnData {
 | 
			
		|||
  containsCrit: boolean;
 | 
			
		||||
  containsFail: boolean;
 | 
			
		||||
  initConfig: string;
 | 
			
		||||
  isComplex: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SolvedRoll is the complete solved and formatted roll, or the error said roll created
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,8 +83,18 @@ export const runCmd = (rollRequest: QueuedRoll): SolvedRoll => {
 | 
			
		|||
      line1 = ` rolled:\n\`${rawCmd}\``;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // List number of iterations on simulated nominals
 | 
			
		||||
    if (rollRequest.modifiers.simulatedNominal) line2 += `Iterations performed per roll: \`${rollRequest.modifiers.simulatedNominal}\`\n`;
 | 
			
		||||
 | 
			
		||||
    // Reduce counts to a single object
 | 
			
		||||
    returnMsg.counts = reduceCountDetails(tempCountDetails);
 | 
			
		||||
 | 
			
		||||
    // If a regular nominal and roll looks somewhat complex, alert user simulatedNominal exists
 | 
			
		||||
    if (rollRequest.modifiers.nominalRoll && tempReturnData.filter((data) => data.isComplex).length) {
 | 
			
		||||
      line2 +=
 | 
			
		||||
        "One or more of the rolls requested appear to be more complex than what the Nominal calculator is intended for.  For a better approximation of this roll's nominal value, please rerun this roll with the `-sn` flag.\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fill out all of the details and results now
 | 
			
		||||
    tempReturnData.forEach((e) => {
 | 
			
		||||
      loopCountCheck();
 | 
			
		||||
| 
						 | 
				
			
			@ -129,9 +139,6 @@ export const runCmd = (rollRequest: QueuedRoll): SolvedRoll => {
 | 
			
		|||
    returnMsg.line2 = line2;
 | 
			
		||||
    returnMsg.line3 = line3;
 | 
			
		||||
 | 
			
		||||
    // Reduce counts to a single object
 | 
			
		||||
    returnMsg.counts = reduceCountDetails(tempCountDetails);
 | 
			
		||||
 | 
			
		||||
    // Reduce rollDist maps into a single map
 | 
			
		||||
    returnMsg.rollDistributions = reduceRollDistMaps(tempRollDists);
 | 
			
		||||
  } catch (e) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,6 +113,7 @@ export const tokenizeCmd = (
 | 
			
		|||
        containsCrit: simulatedData.some((data) => data.containsCrit),
 | 
			
		||||
        containsFail: simulatedData.some((data) => data.containsFail),
 | 
			
		||||
        initConfig: simulatedData[0].initConfig,
 | 
			
		||||
        isComplex: simulatedData[0].isComplex,
 | 
			
		||||
      });
 | 
			
		||||
      loggingEnabled && log(LT.LOG, `SN on, returnData updated ${JSON.stringify(returnData)}`);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ export interface RollSet {
 | 
			
		|||
  exploding: boolean;
 | 
			
		||||
  critHit: boolean;
 | 
			
		||||
  critFail: boolean;
 | 
			
		||||
  isComplex: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CountDetails is the object holding the count data for creating the Count Embed
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,6 +60,13 @@ export const executeRoll = (rollStr: string, modifiers: RollModifiers): RollSet[
 | 
			
		|||
    exploding: false,
 | 
			
		||||
    critHit: false,
 | 
			
		||||
    critFail: false,
 | 
			
		||||
    isComplex: rollConf.drop.on ||
 | 
			
		||||
      rollConf.keep.on ||
 | 
			
		||||
      rollConf.dropHigh.on ||
 | 
			
		||||
      rollConf.keepLow.on ||
 | 
			
		||||
      rollConf.critScore.on ||
 | 
			
		||||
      rollConf.critFail.on ||
 | 
			
		||||
      rollConf.exploding.on,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  // Initial rolling, not handling reroll or exploding here
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@ export const generateFormattedRoll = (rollConf: string, modifiers: RollModifiers
 | 
			
		|||
  let tempDetails = '[';
 | 
			
		||||
  let tempCrit = false;
 | 
			
		||||
  let tempFail = false;
 | 
			
		||||
  let tempComplex = false;
 | 
			
		||||
 | 
			
		||||
  // Generate the roll, passing flags thru
 | 
			
		||||
  const tempRollSet = executeRoll(rollConf, modifiers);
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +47,9 @@ export const generateFormattedRoll = (rollConf: string, modifiers: RollModifiers
 | 
			
		|||
      if (e.critFail) {
 | 
			
		||||
        tempFail = true;
 | 
			
		||||
      }
 | 
			
		||||
      if (e.isComplex) {
 | 
			
		||||
        tempComplex = true;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    // If the roll was a crit hit or fail, or dropped/rerolled, add the formatting needed
 | 
			
		||||
    if (e.critHit) {
 | 
			
		||||
| 
						 | 
				
			
			@ -84,6 +88,7 @@ export const generateFormattedRoll = (rollConf: string, modifiers: RollModifiers
 | 
			
		|||
      details: tempDetails,
 | 
			
		||||
      containsCrit: tempCrit,
 | 
			
		||||
      containsFail: tempFail,
 | 
			
		||||
      isComplex: tempComplex,
 | 
			
		||||
    },
 | 
			
		||||
    countDetails: modifiers.count || modifiers.confirmCrit ? rollCounter(tempRollSet) : rollCounter([]),
 | 
			
		||||
    rollDistributions: modifiers.rollDist ? createRollDistMap(tempRollSet) : new Map<string, number[]>(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ export interface SolvedStep {
 | 
			
		|||
  details: string;
 | 
			
		||||
  containsCrit: boolean;
 | 
			
		||||
  containsFail: boolean;
 | 
			
		||||
  isComplex: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Joined type for mathConf as its a "WIP" variable and moved everything from string->number->SolvedStep
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,7 @@ export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep =>
 | 
			
		|||
    details: '',
 | 
			
		||||
    containsCrit: false,
 | 
			
		||||
    containsFail: false,
 | 
			
		||||
    isComplex: false,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // If entering with a single number, note it now
 | 
			
		||||
| 
						 | 
				
			
			@ -103,11 +104,12 @@ export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep =>
 | 
			
		|||
        // Init temp math to NaN to catch bad parsing
 | 
			
		||||
        let oper1 = NaN;
 | 
			
		||||
        let oper2 = NaN;
 | 
			
		||||
        const subStepSolve = {
 | 
			
		||||
        const subStepSolve: SolvedStep = {
 | 
			
		||||
          total: NaN,
 | 
			
		||||
          details: '',
 | 
			
		||||
          containsCrit: false,
 | 
			
		||||
          containsFail: false,
 | 
			
		||||
          isComplex: false,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // If operand1 is a SolvedStep, populate our subStepSolve with its details and crit/fail flags
 | 
			
		||||
| 
						 | 
				
			
			@ -116,6 +118,7 @@ export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep =>
 | 
			
		|||
          subStepSolve.details = `${operand1.details}\\${conf[i]}`;
 | 
			
		||||
          subStepSolve.containsCrit = operand1.containsCrit;
 | 
			
		||||
          subStepSolve.containsFail = operand1.containsFail;
 | 
			
		||||
          subStepSolve.isComplex = operand1.isComplex;
 | 
			
		||||
        } else {
 | 
			
		||||
          // else parse it as a number and add it to the subStep details
 | 
			
		||||
          if (operand1 || operand1 == 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -130,6 +133,7 @@ export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep =>
 | 
			
		|||
          subStepSolve.details += operand2.details;
 | 
			
		||||
          subStepSolve.containsCrit = subStepSolve.containsCrit || operand2.containsCrit;
 | 
			
		||||
          subStepSolve.containsFail = subStepSolve.containsFail || operand2.containsFail;
 | 
			
		||||
          subStepSolve.isComplex = subStepSolve.isComplex || operand2.isComplex;
 | 
			
		||||
        } else {
 | 
			
		||||
          // else parse it as a number and add it to the subStep details
 | 
			
		||||
          oper2 = parseFloat(operand2.toString());
 | 
			
		||||
| 
						 | 
				
			
			@ -193,6 +197,7 @@ export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep =>
 | 
			
		|||
    stepSolve.details = tempConf.details;
 | 
			
		||||
    stepSolve.containsCrit = tempConf.containsCrit;
 | 
			
		||||
    stepSolve.containsFail = tempConf.containsFail;
 | 
			
		||||
    stepSolve.isComplex = tempConf.isComplex;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // If this was a nested call, add on parens around the details to show what math we've done
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,6 +60,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
        details: '*e*',
 | 
			
		||||
        containsCrit: false,
 | 
			
		||||
        containsFail: false,
 | 
			
		||||
        isComplex: false,
 | 
			
		||||
      };
 | 
			
		||||
    } else if (curMathConfStr.toLowerCase() === 'lemon' || curMathConfStr.toLowerCase() === '🍋') {
 | 
			
		||||
      mathConf[i] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -67,6 +68,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
        details: '🍋',
 | 
			
		||||
        containsCrit: false,
 | 
			
		||||
        containsFail: false,
 | 
			
		||||
        isComplex: false,
 | 
			
		||||
      };
 | 
			
		||||
    } else if (curMathConfStr.toLowerCase() === 'fart' || curMathConfStr.toLowerCase() === '💩') {
 | 
			
		||||
      mathConf[i] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -74,6 +76,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
        details: '💩',
 | 
			
		||||
        containsCrit: false,
 | 
			
		||||
        containsFail: false,
 | 
			
		||||
        isComplex: false,
 | 
			
		||||
      };
 | 
			
		||||
    } else if (curMathConfStr.toLowerCase() === 'sex' || curMathConfStr.toLowerCase() === '🍆🍑' || curMathConfStr.toLowerCase() === '🍑🍆') {
 | 
			
		||||
      mathConf[i] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +84,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
        details: '( ͡° ͜ʖ ͡°)',
 | 
			
		||||
        containsCrit: false,
 | 
			
		||||
        containsFail: false,
 | 
			
		||||
        isComplex: false,
 | 
			
		||||
      };
 | 
			
		||||
    } else if (curMathConfStr.toLowerCase() === 'inf' || curMathConfStr.toLowerCase() === 'infinity' || curMathConfStr.toLowerCase() === '∞') {
 | 
			
		||||
      // If the operand is the constant Infinity, create a SolvedStep for it
 | 
			
		||||
| 
						 | 
				
			
			@ -89,6 +93,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
        details: '∞',
 | 
			
		||||
        containsCrit: false,
 | 
			
		||||
        containsFail: false,
 | 
			
		||||
        isComplex: false,
 | 
			
		||||
      };
 | 
			
		||||
    } else if (curMathConfStr.toLowerCase() === 'pi' || curMathConfStr.toLowerCase() === '𝜋') {
 | 
			
		||||
      // If the operand is the constant pi, create a SolvedStep for it
 | 
			
		||||
| 
						 | 
				
			
			@ -97,6 +102,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
        details: '𝜋',
 | 
			
		||||
        containsCrit: false,
 | 
			
		||||
        containsFail: false,
 | 
			
		||||
        isComplex: false,
 | 
			
		||||
      };
 | 
			
		||||
    } else if (curMathConfStr.toLowerCase() === 'pie' || curMathConfStr.toLowerCase() === '🥧') {
 | 
			
		||||
      // If the operand is pie, pi*e, create a SolvedStep for e and pi (and the multiplication symbol between them)
 | 
			
		||||
| 
						 | 
				
			
			@ -105,6 +111,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
        details: '𝜋',
 | 
			
		||||
        containsCrit: false,
 | 
			
		||||
        containsFail: false,
 | 
			
		||||
        isComplex: false,
 | 
			
		||||
      };
 | 
			
		||||
      mathConf.splice(
 | 
			
		||||
        i + 1,
 | 
			
		||||
| 
						 | 
				
			
			@ -116,6 +123,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
            details: '*e*',
 | 
			
		||||
            containsCrit: false,
 | 
			
		||||
            containsFail: false,
 | 
			
		||||
            isComplex: false,
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
      );
 | 
			
		||||
| 
						 | 
				
			
			@ -184,6 +192,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
        containsCrit: tempSolved.containsCrit,
 | 
			
		||||
        containsFail: tempSolved.containsFail,
 | 
			
		||||
        initConfig: cmd,
 | 
			
		||||
        isComplex: tempSolved.isComplex,
 | 
			
		||||
      },
 | 
			
		||||
    ],
 | 
			
		||||
    countDetails,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue