Widget:PriceCalculator: Difference between revisions

From bg3.wiki
Jump to navigation Jump to search
(Create initial)
 
(Use math.round)
 
(17 intermediate revisions by the same user not shown)
Line 1: Line 1:
<includeonly>
<includeonly>
<div id="bg3wiki-price-calculator-form">
<div id="bg3wiki-price-calculator">
<label for="item-value">Item value</label> <input type="number" id="item-value" size="4"/>
    <table id="bg3wiki-price-calculator-form">
<label for="persuasion-mod">Persuasion modifier</label> <input type="number" id="persuasion-mod" size="2"/>
        <tr>
<label for="attitude">Attitude</label> <input type="number" id="attitude" size="3"/>
            <th><label for="item-value">Item value</label></th><td><input type="number" id="item-value" size="7" value="1000"/></td>
<label for="difficulty">Difficulty</label>
        </tr>
<input type="radio" name="difficulty" id="difficulty-explorer" value="explorer" required/><label for="difficulty-explorer">Explorer</label>
        <tr>
<input type="radio" name="difficulty" id="difficulty-balanced" value="balanced" checked /><label for="difficulty-balanced">Balanced</label>
            <th><label for="persuasion-mod">Persuasion modifier</label></th><td><input type="number" id="persuasion-mod" size="3" value="0"/></td>
<input type="radio" name="difficulty" id="difficulty-tactician" value="tactician" /><label for="difficulty-tactician">Tactician</label>
        </tr>
<input type="button" value="Submit" />
        <tr>
            <th><label for="attitude">Attitude</label></th><td><input type="number" id="attitude" size="4"/></td>
        </tr>
        <tr>
            <th><label for="difficulty">Difficulty</label></th><td>
                <input type="radio" name="difficulty" id="difficulty-explorer" value="explorer" required/><label for="difficulty-explorer">Explorer</label>
                <input type="radio" name="difficulty" id="difficulty-balanced" value="balanced" checked /><label for="difficulty-balanced">Balanced</label>
                <input type="radio" name="difficulty" id="difficulty-tactician" value="tactician" /><label for="difficulty-tactician">Tactician</label>
            </td>
        </tr>
        <tr>
            <th></th><td><input type="button" value="Submit" id="submit" /></td>
        </tr>
    </table>
    <hr/>
    <div id="bg3wiki-price-calculator-result"></div>
</div>
</div>
<script>
<script>
    document.querySelector("#bg3wiki-price-calculator-form #submit").addEventListener("click", do_calculation);
    function sanitize(input) {
        // a null-y input or a blank string should be treated as 0
        if (input == "" || input == null) {
            return 0;
        }
        return +input;
    }
    function get_difficulty_mod(difficulty) {
        switch (difficulty) {
            case "explorer": return 0.5;
            case "balanced": return 0;
            case "tactician": return -0.5;
            default: return 0;
        }
    }
    function create_output_row(header, content) {
        let row = document.createElement('tr');
        row.appendChild(document.createElement('th')).textContent = header;
        row.appendChild(document.createElement('td')).textContent = content;
        return row;
    }
    let output = document.querySelector('#bg3wiki-price-calculator-result');
    function do_calculation() {
        let get_value = (selector) => document.querySelector(selector).value;
        let item_value = sanitize(get_value('#item-value'));
        let persuasion_mod = sanitize(get_value('#persuasion-mod')) * 0.1;
        let attitude = sanitize(get_value('#attitude')) * 0.005;
        let difficulty = document.querySelector('input[name="difficulty"]:checked').value;
        difficulty = get_difficulty_mod(difficulty)
       
        let price_mod = Math.max(1.0, 2.5 - persuasion_mod - attitude - difficulty);
        let price_buy = Math.round(item_value * price_mod);
        let price_sell = Math.round(item_value / price_mod);
        output.textContent = '';
        let table = document.createElement('table');
        table.classList.add('wikitable');
        table.appendChild(create_output_row('Base item price', item_value));
        table.appendChild(create_output_row('Item price (selling)', price_sell));
        table.appendChild(create_output_row('Item price (buying)', price_buy));
        output.appendChild(table);
    }
</script>
</script>
</includeonly>
</includeonly>
<noinclude>{{#widget:PriceCalculator}}</noinclude>
<noinclude>{{PageSeo
| title = Widget:PriceCalculator
| description = Price calculator for determining the buy & sell price of items.
}}{{#widget:PriceCalculator}}</noinclude>

Latest revision as of 22:37, 22 November 2023