User:NewZimiaGov/sandbox

From MicrasWiki
Jump to navigationJump to search

local p = {}

local function getCurrentDate()

   local startDate = os.time({year = 1999, month = 8, day = 6})
   local secondsInDay = 86400
   local daysPerYear = 183
   local currentDate = os.time()
   local totalDaysElapsed = math.floor((currentDate - startDate) / secondsInDay)
   local yearFraction = totalDaysElapsed / daysPerYear
   local psscYear = math.floor(yearFraction)
   local dayOfYear = math.floor((yearFraction - psscYear) * daysPerYear) + 1
   local month, dayOfMonth
   if dayOfYear <= 61 then
       month = 1
       dayOfMonth = dayOfYear
   elseif dayOfYear <= 122 then
       month = 2
       dayOfMonth = dayOfYear - 61
   else
       month = 3
       dayOfMonth = dayOfYear - 122
   end
   return string.format("%d/%d/%d PSSC", dayOfMonth, month, psscYear), dayOfMonth, month

end

-- Initial figures for Regional Investors local investors = {

   {name = "Vaeringheim Regional Investor", stocks = 17424},
   {name = "Alpazkigz Regional Investor", stocks = 16214},
   {name = "Odiferia Regional Investor", stocks = 14718},
   {name = "Hafaan Regional Investor", stocks = 3630},
   {name = "Jeseri Regional Investor", stocks = 1870},
   {name = "Hatch Ministry Regional Investor", stocks = 7810},
   {name = "New South Jangsong Division", stocks = 11085},
   {name = "Haifan Bassaridia Division", stocks = 12500},

}

-- Possible reasons for increase or decrease, specifically tied to the General Port local increaseReasons = {

   "Improved logistics at the General Port attracted new investors.",
   "An influx of goods from Delphica boosted trade volume at the port.",
   "High demand for Noctic-Rabrev exports raised investor confidence in the port's performance.",
   "Completion of a new shipping lane connecting Nexa to the General Port increased activity.",
   "Successful negotiations with Erythros merchants expanded trade opportunities.",
   "The recent Festival of Light in Vaeringheim drove significant port activity.",
   "High attendance at the Bassaridia Trade Symposium enhanced the port's reputation.",
   "Discovery of new mineral resources near Acheron increased export potential through the port.",
   "A surge in ceremonial wine exports from the Blood Vineyards of the Far North bolstered port operations.",
   "Efficient cargo handling innovations improved investor sentiment at the General Port.",
   "Seasonal agricultural exports from the Plains of Jogi saw a sharp increase.",
   "High sales of pearl and abalone products boosted port activity.",
   "Introduction of luxury goods from Tel-Amin attracted high-end investors.",
   "The expansion of the General Port's capacity in Suncliff enhanced its competitiveness.",
   "Improved relations with Maskmakers Guild merchants stabilized trade routes.",
   "An increase in fishing yields around Lake Morovia led to greater port activity.",
   "Enhanced security measures at the General Port reduced piracy concerns.",
   "Growing cultural appreciation for sacred Horehound exports boosted regional confidence.",
   "Trade agreements with neighboring cities, including Saluria, expanded port usage.",
   "High demand for silk and luxury textiles from Seamstresses of Rouge improved port revenue.",
   "The Moonlit Tide celebration increased ceremonial goods traffic through the port.",
   "Launch of new Garganid fertilizer shipments attracted agricultural investors.",
   "Rising global interest in sacred resin exports enhanced the port's activity.",
   "Successful marketing campaigns highlighted the General Port's strategic importance.",
   "Completion of high-speed rail connections to key cities improved trade efficiency at the port."

}

local decreaseReasons = {

   "Pirate raids in the Strait of Haifa disrupted shipments to the General Port.",
   "Unfavorable weather conditions delayed agricultural exports from the Plains of Jogi.",
   "Labor shortages in the General Port caused delays in cargo handling.",
   "A major fire in Salurian sacred groves reduced resin exports through the port.",
   "Rising costs of Noctic-Rabrev cultivation impacted investor confidence.",
   "Unrest in Jangsong Province disrupted camel meat shipments to the port.",
   "Currency fluctuations in Vaeringheim affected trade stability at the General Port.",
   "Economic sanctions on neighboring cities reduced export activity.",
   "Decline in ceremonial artifact production reduced goods traffic through the port.",
   "Cultural disputes over Horehound cultivation caused delays in exports.",
   "Counterfeit relics discovered in Nexa harmed the port's reputation.",
   "High demand for fishing yields outpaced supply, reducing exports through the port.",
   "Decline in pearl quality from Anterran sources lowered investor interest.",
   "Shortage of ceremonial wine from the Blood Vineyards of the Far North hurt exports.",
   "Unrest among Maskmaker merchants disrupted key trade agreements.",
   "Reduced demand for silk textiles from the Seamstresses of Rouge impacted port activity.",
   "Collapse of a trade agreement with Tel-Amin reduced port volume.",
   "Seasonal labor shortages in agricultural hubs decreased port shipments.",
   "Disruptions in Suncliff Fisheries slowed aquatic exports through the port.",
   "Discovery of alternative shipping routes bypassed the General Port.",
   "Economic downturn in Lunalis Sancta affected investor interest.",
   "Unresolved piracy concerns in Haifan waters harmed trade confidence.",
   "Failure to secure key trade deals during the Bassaridia Trade Symposium reduced traffic.",
   "Natural disasters near Acheron destroyed key trade routes to the port.",
   "Sabotage of port infrastructure caused significant delays in shipments."

}

-- Function to determine tier based on Stocks at End local function determineTier(stocksAtEnd)

   if stocksAtEnd > 12500 then
       return "Tier I"
   elseif stocksAtEnd >= 5000 and stocksAtEnd <= 12500 then
       return "Tier II"
   else
       return "Tier III"
   end

end

-- Function to simulate daily stock activity local function simulateDailyActivity(investor)

   local buyStocks = math.random(0, 500)
   local sellStocks = math.random(0, 500)
   investor.stocks = investor.stocks + buyStocks - sellStocks
   return buyStocks, sellStocks

end

-- Function to generate a reason for change local function getReason(change)

   if change == "Increased" then
       return increaseReasons[math.random(#increaseReasons)]
   elseif change == "Decreased" then
       return decreaseReasons[math.random(#decreaseReasons)]
   else
       return "Market activity remained stable."
   end

end

function p.generateTable()

   local date, _, _ = getCurrentDate()
   local totalMarketValueAtStart = 0
   local totalMarketValueAtEnd = 0
   local stockPrice = 3 -- Stock price in Polis
   local wikitable = "{| class=\"wikitable\"\n! Date (Day/Month/Year PSSC) !! Investor !! Tier !! Stocks at Start !! Value at Start !! Stocks Bought !! Stocks Sold !! Stocks at End !! Value at End !! Change !! Reason\n"
   for _, investor in ipairs(investors) do
       local stocksAtStart = investor.stocks
       local valueAtStart = stocksAtStart * stockPrice
       local buyStocks, sellStocks = simulateDailyActivity(investor)
       local stocksAtEnd = investor.stocks
       local valueAtEnd = stocksAtEnd * stockPrice
       local tier = determineTier(stocksAtEnd)
       local change = "Increased"
       if stocksAtEnd < stocksAtStart then
           change = "Decreased"
       elseif stocksAtEnd == stocksAtStart then
           change = "No Change"
       end
       local reason = getReason(change)
       totalMarketValueAtStart = totalMarketValueAtStart + valueAtStart
       totalMarketValueAtEnd = totalMarketValueAtEnd + valueAtEnd
       wikitable = wikitable .. string.format("|-\n| %s || %s || %s || %d || %d Polis || %d || %d || %d || %d Polis || %s || %s\n",
           date, investor.name, tier, stocksAtStart, valueAtStart, buyStocks, sellStocks, stocksAtEnd, valueAtEnd, change, reason)
   end
   wikitable = wikitable .. string.format("|-\n| colspan=4 | Total Market Value at Start || %d Polis || colspan=2 | || Total Market Value at End || %d Polis || ||\n",
       totalMarketValueAtStart, totalMarketValueAtEnd)
   wikitable = wikitable .. "|}"
   return wikitable

end

return p