forked from mico/idle_moloch
55 lines
2.1 KiB
Solidity
55 lines
2.1 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.13;
|
|
|
|
import {Army} from "../src/RaidGeldStructs.sol";
|
|
|
|
library RaidGeldUtils {
|
|
uint256 public constant PRECISION = 10000;
|
|
uint256 constant PRICE_FACTOR = 11500;
|
|
|
|
// base price * (0.00666) * 11 per each next unit
|
|
uint256 constant MOLOCH_DENIER_PROFIT = 2533;
|
|
uint256 constant APPRENTICE_PROFIT = 27863;
|
|
uint256 constant ANOINTED_PROFIT = 306493;
|
|
uint256 constant CHAMPION_PROFIT = 3371423;
|
|
|
|
// each costs 10 times plus a bit more
|
|
uint256 constant MOLOCH_DENIER_BASE_COST = 380000;
|
|
uint256 constant APPRENTICE_BASE_COST = 3420000;
|
|
uint256 constant ANOINTED_BASE_COST = 30096000;
|
|
uint256 constant CHAMPION_BASE_COST = 255816000;
|
|
|
|
function calculateUnitPrice(uint8 unit, uint16 currentLevel, uint16 units) internal pure returns (uint256) {
|
|
require(unit <= 3, "No matching unit found");
|
|
uint256 rollingPriceCalculation = MOLOCH_DENIER_BASE_COST;
|
|
uint256 price = 0;
|
|
if (unit == 1) {
|
|
rollingPriceCalculation = APPRENTICE_BASE_COST;
|
|
} else if (unit == 2) {
|
|
rollingPriceCalculation = ANOINTED_BASE_COST;
|
|
} else if (unit == 3) {
|
|
rollingPriceCalculation = CHAMPION_BASE_COST;
|
|
}
|
|
|
|
// Each level costs 15% more than previous
|
|
for (uint256 i = 0; i < currentLevel + units; i++) {
|
|
if (i >= currentLevel) {
|
|
price += rollingPriceCalculation;
|
|
}
|
|
rollingPriceCalculation = rollingPriceCalculation * PRICE_FACTOR / PRECISION;
|
|
}
|
|
return price;
|
|
}
|
|
|
|
function calculateProfitsPerSecond(Army memory army) internal pure returns (uint256) {
|
|
// Each next unit scales progressivelly better
|
|
|
|
uint256 moloch_denier_profit = army.moloch_denier.level * MOLOCH_DENIER_PROFIT;
|
|
uint256 apprentice_profit = army.apprentice.level * APPRENTICE_PROFIT;
|
|
uint256 anointed_profit = army.anointed.level * ANOINTED_PROFIT;
|
|
uint256 champion_profit = army.champion.level * CHAMPION_PROFIT;
|
|
|
|
return moloch_denier_profit + apprentice_profit + anointed_profit + champion_profit;
|
|
}
|
|
}
|